Developer platform · v2

API reference

View as MarkdownAll docs

Agents API

34 operations · all resources

What this covers#

An agent is the frozen configuration a call runs against: pipeline, prompt, language, limits and webhook. Sessions record the agent version they ran, so editing an agent never rewrites history. Its tests (typed chats with checks, run on your own AI account, no call placed) live under it too.

Every example below runs as written once these are exported:

bash
export DVAARIK_API_KEY="dvk_..."        # project API key, server side only
export DVAARIK_TOKEN="<account access token>"   # console session, from POST /console/auth/login
export AGENT_ID="<uuid>"
export NAME="crm"
export PROJECT_ID="<uuid>"
export RUN_ID="<uuid>"
export TEST_ID="<uuid>"

A <value> inside a JSON body is a value you supply. Responses are JSON; every error body is { "detail": … }. Each schema is expanded once per page, where it first appears.

Machine door errors#

Raised by the project-key dependency before any handler on this page runs.

StatusCause
401Missing API key or Invalid API key — the X-Api-Key header is absent, unknown, or revoked.
403API key is not scoped to a project, Project unavailable, or API key is missing the required scope '<scope>'.
429The project's api_rpm ceiling was exceeded. Honour Retry-After; X-RateLimit-* headers are on every response.

Scopes used on this page: voice:read, voice:write. Mint a key with only these.

Account door errors#

StatusCause
401No account session was presented, or it is invalid or expired. Refresh once, then re-authenticate.
403The account is suspended or its email is not verified.

Operations — project API key#

Call these from your own server with a project key. Never from a browser or a mobile bundle.

GET /v2/agents#

List the project's agents.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:read
Operationlist_agents_v2_agents_get
Success200 V2AgentInfo[]
ParameterInTypeRequiredNotes
limitqueryintegerno
offsetqueryintegerno
include_inactivequerybooleanno

V2AgentInfo#

FieldTypeRequiredNotes
ambience_levelinteger or nullyes
ambience_soundstring or nullyes
backchannelbooleanyes
can_end_callbooleanyes
can_hand_offbooleannodefault false; Whether the agent may hand the call to another agent of this project on its hand-off list (the built-in hand_off_to_agent tool), on phone, browser and test calls. Off by default, and it needs at least one destination. Cascade agents only. It stays one call: no new dial and one bill. From the next reply the receiving agent's prompt, tools, knowledge, language model and voice take over, and it sees the conversation so far. Listening stays the call's, so both agents must speak the same language. The call's own settings (duration limit, recording, transcript, analysis, completed-call webhook) stay this agent's. At most 5 hand-offs per call.
can_send_dtmfbooleanyes
can_transferbooleannodefault false; Whether the agent may hand a phone call to a person on its transfer list. Off by default, and it needs at least one destination. Offered on Twilio and Plivo phone calls only. The transfer is blind: the caller is put through and the agent leaves the call. Billing stops at the transfer: this call's per-minute charge ends there, and the new leg is billed by your own carrier account.
created_atdate-timeyes
dead_air_secondsinteger or nullyes
display_namestring or nullyes
fallback_statusstring or nullnoWhether a call could use the saved llm_fallback right now: ready, or why not (account_not_found, account_unavailable, model_unavailable, model_retired, invalid). A call never waits on it: an unusable fallback is left out and the call runs on llm alone. Null when the agent has no fallback, and in a list. Keys that no longer decrypt are only found by a call.
greetingstring or nullyes
handoff_destinationsHandoffDestinationInfo[]noWho the agent may hand the call to: up to 10 agents of this project, each picked by its unique name. Each must be an active cascade agent that speaks this agent's language, never this agent itself, and its provider accounts must be ready.
has_webhook_secretbooleannodefault false
iduuidyes
idle_hangup_secondsinteger or nullyes
idle_warn_secondsinteger or nullyes
insight_configInsightConfigBody or nullno
is_activebooleanyes
knowledge_base_idsuuid[]no
knowledge_mode"none" or "inline" or "search" or nullno
languagestringyes
max_chars_per_mininteger or nullyes
max_duration_secondsinteger or nullyes
mcp_serversMcpServerInfo[]noYour MCP servers whose tools this agent may use on its calls, at most 3, reached over the Streamable HTTP transport. A call lists each server's tools when it starts (waiting at most 1.5 seconds per server, and remembering a list for 5 minutes); a server that does not answer in time is left out of that call, never failing it. The agent sees each tool as <server name>__<tool name>. At most 30 MCP tools reach the agent, within the same prompt budget as its own tools.
namestringyes
pipeline_configobjectyesThe provider accounts and models this agent runs on, all your own. Cascade: stt {account_id, model}, llm {account_id, model} and tts {account_id, model, voice}, plus optionally llm_fallback {account_id, model}: a second language model (another provider or another model than llm) that answers when llm fails before saying anything (an error, or no first output within 4 seconds). The call then stays on it, and call.completed carries fallbackUsed. Realtime: realtime {account_id, model, voice}; it has no llm_fallback.
pipeline_modestringyes
project_iduuidyes
promptstringyes
record_callsbooleanyes
retention_daysinteger or nullyes
store_transcriptbooleanyes
tool_webhook_urlstring or nullyes
toolsany[]yes
transfer_destinationsTransferDestination[]noWho the agent may transfer to: up to 10 destinations, each picked by its unique name. Numbers must be E.164 and may not be paid-rate or satellite ranges, one of this agent's own numbers, or outside your account's allowed countries.
updated_atdate-timeyes
variablesany[]yes
versionintegeryes
webhook_include_recording_urlbooleanyes
webhook_include_transcriptbooleanyes
webhook_urlstring or nullyes

