> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Canvas Medical

The Canvas Medical connector lets your AI agent act in each user's Canvas Medical account. Each user signs in to Canvas Medical once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 74 tools.

**Authentication:** SMART On FHIR
**Categories:** Healthcare
**Tools:** 74: 58 read, 16 write, 0 destructive
**Users sign in with:** SMART on FHIR
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=CANVASMEDICAL)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Canvas Medical connection

   In **AgentKit > Connections**, create a Canvas Medical connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   **Console steps with screenshots:**

   Canvas Medical connections use SMART on FHIR and act as the signed-in Canvas staff user. Each Canvas customer runs its own instance: sign-in happens on `<instance>.canvasmedical.com` and the FHIR API is on `fumage-<instance>.canvasmedical.com`. Each connection carries that instance's endpoints, audience (`aud`) and FHIR server domain, the client ID and secret of an OAuth app on the instance, and one extra authorization parameter.

   1. ### Create the connection and copy the redirect URI

      In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**, find **Canvas Medical** and click **Create**. Copy the **Redirect URI**.

   2. ### Register an OAuth app on the Canvas instance

      Open `https://<instance>.canvasmedical.com/auth/applications/` and add an application:

      - **Client type**: Confidential
      - **Authorization grant type**: Authorization code
      - **Redirect URIs**: the redirect URI you copied

      Note the client ID and client secret.

   3. ### Enter the values on the connection

      Back on the Canvas Medical connection, enter these values, replacing `<instance>` with your instance name:

      | Field                  | Value                                              |
      | ---------------------- | -------------------------------------------------- |
      | Client ID              | the client ID from step 2                          |
      | Client Secret          | the client secret from step 2                      |
      | Authorization Endpoint | `https://<instance>.canvasmedical.com/auth/authorize/` |
      | Token Endpoint         | `https://<instance>.canvasmedical.com/auth/token/`     |
      | Audience (aud)         | `https://fumage-<instance>.canvasmedical.com`      |
      | FHIR Server Domain     | `fumage-<instance>.canvasmedical.com`              |

      Canvas publishes the same endpoints at `https://fumage-<instance>.canvasmedical.com/.well-known/smart-configuration`.

      Select `openid`, `fhirUser`, `offline_access` and `launch`, plus `user/*.*` or narrower scopes for the resources your agent uses. Click **Save**.

   4. ### Ask Scalekit to add the `launch` authorization parameter

      Email [support@scalekit.com](mailto:support@scalekit.com) with the connection's ID and ask for the extra authorization parameter `launch` set to `e30K`. The dashboard has no field for it. Connect accounts only after support confirms the change.

      Canvas denies a staff user's sign-in with `error=access_denied` unless the authorization request carries a `launch` parameter. `e30K` is an empty launch context; it leaves the patient out, because Canvas refuses staff API calls from a token whose launch context names a patient.

   > note: Find a record after you create it
   >
   > Canvas returns a new record's ID only in a response header, so a create tool returns an empty result. To get the new record, run the matching search, such as `canvasmedical_patient_search` after `canvasmedical_patient_create`.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'canvasmedical_allergen_search',
  toolInput: {},
  connector: 'canvasmedical',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="canvasmedical_allergen_search",
    tool_input={},
    connection_name="canvasmedical",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `canvasmedical_allergen_search`

Search Allergens · Read-only

Search the Canvas (FDB) allergen catalog by text or code.
Returns a FHIR Bundle of Allergen resources with id and FDB, RxNorm and SNOMED codings.
Use it to get the FDB allergen code that canvasmedical_allergy_intolerance_create needs. Canvas requires text or code. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `code` (`string`, optional): Allergen code as system|code, with system http://www.nlm.nih.gov/research/umls/rxnorm or http://snomed.info/sct, e.g. http://snomed.info/sct|373270004. Provide this or text.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `text` (`string`, optional): Case-insensitive partial match on the allergen name, e.g. penicillin. Provide this or code.

Example input: `{}`

### `canvasmedical_allergy_intolerance_read`

Get Allergy or Intolerance · Read-only

Get one allergy or intolerance record by Canvas ID.
Returns the AllergyIntolerance resource with allergen code, type, clinical and verification status, onset, reaction and notes.
Use it before canvasmedical_allergy_intolerance_mark_entered_in_error, which needs the current record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `allergy_intolerance_id` (`string`, required): Canvas ID of the AllergyIntolerance to fetch, as returned by canvasmedical_allergy_intolerance_search, e.g. 12345.

Example input: `{"allergy_intolerance_id":"<allergy_intolerance_id>"}`

### `canvasmedical_allergy_intolerance_search`

Search Allergies and Intolerances · Read-only

Search a patient's allergies and intolerances.
Returns a FHIR Bundle of AllergyIntolerance resources with id, allergen code, type, clinical and verification status, reaction and severity.
Use it to review a patient's allergies or check for a duplicate before canvasmedical_allergy_intolerance_create. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the AllergyIntolerance to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose AllergyIntolerance records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_appointment_read`

Get Appointment · Read-only

Get one appointment by Canvas ID.
Returns the Appointment resource with status, appointment type, reason, start and end times, location, meeting link and participants.
Use it before canvasmedical_appointment_update to copy the fields you keep. Use canvasmedical_appointment_search to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `appointment_id` (`string`, required): Canvas ID of the Appointment to fetch, as returned by canvasmedical_appointment_search, e.g. 12345.

Example input: `{"appointment_id":"<appointment_id>"}`

### `canvasmedical_appointment_search`

Search Appointments · Read-only

Search appointments by patient, practitioner, location, status or start date.
Returns a FHIR Bundle of Appointment resources with id, status, appointment type, reason, start and end times, location and participants.
Use it to review a schedule or find an appointment to change. Use canvasmedical_slot_search to find open times instead. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `appointment_type` (`string`, optional): Appointment type code, or system|code, e.g. http://snomed.info/sct|308335008.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `date` (`array`, optional): Filter by the appointment start time. A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `id` (`string`, optional): Canvas ID of the Appointment to match. Use it to fetch specific records through search, e.g. 12345.
- `identifier` (`string`, optional): External identifier stored on the appointment, as value or system|value, e.g. MyScheduler|abc123.
- `location` (`string`, optional): Practice location of the appointment as a FHIR reference in the form Location/<id>, e.g. Location/24680.
- `patient` (`string`, optional): Patient whose Appointment records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `practitioner` (`string`, optional): Practitioner involved in the appointment as a FHIR reference in the form Practitioner/<id>, e.g. Practitioner/67890.
- `status` (`string`, optional): Appointment status. Accepts one value per request: proposed, pending, booked, arrived, checked-in, fulfilled, noshow or cancelled. One of: `proposed`, `pending`, `booked`, `arrived`, `checked-in`, `fulfilled`, `noshow`, `cancelled`.

Example input: `{}`

### `canvasmedical_care_plan_read`

Get Care Plan · Read-only

Get one care plan by Canvas ID.
Returns the CarePlan resource with status, intent, category, subject and narrative text.
Use canvasmedical_care_plan_search to list a patient's care plans.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `care_plan_id` (`string`, required): Canvas ID of the CarePlan to fetch, as returned by canvasmedical_care_plan_search, e.g. 12345.

Example input: `{"care_plan_id":"<care_plan_id>"}`

### `canvasmedical_care_plan_search`

Search Care Plans · Read-only

Search a patient's care plans.
Returns a FHIR Bundle of CarePlan resources with id, status, intent, category and subject.
Use it to review a patient's plan of care. Use canvasmedical_goal_search for goals. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category` (`string`, optional): Category as system|code, e.g. http://hl7.org/fhir/us/core/CodeSystem/careplan-category|assess-plan.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the CarePlan to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose CarePlan records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_care_team_read`

Get Care Team · Read-only

