Skip to content
Start free

Developers · API

v1

Errors & limits

Every failure response has the same shape.

{
  "error": "A human-readable reason",
  "code": "MACHINE_READABLE_CODE"
}

error is always present; code is added only to failures your program needs to branch on. Branch on code; log and display error.

HTTP status codes

StatusMeaningWhat to do
400The request is malformedRead error and fix the request. Retrying gives the same result
401The key is missing, malformed or no longer validCheck the header and key; if it persists, email support@livespeech.ai
402Quota exceededAsk support@livespeech.ai to raise it
403Missing scope, or a line that belongs to another accountAsk for the scope, or check the line identifier
404No webhook registeredRegister one first
409Conflicts with the current stateHandle by code, below
422The value itself breaks a policy (webhook URL or events)Fix the value and send again
429Too many requestsWait a moment and retry
502Termination held — a number is still attachedEmail support@livespeech.ai with the tenantId to release the number, then retry
5xxA temporary server problemRetry with a delay

Error codes

codeStatusWhenWhat to do
EXTERNAL_ID_EXISTS409A line with this externalId already existsFind it in the list and use it
TENANT_QUOTA_EXCEEDED402The line quota is exceededAsk support@livespeech.ai to raise it
IDEMPOTENCY_KEY_MISMATCH409The same idempotency key was reused with a different bodyUse a new key
IDEMPOTENCY_IN_PROGRESS409The first request with this key is still runningRetry shortly with the same key
ALREADY_TERMINATED409A termination was recorded but its delegation release had not finished; this retry ran the release againNothing to do. Once termination is complete, a repeat DELETE answers 403 instead
CARRIER_RELEASE_FAILED502Termination held because a number is attachedEmail support@livespeech.ai with the tenantId to release the number, then retry
TENANT_TERMINATED409Changing settings on a terminated lineCreate a new line
TENANT_REGION_UNRESOLVED409The line's record could not be found, so nothing was savedCheck the line identifier; if it persists, email support@livespeech.ai
INVALID_CURSOR400The cursor is invalid or has expiredRead again from the start without a cursor
SUMMARY_NO_RECIPIENTS400An empty recipient list would reach nobodyKeep at least one recipient
SUMMARY_OWNER_LOOKUP_FAILED503Looking up the recipient failed temporarilyRetry shortly (nothing was saved)
WEBHOOK_URL_INVALID422The webhook URL breaks the rulesUse https, a public host and no credentials
UNKNOWN_EVENT422An unsupported event nameSend only call.completed
WEBHOOK_NOT_CONFIGURED404No webhook registeredRegister one with PUT /v1/webhooks first
persona.empty400The persona is emptyFill it in
persona.too_long400The persona is over 8,000 charactersShorten it
persona.tool_name400The persona contains an internal feature nameRemove that word
persona.tool_signature400The persona contains code-like notationRewrite it as plain sentences

For persona.* codes, error is a Korean sentence you can show to the operator as is.

Limits

ItemValue
Rate limitPer sending server IP + path, 30 requests per 5 minutes
LinesAccounts may have a quota (402 tells you)
List page size1–200, default 50
Idempotency keysKept at least 24 hours; may be deleted after that
Webhook delivery attempts8 in total including the first; retries start at 1 minute and double up to 1 hour
Webhook response timeout10 seconds

Retry rules

This responseRetry
429, 5xx, no responseRetry with a delay
400, 403, 422Same result until you fix the request (a 403 on a line you terminated means the termination is complete)
409 IDEMPOTENCY_IN_PROGRESSRetry shortly with the same idempotency key
Any other 409Check the state, then send a different request

Line creation needs an Idempotency-Key for retries to be safe — see the API reference.

Contact

Send questions to support@livespeech.ai. If you are stuck mid-integration, including the following speeds things up:

  • The method and path you called (for example POST /v1/tenants)
  • The response status and its error and code
  • The line's tenantId (for call issues, the callId and the time of the call)
  • When you sent the request, with the time zone

Never put keys or secrets in a message. The key prefix (keyPrefix) is all that is needed.

About these docs

These docs are written from the API specification, and the example responses are taken from it. The API reference is generated from the specification on every deploy, so where a field differs, the reference is right.