HandoffDestinationInfo#

FieldTypeRequiredNotes
agent_iduuidyesThe agent that takes over: an active cascade agent of this project that speaks the same language, never this agent itself. Each agent may be listed once.
agent_namestring or nullnoThe receiving agent's own name. Single-agent reads only; null in a list.
descriptionstringyesWhen to hand over to it, up to 200 characters. The agent reads it to decide.
greetingstring or nullnoOptional line, up to 200 characters, that the receiving agent says in its own voice as it takes over, such as "Hi, this is Sam from sales." Left out, it simply carries on the conversation.
namestringyesWhat the agent calls this destination: 1 to 40 letters, digits, spaces, hyphens or underscores, unique within the agent (ignoring case).
statusstring or nullnoWhether a call could hand over to it now: ready, or why not (agent_not_found, agent_deleted, not_cascade, language_mismatch, self). Provider accounts are checked when you save and when a call hands over. Single-agent reads only; null in a list.

McpServerInfo#

One of the agent's MCP servers, as an agent read shows it. Header values are never shown.

FieldTypeRequiredNotes
allowed_toolsstring[]no
header_hintsobject<string>noEach saved header's name, with only the last four characters of its value.
namestringyes
timeout_secondsintegeryes
urlstringyes

TransferDestination#

A person the agent may hand the call to. The agent picks one by name; it never sees or dials any other number.

FieldTypeRequiredNotes
descriptionstringnodefault ""; When the agent should choose this destination, up to 200 characters. The agent reads it.
namestringyesWhat the agent calls this destination: 1 to 40 letters, digits, spaces, hyphens or underscores, unique within the agent (ignoring case).
numberstringyesThe phone number to ring, in international E.164 format such as +14155550100. The agent never sees it. The person sees your own number on this call (the line the caller rang, or the line the agent called from) as the caller ID.
saystring or nullnoOptional line, up to 200 characters, said to the caller before the transfer starts, such as "Connecting you to our sales team now."

InsightConfigBody#

Post-call analysis for one agent, on the developer's own LLM account.

FieldTypeRequiredNotes
enabledbooleannodefault true
fieldsInsightFieldSpec[]nomax 25 item(s); Ordered. The order is the column order of the console table and of a CSV export.
modelstringyesmax length 120; An LLM model this provider offers, from the provider catalogue.
provider_account_iduuidyesA verified, LLM-capable provider account in THIS project. May differ from the account the agent converses on — a cheap model for analysis is the normal choice.
system_promptstringnodefault ""; max length 4000; The developer's own analysis instructions. Prepended to the platform's JSON output contract.

FieldErrors#

A 422 from a route that names its fields: every field that failed validation, or one sentence when the request validated and was then refused.

FieldTypeRequiredNotes
detailstring or FieldError[]yesThe fields that failed validation (each named), or a sentence for the developer.
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/v2/agents?limit=20" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

POST /v2/agents#

Create an agent. The response carries its webhook signing secret once.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
Operationcreate_agent_v2_agents_post
Success201 V2CreatedAgentResponse

Request body: V2AgentCreate.

V2AgentCreate#

