For the complete documentation index, see llms.txt. This page is also available as Markdown.

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_call is 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_rate is 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 is null when there is no passed or failed verdict. Eval results on runs older than 48 hours keep their status instead of showing error.

  • Judge verdicts. An LLM-judge verdict records passed, rationale, and references with no score, and score_label is removed from checks. Metric checks keep score.

  • Lists. The simulation run list pages with sort_by, limit, and continuation_token, filters by status, source, case_id, suite_id, and tags, and returns total. The case list adds total, sort_by, and search. The new GET /v1/{workspace_id}/simulations/suites/{suite_id}/cases returns 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_id returns 422. Creating a session under a missing run, scoring a missing session, or completing a missing run returns 404, and completing a finished run returns 409. Runtime failures return 502, and an unreachable runtime returns 503.

  • Tags and limits. Run and session tags that start with suite:, suite_run:, or safety: are set by the server, and sending one returns 422. A workspace can have 10 simulation launches running at once. Another case, suite, benchmark, or bridge launch returns 429.

See Simulation Coverage.

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 latest or a positive 32-bit integer returns 422 instead of 500. 0 and negative numbers also return 422.

  • 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, so sort_by=-updated_at reflects the newest version.

  • GET /v1/{workspace_id}/services filters by agent_id and context_graph_id, and GET /v1/{workspace_id}/api-keys filters by role and by search on the key name or key ID. Both apply before pagination.

  • Tool resolution for a service that is not in the workspace returns 404 instead of 503.

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}/sync

  • POST /v1/{workspace_id}/settings/gap-scanner/preview and POST /v1/{workspace_id}/settings/gap-scanner/scan

  • GET /v1/{workspace_id}/health/sync

  • health_status, last_sync_*, and is_stale on data sources, the connector status fields on pipeline status, last_poll and last_sync_* on the pipeline source list and overview, last_poll_at, last_change_at, and sync_healthy on FHIR status, and the pipeline section 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.

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_id now 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.

Platform: Usage, Cost, and Voice Contracts (September 9–15, 2026)

Usage, Cost, and Voice Contracts

Usage and cost reporting gains dedicated APIs, alongside updates to call identifiers, retained Realtime history, and phone-number validation. Access and workspace enablement requirements apply as described below.

  • Usage and calculated LLM cost: /usage, staff-only /cost, and customer /usage-cost/overview, /usage-cost/models, and /usage-cost/excluded replace the removed cost-to-serve interface for applicable inference reporting. Customer usage-and-cost reads require a signed-in identity user and workspace enablement. Reports use inclusive date ranges, not closed months. Handle partial pricing and the overview's HTTP 200 with data_status: "failed" when no calculation covers the period. There is no replacement infrastructure-allocation report. See Cost to Serve.

  • Opaque call identifiers: the current voice path can return a UUID-shaped platform reference in call_sid. Preserve the string without requiring a carrier prefix or using it directly with a carrier API. Keep it distinct from run_id. See Calls.

  • Realtime history: the gpt_realtime path retains completed transcripts and tool calls in conversation order, with incremental persistence and a completion retry. This does not establish complete history, recordings, or quality analysis. See Voice Agent.

  • Phone identity: valid inbound numbers are normalized to E.164; withheld, anonymous, invalid, and non-phone origins supply no phone identity for automatic channel-id filling. Outbound runtime validation now checks number validity beyond string formatting. Existing text-session context limits remain. See Reserved Channel Identity.

  • Intake-source deletion - deployment unconfirmed: merged source adds audited registration deletion with write permission, retained imported data, and coordination-conflict handling. The operation is absent from the checked public schema. Confirm deployment before integration; see Intake Sources.

Platform: Conversation Context and Tool Bindings (September 14, 2026)

Conversation Context and Tool Bindings

Configure service-level context and bind application values to tool parameters. Check the current runtime coverage when enabling this feature.

What Changed

Services declare accepted_context schemas for string and number values supplied in a conversation's start-time context map. Context Graph context_bindings hide matching tool parameters from the model and fill them at dispatch on the supported action-state direct-tool path. Outbound text and voice start requests also forward context after service validation.

Compatibility and Required Actions

Update service schemas with PUT /v1/{workspace_id}/services/{service_id}; a supplied list replaces the previous one. Coordinate required keys with callers, match context keys to tool parameter names exactly, and publish and select the revised Context Graph version. Follow Pass Context to Tool Parameters for setup and verification.

Known Runtime Limits

Text-session setup can discard or replace automatically filled channel-id; do not treat it as server-verified identity. An omitted required channel-id fails validation before auto-fill. Direct skill inputs lack the same injection. The conversation-create parser can coerce booleans to numbers despite the public contract.

Later September 14 source update: Direct-tool dispatch now carries the binding from the state where the call starts, including decision and data-collection states. This supersedes the initial action-state-only limitation; deployment verification still applies. Review the guide's runtime limits before rollout.

August 2026

Platform: WhatsApp Use Cases (August 2026)

WhatsApp Use Cases

Provisioning scope. This entry describes managed channel provisioning. It does not expose use-case creation or inventory through the current public workspace Platform API. Complete provisioning with Amigo, then use the service-binding contract linked above.

WhatsApp phone numbers can now be bound to use cases through the existing use case endpoints. A WhatsApp use case registers a specific phone number from a WhatsApp setup for Cloud API messaging and configures an inbound-turn webhook, following the same lifecycle as SMS, email, and iMessage use cases.

