POST /v1/agents/{agent_id}/validate runs every check a publish runs and publishes nothing. It returns {"errors": [...], "warnings": [...]}. Errors block a publish; warnings do not. Publishing returns the same warnings on success. Needs the editor role.

When checks run

Most checks also run on every create and PATCH, so a stored draft is never arbitrarily broken. These run only on validate, publish and per-call resolution:
  • A provider key for every provider the agent needs.
  • The operation trees of attached and hook tools, against this agent’s variables.
  • What the agent is assigned to (phone numbers, streams, triggers, batches).
  • Warnings about inactive integrations and empty FAQs.
A few states fail earlier, at parse time, as a 422 naming the field — they can never be stored, so validate never reports them: out-of-range values, unknown fields, a bad IANA timezone, and keypad_input, voicemail_detection or vision_input.screenshare enabled on a channel or pipeline that cannot use them.

The error envelope

Failures are a 400 in the standard error envelope:
The SDKs expose the list as error.errors.

Common refusals

Messages are abbreviated; search for the quoted fragment.

Models

Voice, avatar, language

Prompt, greeting and variables

Full rules on variables.

What the agent is assigned to

Checked on publish and rollback. A batch with its own pinned cast and a disabled trigger are not checked here.

Tools, MCP servers, FAQs, tasks

Tool operation-tree errors are described on templating and data.

Handoffs

See handoffs.

Recording, analysis, memory, vision

See recording, call analysis, conversation memory, vision.

Provider keys

no Deepgram API key for this workspace - add one under Provider keys — every provider the agent uses needs a key: LLM, STT, TTS, realtime, avatar, noise cancellation (while enabled), every fallback, the analysis model if set, and every attached task’s model.

Warnings

Next

Versions

Publishing and rollback.

Errors

The error envelope and status codes.