ChartHero Developer Docs
API ReferenceOpenAPI JSON

Core Concepts

Guide

Fetch transcript and audio

Fetch finalized transcript turns and request short-lived audio URLs.

When to use this

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.

Required scopes

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.

Request

Fetch finalized transcript turns:

cURL
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
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.

Response

Transcript response:

JSON
{
  "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:

JSON
{
  "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.

Common errors

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.

Next step

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.

Next steps