Resources
OpenAPI specification
The machine-readable description of the API, served live from the API itself.
The specification is served without authentication, on purpose. An integrator reads the contract before they have a key, and gating it is the friction that loses the integration.
Fetching it
The document is OpenAPI 3.1.0, returned unwrapped at the root because that is what every tool expects.
Responses are cacheable for five minutes. Fetch it as part of your build rather than on every application start.
Generating a client
Any OpenAPI generator will consume it. Treat generated code as a starting point: the generator cannot express the idempotency contract, the signature verification, or the fact that a 202 can carry rejected recipients.
SMSend extensions
The document carries three vendor extensions holding contract details that OpenAPI has no standard field for:
- Every error code with its HTTP status and whether it is retryable — the same table as the errors guide, in machine-readable form.
- The signature specification, the ordering contract, the delivery and retry policy, and the list of events.
- The current and supported versions, the deprecation policy, and what does and does not count as a breaking change.
Where the two disagree, believe this site
The generated schemas are less complete than the API's actual responses: several objects return fields the specification does not list, and the webhook management endpoints carry no request or response schemas at all. Nothing documented here is absent from the API, but the reverse is not true — so use the specification for tooling and this reference for the contract.