Skip to main content
Every records method needs two IDs:
  • bid — your business ID, provided by Eka Care when your account is set up.
  • patientId — the OID of the logged-in user whose records you are working with.

List Documents

listDocuments is cache-first: it gives you local data instantly, then updates it from the server. What happens when you call it:
  1. Local read — the SDK reads the records already stored in IndexedDB.
  2. Instant callback — if you passed onStale, those local records are handed to you right away, so your UI can render without waiting for the network.
  3. Server fetch — the SDK then asks the server only for records that changed since the last sync (not the whole list again) and saves them into IndexedDB. Anyone subscribed to documents:changed gets notified.
  4. Final result — the await completes with the full, up-to-date list. If there is no internet, you still get the local list.
If you don’t pass onStale, there is no early delivery — the call waits for the server fetch to complete and then returns the complete list in one go.
ListDocumentsFilter fields:
FieldTypeDescription
documentTypestringFilter by document type code ('lr', 'ps' etc.) — client-side
caseIdstringFilter to records belonging to a case — client-side
fileTypestringFilter by file type ('IMG', 'PDF', 'HTML') — client-side
updatedAfternumberOnly records updated after this epoch (seconds) — sent to the server

Group Documents

groupDocuments organises the document list into sections, ready to render as a sectioned UI (like a list with headers). Instead of one flat array, you get an array of groups — each with a key, a display label, and the records that fall under it. You can group two ways:
  • By document type — one group per type code: all lab reports together, all prescriptions together, and so on.
  • By date — one group per day, month, or year (e.g. “May 2025”), based on either the document date or the upload date.
Reads from the local DB — no network call.
GroupDocumentsOptions:
FieldTypeDefaultDescription
groupByGroupByrequiredGroupBy.DocumentType or GroupBy.Date
dateFormatDateGroupFormatMonthDay | Month | Year — granularity when grouping by date
dateFieldDateFieldDocumentDateDocumentDate | CreatedAt — which date to group by
sortBySortByUpdatedAtUpdatedAt | CreatedAt — sort within each group
filterListDocumentsFilterSame filters as listDocuments

Upload a Document

Offline: record + blob are saved to IndexedDB as upload_failure and auto-retried on the next sdk.sync().
File constraints:
Limit
Max batch items5
Max files per batch10
Image max10 MB
PDF max25 MB
Supported typesimage/jpeg image/jpg image/png application/pdf

Download a Document

Cache-first — returns blobs from IndexedDB if previously fetched, otherwise downloads from S3 and caches.

Get Smart Report

Cache-first — returns the AI-extracted smart report from IndexedDB if available, otherwise fetches from the API.

Describe a Document

Returns the full details of a document. Cache-first — served from IndexedDB if the document’s files were previously fetched, otherwise fetched from the API.
DescribeDocumentResponse fields (all optional):
FieldTypeDescription
filesDocumentFile[]File attachments — each has asset_url (signed S3 URL) and file_type (DocumentFileType)
smart_reportSmartReportAI-extracted fields (verified / unverified)
tagsstring[]User-supplied tags
document_typestringDocument type code (e.g. 'lr', 'ps')
document_date_epochnumberDocument date as Unix epoch (seconds)
sourcestringOrigin of the document

Edit a Document

Local-first — patches the DB immediately, syncs to the server in the background.

Delete a Document

Soft-deletes locally (hidden immediately), hard-deletes after the server confirms. Also removes the document from any linked cases in the local DB.