What changed:

  • WhatsApp channel on use case endpoints. The create, get, list, update, and delete use case endpoints now accept whatsapp as a channel value. Creating a WhatsApp use case binds a phone number from a WhatsApp setup, verifies its readiness, registers it for Cloud API use, and provisions a webhook signing secret.

  • One use case per phone number. Each WhatsApp phone number can be bound to exactly one active use case. Attempting to bind an already-active number returns a 409 conflict.

  • Phone number registration and deregistration. Creating a use case registers the phone number for Cloud API messaging. Deleting the use case deregisters it. The phone number must be verified and disconnected (not already registered under another provider) before it can be bound.

  • Webhook secret lifecycle. WhatsApp use cases receive a signing secret at creation, support secret rotation through the existing rotate endpoint, and re-mint the secret when the webhook URL is updated.

  • Setup deletion requires no active use cases. A WhatsApp setup cannot be deleted while it has active use cases. Delete the use cases first.

  • Phone number details in responses. Use case responses include the phone number in E.164 format and the platform-assigned phone number identifier, in addition to the webhook URL and setup reference.

What you need to do:

  • Create use cases for WhatsApp numbers. After completing WhatsApp setup, bind individual phone numbers to use cases to register them for messaging and configure inbound-turn delivery.

  • Delete use cases before deleting a WhatsApp setup. The platform now enforces that all use cases under a setup are removed before the setup itself can be deleted.

  • Review the Channel Manager guide for the current provisioning boundary.

Platform: WhatsApp Setup Surface (August 2026)

WhatsApp Setup Surface

Provisioning scope. Setup and provider onboarding use the managed channel authorization boundary. They are not operations in the workspace Platform OpenAPI reference. The current Channel Manager guide explains the customer integration boundary.

The Platform API now supports creating, reading, and deleting WhatsApp setups through Meta's Cloud API. WhatsApp onboarding follows a two-phase activation lifecycle where the platform creates the setup record and returns a signup URL, then Meta notifies the platform when the customer completes signup.

What changed:

  • WhatsApp setup endpoints. Three new endpoints - create, get, and delete - manage the WhatsApp setup lifecycle. Create registers a customer's business identity and returns Meta's Hosted Embedded Signup URL. Get returns the setup state, including whether the business account has been activated. Delete tears down credentials and webhook subscriptions.

  • Two-phase activation. Setups are created in a pending state. Once the customer completes Meta's Hosted Embedded Signup, the platform automatically provisions credentials and activates the channel. Callers poll the get endpoint to check activation status.

  • Webhook integration. The platform receives and validates account update notifications from Meta. Unrecognized or duplicate events are accepted silently to prevent retry storms.

  • New OAuth2 scopes. Three scopes control access: whatsapp-setup:create, whatsapp-setup:read, and whatsapp-setup:write.

  • One setup per business portfolio. Creating a second active setup for the same Meta business portfolio returns a 409 conflict.

What you need to do:

  • Grant scopes to OAuth2 clients. Clients that need to manage WhatsApp setups require the new whatsapp-setup:* scopes.

  • Review the Channel Manager guide for provisioning and public routing boundaries.

Platform: Entity Activity Timeline Refresh (August 2026)

Entity Activity Timeline Refresh

The per-entity activity timeline is now produced by the current-generation world pipeline, completing the migration of all world-model outputs from the previous generation.

What changed:

  • Timeline produced by the current pipeline generation. The entity activity timeline - used by entity detail views, FHIR patient timeline endpoints, and analytics dashboards - is now computed incrementally by the current-generation world pipeline. Previously it was produced exclusively by the prior generation.

  • Read-time 90-day window. The timeline retains the most recent activity events per entity (up to 200) across all time. The 90-day recency filter is now applied at read time by the serving API rather than at pipeline compute time. This means the stored timeline is generation-stable and does not require wall-clock recomputation, while API consumers continue to see the same rolling 90-day window.

  • Continuous incremental updates. Timeline entries update continuously as new events arrive or existing events are retracted, using the same change-driven refresh pattern as other current-generation outputs.

  • No schema or API changes. The timeline schema, API response shape, and query interface are unchanged. Consumers do not need to re-bind or update queries.

What you need to do:

  • No action required. The timeline continues to be served through the same API endpoints with the same response shape. The underlying pipeline change is transparent to consumers.

Platform: Guardian and Caregiver Entity Projection (August 2026)

Guardian and Caregiver Entity Projection

The world model now projects guardian and caregiver person entities with the same fidelity as patients and practitioners. Previously, these entities could resolve with missing name, contact, identifier, and resource type fields, which prevented downstream readers from distinguishing guardians from patients.

What changed:

  • Guardian entities fully projected. Person entities sourced from guardian and caregiver records now carry name, phone, email, source-system identifier, and resource type. Previously these fields could be empty, causing the entity to be indistinguishable from a patient in platform reads and agent tools.

  • Role discrimination corrected. Platform services and agent tools that filter person entities by role now correctly identify guardians and caregivers instead of misclassifying them as patients.

  • No schema changes. Guardian projections reuse existing entity columns. The stable entity table schema is unchanged, and no downstream consumer re-binding is required.

What you need to do:

  • No action required. Guardian and caregiver entities are projected automatically. Platform reads and agent tools that query person entities will return correct role information without configuration changes.

Platform: Generation-Agnostic Entity Cutover Support (August 2026)

Generation-Agnostic Entity Cutover Support

The stable entity publication surface now supports atomic generation cutovers. The platform can move the stable entity table between internal entity generations without downtime, consumer re-binding, or data gaps.

What changed:

  • Atomic generation cutover. The platform validates schema compatibility, composite key integrity, change-data-feed enablement, and publisher identity before executing a single atomic merge to converge the stable entity table with a new generation source. A postflight parity check confirms exact row-level agreement before the cutover is considered complete.

  • Publication is generation-agnostic. Any current or future entity generation can own publication through the same shared path. Publication is enabled per-pipeline by configuration rather than being hardcoded to a specific generation.

  • Metric store sources updated. Analytics models that depend on entity data now reference the stable entity table rather than generation-specific tables, ensuring metric freshness tracking remains consistent across cutovers.

  • No per-reader repointing. The stable publication seam remains the only supported read surface for application code. Generation-specific tables are retained for internal parity validation and rollback only.

