Hellio Messaging
Docs /Errors

Errors

Every error returns a JSON body with a human message and a stable, machine-readable error code you can branch on.

{
  "message": "This send would exceed your daily spend limit.",
  "error": "spend_limit_exceeded"
}

HTTP status codes

What each status means at a glance.

StatusMeaning
200 / 201 / 202Success. 202 means the work was accepted and queued.
401Missing or invalid bearer token.
402Your wallet cannot cover the request.
403Blocked by a token scope, the IP allowlist, a spend cap, or routing rules.
404The resource does not exist (or is not yours).
409An identical idempotent request is still in flight.
422Validation failed (bad input, unapproved sender, no valid recipients).
429Rate limited. Retry after the Retry-After header.

Error codes

The error field values you may receive, and how to handle them.

CodeStatusWhat it means / how to fix
insufficient_balance402Top up your wallet, then retry.
spend_limit_exceeded403A daily or monthly spend cap was hit. The body includes the period.
ip_not_allowed403Your source IP is not on the account allowlist.
traffic_not_routable422No route is configured for this traffic type. The body includes the traffic_type.
sender_not_approved422Use an approved sender ID, or submit one for approval.
no_valid_recipients422None of the supplied numbers were valid.
no_valid_numbers422None of the supplied lookup numbers were valid.
invalid_recipient422The destination number was not in a usable format.
invalid_request422The request was malformed for this endpoint.
audio_error422The voice text could not be synthesized, or audio_url could not be fetched.
throttled429Too many requests. Wait for Retry-After seconds.
idempotency_conflict409A request with the same Idempotency-Key is still processing.
not_found404The resource does not exist or is not yours.

Handling errors

Branch on the code, not the message.

Messages are for humans and may change; the error code is stable. Treat any 5xx as transient and retry with backoff. For 402 and 403, surface the message to the account owner.

Tip: pair every side-effecting request with an Idempotency-Key so a retry after a network error never double-sends. See Authentication.
Was this page helpful? Thanks for the feedback! Still stuck? Talk to our team