Errors
Error codes and the OpenAPI file.
Errors
HTTP 4xx/5xx
{
"code": "INVALID_TO",
"message": "INVALID_TO",
"retryable": false,
"request_id": "…"
} 401 UNAUTHORIZED | Key missing or invalid. |
403 ACCOUNT_SUSPENDED | Account is suspended. |
403 FORBIDDEN | Key belongs to another session, or instance_id does not match the key. |
403 SUBSCRIPTION_INACTIVE | No active subscription. |
403 SUBSCRIPTION_EXPIRED | Subscription period ended. |
403 TRIAL_MESSAGE_LIMIT | Trial message limit reached. |
404 NOT_FOUND | Resource not found (message, session, or an undecided unknown message). |
404 MEDIA_NOT_FOUND | media_id not found or expired. |
409 IDEMPOTENCY_CONFLICT | Same Idempotency-Key used with a different body. |
409 CANNOT_CANCEL | Message is not queued or sending already started. |
413 MEDIA_TOO_LARGE | File exceeds the allowed size. |
422 VALIDATION_ERROR | Invalid body or missing required field. |
422 INVALID_TO | Invalid recipient number. |
422 INVALID_MEDIA | Provide media_id or url (exactly one). |
422 INVALID_TEXT | Text is empty or longer than 8192 characters. |
422 INVALID_CAPTION | caption is longer than 2048 characters. |
422 CONFIRM_DUPLICATE_REQUIRED | resend requires confirm_duplicate = true. |
429 RATE_LIMITED | Request limit exceeded — wait the seconds in Retry-After, then retry. |
503 STORE_FAILED | Temporary error — retry with the same Idempotency-Key. |
retryable = true means repeating the same request later is safe. Keep request_id when contacting support.
OpenAPI
GET /openapi.yaml