FieldTypeRequiredNotes
ambience_levelinteger or nullno
ambience_soundstring or nullno
backchannelbooleannodefault true
can_end_callbooleannodefault true
can_hand_offbooleannodefault false; Whether the agent may hand the call to another agent of this project on its hand-off list (the built-in hand_off_to_agent tool), on phone, browser and test calls. Off by default, and it needs at least one destination. Cascade agents only. It stays one call: no new dial and one bill. From the next reply the receiving agent's prompt, tools, knowledge, language model and voice take over, and it sees the conversation so far. Listening stays the call's, so both agents must speak the same language. The call's own settings (duration limit, recording, transcript, analysis, completed-call webhook) stay this agent's. At most 5 hand-offs per call.
can_send_dtmfbooleannodefault false
can_transferbooleannodefault false; Whether the agent may hand a phone call to a person on its transfer list. Off by default, and it needs at least one destination. Offered on Twilio and Plivo phone calls only. The transfer is blind: the caller is put through and the agent leaves the call. Billing stops at the transfer: this call's per-minute charge ends there, and the new leg is billed by your own carrier account.
dead_air_secondsinteger or nullno
display_namestring or nullno
greetingstring or nullno
handoff_destinationsHandoffDestination[]nomax 10 item(s); Who the agent may hand the call to: up to 10 agents of this project, each picked by its unique name. Each must be an active cascade agent that speaks this agent's language, never this agent itself, and its provider accounts must be ready.
idle_hangup_secondsinteger or nullno
idle_warn_secondsinteger or nullno
insight_configInsightConfigBody or nullno
knowledge_base_idsuuid[]nomax 3 item(s)
languagestringnodefault "en-IN"
max_chars_per_mininteger or nullno
max_duration_secondsinteger or nullno
mcp_serversMcpServer[]nomax 3 item(s); Your MCP servers whose tools this agent may use on its calls, at most 3, reached over the Streamable HTTP transport. A call lists each server's tools when it starts (waiting at most 1.5 seconds per server, and remembering a list for 5 minutes); a server that does not answer in time is left out of that call, never failing it. The agent sees each tool as <server name>__<tool name>. At most 30 MCP tools reach the agent, within the same prompt budget as its own tools.
namestringyes
pipeline_configobjectyesThe provider accounts and models this agent runs on, all your own. Cascade: stt {account_id, model}, llm {account_id, model} and tts {account_id, model, voice}, plus optionally llm_fallback {account_id, model}: a second language model (another provider or another model than llm) that answers when llm fails before saying anything (an error, or no first output within 4 seconds). The call then stays on it, and call.completed carries fallbackUsed. Realtime: realtime {account_id, model, voice}; it has no llm_fallback.
pipeline_modestringyes
promptstringyes
record_callsbooleannodefault false
retention_daysinteger or nullno
store_transcriptbooleannodefault false
tool_webhook_urlstring or nullno
toolsobject[]no
transfer_destinationsTransferDestination[]nomax 10 item(s); Who the agent may transfer to: up to 10 destinations, each picked by its unique name. Numbers must be E.164 and may not be paid-rate or satellite ranges, one of this agent's own numbers, or outside your account's allowed countries.
variablesobject[]no
webhook_include_recording_urlbooleannodefault false
webhook_include_transcriptbooleannodefault false
webhook_urlstring or nullno

HandoffDestination#

Another agent of this project the agent may hand the call to. The agent picks one by name; it never sees the agent id.

FieldTypeRequiredNotes
agent_iduuidyesThe agent that takes over: an active cascade agent of this project that speaks the same language, never this agent itself. Each agent may be listed once.
descriptionstringyesWhen to hand over to it, up to 200 characters. The agent reads it to decide.
greetingstring or nullnoOptional line, up to 200 characters, that the receiving agent says in its own voice as it takes over, such as "Hi, this is Sam from sales." Left out, it simply carries on the conversation.
namestringyesWhat the agent calls this destination: 1 to 40 letters, digits, spaces, hyphens or underscores, unique within the agent (ignoring case).

McpServer#

One of your MCP servers, as you save it.

FieldTypeRequiredNotes
allowed_toolsstring[]noThe server's tools the agent may use, by their names on the server, at most 30. Empty means all.
header_hintsobject<string> or nullnoRead-only. Accepted so an agent you read can be sent back, and ignored.
headersobject<string> or nullnoOptional HTTP headers sent with every request to this server, such as Authorization. Stored encrypted and never shown again: reads show header_hints instead. Up to 10. Leave out to keep the saved ones (only while name and url are unchanged); send {} to remove them.
namestringyesUp to 40 lowercase letters, digits, hyphens or underscores, starting with a letter, with no two hyphens or underscores in a row and none at the end. Unique within the agent: the agent sees this server's tools as <name>__<tool>.
timeout_secondsintegernodefault 6; How long one tool call on this server may take, 1 to 10 seconds. Default 6.
urlstringyesThe server's Streamable HTTP endpoint: https on a public host, up to 500 characters.

V2CreatedAgentResponse#

FieldTypeRequiredNotes
agentV2AgentInfoyes
webhook_secretstringyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/agents" \
  -H "X-Api-Key: $DVAARIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "support",
    "pipeline_config": {
      "stt": {
        "account_id": "<provider account uuid>",
        "model": "<model id from the catalogue>"
      },
      "llm": {
        "account_id": "<provider account uuid>",
        "model": "<model id from the catalogue>"
      },
      "tts": {
        "account_id": "<provider account uuid>",
        "model": "<model id from the catalogue>",
        "voice": "<provider voice id>"
      }
    },
    "pipeline_mode": "cascade",
    "prompt": "You are the receptionist for {{company}}. Answer questions and book visits.",
    "greeting": "Hello, this is support.",
    "language": "en-IN"
  }'

DELETE /v2/agents/{agent_id}#

Deactivate the agent. Past sessions keep the agent id and version they ran; numbers bound to it stop answering.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
Operationdelete_agent_v2_agents__agent_id__delete
Success200 V2AgentDeleted
ParameterInTypeRequiredNotes
agent_idpathuuidyes

V2AgentDeleted#

FieldTypeRequiredNotes
callsintegeryes
deletedbooleanyes
iduuidyes
namestringyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X DELETE "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

