> **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 Healthie

The Healthie connector lets your AI agent act in each user's Healthie account. Each user connects their own Healthie API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 44 tools.

**Authentication:** API Key
**Categories:** Healthcare
**Tools:** 44: 29 read, 13 write, 2 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=HEALTHIE)

## 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 Healthie connection

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

   **Console steps with screenshots:**

   Healthie connections use a Healthie API key. Each key belongs to one Healthie provider or staff user, and every tool call acts as that user, with that user's permissions. Each connected account stores the key and the Healthie environment it was issued for.

   1. ### Create a Healthie API key

      Sign in to Healthie as the user the agent should act as, and go to **Settings** > **Developer** > **API Key** to create a key. API access is an add-on for Healthie's Group and Enterprise plans.

      Keys are tied to one environment: a production key works only against Production, and a sandbox key only against Sandbox.

   2. ### Create the connection

      In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**, find **Healthie** and click **Create**. The connection name is the `connection_name` your code passes.

   3. ### Add a connected account

      To test, open the connection, click the **Connected Accounts** tab > **Add Account**, and fill in:

      - The user's identifier: your app's ID for the user, such as `user_123`.
      - **Environment**: **Production** (`api.gethealthie.com`) or **Sandbox (staging)** (`staging-api.gethealthie.com`), matching the key.
      - **API Key**: the key only, without the word `Basic`.

      In production, each user opens the authorization link and enters the same fields there.

   > note: Sharded Healthie accounts
   >
   > The connector sends Healthie's standard authorization headers. Use a key from an account that doesn't need Healthie's extra `AuthorizationShard` header; sharded accounts can't connect.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'healthie'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Healthie:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'healthie_get_current_user',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "healthie"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Healthie:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="healthie_get_current_user",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Healthie credentials there. If your app already has a user's credentials, add the account from your backend instead, as the console steps above show. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## 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: 'healthie_get_appointment',
  toolInput: {
    appointment_id: '9900',
  },
  connector: 'healthie',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="healthie_get_appointment",
    tool_input={
        "appointment_id": "9900",
    },
    connection_name="healthie",
    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.

### `healthie_get_appointment`

Get Appointment · Read-only

Get one Healthie appointment by ID.
Returns its date, start and end, length, contact type, status, confirmation flags, location, notes, video links, appointment type, provider, client and attendees, recurrence, cancellation reason, and the attached chart note and intake form IDs.
Use this when you already have the appointment ID; use healthie_list_appointments to find it. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `appointment_id` (`string`, required): Healthie ID of the appointment. Example: "9900".
- `include_deleted` (`boolean`, optional): Set true to return the appointment even if it was deleted.

Example input: `{"appointment_id":"9900"}`

### `healthie_get_appointment_type`

Get Appointment Type · Read-only

Get one Healthie appointment type by ID.
Returns its id, name, length, available contact types, booking and waitlist flags, pricing, client-facing name and description, and its no-availability message.
Use this to check an appointment type's length and allowed contact types before booking; use healthie_list_appointment_types to find the ID. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `appointment_type_id` (`string`, required): Healthie ID of the appointment type. Example: "1128". Find it with healthie_list_appointment_types.

Example input: `{"appointment_type_id":"1128"}`

### `healthie_get_billing_item`

Get Billing Item · Read-only

Get one Healthie billing item (payment or charge) by ID.
Returns its amount, currency, state, payment method and card details, description, failure reason, refund details, payer, recipient, provider, packages and timestamps.
Use this when you have a billing item ID from healthie_list_billing_items. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `billing_item_id` (`string`, required): Healthie ID of the billing item. Example: "8888".

Example input: `{"billing_item_id":"8888"}`

### `healthie_get_client`

Get Client · Read-only

Get one Healthie client (patient) by ID.
Returns the client's demographics, contact details, address, primary provider and care team, group, tags, quick notes, metadata, default billing type and insurance policies; user is null when no client has that ID or the key cannot see it.
Use this when you already have the client ID; use healthie_search_clients to find it, and healthie_list_client_policies for full policy details. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `client_id` (`string`, required): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients.

Example input: `{"client_id":"12345"}`

### `healthie_get_conversation`

Get Conversation · Read-only

Get one Healthie chat conversation by ID, without its messages.
Returns the conversation's id, name, category, client, owner, members, member count, last message preview, closed date and timestamps.
Use this to see who is in a conversation; use healthie_list_messages to read its messages. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `conversation_id` (`string`, required): Healthie ID of the conversation. Example: "5555". Find it with healthie_list_conversations.

Example input: `{"conversation_id":"5555"}`

### `healthie_get_current_user`

Get Current User · Read-only

Get the Healthie user the API key belongs to.
Returns the user's id, names, email, time zone, NPI, qualifications, whether they are an active provider, and their organization.
Use this to find your own provider ID or check which account the connection uses; use healthie_list_providers for other team members. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs: none.

Example input: `{}`

### `healthie_get_filled_form`

Get Filled Form · Read-only

Get one filled-out form or chart note (form answer group) with its answers.
Returns the form's id, name, finished and locked flags, chart note status, template, client, filler, linked appointment and each answer's custom_module_id, label, answer and displayed answer.
Use this to read a chart note or intake form; use healthie_list_chart_notes or healthie_list_filled_forms to find the ID. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `filled_form_id` (`string`, required): Healthie ID of the filled form (form answer group). Example: "1234".

Example input: `{"filled_form_id":"1234"}`

### `healthie_get_form_template`

Get Form Template · Read-only

Get one Healthie form template with its questions.
Returns the template's id, name and charting flag, and each question's id (custom_module_id), label, sublabel, question type (mod_type), options, required flag and position.
Use this before healthie_create_filled_form to learn which custom_module_id answers each question; use healthie_list_form_templates to find the template. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `form_template_id` (`string`, required): Healthie ID of the form template (custom_module_form_id). Example: "100".

Example input: `{"form_template_id":"100"}`

### `healthie_get_next_available_slot`

Get Next Available Slot · Read-only