What you need to do:

  • No action required. If your integrations already reference the stable entity table, they will continue to work across generation cutovers without changes. If you have saved queries that reference a generation-specific table by name, update them to reference the stable entity table advertised by the schema introspection endpoint.

Platform: Entity Reads Consolidated to Stable Publication Surface (August 2026)

Entity Reads Consolidated to Stable Publication Surface

All entity read paths - including SQL tools, analytics dashboards, research queries, and monitoring - now read from the world model's stable physical entity table. Previously, some read paths used generation-specific intermediate tables that required separate synchronization and lag monitoring.

What changed:

  • Single entity read surface. Platform services that query entities now bind to the stable publication table directly. This removes the previous dependency on a separately synchronized copy and eliminates an entire class of synchronization lag between entity writes and reads.

  • No per-reader repointing. The stable publication seam is the only supported read surface for application code. Generation-specific tables are retained for internal parity validation and rollback only - they are not advertised to consumers.

  • Simplified monitoring. Entity freshness monitoring now measures end-to-end latency from event ingestion to the stable entity table in a single step, rather than tracking a multi-stage pipeline across intermediate synchronized copies.

  • SQL tool table references updated. The fallback SQL query tool and research query schema now advertise the stable entity table. Queries that previously referenced the intermediate synchronized table should use the new table reference.

  • Dashboard queries updated. Built-in dashboard templates for slot analysis and facility lookup now query the stable entity table directly.

What you need to do:

  • Update any saved SQL queries. If you have saved queries or integrations that reference the previous entity serving table by its fully qualified name, update them to reference the current entity table advertised by the schema introspection endpoint.

  • No action required for standard platform usage. Dashboard templates, research queries, and tool descriptions are updated automatically.

Platform: Metric Store Execution Plan Validation and Semantic-Layer Definition Contract (August 2026)

Metric Store Execution Plan Validation and Semantic-Layer Definition Contract

The Metric Store now validates execution plans before computation and introduces a structured semantic-layer definition contract for authoring metrics as YAML.

What changed:

  • Execution plan validation at compute time. Before a metric computation runs, the platform validates the execution plan against the semantic-layer contract. Plans that reference an unapproved model, use an unsupported aggregation, include disallowed dimensions, or violate scoping rules (such as a global metric exposing a workspace dimension) are rejected with structured validation errors before any data is read.

  • Semantic-layer YAML contract. Metric definitions can now be authored as structured YAML documents that declare the metric's identity, base model, grain, dimensions, time configuration, freshness target, ownership, lifecycle status, and security classification. The platform parses, validates, and deterministically compiles these definitions into execution plans.

  • Supported metric types. The definition contract supports count, distinct count, sum, average, percentile, ratio, rate, score, retention, boolean, and coverage metric types. Ratio and rate metrics require separate numerator and denominator blocks.

  • Lifecycle statuses. Definitions carry a status of draft, certified, or deprecated.

  • Freshness targets. Freshness can be a named cadence (30 minutes, hourly, daily, weekly) or a positive integer of minutes.

  • Content-addressable definitions. Each compiled definition includes a content hash so the platform can detect changes without full re-parsing.

  • Scoping enforcement. Workspace-scoped metrics must include a workspace dimension. Global metrics must not include a workspace dimension. Dimensions must include a time-grain dimension.

What you need to do:

  • No action required for existing metrics. Metrics with valid execution plans continue to compute as before. Invalid plans that previously would have failed at query time are now rejected earlier with clearer error messages.

  • Use the YAML contract for new definitions. Teams authoring new metrics can use the semantic-layer YAML format for structured validation before deployment.

Platform: Metric Store Registry Migration and Global Metrics (August 2026)

Metric Store Registry Migration and Global Metrics

The metric definition registry has moved to the platform's transactional database, metric assignments now control which workspaces receive computed values, and metrics can be defined at global scope.

What changed:

  • Registry moved to transactional storage. Metric definitions, definition versions, and assignments are now managed in the platform's transactional store rather than in the analytical data layer. This separation gives the registry full transactional guarantees while analytical tables remain optimized for computation and querying.

  • Assignment-driven computation. Metric computation is now driven by explicit assignments. Each assignment links a metric definition to either a specific workspace or to global scope, and only active assignments produce computed values. This replaces the previous model where definitions were implicitly scoped to a single workspace.

  • Global metrics. Metrics can now be assigned at global scope. A global metric aggregates across all data without filtering to a single workspace. Global and workspace-scoped assignments for the same metric definition can coexist.

  • Published status supported. Metric definitions with a "published" status are now eligible for computation alongside "certified" definitions.

  • Legacy registry tables removed. The previous definition and version tables in the analytical layer have been added to the legacy cleanup process alongside the previously removed canonical table names.

  • Nullable workspace on analytical tables. The workspace identifier on metric values, freshness status, and computation run records is now optional to support global metrics that are not scoped to any single workspace.

What you need to do:

  • Review metric assignments. Existing workspace-scoped metrics continue to compute as before, but the assignment model is now explicit. Verify that active assignments exist for each metric you expect to see computed.

  • No action required for standard metric consumers. Queries against metric values continue to work. Rows for global metrics will have a null workspace identifier.

Platform: Metric Store Freshness Scheduling and Schema Cleanup (August 2026)

Metric Store Freshness Scheduling and Schema Cleanup

Metric computation is now freshness-driven with failure backoff, and superseded legacy table names have been removed from the metric store schema.

