Fetch per-turn timing
How long each turn of a conversation took.
How long each turn of a conversation took.
Separate from GET /v2/calls/{execution_id} because it is large — a long
call runs to hundreds of turn rows — so fetch it only when you need it.
Each turn reports what the agent did, in the order it did it:
heard
How long the caller's words took to settle into a final transcript.
thought
Time to the model's first token, and to its last.
spoke
Time to the first audio of the reply, and to the end of it.
round_trip_ms
The three added together: from the caller finishing speaking to the
first sound of the answer. It is the only latency the person on the
phone experiences, and it spans all three stages, so no single one of
them can report it. It is null unless every part was measured — a
two-part sum presented as three is smaller than the truth, and that is
the one direction a latency figure must never be wrong in.
round_trip_missing then names the stages that did not report.
measured is false when the call produced no turns, and
not_measured_reason says which of three cases applies:
in_progress (the call has not finished — scheduled, queued, ringing or
live; poll again), no_turns_completed (the call connected but nobody
spoke), or never_recorded (no timing exists and none will: the call
never connected, or it predates timing capture).
Rate limit: 1200 requests per minute per organization, shared by the endpoints that read calls — lists, single calls, transcripts, recordings and timing — and usage. Exceeding it returns 429 with Retry-After; the X-RateLimit-* response headers report your remaining allowance on every call.
v2/calls/{execution_id}/timingAuthorization
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
organization_idOrganization Id
Optional. Must equal your key's organization.
Response Body
200
One row per turn, or measured:false with a reason when the call produced none.
execution_idExecution Id | null
The call this timing belongs to.
measuredRequiredMeasured
Whether any turn was recorded.
not_measured_reasonNot Measured Reason | null
Why there is nothing: 'in_progress' (the call has not finished — scheduled, queued, ringing or live), 'no_turns_completed' (the call connected but nobody spoke), or 'never_recorded' (no timing exists and none will: the call never connected, or it predates timing capture). Null when measured is true.
setupSetup | null
One-off costs before the conversation: connecting to the transcriber and synthesizer.
turnsTurns
One entry per turn, in order.
summarySummary
The call's timing at a glance.
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.
One row per turn, or measured:false with a reason when the call produced none.