Get the soonest open slot for a provider and appointment type.
Returns the date-time of the next available slot as a string, or null when none is open in the window.
Use this for "when is the next opening" questions; use healthie_list_available_slots to see every slot in a range. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `appointment_type_id` (`string`, required): Appointment type to check availability for. Example: "1128". Find it with healthie_list_appointment_types.
- `provider_id` (`string`, required): Healthie user ID of the provider. Example: "67890".
- `appointment_location_id` (`string`, optional): For in-person visits, the appointment location ID to check. Example: "55".
- `contact_type` (`string`, optional): How the appointment is held, as one of the organization's contact types, for example "Healthie Video Call", "In Person" or "Phone Call". Get the exact values with healthie_list_contact_types or the appointment type's available_contact_types.
- `end_date_boundary` (`string`, optional): Don't return a slot after this date (YYYY-MM-DD). Example: "2026-12-31".
- `licensed_in_state` (`string`, optional): Only include providers licensed in this US state (two-letter code). Example: "NY".
- `org_level` (`boolean`, optional): Set true to check availability across providers in the organization instead of only provider_id.
- `provider_ids` (`array`, optional): With org_level true, limit the search to these provider IDs. Example: ["67890","67891"].
- `start_date_boundary` (`string`, optional): Don't return a slot before this date (YYYY-MM-DD). Example: "2026-11-05".
- `timezone` (`string`, optional): IANA time zone name used to interpret and return dates. Defaults to the provider's time zone. Example: "America/New_York".

Example input: `{"appointment_type_id":"1128","provider_id":"67890"}`

### `healthie_get_policy`

Get Policy · Read-only

Get one insurance policy by ID.
Returns the policy's member and group numbers, priority, billing method, copay and coinsurance, holder details, effective dates, notes, referral and authorization flags, insurance plan, and the latest eligibility check status.
Use this when you have a policy ID from healthie_list_client_policies. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `policy_id` (`string`, required): Healthie ID of the policy. Example: "3333".

Example input: `{"policy_id":"3333"}`

### `healthie_get_provider`

Get Provider · Read-only

Get one Healthie provider (clinician or staff user) by ID.
Returns the provider's id, names, email, phone, time zone, NPI, qualifications, profession, specialties, state licenses and organization; provider is null when the ID is not visible to the key.
Use this when you already have a provider ID; use healthie_list_providers to find it. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `provider_id` (`string`, required): Healthie ID of the provider (clinician or staff user). Example: "67890". Find it with healthie_list_providers or healthie_get_current_user.

Example input: `{"provider_id":"67890"}`

### `healthie_get_task`

Get Task · Read-only

Get one Healthie task by ID.
Returns the task's content, complete flag and completion time, due date, priority, seen and hidden flags, client, creator, assignees, reminder and timestamps.
Use this when you have the task ID; use healthie_list_tasks to find it. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `task_id` (`string`, required): Healthie ID of the task. Example: "777".

Example input: `{"task_id":"777"}`

### `healthie_list_appointment_locations`

List Appointment Locations · Read-only

List the in-person appointment locations set up in Healthie, optionally for one provider or appointment type.
Returns a page of locations with id, address text, whether clients can book there, and rooms, plus page_info and total_count.
Use this to get an appointment_location_id, which Healthie requires when booking an in-person appointment. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `appointment_type_id` (`string`, optional): Only return locations offered for this appointment type ID. Example: "1128".
- `keywords` (`string`, optional): Text to search locations by. Example: "Main St".
- `org_level` (`boolean`, optional): Set true to return locations across the whole organization rather than one provider.
- `page_size` (`integer`, optional): Number of locations to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `provider_id` (`string`, optional): Healthie ID of the provider (clinician or staff user). Example: "67890". Find it with healthie_list_providers or healthie_get_current_user. Only locations this provider uses are returned.

Example input: `{}`

### `healthie_list_appointment_types`

List Appointment Types · Read-only

List the appointment types defined in Healthie, optionally for one provider or filtered by name or client bookability.
Returns a page of appointment types with id, name, length in minutes, available contact types, whether clients can book, group and waitlist flags and pricing, plus page_info and total_count.
Use this to get an appointment_type_id for booking or availability; use healthie_get_appointment_type for one type. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `clients_can_book` (`boolean`, optional): Set true to return only types clients can self-book.
- `keywords` (`string`, optional): Text to search appointment types by name. Example: "Initial".
- `org_level` (`boolean`, optional): Set true to include every appointment type in the organization.
- `page_size` (`integer`, optional): Number of appointment types to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `provider_id` (`string`, optional): Only return appointment types this provider offers (Healthie user ID). Example: "67890".
- `show_group` (`boolean`, optional): Set true to return group appointment types and false for 1:1 types only.

Example input: `{}`

### `healthie_list_appointments`

List Appointments · Read-only

List appointments for the connected provider, a client, another provider or the whole organization, filtered by time window, date range, status or appointment type.
Returns a page of appointments with id, date, start and end, length, contact type, status (pm_status), confirmation flags, location, notes, appointment type, provider, client and attendees, plus page_info and total_count.
Use this to see a schedule or a client's visits; use healthie_get_appointment for one appointment's forms and recurrence details. By default only future appointments are returned. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `appointment_type_id` (`string`, optional): Only appointments of this appointment type ID. Example: "1128".
- `client_id` (`string`, optional): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients. Only this client's appointments are returned.
- `end_date` (`string`, optional): Only appointments on or before this date, as YYYY-MM-DD or ISO 8601 date-time. Send it together with start_date. Example: "2026-11-30".
- `filter` (`string`, optional): Which appointments to return by time: "future" (default), "upcoming", "past", "ended", "didnt-occur" or "all". One of: `future`, `upcoming`, `past`, `ended`, `didnt-occur`, `all`.
- `is_active` (`boolean`, optional): Set true to exclude cancelled, no-show and rescheduled appointments.
- `is_org` (`boolean`, optional): Set true to return appointments for every provider in the organization (needs organization access).
- `order_by` (`string`, optional): Sort order, e.g. DATE_ASC or DATE_DESC. One of: `DATE_ASC`, `DATE_DESC`, `CREATED_AT_DESC`, `CREATED_AT_ASC`, `UPDATED_AT_DESC`, `UPDATED_AT_ASC`, `UNSORTED`.
- `page_size` (`integer`, optional): Number of appointments to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `provider_id` (`string`, optional): Healthie ID of the provider (clinician or staff user). Example: "67890". Find it with healthie_list_providers or healthie_get_current_user. Only this provider's appointments are returned.
- `start_date` (`string`, optional): Only appointments on or after this date, as YYYY-MM-DD or ISO 8601 date-time. Send it together with end_date. Example: "2026-11-01".
- `status` (`string`, optional): Only appointments with this status (pm_status), e.g. "Occurred", "No-Show", "Re-Scheduled" or "Cancelled".
- `with_all_statuses` (`boolean`, optional): Set true to return appointments of every status; this overrides is_active and the didnt-occur filter.

Example input: `{}`

### `healthie_list_available_days`

List Available Days · Read-only

