call_id. Delivered to your
webhook, and to Salesforce when you map those fields.
Enable Recap
You needrecap:configure to change the organization setting and recap:read
to list or read results. A sandbox key includes both and mints with Recap
already enabled.
Create a Recap from an async transcription job
Add a stablecall_id to the job. The other Recap fields are optional.
language controls the language of the notes, not speech recognition. Async
transcription auto-detects the spoken language per call across the eight
supported Hear languages, and the transcript is in the detected language.
pending, processing, and complete, or
failed if processing cannot finish. pending is the instant before the
record reaches the Recap service, so what you actually read back is
processing and then complete: POST /v1/recap/calls/{call_id} answers
202 with "status": "processing", never "pending". Poll
GET /v1/recap/calls/{call_id} until it is complete or failed.
Create a Recap from Hear streaming
For a Recap-enabled organization, the streaming adapter submits committed utterances when the socket closes. Pass a stablecall_id so the result can be
joined to your own call record:
Submit an existing transcript
If you already have speaker-labelled utterances, trigger Recap directly:Read the call detail
transcript: the full retained utterance list with speaker roles and timing.record: typed intelligence (recap.record.v1).tldris the one-line headline;summaryis the detailed notes.action_items,next_steps,talk_ratio,signals, andfieldsare always present (null or empty when unknown).
Choose a pack
default_pack_id on PUT /v1/recap/config is the organization fallback.
pack_id on a Hear job, Hear stream, or manual Recap submission overrides it
for that call.
A pack selects the field and signal definitions Recap should produce for a use
case. For example, sales_outbound targets outbound sales notes. It does not
change speech recognition or speaker separation. Keep a stable pack id in your
application rather than inferring one from call direction.
Receive completion webhooks
Setwebhook_url on the organization Recap config:
recap.complete payload containing
call_id, pack_id, status, completed_at, and the typed record. Verify
X-PyAI-Signature against the raw body with the organization webhook signing
secret. Treat webhook delivery as retriable and deduplicate by call_id.
Salesforce field mapping
PUT /v1/recap/crm-config configures the design-partner Salesforce mapping.
It maps logical Recap fields to Salesforce API field names and can create a Task
from the TL;DR and summary. Secret fields are redacted on reads; omit an
existing secret on update to preserve it.
Most teams should configure Salesforce from Console → Integrations and use
the Salesforce integration guide. Use the
direct CRM-config endpoint only when you explicitly need the API-managed field
map.