GET /v2/agents/{agent_id}#

Read one agent, including the pipeline it will run.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:read
Operationget_agent_v2_agents__agent_id__get
Success200 V2AgentInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

PATCH /v2/agents/{agent_id}#

Update an agent. Only the fields you send change, and the version increments.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
Operationupdate_agent_v2_agents__agent_id__patch
Success200 V2AgentInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes

Request body: V2AgentUpdate.

V2AgentUpdate#

FieldTypeRequiredNotes
ambience_levelinteger or nullno
ambience_soundstring or nullno
backchannelboolean or nullno
can_end_callboolean or nullno
can_hand_offboolean or nullnoWhether the agent may hand the call to another agent of this project on its hand-off list (the built-in hand_off_to_agent tool), on phone, browser and test calls. Off by default, and it needs at least one destination. Cascade agents only. It stays one call: no new dial and one bill. From the next reply the receiving agent's prompt, tools, knowledge, language model and voice take over, and it sees the conversation so far. Listening stays the call's, so both agents must speak the same language. The call's own settings (duration limit, recording, transcript, analysis, completed-call webhook) stay this agent's. At most 5 hand-offs per call.
can_send_dtmfboolean or nullno
can_transferboolean or nullnoWhether the agent may hand a phone call to a person on its transfer list. Off by default, and it needs at least one destination. Offered on Twilio and Plivo phone calls only. The transfer is blind: the caller is put through and the agent leaves the call. Billing stops at the transfer: this call's per-minute charge ends there, and the new leg is billed by your own carrier account.
dead_air_secondsinteger or nullno
display_namestring or nullno
greetingstring or nullno
handoff_destinationsHandoffDestination[] or nullnoWho the agent may hand the call to: up to 10 agents of this project, each picked by its unique name. Each must be an active cascade agent that speaks this agent's language, never this agent itself, and its provider accounts must be ready. Sending a list replaces the whole list; an empty list removes them all.
idle_hangup_secondsinteger or nullno
idle_warn_secondsinteger or nullno
insight_configInsightConfigBody or nullno
is_activeboolean or nullno
knowledge_base_idsuuid[] or nullno
languagestring or nullno
max_chars_per_mininteger or nullno
max_duration_secondsinteger or nullno
mcp_serversMcpServer[] or nullnoYour MCP servers whose tools this agent may use on its calls, at most 3, reached over the Streamable HTTP transport. A call lists each server's tools when it starts (waiting at most 1.5 seconds per server, and remembering a list for 5 minutes); a server that does not answer in time is left out of that call, never failing it. The agent sees each tool as <server name>__<tool name>. At most 30 MCP tools reach the agent, within the same prompt budget as its own tools. Sending a list replaces the whole list; an empty list or null removes them all. Leave a server's headers out to keep the saved ones: that works only while the server keeps its name and url.
namestring or nullno
pipeline_configobject or nullnoThe provider accounts and models this agent runs on, all your own. Cascade: stt {account_id, model}, llm {account_id, model} and tts {account_id, model, voice}, plus optionally llm_fallback {account_id, model}: a second language model (another provider or another model than llm) that answers when llm fails before saying anything (an error, or no first output within 4 seconds). The call then stays on it, and call.completed carries fallbackUsed. Realtime: realtime {account_id, model, voice}; it has no llm_fallback. An update REPLACES the whole pipeline_config, llm_fallback included: send the current llm_fallback again to keep it; leaving it out removes the fallback.
pipeline_modestring or nullno
promptstring or nullno
record_callsboolean or nullno
retention_daysinteger or nullno
store_transcriptboolean or nullno
tool_webhook_urlstring or nullno
toolsobject[] or nullno
transfer_destinationsTransferDestination[] or nullnoWho the agent may transfer to: up to 10 destinations, each picked by its unique name. Numbers must be E.164 and may not be paid-rate or satellite ranges, one of this agent's own numbers, or outside your account's allowed countries. Sending a list replaces the whole list; an empty list removes them all.
variablesobject[] or nullno
webhook_include_recording_urlboolean or nullno
webhook_include_transcriptboolean or nullno
webhook_urlstring or nullno
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X PATCH "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID" \
  -H "X-Api-Key: $DVAARIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "greeting": "Hello, this is support. How can I help?",
    "is_active": true
  }'

POST /v2/agents/{agent_id}/mcp-servers/{name}/check#

Check one saved MCP server: list its tools now with its saved headers and answer with the tools the agent will be offered, the ones dropped and why, or why the server could not be used, in a sentence. Calls no tool.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
OperationcheckAgentMcpServer
Success200 McpServerCheck
ParameterInTypeRequiredNotes
agent_idpathuuidyes
namepathstringyes

McpServerCheck#

What one of the agent's MCP servers answered when its tools were listed just now.

