Errors
TelAPI follows a small, predictable error model so your integration can branch on shape rather than free-text.
Envelope
Errors are JSON bodies with at least:
{
"error": {
"code": "STRING_CONSTANT",
"message": "Human-readable summary.",
"requestId": "uuid"
}
}
codeis a stable identifier you can switch on. New codes are added over releases but existing ones are not silently repurposed.messageis for humans. Don't parse it.requestIdis the value to send when filing a ticket — it lets the platform operator find the request in SigNoz monitoring quickly.
Detail fields (e.g. field-level validation errors) may appear alongside the standard ones depending on the endpoint. The generated reference will enumerate them per-endpoint; treat unknown extra fields as informational.
Common status codes
| Status | When you'll see it | Retryable? |
|---|---|---|
400 | Malformed request — missing required field, invalid shape, unknown endpoint ID. | No (fix the request). |
401 | Missing, invalid, or rotated API key — see Authentication. | No (fix credentials). |
403 | Key valid but lacks the required scope. | No (rebuild key with right scopes). |
404 | Resource doesn't exist or isn't visible to this tenant. | No. |
409 | State conflict — e.g. starting a session against an archived flow, or a unique-key collision. | Sometimes (after reconciling state). |
429 | Daily / per-minute rate limit hit. | Yes, with backoff. |
500 | Internal error — the platform failed in a way it didn't expect. Include the requestId when reporting. | Yes, with backoff and idempotency. |
502/503/504 | Transient platform unavailability or upstream gateway issues. | Yes, with exponential backoff. |
Retry policy you should ship
For idempotent operations (any GET, plus mints/reads of call tokens):
- Retry on
429,500,502,503,504. - Exponential backoff with jitter, capped (e.g. start at 250 ms, double, max 8 s, give up after 5 attempts).
- Surface the final failure to your caller — don't silently swallow.
For state-changing operations:
- Same retry policy, but ensure the operation is idempotent at your side (use a client-side request ID so duplicate attempts collapse).
- Do not retry on
400 / 403 / 404 / 409— these need code or config changes, not more attempts.
Errors that look like API errors but aren't
| Symptom | Where the issue actually is |
|---|---|
502 from your own load balancer | Your infra in front of TelAPI. Check there first. |
401 only from one geography | Likely a key restriction or DNS/proxy oddity at your edge. |
| Timeouts but TelAPI logs show 200s in SigNoz | Network path between you and TelAPI. The request did succeed; your retry will double-create. |
When in doubt, capture the requestId and ask your platform operator to look it up in SigNoz before assuming the API itself failed.
See also
- Authentication — every
401resolution lives here. - Scopes — every
403resolution lives here. - Getting help — what to attach when filing an API issue.