Skip to main content
GET
/
voice
/
v1
/
sessions
/
{session_id}
Get Session
curl --request GET \
  --url https://api.eka.care/voice/v1/sessions/{session_id} \
  --header 'Authorization: Bearer <token>'
{
  "session_id": "ses_abc123def456",
  "status": "completed",
  "created_at": "2026-06-06T14:21:07Z",
  "completed_at": "2026-06-06T14:21:34Z",
  "expires_at": "2026-06-06T15:21:07Z",
  "upload_url": "https://api.eka.care/voice/v1/sessions/ses_abc123def456/audio",
  "model_used": "pro",
  "language_detected": "en",
  "audio_files_received": 4,
  "audio_files": [
    "0.wav",
    "1.wav",
    "2.wav",
    "3.wav"
  ],
  "additional_data": {
    "_protocol": {
      "version": "0.1",
      "upload_type": "chunked",
      "communication_protocol": "http",
      "requested_templates": [
        "eka_emr_template",
        "clinical_notes_template"
      ]
    }
  },
  "transcript": "Patient presents with cough and fever...",
  "templates": [
    {
      "eka_emr_template": {
        "status": "success",
        "document_id": "doc_abc123",
        "document_type": "eka_emr_template",
        "data": {
          "chief_complaint": "cough and fever"
        },
        "publish": {}
      }
    },
    {
      "clinical_notes_template": {
        "status": "success",
        "document_id": "doc_def456",
        "data": {
          "assessment": "Acute bronchitis"
        },
        "publish": {}
      }
    }
  ]
}
Retrieve the current status of a session and — once processing finishes — its transcript and structured template results. This is the endpoint you poll after End Session.
The HTTP status code is the signal. The same endpoint returns different status codes and response shapes depending on where the session is in its lifecycle.

Polling guidance

After you receive 202 Accepted from End Session, poll this endpoint at ~1-second intervals until the status is no longer 202:
POST /voice/v1/sessions/{session_id}/end        → 202 Accepted
GET  /voice/v1/sessions/{session_id}            → 202  (wait 1s, retry)
GET  /voice/v1/sessions/{session_id}            → 202  (wait 1s, retry)
GET  /voice/v1/sessions/{session_id}            → 200  ✓ results ready
Prefer not to poll? Register a webhook to be notified automatically when processing completes, and call Get Session once on receipt.

Status codes

HTTP statusstatusMeaningBody
202processing / initializedStill processing — keep polling.SessionProcessingResponse
200completedFinished successfully; transcript + templates available.SessionCompletedResponse
206partialFinished, but some templates failed.SessionPartialResponse
200failedProcessing failed (terminal). Inspect the response for details.SessionCompletedResponse shape
410expiredSession expired before processing was initiated.ExpiredSessionResponse
404Session does not exist.ErrorResponse

Response fields by state

Every state also echoes upload_url (the session’s audio upload endpoint — HTTPS for chunked, wss:// for stream).

202 Processing

session_id, status, created_at, expires_at, audio_files_received, audio_files[], additional_data, transcript (partial/empty), patient_details.

200 Completed

Adds completed_at, model_used, language_detected, the full transcript, and templates — an array with one entry per generated document, keyed by template_id (each entry carries status, data, document_id, publish metadata, and a presigned_url when applicable).

206 Partial

Same as completed, plus audio_files_processed and processing_errors[] describing the non-fatal failures.

410 Expired

session_id, status: expired, created_at, expired_at, message, audio_files_received, audio_files[], empty templates/transcript.

Filtering to one template

Pass ?template_id=<id> to restrict the returned templates to documents for a single template only — useful when a session requested multiple templates but you only need one.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

session_id
string
required

Session ID returned by Create Session

Example:

"ses_abc123def456"

Query Parameters

template_id
string

If provided, restricts returned templates to documents for this template_id only.

Response

Session completed successfully

Returned with HTTP 200 when the session completed successfully.

session_id
string
upload_url
string

Audio upload URL for the session (HTTPS for chunked, wss:// for stream).

status
string
Example:

"completed"

created_at
string<date-time>
completed_at
string<date-time> | null
model_used
string | null
Example:

"pro"

language_detected
string | null

ISO 639-1 language code detected from the audio.

Example:

"en"

audio_files_received
integer
audio_files
string[]
additional_data
object
templates
object[]

Template results as a list — one entry per generated document, each a single-key object keyed by template_id. A template that produces multiple documents appears multiple times, so this is a list rather than a map. Each inner object carries status, data, document_id, document_type, publish metadata (and a presigned_url when applicable).

Example:
[
{
"eka_emr_template": {
"status": "success",
"document_id": "doc_abc123",
"document_type": "eka_emr_template",
"data": { "chief_complaint": "cough and fever" },
"publish": {}
}
},
{
"clinical_notes_template": {
"status": "success",
"document_id": "doc_def456",
"data": { "assessment": "Acute bronchitis" },
"publish": {}
}
}
]
transcript
string | null
patient_details
object