Get one care team by Canvas ID.
Returns the CareTeam resource with status, subject and participants with their roles.
Use canvasmedical_care_team_search to find a patient's care team.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `care_team_id` (`string`, required): Canvas ID of the CareTeam to fetch, as returned by canvasmedical_care_team_search, e.g. 12345.

Example input: `{"care_team_id":"<care_team_id>"}`

### `canvasmedical_care_team_search`

Search Care Teams · Read-only

Search patients' care teams by patient, member or status.
Returns a FHIR Bundle of CareTeam resources with id, status, subject and participants with their roles.
Use it to see who cares for a patient, or every patient a practitioner is on the care team for. Use canvasmedical_care_team_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `participant` (`string`, optional): Care team member as Practitioner/<id> or Organization/<id>, e.g. Practitioner/67890.
- `patient` (`string`, optional): Patient whose CareTeam records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `status` (`string`, optional): Participant status: proposed, active, suspended, inactive or entered-in-error. One of: `proposed`, `active`, `suspended`, `inactive`, `entered-in-error`.

Example input: `{}`

### `canvasmedical_communication_read`

Get Message · Read-only

Get one practitioner-patient message by Canvas ID.
Returns the Communication resource with status, sender, recipient, sent and received times and the message text.
Use canvasmedical_communication_search to list a patient's messages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `communication_id` (`string`, required): Canvas ID of the Communication to fetch, as returned by canvasmedical_communication_search, e.g. 12345.

Example input: `{"communication_id":"<communication_id>"}`

### `canvasmedical_communication_search`

Search Messages · Read-only

Search messages between practitioners and patients.
Returns a FHIR Bundle of Communication resources with id, status, sender, recipient, sent and received times and the message text.
Use it to read a patient's message thread. Use canvasmedical_communication_create to send a message. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Communication to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose Communication records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `recipient` (`string`, optional): Recipient as Patient/<id> or Practitioner/<id>, e.g. Patient/12345.
- `sender` (`string`, optional): Sender as Patient/<id> or Practitioner/<id>, e.g. Practitioner/67890.

Example input: `{}`

### `canvasmedical_condition_read`

Get Condition · Read-only

Get one condition, problem or diagnosis by Canvas ID.
Returns the Condition resource with code, clinical and verification status, category, subject, onset, abatement and notes.
Use it before canvasmedical_condition_mark_entered_in_error, which needs the current record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `condition_id` (`string`, required): Canvas ID of the Condition to fetch, as returned by canvasmedical_condition_search, e.g. 12345.

Example input: `{"condition_id":"<condition_id>"}`

### `canvasmedical_condition_search`

Search Conditions · Read-only

Search a patient's conditions, problems and diagnoses.
Returns a FHIR Bundle of Condition resources with id, code (usually ICD-10), clinical and verification status, category, onset and notes.
Use it to review the problem list or check for a duplicate before canvasmedical_condition_create. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category` (`string`, optional): Category code, or system|code, e.g. problem-list-item or encounter-diagnosis.
- `clinical_status` (`string`, optional): Clinical status: active or resolved. One of: `active`, `resolved`.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Condition to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose Condition records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `verification_status` (`string`, optional): Verification status: confirmed, provisional or entered-in-error. One of: `confirmed`, `provisional`, `entered-in-error`.

Example input: `{}`

### `canvasmedical_coverage_read`

Get Coverage · Read-only

Get one insurance coverage by Canvas ID.
Returns the Coverage resource with status, payor, subscriber, member ID, relationship, plan class, order and period.
Use canvasmedical_coverage_search to list a patient's coverages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `coverage_id` (`string`, required): Canvas ID of the Coverage to fetch, as returned by canvasmedical_coverage_search, e.g. 12345.

Example input: `{"coverage_id":"<coverage_id>"}`

### `canvasmedical_coverage_search`

Search Coverages · Read-only

Search insurance coverages by patient, member ID, subscriber ID or status.
Returns a FHIR Bundle of Coverage resources with id, status, payor, subscriber, member ID, relationship, plan class and period.
Use it to check a patient's insurance. Use canvasmedical_coverage_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Coverage to match. Use it to fetch specific records through search, e.g. 12345.
- `identifier` (`string`, optional): Insurance member ID on the coverage, e.g. MBR12345.
- `patient` (`string`, optional): Patient whose Coverage records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `status` (`string`, optional): Coverage status: active or cancelled. One of: `active`, `cancelled`.
- `subscriberid` (`string`, optional): Subscriber ID on the coverage, e.g. SUB12345.

Example input: `{}`

### `canvasmedical_device_read`

Get Device · Read-only

Get one implantable device record by Canvas ID.
Returns the Device resource with status, UDI, device type, dates and patient.
Use canvasmedical_device_search to list a patient's devices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `device_id` (`string`, required): Canvas ID of the Device to fetch, as returned by canvasmedical_device_search, e.g. 12345.

Example input: `{"device_id":"<device_id>"}`

### `canvasmedical_device_search`

Search Devices · Read-only

Search a patient's implantable devices.
Returns a FHIR Bundle of Device resources with id, status, UDI, device type and patient.
Use it to review a patient's implants. Use canvasmedical_device_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Device to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose Device records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_diagnostic_report_read`

Get Diagnostic Report · Read-only

Get one diagnostic report (lab or imaging report) by Canvas ID.
Returns the DiagnosticReport resource with status, category, code, effective date, result references and presented forms.
Use canvasmedical_diagnostic_report_search to list a patient's reports.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `diagnostic_report_id` (`string`, required): Canvas ID of the DiagnosticReport to fetch, as returned by canvasmedical_diagnostic_report_search, e.g. 12345.

Example input: `{"diagnostic_report_id":"<diagnostic_report_id>"}`

### `canvasmedical_diagnostic_report_search`

Search Diagnostic Reports · Read-only

Search a patient's diagnostic reports, such as lab and imaging reports.
Returns a FHIR Bundle of DiagnosticReport resources with id, status, category, code, effective date, result references and attached documents.
Use it to find lab or imaging reports. Use canvasmedical_observation_search for individual result values. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category` (`string`, optional): Report category code, or system|code, e.g. http://terminology.hl7.org/CodeSystem/v2-0074|LAB.
- `code` (`string`, optional): Report code, or system|code, e.g. http://loinc.org|24323-8.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `date` (`array`, optional): Filter by the report effective date. A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `id` (`string`, optional): Canvas ID of the DiagnosticReport to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose DiagnosticReport records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_document_reference_read`

Get Document Reference · Read-only

Get one document reference by Canvas ID.
Returns the DocumentReference resource with status, type, category, subject, date, author and attachment URLs.
Use canvasmedical_document_reference_search to list a patient's documents.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `document_reference_id` (`string`, required): Canvas ID of the DocumentReference to fetch, as returned by canvasmedical_document_reference_search, e.g. 12345.

Example input: `{"document_reference_id":"<document_reference_id>"}`

### `canvasmedical_document_reference_search`

Search Document References · Read-only

Search a patient's documents, such as clinical notes, lab reports and uploaded files.
Returns a FHIR Bundle of DocumentReference resources with id, status, type, category, date and attachment links.
Use it to find documents in a patient's chart. Use canvasmedical_document_reference_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category` (`string`, optional): Document category code, or system|code, e.g. http://schemas.canvasmedical.com/fhir/document-reference-category|labreport.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `date` (`array`, optional): Filter by the document creation date. A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `id` (`string`, optional): Canvas ID of the DocumentReference to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose DocumentReference records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `status` (`string`, optional): Document status: current, superseded or entered-in-error. One of: `current`, `superseded`, `entered-in-error`.
- `subject` (`string`, optional): Patient the document is about (same as patient) as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `type` (`string`, optional): Document type (usually LOINC), as code or system|code, e.g. http://loinc.org|11502-2.

Example input: `{}`

### `canvasmedical_encounter_read`

Get Encounter · Read-only

