Fabric
You're on the list! We'll be in touch when we launch.
Please enter a valid email address.
Something went wrong. Please try again.
Back to Developers

API Reference

February 18, 2026 ยท 2 min read

Fabric EMR exposes a REST API at /v1 for third-party integrations. All endpoints use JSON and require API key authentication.

Authentication

Include your API key as a Bearer token in the Authorization header:

Authorization: Bearer sk_live_your_api_key_here

API keys are scoped to an organization. Generate keys from Settings > API Keys in the Fabric EMR dashboard.

Rate Limits

All API endpoints are rate-limited to 100 requests per minute per API key. Exceeding this limit returns a 429 status code.

Error Responses

All errors return JSON with error and message fields:

{
  "error": "not_found",
  "message": "Task not found"
}

Common error codes: invalid_id, validation_error, not_found, forbidden, rate_limit_exceeded, internal_error.


Tasks

List Tasks

GET /v1/tasks

Returns a paginated list of tasks.

Query Parameters:

ParameterTypeDescription
statusstringFilter by status: open, closed
typestringFilter by type: general, booking, file_review
priorityintegerFilter by priority: 1 (urgent) to 4 (low)
searchstringSearch by title
limitintegerResults per page (default 50, max 100)
offsetintegerPagination offset (default 0)

Response:

{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "title": "Review lab results for patient",
      "description": "Fasting glucose panel results arrived",
      "type": "file_review",
      "status": "open",
      "priority": 2,
      "due_date": "2026-02-20",
      "patient_id": "660e8400-e29b-41d4-a716-446655440001",
      "created_by": "user_abc123",
      "created_at": "2026-02-18T14:30:00Z",
      "updated_at": "2026-02-18T14:30:00Z"
    }
  ],
  "total_count": 42,
  "limit": 50,
  "offset": 0
}

Get Task

GET /v1/tasks/:id

Returns a single task by ID.


Create Task

POST /v1/tasks

Request Body:

FieldTypeRequiredDescription
titlestringYesTask title
descriptionstringNoTask description
typestringNogeneral (default), booking, file_review
priorityintegerNo1 (urgent), 2 (high), 3 (normal, default), 4 (low)
due_datestringNoDue date in YYYY-MM-DD format
patient_idstringNoUUID of linked patient
appointment_idstringNoUUID of linked appointment

Example:

{
  "title": "Follow up on blood work",
  "type": "file_review",
  "priority": 2,
  "due_date": "2026-02-25",
  "patient_id": "660e8400-e29b-41d4-a716-446655440001"
}

Returns the created task with a 201 status code.


Update Task

PUT /v1/tasks/:id

Partial update: only include the fields you want to change.

Request Body:

FieldTypeDescription
titlestringTask title
descriptionstringTask description (empty string to clear)
typestringgeneral, booking, file_review
statusstringopen, closed
priorityinteger1 to 4
due_datestringYYYY-MM-DD (empty string to clear)
patient_idstringUUID (empty string to unlink)
appointment_idstringUUID (empty string to unlink)

Patients

List Patients

GET /v1/patients

Returns a paginated list of patients.

Query Parameters:

ParameterTypeDescription
searchstringSearch by name or health card number
limitintegerResults per page (default 50, max 100)
offsetintegerPagination offset (default 0)

Response:

{
  "data": [
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "first_name": "Jane",
      "last_name": "Doe",
      "gender": "female",
      "birth_date": "1985-03-15",
      "health_card_number": "1234567890",
      "health_card_province": "ON",
      "phone_cell": "416-555-0123",
      "email": "[email protected]",
      "created_at": "2026-01-10T09:00:00Z",
      "updated_at": "2026-02-18T14:30:00Z"
    }
  ],
  "total_count": 128,
  "limit": 50,
  "offset": 0
}

Get Patient

GET /v1/patients/:id

Returns a single patient by ID, including all demographic fields.