Errors

Stable error shape with machine-readable codes.

The TelEcho API returns errors as JSON with a stable envelope so your SDK or client code can switch on error.code:

1{
2 "error": {
3 "type": "authentication_error",
4 "code": "invalid_api_key",
5 "message": "The API key provided is invalid."
6 }
7}

HTTP status codes

StatusMeaning
200Request succeeded
201Resource created (e.g. a call was started)
400Bad request — invalid params, malformed body, missing required field
401Authentication failed — missing, malformed, revoked, or expired API key
402Payment required — your subscription is past due, cancelled, or out of minutes
404Resource not found, or not in your org
429Rate limit exceeded (details)
5xxTelEcho infrastructure issue — safe to retry with exponential backoff

Error codes

Authentication

CodeWhen
missing_api_keyNo Authorization header sent.
invalid_api_keyKey has wrong format, doesn’t exist, or was deleted.
revoked_api_keyKey was revoked from the dashboard.
expired_api_keyKey’s expires_at is in the past.

Request validation

CodeWhen
invalid_idA tel_*_* ID couldn’t be parsed.
invalid_targetBoth or neither of agent_id/workflow_id were provided.
invalid_cursorThe cursor parameter is malformed or stale.
invalid_dateA date filter isn’t valid ISO 8601.
invalid_filterA filter value isn’t in the allowed enum.

Resource state

CodeWhen
agent_not_found / workflow_not_found / phone_number_not_foundResource doesn’t exist or belongs to another org.
agent_inactive / workflow_inactive / phone_number_inactiveResource exists but is in a non-active state.
no_outbound_trunkThe phone number isn’t configured for outbound calling.
no_routing_targetNo agent or workflow attached to the phone number, and none provided.

Billing & telephony

CodeWhen
call_blockedSubscription expired, cancelled, or out of minutes. Returns 402.
outbound_call_failedLiveKit / SIP error during outbound dial. Returns 502.
rate_limit_per_minute / rate_limit_per_hourExceeded your key’s rate limit. Returns 429.

Retry strategy

  • 429 — wait for the time in the Retry-After header before retrying.
  • 5xx — exponential backoff: 1s, 2s, 4s, 8s … up to 30s.
  • 4xx (other than 429) — don’t retry; fix the request.