Get one encounter (visit) by Canvas ID.
Returns the Encounter resource with status, class, type, period, participants, reason and location.
Use canvasmedical_encounter_search to list a patient's encounters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `encounter_id` (`string`, required): Canvas ID of the Encounter to fetch, as returned by canvasmedical_encounter_search, e.g. 12345.

Example input: `{"encounter_id":"<encounter_id>"}`

### `canvasmedical_encounter_search`

Search Encounters · Read-only

Search a patient's encounters (visits), optionally by date or the appointment that scheduled them.
Returns a FHIR Bundle of Encounter resources with id, status, class, type, period, participants and location.
Use it to find the encounter to attach a new condition, allergy, medication or immunization to. Use canvasmedical_encounter_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `appointment` (`string`, optional): Appointment that scheduled the encounter as a FHIR reference in the form Appointment/<id>, e.g. Appointment/13579.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `date` (`array`, optional): Filter by the encounter start time (period.start). A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `id` (`string`, optional): Canvas ID of the Encounter to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose Encounter records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `subject` (`string`, optional): Patient who is the subject of the encounter as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_goal_read`

Get Goal · Read-only

Get one goal by Canvas ID.
Returns the Goal resource with lifecycle and achievement status, description, priority, start date, targets and notes.
Use canvasmedical_goal_search to list a patient's goals.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `goal_id` (`string`, required): Canvas ID of the Goal to fetch, as returned by canvasmedical_goal_search, e.g. 12345.

Example input: `{"goal_id":"<goal_id>"}`

### `canvasmedical_goal_search`

Search Goals · Read-only

Search a patient's goals.
Returns a FHIR Bundle of Goal resources with id, lifecycle and achievement status, description, priority, start date and targets.
Use it to review a patient's goals. Use canvasmedical_care_plan_search for care plans. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Goal to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose Goal records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_immunization_read`

Get Immunization · Read-only

Get one immunization record by Canvas ID.
Returns the Immunization resource with status, vaccine code, patient, occurrence date, primary source flag and notes.
Use it before canvasmedical_immunization_mark_entered_in_error, which needs the current record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `immunization_id` (`string`, required): Canvas ID of the Immunization to fetch, as returned by canvasmedical_immunization_search, e.g. 12345.

Example input: `{"immunization_id":"<immunization_id>"}`

### `canvasmedical_immunization_search`

Search Immunizations · Read-only

Search a patient's immunization records.
Returns a FHIR Bundle of Immunization resources with id, status, vaccine code (CVX or CPT), occurrence date and notes.
Use it to review vaccination history or check before canvasmedical_immunization_create. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Immunization to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose Immunization records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_location_read`

Get Location · Read-only

Get one practice location by Canvas ID.
Returns the Location resource with name, status, address, contact details and managing organization.
Use canvasmedical_location_search to list locations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): Canvas ID of the Location to fetch, as returned by canvasmedical_location_search, e.g. 12345.

Example input: `{"location_id":"<location_id>"}`

### `canvasmedical_location_search`

Search Locations · Read-only

List the practice locations in the Canvas instance.
Returns a FHIR Bundle of Location resources with id, name, status, address and contact details.
Use it to get the location ID that canvasmedical_appointment_create needs. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Location to match. Use it to fetch specific records through search, e.g. 12345.

Example input: `{}`

### `canvasmedical_medication_read`

Get Medication · Read-only

Get one medication from the Canvas (FDB) catalog by ID.
Returns the Medication resource with its RxNorm and FDB codings.
Use canvasmedical_medication_search to find the ID by name.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `medication_id` (`string`, required): Canvas ID of the Medication to fetch, as returned by canvasmedical_medication_search, e.g. 12345.

Example input: `{"medication_id":"<medication_id>"}`

### `canvasmedical_medication_request_read`

Get Medication Request · Read-only

Get one prescription (medication request) by Canvas ID.
Returns the MedicationRequest resource with status, intent, medication, dosage instructions, dispense request and requester.
Use canvasmedical_medication_request_search to list a patient's prescriptions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `medication_request_id` (`string`, required): Canvas ID of the MedicationRequest to fetch, as returned by canvasmedical_medication_request_search, e.g. 12345.

Example input: `{"medication_request_id":"<medication_request_id>"}`

### `canvasmedical_medication_request_search`

Search Medication Requests · Read-only

Search prescriptions (medication requests) by patient, prescriber, status or intent.
Returns a FHIR Bundle of MedicationRequest resources with id, status, intent, medication, dosage instructions, dispense request and requester.
Use it to review prescriptions. Use canvasmedical_medication_statement_search for the patient's medication list. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the MedicationRequest to match. Use it to fetch specific records through search, e.g. 12345.
- `intent` (`string`, optional): Request intent: order or filler-order. One of: `order`, `filler-order`.
- `patient` (`string`, optional): Patient whose MedicationRequest records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `requester` (`string`, optional): Prescriber who wrote the request as a FHIR reference in the form Practitioner/<id>, e.g. Practitioner/67890.
- `status` (`string`, optional): Prescription status: active, cancelled, stopped or entered-in-error. One of: `active`, `cancelled`, `stopped`, `entered-in-error`.

Example input: `{}`

### `canvasmedical_medication_search`

Search Medications · Read-only

Search the Canvas (FDB) medication catalog by text or RxNorm code.
Returns a FHIR Bundle of Medication resources with id (e.g. fdb-449732) and RxNorm and FDB codings.
Use it to get the medication ID that canvasmedical_medication_statement_create needs. Canvas requires text or code. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `code` (`string`, optional): RxNorm code as http://www.nlm.nih.gov/research/umls/rxnorm|<code>, e.g. http://www.nlm.nih.gov/research/umls/rxnorm|860975. Provide this or text.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `text` (`string`, optional): Case-insensitive partial match on the medication name, e.g. metformin. Provide this or code.

Example input: `{}`

### `canvasmedical_medication_statement_read`

Get Medication Statement · Read-only

Get one medication statement (medication list entry) by Canvas ID.
Returns the MedicationStatement resource with status, medication coding, subject, effective period and dosage text.
Use it before canvasmedical_medication_statement_mark_entered_in_error, which needs the current record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `medication_statement_id` (`string`, required): Canvas ID of the MedicationStatement to fetch, as returned by canvasmedical_medication_statement_search, e.g. 12345.

Example input: `{"medication_statement_id":"<medication_statement_id>"}`

### `canvasmedical_medication_statement_search`

Search Medication Statements · Read-only

Search a patient's medication list (medication statements).
Returns a FHIR Bundle of MedicationStatement resources with id, status, medication coding (RxNorm and FDB), effective period and dosage text.
Use it to review what a patient takes. Use canvasmedical_medication_request_search for prescriptions. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the MedicationStatement to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose MedicationStatement records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_next_page`

Get Next Page of Search Results · Read-only

Fetch the next page of results from an earlier Canvas Medical search tool by following its `next` link.
Returns a FHIR Bundle in the same shape as the original search.
Use it after any canvasmedical_*_search result that has a link with relation `next`; no `next` link means you already have the last page.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `next_page_path` (`string`, required): The `url` of the search Bundle's `link` entry whose `relation` is `next`, without the leading slash. Canvas returns a relative link such as `/Observation?_count=10&_offset=10`; pass `Observation?_count=10&_offset=10`. If the link is absolute (https://fumage-<instance>.canvasmedical.com/Observation?...), drop everything up to and including the host and the slash after it. Pass the rest unchanged, starting with the resource type.

Example input: `{"next_page_path":"<next_page_path>"}`

### `canvasmedical_observation_read`

Get Observation · Read-only

Get one observation (vital sign, lab result or score) by Canvas ID.
Returns the Observation resource with status, category, code, value, effective time, members and derived-from links.
Use canvasmedical_observation_search to list a patient's observations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `observation_id` (`string`, required): Canvas ID of the Observation to fetch, as returned by canvasmedical_observation_search, e.g. 12345.

Example input: `{"observation_id":"<observation_id>"}`

### `canvasmedical_observation_search`

Search Observations · Read-only

