Fetch documents
Read a selected clinical document from an encounter.
Guide
List encounters and read encounter details for an approved partner organization.
Use GET /external/v1/encounters to discover encounters available to the caller organization. The list response is intended for integration sync jobs and workflow selection, not broad exploratory search.
Use GET /external/v1/encounters/{encounter_id} when you already have an encounter ID from the list route or an approved webhook follow-up.
The encounter list supports limit, offset, sort_order, start_at, and end_at. Pagination is offset-based and is not snapshot-consistent across repeated calls. See Pagination for parameter limits and unsupported-filter behavior.
| Route | Required scopes |
|---|---|
GET /external/v1/encounters |
encounters:read, patients:read, documents:read |
GET /external/v1/encounters/{encounter_id} |
encounters:read, patients:read, documents:read |
The caller organization must also be enabled for encounter routes.
List available encounters:
curl "https://api.example.test/external/v1/encounters?limit=25&offset=0&sort_order=desc" \
-H "Authorization: Bearer ch_sk_example_123"
Use start_at and end_at when you only want encounters created in a time window. Use timezone-aware ISO datetimes, for example 2026-05-01T00:00:00Z.
Read one encounter:
curl "https://api.example.test/external/v1/encounters/enc_9YpJvK2" \
-H "Authorization: Bearer ch_sk_example_123"
Encounter detail does not accept query parameters. Authorized callers receive unsupported_filter for any query key on this route.
List response:
{
"items": [
{
"encounter_id": "enc_9YpJvK2",
"organization_id": "org_7Df4",
"encounter_type": "ambient",
"status": "completed",
"created_at": "2026-05-25T14:00:00Z",
"updated_at": "2026-05-25T15:00:00Z",
"date_of_service": "2026-05-25T14:00:00Z",
"patient": {
"patient_id": "pat_3Qn8",
"first_name": "Jane",
"last_name": "Doe",
"date_of_birth": "1970-01-01"
},
"documents": [
{
"document_id": "doc_Ambient1",
"schema_type": "ambient_transcript",
"title": "Ambient transcript",
"status": "completed",
"workflow_variant": "ambient",
"audio_duration_seconds": 842.4
}
]
}
],
"limit": 25,
"offset": 0,
"total": 1
}
Encounter detail response:
{
"encounter": {
"encounter_id": "enc_9YpJvK2",
"organization_id": "org_7Df4",
"encounter_type": "clinical_documentation",
"status": "completed",
"created_at": "2026-05-25T14:00:00Z",
"updated_at": "2026-05-25T15:00:00Z",
"date_of_service": "2026-05-25T14:00:00Z",
"patient": {
"patient_id": "pat_3Qn8",
"first_name": "Jane",
"last_name": "Doe",
"date_of_birth": "1970-01-01"
},
"documents": [
{
"document_id": "doc_Note1",
"schema_type": "document",
"title": "Progress note",
"status": null,
"workflow_variant": null,
"audio_duration_seconds": null
}
]
}
}
Path IDs are opaque ChartHero IDs. Do not infer organization, patient, timestamp, or storage information from their format.
| HTTP status | Reason code | What it means |
|---|---|---|
400 |
unsupported_filter |
The request includes a query parameter that this route does not support. |
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 does not include every required scope. |
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 requested encounter is not available to this API key. |
404 |
encounter_not_found |
The encounter was not found for the caller organization. |
422 |
invalid_limit, invalid_offset, invalid_sort, or invalid_query |
A supported pagination, sort, or date parameter is invalid on the list route. |
503 |
digest_key_unavailable |
API-key verification is temporarily unavailable. |
Authentication, partner route enablement, and scope checks run before query validation. Resource lookup happens after unsupported-query handling.
Use the documents array in an encounter response to select a clinical document, then follow Fetch documents. See the encounter endpoints in the API Reference for the generated endpoint contracts.
Read a selected clinical document from an encounter.
Tune encounter-list paging and date filters.
Inspect the generated encounter contracts.