FieldTypeRequiredNotes
dropped_toolsMcpDroppedTool[]noTools the server listed that the agent can never be offered.
errorstring or nullnoWhy the server could not be used, in a sentence.
latency_msinteger or nullno
missing_allowed_toolsstring[]noNames in allowed_tools that the server did not list.
namestringyes
okbooleanyesWhether the server answered with its tool list.
statusstringyesA stable code for the outcome, to branch on (error is the sentence to show): ok, or why the server could not be used: headers_unavailable (the saved headers could not be opened; save them again), refused (not https on a public host), unresolved, dns_slow, dns_busy, connect_error, timeout, redirect (save the final address), encoded (a compressed answer), oversized, http_<status> (the server's HTTP status, for example http_401), protocol_error (not an MCP server over Streamable HTTP), input_required, sdk_unsupported (on our side) or error. New codes may be added: treat an unknown one like error.
toolsMcpToolInfo[]no
warningstring or nullnoSomething a call would do differently from this check, in a sentence.

McpDroppedTool#

A tool the server listed that the agent can never be offered, and why.

FieldTypeRequiredNotes
namestringyesThe tool's name on your server.
reasonstringyesschema (its input schema cannot be read), ref (a $ref that is not a local #/$defs or #/definitions entry), ref_depth ($ref nested more than 4 deep, or recursive), too_deep (objects or arrays nested more than 6 deep), too_large (its schema is too large to send on every turn), listing_too_large (the tools listed before it already used all the work one listing may take: name the tools you need in allowed_tools), name (an unusable tool name) or conversion.

McpToolInfo#

A tool the server listed that the agent would be offered.

FieldTypeRequiredNotes
descriptionstringnodefault ""
namestringyesThe tool's name on your server.
offered_asstringyesThe name the agent sees: <server>__<tool>, up to 64 characters.
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/mcp-servers/$NAME/check" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

POST /v2/agents/{agent_id}/rotate-secret#

Issue a new webhook signing secret for this agent and return it once.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
Operationrotate_secret_v2_agents__agent_id__rotate_secret_post
Success200 V2CreatedAgentResponse
ParameterInTypeRequiredNotes
agent_idpathuuidyes
ErrorWhen
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/rotate-secret" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

GET /v2/agents/{agent_id}/test-runs#

List runs newest first, optionally of one test_id. Runs are kept 30 days.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:read
OperationlistAgentTestRuns
Success200 AgentTestRunPage
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idqueryuuid or nullno
limitqueryintegerno
offsetqueryintegerno

AgentTestRunPage#

FieldTypeRequiredNotes
dataAgentTestRunSummary[]yes
next_offsetinteger or nullno

AgentTestRunSummary#

FieldTypeRequiredNotes
agent_versioninteger or nullyesThe saved agent version the run played. Unsaved overrides never change it; overrides_used says whether any were tested on top of it.
cancel_requested_atdate-time or nullnoWhen you asked this run to stop (POST .../test-runs/{run_id}/cancel). A running run with this set is stopping: it ends cancelled with ended_by: stopped before its next model request, keeping the transcript so far. A run that finishes before it reaches one keeps its result.
created_atdate-timeyes
ended_by"agent_hung_up" or "caller_hung_up" or "turns_ran_out" or "transferred" or "error" or "stopped" or nullnoHow the run ended: agent_hung_up (the agent ended the call), caller_hung_up (the simulated caller hung up), turns_ran_out (the test's max_turns were used up), transferred (the agent handed the call to a person), error (the run could not finish; error says why) or stopped (you cancelled it). Null while the run is queued or running, and on runs made before 7 November 2026.
errorstring or nullyes
finished_atdate-time or nullyes
iduuidyes
input_tokensintegeryes
output_tokensintegeryes
overrides_usedbooleanyes
passed_checksintegeryes
started_atdate-time or nullyes
status"queued" or "running" or "passed" or "failed" or "error" or "cancelled"yes
test_iduuidyes
total_checksintegeryes
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/test-runs?limit=20" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

GET /v2/agents/{agent_id}/test-runs/{run_id}#

Read one run: status, the transcript, each check's result, tokens used and the model. Ask again until the status is passed, failed or error.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:read
OperationgetAgentTestRun
Success200 AgentTestRunInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
run_idpathuuidyes

AgentTestRunInfo#

FieldTypeRequiredNotes
agent_iduuidyes
agent_versioninteger or nullyesThe saved agent version the run played. Unsaved overrides never change it; overrides_used says whether any were tested on top of it.
cancel_requested_atdate-time or nullnoWhen you asked this run to stop (POST .../test-runs/{run_id}/cancel). A running run with this set is stopping: it ends cancelled with ended_by: stopped before its next model request, keeping the transcript so far. A run that finishes before it reaches one keeps its result.
check_resultsAgentTestCheckResult[]yes
created_atdate-timeyes
ended_by"agent_hung_up" or "caller_hung_up" or "turns_ran_out" or "transferred" or "error" or "stopped" or nullnoHow the run ended: agent_hung_up (the agent ended the call), caller_hung_up (the simulated caller hung up), turns_ran_out (the test's max_turns were used up), transferred (the agent handed the call to a person), error (the run could not finish; error says why) or stopped (you cancelled it). Null while the run is queued or running, and on runs made before 7 November 2026.
errorstring or nullyes
finished_atdate-time or nullyes
force_primary_failurebooleanyesWhether this run rehearsed the agent's fallback language model (it was queued with force_primary_failure): the main model was never asked. provider and model still name the main one.
iduuidyes
input_tokensintegeryes
modelstring or nullyes
output_tokensintegeryes
overrides_usedbooleanyes
passed_checksintegeryes
providerstring or nullyes
retention_notestring or nullno
started_atdate-time or nullyes
status"queued" or "running" or "passed" or "failed" or "error" or "cancelled"yes
test_iduuidyes
total_checksintegeryes
transcriptAgentTestTranscriptEntry[]yes
zero_retentionbooleannodefault false; True when this run stored no conversation because its project has zero retention on: transcript is empty and a judge check's reason is not kept (its verdict is).

AgentTestCheckResult#

FieldTypeRequiredNotes
checkanyyes
detailstringyes
passedboolean or nullyes

AgentTestTranscriptEntry#

One line of a run: an agent or caller turn, or a tool call the agent made.

FieldTypeRequiredNotes
agentstring or nullnoAgent turns of an agent that can hand calls to other agents: the name of the agent that said it (a turn that crossed a hand-off is one line per agent). Null on every other run.
argumentsobject or nullno
fallbackbooleannodefault false; Agent turns: answered by the agent's fallback language model (pipeline_config.llm_fallback), because the main model failed or the run rehearsed the fallback (force_primary_failure).
namestring or nullno
reasonstring or nullnoTool entries answered by your tool webhook that failed: why, as a stable code (the agent hears one sentence for several of these). refused (not https on a public host), unresolved, redirect (redirects are not followed), timeout, unreachable, http_<status> (your server's status, for example http_500), oversized (over 8 KB), encoded (a compressed answer: answer without compression, we ask for identity), bad_answer (not JSON), budget (the per-call limit of tool calls) or error (on our side). Absent when the call worked.
resultobject or nullno
role"agent" or "caller" or "tool"yes
source"canned" or "webhook" or "engine" or "refused" or "knowledge" or "mcp" or "handoff" or nullno
textstring or nullno
truncatedbooleannodefault false
turnintegeryes
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/test-runs/$RUN_ID" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

POST /v2/agents/{agent_id}/test-runs/{run_id}/cancel#

Stop a test run. A queued run is cancelled at once (status: cancelled, ended_by: stopped). A running run is asked to stop: the answer still says running, with cancel_requested_at set, and the run ends cancelled before its next model request, keeping the transcript so far (asking again changes nothing). A run that already finished is a 409.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
OperationcancelAgentTestRun
Success200 AgentTestRunInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
run_idpathuuidyes
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
409A limit or the resource's state refuses this change; the sentence says which.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/test-runs/$RUN_ID/cancel" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

GET /v2/agents/{agent_id}/tests#

List the agent's saved tests, each with its newest run.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:read
OperationlistAgentTests
Success200 AgentTestPage
ParameterInTypeRequiredNotes
agent_idpathuuidyes

AgentTestPage#

FieldTypeRequiredNotes
dataAgentTestInfo[]yes

AgentTestInfo#

FieldTypeRequiredNotes
agent_iduuidyes
caller_personastringyes
checksany[]yes
created_atdate-timeyes
iduuidyes
last_runAgentTestRunSummary or nullno
max_turnsintegeryes
namestringyes
opening_linestring or nullyes
tool_resultsobject<object>yes
updated_atdate-timeyes
use_real_tool_webhookbooleanyes
variablesobject<boolean or integer or number or string>yes
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/tests" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

POST /v2/agents/{agent_id}/tests#

Save a test: the caller to play, values, canned tool answers and checks. Up to 50 per agent. Nothing runs until you run it.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
OperationcreateAgentTest
Success201 AgentTestInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes

Request body: AgentTestCreate.

AgentTestCreate#

FieldTypeRequiredNotes
caller_personastringyes
checksany[]no
max_turnsintegernodefault 6
namestringyes
opening_linestring or nullno
tool_resultsobject<object>no
use_real_tool_webhookbooleannodefault false
variablesobject<boolean or integer or number or string>no
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
409A limit or the resource's state refuses this change; the sentence says which.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/tests" \
  -H "X-Api-Key: $DVAARIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "caller_persona": "Ravi, a regular. He wants to move Saturday 4 PM to Monday morning.",
    "name": "Moves a booking",
    "checks": [
      {
        "type": "calls_tool",
        "tool": "book_slot"
      },
      {
        "type": "judge",
        "question": "Did the agent read the new time back?"
      }
    ],
    "max_turns": 6
  }'

DELETE /v2/agents/{agent_id}/tests/{test_id}#

Delete a test and every run of it.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
OperationdeleteAgentTest
Success204 no body
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idpathuuidyes
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X DELETE "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/tests/$TEST_ID" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

GET /v2/agents/{agent_id}/tests/{test_id}#

Read one test with its newest run.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:read
OperationgetAgentTest
Success200 AgentTestInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idpathuuidyes
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/tests/$TEST_ID" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

PATCH /v2/agents/{agent_id}/tests/{test_id}#

Change a test. Only the fields you send change.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
OperationupdateAgentTest
Success200 AgentTestInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idpathuuidyes

Request body: AgentTestUpdate.

AgentTestUpdate#

FieldTypeRequiredNotes
caller_personastring or nullno
checksany[] or nullno
max_turnsinteger or nullno
namestring or nullno
opening_linestring or nullno
tool_resultsobject<object> or nullno
use_real_tool_webhookboolean or nullno
variablesobject<boolean or integer or number or string> or nullno
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X PATCH "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/tests/$TEST_ID" \
  -H "X-Api-Key: $DVAARIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "max_turns": 8
  }'

POST /v2/agents/{agent_id}/tests/{test_id}/run#

Queue one run (202) on your own AI account. Send overrides to try an unsaved prompt, greeting, variables or tools; they are never saved to the agent.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
OperationrunAgentTest
Success202 AgentTestRunsQueued
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idpathuuidyes

AgentTestRunsQueued#

FieldTypeRequiredNotes
dataAgentTestRunSummary[]yes
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
409A limit or the resource's state refuses this change; the sentence says which.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/tests/$TEST_ID/run" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

POST /v2/agents/{agent_id}/tests/run-all#

Queue a run of every test when the agent has at most 6, or of up to 6 named in test_ids. Takes the same overrides as a single run.

DetailValue
DoorProject API key — X-Api-Key: $DVAARIK_API_KEY
Scopevoice:write
OperationrunAllAgentTests
Success202 AgentTestRunsQueued
ParameterInTypeRequiredNotes
agent_idpathuuidyes
ErrorWhen
401No API key was sent in X-Api-Key, or it is invalid or revoked.
403The API key lacks the scope this route needs, or its account or project is unavailable.
404The addressed resource does not exist in this key's project. One in another project is deliberately indistinguishable from one that never existed.
409A limit or the resource's state refuses this change; the sentence says which.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
429The project's requests-per-minute limit is reached; Retry-After says when to try again.

Plus the machine-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/v2/agents/$AGENT_ID/tests/run-all" \
  -H "X-Api-Key: $DVAARIK_API_KEY"

Operations — account session#

The same resource through the console door. These are what the web console calls; both doors return the same shapes.

GET /console/v2/projects/{project_id}/agents#

List the project's agents.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleListAgents
Success200 V2AgentInfo[]
ParameterInTypeRequiredNotes
project_idpathuuidyes
limitqueryintegerno
offsetqueryintegerno
include_inactivequerybooleanno
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents?limit=20" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

POST /console/v2/projects/{project_id}/agents#

Create an agent. The response carries its webhook signing secret once.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleCreateAgent
Success201 V2CreatedAgentResponse
ParameterInTypeRequiredNotes
project_idpathuuidyes

Request body: V2AgentCreate.

ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents" \
  -H "Authorization: Bearer $DVAARIK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "support",
    "pipeline_config": {
      "stt": {
        "account_id": "<provider account uuid>",
        "model": "<model id from the catalogue>"
      },
      "llm": {
        "account_id": "<provider account uuid>",
        "model": "<model id from the catalogue>"
      },
      "tts": {
        "account_id": "<provider account uuid>",
        "model": "<model id from the catalogue>",
        "voice": "<provider voice id>"
      }
    },
    "pipeline_mode": "cascade",
    "prompt": "You are the receptionist for {{company}}. Answer questions and book visits.",
    "greeting": "Hello, this is support.",
    "language": "en-IN"
  }'

DELETE /console/v2/projects/{project_id}/agents/{agent_id}#

Deactivate the agent. Past sessions keep the agent id and version they ran; numbers bound to it stop answering.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleDeleteAgent
Success200 V2AgentDeleted
ParameterInTypeRequiredNotes
agent_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X DELETE "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

GET /console/v2/projects/{project_id}/agents/{agent_id}#

Read one agent, including the pipeline it will run.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleGetAgent
Success200 V2AgentInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

PATCH /console/v2/projects/{project_id}/agents/{agent_id}#

Update an agent. Only the fields you send change, and the version increments.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleUpdateAgent
Success200 V2AgentInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
project_idpathuuidyes

Request body: V2AgentUpdate.

ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X PATCH "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID" \
  -H "Authorization: Bearer $DVAARIK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "greeting": "Hello, this is support. How can I help?",
    "is_active": true
  }'

POST /console/v2/projects/{project_id}/agents/{agent_id}/mcp-servers/{name}/check#

Check one saved MCP server: list its tools now with its saved headers and answer with the tools the agent will be offered, the ones dropped and why, or why the server could not be used, in a sentence. Calls no tool.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleCheckAgentMcpServer
Success200 McpServerCheck
ParameterInTypeRequiredNotes
agent_idpathuuidyes
namepathstringyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/mcp-servers/$NAME/check" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

POST /console/v2/projects/{project_id}/agents/{agent_id}/rotate-secret#

Issue a new webhook signing secret for this agent and return it once.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleRotateAgentSecret
Success200 V2CreatedAgentResponse
ParameterInTypeRequiredNotes
agent_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/rotate-secret" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

GET /console/v2/projects/{project_id}/agents/{agent_id}/test-runs#

List runs newest first, optionally of one test_id. Runs are kept 30 days.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleListAgentTestRuns
Success200 AgentTestRunPage
ParameterInTypeRequiredNotes
agent_idpathuuidyes
project_idpathuuidyes
test_idqueryuuid or nullno
limitqueryintegerno
offsetqueryintegerno
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/test-runs?limit=20" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

GET /console/v2/projects/{project_id}/agents/{agent_id}/test-runs/{run_id}#

Read one run: status, the transcript, each check's result, tokens used and the model. Ask again until the status is passed, failed or error.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleGetAgentTestRun
Success200 AgentTestRunInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
run_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/test-runs/$RUN_ID" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

POST /console/v2/projects/{project_id}/agents/{agent_id}/test-runs/{run_id}/cancel#

Stop a test run. A queued run is cancelled at once (status: cancelled, ended_by: stopped). A running run is asked to stop: the answer still says running, with cancel_requested_at set, and the run ends cancelled before its next model request, keeping the transcript so far (asking again changes nothing). A run that already finished is a 409.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleCancelAgentTestRun
Success200 AgentTestRunInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
run_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/test-runs/$RUN_ID/cancel" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

GET /console/v2/projects/{project_id}/agents/{agent_id}/tests#

List the agent's saved tests, each with its newest run.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleListAgentTests
Success200 AgentTestPage
ParameterInTypeRequiredNotes
agent_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/tests" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

POST /console/v2/projects/{project_id}/agents/{agent_id}/tests#

Save a test: the caller to play, values, canned tool answers and checks. Up to 50 per agent. Nothing runs until you run it.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleCreateAgentTest
Success201 AgentTestInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
project_idpathuuidyes

Request body: AgentTestCreate.

ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/tests" \
  -H "Authorization: Bearer $DVAARIK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "caller_persona": "Ravi, a regular. He wants to move Saturday 4 PM to Monday morning.",
    "name": "Moves a booking",
    "checks": [
      {
        "type": "calls_tool",
        "tool": "book_slot"
      },
      {
        "type": "judge",
        "question": "Did the agent read the new time back?"
      }
    ],
    "max_turns": 6
  }'