Search a patient's observations: vital signs, lab results and questionnaire scores.
Returns a FHIR Bundle of Observation resources with id, status, category, LOINC code, value, effective time and panel links.
Use it to review vitals or lab values. Use canvasmedical_diagnostic_report_search for whole lab reports. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category` (`string`, optional): Category code, or system|code, e.g. vital-signs or laboratory.
- `code` (`string`, optional): Observation code, or system|code, e.g. http://loinc.org|85353-1 for a vital signs panel.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `date` (`array`, optional): Filter by the observation effective time. A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `derived_from` (`string`, optional): Return observations that belong to this vital signs panel or questionnaire response, e.g. Observation/12345 or QuestionnaireResponse/12345.
- `id` (`string`, optional): Canvas ID of the Observation to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose Observation records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_organization_read`

Get Organization · Read-only

Get one organization by Canvas ID.
Returns the Organization resource with name, type, identifiers, address and contact details.
Use canvasmedical_organization_search to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`string`, required): Canvas ID of the Organization to fetch, as returned by canvasmedical_organization_search, e.g. 12345.

Example input: `{"organization_id":"<organization_id>"}`

### `canvasmedical_organization_search`

Search Organizations · Read-only

Search organizations such as the practice, payers and other providers by name, address or type.
Returns a FHIR Bundle of Organization resources with id, name, type, address and contact details.
Use it to look up a payer or practice organization. Use canvasmedical_organization_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `address` (`string`, optional): Text matched against any address field (line, city, state or postal code), e.g. Boston.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Organization to match. Use it to fetch specific records through search, e.g. 12345.
- `name` (`string`, optional): Part of the organization name, e.g. Health.
- `type` (`string`, optional): Organization type: prov (provider), pay (payer) or other. One of: `prov`, `pay`, `other`.

Example input: `{}`

### `canvasmedical_patient_read`

Get Patient · Read-only

Get one patient's demographics by Canvas ID.
Returns the Patient resource with name, birth date, gender, telecom, address, identifiers, contacts and Canvas extensions.
Use it before canvasmedical_patient_update, which needs the full current record. Use canvasmedical_patient_search to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `patient_id` (`string`, required): Canvas ID of the Patient to fetch, as returned by canvasmedical_patient_search, e.g. 12345.

Example input: `{"patient_id":"<patient_id>"}`

### `canvasmedical_patient_search`

Search Patients · Read-only

Search patients in the Canvas instance by name, birth date, contact details or identifier.
Returns a FHIR Bundle of Patient resources with id, name, birth date, gender, contact points and identifiers.
Use it to find a patient's Canvas ID. Use canvasmedical_patient_read when you already have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): true returns only active patients and false only inactive ones. Leave empty for both.
- `birthdate` (`string`, optional): Patient's date of birth as YYYY-MM-DD, e.g. 1980-01-01.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `email` (`string`, optional): Patient email address, e.g. patient@example.com.
- `family` (`string`, optional): Patient's last (family) name, e.g. Smith.
- `gender` (`string`, optional): Administrative gender: male, female, other or unknown. One of: `male`, `female`, `other`, `unknown`.
- `given` (`string`, optional): Patient's first (given) name, e.g. Alex.
- `id` (`string`, optional): Canvas ID of the Patient to match. Use it to fetch specific records through search, e.g. 12345.
- `identifier` (`string`, optional): Canvas MRN or an external identifier. Use value alone, or system|value, e.g. http://canvasmedical.com|012345 for a Canvas MRN.
- `name` (`string`, optional): Part of the patient's first or last name, e.g. Smith.
- `nickname` (`string`, optional): Patient's preferred or alternate name, e.g. Lex.
- `phone` (`string`, optional): Patient phone number as 10 digits, e.g. 5550100123.

Example input: `{}`

### `canvasmedical_practitioner_read`

Get Practitioner · Read-only

Get one Canvas staff member (practitioner) by Canvas ID.
Returns the Practitioner resource with name, NPI and other identifiers, contact details and qualifications.
Use canvasmedical_practitioner_search to find the ID by name, email or NPI.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `practitioner_id` (`string`, required): Canvas ID of the Practitioner to fetch, as returned by canvasmedical_practitioner_search, e.g. 12345.

Example input: `{"practitioner_id":"<practitioner_id>"}`

### `canvasmedical_practitioner_search`

Search Practitioners · Read-only

Search staff members (practitioners) in the Canvas instance by name, email or NPI.
Returns a FHIR Bundle of Practitioner resources with id, name, NPI, contact details and qualifications.
Use it to find practitioner IDs for appointments, tasks and messages. By default Canvas returns only active, schedulable practitioners. Use canvasmedical_practitioner_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): true (the default) returns active practitioners and false returns inactive ones.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `email` (`string`, optional): Practitioner's user email, e.g. clinician@example.com.
- `id` (`string`, optional): Canvas ID of the Practitioner to match. Use it to fetch specific records through search, e.g. 12345.
- `include_non_schedulable_practitioners` (`boolean`, optional): Set true to also return practitioners who cannot be scheduled. By default only schedulable practitioners are returned.
- `name` (`string`, optional): Any part of the practitioner's name, e.g. Lee. Partial matches work.
- `npi_number` (`string`, optional): Practitioner's 10-digit National Provider Identifier, e.g. 1234567890.

Example input: `{}`

### `canvasmedical_procedure_read`

Get Procedure · Read-only

Get one procedure by Canvas ID.
Returns the Procedure resource with status, code, subject, performed date and performer.
Use canvasmedical_procedure_search to list a patient's procedures.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `procedure_id` (`string`, required): Canvas ID of the Procedure to fetch, as returned by canvasmedical_procedure_search, e.g. 12345.

Example input: `{"procedure_id":"<procedure_id>"}`

### `canvasmedical_procedure_search`

Search Procedures · Read-only

Search a patient's procedures.
Returns a FHIR Bundle of Procedure resources with id, status, code, performed date and performer.
Use it to review procedure history. Use canvasmedical_procedure_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Procedure to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose Procedure records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_questionnaire_read`

Get Questionnaire · Read-only

Get one questionnaire (form or screener) by Canvas ID.
Returns the Questionnaire resource with name, status, code and question items with answer options.
Use canvasmedical_questionnaire_search to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `questionnaire_id` (`string`, required): Canvas ID of the Questionnaire to fetch, as returned by canvasmedical_questionnaire_search, e.g. 12345.

Example input: `{"questionnaire_id":"<questionnaire_id>"}`

### `canvasmedical_questionnaire_response_read`

Get Questionnaire Response · Read-only

Get one completed questionnaire (questionnaire response) by Canvas ID.
Returns the QuestionnaireResponse resource with questionnaire, status, subject, authored date, author and answers.
Use canvasmedical_questionnaire_response_search to list a patient's responses.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `questionnaire_response_id` (`string`, required): Canvas ID of the QuestionnaireResponse to fetch, as returned by canvasmedical_questionnaire_response_search, e.g. 12345.

Example input: `{"questionnaire_response_id":"<questionnaire_response_id>"}`

### `canvasmedical_questionnaire_response_search`

Search Questionnaire Responses · Read-only

Search a patient's completed questionnaires (questionnaire responses).
Returns a FHIR Bundle of QuestionnaireResponse resources with id, questionnaire, status, authored date, author and answers.
Use it to review screener answers. Use canvasmedical_questionnaire_search for the form definitions. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `authored` (`array`, optional): Filter by the date the answers were recorded. A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the QuestionnaireResponse to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose QuestionnaireResponse records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `questionnaire` (`string`, optional): Questionnaire the answers belong to, as its full URL, e.g. https://fumage-example.canvasmedical.com/Questionnaire/12345.

Example input: `{}`

### `canvasmedical_questionnaire_search`

Search Questionnaires · Read-only

Search the questionnaires (forms and screeners) configured in the Canvas instance.
Returns a FHIR Bundle of Questionnaire resources with id, name, status, code and question items with their answer options.
Use it to find a form and its questions. Use canvasmedical_questionnaire_response_search for a patient's answers. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `code` (`string`, optional): Return questionnaires that contain a question with this code, e.g. 44250-9.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the Questionnaire to match. Use it to fetch specific records through search, e.g. 12345.
- `name` (`string`, optional): Questionnaire name, e.g. PHQ-9.
- `questionnaire_code` (`string`, optional): The questionnaire's own code, e.g. 44249-1.
- `status` (`string`, optional): Questionnaire status, e.g. active.

Example input: `{}`

### `canvasmedical_related_person_read`

Get Related Person · Read-only

Get one related person (patient contact) by Canvas ID.
Returns the RelatedPerson resource with patient, relationship, name and contact details.
Use canvasmedical_related_person_search to list a patient's contacts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `related_person_id` (`string`, required): Canvas ID of the RelatedPerson to fetch, as returned by canvasmedical_related_person_search, e.g. 12345.

Example input: `{"related_person_id":"<related_person_id>"}`

### `canvasmedical_related_person_search`

Search Related Persons · Read-only

Search a patient's contacts and related persons, such as caregivers and emergency contacts.
Returns a FHIR Bundle of RelatedPerson resources with id, patient, relationship, name and contact details.
Use it to find a patient's caregivers or emergency contacts. Use canvasmedical_related_person_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the RelatedPerson to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose RelatedPerson records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_schedule_search`