What changed:

  • Freshness-aware scheduling. Each computation cycle now evaluates which metric definitions are due based on their freshness target and the time of their last successful computation. Definitions that are already fresh are skipped, reducing unnecessary work.

  • Failure backoff. Definitions that fail computation are retried with exponential backoff starting at two hours and capping at 24 hours. This prevents transient failures from consuming compute capacity on every cycle.

  • Freshness status tracking. Each metric definition now tracks its last successful computation time, freshness status, and the computation run that produced the result.

  • Legacy table names removed. The superseded canonical table names - "decision_tool_execution_fact," "call_intelligence_fact," "event_clinical_evidence_fact," "data_source_model_health_fact," and "metric_output" - have been dropped from the metric store schema. These were replaced by the renamed models introduced in the Semantic Metric Store Foundation release.

  • Registry repair removed. The previously available registry repair operation has been removed. The registry now lives in the platform's transactional store and does not require manual rebuilds.

What you need to do:

  • Update references to dropped table names. If you have saved queries, dashboards, or external integrations that reference the old canonical table names, update them to the current names: "tool_execution_fact," "evaluation_fact," "event_evidence_fact," "model_health_fact," and "surface_interaction_fact."

  • No action required for standard metric definitions. Freshness scheduling and failure backoff apply automatically to all certified metric definitions.

Platform: Semantic Metric Store Foundation (August 2026)

Semantic Metric Store Foundation

The Metric Store now includes a governed semantic layer with canonical models, versioned relationships, semantic metric definitions, and automated computation.

What changed:

  • Canonical model registry. The platform maintains a certified registry of canonical analytical models covering conversations, interactions, tool executions, outcomes, evaluations, topic classifications, appointment workflows, entities, event evidence, model health, and surface interactions. Each model declares its grain, key columns, timestamp columns, freshness target, and source lineage.

  • Governed relationships. Canonical models are connected through versioned, certified relationships that declare join keys, cardinality, and allowed join direction. Metric definitions can only use relationships that are certified in the registry.

  • Semantic metric definitions. Metric definitions now support a semantic wrapper that binds a metric to a specific canonical model, declares approved dimensions (workspace and reporting period are required), specifies the time field and aggregation, and tracks ownership, security classification, version, and lifecycle status (draft, certified, deprecated).

  • Deterministic execution plans. Semantic definitions are compiled into deterministic execution plans with content hashes. The compilation validates that the base model and required relationships exist in the certified registry.

  • Automated computation. Certified metric definitions are computed periodically against their canonical models within a configurable time window. Results are merged using an upsert strategy keyed by workspace, metric, version, period, and dimension hash. Each computation run records its status, timing, and any error.

  • Freshness classification. Each canonical model and metric definition declares a freshness target. Materialized results are classified as fresh, stale, never computed, or failed based on the target and the most recent computation status.

  • Model renames. Several canonical models have been renamed for clarity: decision and tool execution evidence is now "tool execution fact," call intelligence evaluations are now "evaluation fact," clinical evidence records are now "event evidence fact," and data source health is now "model health fact." A new "surface interaction fact" model replaces the previous metric output model.

  • Metric definition versioning. Metric definitions now support independent version tracking with per-version status, content hash, execution plan, and lifecycle timestamps.

What you need to do:

  • No action required for existing integrations. The semantic layer is additive. Existing metric definitions and values are unaffected.

  • Review canonical model names. If your integration references canonical model names in metric definitions, update to the new names: use "tool_execution_fact" instead of "decision_tool_execution_fact," "evaluation_fact" instead of "call_intelligence_fact," "event_evidence_fact" instead of "event_clinical_evidence_fact," and "model_health_fact" instead of "data_source_model_health_fact."

Platform: Design Agent Collector Endpoint Removed (August 2026)

Design Agent Collector Endpoint Removed

The design-agent session collector endpoint has been removed from the Platform API.

What changed:

  • POST /v1/design-agent/session removed. The write-only endpoint that accepted design-agent session transcripts is no longer available. Requests to this path now return 404.

  • Collector authentication scheme removed. The dedicated bearer-token authentication scheme used exclusively by the design-agent collector is no longer part of the API. This token was separate from platform API keys and granted no read access.

  • No replacement endpoint. This endpoint served an internal collection workflow and has been retired without a public replacement.

What you need to do:

  • Remove any integrations that call the design-agent session endpoint. If you have scripts or hooks that POST to /v1/design-agent/session, remove or disable them. The endpoint no longer exists and calls will receive a 404 response.

  • Discard any stored collector tokens. The dedicated write-only token for this endpoint is no longer valid for any purpose.

Platform: Date Range Filtering on List Sessions Endpoint (August 2026)

Date Range Filtering on List Sessions Endpoint

The list sessions endpoint now supports optional date range filtering so callers can retrieve sessions created within a specific time window.

What changed:

  • created_after query parameter added. An optional ISO 8601 UTC timestamp that acts as an inclusive lower bound on session creation time. When provided, only sessions created at or after this timestamp are returned.

  • created_before query parameter added. An optional ISO 8601 UTC timestamp that acts as an exclusive upper bound on session creation time. When provided, only sessions created before this timestamp are returned.

  • Half-open range convention. The two parameters form a half-open interval [created_after, created_before), consistent with the convention used by the appointments endpoint. Either parameter can be supplied independently.

  • Validation. When both parameters are supplied, created_after must be strictly before created_before. If this constraint is violated, the endpoint returns a 400 Bad Request with the code invalid_date_range.

What you need to do:

  • No action required for existing integrations. The parameters are optional and the default behavior is unchanged. Add created_after and/or created_before query parameters to narrow results by creation date when needed.

