Receive webhooks
Use notifications before fetching transcript resources.
Guide
Fetch finalized transcript turns and request short-lived audio URLs.
Use GET /external/v1/encounters/{encounter_id}/documents/{document_id}/transcript for finalized transcript turns from an ambient transcript document.
Use GET /external/v1/encounters/{encounter_id}/documents/{document_id}/audio to request a short-lived URL for recording-backed audio when audio is available for that ambient transcript document.
| Route | Required scopes |
|---|---|
GET /external/v1/encounters/{encounter_id}/documents/{document_id}/transcript |
encounters:read, documents:read |
GET /external/v1/encounters/{encounter_id}/documents/{document_id}/audio |
encounters:read, documents:read, recordings:read |
Transcript access is document-scoped. Audio URL access requires document route access plus the additional recordings:read scope.
Fetch finalized transcript turns:
curl "https://api.example.test/external/v1/encounters/enc_9YpJvK2/documents/doc_Ambient1/transcript" \
-H "Authorization: Bearer ch_sk_example_123"
Request a short-lived audio URL:
curl "https://api.example.test/external/v1/encounters/enc_9YpJvK2/documents/doc_Ambient1/audio" \
-H "Authorization: Bearer ch_sk_example_123"
Neither route accepts query parameters.
Transcript response:
{
"encounter_id": "enc_9YpJvK2",
"document_id": "doc_Ambient1",
"transcript": {
"provider": "deepgram",
"audio_duration_seconds": 842.4,
"turns": [
{
"speaker": "clinician",
"start": 0.0,
"end": 1.6,
"text": "Good morning."
},
{
"speaker": "patient",
"start": 1.8,
"end": 3.1,
"text": "Good morning."
}
]
}
}
Audio URL response:
{
"audio_url": "https://media.charthero.example/signed-recording.wav?token=example",
"expires_at": "2026-05-25T15:15:00Z"
}
Audio URLs are temporary access artifacts. Do not store signed URLs as durable identifiers, put them in client-visible logs, or use them after expiration.
| HTTP status | Reason code | What it means |
|---|---|---|
400 |
unsupported_filter |
The request includes a query parameter that this route does not support. |
400 |
unsupported_document_type |
The selected document is not an ambient transcript document supported by this route. |
400 |
audio_not_available_for_document |
Audio is not available for the selected document. |
401 |
missing_bearer, api_keys_disabled, test_prefix_not_allowed, malformed_token, invalid_key, disabled_key, revoked_key, or expired_key |
API-key authentication failed. Branch on the exact reason_code. |
403 |
org_scope_only_required |
Organization-scoped API keys are required. |
403 |
missing_scope |
The API key is missing encounters:read, documents:read, or recordings:read for audio. |
403 |
route_not_allowed or organization_not_allowlisted |
The route is not enabled for the caller organization. |
403 |
cross_organization_denied or demo_training_denied |
The encounter is not available to this API key. |
404 |
encounter_not_found, document_not_found, transcript_not_found, or audio_not_found |
The requested resource is not available to the caller organization. |
503 |
digest_key_unavailable or audio_storage_unavailable |
API-key verification or audio storage is temporarily unavailable. |
Use Receive webhooks when you want ChartHero to notify your receiver before you fetch transcript resources. See the transcript and audio endpoints in the API Reference for the generated endpoint contracts.
Use notifications before fetching transcript resources.
Handle transcript, audio, and availability failures.
Inspect generated transcript and audio contracts.