Search Schedules · Read-only

List the bookable schedules in the Canvas instance; each is a practitioner and location combination.
Returns a FHIR Bundle of Schedule resources with the schedule id and the practitioner and location it covers.
Use it to get the schedule ID that canvasmedical_slot_search needs. This search takes no filters. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `canvasmedical_service_request_read`

Get Service Request · Read-only

Get one order (service request) by Canvas ID.
Returns the ServiceRequest resource with status, intent, category, code, subject, authored date, requester and performer.
Use canvasmedical_service_request_search to list a patient's orders.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `service_request_id` (`string`, required): Canvas ID of the ServiceRequest to fetch, as returned by canvasmedical_service_request_search, e.g. 12345.

Example input: `{"service_request_id":"<service_request_id>"}`

### `canvasmedical_service_request_search`

Search Service Requests · Read-only

Search a patient's orders (service requests) such as lab, imaging and referral orders.
Returns a FHIR Bundle of ServiceRequest resources with id, status, intent, category, code, authored date, requester and performer.
Use it to review a patient's orders and referrals. Use canvasmedical_service_request_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `authored` (`array`, optional): Filter by the order date (authoredOn). A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `category` (`string`, optional): Order category as SNOMED code or system|code, e.g. http://snomed.info/sct|108252007 (laboratory procedure).
- `code` (`string`, optional): Requested service code (usually LOINC), as code or system|code, e.g. http://loinc.org|24323-8.
- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `id` (`string`, optional): Canvas ID of the ServiceRequest to match. Use it to fetch specific records through search, e.g. 12345.
- `patient` (`string`, optional): Patient whose ServiceRequest records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.

Example input: `{}`

### `canvasmedical_slot_search`

Search Open Slots · Read-only

Find open appointment slots on one schedule between two dates.
Returns a FHIR Bundle of free Slot resources with start and end times.
Use it before canvasmedical_appointment_create to pick a free time. Use canvasmedical_appointment_search for existing bookings. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `schedule` (`string`, required): Schedule to search, from canvasmedical_schedule_search. Required by Canvas, e.g. Location.1-Staff.67890.
- `appointment_type` (`string`, optional): Only slots allowed for this appointment type, as system|code, e.g. http://snomed.info/sct|185418009.
- `duration` (`integer`, optional): Slot length in minutes. Defaults to 20, e.g. 30.
- `end` (`string`, optional): Last date to look for slots, YYYY-MM-DD. Defaults to 7 days after the start, e.g. 2024-06-10.
- `start` (`string`, optional): First date to look for slots, YYYY-MM-DD. Defaults to today (UTC), e.g. 2024-06-03.

Example input: `{"schedule":"<schedule>"}`

### `canvasmedical_task_read`

Get Task · Read-only

Get one task by Canvas ID.
Returns the Task resource with status, priority, description, patient, requester, owner, due date, labels and comments.
Use it before canvasmedical_task_update, which clears any description, owner, due date or labels you leave out.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`string`, required): Canvas ID of the Task to fetch, as returned by canvasmedical_task_search, e.g. 12345.

Example input: `{"task_id":"<task_id>"}`

### `canvasmedical_task_search`

Search Tasks · Read-only

Search tasks by patient, assignee, requester, status, priority, label or due date.
Returns a FHIR Bundle of Task resources with id, status, priority, description, patient, requester, owner, due date, labels and comments.
Use it to review a work queue or find a task to change. Use canvasmedical_task_read when you have the ID. If the result has a `next` link, use `canvasmedical_next_page` to get more.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `count` (`integer`, optional): Maximum number of results per page. Canvas defaults to 10 and caps it at 100, e.g. 50.
- `description` (`string`, optional): Match on the task description text, e.g. Call patient.
- `due` (`array`, optional): Filter by the task due date. A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `id` (`string`, optional): Canvas ID of the Task to match. Use it to fetch specific records through search, e.g. 12345.
- `label` (`string`, optional): Return tasks with this label, e.g. Billing.
- `modified` (`array`, optional): Filter by when the task was last modified. A list of one or two values, each a date with an optional FHIR prefix (ge, gt, le, lt, eq). Two values make a range, e.g. ["ge2024-04-11", "le2024-04-20"].
- `owner` (`string`, optional): Staff member the task is assigned to as a FHIR reference in the form Practitioner/<id>, e.g. Practitioner/67890.
- `patient` (`string`, optional): Patient whose Task records to return as a FHIR reference in the form Patient/<id>, e.g. Patient/12345.
- `priority` (`string`, optional): Task priority: stat, urgent or routine. One of: `stat`, `urgent`, `routine`.
- `requester` (`string`, optional): Staff member who requested the task as a FHIR reference in the form Practitioner/<id>, e.g. Practitioner/67890.
- `status` (`string`, optional): Task status: requested (open), completed or cancelled (closed). One of: `requested`, `completed`, `cancelled`.

Example input: `{}`

### `canvasmedical_allergy_intolerance_create`

Create Allergy or Intolerance · Write

Add an allergy or intolerance to a patient's chart as an Allergy command.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it to record a new allergy. Get the FDB allergen code from canvasmedical_allergen_search first, and check canvasmedical_allergy_intolerance_search for duplicates.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `allergen_code` (`string`, required): FDB allergen code from canvasmedical_allergen_search (the coding with system http://www.fdbhealth.com/), e.g. 1-12345. Canvas requires an FDB coding.
- `clinical_status` (`string`, required): Clinical status: active or inactive. One of: `active`, `inactive`.
- `patient_id` (`string`, required): Canvas ID of the patient who has the allergy, e.g. 12345.
- `type` (`string`, required): allergy or intolerance. One of: `allergy`, `intolerance`.
- `allergen_display` (`string`, optional): Allergen name for the FDB coding, e.g. penicillin.
- `encounter_id` (`string`, optional): Canvas ID of an existing encounter (note) to add this to, e.g. 12345. If omitted, Canvas creates a new Data Import note. Avoid concurrent writes that reference the same encounter.
- `last_occurrence` (`string`, optional): Date of the last known reaction, YYYY-MM-DD, e.g. 2023-09-10. Stored but not shown in the Canvas UI.
- `onset_date` (`string`, optional): When the allergy was identified, YYYY-MM-DD, e.g. 2020-03-01.
- `reaction_note` (`string`, optional): Free-text reaction description. Canvas shows it in the command's reaction field, e.g. Hives.
- `recorder_id` (`string`, optional): Canvas ID of the practitioner recording the allergy, e.g. 67890. They become the command's originator and committer.
- `severity` (`string`, optional): Reaction severity: mild, moderate or severe. One of: `mild`, `moderate`, `severe`.

