Errors
Both APIs use standard HTTP status codes. Authentication is checked before the request
is validated, so a missing or invalid key returns 401 even when the body or parameters
are also invalid.
Ingest API
A successful submission returns 202 Accepted; any other response indicates that the
request was not accepted and nothing was queued.
| Code | Meaning | Common cause |
|---|---|---|
202 | Accepted | The call was registered or queued for processing. |
401 | Unauthorized | The API key was missing or not recognized. See Authentication. |
403 | Forbidden | The key cannot send calls, or a team key named a different team. |
422 | Unprocessable | The body failed validation: a missing required field, a wrong type, or an unexpected field (the body is strict). |
Common mistakes
- Extra fields. A typo such as
recording_urlin place ofrecordingUrlis an unexpected field, so it returns422. - A
recordingUrlthat VOIX cannot reach. The URL you send must be fetchable by VOIX. A link that requires a session cookie, or that expires before VOIX retrieves it, will prevent transcription.
Retrying safely
Submissions are idempotent on callId. If a request fails with a network error or a
5xx response, you can resend it unchanged; the same callId updates the existing
call rather than creating a duplicate. See Call lifecycle.
REST API
| Code | Meaning | Common cause |
|---|---|---|
200 | OK | The request succeeded. |
201 | Created | A topic, lens or check was created. |
204 | No content | A topic, lens or check was deleted. |
401 | Unauthorized | The API key is missing, unknown, revoked or expired. |
403 | Forbidden | The key lacks the permission this request needs (a sending key can only send calls), or a team key acted outside its team. |
404 | Not found | No such call, task, contact, topic, lens or check in your workspace. |
409 | Conflict | For example deleting a lens that still has checks, or a topic name that already exists. |
422 | Unprocessable | A query parameter or body field is missing or invalid. |
429 | Too many requests | Over the rate limit; retry after retry-after seconds. |
Error responses carry a JSON body describing the problem:
{
"type": "about:blank",
"title": "Forbidden",
"status": 403,
"detail": "This API key lacks the manage scope",
"code": "MISSING_SCOPE"
}Last updated on