id that Place a call gave you — out_…
for a call placed at once, sch_… for one that was scheduled. Ids from another
workspace, and calls the API did not place, are 404.
Pushed to you instead: call.analysed
On the agent’s Actions page, add an endpoint and tick A call’s results are
ready. It receives exactly the object above, once per try, after the summary
and fields are written:
x-thinnest-signature: sha256=… header, an HMAC of the
raw body under the secret shown when you added the endpoint.
One event per try. A call with retry sends call.analysed after each
attempt under the same id: the first says status: "missed", attempt: 1
and retryScheduledFor; the retry’s own report follows when it rings. If a
queued try can never be placed, one last event says status: "failed" (or
cancelled, when the person opted out meanwhile) with hangup: "not_placed"
and the reason in error. GET always answers with the newest try.
It fires for every call the agent makes or takes, including missed ones —
status: "missed" with an empty fields is how you learn nobody picked up.
Poll GET as well if you cannot afford to miss one: a delivery is not retried,
and an endpoint that fails five times in a row is switched off.
Cancelling or ending a call
- Waiting to ring — booked, queued for its hours, or a retry. It is
cancelled; the answer is
200with the report,status: "cancelled". - Ringing or on the line — the call is ended at once, mid-sentence if the
agent is talking. The answer is
202with the report as it stands; the ending arrives a moment later like any other, with itscall.analysed. No retry follows, whateverretryasked for. - Already ended —
409with its report.
409 saying so. After either, the person may be
rung again by a new request.
Fields
string
The id the API handed you. Stays the same for a scheduled call once it rings.
string | null
Our reference for the attempt that actually rang. Null while scheduled. For
support; map on
id or reference instead.string | null
Your own
reference, untouched.string | null
The customer’s number.
string | null
Your number the call rang from. For a call still waiting, the
from you
chose — or null, when the agent’s own number will be decided as it dials.string
scheduled, ringing, connected, completed, missed, failed, or
cancelled (a scheduled call whose customer opted out, or whose number was
put on the do-not-call list, before it rang).string | null
Why it ended:
answered, no_answer, busy, rejected, unreachable,
cancelled, voicemail, before_agent, failed — or not_placed for a
scheduled call that never rang. Null while the call is live.string | null
Two or three sentences on what the customer said and how the call ended. Null
when summaries are off for this call, or nobody spoke.
object
The
extract fields the customer actually answered, keyed by your names and
typed as you asked. A field they said nothing about is absent, never
null or "N/A". Empty when nothing was asked or nothing was said.object[]
What was said on this call only —
speaker is agent, customer or team
(a teammate who joined). Your team’s internal notes are never included.object | null
A link to the call’s audio, or null when the call was not recorded.
- Anyone holding the link can play it — store it where you store the rest of the lead.
- It stops working when your plan deletes the recording: 30 days on
pay-as-you-go, 75 on Scale.
expiresAtis that moment; save the file itself if you need it longer. ready: falsemeans the audio is still arriving. The link is already valid and answers404 — not ready yetfor a minute or so.
object | null
The
metadata you sent with the call, untouched.number
Which try this report is about:
1 for the first, 2 for the first retry.string | null
When the next try will ring, if this one did not reach the person and a
retry is queued. Null otherwise.
string | null
When the summary and fields were finished. Null means they are not final yet —
read again in a few seconds.
string | null
For a scheduled call that could not be placed: why.
Cost
The summary and the fields are each one pass of a small model over the transcript after the call, billed to your balance like any other usage. Fields are only extracted when somebody will read them: a call placed through the API, or an agent with an endpoint subscribed tocall.analysed.