Example input: `{"allergen_code":"<allergen_code>","clinical_status":"active","patient_id":"<patient_id>","type":"allergy"}`

### `canvasmedical_allergy_intolerance_mark_entered_in_error`

Mark Allergy or Intolerance Entered in Error · Write

Mark an existing allergy or intolerance as entered in error, flagging it as recorded by mistake.
Returns an empty body on success.
Use it to retract an allergy or intolerance recorded in error; Canvas ignores every other change on update. Run canvasmedical_allergy_intolerance_read first and pass the result unchanged.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `allergy_intolerance_id` (`string`, required): Canvas ID of the AllergyIntolerance to mark as entered in error, e.g. 12345.
- `resource` (`object`, required): The current AllergyIntolerance exactly as canvasmedical_allergy_intolerance_read returned it. Canvas requires every required field on an update, so pass the whole record unchanged; the tool sets the id and verificationStatus to entered-in-error for you.

Example input: `{"allergy_intolerance_id":"<allergy_intolerance_id>","resource":{}}`

### `canvasmedical_appointment_create`

Create Appointment · Write

Book an appointment for a practitioner at a practice location, usually with a patient.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it after canvasmedical_slot_search to book a free time. Use canvasmedical_appointment_update to reschedule or cancel. Canvas returns 422 if the instance blocks double booking and the time is taken.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `end` (`string`, required): End time in FHIR instant format, after start, e.g. 2024-06-03T14:00:00Z.
- `location_id` (`string`, required): Canvas ID of the practice location, from canvasmedical_location_search, e.g. 24680.
- `practitioner_id` (`string`, required): Canvas ID of the practitioner for the appointment, e.g. 67890. Every appointment needs one.
- `start` (`string`, required): Start time in FHIR instant format, e.g. 2024-06-03T13:30:00Z (YYYY-MM-DDTHH:MM is required).
- `status` (`string`, required): Appointment status: proposed (unconfirmed), pending (attempted), booked (confirmed), arrived, checked-in (roomed), fulfilled (exited), noshow or cancelled. One of: `proposed`, `pending`, `booked`, `arrived`, `checked-in`, `fulfilled`, `noshow`, `cancelled`.
- `appointment_type_code` (`string`, optional): Code of a schedulable appointment (note) type configured in Canvas, e.g. 448337001 (telemedicine). Omit to use the instance's default type.
- `appointment_type_system` (`string`, optional): Code system of appointment_type_code: http://snomed.info/sct (default) or INTERNAL. One of: `http://snomed.info/sct`, `INTERNAL`.
- `meeting_link` (`string`, optional): Video meeting URL for a telehealth appointment, e.g. https://video.example.com/room/123. Defaults to the practitioner's meeting room.
- `patient_id` (`string`, optional): Canvas ID of the patient, e.g. 12345. Leave empty only for appointment types without a patient.
- `reason_code` (`string`, optional): Code of a structured reason for visit configured in Canvas, e.g. INIV. Leave empty unless the instance uses structured reasons.
- `reason_text` (`string`, optional): Reason for visit text, e.g. Follow-up on blood pressure. With a structured reason code this becomes its comment.

Example input: `{"end":"<end>","location_id":"<location_id>","practitioner_id":"<practitioner_id>","start":"<start>","status":"proposed"}`

### `canvasmedical_appointment_update`

Update Appointment · Write

Update an appointment in place: reschedule it, change its status (for example cancel or check in), or change its type, reason or location.
Returns an empty body on success.
Use it to change an existing appointment; use canvasmedical_appointment_create for a new one. Send every required field, even unchanged ones; omitted optional fields keep their values. Run canvasmedical_appointment_read first to copy the current values.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `appointment_id` (`string`, required): Canvas ID of the appointment to update, e.g. 12345.
- `end` (`string`, required): End time in FHIR instant format, after start, e.g. 2024-06-03T14:00:00Z.
- `location_id` (`string`, required): Canvas ID of the practice location, from canvasmedical_location_search, e.g. 24680.
- `practitioner_id` (`string`, required): Canvas ID of the practitioner for the appointment, e.g. 67890. Every appointment needs one.
- `start` (`string`, required): Start time in FHIR instant format, e.g. 2024-06-03T13:30:00Z (YYYY-MM-DDTHH:MM is required).
- `status` (`string`, required): Appointment status: proposed (unconfirmed), pending (attempted), booked (confirmed), arrived, checked-in (roomed), fulfilled (exited), noshow or cancelled. One of: `proposed`, `pending`, `booked`, `arrived`, `checked-in`, `fulfilled`, `noshow`, `cancelled`.
- `appointment_type_code` (`string`, optional): Code of a schedulable appointment (note) type configured in Canvas, e.g. 448337001 (telemedicine). Omit to use the instance's default type.
- `appointment_type_system` (`string`, optional): Code system of appointment_type_code: http://snomed.info/sct (default) or INTERNAL. One of: `http://snomed.info/sct`, `INTERNAL`.
- `meeting_link` (`string`, optional): Video meeting URL for a telehealth appointment, e.g. https://video.example.com/room/123. Defaults to the practitioner's meeting room.
- `patient_id` (`string`, optional): Canvas ID of the patient, e.g. 12345. Leave empty only for appointment types without a patient. Canvas does not let an update change the patient; cancel and rebook instead.
- `reason_code` (`string`, optional): Code of a structured reason for visit configured in Canvas, e.g. INIV. Leave empty unless the instance uses structured reasons.
- `reason_text` (`string`, optional): Reason for visit text, e.g. Follow-up on blood pressure. With a structured reason code this becomes its comment.

Example input: `{"appointment_id":"<appointment_id>","end":"<end>","location_id":"<location_id>","practitioner_id":"<practitioner_id>","start":"<start>","status":"proposed"}`

### `canvasmedical_communication_create`

Send Message · Write

Send a message between a practitioner and a patient; it appears on the patient's timeline and in the patient app.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it to message a patient as a practitioner, or to log a patient's message to a practitioner. One side must be a Patient and the other a Practitioner. Use canvasmedical_communication_search to read the thread.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `message` (`string`, required): Message text, e.g. Your lab results are ready to review.
- `recipient` (`string`, required): Who receives the message, as Patient/<id> or Practitioner/<id>, e.g. Patient/12345. Must be the other type from the sender.
- `sender` (`string`, required): Who sends the message, as Practitioner/<id> or Patient/<id>, e.g. Practitioner/67890.
- `received` (`string`, optional): When the message was received, ISO 8601. If the recipient is a practitioner and this is empty, the message shows as unread, e.g. 2024-06-01T10:31:00Z.
- `sent` (`string`, optional): When the message was sent, ISO 8601, e.g. 2024-06-01T10:30:00Z. Defaults to now.

Example input: `{"message":"<message>","recipient":"<recipient>","sender":"<sender>"}`

### `canvasmedical_condition_create`

Create Condition · Write

