Receive the signed end-of-call transcript

The worker POSTs directly to the application's mint-time transcript_webhook.url after releasing session capacity. No transcript is stored by the platform. A session with no committed segments and no tool calls sends nothing. Verify HMAC-SHA256 with transcript_webhook.secret over the timestamp, a literal dot, and the raw request body before parsing; reject stale timestamps. Delivery is best-effort and may repeat; consumers should tolerate duplicate session_id values. No delivery or retry guarantee is made. Input provenance is optional on user segments; missing legacy provenance must not be inferred as text.

postWebhooksession.transcript

Headers

x-rta-signaturestring required

v1= followed by the hex HMAC-SHA256 of <timestamp>.<raw body>, keyed by transcript_webhook.secret. Compare in constant time.

x-rta-timestampstring required

Timestamp string used verbatim in the signed message. Verify freshness to bound replay.

Payload

type'session.transcript' required
session_idstring required
avatar_idstring required
mode'avatar' | 'voice' required
started_atnumber required
ended_atnumber required
secondsnumber required

Session duration in seconds.

truncatedboolean required

True when the transcript buffer overflowed and segments are partial.

tool_calls_truncatedboolean

True when the tool call buffer overflowed and its tail is missing.

client_metadataobject required

Mint-time client_metadata echoed verbatim; an empty object when none was provided.

Response

Receipt acknowledged by the application.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.