List the days in a month on which a provider has open time for an appointment type.
Returns an array of dates (YYYY-MM-DD) that have at least one bookable slot.
Use this first to find days with availability, then call healthie_list_available_slots for the times on a chosen day; healthie_get_next_available_slot gives just the soonest time. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `appointment_type_id` (`string`, required): Appointment type to check availability for. Example: "1128". Find it with healthie_list_appointment_types.
- `date_from_month` (`string`, required): Any date (YYYY-MM-DD) in the month to check. Example: "2026-11-01".
- `provider_id` (`string`, required): Healthie user ID of the provider whose availability to check. Example: "67890".
- `appointment_location_id` (`string`, optional): For in-person visits, the appointment location ID to check. Example: "55".
- `appointment_to_reschedule_id` (`string`, optional): When rescheduling, the ID of the appointment being moved, so its own slot is treated as free. Example: "9900".
- `contact_type` (`string`, optional): How the appointment is held, as one of the organization's contact types, for example "Healthie Video Call", "In Person" or "Phone Call". Get the exact values with healthie_list_contact_types or the appointment type's available_contact_types.
- `end_date_boundary` (`string`, optional): Don't return days after this date (YYYY-MM-DD). Example: "2026-11-20".
- `licensed_in_state` (`string`, optional): Only include providers licensed in this US state (two-letter code). Example: "NY".
- `org_level` (`boolean`, optional): Set true to check availability across providers in the organization instead of only provider_id.
- `provider_ids` (`array`, optional): With org_level true, limit the search to these provider IDs. Example: ["67890","67891"].
- `start_date_boundary` (`string`, optional): Don't return days before this date (YYYY-MM-DD). Example: "2026-11-05".
- `timezone` (`string`, optional): IANA time zone name used to interpret and return dates. Defaults to the provider's time zone. Example: "America/New_York".

Example input: `{"appointment_type_id":"1128","date_from_month":"2026-11-01","provider_id":"67890"}`

### `healthie_list_available_slots`

List Available Slots · Read-only