Platform: RelatedPerson Resource Type and Patient Filtering (August 2026)

RelatedPerson Resource Type and Patient Filtering

The FHIR surface now supports the RelatedPerson resource type for guardians and contacts, and Patient queries no longer return non-patient persons.

What changed:

  • RelatedPerson added as a supported FHIR resource type. Guardians and contacts are now projected as RelatedPerson resources with their own identity, name, telecom, and relationship data. Previously, these persons had no dedicated FHIR representation.

  • Patient results no longer include guardians. Patient searches now exclude persons whose role is guardian or contact. Previously, guardians without clinician-specific attributes were returned as patients, producing patient records with no birth date or medical record number.

  • Resource identity uses raw vendor identifiers. FHIR resource ids for patients, practitioners, and related persons now use the vendor's native identifier directly, without a namespace prefix. This ensures that external identity resolution matches the identifiers presented during session creation. Existing resources will resolve under the new identifiers.

  • Summary counts reflect three-way role split. The resource summary endpoint now counts Patient, Practitioner, and RelatedPerson as separate categories, matching the filtering applied to search results.

What you need to do:

  • Update integrations that consume Patient bundles. If your integration expected guardian records in Patient results, query RelatedPerson instead.

  • Update stored resource references. If your integration stores FHIR resource ids and previously expected a namespace prefix on patient, practitioner, or guardian ids, update to expect the raw vendor identifier.

  • No action required for standard FHIR queries. Searches against Patient, Practitioner, and RelatedPerson return correctly scoped results without additional filtering.

Platform: Workspace Environment Field Removed from API (August 2026)

Workspace Environment Field Removed from API

The environment field has been removed from workspace API requests and responses. Workspaces no longer carry an environment designation at the API level.

What changed:

  • environment removed from workspace creation. The create-workspace request body no longer accepts an environment field. Previously, callers could pass production, staging, or development as an environment designation; the value was accepted but had no operational effect. The field is no longer recognized.

  • environment removed from workspace update. The update-workspace request body no longer accepts an environment field. Previously, the field was accepted and silently ignored. It is no longer recognized.

  • environment removed from workspace responses. Workspace response objects no longer include an environment field. Previously, the response reported the serving deployment's stage as the workspace environment. This field is no longer returned.

  • Environment conversion endpoints removed. The GET /{workspace_id}/environment-check and POST /{workspace_id}/convert-environment endpoints have been removed. These endpoints previously provided a pre-check and a no-op conversion between staging and production environments. They are no longer available.

What you need to do:

  • Remove environment from request bodies. If your integration sends an environment field when creating or updating a workspace, remove it. The field is no longer accepted.

  • Update response parsing. If your integration reads the environment field from workspace responses, remove that dependency. The field is no longer returned.

  • Remove environment conversion calls. If your integration calls the environment-check or convert-environment endpoints, remove those calls. The endpoints no longer exist and will return errors.

Platform: Inline Malware Scanning Removed from Intake Upload Path (August 2026)

Inline Malware Scanning Removed from Intake Upload Path

The inline malware scanning step has been removed from the intake file upload path. Uploads are no longer scanned synchronously before persistence.

What changed:

  • Inline scan removed. The upload endpoint no longer performs a synchronous malware scan before writing the file. Previously, when scanning was enabled, every upload was scanned inline and rejected if the scanner returned a positive detection or was unavailable (fail-closed). This step has been removed entirely.

  • Scanner-related error responses removed. The upload endpoint no longer returns 422 Unprocessable Entity for malware detections or 503 Service Unavailable for scanner unavailability. These responses are no longer possible.

  • Scanner configuration removed. The environment variables that controlled inline scanning enablement, host, port, and timeout are no longer recognized. Deployments that set these variables can remove them with no effect.

  • No change to upload validation. File size limits, SHA-256 deduplication, and CSV validation continue to operate as before.

What you need to do:

  • No action required for most integrations. If your error-handling code checks for 422 responses with a malware-scan detail message or 503 responses for scanner unavailability on the upload endpoint, those branches are now unreachable and can be removed.

  • Remove scanner environment variables. If your deployment sets intake scanner configuration variables, they can be safely removed.

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.

Archive
Versions or period
Selected topics

Unnumbered, July-August 2026

Metric Store, enrichment, evaluations, and Scribe templates

Unnumbered, July 2026

Warehouse intake, Scribe notes, appointments, and Zoom

Unnumbered, July 2026

Scribe sessions, authorization, and intake sources

Unnumbered, July 2026

Session lifecycle, approvals, voice, and evaluations

Unnumbered, July 2026

Dataset exports, run controls, analytics, and Surfaces

Unnumbered, July 2026

Audit, voice tools, access grants, and memory

Unnumbered; v0.9.483-v0.9.505

Metering, agent runs, intake, and connector writes

v0.9.432-v0.9.482

Messaging, intake processing, voice, and OAuth

v0.9.400-v0.9.431

Intake, voice, and a historical contract snapshot

July 2026

Voice runtimes, connector operations, and tool execution

May-July 2026

Integrations, simulations, data, and voice

November 2025-May 2026

Classic API, tool persistence, and early Platform changes

Older bookmarks on this page continue to point to their full entries. For current behavior and migration steps, use Current Upgrade Guidance.

Earlier entry links (preserved bookmarks)

Metric Store Setup, Refresh, and Run Status Endpoints

Continue with the archived entry.

Entity Overlay Available on Text and Web Session Open

Continue with the archived entry.

Cost-to-Serve Endpoints for LLM Inference and Infrastructure

Continue with the archived entry.

Workspace Region and Environment Are Now Deployment-Derived

Continue with the archived entry.

Canonical Metric Store Models

Continue with the archived entry.

