Twilio - Api OpenAPI spec score

Octri scored the public spec at https://raw.githubusercontent.com/twilio/twilio-oai/main/spec/json/twilio_api_v2010.json for what a code generator can do with it. This is a reading of the document, not a grade of the API.

7.3/ 10
Mixed

197 operations · 150 models · 75 tags · OpenAPI 3.0.1

Scored 22 October 2026 · fingerprint bfdf249a1298… · spec version 1.0.0 · server api.twilio.com

Unchanged since 7 October 2026.

Where the points went

Every rule, heaviest first, with what it cost this document, how much of the surface it touched, and where. The rule id links to what that rule checks.

RuleWeightResultSurfaceLocations
Successful responses declare a schemaresponse-schema2.00.4 lost1 of 197 operationsGET /2010-04-01/Accounts/{AccountSid}/Recordings/{ReferenceSid}/AddOnResults/{AddOnResultSid}/Payloads/{PayloadSid}/Data.json
Shared models live in components and are $ref'dshared-schemas-referenced2.00.4 lost2 of 197 operationsmemory://audit/openapi.yaml#/paths/~12010-04-01~1Accounts~1{AccountSid}~1Calls~1{CallSid}~1Recordings~1{Sid}.json/postmemory://audit/openapi.yaml#/paths/~12010-04-01~1Accounts~1{Sid}.json/post
Generated public names do not collideoperation-id-unique2.0Clean197 operations cleanNothing found
Every path placeholder has a parameterpath-parameters-declared1.5Clean197 operations cleanNothing found
Every operation declares an operationIdoperation-id-present1.0Clean197 operations cleanNothing found
operationIds read as method namesoperation-id-naming1.0Clean197 operations cleanNothing found
Operations carry a summary or descriptionoperation-documented1.00.4 lost47 of 197 operationsGET /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/Mobile.jsonGET /2010-04-01/Accounts/{AccountSid}/Usage/Records/Yearly.jsonGET /2010-04-01/Accounts/{AccountSid}/AvailablePhoneNumbers/{CountryCode}/TollFree.jsonand 44 more
Request bodies are documentedrequest-body-documented1.00.3 lost23 of 197 operationsPOST /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/Mobile.jsonPOST /2010-04-01/Accounts/{AccountSid}/Messages.jsonPOST /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Payments.jsonand 20 more
Failure responses are declarederror-responses1.01.0 lost195 of 197 operationsGET /2010-04-01/Accounts/{AccountSid}/Usage/Triggers.jsonGET /2010-04-01/Accounts/{AccountSid}/Addresses.jsonGET /2010-04-01/Accounts/{AccountSid}/Usage/Records.jsonand 192 more
Operations are taggedoperation-tagged1.0Clean197 operations cleanNothing found
No duplicate or equivalent pathsduplicate-paths1.0Clean121 paths cleanNothing found
Authentication is describedsecurity-declared1.0CleanDeclaredNothing found
Parameters explain their purposeparameters-documented0.750.17 lost7 of 197 operationsDELETE /2010-04-01/Accounts/{AccountSid}/SigningKeys/{Sid}.json#path:SidGET /2010-04-01/Accounts/{AccountSid}/SigningKeys/{Sid}.json#path:SidPOST /2010-04-01/Accounts/{AccountSid}/SigningKeys/{Sid}.json#path:AccountSidand 4 more
A server URL is declaredserver-url0.5CleanDeclaredNothing found

What 7.3 means for an SDK

A mixed reading, and the three rules that decide most of it.

The client compiles and works. Callers will feel the soft spots: a few methods that return an untyped value, arguments with no hint on them, a namespace or two named after a path segment rather than a resource.

Three rules carry six of the 10 points between them. On this document they took 0.83.

−0.4

Successful responses declare a schema

1 of 197 operations

−0.4

Shared models live in components and are $ref'd

2 of 197 operations

Clean

Generated public names do not collide

197 operations clean

What to change first

Every rule that deducted, in the order they cost.

  1. 0.4 lost

    Successful responses declare a schema

    Give the success response a schema, or a $ref to one in components. A 204 needs nothing.

    Inside Octri this one has a one-click fix.

  2. 0.4 lost

    Shared models live in components and are $ref'd

    Move the shape into components.schemas once and $ref it from each operation that returns or accepts it.

  3. 0.4 lost

    Operations carry a summary or description

    Write one sentence of summary. It lands on the reference page and in the SDK's doc comment.

    Inside Octri this one has a one-click fix.

  4. 0.3 lost

    Request bodies are documented

    Describe the body, or the fields inside it. Field-level prose is the one that reaches the SDK's arguments.

    Inside Octri this one has a one-click fix.

  5. 1.0 lost

    Failure responses are declared

    Declare the failures you actually return, or one `default` response carrying your error shape.

  6. 0.17 lost

    Parameters explain their purpose

    Describe what the parameter does and what a valid value looks like. One line each.

    Inside Octri this one has a one-click fix.

The spec at raw.githubusercontent.com is public. Octri keeps the `info` block, the score, and up to five sample finding locations per rule. The document itself is not stored and is not served from here. The audit predicts what an SDK generator can do with the description; it is not a security review, an uptime measurement or a critique of the API’s design. This page is not affiliated with Twilio - Api or Twilio Support.