What you get out of the box
Every call record has these fields populated automatically:| Field | Type | Description |
|---|---|---|
call_summary | string | 1–2 sentence summary of what happened |
caller_sentiment | enum | happy, neutral, or frustrated |
call_successful | boolean | Did the caller get what they needed? |
extracted_data | object | Your custom fields (see below). Empty {} if none configured. |
GET /v1/calls/:id and GET /v1/calls. In the webhook payload the same data is delivered under flat, renamed keys: summary, sentiment, successful, and extracted.
Custom data extraction
Beyond the defaults, you define exactly which fields to pull from each call. Setdata_extraction_fields on the agent — an array of field definitions:
null — the agent won’t invent data.
Field types
| Type | Returns | Use for |
|---|---|---|
text | string | Names, emails, free-form values. Optional format_example guides the format. |
selector | string from choices | Categorising into a fixed set of options. Requires choices. |
boolean | true / false | Yes/no questions (callback wanted, issue resolved). |
number | number | Quantities, counts, party sizes. |
Field properties
| Property | Required | Notes |
|---|---|---|
type | yes | One of text, selector, boolean, number |
name | yes | Key used in extracted_data. Keep it snake_case. |
description | yes | What the agent should look for. Be specific — this drives accuracy. |
optional | no | If true, the field stays null when not mentioned rather than guessed |
choices | selector only | The allowed values |
format_example | text only | Example of the expected format, e.g. name@example.com |
extracted_data:
On the API, your custom fields are keyed under
extracted_data. In the webhook payload the same fields arrive under extracted.When analysis runs
- Inbound, outbound, and batch calls — all directions, always.
- Calls with real conversation — if the caller spoke fewer than 2 turns or fewer than 10 words total (hang-ups, voicemail), the AI pass is skipped to save cost. Defaults fall back to a short summary and
call_successful: false. - Asynchronously, after the call ends — by the time your webhook fires (~60s later), all fields are populated.
How extraction works under the hood
Analysis runs in two stages:- Base analysis — always runs. One AI call returns
call_summary,caller_sentiment,call_successful. - Custom extraction — only runs if the agent has
data_extraction_fields. A second AI call returns your custom fields.