Skip to content

API reference

API reference

Eleven endpoints across five resources. Every one is JSON over HTTPS, authenticated with an API key.

Base URL

https://api.smsend.net/public/v1

Every path in this reference is relative to that base. The version is part of the path and is never negotiated through a header.

Response envelope

Successful responses wrap their payload in a data object. Failures wrap theirs in an error object. Nothing is ever returned at the root.

Response
{
  "data": {
    "batch_id": "01K3F7XQZ8V2N4M6P8R0T5CJWE",
    "status": "QUEUED"
  }
}
Errors
{
  "error": {
    "code": "INSUFFICIENT_FUNDS",
    "message": "Wallet balance 0 XOF is below the 23700 XOF required.",
    "retryable": false,
    "detail": {},
    "request_id": "01K3F7XQZ8V2N4M6P8R0T5CJWE"
  }
}

The one exception is the OpenAPI document, which is returned unwrapped because every tool that consumes it expects the specification at the root.

Internationalization & language

The SMSend API dynamically resolves localized content, error messages, and descriptions based on the client's request headers. Wire parameters and payload fields never use language suffixes (such as description_fr or description_en).

Endpoints

Forward compatibility

SMSend adds to the current version without a bump. Two obligations fall on your client, and both are relied on when non-breaking changes ship:

  • Tolerate unknown fields. Optional fields are added to responses and webhook payloads without a version change; a strict deserialiser that rejects them will break on a day nothing was announced.
  • Tolerate unknown enum values. New statuses, rejection reasons and event types are added without a version change, so switch with a default branch rather than throwing.