Concurrence API
Release history for Concurrence backend APIs, including Classic, Platform, and Scribe changes.
Updates to the Platform, Classic, and Scribe APIs, with integration requirements and migration steps. Latest numbered Concurrence API release: v0.9.557 (July 2026). Unnumbered entries follow the date of the product announcement or source change; see the linked guide for deployment requirements.
Find older versions in the archive index.
Current Integration Boundaries
When upgrading an existing integration, check these provisioning and compatibility requirements alongside the dated changes below.
Managed channel provisioning and workspace bindings are separate. Concurrence supplies the provisioned use-case identifier. Public Platform clients create, inspect, or remove its service binding; the former Platform use-case inventory and explicit ownership operations are retired. See Use Cases & Bindings.
Authenticated dataset intake remains available. The separate upload-link and external HMAC paths are retired. The current intake path does not perform inline malware scanning. See Customer Data Intake and Intake Upload Links.
Standalone ringless voicemail is retired. Voicemail handling during an ordinary outbound call remains a separate voice behavior. See Voicemail.
SMS controls have distinct evidence. Registration, recipient consent, the opt-in-message send record, and suppression are separate. Provider acceptance does not prove delivery or prior consent. See SMS.
Change History
October 12, 2026: Caller Verification Before Patient Context
A voice or text session whose caller matches a record by phone number, or that opens with an entity_id, now starts unverified. The record's demographics and clinical context reach the agent only after the caller's stated full name and date of birth match exactly one candidate record through the world_confirm_patient_identity tool. Repeated failures lock verification for the rest of the session. Add the tool to the Context Graph state that confirms identity. Until a graph offers it, the agent works without the record. See Caller Verification.
October 12, 2026: Dynamic Transfers Dial Only Approved Numbers
A service with dynamic forwarding (voice_config.forwarding.forward_to set to null) now transfers only to numbers in the new forwarding.approved_destinations map, which pairs each E.164 number with a label for what answers there, up to 50 entries. forward_call offers only those numbers, and any other number is refused without dialing. A dynamic service with no approved destinations does not offer forward_call, so its agent cannot transfer. Setting approved_destinations on a fixed-destination service returns 422. Each destination must still be allowed on the channel's allowed_forwarding_numbers. See Call Forwarding.
October 12, 2026: Calls Without a TTS Setting Speak ElevenLabs v4 Turbo
A call or voice note whose configuration names no tts_provider and stores no TTS setting at any level now speaks ElevenLabs eleven_v4_turbo with the ElevenLabs default voice, instead of Cartesia Sonic 3.6. Any stored setting keeps the call on Cartesia: a workspace voice_id, tts_model, pronunciation_dict_id, or tts_config, an agent voice_config with a voice_id or tts_config, or a service tts_config. A named tts_provider or a matching language_providers entry still decides the provider. To keep an unconfigured service on Cartesia, set its tts_provider to cartesia. See Default TTS Model.
October 12, 2026: Safety Responses on Calls and Chats
These behaviors are now on for every service:
Crisis resource. On text and platform-managed voice conversations, the agent's instructions always carry the deployment region's crisis resource, for example 988 in the US and Canada, and tell it to give that resource when a caller expresses suicidal thoughts or intent, self-harm, or an overdose. This is model guidance, so test it like any other safety instruction.
Spoken-reply check. On platform-managed voice calls, a pattern check on the agent's reply blocks a claim that a booking or cancellation is done when the call's tools did not complete one, dosing or medication-change advice, and a promise to contact emergency services. The caller hears a short correction in the call's language instead. English and Spanish are covered, and a pattern check can miss or over-match a phrasing.
Speech recognition failure. If the recognizer fails during a platform-managed call, the call switches once to another recognizer that supports the caller's language. When none is available, the agent apologizes and then transfers to the service's fixed forwarding destination on a phone call, or ends the call.
See Runtime Safety.
October 12, 2026: Simulations and Test Sessions Run Tools in Simulation Mode
Simulation sessions, calls from workspace test caller numbers, and text turns from test credentials now run every tool in simulation mode. No tool call reaches an integration, a world write, or a platform function. Reads and writes alike return {"dry_run": true, "tool": "<name>", "would_execute": true} instead of executing. The text Playground and browser test calls still run tools live. Re-check simulation cases, evaluations, and test-number scripts that depend on real tool results. See Write Isolation.
October 12, 2026: Observer and Test-Call WebSocket Credentials
The Voice Agent observer (/agent/observe/{call_sid}) and test-call (/agent/test-call) WebSockets now accept a credential only in the Sec-WebSocket-Protocol header, as auth, <token>. A ?token= query parameter is no longer read, and a connection without the auth subprotocol closes with 4001. A workspace can hold up to 5 test calls at once, and starting another returns 429. A test-call connection without encoding=mulaw closes with 4008. The Platform SDK's observer helper already uses the subprotocol. See Observer WebSocket.
October 12, 2026: Voice Call Fixes
What a caller says at pickup is no longer dropped while speech recognition connects on platform-managed calls.
On
gpt_realtime, an inbound greeting plays in full. Caller speech during the greeting no longer cancels it, and the agent answers that speech after the greeting.After a silence, the check-in asks whether the caller needs anything instead of repeating the last answer.
Asking for the same lookup again in one session runs the tool again, on voice and text, instead of answering from the earlier result.
A request to speak with a person no longer ends the conversation. When
forward_callis available the agent is told to transfer. Otherwise it says it can't connect the caller to a person and keeps helping.On an English service, a caller who speaks Spanish for two turns in a row now gets Spanish fillers and a Spanish voice.
When a call drops while the caller is still speaking, the unfinished words are recorded as an incomplete turn, and the call's quality score accounts for the unanswered turn.
A voice note from a caller with no known language is transcribed in the language it was spoken in, so a Spanish note on an English workspace gets a Spanish reply instead of
422"No speech detected".
See Voice Agent.
October 12, 2026: Caller Local Time and Workspace Timezone
The agent's current time now follows the caller's timezone instead of always Eastern time. A session opened with an entity_id uses the timezone of the patient's assigned clinic when one is recorded. Otherwise it uses the new workspace timezone, then the deployment region's default zone, which the agent's instructions mark as a fallback. Set timezone to an IANA name with PATCH /v1/workspaces/{workspace_id}, or send null to clear it. Workspace reads return it. See Workspace Timezone.
October 12, 2026: Runs Dormant Status and Voice Start Time
An open text, SMS, email, or web conversation that has been idle past its channel's activity threshold now has run status dormant instead of running. A dormant run is not live, has no ended_at, and is not eligible for takeover. Its next turn makes it running again. Filter with status=dormant. The live filter still means running and paused, and Runs Summary adds a dormant count.
Voice runs now take started_at and ended_at from the call's start and end, and sort by the call start. Previously both were the hangup time. An unsupported sort_by on the run list returns 422 with the allowed values. See Status Mapping.
October 12, 2026: Conversation History and Paged Turns
Conversation detail now returns each voice utterance once, and with include_tool_calls=true each tool call appears on the agent turn that made it. Previously a platform-managed call could come back with every turn twice and no tool calls. Detail adds truncated, which is true when a very long conversation stopped at the read limit. The new GET /v1/{workspace_id}/conversations/{conversation_id}/turns pages the same turns for voice or text, with sort_by set to +turn_index or -turn_index, limit up to 200, and an opaque continuation_token.
On text conversations, every user message now stays in history when a turn moves to a new Context Graph state, and the reply is filed under its own turn. Turn responses return the conversation's current context_graph_state, and the turn's output carries its state transitions. A text conversation now ends only when it is closed, reaches a terminal state, or expires. A lost lease, a cancelled turn, or an error leaves it open. See Get Conversation Detail.
October 12, 2026: Event Stream Scoped to One Conversation
GET /v1/{workspace_id}/events/stream accepts an optional conversation_id. With it, the live stream and its Last-Event-ID replay carry only events whose top-level conversation_id matches. Events without one, such as session-keyed text events and call events, are left out. Heartbeats and control frames are unchanged, and a stream opened without the parameter is unchanged. See SSE Events.
October 12, 2026: Validation Errors Omit Submitted Values
Platform API and Voice Agent 422 validation errors now return only loc, msg, and type for each entry, never the submitted input or ctx. A conversation context that does not match the service's accepted_context returns the same list with the offending key in loc, for example ["body", "context", "plan_id"], instead of a bare Unprocessable Content. A turn with no message, content, or media on a conversation that already has a turn now returns 422. An empty message still starts a conversation that has no turns yet. See Send a Turn.
October 12, 2026: Simulation Runs, Cases, and Pass Rates
Pass rates.
pass_rateis passed divided by passed plus failed. Grading errors, pending, and skipped verdicts are counted on every rollup but stay out of the rate, and the rate isnullwhen there is no passed or failed verdict. Eval results on runs older than 48 hours keep their status instead of showingerror.Judge verdicts. An LLM-judge verdict records
passed,rationale, andreferenceswith no score, andscore_labelis removed fromchecks. Metric checks keepscore.Lists. The simulation run list pages with
sort_by,limit, andcontinuation_token, filters bystatus,source,case_id,suite_id, andtags, and returnstotal. The case list addstotal,sort_by, andsearch. The newGET /v1/{workspace_id}/simulations/suites/{suite_id}/casesreturns a suite's cases in one paged read, and deleting a case removes it from every suite.Sessions and runs. A step uses the session in the path, and a different body
session_idreturns422. Creating a session under a missing run, scoring a missing session, or completing a missing run returns404, and completing a finished run returns409. Runtime failures return502, and an unreachable runtime returns503.Tags and limits. Run and session tags that start with
suite:,suite_run:, orsafety:are set by the server, and sending one returns422. A workspace can have 10 simulation launches running at once. Another case, suite, benchmark, or bridge launch returns429.
See Simulation Coverage.
October 12, 2026: Metric List and Trends
GET /v1/{workspace_id}/metrics now returns one latest row per metric series. A categorical or boolean period is folded into one row whose distribution counts each value. The list pages with sort_by (-period_start by default, or +metric_key), limit, and an opaque continuation_token, and offset is removed. Trends cover the whole requested window. An unknown metric key returns 404, service_id and run_id must be UUIDs, and a date_from after date_to returns 422. Creating or updating a production eval returns 422 when its metric_key is missing or is not an active AI-query call-intelligence metric, and the metric catalog leaves out built-ins the workspace turned off. See Query Surface.
October 12, 2026: Quality Metrics Judged on Transcripts
For production conversations, the 11 standard quality metrics and custom AI-query call_intelligence metrics now judge the conversation's transcript, up to its newest 32,000 characters, instead of a summary of counters with no dialogue. The standard judges answer from the metric's fixed labels or score range and can abstain, which leaves the value null. Values computed from October 12 can move away from the default labels the judges gave before, such as neutral sentiment and no_event safety, so expect a step change in trends. Values already computed are not rescored. See Standard Quality.
October 12, 2026: Version Validation and Server-Side Filters
An agent or Context Graph version path that is not
latestor a positive 32-bit integer returns422instead of500.0and negative numbers also return422.Creating or updating a service now checks its version sets the same way the version-set upsert does: a name must match
[A-Za-z0-9_-]{1,40}(422), and each pinned version must exist for the service's agent and Context Graph (404). Changing a service's agent or graph checks its stored pins against the new target.Pushing an agent or Context Graph version updates the parent's
updated_at, sosort_by=-updated_atreflects the newest version.GET /v1/{workspace_id}/servicesfilters byagent_idandcontext_graph_id, andGET /v1/{workspace_id}/api-keysfilters byroleand bysearchon the key name or key ID. Both apply before pagination.Tool resolution for a service that is not in the workspace returns
404instead of503.
See Services.
October 12, 2026: Platform Claude Calls Run on the 5.5 Models
Platform API Claude calls now use each tier's 5.5 model, including the skill tester, trigger actions, simulation callers and judges, production eval judges, and the Insights Agent. A skill created without a model now stores claude-sonnet-5-5. The skill tester runs a retired pin on its tier's 5.5 model, so a test matches the same skill in a conversation. Stored pins are not rewritten. See Skills.
October 12, 2026: Integration URLs Must Be Public HTTPS
An integration's base_url, token_url, and exchange_url must now be an HTTPS URL on a public host. Create and update return 422 for any other URL, and a call to a stored integration whose host is not public is refused without sending a request. Integration calls and token requests no longer follow redirects, so a 3xx response is an error. Point each URL at its final address. See Integrations.
October 12, 2026: PHI Access Audit Entries
PHI read audit entries now keep the resource identifier from the request, including call IDs and other external identifiers, along with the matched route and outcome. An authenticated request that fails before a response starts is recorded as a failure with no HTTP status, instead of leaving no entry. See PHI Access Logging.
October 10, 2026: Connector Runner Retired
The connector runner is retired. The platform no longer polls data sources, runs the gap scanner, dispatches scheduled outbound_task calls, or delivers connector write-back, including approved external write proposals. The Platform API removes:
POST /v1/{workspace_id}/data-sources/{data_source_id}/syncPOST /v1/{workspace_id}/settings/gap-scanner/previewandPOST /v1/{workspace_id}/settings/gap-scanner/scanGET /v1/{workspace_id}/health/synchealth_status,last_sync_*, andis_staleon data sources, the connector status fields on pipeline status,last_pollandlast_sync_*on the pipeline source list and overview,last_poll_at,last_change_at, andsync_healthyon FHIR status, and thepipelinesection of the workspace health snapshot
Data-source records, sync history, and the pipeline reads over stored events remain. Data sources and gap-scanner settings can still be saved, but nothing acts on them. Platform SDK 0.111.0 removes the matching methods. Remove calls to the removed operations, and place outreach calls through the Calls API. See Connector Runner.
October 10, 2026: Search Runs
GET /v1/{workspace_id}/runs accepts search, a case-insensitive substring match on a conversation run's entity name, caller ID, or phone number, applied before pagination. Framework runs carry none of these and are left out while searching. See Search Runs.
October 10, 2026: Pre-3.6 Cartesia Pins Speak Sonic 3.6
A call whose resolved Cartesia model is a Sonic 3 or Sonic 3.5 id now speaks Sonic 3.6 (sonic-3.6-2026-08-27). This covers sonic-3, sonic-3-preview, sonic-3-2026-01-12, sonic-3.5, and sonic-3.5-2026-05-04, alongside the retired models from October 9. sonic-3.6, sonic-preview, and ids the platform does not recognize are sent as stored. Voice and other settings are unchanged, and stored configuration is not rewritten. See Retired Cartesia Models.
October 10, 2026: Insurance-Card Prefill and Intake Roll-Up Fixes
Insurance-card OCR prefill on surfaces works again. An intake file verdict that completes a batch now refreshes the dataset update runs that include that batch. See Surfaces and Customer Data Intake.
October 9, 2026: Claude Pins Run on the 5.5 Models
In live conversations, a skill or a service model preference pinned to a retired Claude model now runs on the current model of the same tier: claude-sonnet-5 and claude-sonnet-4-6 run on claude-sonnet-5-5, claude-opus-4-8 runs on claude-opus-5-5, and claude-haiku-4-5 runs on claude-haiku-5-5. Stored configuration is not rewritten, and skill reads still return the stored id. A skill created without a model is still stored as claude-sonnet-5, so it runs on claude-sonnet-5-5. The standalone skill tester runs the stored id, so a test result can differ from the same skill in a conversation.
On claude-sonnet-5-5 and claude-opus-5-5, a skill round that returns no tool call or only narration is retried once, and the tester no longer fails that retry. A skill whose last round stops at the token limit or on a refusal without any text now returns a failed result instead of an empty successful one, on every model. Re-test skills that relied on the old models, and update stored pins to the current ids so the configuration shows what runs. See Skills.
Since October 12, a skill created without a model stores claude-sonnet-5-5, and the skill tester also runs retired pins on the 5.5 models. See Platform Claude Calls Run on the 5.5 Models.
October 9, 2026: Voice Configuration Model Allowlists
Service voice_config now accepts only current vendor models. realtime.model accepts gpt-realtime-2.1, the default, and gpt-realtime-2.1-mini; gpt-realtime-1.5 and gpt-realtime-2 return 422. realtime.transcription.model accepts only gpt-transcribe, which is also its default; whisper-1, gpt-4o-mini-transcribe, and gpt-4o-transcribe return 422. realtime.reasoning_effort is accepted with either allowed model.
The service voice_config.tts_model field is removed. A request that still sends it is accepted, but the value is ignored, and a stored value no longer selects a model. To pin a Cartesia model on a service, set tts_config.model. Without a pin, Cartesia calls use the default, Sonic 3.6. See Voice Configuration.
October 9, 2026: Tool Turns and Engage Reasoning Effort
On gpt-5.4, gpt-5.5, gpt-5.6, and gpt-6 engage models, a text turn that offers the model tools is now sent at reasoning_effort none, which is the only effort those models accept with tools. Previously a version set that stored a higher engage effort made every such turn fail. A stored effort above none is overridden on tool turns, and a turn without tools keeps the configured effort.
Creating or updating a service, or upserting a version set, now returns 422 when an engage model preference for one of those models sets reasoning_effort above none in params or experience_controls. The message names the version set, the preference, and the model. Clear the effort or set it to none before saving. Existing version sets still load, but the next save of one fails until the effort is fixed. See Services.
October 9, 2026: A Model Rejection Fails the Text Turn at Once
When the model rejects a text turn with a 4xx, the turn now fails right away instead of waiting about 60 seconds and returning a retryable 504. A JSON turn returns 502 with "Model rejected the request (HTTP <status>)". A streamed turn ends with a terminal error frame carrying that message, code upstream_error, retryable false, and status_code 502. Any other failure inside the turn returns 500 "Agent response failed", or the equivalent non-retryable frame. The upstream model's response text is not included.
Both failures are non-retryable: a retry with the same key replays the failure. Fix the configuration or content that the model rejected, then send a new turn. See Streaming Turns (SSE).
October 9, 2026: Distinct Turn IDs for Overlapping Turns
When two POST .../turns requests on one conversation overlap and both are accepted, each response now carries its own turn_id and turn_index, matching the conversation's history. Previously the earlier turn could come back with the later turn's identity. Per-turn records keyed on turn_id, such as feedback, now attach to the right turn. See Send a Turn.
October 9, 2026: Integration Endpoint Schemas Follow the Tool Subset
Creating or updating an integration endpoint now returns 422 when its input_schema falls outside the tool-schema subset that skills already follow: a top-level anyOf, oneOf, allOf, or $ref, a root type other than object, or an array property without items. The message names the construct. Previously these schemas were accepted, but the agent could not call the endpoint as a tool.
Existing endpoints are not rewritten, and an update that leaves input_schema out is unaffected. An endpoint stored with an unsupported schema is still unavailable to the agent until its input_schema is reshaped, for example by dropping a root anyOf and describing which parameters go together in the endpoint description. See Integrations.
October 9, 2026: Invoke Argument Errors Return 422
POST /v1/{workspace_id}/functions/{function_name}/invoke and POST /v1/{workspace_id}/data_queries/{query_id}/invoke now return 422 when the arguments do not fit the declared parameters: an unknown argument, a missing required argument, or, for functions, a value that cannot be converted to its declared type. These previously returned 503, which invited a retry of the same request. Execution failures still return 503. Fix the arguments instead of retrying a 422. The MCP invoke_platform_function tool returns these errors as an error result. A function test still reports an argument error as status fail. See Invoke a Function.
October 9, 2026: World Entity List Without a Type
GET /v1/{workspace_id}/world/entities without entity_type returns entities again. In some workspaces it returned 500. Workspace-level records that have no entity ID are no longer included in the list or its total. See List Entities.
October 9, 2026: Simulation Recommendations Return Suggestions
POST /v1/{workspace_id}/simulations/sessions/recommend returns its documented suggestions list of candidate caller messages again. It had returned 500 on every call. The response shape is unchanged. See Recommend Caller Messages.
October 9, 2026: Insights Agent Stays on One Model
An Insights Agent chat now uses the same model for every answer. Previously a rate limit could switch a session to a different model mid-conversation. When the model is unavailable, the chat now returns its error block and keeps the session, so the question can be asked again. See Insights Agent.
October 9, 2026: Realtime Voice Calls on Usage Meters
Calls on the gpt_realtime voice runtime now record the voice minutes and call count meters when they end, like calls on the platform-managed runtime. Previously these calls were missing from both meters. Calls that ended before this release are not backfilled, and tool counts for these calls are not reported on the action count meter. Meter projection is asynchronous. See Billing Meters Are Separate.
October 9, 2026: ElevenLabs v4 Turbo Is the Default and Retired Pins Move to It
ElevenLabs calls whose resolved configuration stores no model now use eleven_v4_turbo instead of eleven_flash_v2_5. A stored pin of eleven_flash_v2_5, eleven_flash_v2, eleven_turbo_v2_5, eleven_turbo_v2, eleven_multilingual_v2, eleven_multilingual_v1, or eleven_monolingual_v1 also moves to eleven_v4_turbo. This includes eleven_multilingual_v2 pins saved from the Developer Console's ElevenLabs settings. The change applies to live calls and to audio-turn voice notes. Stored configuration is not rewritten, and the voice is unchanged.
On eleven_v4_turbo, only stability is applied. Configured or emotion-driven style and speed, and stored similarity_boost and use_speaker_boost, have no effect. Review ElevenLabs services that rely on speed or style, and listen to a test call before relying on the new default. See Default TTS Model.
October 9, 2026: OpenAI Speech Recognition Uses gpt-transcribe
When a call's speech recognition routes to OpenAI, for example through a workspace stt_provider of openai or for a caller language the default recognizer does not support, the session now uses gpt-transcribe. Keyterms are sent as a keyword list, with <, >, and line breaks removed and duplicates dropped regardless of case, and the caller language is sent as a language hint. This release also fixes a connection error that could stop the OpenAI recognition session from opening. See Speech Recognition.
October 9, 2026: A Close Ends Every In-Flight Text Turn
A close that lands while a text turn is running now ends that turn shortly after the close on every path. A JSON turn returns 409 "Conversation is closed". A streamed turn ends with the non-retryable Conversation is closed frame, including when token streaming is off, instead of leaving a token preview as the answer.
Streamed turns also end with typed terminal frames. A reply timeout is the only retryable one (code upstream_error, status_code 504), because the turn may still be running. A turn that ended without a reply gets a non-retryable frame (status_code 500); a retry with the same key replays it, so send a new turn instead. A turn that streamed tokens and then replied with no message sends an empty message before done. See Streaming Turns (SSE).
October 9, 2026: Keepalives on Streamed Turns and Sessions
Streamed text turns now carry an SSE comment line, : ping - <timestamp>, every 15 seconds. This applies to POST .../turns with Accept: text/event-stream and to POST .../turns/stream. The sessions/connect WebSocket sends {"event": "ping", "data": {}} whenever 15 seconds pass with nothing else sent, during and between turns. Both keep proxies and load balancers from closing a quiet connection, for example while a tool runs.
Standard SSE parsers skip comment lines. A hand-written SSE parser must skip them too, and a WebSocket client must ignore the ping event and any other event it does not recognize. The ping frame needs no reply and does not reset the session's 5-minute inbound idle timer. See Streaming Turns (SSE) and Sessions.
October 9, 2026: Session WebSocket Stays Open Across Turns
A sessions/connect WebSocket now stays open after the opening turn and carries every later user_text turn on the same connection. Previously the socket could close right after the opening turn's done frame. Clients that reconnected after each turn as a workaround can keep one connection per active chat. See Sessions.
October 9, 2026: Run Lookup at Any Age
GET /v1/{workspace_id}/runs/{run_id} and the run-scoped operations now resolve a conversation run of any age. Previously a conversation run outside the workspace's most recent conversations could return 404, even though it appeared in the run list. Projected framework runs are still looked up among recent framework history. See Get a Run.
October 9, 2026: Retired Cartesia Models Speak Sonic 3.6
When a call's resolved Cartesia model is one that Cartesia has retired or is retiring, the call now uses Sonic 3.6 (sonic-3.6-2026-08-27) instead of producing no audio. This covers sonic-2, sonic-turbo, and sonic-3-2025-10-27, which Cartesia retires after October 20, 2026, and older Sonic models. It includes a service tts_model of sonic-turbo. Voice, speed, volume, tone, and language are unchanged, and stored configuration is not rewritten. Replace retired pins with a current model. See Retired Cartesia Models.
October 9, 2026: ElevenLabs Barge-In Keeps Only Heard Speech
On the platform-managed voice runtime, a barge-in during an ElevenLabs reply now trims that reply in conversation history to the words the caller heard, on every ElevenLabs model the platform speaks. Previously a reply on eleven_flash_v2_5 or another v2-era model kept the full generated reply in history, so the next turn could assume the caller heard text that never played. Cartesia replies already trimmed this way. See Barge-In Detection.
October 9, 2026: Live Call Context Validation Errors Omit Values
A malformed body sent to POST /agent/calls/{call_sid}/context now returns a 422 whose detail entries carry only loc, msg, and type. The response no longer echoes submitted values, such as context values, back to the caller. Do not parse input or ctx from these errors. See Set Context on a Live Voice Call.
October 9, 2026: FHIR Bundle Builder Removed and Inert Skill Fields
POST /v1/{workspace_id}/fhir/build-bundle is removed from the Platform API. Build the FHIR collection Bundle in your own code and submit it with POST /v1/{workspace_id}/fhir/import.
Skill requests still accept enable_citations and checkpoint_enabled, and skill reads still return them, but the runtime does not read either field. See Skills.
October 9, 2026: Channel Manager SMS and Media-Stream Errors
Concurrent SMS sends from one use case no longer return 500 after the message went out, which had left a sent message without a record. A database serialization conflict in Channel Manager now returns 409 instead of 500. Starting a participant media stream on a call leg that has already ended returns 409 "Participant is no longer on the call" instead of 500. See Channel Manager.
October 8, 2026: Set Context on a Live Voice Call
A trusted backend can now set verified context on a live voice call with POST /agent/calls/{call_sid}/context on the agent engine host. Tools bound to the key receive the value server-side, and the model never sees it. The request needs a workspace API key with Conversation:CreateForPrincipal, and every key must be declared in the service's accepted_context. Each key is set once per call: the same value returns 200 unchanged, and a different value returns 409.
On voice calls, a tool bound to a declared key that the call did not start with now refuses to run until that key is set, and a companion-skill input bound to such a key is refused. Review voice services that bind optional context keys. See Set Context on a Live Voice Call.
October 8, 2026: Closing a Conversation Ends Its Streamed Turn
When a conversation is closed while a streamed text turn is running, the stream now ends within about a second with a terminal error frame: "Conversation is closed", code upstream_error, retryable false, and status_code 409. Previously the stream could stay open for about 60 seconds and end with a retryable error. Treat the frame as terminal and do not retry. See Streaming Turns (SSE).
October 8, 2026: Sonic 3.6 Is the Default Cartesia Model
Cartesia calls whose resolved configuration stores no model now use Sonic 3.6 (sonic-3.6-2026-08-27) instead of Sonic 3.5. A stored model still wins. A matching per-language entry without its own config.model also moves to the new default. On Sonic 3.6, pronunciation dictionary entries match any capitalization unless they set case_sensitive. See Voice Configuration.
October 8, 2026: Interrupted Realtime Transfers
On the gpt_realtime voice runtime, a forward_call from a response the caller interrupted still runs when its arguments arrived complete. Other tool calls from an interrupted response are not executed, and a superseded tool result is not spoken after the caller interrupts. See Voice Agent.
October 8, 2026: Scribe Carried Values and Provider Edits
carry_forward_available entries on a note read now include the carried display value when the EHR attributes one, so the editing view can show what the EHR would carry. Treat it as chart content, like the note body. At finalize, a carried field the provider edited is now written with the edit, and field_dispositions reports it as written_from_clinician_edit with source clinician_edit. A carried field the provider left untouched is still omitted so the EHR carries its prior value. See Scribe Artifacts.
October 7, 2026: Email Inbound Modes
Email use cases replace accepts_cold_inbound with inbound_mode: send_only, replies_only, or all_inbound. Existing use cases are now replies_only, which keeps their thread-only behavior. Sending needs only the sending DNS records; a receiving mode needs the inbound MX record verified, or the request returns 409. Inbound content-part URLs are issued for the use case's own environment and region, so fetch them exactly as given. See Email and Channel Manager.
October 7, 2026: Scribe Writeback Fields and Session Timezone
Note reads and finalize responses report writeback_status. When EHR writeback is enabled, reads can add carry_forward_available and clinician_name, finalize returns field_dispositions, and a failed writeback rolls the finalize back with ehr_writeback_failed. Session create now requires the provider's IANA timezone, and sessions report local_timezone. The generic note templates and the medical visit type are retired, and in-person template variants follow the appointment's modality. See Scribe Artifacts and Scribe Sessions.
October 7, 2026: Realtime Bindings Resolve Across the Graph
On the realtime voice runtime, context bindings now resolve across the whole Context Graph, because a realtime call stays in its initial state. When states bind the same parameter differently, the initial state wins. See Supported Tool Paths.
October 6, 2026: Voice Fixes
An agent's
voice_idnow applies whenever the call speaks the agent's TTS provider, including ElevenLabs. Voice notes now pick their voice and model the way a live call from the same caller would, instead of always using the ElevenLabs default.The Cartesia pronunciation dictionary now applies to greetings, fillers, and the end of every reply.
The agent is told when a form created from a template, or a reshaped form, is submitted.
A patient address saved from a conversation keeps its unit or apartment number.
Ending an operator takeover on a phone call now removes the operator and resumes the agent.
See Voice Configuration.
October 6, 2026: Voice Session Injection and Test-Call Workspace
The direct Voice Agent route POST /agent/sessions/{call_sid}/event now accepts only the platform's service credential, so a workspace API key gets 401. Use the Platform session injection operation instead. The /test-call WebSocket now always runs in the credential's workspace and closes with 4003 when workspace_id names another workspace. See Session Event Injection.
October 5, 2026: Outbound Call Idempotency
POST /v1/{workspace_id}/calls/outbound claims the idempotency_key before dialing. A retry while the first request is still placing the call, or the same key sent for a different call, returns 409. A failed attempt releases the key, so a retry with the same key places the call. 503 now means the call could not be placed; retry with the same key. See Calls.
October 2, 2026: Token Streaming on Text Turns
Streamed turns on an existing text conversation now emit token events while the agent writes its reply. Previously these turns could return only message and done. Tool-call events for the turn can arrive after its token events, before message.
Treat token text as a preview: replace it with the message text when that arrives, and do not append both. Tool calls can run before the first token, so keep a pending indicator until the first token or message event. See Streaming Turns (SSE).
October 2, 2026: Workspace Query String Literals
Workspace table queries now run the statement as written. A colon sequence inside a string literal, such as :true in '{"a":true}', is passed through as literal text instead of being read as a bind parameter. The operation takes no bind parameters, so write values directly into the SQL text. See Workspace Tables.
October 2, 2026: Runs Service Filter and SMS Thread Context
GET /v1/{workspace_id}/runs accepts repeated service_id values, up to 100, applied before pagination. Historical framework runs have no stored service and are excluded when the filter is set. Separately, the managed SMS registered-content check now reads recent messages in the same thread as context, so short replies are less likely to be blocked by mistake; the message itself must still fit the registration. See Runs and SMS.
September 28, 2026: Intake Document Tags
Document uploads accept doc_metadata, a JSON-encoded map of string tags that links a document to its subject. Tags are set at document creation, apply to every version, and make byte-identical deduplication subject-aware. See Customer Data Intake.
September 27, 2026: Voice Forwarding Allowlists
Voice use cases require approved forwarding destinations in allowed_forwarding_numbers. An empty list denies forwarding; a destination outside the list returns 422 forwarding_number_not_allowed. Ordinary callee dialing and media streams are unaffected.
Arrange approved destinations with the provisioning owner and test each transfer path. When announced, the public schema did not yet expose this field; it now appears on voice use-case requests and reads. See Channel Manager.
September 25, 2026: Structured Scribe Note Edits
The Scribe note-update request removes the deprecated body input. Save the complete structured document with base_version, retain the returned version, and reconcile 409 version_conflict before retrying. As of September 25, the public schema and published SDK 0.14.0 still contained older types (Scribe SDK 0.16.0 and later use the structured request); use the structured request described in Artifacts.
Finalization checks the reviewed version and can submit a note with missing clinical fields. Provider review remains required before submission.
September 24, 2026: iMessage Send and Opt-Out Controls
Before a contact's first reply to the selected line, managed iMessage limits messages to 300 characters, excludes media, links, phone numbers, and email addresses, and stops after six recorded sent/delivered messages. Sender selection prefers a line the contact has replied to, then the most recently used line. Setup-wide opt-outs block further sends; the recipient can text START to opt back in. Follow Channel Manager for setup, consent, suppression, and delivery requirements.
September 24, 2026: Voice Participant Audio
Audio forks require the participant to be joined to the conference. Requests for unjoined or departed participants, and repeated fork requests, return a conflict. Use stream_context for the fork's application context. See Voice Call Controls.
September 23, 2026: Scribe Maintenance Responses
Scribe HTTP requests can return 503 with Retry-After during maintenance. New streaming attachments can close with code 1013; the maintenance gate leaves existing attachments connected. Honor the retry delay, retain the session identifier, and reconnect through the supported allocation and ticket flow. Read the current note version before retrying an uncertain edit or finalization. See Scribe Error Handling.
September 22, 2026: Context Binding Aliases
context_binding_aliases maps a tool parameter to a differently named conversation-context key. The runtime fills that parameter and hides it from the model's tool schema. A missing alias source rejects execution, even when the model supplies a value or the parameter has a default. See Conversation Context.
September 21, 2026: Skill Inputs for Integration Tools
Skills can pass parent inputs into integration-tool parameters through skill_input_bindings. Integration headers can use an exact $param.name binding. Configure both the skill input and its integration reference; passing context into the skill alone does not bind the sub-tool. See Skills.
September 18, 2026: Service-Scoped Memory
Define memory dimensions for a service and identify the conversation's memory subject with memoryid. The dimension-creation operation appends definition versions; completed eligible sessions produce observations, dimension views, and a combined model. Processing supports one memory subject per conversation and requires provisioned processing and readers.
Configure a reader tool to use the results in later conversations. This path remains separate from person enrichment and existing recall. See Service-Scoped Memory.
September 18, 2026: Companion-Skill Context and Participant Cancellation
Conversation context bindings now fill companion-skill inputs, including background dispatch. See Supported Tool Paths.
Deleting a voice participant cancels a ringing leg. Repeating deletion for a participant that has already left completes without another removal attempt. See Channel Manager.
September 16, 2026: Text Context and Voice Transcripts
Text initialization preserves effective channel context for bound tool parameters and re-derives the channel address when restoring a session. A channel address remains separate from verified identity. See Reserved Channel Identity.
Separate post-call transcript verification and accuracy fields are retired. Remove dependencies on those fields; retained analysis settings no longer run the former automatic scoring or recognition-suggestion pipeline. See Call Intelligence.
September 14, 2026: Intake-Source Deletion
Remove an intake-source registration with the public delete operation. The operation requires write permission, records the deletion, and retains imported data. Handle coordination conflicts before retrying. See Intake Sources.
The operation is in the public schema as of September 27, superseding the earlier availability note below.
August 2026
Archive Index
Choose an archive by topic or recorded version. The topics below are a guide, not a complete list of entries. Each archive preserves its original release dates and version labels.
Older bookmarks on this page continue to point to their full entries. For current behavior and migration steps, use Current Upgrade Guidance.