Workspace Data Query Tools Available in Trigger Actions

Continue with the archived entry.

Ringless Voicemail Channel Removed

Continue with the archived entry.

Cross-Entity Projection Parity and Retraction Correctness

Continue with the archived entry.

Remaining World Model Readers Migrated to Current Serving Projection

Continue with the archived entry.

World Model Read Path Migrated to Current Serving Projection

Continue with the archived entry.

World Model Stateful Projections Upgraded

Continue with the archived entry.

Legacy Per-Workspace Drive Credential Path Removed

Continue with the archived entry.

Auto-Bind Identity Resolution Matches on Data Source Name

Continue with the archived entry.

Guardians Emitted as First-Class Person Entities

Continue with the archived entry.

Design Agent Collector Gating Moved to Client

Continue with the archived entry.

Connector Source Types Consolidated

Continue with the archived entry.

Production Evaluations Limited to Metric Definitions

Continue with the archived entry.

Read-Side Observability for Enrichment Overlay

Continue with the archived entry.

Synchronous Enrichment Overlay on Entity Read

Continue with the archived entry.

Structured Metric Verdicts in Evaluations

Continue with the archived entry.

Intake Storage Simplified to Per-Tenant Volumes

Continue with the archived entry.

Unused Data Connectors Removed

Continue with the archived entry.

Canonical ROS-Grid Cell Shape for Structured Notes

Continue with the archived entry.

Raw Note-Generation Output Archived for Debug and Audit

Continue with the archived entry.

Automatic External Identity Binding on Person Fold

Continue with the archived entry.

Continue with the archived entry.

World Model Serving Layer Upgrade

Continue with the archived entry.

Entity Enrichment Read Path Repoint

Continue with the archived entry.

World-Model Projection Efficiency Improvements

Continue with the archived entry.

Entity Overlay Write Path Wired to Enrichment PUT

Continue with the archived entry.

Synchronous Entity Enrichment Overlay

Continue with the archived entry.

Result-Retaining Interactive Write Idempotency

Continue with the archived entry.

Unified Enrichment Winner Selection

Continue with the archived entry.

Ephemeral Tool Results Honored on Text and Simulation Sessions

Continue with the archived entry.

Improved Circuit Breaker Resilience for Voice Calls

Continue with the archived entry.

Improved Session Liveness Detection for In-Person Recordings

Continue with the archived entry.

Info Section Coding Echo Removed from AMD Note Templates

Continue with the archived entry.

Psych-Progress and Therapy-Progress Emergency/Telehealth Field Updates

Continue with the archived entry.

Psychiatry Intake Vitals Grid and BP Field Updates

Continue with the archived entry.

Psychiatry Intake ROS Header and Option Labels

Continue with the archived entry.

Therapy Note Template Updates - Generated Fields, Section Renaming, and Version Bumps

Continue with the archived entry.

Psychiatry Progress Note Restructuring - Field Moves, Editable Vitals, and Field Removal

Continue with the archived entry.

Psychiatry Progress Note Field Relocation and Version Bump

Continue with the archived entry.

Psychiatry Progress Note Section Restructure and Version Bump

Continue with the archived entry.

AMD Template Parity - Multi-Answer Conditions, Exam Grid Update, Field Renaming, and Version Bump

Continue with the archived entry.

AMD MBC Parity - Editable Scores, Treatment Plan Checkboxes, and Version Bump

Continue with the archived entry.

Ephemeral Tool-Result Persistence

Continue with the archived entry.

Production Evaluations On by Default

Continue with the archived entry.

HMAC External Upload Path Removed

Continue with the archived entry.

Patient-Only Warehouse Mart Support

Continue with the archived entry.

Data Warehouse Connector Source Type

Continue with the archived entry.

Keyless Credential for Google Drive Intake Sources

Continue with the archived entry.

Second Diagnosis-Confirm Gate for Therapy Progress Documentation

Continue with the archived entry.

CPT Location Gates, Charge Coding, and Interventions Grid for Documentation Templates

Continue with the archived entry.

End-to-End Session Traceability in Observability Logs

Continue with the archived entry.

Voice Turn Authentication Fix for Multi-Workspace Deployments

Continue with the archived entry.

Runtime Toggle for Finalize Content Validation

Continue with the archived entry.

Stronger Model for Note Generation

Continue with the archived entry.

Per-Section Confirmation No Longer Required Before Finalize

Continue with the archived entry.

Continue with the archived entry.

AI Metric History Now Accumulates Across Runs

Continue with the archived entry.

Distinct Error When Zoom Meeting Has Not Started

Continue with the archived entry.

Design Agent Session Collector

Continue with the archived entry.

Per-Source AI Call Attribution for Cost Caps

Continue with the archived entry.

Topic Modeling Gated by Permission

Continue with the archived entry.

Provider-Authored ICD-10 Codes and Generation-Decoupled Code Reads

Continue with the archived entry.

Circuit Breaker on World Events Serving Reads

Continue with the archived entry.

Operator Dashboard Timeline Reads Migrated to Optimized Serving Path

Continue with the archived entry.

Remaining Timeline Readers Migrated to Optimized Serving Path

Continue with the archived entry.

Analytics Summary Reads Migrated to Optimized Serving Path

Continue with the archived entry.

Per-Workspace Timeline Read Migration to Materialized View

Continue with the archived entry.

No-Diagnosis Attestation Waives Diagnosis Finalize Gate

Continue with the archived entry.

Session Codes Status Reflects Generation Outcome

Continue with the archived entry.

PUT Allowed for Structured-Note Autosave

Continue with the archived entry.

MRN Prefix Removed from Seeded Appointment Charts

Continue with the archived entry.

Seed Appointments Use Eastern Time Wall-Clock Scheduling

Continue with the archived entry.