Add a condition to a patient's chart: an active diagnosis or a resolved past medical history item.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it to record a new problem or diagnosis. Canvas does not block duplicates, so run canvasmedical_condition_search first.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `category` (`string`, required): Condition category: problem-list-item, encounter-diagnosis or health-concern. One of: `problem-list-item`, `encounter-diagnosis`, `health-concern`.
- `clinical_status` (`string`, required): active adds the condition as a Diagnose command; resolved adds it as Past Medical History. One of: `active`, `resolved`.
- `code` (`string`, required): Diagnosis code, usually ICD-10-CM, e.g. E11.9. Canvas saves the code as given without validating it.
- `patient_id` (`string`, required): Canvas ID of the patient who has the condition, e.g. 12345.
- `abatement_date` (`string`, optional): Date the condition resolved, YYYY-MM-DD, e.g. 2023-06-17. Use with a resolved status.
- `code_display` (`string`, optional): Human-readable name of the diagnosis, e.g. Type 2 diabetes mellitus without complications.
- `code_system` (`string`, optional): Code system of the diagnosis code. Canvas recommends ICD-10-CM: http://hl7.org/fhir/sid/icd-10-cm. Defaults to that system.
- `encounter_id` (`string`, optional): Canvas ID of an existing encounter (note) to add this to, e.g. 12345. If omitted, Canvas creates a new Data Import note. Avoid concurrent writes that reference the same encounter.
- `note` (`string`, optional): Free-text note about the condition. Canvas shows it only for resolved conditions, e.g. Resolved after treatment.
- `onset_date` (`string`, optional): Estimated or actual onset date, YYYY-MM-DD, e.g. 2023-06-15.
- `recorded_date` (`string`, optional): When the condition was first recorded, ISO 8601, e.g. 2023-06-18T15:00:00-04:00. Defaults to now.
- `recorder_id` (`string`, optional): Canvas ID of the practitioner recording the condition, e.g. 67890. Defaults to Canvas Bot.

Example input: `{"category":"problem-list-item","clinical_status":"active","code":"<code>","patient_id":"<patient_id>"}`

### `canvasmedical_condition_mark_entered_in_error`

Mark Condition Entered in Error · Write

Mark an existing condition as entered in error, flagging it as recorded by mistake.
Returns an empty body on success.
Use it to retract a condition recorded in error; Canvas ignores every other change on update. Run canvasmedical_condition_read first and pass the result unchanged.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `condition_id` (`string`, required): Canvas ID of the Condition to mark as entered in error, e.g. 12345.
- `resource` (`object`, required): The current Condition exactly as canvasmedical_condition_read returned it. Canvas requires every required field on an update, so pass the whole record unchanged; the tool sets the id and nothing else (Canvas treats any Condition update as entered-in-error) for you.
- `recorder_id` (`string`, optional): Canvas ID of the practitioner marking the condition as entered in error, e.g. 67890. Defaults to Canvas Bot.

Example input: `{"condition_id":"<condition_id>","resource":{}}`

### `canvasmedical_immunization_create`

Create Immunization · Write

Record a past immunization on a patient's chart as an Immunization Statement command.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it to document a vaccine given elsewhere or reported by the patient. Check canvasmedical_immunization_search for duplicates first.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `occurrence_date` (`string`, required): Date or datetime the vaccine was given, e.g. 2023-10-01.
- `patient_id` (`string`, required): Canvas ID of the patient who received the vaccine, e.g. 12345.
- `vaccine_code` (`string`, required): Vaccine code, CVX by default, e.g. 140 (influenza, seasonal, injectable).
- `encounter_id` (`string`, optional): Canvas ID of an existing encounter (note) to add this to, e.g. 12345. If omitted, Canvas creates a new Data Import note. Avoid concurrent writes that reference the same encounter.
- `note` (`string`, optional): Comment shown on the immunization statement, e.g. Given at local pharmacy.
- `vaccine_display` (`string`, optional): Vaccine name, e.g. Influenza, seasonal, injectable, preservative free.
- `vaccine_system` (`string`, optional): Code system of the vaccine code: http://hl7.org/fhir/sid/cvx (default) or http://www.ama-assn.org/go/cpt. One of: `http://hl7.org/fhir/sid/cvx`, `http://www.ama-assn.org/go/cpt`.

Example input: `{"occurrence_date":"<occurrence_date>","patient_id":"<patient_id>","vaccine_code":"<vaccine_code>"}`

### `canvasmedical_immunization_mark_entered_in_error`

Mark Immunization Entered in Error · Write

Mark an existing immunization as entered in error, flagging it as recorded by mistake.
Returns an empty body on success.
Use it to retract an immunization recorded in error; Canvas ignores every other change on update. Run canvasmedical_immunization_read first and pass the result unchanged.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `immunization_id` (`string`, required): Canvas ID of the Immunization to mark as entered in error, e.g. 12345.
- `resource` (`object`, required): The current Immunization exactly as canvasmedical_immunization_read returned it. Canvas requires every required field on an update, so pass the whole record unchanged; the tool sets the id and status to entered-in-error for you.

Example input: `{"immunization_id":"<immunization_id>","resource":{}}`

### `canvasmedical_medication_statement_create`

Create Medication Statement · Write

Add a medication to a patient's medication list.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it to record a medication the patient takes. Find the medication ID with canvasmedical_medication_search first. It does not prescribe.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `medication_display` (`string`, required): Display name of the medication, as returned by the medication search, e.g. metformin 500 mg tablet.
- `medication_id` (`string`, required): Medication ID from canvasmedical_medication_search, without the Medication/ prefix, e.g. fdb-449732.
- `patient_id` (`string`, required): Canvas ID of the patient who takes the medication, e.g. 12345.
- `status` (`string`, required): Medication status: active or stopped. One of: `active`, `stopped`.
- `encounter_id` (`string`, optional): Canvas ID of an existing encounter (note) to add this to, e.g. 12345. If omitted, Canvas creates a new Data Import note. Avoid concurrent writes that reference the same encounter.
- `end` (`string`, optional): When the patient stopped or will stop the medication, ISO 8601, e.g. 2024-09-19T00:00:00+00:00.
- `sig` (`string`, optional): Dosage instructions (SIG), e.g. Take 1 tablet by mouth twice daily.
- `start` (`string`, optional): When the patient started the medication, ISO 8601, e.g. 2024-03-19T14:54:12+00:00. Defaults to now.

Example input: `{"medication_display":"<medication_display>","medication_id":"<medication_id>","patient_id":"<patient_id>","status":"active"}`

### `canvasmedical_medication_statement_mark_entered_in_error`

Mark Medication Statement Entered in Error · Write

Mark an existing medication statement as entered in error, flagging it as recorded by mistake.
Returns an empty body on success.
Use it to retract a medication statement recorded in error; Canvas ignores every other change on update. Run canvasmedical_medication_statement_read first and pass the result unchanged.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `medication_statement_id` (`string`, required): Canvas ID of the MedicationStatement to mark as entered in error, e.g. 12345.
- `resource` (`object`, required): The current MedicationStatement exactly as canvasmedical_medication_statement_read returned it. Canvas requires every required field on an update, so pass the whole record unchanged; the tool sets the id and status to entered-in-error for you.

Example input: `{"medication_statement_id":"<medication_statement_id>","resource":{}}`

### `canvasmedical_observation_create`

Record Vital Sign · Write

Record one vital sign for a patient; Canvas files it in a Vitals command.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it for blood pressure, weight, height, pulse, temperature, oxygen saturation, respiration rate, waist circumference, pulse rhythm or a vitals note. Canvas accepts only vital signs here, not lab results. Without panel_id Canvas creates a new vitals panel; find an existing panel with canvasmedical_observation_search (code 85353-1).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `patient_id` (`string`, required): Canvas ID of the patient the vital sign is for, e.g. 12345.
- `vital_code` (`string`, required): LOINC code of the vital sign: 85354-9 blood pressure, 29463-7 weight, 8302-2 height, 8867-4 pulse rate, 8310-5 body temperature, 59408-5 oxygen saturation, 2708-6 arterial oxygen saturation, 9279-1 respiration rate, 56086-2 waist circumference, 8884-9 pulse rhythm, 80339-5 vitals note. One of: `85354-9`, `29463-7`, `8302-2`, `8867-4`, `8310-5`, `2708-6`, `59408-5`, `9279-1`, `56086-2`, `80339-5`, `8884-9`.
- `diastolic` (`number`, optional): Diastolic blood pressure in mmHg, for blood pressure (85354-9) only, e.g. 80.
- `effective_date_time` (`string`, optional): When the vital sign was taken, ISO 8601, e.g. 2024-06-01T10:30:00Z. Defaults to now.
- `panel_id` (`string`, optional): Canvas ID of an existing vital signs panel observation to add this reading to, e.g. 12345. Each panel holds one reading per vital type.
- `performer_id` (`string`, optional): Canvas ID of the practitioner who took the measurement, e.g. 67890.
- `systolic` (`number`, optional): Systolic blood pressure in mmHg, for blood pressure (85354-9) only, e.g. 120.
- `unit` (`string`, optional): Unit for value. Defaults: weight oz (also lb, kg), height in (also cm), pulse and respiration bpm, temperature °F, oxygen %, waist cm (also in). Other units return 422, e.g. lb.
- `value` (`number`, optional): Numeric value for weight, height, pulse rate, temperature, oxygen saturation, respiration rate or waist circumference, e.g. 160.
- `value_string` (`string`, optional): Text value for pulse rhythm (Regular, Irregularly Irregular, Regulary Irregular) or a vitals note. For blood pressure use systolic and diastolic instead.

