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:
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by status: open, closed |
type | string | Filter by type: general, booking, file_review |
priority | integer | Filter by priority: 1 (urgent) to 4 (low) |
search | string | Search by title |
limit | integer | Results per page (default 50, max 100) |
offset | integer | Pagination 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:
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Task title |
description | string | No | Task description |
type | string | No | general (default), booking, file_review |
priority | integer | No | 1 (urgent), 2 (high), 3 (normal, default), 4 (low) |
due_date | string | No | Due date in YYYY-MM-DD format |
patient_id | string | No | UUID of linked patient |
appointment_id | string | No | UUID 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:
| Field | Type | Description |
|---|---|---|
title | string | Task title |
description | string | Task description (empty string to clear) |
type | string | general, booking, file_review |
status | string | open, closed |
priority | integer | 1 to 4 |
due_date | string | YYYY-MM-DD (empty string to clear) |
patient_id | string | UUID (empty string to unlink) |
appointment_id | string | UUID (empty string to unlink) |
Patients
List Patients
GET /v1/patients
Returns a paginated list of patients.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
search | string | Search by name or health card number |
limit | integer | Results per page (default 50, max 100) |
offset | integer | Pagination 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.