Errors

Errors

Error codes and the OpenAPI file.

Errors

HTTP 4xx/5xx
{
  "code": "INVALID_TO",
  "message": "INVALID_TO",
  "retryable": false,
  "request_id": "…"
}
401 UNAUTHORIZEDKey missing or invalid.
403 ACCOUNT_SUSPENDEDAccount is suspended.
403 FORBIDDENKey belongs to another session, or instance_id does not match the key.
403 SUBSCRIPTION_INACTIVENo active subscription.
403 SUBSCRIPTION_EXPIREDSubscription period ended.
403 TRIAL_MESSAGE_LIMITTrial message limit reached.
404 NOT_FOUNDResource not found (message, session, or an undecided unknown message).
404 MEDIA_NOT_FOUNDmedia_id not found or expired.
409 IDEMPOTENCY_CONFLICTSame Idempotency-Key used with a different body.
409 CANNOT_CANCELMessage is not queued or sending already started.
413 MEDIA_TOO_LARGEFile exceeds the allowed size.
422 VALIDATION_ERRORInvalid body or missing required field.
422 INVALID_TOInvalid recipient number.
422 INVALID_MEDIAProvide media_id or url (exactly one).
422 INVALID_TEXTText is empty or longer than 8192 characters.
422 INVALID_CAPTIONcaption is longer than 2048 characters.
422 CONFIRM_DUPLICATE_REQUIREDresend requires confirm_duplicate = true.
429 RATE_LIMITEDRequest limit exceeded — wait the seconds in Retry-After, then retry.
503 STORE_FAILEDTemporary 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