Structured Finalization Gates

Continue with the archived entry.

Zoom Session Finalization for Silent Meetings

Continue with the archived entry.

Improved Transcript Retrieval Reliability

Continue with the archived entry.

Mid-Session Auto-Check No-Op Guard

Continue with the archived entry.

Server-Authoritative Checklist Item Category

Continue with the archived entry.

Faster Mid-Session Transcript Snapshots

Continue with the archived entry.

Structured Grounding for Dependent Generations and Section Regeneration

Continue with the archived entry.

Schema-Constrained Structured Note Generation

Continue with the archived entry.

Typed Structured-Note Envelope and Body Deprecation

Continue with the archived entry.

All-Session AMD Template Pinning on Create and Update

Continue with the archived entry.

Authoritative AMD Note Template Registry

Continue with the archived entry.

Cancelled Sessions Hidden from Session and Appointment Lists

Continue with the archived entry.

Patient Chart Fields on Appointments

Continue with the archived entry.

Automatic Retry for Telephony Provisioning Status Callbacks

Continue with the archived entry.

Server-Side Checklist Seeding at Session Creation

Continue with the archived entry.

Resilient Transcript Retrieval Under Degraded Storage Conditions

Continue with the archived entry.

Improved Observability for Transcript Retrieval Failures

Continue with the archived entry.

Empty Extraction Results Treated as Valid

Continue with the archived entry.

Improved Diagnostic Detail for Structured Generation Failures

Continue with the archived entry.

Robust JSON Parsing for Structured Generation Stages

Continue with the archived entry.

Session-Owned Note Generation Fields

Continue with the archived entry.

Zoom Meeting Bot Shutdown Drain Reliability

Continue with the archived entry.

Zoom End-of-Session Transcript Completeness and Graceful Degradation

Continue with the archived entry.

Zoom OAuth Scopes Updated for RTMS Event Delivery

Continue with the archived entry.

Zoom Bot Request Parity with BFF

Continue with the archived entry.

Generic Session Create Scoped to In-Person Only

Continue with the archived entry.

Zoom OAuth Token Auto-Refresh and Reconnect Detection

Continue with the archived entry.

Automatic Note Generation for In-Person Mic Sessions

Continue with the archived entry.

Transcript Retrieval Resilience Improvement

Continue with the archived entry.

Voice Turn Accept Header Content Negotiation

Continue with the archived entry.

Assist Features - Action Items, Ask, Auto-Check, and Section Regeneration

Continue with the archived entry.

Simulation Step Timeout Increased

Continue with the archived entry.

Workspace Provision Endpoint Reschedules Scope Provisioner

Continue with the archived entry.

World Model Workspace-Scoped Entity Projection

Continue with the archived entry.

Scheduled Workspace Topic Classification

Continue with the archived entry.

World Model Pipeline Event Log

Continue with the archived entry.

Authorization-Bound Test Values in Simulations

Continue with the archived entry.

Post-Visit Mutations, Note Versioning, and Finalize Gates

Continue with the archived entry.

Async Generation Orchestration

Continue with the archived entry.

Zoom Session Live Event Stream

Continue with the archived entry.

Zoom Session Lifecycle and Bot Controls

Continue with the archived entry.

Zoom OAuth Granular Scopes

Continue with the archived entry.

Zoom Integration Connect and Disconnect

Continue with the archived entry.

Attach-Ticket Endpoint and CORS Hardening

Continue with the archived entry.

SQL Authorization Binding Test Values for Platform Functions and Workspace Data Queries

Continue with the archived entry.

Run-Scoped Token Caching for Integration Calls

Continue with the archived entry.

Scribe Sessions Now Born In-Progress

Continue with the archived entry.

Emotion Detection Now Requires GPU and Runs in Half-Precision

Continue with the archived entry.

Intake Source Secret Namespace Change

Continue with the archived entry.

Mesh-Only Certificate Authentication for Internal Service Tokens

Continue with the archived entry.

Mutual TLS Client Authentication for Service Credentials

Continue with the archived entry.

Async Audit Exports and Export Catalog Removal

Continue with the archived entry.

Cross-Workspace Audit Log Reads

Continue with the archived entry.

Enterprise SSO, SAML/OIDC Federation, and MFA Retired

Continue with the archived entry.

Per-Workspace IP Allowlist Removed

Continue with the archived entry.

Per-Workspace Conversation Topic Analytics Controls

Continue with the archived entry.

Per-Turn Authorization for Durable Text Sessions

Continue with the archived entry.

Authorization-Scoped Parameter Execution for SQL Tools

Continue with the archived entry.

Access Token Lifetime Restored to 15 Minutes

Continue with the archived entry.

Continue with the archived entry.

Per-Workspace Intake Deduplication Override

Continue with the archived entry.

Source Provenance on Batch Document Intake

Continue with the archived entry.

FHIR Patient Bundle Builder Endpoint

Continue with the archived entry.

Default Access-Token Lifetime Extended to 24 Hours

Continue with the archived entry.

Authorization-Bound Parameter Schema Hiding

Continue with the archived entry.

Authorization-Bound Parameters for Platform Functions and Workspace Data Queries

Continue with the archived entry.

Extended Default Token TTL for Email OTP Provider Grants

Continue with the archived entry.

Receipt-Backed Background Polling and Delivery Acknowledgement

Continue with the archived entry.

Generate ICD-10-CM Code Suggestions

Continue with the archived entry.

Zoom Active-Session Guard Narrowed to Live-Capture States

Continue with the archived entry.

Zoom Session Lifecycle and Transcript Finalization

Continue with the archived entry.

Connector Sync-Run Telemetry Routing Change

Continue with the archived entry.

Appointments Endpoint Returns a Rolling Date Window

