Skip to main content
The EkaScribe Protocol APIs implement the MedScribeAlliance Protocol v0.1 — a standardized, session-based interface for medical voice capture and structured transcription. They replace the older transaction-based EkaScribe v2 APIs (presigned URL → upload → init → result), which are now deprecated.
All protocol endpoints are served under the base path /voice/v1 on https://api.eka.care (production) or https://api.dev.eka.care (development).

Why the protocol APIs

  • Single session lifecycle — one session_id ties discovery, upload, processing and results together; no separate transaction/presigned-URL juggling.
  • Direct chunked upload — stream audio chunks straight to the session as raw binary, or send one file and let the server chunk it via VAD.
  • Self-describing — the discovery endpoint advertises supported models, audio formats, languages and limits so clients can configure themselves at runtime.
  • Provider-agnostic — the same protocol backs HTTP, WebSocket and streaming clients.

Authentication

Every endpoint except Discovery requires a bearer token:
Authorization: Bearer YOUR_API_KEY
Don’t have an API key? Contact the Eka Care team to get started.

The session flow

1. Discovery        GET  /voice/v1/.well-known/medscribealliance   (public)
        │           → capabilities, models, languages

2. Create Session   POST /voice/v1/sessions                        → 201 Created
        │           → session_id, upload_url, expires_at

3. Send audio  ── one of, based on upload_type ──────────────────────────
        │     chunked → Upload Audio (HTTP binary, repeat per chunk)  → 200 OK
        │              POST /voice/v1/sessions/{session_id}/audio/{file_name}
        │     stream  → Stream Audio (WebSocket)
        │              wss://…/voice/v1/stream/sessions/{stream_id}/audio

4. End Session      POST /voice/v1/sessions/{session_id}/end       → 202 Accepted
        │           → processing started (canonical finalize for both paths)

5. Get Session      GET  /voice/v1/sessions/{session_id}          (poll ~1s until ≠202)
                    → 200 completed · 206 partial · 410 expired
1

Discover capabilities

Call Discovery to learn which models, audio_formats and upload_methods are available. Cache the result (valid for 3 hours).
2

Create a session

Call Create Session with your chosen model, templates, upload_type and communication_protocol. Store the returned session_id and upload_url.
3

Send audio

Based on your upload_type: stream chunks over HTTP with Upload Audio (chunked), or stream in real time over a WebSocket with Stream Audio (stream).
4

End the session

Call End Session to lock the session and trigger transcription + template extraction. This is the canonical finalize for both audio paths.
5

Retrieve results

Poll Get Session at ~1-second intervals (or register a webhook) until the status is no longer 202. The response carries the transcript and structured template results.

Key identifiers

IDCreated byUsed in
session_idCreate Session (or client-supplied, 16–32 chars)Upload Audio, End Session, status polling
upload_urlCreate SessionThe endpoint audio chunks are POSTed to

API reference

APIEndpointAuth
DiscoveryGET /voice/v1/.well-known/medscribealliancePublic
Create SessionPOST /voice/v1/sessionsBearer
Upload AudioPOST /voice/v1/sessions/{session_id}/audio/{file_name}Bearer
Stream Audiowss://…/voice/v1/stream/sessions/{stream_id}/audioBearer
End SessionPOST /voice/v1/sessions/{session_id}/endBearer
Get SessionGET /voice/v1/sessions/{session_id}Bearer