List the bookable appointment slots for a provider and appointment type between two dates.
Returns each slot's start date-time, length, provider user_id, appointment type, and fully-booked and waitlist flags for group slots.
Use this to offer specific times before booking with healthie_book_appointment (pass the slot's date as datetime and user_id as provider_id). Keep the range to about a day; use healthie_list_available_days to find days first. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `appointment_type_id` (`string`, required): Appointment type to check availability for. Example: "1128". Find it with healthie_list_appointment_types.
- `end_date` (`string`, required): End of the range, as YYYY-MM-DD or a full ISO 8601 date-time. Use the same day as start_date for one day. Example: "2026-11-03".
- `provider_id` (`string`, required): Healthie user ID of the provider whose slots to list. Example: "67890".
- `start_date` (`string`, required): Start of the range, as YYYY-MM-DD or a full ISO 8601 date-time. Example: "2026-11-03".
- `appointment_location_id` (`string`, optional): For in-person visits, the appointment location ID to check. Example: "55".
- `appointment_to_reschedule_id` (`string`, optional): When rescheduling, the ID of the appointment being moved, so its own slot is treated as free. Example: "9900".
- `contact_type` (`string`, optional): How the appointment is held, as one of the organization's contact types, for example "Healthie Video Call", "In Person" or "Phone Call". Get the exact values with healthie_list_contact_types or the appointment type's available_contact_types.
- `licensed_in_state` (`string`, optional): Only include providers licensed in this US state (two-letter code). Example: "NY".
- `org_level` (`boolean`, optional): Set true to check availability across providers in the organization instead of only provider_id.
- `provider_ids` (`array`, optional): With org_level true, limit the search to these provider IDs. Example: ["67890","67891"].
- `timezone` (`string`, optional): IANA time zone name used to interpret and return dates. Defaults to the provider's time zone. Example: "America/New_York".

Example input: `{"appointment_type_id":"1128","end_date":"2026-11-03","provider_id":"67890","start_date":"2026-11-03"}`

### `healthie_list_billing_items`

List Billing Items · Read-only

List billing items (client payments and charges) in Healthie, filtered by client, provider, status, date range or text.
Returns a page of billing items with id, amount paid, currency, state, payment method, recurring and cancelled flags, description, refund details, payer, recipient, provider, packages and timestamps, plus page_info and total_count.
Use this to review a client's payments; use healthie_get_billing_item for one item. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `client_id` (`string`, optional): Only billing items for this client. Example: "12345".
- `created_after` (`string`, optional): Only items created on or after this ISO 8601 date-time. Example: "2026-10-01T00:00:00Z".
- `created_before` (`string`, optional): Only items created on or before this ISO 8601 date-time. Example: "2026-10-31T23:59:59Z".
- `keywords` (`string`, optional): Text to search billing items by amount paid or payment method. Example: "50.00".
- `order_by` (`string`, optional): Sort order. Defaults to CREATED_AT_DESC. One of: `CREATED_AT_DESC`, `CREATED_AT_ASC`, `UPDATED_AT_DESC`, `UPDATED_AT_ASC`, `AMOUNT_PAID_DESC`, `AMOUNT_PAID_ASC`, `STATE_ASC`, `STATE_DESC`.
- `page_size` (`integer`, optional): Number of billing items to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `provider_id` (`string`, optional): Healthie ID of the provider (clinician or staff user). Example: "67890". Find it with healthie_list_providers or healthie_get_current_user. Only this provider's billing items are returned.
- `status` (`array`, optional): Only items in these states: succeeded, failed or scheduled. Example: ["succeeded"].

Example input: `{}`

### `healthie_list_chart_notes`

List Chart Notes · Read-only

List charting notes (filled charting forms) for a client or providers, filtered by date range, status or template.
Returns a page of chart notes with id, name, finished and locked flags, chart note status, template, client, filler, linked appointment and dates, plus page_info and total_count.
Use this to review a client's charting history; use healthie_get_filled_form for a note's answers and healthie_list_filled_forms for intake and other non-charting forms. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `chart_note_status` (`string`, optional): Only notes with this status. One of: `CREATED`, `SIGNED`, `CO_SIGNED`, `LOCKED`, `CO_SIGNED_AND_LOCKED`, `SIGNED_AND_LOCKED`.
- `client_id` (`string`, optional): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients. Only this client's chart notes are returned.
- `end_date` (`string`, optional): Only notes on or before this date (YYYY-MM-DD). Example: "2026-10-31".
- `form_template_ids` (`array`, optional): Only notes based on these form template IDs. Example: ["100"].
- `page_size` (`integer`, optional): Number of chart notes to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `provider_ids` (`array`, optional): Only notes written by these provider IDs. Example: ["67890"].
- `start_date` (`string`, optional): Only notes on or after this date (YYYY-MM-DD). Example: "2026-10-01".

Example input: `{}`

### `healthie_list_client_policies`

List Client Policies · Read-only

List a client's insurance policies.
Returns the client's id and name, and each policy's id, name, member number, group number, priority (primary or secondary), billing method, copay and coinsurance, holder details, effective dates and insurance plan (payer name and payer ID).
Use this to check a client's coverage; use healthie_get_policy for authorization and eligibility details, and healthie_add_client_policy to add one. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `client_id` (`string`, required): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients.

Example input: `{"client_id":"12345"}`

### `healthie_list_contact_types`

List Contact Types · Read-only

List the contact types (how appointments are held) enabled for the connected user's organization.
Returns an array of contact type names such as "Healthie Video Call", "In Person" and "Phone Call".
Use this to get a valid contact_type value for booking, availability and slot searches. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs: none.

Example input: `{}`

### `healthie_list_conversations`

List Conversations · Read-only

List the chat conversations of the connected provider, or of a client or another provider, with read status, active status and category filters.
Returns a page of conversation memberships with membership id, viewed (read) flag, display name, and the conversation's id, name, category, last message and owner, plus page_info and total_count.
Use this to find conversation IDs or unread chats; use healthie_list_messages to read the messages in one conversation. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `active_status` (`string`, optional): Filter by conversation status: active (default), archived or closed. One of: `active`, `archived`, `closed`.
- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `category` (`string`, optional): Filter by category: ALL, INDIVIDUAL (one client), COMMUNITY (several clients) or INTERNAL_TEAM (staff only). One of: `ALL`, `INDIVIDUAL`, `COMMUNITY`, `INTERNAL_TEAM`.
- `client_id` (`string`, optional): Only conversations that include this client. Viewing conversations you are not in needs organization admin access. Example: "12345".
- `keywords` (`string`, optional): Text to search conversation names and member names. Example: "lab results".
- `page_size` (`integer`, optional): Number of conversations to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `provider_id` (`string`, optional): Healthie ID of the provider (clinician or staff user). Example: "67890". Find it with healthie_list_providers or healthie_get_current_user. Defaults to the connected user; other providers need organization admin access.
- `read_status` (`string`, optional): Filter by read status: all (default), read or unread. One of: `all`, `read`, `unread`.

Example input: `{}`

### `healthie_list_filled_forms`

List Filled Forms · Read-only

List filled-out forms (form answer groups) such as intake forms, questionnaires and chart notes, filtered by client, template, filler, date or lock status.
Returns a page of filled forms with id, name, finished and locked flags, template, client, filler, linked appointment and dates, plus page_info and total_count.
Use this to find a client's completed forms; use healthie_get_filled_form for the answers and healthie_list_chart_notes for charting notes with signature status. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `client_id` (`string`, optional): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients. Only forms on this client's chart are returned.
- `end_date` (`string`, optional): Only forms on or before this date (YYYY-MM-DD). Example: "2026-10-31".
- `filler_id` (`string`, optional): Only forms filled out by this user ID. Example: "67890".
- `form_template_id` (`string`, optional): Only forms filled from this template ID. Example: "100".
- `locked_status` (`boolean`, optional): Set true for locked forms only, or false for unlocked forms only.
- `order_by` (`string`, optional): Sort order. Defaults to CREATED_AT_DESC. One of: `CREATED_AT_DESC`, `CREATED_AT_ASC`, `UPDATED_AT_DESC`, `UPDATED_AT_ASC`, `RECORD_CREATED_AT_DESC`, `RECORD_CREATED_AT_ASC`, `UNSORTED`.
- `page_size` (`integer`, optional): Number of forms to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `start_date` (`string`, optional): Only forms on or after this date (YYYY-MM-DD). Example: "2026-10-01".
- `use_for_charting` (`boolean`, optional): Set true to return only charting notes.

Example input: `{}`

### `healthie_list_form_templates`

List Form Templates · Read-only

List the form templates (intake forms, questionnaires and charting templates) in the Healthie organization.
Returns a page of templates with id, name, whether each is used for charting or programs, and created and updated times, plus page_info and total_count.
Use this to find a template ID (custom_module_form_id) for healthie_get_form_template or healthie_create_filled_form. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `category` (`string`, optional): Only templates in this category: charting, program, intake or autoscored_no_metric. One of: `charting`, `program`, `intake`, `autoscored_no_metric`.
- `keywords` (`string`, optional): Text to search template names. Example: "SOAP".
- `order_by` (`string`, optional): Sort order. Defaults to UPDATED_AT_DESC. One of: `NAME_ASC`, `NAME_DESC`, `UPDATED_AT_ASC`, `UPDATED_AT_DESC`, `CREATED_AT_ASC`, `CREATED_AT_DESC`, `TYPE_ASC`, `TYPE_DESC`.
- `page_size` (`integer`, optional): Number of templates to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.

Example input: `{}`

### `healthie_list_insurance_plans`

List Insurance Plans · Read-only

Search Healthie's insurance plan (payer) directory by payer name or payer ID, optionally only plans your organization accepts.
Returns a page of plans with id, payer name, payer ID, combined name and ID, and accepted and custom flags, plus page_info and total_count.
Use this to find an insurance_plan_id for healthie_add_client_policy or to check whether a payer is accepted. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `is_accepted` (`boolean`, optional): Set true to return only plans your organization accepts.
- `keywords` (`string`, optional): Payer name or payer ID to search for. Example: "Aetna".
- `order_by` (`string`, optional): Sort order: ACCEPTED or PAYER_NAME_ASC. One of: `ACCEPTED`, `PAYER_NAME_ASC`.
- `page_size` (`integer`, optional): Number of plans to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.

Example input: `{}`

### `healthie_list_messages`

List Messages · Read-only

List the messages (notes) in a Healthie chat conversation, newest first by default.
Returns a page of messages with id, HTML content, sender (creator), sender user_id, attachment names and URLs, scheduled time and timestamps, plus page_info and total_count.
Use this to read a conversation; use healthie_send_message to reply. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `conversation_id` (`string`, required): Healthie ID of the conversation. Example: "5555". Find it with healthie_list_conversations.
- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `keywords` (`string`, optional): Only messages containing this text. Example: "refill".
- `order_by` (`string`, optional): Sort order: CREATED_AT_DESC (newest first, default) or CREATED_AT_ASC. One of: `CREATED_AT_DESC`, `CREATED_AT_ASC`.
- `org_chat` (`boolean`, optional): Set true when reading a conversation as a care-team member who is not its owner.
- `page_size` (`integer`, optional): Number of messages to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.

Example input: `{"conversation_id":"5555"}`

### `healthie_list_providers`

List Providers · Read-only

List the providers and staff in the connected user's Healthie organization, optionally filtered by name or state license.
Returns a page of members with id, names, email, phone, time zone, NPI, qualifications, profession and active-provider flag, plus page_info and total_count.
Use this to find a provider ID for scheduling, availability or task assignment; use healthie_get_provider for one provider. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `keywords` (`string`, optional): Text to search members by name or email. Example: "Smith".
- `licensed_in_state` (`string`, optional): Only return providers licensed in this US state, as a two-letter code. Example: "CA".
- `order_by` (`string`, optional): Sort order. Defaults to LAST_NAME_ASC. One of: `LAST_NAME_ASC`, `LAST_NAME_DESC`, `FIRST_NAME_ASC`, `FIRST_NAME_DESC`, `EMAIL_ASC`, `EMAIL_DESC`, `CREATED_AT_DESC`, `CREATED_AT_ASC`.
- `page_size` (`integer`, optional): Number of providers to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.

Example input: `{}`

### `healthie_list_tasks`

List Tasks · Read-only

List provider tasks in Healthie, filtered by client, assignees, completion status, creator or text.
Returns a page of tasks with id, content, complete flag, due date, priority, client, creator, assignees and timestamps, plus page_info and total_count.
Use this to see a to-do list or a client's open tasks; use healthie_get_task for one task and healthie_create_task to add one. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `assignee_ids` (`array`, optional): Only tasks assigned to these user IDs. Example: ["67890"].
- `client_id` (`string`, optional): Only tasks about this client. Example: "12345".
- `completed_status` (`string`, optional): Only complete or only incomplete tasks. Leave empty for both. One of: `complete`, `incomplete`.
- `created_by_self` (`boolean`, optional): Set true for tasks you created, or false for tasks created by others.
- `keywords` (`string`, optional): Only tasks whose content contains this text. Example: "refill".
- `order_by` (`string`, optional): Sort order, e.g. DUE_DATE_ASC or CREATED_DESC. One of: `DUE_DATE_ASC`, `DUE_DATE_DESC`, `CREATED_ASC`, `CREATED_DESC`, `PRIORITY_ASC`, `PRIORITY_DESC`, `UPDATED_AT_ASC`, `UPDATED_AT_DESC`, `COMPLETED_AT_ASC`, `COMPLETED_AT_DESC`, `CLIENT_NAME_ASC`, `CLIENT_NAME_DESC`, `TASK_ASC`, `TASK_DESC`.
- `page_size` (`integer`, optional): Number of tasks to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `type` (`string`, optional): Which tasks: all (assigned to or created by you) or assigned (created by others and assigned to you). One of: `all`, `assigned`.

Example input: `{}`

### `healthie_search_clients`

Search Clients · Read-only

Search the clients (patients) the connected Healthie user can see, by name, email, date of birth or record ID, with optional status, provider, group and tag filters.
Returns a page of clients with id, names, email, phone, date of birth, gender, active flag, record identifier, primary provider id, group id and next appointment date, plus page_info and total_count.
Use this to find a client's ID or browse the client list; use healthie_get_client for one client's full profile, insurance policies and address. Paginated: when page_info.has_next_page is true, call again with after set to page_info.end_cursor. GraphQL errors return HTTP 200 with an errors array, so check it on every response.

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

Inputs:

- `active_status` (`string`, optional): Only return clients with this status: "active" or "archived". One of: `active`, `archived`.
- `after` (`string`, optional): Cursor for the next page: pass page_info.end_cursor from the previous response to continue after it. Leave empty for the first page. Example: "eyJpZCI6IjEyMzQ1In0=".
- `group_id` (`string`, optional): Only return clients in this client group (user group) ID. Example: "4321".
- `ids` (`array`, optional): Only return clients with these Healthie IDs. Example: ["12345","12346"].
- `keywords` (`string`, optional): Text to search clients by. Matches ID, first, legal or last name, record identifier, email, date of birth (YYYY-MM-DD) and NPI. Combine terms with spaces. Example: "Jordan Test 1990-01-01".
- `order_by` (`string`, optional): Sort order. Defaults to LAST_NAME_ASC. One of: `LAST_NAME_ASC`, `LAST_NAME_DESC`, `FIRST_NAME_ASC`, `FIRST_NAME_DESC`, `EMAIL_ASC`, `EMAIL_DESC`, `CREATED_AT_DESC`, `CREATED_AT_ASC`, `UPDATED_AT_DESC`, `UPDATED_AT_ASC`, `NEXT_APPT_DATE_ASC`, `NEXT_APPT_DATE_DESC`.
- `page_size` (`integer`, optional): Number of clients to return in this page, from 1 to 100. Healthie recommends 10 to 50. Defaults to the server page size when omitted. Example: 25.
- `provider_id` (`string`, optional): Only return clients whose primary provider has this Healthie user ID. Example: "67890".
- `tag_ids` (`array`, optional): Only return clients that have at least one of these tag IDs. Example: ["11","12"].

Example input: `{}`

### `healthie_add_client_policy`

Add Client Policy · Write

Add an insurance policy to a client's profile, linked to an insurance plan (payer).
Returns the client's id and full list of policies with id, member and group numbers, priority and plan, plus messages listing any validation problems.
Use this to record new coverage; find the plan ID with healthie_list_insurance_plans and change an existing policy with healthie_update_policy. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `client_id` (`string`, required): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients.
- `insurance_plan_id` (`string`, required): Healthie ID of the insurance plan (payer). Example: "2468". Find it with healthie_list_insurance_plans.
- `member_number` (`string`, required): Member (policy) number on the insurance card. Example: "ABC123456789".
- `coinsurance_value` (`integer`, optional): Coinsurance value when the billing method is coinsurance. Example: 20.
- `copay_value` (`integer`, optional): Copay amount in cents when the billing method is copay. Example: 2500 for $25.00.
- `group_number` (`string`, optional): Group number on the insurance card. Example: "GRP-0001".
- `holder_dob` (`string`, optional): Policy holder's date of birth (YYYY-MM-DD). Example: "1990-01-01".
- `holder_first` (`string`, optional): Policy holder's first name. Example: "Jordan".
- `holder_gender` (`string`, optional): Policy holder's gender. Example: "Female".
- `holder_last` (`string`, optional): Policy holder's last name. Example: "Test".
- `holder_phone` (`string`, optional): Policy holder's phone number. Example: "555-555-0100".
- `holder_relationship` (`string`, optional): Client's relationship to the policy holder, as text. Use "Self" when the client is the holder. Example: "Self".
- `insurance_billing_method` (`string`, optional): How the client's share is billed: no_billing_method, copay, coinsurance or unmet_deductible. One of: `no_billing_method`, `copay`, `coinsurance`, `unmet_deductible`.
- `priority_type` (`string`, optional): Coverage order of the policy. Healthie's schema lists primary, secondary and inactive. Example: "primary".

Example input: `{"client_id":"12345","insurance_plan_id":"2468","member_number":"ABC123456789"}`

### `healthie_book_appointment`

Book Appointment · Write

Book a 1:1 appointment for a client with a provider, as the connected provider or staff user.
Returns the new appointment's id, date, length, contact type, status, location, appointment type, provider and client, plus messages listing any validation problems.
Use this to schedule a visit; check open times first with healthie_list_available_slots, because Healthie does not enforce availability unless enforce_availability is true. Use healthie_reschedule_appointment to move an existing one. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `appointment_type_id` (`string`, required): Appointment type ID. Example: "1128". Find it with healthie_list_appointment_types.
- `client_id` (`string`, required): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients. The client attending this 1:1 appointment.
- `contact_type` (`string`, required): How the appointment is held, as one of the organization's contact types, for example "Healthie Video Call", "In Person" or "Phone Call". Get the exact values with healthie_list_contact_types or the appointment type's available_contact_types.
- `datetime` (`string`, required): Start of the appointment as ISO 8601 ("2026-11-03T14:00:00-05:00") or "YYYY-MM-DD HH:MM:SS" in the timezone given. Example: "2026-11-03T14:00:00-05:00".
- `appointment_location_id` (`string`, optional): Appointment location ID. Required for in-person appointments. Example: "55". Find it with healthie_list_appointment_locations.
- `enforce_availability` (`boolean`, optional): Set true to have Healthie reject the booking if the time is not an open slot. Defaults to false.
- `external_videochat_url` (`string`, optional): Video link to use instead of Healthie's built-in video or Zoom. Example: "https://video.example.com/room/123".
- `metadata` (`string`, optional): Your own metadata as a serialized JSON string. Example: "{\"source\":\"agent\"}".
- `notes` (`string`, optional): Notes to store on the appointment. Example: "Follow-up on lab results."
- `provider_id` (`string`, optional): Healthie user ID of the provider seeing the client. Defaults to the connected user. Example: "67890".
- `timezone` (`string`, optional): IANA time zone name used to interpret and return dates. Defaults to the provider's time zone. Example: "America/New_York".

Example input: `{"appointment_type_id":"1128","client_id":"12345","contact_type":"<contact_type>","datetime":"2026-11-03T14:00:00-05:00"}`

### `healthie_cancel_appointment`

Cancel Appointment · Write

Cancel a Healthie appointment as a provider by setting its status to Cancelled; the appointment stays on the calendar and in history.
Returns the appointment's id, date, status and details, plus messages listing any validation problems.
Use this for normal cancellations; use healthie_delete_appointment only to remove an appointment entirely, and healthie_update_appointment to record other statuses such as No-Show. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `appointment_id` (`string`, required): Healthie ID of the appointment to cancel. Example: "9900".
- `cancellation_reason` (`string`, optional): Free-text reason for the cancellation. Example: "Client requested a later date."
- `initiated_by` (`string`, optional): Who initiated the cancellation: client, provider or organization. One of: `client`, `provider`, `organization`.
- `update_recurring` (`boolean`, optional): For a recurring series, set true to cancel this and all later appointments.

Example input: `{"appointment_id":"9900"}`

### `healthie_create_client`

Create Client · Write

Create a new client (patient) in Healthie, assigned to a provider.
Returns the new client's id, names, email, phone, date of birth, primary provider and group, plus messages listing any validation problems.
Use this to add a client who does not exist yet; search first with healthie_search_clients to avoid duplicates, and use healthie_update_client to change an existing one. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `first_name` (`string`, required): Client's first (preferred) name. Example: "Jordan".
- `last_name` (`string`, required): Client's last name. Example: "Test".
- `default_billing_type` (`string`, optional): Default billing type: SELF_PAY or INSURANCE_PAY. One of: `SELF_PAY`, `INSURANCE_PAY`.
- `dob` (`string`, optional): Date of birth in YYYY-MM-DD format. Example: "1990-01-01".
- `dont_send_welcome` (`boolean`, optional): Set true to skip Healthie's welcome email to the client.
- `email` (`string`, optional): Client's email address. Required unless skipped_email is true. Example: "jordan.test@example.com".
- `gender` (`string`, optional): Client's gender as free text. Example: "Female".
- `legal_name` (`string`, optional): Client's legal first name, when it differs from the preferred first name. Example: "Jordanna".
- `metadata` (`string`, optional): Your own metadata as a serialized JSON string, up to 128,000 characters. It replaces the existing value. Example: "{\"source\":\"agent\"}".
- `other_provider_ids` (`array`, optional): IDs of additional providers on the client's care team. Example: ["67891"].
- `phone_number` (`string`, optional): Client's phone number. Example: "555-555-0100".
- `provider_id` (`string`, optional): Healthie user ID of the client's primary provider. Defaults to the connected user. Example: "67890".
- `record_identifier` (`string`, optional): Your own record or MRN identifier for this client. Example: "MRN-0001".
- `skipped_email` (`boolean`, optional): Set true to create the client without an email address.
- `timezone` (`string`, optional): Client's IANA time zone. Example: "America/Chicago".
- `user_group_id` (`string`, optional): Client group (user group) to place the client in. Example: "4321".

Example input: `{"first_name":"Jordan","last_name":"Test"}`

### `healthie_create_conversation`

Create Conversation · Write

Start a new Healthie chat conversation with clients, providers or client groups, optionally with a subject name.
Returns the new conversation's id, name, category, owner, members and timestamps, plus messages listing any validation problems.
Use this to open a new thread; then post into it with healthie_send_message. Check healthie_list_conversations first, because Healthie often creates a client conversation automatically. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `members` (`string`, required): Comma-separated members to add, using each user's or group's doc_share_id in the form user-<id> or group-<id>. Example: "user-12345,user-67891".
- `appointment_id` (`string`, optional): Appointment to link the conversation to. Example: "9900".
- `name` (`string`, optional): Subject of the conversation. Defaults to the members' names. Example: "Questions before your next visit".
- `owner_id` (`string`, optional): Healthie user ID of the staff member who owns the conversation. Defaults to the connected user. Example: "67890".

Example input: `{"members":"user-12345,user-67891"}`

### `healthie_create_filled_form`

Create Filled Form · Write

Create a filled-out form on a client's chart, such as a chart note or intake form, from a form template and a list of answers.
Returns the new form's id, name, finished and locked flags, template, client, and saved answers, plus messages listing any validation problems.
Use this to write a chart note or record a form for a client; get the question IDs first with healthie_get_form_template. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `client_id` (`string`, required): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients. The form is saved to this client's chart.
- `form_answers` (`array`, required): Answers to the template's questions. Each answer needs the question's custom_module_id (from healthie_get_form_template) and the answer as text; the client's user_id is added for you. Example: [{"custom_module_id":"1","answer":"Patient reports improved sleep."},{"custom_module_id":"2","answer":"Continue current plan."}].
- `form_template_id` (`string`, required): Healthie ID of the form template being filled (custom_module_form_id). Example: "100".
- `appointment_id` (`string`, optional): Appointment this form or chart note belongs to. Example: "9900".
- `finished` (`boolean`, optional): Whether the form is complete. Defaults to true, which makes it visible on the chart; set false to save a draft that can only be fetched by ID.
- `marked_locked` (`boolean`, optional): Set true to lock the form from further editing after it is created.
- `name` (`string`, optional): Title for this filled form. Defaults to the template name. Example: "Follow-up visit note".

Example input: `{"client_id":"12345","form_answers":[{"custom_module_id":"1","answer":"Patient reports improved sleep."},{"custom_module_id":"2","answer":"Continue current plan."}],"form_template_id":"100"}`

### `healthie_create_task`

Create Task · Write

Create a provider task in Healthie, optionally about a client, assigned to team members and with a due date and priority.
Returns the new task's id, content, due date, priority, complete flag, client, creator and assignees, plus messages listing any validation problems.
Use this to add a to-do; use healthie_update_task to change or complete an existing one. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `content` (`string`, required): What needs to be done. Example: "Call the client about lab results."
- `assignee_ids` (`array`, optional): User IDs of the providers or staff to assign. Defaults to the connected user on create. Example: ["67890"].
- `client_id` (`string`, optional): Client this task is about. Example: "12345".
- `complete` (`boolean`, optional): Set true to mark the task complete.
- `due_date` (`string`, optional): Due date as YYYY-MM-DD or ISO 8601 date-time. Example: "2026-11-10".
- `priority` (`integer`, optional): 0 for normal priority or 1 for high priority. One of: `0`, `1`.

Example input: `{"content":"Call the client about lab results."}`

### `healthie_reschedule_appointment`

Reschedule Appointment · Write

Move an existing Healthie appointment to a new date and time, optionally changing its provider, contact type or location.
Returns the updated appointment's id, date, length, contact type, status, location, appointment type, provider and client, plus messages listing any validation problems.
Use this to change when an appointment happens; find open times with healthie_list_available_slots (pass appointment_to_reschedule_id). Use healthie_cancel_appointment to cancel instead. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `appointment_id` (`string`, required): Healthie ID of the appointment to move. Example: "9900".
- `datetime` (`string`, required): New start as ISO 8601 ("2026-11-04T10:00:00-05:00") or "YYYY-MM-DD HH:MM:SS" in the timezone given. Example: "2026-11-04T10:00:00-05:00".
- `appointment_location_id` (`string`, optional): New appointment location ID for in-person visits. Example: "55".
- `contact_type` (`string`, optional): How the appointment is held, as one of the organization's contact types, for example "Healthie Video Call", "In Person" or "Phone Call". Get the exact values with healthie_list_contact_types or the appointment type's available_contact_types.
- `enforce_availability` (`boolean`, optional): Set true to have Healthie reject the change if the new time is not an open slot.
- `provider_id` (`string`, optional): Healthie user ID of a different provider to see the client. Example: "67891".
- `skip_notification_email` (`boolean`, optional): Set true to suppress Healthie's reschedule notification emails.
- `timezone` (`string`, optional): IANA time zone name used to interpret and return dates. Defaults to the provider's time zone. Example: "America/New_York".
- `update_recurring` (`boolean`, optional): For a recurring series, set true to apply the change to this and all later appointments.

Example input: `{"appointment_id":"9900","datetime":"2026-11-04T10:00:00-05:00"}`

### `healthie_send_message`

Send Message · Write

Send a chat message (note) into an existing Healthie conversation as the connected user, now or at a scheduled time.
Returns the new message's id, content, conversation id, sender and timestamps, plus messages listing any validation problems.
Use this to message a client or care team in a known conversation; use healthie_create_conversation to start a new one and healthie_list_messages to read replies. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `content` (`string`, required): Message text. Healthie stores it as HTML and allows basic formatting such as , <b>, <i> and <u>. Example: "<p>Your lab results are ready to review.
".
- `conversation_id` (`string`, required): Healthie ID of the conversation to post in. Example: "5555".
- `hide_org_chat_confirmation` (`boolean`, optional): Set true to skip the org-chat confirmation step when org_chat is true.
- `org_chat` (`boolean`, optional): Set true when posting as a care-team member who is not the conversation owner.
- `scheduled_at` (`string`, optional): Send the message later at this ISO 8601 date-time instead of now. Example: "2026-11-03T09:00:00-05:00".

Example input: `{"content":"<p>Your lab results are ready to review.</p>","conversation_id":"5555"}`

### `healthie_update_appointment`

Update Appointment · Write

Update a Healthie appointment's status, confirmation, notes, contact type, appointment type, location or video link without moving it. Only the fields you pass change.
Returns the updated appointment's id, date, status, confirmation flags, location, notes and details, plus messages listing any validation problems.
Use this to mark an appointment Occurred, No-Show or Checked-In, or to edit details; use healthie_reschedule_appointment to change the time and healthie_cancel_appointment to cancel. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `appointment_id` (`string`, required): Healthie ID of the appointment. Example: "9900".
- `appointment_location_id` (`string`, optional): New appointment location ID. Example: "55".
- `appointment_type_id` (`string`, optional): New appointment type ID. Example: "1128".
- `confirmed` (`boolean`, optional): Set true to mark the appointment confirmed by the provider.
- `contact_type` (`string`, optional): How the appointment is held, as one of the organization's contact types, for example "Healthie Video Call", "In Person" or "Phone Call". Get the exact values with healthie_list_contact_types or the appointment type's available_contact_types.
- `external_videochat_url` (`string`, optional): Video link to use instead of Healthie's built-in video or Zoom. Example: "https://video.example.com/room/123".
- `metadata` (`string`, optional): Your own metadata as a serialized JSON string. Replaces the existing value. Example: "{\"source\":\"agent\"}".
- `notes` (`string`, optional): Notes to store on the appointment. Replaces the existing notes. Example: "Bring recent lab results."
- `status` (`string`, optional): New appointment status (pm_status). "Late Cancellation" and "Checked-In" work only when enabled for the organization. One of: `Occurred`, `No-Show`, `Re-Scheduled`, `Cancelled`, `Late Cancellation`, `Checked-In`.

Example input: `{"appointment_id":"9900"}`

### `healthie_update_client`

Update Client · Write

Update an existing Healthie client's profile: names, contact details, date of birth, provider, care team, group, status, address and metadata. Only the fields you pass change.
Returns the updated client's id, names, email, phone, date of birth, active flag, provider and group, plus messages listing any validation problems.
Use this to edit a client; use healthie_create_client for a new one and healthie_add_client_policy to add insurance. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `client_id` (`string`, required): Healthie ID of the client (patient). Example: "12345". Find it with healthie_search_clients.
- `active` (`boolean`, optional): Set false to archive the client or true to reactivate them.
- `default_billing_type` (`string`, optional): Default billing type: SELF_PAY or INSURANCE_PAY. One of: `SELF_PAY`, `INSURANCE_PAY`.
- `dob` (`string`, optional): Date of birth in YYYY-MM-DD format. Example: "1990-01-01".
- `email` (`string`, optional): Client's email address. Healthie sends account emails here. Example: "jordan.test@example.com".
- `first_name` (`string`, optional): Client's first (preferred) name. Example: "Jordan".
- `gender` (`string`, optional): Client's gender as free text. Example: "Female".
- `last_name` (`string`, optional): Client's last name. Example: "Test".
- `legal_name` (`string`, optional): Client's legal first name, when it differs from the preferred first name. Example: "Jordanna".
- `location` (`object`, optional): Client's primary address as an object with line1, line2, city, state, zip and country. Include the existing location id to edit it rather than add one. Example: {"line1":"1 Main St","city":"Springfield","state":"IL","zip":"62701","country":"US"}.
- `metadata` (`string`, optional): Your own metadata as a serialized JSON string, up to 128,000 characters. It replaces the existing value. Example: "{\"source\":\"agent\"}".
- `other_provider_ids` (`array`, optional): IDs of additional providers on the client's care team. Example: ["67891"].
- `phone_number` (`string`, optional): Client's phone number. Example: "555-555-0100".
- `provider_id` (`string`, optional): Healthie user ID of the new primary provider. Example: "67890".
- `quick_notes` (`string`, optional): Short notes about the client that providers see on the profile. Replaces the existing value. Example: "Prefers afternoon visits."
- `record_identifier` (`string`, optional): Your own record or MRN identifier for this client. Example: "MRN-0001".
- `timezone` (`string`, optional): Client's IANA time zone. Example: "America/Chicago".
- `user_group_id` (`string`, optional): Client group (user group) to place the client in. Example: "4321".

Example input: `{"client_id":"12345"}`

### `healthie_update_policy`

Update Policy · Write

Update an existing insurance policy's holder details, priority, effective dates, notes, or referral and authorization flags. Only the fields you pass change.
Returns the updated policy's details and insurance plan, plus messages listing any validation problems.
Use this to correct or extend a policy; use healthie_add_client_policy to add a new one. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `policy_id` (`string`, required): Healthie ID of the policy. Example: "3333". Find it with healthie_list_client_policies.
- `effective_end` (`string`, optional): Date coverage ends (YYYY-MM-DD). Example: "2026-12-31".
- `effective_start` (`string`, optional): Date coverage starts (YYYY-MM-DD). Example: "2026-01-01".
- `holder_dob` (`string`, optional): Policy holder's date of birth (YYYY-MM-DD). Example: "1990-01-01".
- `holder_first` (`string`, optional): Policy holder's first name. Example: "Jordan".
- `holder_gender` (`string`, optional): Policy holder's gender. Example: "Female".
- `holder_last` (`string`, optional): Policy holder's last name. Example: "Test".
- `holder_phone` (`string`, optional): Policy holder's phone number. Example: "555-555-0100".
- `insurance_authorization_required` (`boolean`, optional): Set true if visits need prior authorization.
- `notes` (`string`, optional): Notes about the policy. Example: "Verified by phone."
- `priority_type` (`string`, optional): Coverage order of the policy. Healthie's schema lists primary, secondary and inactive. Example: "primary".
- `referral_required` (`boolean`, optional): Set true if the plan requires a referral.

Example input: `{"policy_id":"3333"}`

### `healthie_update_task`

Update Task · Write

Update a Healthie task's content, assignees, client, due date or priority, or mark it complete. Only the fields you pass change.
Returns the updated task's id, content, due date, priority, complete flag, client, creator and assignees, plus messages listing any validation problems.
Use this to edit or complete a task; use healthie_create_task for a new one and healthie_delete_task to remove one. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `task_id` (`string`, required): Healthie ID of the task. Example: "777".
- `assignee_ids` (`array`, optional): User IDs of the providers or staff to assign. Defaults to the connected user on create. Example: ["67890"].
- `client_id` (`string`, optional): Client this task is about. Example: "12345".
- `complete` (`boolean`, optional): Set true to mark the task complete.
- `content` (`string`, optional): New task description. Example: "Call the client about lab results."
- `due_date` (`string`, optional): Due date as YYYY-MM-DD or ISO 8601 date-time. Example: "2026-11-10".
- `priority` (`integer`, optional): 0 for normal priority or 1 for high priority. One of: `0`, `1`.

Example input: `{"task_id":"777"}`

### `healthie_delete_appointment`

Delete Appointment · Destructive

Delete a Healthie appointment as a provider; it is soft-deleted and no longer shows on calendars.
Returns the deleted appointment's id plus messages listing any problems.
Use this only to remove an appointment that should not exist; use healthie_cancel_appointment to keep a cancelled visit on record. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `appointment_id` (`string`, required): Healthie ID of the appointment to delete. Example: "9900".
- `delete_recurring` (`boolean`, optional): For a recurring series, set true to delete this and all later appointments.
- `skip_notification_email` (`boolean`, optional): Set true to suppress Healthie's cancellation emails to the provider and attendees.

Example input: `{"appointment_id":"9900"}`

### `healthie_delete_task`

Delete Task · Destructive

Delete a Healthie task permanently.
Returns the deleted task's id and content, plus messages listing any problems.
Use this to remove a task created by mistake; use healthie_update_task with complete true to close a finished task instead. Validation problems come back in messages (field and message) with HTTP 200, and permission failures as a top-level errors entry; check both.

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

Inputs:

- `task_id` (`string`, required): Healthie ID of the task to delete. Example: "777".

Example input: `{"task_id":"777"}`

## 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
- [Scite MCP server](/agentkit/connectors/scitemcp/): Vendor MCP, OAuth, 25 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 |
