> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zeroruntime.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors

> Status codes, the validation error shape, and the error codes returned by the Agents, Versions and Deployment endpoints.

These errors apply to the Agents, Versions and Deployment endpoints (`/v1/agents`). Phone number and routing rule endpoints return a single `{ "message": "…" }` instead.

Validation failures return `400` with every problem found. Each one names the exact field as you wrote it: your language names and field names, not internal ones.

```json theme={null}
{
  "status": "error",
  "errors": [
    {
      "path": "languages.english.tts[0].voice",
      "code": "UNKNOWN_VOICE",
      "message": "Sonic 3 has no voice called \"jacqueline\". Pick one from its voice list."
    }
  ]
}
```

| Status | Meaning |
| - | - |
| `400` | The body didn't validate. See `errors`. |
| `401` | Missing or invalid `Authorization` header. |
| `404` | No such agent or version on this account. |

Only validation failures carry the `errors` list. Anything else, such as a `404` or a deploy that couldn't start, is a single `{ "error": "…" }`. Deploy uses `"message"` instead.

## Error codes

| Code | What went wrong |
| - | - |
| `REQUIRED` | A field the model or feature needs is missing: a `voice` for a TTS model, an `apiKey` for a BYOK model. |
| `INVALID_MODEL_REF` | `model` wasn't in `provider/modelId` form. |
| `UNKNOWN_MODEL` | No such model, or none in the hosted / BYOK variant your entry implies. |
| `MODEL_TYPE_MISMATCH` | An LLM in the `stt` slot, or similar. |
| `UNKNOWN_VOICE` | The model has no voice with that provider id. |
| `VOICE_NOT_FOR_MODEL` | The voice exists, but belongs to a different model. |
| `VOICE_NOT_FOR_LANGUAGE` | The model's voices are language-specific and this one isn't offered in the selected language. |
| `UNKNOWN_LANG` | No language by that name or id. |
| `UNKNOWN_LANGUAGE_DOC` | The model doesn't support that language, or that regional code. |
| `LANGUAGE_NOT_FOR_MODEL` | The language row belongs to another model. |
| `LANGUAGE_MISMATCH_GLOBAL` | The regional language belongs to a different language than the block it sits in. |
| `MIXED_MODEL_TYPES` | A realtime model and a regular LLM in the same slot. |
| `NOT_ALLOWED` | A realtime model under `llm` with `stt` or `tts` beside it. Put it under `realtime` instead. |
| `VAD_REQUIRED` | Interruption mode `vad` without a `voiceProcessing.vad` block. |
| `MISSING_LANG` | A language is listed but has no block, or a block has no `prompt`. |
| `DUPLICATE` | The same language named twice, in two different forms. |
| `MUST_MATCH_ACROSS_LANGUAGES` | A shared field was set differently per language. |
| `UNSUPPORTED_PROVIDER` | An `apiKey` was sent for a model whose provider doesn't take your own key. |
| `UNKNOWN_SECRET` | The saved key this config points at has since been deleted. Send the full `apiKey` again. |
| `SECRET_BUNDLE_MISSING` · `SECRET_MISSING_PROVIDER` | The saved key is incomplete or in an older format. Send the full `apiKey` again. |
| `UNKNOWN_KEY` | A field the API doesn't recognise, usually a typo. |
| `INVALID_TYPE` · `INVALID_ENUM` · `OUT_OF_RANGE` | A value has the wrong type, isn't one of the allowed values, or is out of range. An `apiKey` sent masked (`••••AbCd`) is also `INVALID_TYPE`: send the full key. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.