Am I affected?
Check a recent webhook payload orGET /executions response:

The agent Extractions tab showing the Extraction toggle, the Agent Extraction toggle marked Internal, and the Custom Analytics section, under a heading badged to be deprecated.
Migration by feature
Four features, four different paths. Open the one whose field appears in your payload.Extraction
extracted_data · flat keys → Rebuild as extractions. One extraction per field in your prose box. Keys stay stable if you reuse your current names.Custom Analytics
custom_extractions → Rebuild, one per item. Types map onto answer types. Numbers become strings, and min/max clamping has no equivalent — use validation.is_valid instead.Agent Extraction
agent_extraction → Discontinued. No replacement template and no migration on your behalf. Identify the fields from a payload and author your own.Call Summary
summary → No change required. Stays a flat top-level key, now sourced from the Call Summary extraction. Keep reading it as you do today.What the payload looks like
Category is a grouping label you choose. Name is the key you choose.Result object fields
Breaking changes
- Values are two levels deeper.
extracted_data.call_reasonbecomesextracted_data["Call Details"]["Call Reason"]. - Values are objects, not scalars. Select
objectiveorsubjectivefrom the result. subjectiveandobjectiveare always JSON strings. A numeric extraction returns"250000", not250000. Custom Analytics returned a real number, so parse it yourself. Min/max clamping has no equivalent; usevalidation.is_validto confirm the value parses.custom_extractionsandagent_extractionreturnnullonce the feature is removed from the agent, or on 18 September 2026. The keys stay in the payload.summarystays a flat top-level key. Webhook payloads keepsummaryas a string at the top level, now populated by the Call Summary extraction instead of the legacy summarisation task. If you read top-levelsummarytoday, no change is required.objectivecannot drift. Pre-defined answers are constrained by the request, so the value matches your configured option character for character. Switch fuzzy matching to exact comparison.- New capabilities: per-answer confidence, LLM reasoning, and format validation. Route
confidence_label: "Low"to human review.
Expected formats
is_valid: false is set and subjective holds the LLM’s response unchanged.
Calls with no user speech
This ships on 18 September 2026, alongside the deprecation. It applies to every agent, including ones already using Extractions. When a call contains no user turns (voicemail, an immediate hangup, dead air), the LLM has nothing to work from. Today it can still invent a plausible answer. From 18 September 2026 it will instead return a fixed sentinel across every extraction on the agent.No User Turn Detected will appear in subjective, objective, reasoning_subjective and reasoning_objective, in every extraction across every category.
Check for the sentinel before reading any extraction value, and route these calls to your no-contact path rather than treating them as answered.
CSV exports
Seven columns per extraction instead of one, followingextracted_data_<Category>_<Name>_<field>.
Configuring through the API
/dispositions. “Disposition” is the API’s name for a single extraction. The /extractions path is an internal template registry, not this endpoint.Creating one
nameis the result key.categoryis the key above it.questionis the LLM prompt. State what to look at, what to ignore, and what each option means.- Always include a fallback option such as
NAso the model is never forced to pick a real answer for a question the call never reached. - Set
is_subjective: truefor free text,is_objective: truefor pre-defined, or both. subjective_typeacceptstext,numeric,boolean,email,timestamp,regex.regexalso requiressubjective_type_config: {"pattern": "…"}.- Extractions in one category are answered in a single LLM call, so grouping related fields keeps their answers consistent with each other.
Verifying a migration
{"extracted_data": {…}} in exactly the shape a live call produces. Paste a real past transcript and diff against what your old configuration returned for that call. No call is spent.
Running both side by side
extracted_data is a shared field. While a legacy extraction task and Extractions are both enabled, one object holds both shapes, with flat legacy keys alongside nested categories:
subjective and objective. Branching on the nested shape stays correct during and after the transition.
Timeline
Now
18 September 2026
custom_extractions and agent_extraction return null. Flat keys stop appearing in extracted_data. summary continues, sourced from the Call Summary extraction. Unmigrated configurations return no results.FAQ
Is historical data converted?
Is historical data converted?
Can I run both during the transition?
Can I run both during the transition?
Will results be worded differently?
Will results be worded differently?
Can I keep my field names?
Can I keep my field names?
Will you migrate my configuration for me?
Will you migrate my configuration for me?
/dispositions API. This includes Agent Extraction, which is discontinued rather than replaced.What happens on 18 September if I have not migrated?
What happens on 18 September if I have not migrated?
null, and no extractions run unless configured. Transcripts, recordings and call summaries are unaffected.My payload does not match these pages.
My payload does not match these pages.
execution_id of the call, the field you were reading, and the value you expected. The execution_id is the id in the webhook payload and in GET /executions responses. One id is much quicker for us to work with than a description of the problem — we can pull that exact execution and see which extraction path produced the value.execution_id for a payload that does not match this guide.

