Fetch one execution
Fetch one execution by id.
Fetch one execution by id.
The same id answers for the call's whole life: while it is still scheduled
(before any dial), while it is ringing or in progress, and after it reaches
a terminal status. A client never has to branch on which phase it is in —
read status and is_terminal.
A call belonging to another organization answers 404, exactly like an id that does not exist: confirming that someone else's execution id is real would leak more than it is worth.
The id in the response can differ from the id you asked for. In the
rare case where telephony state was lost mid-call, the platform folds the
dispatch record into the record of the call that actually happened. Your
original id keeps resolving — this endpoint follows the fold — but the
body's execution_id is then the surviving record's id. Treat the
response's execution_id as canonical, store it, and do not assert that
it equals the id you requested. List endpoints never show the same call
twice.
Rate limit: 600 requests per minute per organization (bucket executions.list). Exceeding it returns 429 with Retry-After; the X-RateLimit-* response headers report your remaining allowance on every call.
v2/calls/{execution_id}Authorization
AuthorizationRequiredBearer <token>
Your Graine API key. Create one in the dashboard under Developers, or via POST /v2/api-keys. Send it as Authorization: Bearer <key>.
In: header
Path Parameters
execution_idRequiredExecution Id
The call's id, as returned by POST /v2/calls or GET /v2/calls.
Query Parameters
include_transcriptInclude Transcript
Include the full transcript.
falseorganization_idOrganization Id
Optional. Must equal your key's organization.
Response Body
200
The execution, whatever phase it is in.
execution_idExecution Id | null
The id this call runs under for its whole life.
statusStatus | null
Lifecycle status: queued, scheduled, rescheduled, initiated, ringing, in-progress, completed, failed, busy, no-answer, canceled, stopped, balance-low, error or call-disconnected.
is_terminalIs Terminal
True once the call has reached a status it will never leave.
falsedirectionDirection | null
inbound or outbound.
agent_idAgent Id | null
The agent that ran the call.
batch_idBatch Id | null
The batch that placed it, if any.
campaign_idCampaign Id | null
The campaign the batch belongs to, if any.
contact_idContact Id | null
The contact row dialled, if any. Null on a call you placed directly.
parent_execution_idParent Execution Id | null
The original attempt, when this call is a retry or a follow-up. Null on a first attempt.
retry_countRetry Count
Attempts before this one.
0to_numberTo Number | null
Recipient.
from_numberFrom Number | null
Caller ID used.
providerProvider | null
Always "custom". /v2 does not name the carrier.
duration_secondsDuration Seconds | null
Connected audio, in seconds.
answered_by_voicemailAnswered By Voicemail | null
True when a voicemail box picked up instead of a person.
hangup_byHangup By | null
Which side hung up.
hangup_reasonHangup Reason | null
Why the call ended.
recording_urlRecording Url | null
Audio of the call. Null when nothing was recorded.
costCost
What the call cost.
summarySummary | null
Model-written summary of the conversation.
sentimentSentiment | null
positive, neutral or negative.
extracted_dataExtracted Data | null
The variables your agent's analysis configuration asked for, keyed by variable name.
custom_analyticsCustom Analytics | null
The analysis configuration that produced 'extracted_data'.
variablesVariables
The prompt variables this call ran with.
errorError
Present only on a failed call.
scheduled_atScheduled At | null
When the call is due to be placed. Null on a call that was dialled immediately.
created_atCreated At | null
When the call was created.
updated_atUpdated At | null
Last change to this record.
completed_atCompleted At | null
When the call reached a terminal status.
transcriptTranscript
Present only when include_transcript=true. Either an array of {role, content} turns or a plain string, depending on how the call was recorded. GET /v2/calls/{execution_id}/transcript normalises both into one shape.
401
1100 — missing, unknown or inactive API key. 1101 — a browser session token was presented instead of an API key.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
403
1102 — the key is valid but lacks the scope this endpoint requires, or names another organization. GET /v2/scopes reports what a key holds.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
404
1200 — no such resource in your organization. A resource belonging to another organization answers 404, never 403.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
422
1001 — the body or query failed validation; the message names the first offending field.
errorRequiredinteger
Stable integer code from the error table. Branch on this, not on the message.
messageRequiredstring
One human-readable sentence. Wording may change; the code will not.
429
1300 — the per-organization request rate or concurrent-call limit was reached. Carries Retry-After.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
503
1501 — a service this endpoint depends on is unreachable or returned a 5xx.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
The execution, whatever phase it is in.