Continue with the archived entry.

Provider Grants No Longer Require a Pre-Existing Provider Entity

Continue with the archived entry.

Session Lifecycle Writes, Mode, and Idempotency

Continue with the archived entry.

Nested Session Object on Appointments

Continue with the archived entry.

Appointments Endpoint - Current-Day Listing and Retrieval

Continue with the archived entry.

Admin Provider Access Grant Management for Scribe

Continue with the archived entry.

Source Provenance and PHI-Gated Filenames in the Analytical Catalog

Continue with the archived entry.

Provider-M2M Act-As-by-Email Delegation

Continue with the archived entry.

External Auth Claims Mapping for Customer-Attested Authorization

Continue with the archived entry.

Shared LLM Client Lifecycle for Production Evals and Insights

Continue with the archived entry.

Approval Rejection Closes Approval State Cleanly

Continue with the archived entry.

Voice Provider Prompt Aligned with Runtime Tool Capabilities

Continue with the archived entry.

Streaming Attach-Ticket Handshake Enforcement

Continue with the archived entry.

Token Exchange - Browser Attach Tickets for Streaming Sessions

Continue with the archived entry.

Provider M2M Client Credentials - Machine-to-Machine Provider Tokens

Continue with the archived entry.

Internal Auth Simplification - Shared Secrets Retired for Cluster-Internal Dispatch

Continue with the archived entry.

Environment Variable Cleanup - Four Runtime Knobs Retired

Continue with the archived entry.

Empty Tool Description Warning for Realtime Voice Sessions

Continue with the archived entry.

Graph Tool Instructions Preserved for Realtime Voice Sessions

Continue with the archived entry.

Structural Tool-Calling Enforcement for Realtime Voice Sessions - Reverted

Continue with the archived entry.

Autonomous Tool Calling for Realtime Voice Sessions

Continue with the archived entry.

Per-Modality Voice COGS Tracking

Continue with the archived entry.

Workspace-Level Allocation Rate Limit and Fleet Exhaustion Visibility

Continue with the archived entry.

External Identity Binding Documentation Consolidated

Continue with the archived entry.

Environment Configuration Simplified - Volume Paths, Transcript Settings, and Connector URL

Continue with the archived entry.

Drive Sync Resilience - Interrupted Syncs No Longer Strand Files

Continue with the archived entry.

Simplified Rolling-Transcript Storage Key Layout

Continue with the archived entry.

Feature Gates Retired - Six Capabilities Now Always On

Continue with the archived entry.

Required Tool Retry for Realtime Voice Sessions

Continue with the archived entry.

Voice Tool Authorization Aligned Across Playground and Phone Calls

Continue with the archived entry.

Playground Voice Test Calls Use the Configured Voice Provider

Continue with the archived entry.

Exhaustive Skill Reference Scanning on Delete

Continue with the archived entry.

Tiered Permission Enforcement for Workspace Data Query Invocation

Continue with the archived entry.

Permission-Based Access Control for API Keys and MCP Tools

Continue with the archived entry.

Compliance Routes Require Audit.view Permission

Continue with the archived entry.

External Identity Binding for Memory v2

Continue with the archived entry.

Session Allocation for Streaming Workers

Continue with the archived entry.

Resumable WebSocket Streaming for Browser Recording Sessions

Continue with the archived entry.

Use-Case Ownership Endpoints and List Proxy Removed

Continue with the archived entry.

Unified Default and Custom Memory Dimensions

Continue with the archived entry.

Patient-Scoped Memory Expansion Tool

Continue with the archived entry.

Version-List Endpoints Scoped to Caller's Workspace

Continue with the archived entry.

This page covers v0.9.400 and later. Older releases live in the archive pages: v0.9.250 - v0.9.399, v0.9.100 - v0.9.249, and v0.6.0 - v0.9.99.

Path-Bearing MCP Resource URIs and SAML SP Base Decoupling

Continue with the archived entry.

Healthie Inbound Connector

Continue with the archived entry.

Version-List Endpoints Scoped to Caller's Workspace

Continue with the archived entry.

Canonical Pagination for List Endpoints

Continue with the archived entry.

OAuth Authorization Server Discovery and Updated Model Routing

Continue with the archived entry.

External Identity Bindings for Returning Users

Continue with the archived entry.

Scribe Notes, Summaries, and Checklists

Continue with the archived entry.

Event-Based Triggers Now Match Live Workspace Events

Continue with the archived entry.

Conversation Starters and Typed Real-Time Voice Controls

Continue with the archived entry.

Continue with the archived entry.

Durable Dataset Updates and Cloud-Storage File Export

Continue with the archived entry.

Classic Conversation History Import

Continue with the archived entry.

Unified Run Detail, Trajectory, and Non-Voice Authored Turns

Continue with the archived entry.

API-Key Permission Catalog

Continue with the archived entry.

Per-Question (Turn-Level) Metering Attribution

Continue with the archived entry.

Universal Metering - All Workspaces Metered

Continue with the archived entry.

Interactive API Documentation (ReDoc)

Continue with the archived entry.

Google Drive Intake - Native File Export and Shortcut Resolution

Continue with the archived entry.

Optional Domain-Wide Delegation for Google Drive Intake Sources

Continue with the archived entry.

AI-Powered Clinical Note Generation and Finalization

Continue with the archived entry.

Configurable Output Voice for Real-Time Speech-to-Speech

Continue with the archived entry.

Default Realtime Voice Model Updated

Continue with the archived entry.

Per-Conversation Token Attribution for Text Channels

Continue with the archived entry.

Bulk Import Endpoint for Conversation Migration

Continue with the archived entry.

Channel-Agnostic Eval Quality Analytics Endpoint

Continue with the archived entry.