One session is one call. Create it to get a single-use WebSocket URL for browser audio, or dial out on your own carrier line. Billing is settled from connected seconds when the session ends.
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 PROJECT_ID="<uuid>"
export SESSION_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.
Where this call's audio is, or null when there is none. The audio lives in your own carrier account and is fetched with your own carrier credentials, not ours — Dvaarik does not store call recordings. The block is {provider, reference_id, url, fetched_from}: fetched_from is "carrier" when your carrier holds the recording (a null reference_id there means the carrier accepted the request and will name the recording on its own webhook), and "unavailable" with a detail sentence when the carrier could not be asked at all. Browser and bring-your-own-socket sessions have no carrier, so they have no recording and this is always null for them — there is no fallback, because a fallback would mean us storing the audio again.
What one call's analysis produced, as the session read returns it. status is pending while the analysis is queued, so a developer polling a session can tell "it is coming" from "this agent does not do analysis" (in which case the whole object is absent, not a status of its own).
Field
Type
Required
Notes
error
string or null
no
One short clause when status is failed. Never a provider response body and never a prompt.
fallback_used
boolean
no
default false; Whether the agent's fallback language model (pipeline_config.llm_fallback) answered any part of this call because its main model failed. The detail (from which turn, and why) is on the session read, timings.fallback.
How fast each part of the call answered (L12), from at most the first 50 replies. A part that never ran is absent, never 0. Speech-to-speech (realtime) sessions report no timings yet.
Field
Type
Required
Notes
fallback
CallFallbackInfo or null
no
Which language model answered (pipeline_config.llm_fallback). Null when the agent has no fallback.
greeting_ms
integer or null
no
The agent started on the call -> its first audio, in milliseconds.
llm_first_token_ms
CallTimingStage or null
no
Every model request -> its first token (discarded guesses and tool follow-ups included).
reply_ms
CallTimingStage or null
no
The caller's words were understood -> the first sound of the reply. A holding phrase such as 'One moment' counts as the first sound.
tts_first_audio_ms
CallTimingStage or null
no
Every time the voice was asked to speak -> its first audio (greeting and holding phrases included).
Which language model answered (L14): present on every call of an agent with a fallback.
Field
Type
Required
Notes
available
boolean
no
default true; False when the call could not use the fallback (its account, model or key was not usable, or its client failed to build): the call ran on the main model alone and reason says why.
failure
string or null
no
The main model's failure class (e.g. credits_exhausted). Null on a timeout and when the fallback never answered.
from_turn
integer or null
no
The caller line the fallback first answered from (0 = the greeting). Null when it never answered.
main_failed
boolean or null
no
True when the main model failed but the call ended before the fallback answered (its client was still being built, or the switch was waiting for a clean turn). Null otherwise.
model
string or null
no
The fallback model that answered. Null when it never answered.
reason
string or null
no
When it answered: error or timeout (the main model failed before saying anything). When it was unavailable: a short code such as account_changed or credentials_unavailable. Null when the fallback stood by.
used
boolean
yes
Whether the agent's fallback language model answered any part of the call.
Queue one outbound call from a number on your own verified carrier connection. Send an Idempotency-Key; a repeat returns the first call with duplicate: true.
true for sessions whose post-call analysis produced a result; false for every other session.
Error
When
401
No account session was presented, or it is invalid or expired.
403
The account is suspended or its email is not verified.
404
The 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.
422
The 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/voice/sessions?limit=20" \
-H "Authorization: Bearer $DVAARIK_TOKEN"
POST /console/v2/projects/{project_id}/voice/sessions#
Admit a media session and return a single-use ws_url valid for expires_in_seconds. Hand only that URL to the client that streams audio.
No account session was presented, or it is invalid or expired.
402
Wallet balance cannot cover this session's maximum duration.
403
The account is suspended or its email is not verified.
404
The 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.
409
The project or resource is in a state that refuses this change.
422
The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
503
BYOK provider accounts are unverified/unavailable, or the service is draining.
Plus the account-door errors above. Full list on the errors page.
No account session was presented, or it is invalid or expired.
403
The account is suspended or its email is not verified.
404
The 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.
422
The 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/voice/sessions/$SESSION_ID" \
-H "Authorization: Bearer $DVAARIK_TOKEN"
GET /console/v2/projects/{project_id}/voice/sessions/{session_id}/transcript#
No account session was presented, or it is invalid or expired.
403
The account is suspended or its email is not verified.
404
The 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.
422
The 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/voice/sessions/$SESSION_ID/transcript" \
-H "Authorization: Bearer $DVAARIK_TOKEN"
POST /console/v2/projects/{project_id}/voice/sessions/outbound#
Queue one outbound call from a number on your own verified carrier connection. Send an Idempotency-Key; a repeat returns the first call with duplicate: true.
No account session was presented, or it is invalid or expired.
402
Wallet balance cannot cover this call's maximum duration.
403
The account is suspended or its email is not verified.
404
The 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.
409
The project or resource is in a state that refuses this change.
422
The request body or query is not valid. detail is an array of {loc, msg, type} and loc names the offending field.
503
The carrier connection or BYOK pipeline is unavailable.
Plus the account-door errors above. Full list on the errors page.
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.