DELETE /console/v2/projects/{project_id}/agents/{agent_id}/tests/{test_id}#

Delete a test and every run of it.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleDeleteAgentTest
Success204 no body
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X DELETE "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/tests/$TEST_ID" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

GET /console/v2/projects/{project_id}/agents/{agent_id}/tests/{test_id}#

Read one test with its newest run.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleGetAgentTest
Success200 AgentTestInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X GET "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/tests/$TEST_ID" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

PATCH /console/v2/projects/{project_id}/agents/{agent_id}/tests/{test_id}#

Change a test. Only the fields you send change.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleUpdateAgentTest
Success200 AgentTestInfo
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idpathuuidyes
project_idpathuuidyes

Request body: AgentTestUpdate.

ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X PATCH "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/tests/$TEST_ID" \
  -H "Authorization: Bearer $DVAARIK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "max_turns": 8
  }'

POST /console/v2/projects/{project_id}/agents/{agent_id}/tests/{test_id}/run#

Queue one run (202) on your own AI account. Send overrides to try an unsaved prompt, greeting, variables or tools; they are never saved to the agent.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleRunAgentTest
Success202 AgentTestRunsQueued
ParameterInTypeRequiredNotes
agent_idpathuuidyes
test_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/tests/$TEST_ID/run" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

POST /console/v2/projects/{project_id}/agents/{agent_id}/tests/run-all#

Queue a run of every test when the agent has at most 6, or of up to 6 named in test_ids. Takes the same overrides as a single run.

DetailValue
DoorAccount session — Authorization: Bearer $DVAARIK_TOKEN
OperationconsoleRunAllAgentTests
Success202 AgentTestRunsQueued
ParameterInTypeRequiredNotes
agent_idpathuuidyes
project_idpathuuidyes
ErrorWhen
401No account session was presented, or it is invalid or expired.
403The account is suspended or its email is not verified.
404The project or the addressed resource does not exist for this owner. A resource owned by another developer is deliberately indistinguishable from one that never existed.
409The project or resource is in a state that refuses this change.
422The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.

Plus the account-door errors above. Full list on the errors page.

bash
curl -sS -X POST "https://api.developers.dvaarik.com/console/v2/projects/$PROJECT_ID/agents/$AGENT_ID/tests/run-all" \
  -H "Authorization: Bearer $DVAARIK_TOKEN"

Try it without a key in the browser

The playground opens a real voice session with your account session, so a project key never reaches a browser. Machine calls belong on your own server.