Example input: `{"patient_id":"<patient_id>","vital_code":"85354-9"}`

### `canvasmedical_patient_create`

Create Patient · Write

Register a new patient in the Canvas instance with name, birth date, sex at birth, gender and optional contact details.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it to add a patient who isn't in Canvas yet. Run canvasmedical_patient_search first to avoid duplicates. Canvas issues the MRN.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `birth_date` (`string`, required): Date of birth, YYYY-MM-DD, e.g. 1980-01-01.
- `birth_sex` (`string`, required): Sex assigned at birth, required by Canvas: M, F, OTH or UNK. One of: `M`, `F`, `OTH`, `UNK`.
- `family_name` (`string`, required): Patient's last name, e.g. Sample.
- `gender` (`string`, required): Administrative gender: male, female, other or unknown (shown as choose not to disclose). One of: `male`, `female`, `other`, `unknown`.
- `given_name` (`string`, required): Patient's first name, e.g. Alex.
- `address_line1` (`string`, optional): Street address line 1, e.g. 100 Example St.
- `address_line2` (`string`, optional): Street address line 2, e.g. Apt 4.
- `city` (`string`, optional): City, e.g. Springfield.
- `email` (`string`, optional): Email address, e.g. patient@example.com.
- `external_id_system` (`string`, optional): Namespace of an external identifier to store, e.g. MyApp. Use with external_id_value.
- `external_id_value` (`string`, optional): External identifier value to store on the patient, e.g. abc123. Use with external_id_system.
- `middle_name` (`string`, optional): Patient's middle name, e.g. Jordan.
- `phone` (`string`, optional): Phone number, e.g. 5550100123.
- `phone_use` (`string`, optional): Phone type: home, work, mobile, temp or old. Defaults to home. One of: `home`, `work`, `mobile`, `temp`, `old`.
- `postal_code` (`string`, optional): Five-digit postal code, e.g. 01234.
- `preferred_name` (`string`, optional): Preferred name (nickname) shown in Canvas, e.g. Lex.
- `state` (`string`, optional): Two-letter state code, e.g. MA.

Example input: `{"birth_date":"<birth_date>","birth_sex":"M","family_name":"<family_name>","gender":"male","given_name":"<given_name>"}`

### `canvasmedical_patient_update`

Update Patient · Write

Replace a patient's demographic record with an edited copy of it.
Returns an empty body on success.
Use it to change a patient's name, contact details, address or other demographics. Run canvasmedical_patient_read first, edit that record, and send all of it back: Canvas deletes any telecom, address, contact, preferred pharmacy, default provider or default location entry you leave out.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `patient` (`object`, required): The full Patient resource from canvasmedical_patient_read with your changes applied. Keep each existing telecom, address and contact entry's id to update it in place; an entry without an id is added, and an existing entry you leave out is deleted. The us-core-birthsex extension, official name, gender and birthDate are required. The tool sets resourceType and id for you.
- `patient_id` (`string`, required): Canvas ID of the patient to update, e.g. 12345.

Example input: `{"patient":{},"patient_id":"<patient_id>"}`

### `canvasmedical_task_create`

Create Task · Write

Create a staff task, optionally about a patient and assigned to a practitioner or team.
Returns an empty body on success; Canvas puts the new resource's ID only in the Location response header.
Use it to add work to the task panel. Use canvasmedical_task_update to close or reassign an existing task.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `description` (`string`, required): What needs to be done, e.g. Call patient about lab results.
- `requester_id` (`string`, required): Canvas ID of the practitioner asking for the task, e.g. 67890.
- `status` (`string`, required): Task status: requested (open), completed, or cancelled (closed). One of: `requested`, `completed`, `cancelled`.
- `authored_on` (`string`, optional): When the task was created, ISO 8601, e.g. 2024-06-01T09:00:00Z. Defaults to now.
- `comment` (`string`, optional): A comment to add to the task, authored by the requester, e.g. Patient prefers morning calls.
- `due_date` (`string`, optional): Due date and time, ISO 8601, e.g. 2024-06-10T17:00:00Z.
- `labels` (`array`, optional): Label names to put on the task, e.g. ["Billing", "Follow-up"]. Canvas creates labels that don't exist yet.
- `owner_id` (`string`, optional): Canvas ID of the practitioner assigned to the task, e.g. 67890.
- `patient_id` (`string`, optional): Canvas ID of the patient the task is about, e.g. 12345. The task then shows on the patient's chart.
- `priority` (`string`, optional): Task priority: stat, urgent or routine. One of: `stat`, `urgent`, `routine`.
- `team_id` (`string`, optional): Canvas ID of the team (FHIR Group) to assign the task to, e.g. 13579.

Example input: `{"description":"<description>","requester_id":"<requester_id>","status":"requested"}`

### `canvasmedical_task_update`

Update Task · Write

Update a task: change its status (complete or cancel), assignee, priority, due date, labels or description.
Returns an empty body on success.
Use it to change an existing task; use canvasmedical_task_create for a new one. Canvas clears any description, assignee, due date or labels you leave out, so run canvasmedical_task_read first and resend the values you keep. A comment you pass is added to the task.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `description` (`string`, required): What needs to be done, e.g. Call patient about lab results.
- `requester_id` (`string`, required): Canvas ID of the practitioner asking for the task, e.g. 67890.
- `status` (`string`, required): Task status: requested (open), completed, or cancelled (closed). One of: `requested`, `completed`, `cancelled`.
- `task_id` (`string`, required): Canvas ID of the task to update, e.g. 12345.
- `authored_on` (`string`, optional): When the task was created, ISO 8601, e.g. 2024-06-01T09:00:00Z. Defaults to now.
- `comment` (`string`, optional): A comment to add to the task, authored by the requester, e.g. Patient prefers morning calls.
- `due_date` (`string`, optional): Due date and time, ISO 8601, e.g. 2024-06-10T17:00:00Z. Omitting it on update clears it.
- `labels` (`array`, optional): Label names to put on the task, e.g. ["Billing", "Follow-up"]. Canvas creates labels that don't exist yet. Omitting it on update clears it.
- `owner_id` (`string`, optional): Canvas ID of the practitioner assigned to the task, e.g. 67890. Omitting it on update clears it.
- `patient_id` (`string`, optional): Canvas ID of the patient the task is about, e.g. 12345. The task then shows on the patient's chart.
- `priority` (`string`, optional): Task priority: stat, urgent or routine. One of: `stat`, `urgent`, `routine`.
- `team_id` (`string`, optional): Canvas ID of the team (FHIR Group) to assign the task to, e.g. 13579.

Example input: `{"description":"<description>","requester_id":"<requester_id>","status":"requested","task_id":"<task_id>"}`

## Related

Other Healthcare & life sciences connectors ([all 16](/agentkit/connectors/?category=healthcare)):

- [Synapse MCP server](/agentkit/connectors/synapsemcp/): Vendor MCP, OAuth, 48 tools
- [Availity](/agentkit/connectors/availity/): Scalekit connector, Service account, 11 tools
- [Healthie](/agentkit/connectors/healthie/): Scalekit connector, API key, 44 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
