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

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

**Authentication:** OAuth 2.0
**Categories:** Healthcare
**Tools:** 47: 34 read, 13 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own DrChrono app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=DRCHRONO)

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

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

4. ### Register an OAuth app

   DrChrono connections use your own OAuth app. Register one with DrChrono and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the DrChrono connection.

   **Console steps with screenshots:**

   DrChrono connections use OAuth 2.0 and act as the signed-in DrChrono provider or staff user. Register an API app in DrChrono, then enter its client ID and secret on the connection.

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

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

   2. ### Register an API app in DrChrono

      In DrChrono's API settings, create an API app and add the redirect URI you copied. Note the app's client ID and client secret.

   3. ### Enter the credentials on the connection

      Back on the DrChrono connection, enter the **Client ID** and **Client Secret**. Select only the scopes your agent needs, such as `patients:read` and `calendar:read`. Don't leave the selection empty: DrChrono then grants every scope. Click **Save**.

5. ### 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 = 'drchrono'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize DrChrono:', 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: 'drchrono_get_availability',
     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 = "drchrono"
   identifier = "user_123"

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

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

   ```bash
   python quickstart.py
   ```

   Each user signs in once. 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: 'drchrono_get_allergy',
  toolInput: {
    id: 12345,
  },
  connector: 'drchrono',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="drchrono_get_allergy",
    tool_input={
        "id": 12345,
    },
    connection_name="drchrono",
    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.

### `drchrono_get_allergy`

Get Allergy · Read-only

Get one patient allergy by ID.
Returns patient, doctor, description, reaction, SNOMED/RxNorm codes, status, verification status and notes.
Use drchrono_list_allergies to find allergies for a patient.

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

Inputs:

- `id` (`integer`, required): ID of the allergy. Get it from drchrono_list_allergies. Example: 12345.

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

### `drchrono_get_appointment`

Get Appointment · Read-only

Get one appointment or break by ID.
Returns patient, doctor, office, exam room, scheduled time, duration, status, reason, notes, ICD-10 codes, billing status and insurer details.
Use drchrono_list_appointments to find appointment IDs.

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

Inputs:

- `id` (`string`, required): ID of the appointment. Get it from drchrono_list_appointments. Example: 12345.

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

### `drchrono_get_appointment_profile`

Get Appointment Profile · Read-only

Get one appointment profile (visit type) by ID.
Returns its name, doctor, default duration, color, reason and online-scheduling flag.
Use drchrono_list_appointment_profiles to find profile IDs.

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

Inputs:

- `id` (`integer`, required): ID of the appointment profile. Get it from drchrono_list_appointment_profiles. Example: 12345.

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

### `drchrono_get_availability`

Get Availability · Read-only

Get open appointment slots for a date or date range at an office, for a doctor or exam room.
Returns open time blocks per exam room, each split into slots of the requested duration.
Use this before drchrono_create_appointment to pick a free time.

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

Inputs:

- `date` (`string`, optional): Date to check (YYYY-MM-DD). Set this or date_range. Example: 2026-11-02.
- `date_range` (`string`, optional): Date range to check, as YYYY-MM-DD/YYYY-MM-DD. Set this or date. Example: 2026-11-02/2026-11-06.
- `doctor` (`integer`, optional): Doctor to check availability for. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `duration` (`integer`, optional): Appointment length in minutes, used to split open time into slots. Example: 30.
- `exam_room` (`integer`, optional): Exam room to check. Leave empty to get availability for every exam room, grouped by room. Example: 1.
- `office` (`integer`, optional): Office to check availability for. Get office IDs from drchrono_list_offices. Example: 12345.

Example input: `{}`

### `drchrono_get_clinical_note`

Get Clinical Note · Read-only

Get one clinical note by ID.
Returns patient, appointment, signee, archived flag and the note sections with their field values.
Use drchrono_list_clinical_notes to find notes for a patient or date.

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

Inputs:

- `id` (`integer`, required): ID of the clinical note. Get it from drchrono_list_clinical_notes. Example: 12345.

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

### `drchrono_get_doctor`

Get Doctor · Read-only

Get one doctor in the practice group by ID.
Returns name, specialty, NPI, contact details, timezone, practice group and work schedule.
Use drchrono_list_doctors to find doctor IDs.

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

Inputs:

- `id` (`integer`, required): ID of the doctor. Get it from drchrono_list_doctors. Example: 12345.

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

### `drchrono_get_eligibility_check`

Get Eligibility Check · Read-only

Get one past insurance eligibility check by ID.
Returns patient, appointment, payer name, coverage level, eligibility code, service type, subscriber and coverage details.
Use drchrono_list_eligibility_checks to find checks for a patient.

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

Inputs:

- `id` (`integer`, required): ID of the eligibility check. Get it from drchrono_list_eligibility_checks. Example: 12345.

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

### `drchrono_get_line_item`

Get Line Item · Read-only

Get one billing line item by ID.
Returns appointment, patient, procedure code, units, price, allowed and paid amounts, adjustments, balances and billing status.
Use drchrono_list_line_items to find line items for an appointment.

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

Inputs:

- `id` (`integer`, required): ID of the line item. Get it from drchrono_list_line_items. Example: 12345.

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

### `drchrono_get_medication`

Get Medication · Read-only

Get one patient medication by ID.
Returns patient, prescribing doctor, name, codes, dosage, frequency, route, refills, dates, status and notes.
Use drchrono_list_medications to find medications for a patient.

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

Inputs:

- `id` (`integer`, required): ID of the medication. Get it from drchrono_list_medications. Example: 12345.

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

### `drchrono_get_office`

Get Office · Read-only

Get one office by ID.
Returns name, address, phone, fax, hours, exam rooms (with their index values) and online-scheduling settings.
Use drchrono_list_offices to find office IDs.

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

Inputs:

- `id` (`integer`, required): ID of the office. Get it from drchrono_list_offices. Example: 12345.

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

### `drchrono_get_patient`

Get Patient · Read-only

Get one patient's full demographic record by ID.
Returns name, date of birth, gender, contact details, address, primary/secondary insurance, emergency contact, preferred pharmacy and primary doctor.
Use drchrono_list_patients to search when you do not have the ID.

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

Inputs:

- `id` (`integer`, required): ID of the patient. Get it from drchrono_list_patients. Example: 12345.

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

### `drchrono_get_problem`

Get Problem · Read-only

Get one patient problem by ID.
Returns patient, name, ICD and SNOMED codes, status, verification status, dates and notes.
Use drchrono_list_problems to find problems for a patient.

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

Inputs:

- `id` (`integer`, required): ID of the problem. Get it from drchrono_list_problems. Example: 12345.

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

### `drchrono_get_task`

Get Task · Read-only

Get one task by ID.
Returns title, status, category, priority, assignee, due date, linked items, notes and who created or assigned it.
Use drchrono_list_tasks to find tasks.

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

Inputs:

- `id` (`integer`, required): ID of the task. Get it from drchrono_list_tasks. Example: 12345.

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

### `drchrono_get_user`

Get User · Read-only

Get one user account by ID, or the signed-in user with id set to current.
Returns username, linked doctor, practice group, whether the user is a doctor or staff, and permissions.
Use drchrono_list_users to find other user IDs.

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

Inputs:

- `id` (`string`, required): User ID, or current for the signed-in user (DrChrono redirects current to that user's ID). Example: current.

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

### `drchrono_list_allergies`

List Allergies · Read-only

List patient allergies, filtered by patient or doctor.
Returns each allergy's id, patient, description, reaction, SNOMED/RxNorm codes, status and verification status, plus next and previous page URLs.
Use drchrono_get_allergy for one allergy.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `patient` (`integer`, optional): Filter by patient ID. Get patient IDs from drchrono_list_patients. Example: 12345.

Example input: `{}`

### `drchrono_list_appointment_profiles`

List Appointment Profiles · Read-only

List appointment profiles (visit types) set up on doctors' calendars.
Returns each profile's id, name, doctor, default duration, color, reason and online-scheduling flag, plus next and previous page URLs.
Use a profile id as profile in drchrono_create_appointment. Use drchrono_get_appointment_profile for one profile.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.

Example input: `{}`

### `drchrono_list_appointments`

List Appointments · Read-only

List appointments and breaks on the practice calendar, ordered by scheduled date. You must set date, date_range, since or occurred_since.
Returns a page of appointments with id, patient, doctor, office, exam room, scheduled time, duration, status and reason, plus next and previous page URLs.
Use this to browse a calendar or a patient's visits. Use drchrono_get_availability to find open slots.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `date` (`string`, optional): Return appointments scheduled on this date (YYYY-MM-DD). Set this, date_range, since or occurred_since. Example: 2026-11-02.
- `date_range` (`string`, optional): Return appointments scheduled within this inclusive range, as YYYY-MM-DD/YYYY-MM-DD (at most 190 days). Example: 2026-11-01/2026-11-30.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `exclude_membership` (`boolean`, optional): Set to true to leave out membership-plan charge placeholders, which are not real visits. Example: true.
- `occurred_since` (`string`, optional): Return appointments scheduled on or after this date (YYYY-MM-DD). Example: 2026-10-01.
- `office` (`integer`, optional): Filter by office ID. Get office IDs from drchrono_list_offices. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. DrChrono documents a much smaller page limit for appointments than other endpoints: about 20 per page, or 25 with verbose. Example: 50.
- `patient` (`integer`, optional): Filter by patient ID. Get patient IDs from drchrono_list_patients. Example: 12345.
- `show_archived` (`boolean`, optional): Set to true to include deleted or archived appointments. Example: false.
- `since` (`string`, optional): Return appointments created or updated on or after this date (YYYY-MM-DD). Example: 2026-10-01.
- `status` (`string`, optional): Filter by appointment status name, such as Confirmed, Arrived, Complete, Cancelled or No Show. Example: Confirmed.
- `verbose` (`boolean`, optional): Set to true to include clinical_note, custom_fields, custom_vitals, reminders, status_transitions and vitals. This lowers the page size limit to 25. Example: false.

Example input: `{}`

### `drchrono_list_clinical_note_field_types`

List Clinical Note Field Types · Read-only

List the field definitions inside clinical note templates.
Returns each field's id, name, template, data type, allowed values and required flag, plus next and previous page URLs.
Use this to label values from drchrono_list_clinical_note_field_values.

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

Inputs:

- `clinical_note_template` (`integer`, optional): Filter by clinical note template ID (from drchrono_list_clinical_note_templates). Example: 12345.
- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.

Example input: `{}`

### `drchrono_list_clinical_note_field_values`

List Clinical Note Field Values · Read-only

List the values entered in clinical note fields, filtered by appointment, template, field or doctor.
Returns each value's id, field, appointment, value and timestamps, plus next and previous page URLs.
Use this to read structured note content for a visit. Use drchrono_list_clinical_note_field_types to map field IDs to names.

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

Inputs:

- `appointment` (`integer`, optional): Filter by appointment ID. Get appointment IDs from drchrono_list_appointments. Example: 12345.
- `clinical_note_field` (`integer`, optional): Filter by clinical note field ID (from drchrono_list_clinical_note_field_types). Example: 12345.
- `clinical_note_template` (`integer`, optional): Filter by clinical note template ID. Example: 12345.
- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `since` (`string`, optional): Return only values created or updated on or after this date (YYYY-MM-DD). Example: 2026-01-01.

Example input: `{}`

### `drchrono_list_clinical_note_templates`

List Clinical Note Templates · Read-only

List clinical note templates available to doctors in the practice.
Returns each template's id, name, doctor, order and its fields, plus next and previous page URLs.
Use template IDs to filter drchrono_list_clinical_note_field_types and drchrono_list_clinical_note_field_values.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.

Example input: `{}`

### `drchrono_list_clinical_notes`

List Clinical Notes · Read-only

List clinical notes, filtered by patient, doctor, office or date.
Returns a page of notes with patient, appointment, signee, archived flag and the note sections with their field values, plus next and previous page URLs.
Use drchrono_get_clinical_note for one note. Use drchrono_list_clinical_note_field_values for individual structured field values.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `date` (`string`, optional): Return notes for appointments on this date (YYYY-MM-DD). Example: 2026-11-02.
- `date_range` (`string`, optional): Return notes for appointments within this range, as YYYY-MM-DD/YYYY-MM-DD. Example: 2026-10-01/2026-10-31.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `office` (`integer`, optional): Filter by office ID. Get office IDs from drchrono_list_offices. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `patient` (`integer`, optional): Filter by patient ID. Get patient IDs from drchrono_list_patients. Example: 12345.
- `since` (`string`, optional): Return only notes created or updated on or after this date (YYYY-MM-DD). Example: 2026-01-01.

Example input: `{}`

### `drchrono_list_doctors`

List Doctors · Read-only

List the doctors in the signed-in user's practice group.
Returns each doctor's id, name, specialty, NPI, contact details, timezone and practice group, plus next and previous page URLs.
Use this to find doctor IDs for other tools. Use drchrono_get_doctor for one doctor.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.

Example input: `{}`

### `drchrono_list_eligibility_checks`

List Eligibility Checks · Read-only

List past insurance eligibility checks, filtered by patient, appointment, doctor or date.
Returns each check's id, patient, appointment, payer name, coverage level, eligibility code, service type and coverage details, plus next and previous page URLs.
Use drchrono_get_eligibility_check for one check. This reads past checks; it does not run a new one.

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

Inputs:

- `appointment` (`integer`, optional): Filter by appointment ID. Get appointment IDs from drchrono_list_appointments. Example: 12345.
- `appointment_date` (`string`, optional): Return checks for appointments on this date (YYYY-MM-DD). Example: 2026-11-02.
- `appointment_date_range` (`string`, optional): Return checks for appointments within this range, as YYYY-MM-DD/YYYY-MM-DD. Example: 2026-10-01/2026-10-31.
- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `patient` (`integer`, optional): Filter by patient ID. Get patient IDs from drchrono_list_patients. Example: 12345.
- `query_date` (`string`, optional): Return checks run on this date (YYYY-MM-DD). Example: 2026-10-15.
- `query_date_range` (`string`, optional): Return checks run within this range, as YYYY-MM-DD/YYYY-MM-DD. Example: 2026-10-01/2026-10-31.

Example input: `{}`

### `drchrono_list_line_items`

List Line Items · Read-only

List billing line items (procedure charges on appointments), filtered by patient, appointment, doctor, office or date.
Returns each line item's id, appointment, patient, code, units, price, allowed and paid amounts, balances and billing status, plus next and previous page URLs.
Use drchrono_get_line_item for one line item.

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

Inputs:

- `appointment` (`integer`, optional): Filter by appointment ID. Get appointment IDs from drchrono_list_appointments. Example: 12345.
- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `office` (`integer`, optional): Filter by office ID. Get office IDs from drchrono_list_offices. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `patient` (`integer`, optional): Filter by patient ID. Get patient IDs from drchrono_list_patients. Example: 12345.
- `posted_date` (`string`, optional): Return line items posted on this date (YYYY-MM-DD). Example: 2026-10-16.
- `service_date` (`string`, optional): Return line items with this service date (YYYY-MM-DD). Example: 2026-10-15.
- `since` (`string`, optional): Return only line items created or updated on or after this date (YYYY-MM-DD). Example: 2026-01-01.

Example input: `{}`

### `drchrono_list_medications`

List Medications · Read-only

List patient medications, filtered by patient or doctor.
Returns each medication's id, patient, name, RxNorm/NDC codes, dosage, frequency, route, refills, dates, status and order status, plus next and previous page URLs.
Use drchrono_get_medication for one medication.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `patient` (`integer`, optional): Filter by patient ID. Get patient IDs from drchrono_list_patients. Example: 12345.

Example input: `{}`

### `drchrono_list_offices`

List Offices · Read-only

List the practice's offices.
Returns each office's id, name, address, phone, hours, exam rooms and online-scheduling settings, plus next and previous page URLs.
Use this to find office IDs and exam room indexes for scheduling. Use drchrono_get_office for one office.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter offices by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.

Example input: `{}`

### `drchrono_list_patients`

List Patients · Read-only

List or search patients in the practice, filtered by name, date of birth, chart ID, email or doctor.
Returns a page of patient records with id, name, chart ID, date of birth, gender, contact details, insurance and primary doctor, plus next and previous page URLs.
Use this to find a patient ID. Use drchrono_get_patient when you already have the ID.

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

Inputs:

- `chart_id` (`string`, optional): Filter by chart ID. Example: TEJA000001.
- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `date_of_birth` (`string`, optional): Filter by date of birth (YYYY-MM-DD). Example: 1980-01-01.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `email` (`string`, optional): Filter by email address. Example: patient@example.com.
- `ethnicity` (`string`, optional): Filter by ethnicity category. Example: hispanic. One of: `blank`, `hispanic`, `not_hispanic`, `declined`.
- `first_name` (`string`, optional): Filter by first name. Example: Jane.
- `gender` (`string`, optional): Filter by gender: Male, Female, Other, UNK or ASKU. Example: Female. One of: `Male`, `Female`, `Other`, `UNK`, `ASKU`.
- `last_name` (`string`, optional): Filter by last name. Example: Testpatient.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `preferred_language` (`string`, optional): Filter by preferred language (ISO 639 alpha-3 code). Example: spa. One of: `blank`, `eng`, `zho`, `fra`, `ita`, `jpn`, `por`, `rus`, `spa`, `other`, `unknown`, `declined`.
- `race` (`string`, optional): Filter by race category. Example: asian. One of: `blank`, `indian`, `asian`, `black`, `hawaiian`, `white`, `other`, `declined`.
- `since` (`string`, optional): Return only patients created or updated on or after this date (YYYY-MM-DD). Example: 2026-01-01.

Example input: `{}`

### `drchrono_list_problems`

List Problems · Read-only

List patient problems (the problem list), filtered by patient or doctor.
Returns each problem's id, patient, name, ICD and SNOMED codes, status, verification status and onset/diagnosis dates, plus next and previous page URLs.
Use drchrono_get_problem for one problem.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `patient` (`integer`, optional): Filter by patient ID. Get patient IDs from drchrono_list_patients. Example: 12345.

Example input: `{}`

### `drchrono_list_task_categories`

List Task Categories · Read-only

List the task categories defined for the practice.
Returns each category's id, name, global flag and archived flag, plus next and previous page URLs.
Use a category id when creating, updating or filtering tasks.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `since` (`string`, optional): Return only categories created or updated on or after this date (YYYY-MM-DD). Example: 2026-01-01.

Example input: `{}`

### `drchrono_list_task_notes`

List Task Notes · Read-only

List notes (comments) on tasks, optionally for one task.
Returns each note's id, task, text, author and timestamps, plus next and previous page URLs.
Use drchrono_create_task_note to add a note.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `since` (`string`, optional): Return only notes created or updated on or after this date (YYYY-MM-DD). Example: 2026-01-01.
- `task` (`integer`, optional): Filter by task ID (from drchrono_list_tasks). Example: 12345.

Example input: `{}`

### `drchrono_list_task_statuses`

List Task Statuses · Read-only

List the task statuses defined for the practice.
Returns each status's id, name, status category, task category and archived flag, plus next and previous page URLs.
Use a status id when creating, updating or filtering tasks.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `since` (`string`, optional): Return only statuses created or updated on or after this date (YYYY-MM-DD). Example: 2026-01-01.

Example input: `{}`

### `drchrono_list_tasks`

List Tasks · Read-only

List tasks in the practice's task center, filtered by status, category, assignee or due date.
Returns each task's id, title, status, category, priority, assignee, due date, linked items and notes, plus next and previous page URLs.
Use drchrono_get_task for one task.

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

Inputs:

- `assignee_group` (`integer`, optional): Filter by assigned user group ID. Example: 12345.
- `assignee_user` (`integer`, optional): Filter by assigned user ID (from drchrono_list_users). Example: 12345.
- `category` (`integer`, optional): Filter by task category ID (from drchrono_list_task_categories). Example: 12345.
- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `due_at_date` (`string`, optional): Return tasks due on this date (YYYY-MM-DD). Example: 2026-11-02.
- `due_at_range` (`string`, optional): Return tasks due within this range, as YYYY-MM-DD/YYYY-MM-DD. Example: 2026-11-01/2026-11-30.
- `due_at_since` (`string`, optional): Return tasks due on or after this date (YYYY-MM-DD). Example: 2026-11-01.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `since` (`string`, optional): Return only tasks created or updated on or after this date (YYYY-MM-DD). Example: 2026-01-01.
- `status` (`integer`, optional): Filter by task status ID (from drchrono_list_task_statuses). Example: 12345.

Example input: `{}`

### `drchrono_list_users`

List Users · Read-only

List user accounts in the practice group.
Returns each user's id, username, linked doctor, whether they are a doctor or staff, and permissions, plus next and previous page URLs.
Use this to find user IDs, for example to assign tasks. Use drchrono_get_user for one user or the signed-in user.

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

Inputs:

- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `doctor` (`integer`, optional): Filter by doctor ID. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.

Example input: `{}`

### `drchrono_search_insurance_payers`

Search Insurance Payers · Read-only

Search insurance payers by partial name, partial payer ID or state, in one clearinghouse's payer list.
Returns matching payers with their payer IDs and names, plus next and previous page URLs.
Use a payer ID as insurance_payer_id in a patient's primary_insurance or secondary_insurance. A patient's own insurance is on drchrono_get_patient.

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

Inputs:

- `payer_type` (`string`, required): Which payer list to search: emdeon, gateway or ihcfa. Example: emdeon. One of: `emdeon`, `gateway`, `ihcfa`.
- `cursor` (`string`, optional): Pagination cursor for the next page. Copy the value of the cursor query parameter from the next URL returned by the previous call. Leave empty for the first page. Example: cD0yMDI2LTAxLTE1KzEyJTNBMDA.
- `page_size` (`integer`, optional): Number of results per page. Most DrChrono list endpoints default to and cap at 250 results per page. Example: 50.
- `term` (`string`, optional): Search term: a partial payer name, partial payer ID or a state. Example: Aetna.

Example input: `{"payer_type":"emdeon"}`

### `drchrono_create_allergy`

Create Allergy · Write

Record an allergy for a patient.
Returns the created allergy with its id.
Use drchrono_update_allergy to change it or mark it inactive.

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

Inputs:

- `doctor` (`integer`, required): ID of the doctor who diagnosed the allergy. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `patient` (`integer`, required): ID of the patient with the allergy. Get patient IDs from drchrono_list_patients. Example: 12345.
- `description` (`string`, optional): What the patient is allergic to. Example: Penicillin.
- `notes` (`string`, optional): Additional notes from the provider. Example: Reported by patient.
- `reaction` (`string`, optional): Short description of the reaction. Example: Hives.
- `rxnorm` (`string`, optional): RxNorm code of the drug, for a drug allergy. Example: 7980.
- `snomed_code` (`string`, optional): SNOMED code for the allergy. Example: 91936005.
- `snomed_reaction` (`string`, optional): SNOMED code for the reaction, from the PHIN VADS reaction value set. Example: 247472004.
- `status` (`string`, optional): Allergy status: active or inactive. DrChrono uses active when this is omitted on create. Example: active. One of: `active`, `inactive`.
- `verification_status` (`string`, optional): Verification status: confirmed, unconfirmed, refuted or entered-in-error. Example: confirmed. One of: `confirmed`, `unconfirmed`, `refuted`, `entered-in-error`.

Example input: `{"doctor":12345,"patient":12345}`

### `drchrono_create_appointment`

Create Appointment · Write

Book an appointment on a doctor's calendar for a patient, office and exam room.
Returns the created appointment with its id.
Check open slots first with drchrono_get_availability. Set duration, or a profile from drchrono_list_appointment_profiles. Use drchrono_update_appointment to reschedule or change status.

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

Inputs:

- `doctor` (`integer`, required): ID of the doctor whose calendar the appointment is on. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `exam_room` (`integer`, required): Index of the exam room within the office (the index field of an entry in the office's exam_rooms list from drchrono_get_office). Example: 1.
- `office` (`integer`, required): ID of the office where the appointment takes place. Get office IDs from drchrono_list_offices. Example: 12345.
- `patient` (`integer`, required): ID of the patient the appointment is for. Get patient IDs from drchrono_list_patients. Example: 12345.
- `scheduled_time` (`string`, required): Start time of the appointment as an ISO 8601 timestamp in the office's local time. Example: 2026-11-02T09:30:00.
- `allow_overlapping` (`boolean`, optional): Set to true to skip the overlap check and book even if the slot overlaps another appointment. Example: false.
- `color` (`string`, optional): Calendar color as a hex code. Example: #3366CC.
- `duration` (`integer`, optional): Length of the appointment in minutes. Optional when profile is set, because the profile supplies a default. Example: 30.
- `icd10_codes` (`array`, optional): ICD-10 diagnosis codes for the visit, as a list of strings. Example: ["Z00.00"].
- `is_walk_in` (`boolean`, optional): Set to true to mark the appointment as a walk-in. Example: false.
- `notes` (`string`, optional): Free-text appointment notes. Example: Patient prefers morning visits.
- `profile` (`integer`, optional): ID of an appointment profile (from drchrono_list_appointment_profiles). The profile sets default color, duration and reason on creation, which explicit values override. Example: 12345.
- `reason` (`string`, optional): Reason for the visit. Example: Annual physical.
- `status` (`string`, optional): Appointment status: Arrived, Checked In, Checked In Online, In Room, In Session, Complete, Confirmed, Not Confirmed, Rescheduled, Cancelled or No Show (empty string clears it). Example: Confirmed. One of: ``, `Arrived`, `Checked In`, `Checked In Online`, `In Room`, `In Session`, `Complete`, `Confirmed`, `Not Confirmed`, `Rescheduled`, `Cancelled`, `No Show`.

Example input: `{"doctor":12345,"exam_room":1,"office":12345,"patient":12345,"scheduled_time":"<scheduled_time>"}`

### `drchrono_create_medication`

Create Medication · Write

Add a medication to a patient's medication list. This records the medication; it does not send an eRx.
Returns the created medication with its id.
Use drchrono_update_medication to change or stop it.

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

Inputs:

- `doctor` (`integer`, required): ID of the prescribing doctor. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `patient` (`integer`, required): ID of the patient taking the medication. Get patient IDs from drchrono_list_patients. Example: 12345.
- `appointment` (`integer`, optional): ID of the appointment of the initial prescription. Get appointment IDs from drchrono_list_appointments. Example: 12345.
- `date_prescribed` (`string`, optional): Date prescribed (YYYY-MM-DD). Example: 2026-10-01.
- `date_started_taking` (`string`, optional): Date the patient started taking it (YYYY-MM-DD). Example: 2026-10-02.
- `date_stopped_taking` (`string`, optional): Date the patient stopped taking it (YYYY-MM-DD). Example: 2026-12-31.
- `daw` (`boolean`, optional): Set to true if the prescription must be dispensed as written, without substitution. Example: false.
- `dispense_quantity` (`number`, optional): Quantity to dispense. Example: 30.
- `dosage_quantity` (`string`, optional): Dose amount per administration, as a number or formatted string. Example: 1.
- `dosage_units` (`string`, optional): Units for dosage_quantity. Example: tablet.
- `frequency` (`string`, optional): How often the medication is taken. Example: once daily.
- `indication` (`string`, optional): Why the medication is taken. Example: Hypertension.
- `name` (`string`, optional): Medication name, usually drug, strength and form. Example: Lisinopril 10 mg tablet.
- `ndc` (`string`, optional): National Drug Code. Example: 00000-0000-00.
- `notes` (`string`, optional): Additional notes from the provider. Example: Recheck BP in 2 weeks.
- `number_refills` (`integer`, optional): Number of refills allowed. Example: 3.
- `order_status` (`string`, optional): How the medication was ordered, e.g. Ordered, Electronic eRx Sent, Phoned into Pharmacy, Paper Rx, Over the Counter, Prescribed by other Dr or Discontinued. Example: Prescribed by other Dr. One of: `Administered during visit`, `Discontinued`, `Electronic eRx Sent`, `Faxed to Pharmacy`, `Ordered`, `Over the Counter`, `Paper Rx`, `Phoned into Pharmacy`, `Prescribed by other Dr`, `Prescription Printed`.
- `prn` (`boolean`, optional): Set to true if the medication is taken only as needed. Example: false.
- `route` (`string`, optional): Route of administration. Example: oral.
- `rxnorm` (`string`, optional): RxNorm code for the medication. Example: 314076.
- `signature_note` (`string`, optional): Sig (directions to the patient). Example: Take 1 tablet by mouth daily.
- `status` (`string`, optional): Medication status: active or inactive. DrChrono uses active when this is omitted on create. Example: active. One of: `active`, `inactive`.

Example input: `{"doctor":12345,"patient":12345}`

### `drchrono_create_patient`

Create Patient · Write

Create a new patient in the practice. A primary doctor and gender are required.
Returns the created patient record, including its new id and chart ID.
DrChrono rejects likely duplicates unless allow_duplicates is true. Use drchrono_update_patient to change an existing patient.

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

Inputs:

- `doctor` (`integer`, required): ID of the patient's primary doctor. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `gender` (`string`, required): Patient's administrative gender. One of Male, Female, Other, UNK (unknown) or ASKU (asked, declined). Example: Female. One of: `Male`, `Female`, `Other`, `UNK`, `ASKU`.
- `address` (`string`, optional): Street address. Example: 123 Example St.
- `allow_duplicates` (`boolean`, optional): Set to true to skip DrChrono's duplicate-patient check. Example: false.
- `cell_phone` (`string`, optional): Patient's cell phone number. Example: (555) 555-0100.
- `chart_id` (`string`, optional): Chart ID for the patient. DrChrono generates one from the first and last name when it is left empty. Example: TEJA000001.
- `city` (`string`, optional): City. Example: Springfield.
- `date_of_birth` (`string`, optional): Date of birth in YYYY-MM-DD format. Example: 1980-01-01.
- `default_pharmacy` (`string`, optional): NCPDP ID of the patient's default pharmacy. Example: 1234567.
- `email` (`string`, optional): Patient's email address. Example: patient@example.com.
- `emergency_contact_name` (`string`, optional): Emergency contact's full name. Example: John Testcontact.
- `emergency_contact_phone` (`string`, optional): Emergency contact's phone number. Example: (555) 555-0103.
- `emergency_contact_relation` (`string`, optional): Emergency contact's relationship to the patient. Example: Spouse.
- `ethnicity` (`string`, optional): Ethnicity. One of blank, hispanic, not_hispanic or declined. Example: declined. One of: `blank`, `hispanic`, `not_hispanic`, `declined`.
- `first_name` (`string`, optional): Patient's first name. Example: Jane.
- `home_phone` (`string`, optional): Patient's home phone number. Example: (555) 555-0101.
- `last_name` (`string`, optional): Patient's last name. Example: Testpatient.
- `middle_name` (`string`, optional): Patient's middle name. Example: Q.
- `nick_name` (`string`, optional): Common name for the patient, shown instead of the first name when set. Example: Janie.
- `office_phone` (`string`, optional): Patient's work phone number. Example: (555) 555-0102.
- `patient_payment_profile` (`string`, optional): Default payment profile for the patient: Cash, Insurance, Insurance Out of Network, Auto Accident or Worker's Comp. The matching insurance must already be on file for the insurance-based profiles. Example: Cash. One of: `Cash`, `Insurance`, `Insurance Out of Network`, `Auto Accident`, `Worker's Comp`.
- `patient_status` (`string`, optional): Patient status: A (active), I (inactive) or D (inactive, deceased). Example: A. One of: `A`, `I`, `D`.
- `preferred_language` (`string`, optional): Preferred language as an ISO 639 alpha-3 code: blank, eng, zho, fra, ita, jpn, por, rus, spa, other, unknown or declined. Example: eng. One of: `blank`, `eng`, `zho`, `fra`, `ita`, `jpn`, `por`, `rus`, `spa`, `other`, `unknown`, `declined`.
- `primary_insurance` (`object`, optional): The patient's primary insurance as an object. Common keys: insurance_company, insurance_payer_id (find payers with drchrono_search_insurance_payers), insurance_plan_name, insurance_id_number, insurance_group_number, is_subscriber_the_patient and patient_relationship_to_subscriber. DrChrono does not validate insurance data, and changing it can make past appointments unbillable. Example: {"insurance_company": "Example Health Plan", "insurance_payer_id": "12345", "insurance_id_number": "ABC123456", "is_subscriber_the_patient": true}.
- `race` (`string`, optional): Race. One of blank, indian, asian, black, hawaiian, white, other or declined. Example: declined. One of: `blank`, `indian`, `asian`, `black`, `hawaiian`, `white`, `other`, `declined`.
- `referring_source` (`string`, optional): How the patient was referred to the practice. Example: Website.
- `secondary_insurance` (`object`, optional): The patient's secondary insurance as an object. Common keys: insurance_company, insurance_payer_id (find payers with drchrono_search_insurance_payers), insurance_plan_name, insurance_id_number, insurance_group_number, is_subscriber_the_patient and patient_relationship_to_subscriber. DrChrono does not validate insurance data, and changing it can make past appointments unbillable. Example: {"insurance_company": "Example Health Plan", "insurance_payer_id": "12345", "insurance_id_number": "ABC123456", "is_subscriber_the_patient": true}.
- `state` (`string`, optional): Two-letter US state abbreviation. Example: CA.
- `zip_code` (`string`, optional): ZIP code. Example: 90210.

Example input: `{"doctor":12345,"gender":"Male"}`

### `drchrono_create_problem`

Create Problem · Write

Add a problem (diagnosis) to a patient's problem list.
Returns the created problem with its id.
Use drchrono_update_problem to change status, for example to resolved.

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

Inputs:

- `doctor` (`integer`, required): ID of the doctor recording the problem. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `patient` (`integer`, required): ID of the patient the problem belongs to. Get patient IDs from drchrono_list_patients. Example: 12345.
- `appointment` (`integer`, optional): ID of the appointment where the problem was recorded. Get appointment IDs from drchrono_list_appointments. Example: 12345.
- `date_diagnosis` (`string`, optional): Date the problem was diagnosed (YYYY-MM-DD). Example: 2025-06-15.
- `date_onset` (`string`, optional): Date the problem started (YYYY-MM-DD). Example: 2025-06-01.
- `description` (`string`, optional): Description of the problem. Example: High blood pressure.
- `icd_code` (`string`, optional): ICD-9 or ICD-10 code for the problem. Example: I10.
- `icd_version` (`string`, optional): ICD version of icd_code: 9 or 10. DrChrono uses 10 when this is omitted on create. Example: 10. One of: `9`, `10`.
- `name` (`string`, optional): Name of the problem. Example: Essential hypertension.
- `notes` (`string`, optional): Additional notes from the provider. Example: Monitor monthly.
- `snomed_ct_code` (`string`, optional): SNOMED CT code for the problem. Example: 38341003.
- `status` (`string`, optional): Problem status: active, inactive or resolved. DrChrono uses active when this is omitted on create. Example: active. One of: `active`, `inactive`, `resolved`.
- `verification_status` (`string`, optional): Verification status: unconfirmed, provisional, differential, confirmed, refuted or entered-in-error. Example: confirmed. One of: `unconfirmed`, `provisional`, `differential`, `confirmed`, `refuted`, `entered-in-error`.

Example input: `{"doctor":12345,"patient":12345}`

### `drchrono_create_task`

Create Task · Write

Create a task in the practice's task center, optionally assigned to a user or group and linked to a patient or appointment.
Returns the created task with its id.
Get a status ID from drchrono_list_task_statuses first. Use drchrono_create_task_note to add a comment to an existing task.

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

Inputs:

- `status` (`integer`, required): Task status ID. Get IDs from drchrono_list_task_statuses. Example: 12345.
- `title` (`string`, required): Task title. Example: Call patient with lab results.
- `archived` (`boolean`, optional): Set to true to archive the task. Example: false.
- `assignee_group` (`integer`, optional): ID of the user group to assign the task to. Set this or assignee_user. Example: 12345.
- `assignee_user` (`string`, optional): ID of the user to assign the task to (from drchrono_list_users). Set this or assignee_group. Example: 12345.
- `associated_items` (`array`, optional): Records to link to the task, as a list of objects with type and value. type is one of Appointment, Patient, Message, Message Thread, Document, Lab order, Lab result, Lab document or Communication; value is that record's ID. Example: [{"type": "Patient", "value": 12345}].
- `category` (`integer`, optional): Task category ID. Get IDs from drchrono_list_task_categories. Example: 12345.
- `due_time` (`string`, optional): When the task is due, as an ISO 8601 timestamp. Sent as due_date.time. Example: 2026-11-02T17:00:00.
- `priority` (`string`, optional): Priority: 10 (Low), 20 (Medium), 30 (High) or 40 (Urgent). Example: 20. One of: `10`, `20`, `30`, `40`.

Example input: `{"status":12345,"title":"<title>"}`

### `drchrono_create_task_note`

Create Task Note · Write

Add a note (comment) to an existing task.
Returns the created note with its id.
Use drchrono_list_task_notes to read a task's notes.

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

Inputs:

- `task` (`integer`, required): ID of the task to comment on (from drchrono_list_tasks). Example: 12345.
- `text` (`string`, required): Content of the note. Example: Left voicemail for the patient.

Example input: `{"task":12345,"text":"<text>"}`

### `drchrono_update_allergy`

Update Allergy · Write

Update selected fields on a patient allergy, such as marking it inactive. Only the fields you send change.
Returns an empty response (HTTP 204) on success; call drchrono_get_allergy to read the result.
Use drchrono_create_allergy to record a new allergy.

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

Inputs:

- `id` (`integer`, required): ID of the allergy. Get it from drchrono_list_allergies. Example: 12345.
- `description` (`string`, optional): What the patient is allergic to. Example: Penicillin.
- `notes` (`string`, optional): Additional notes from the provider. Example: Reported by patient.
- `reaction` (`string`, optional): Short description of the reaction. Example: Hives.
- `rxnorm` (`string`, optional): RxNorm code of the drug, for a drug allergy. Example: 7980.
- `snomed_code` (`string`, optional): SNOMED code for the allergy. Example: 91936005.
- `snomed_reaction` (`string`, optional): SNOMED code for the reaction, from the PHIN VADS reaction value set. Example: 247472004.
- `status` (`string`, optional): Allergy status: active or inactive. DrChrono uses active when this is omitted on create. Example: active. One of: `active`, `inactive`.
- `verification_status` (`string`, optional): Verification status: confirmed, unconfirmed, refuted or entered-in-error. Example: confirmed. One of: `confirmed`, `unconfirmed`, `refuted`, `entered-in-error`.

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

### `drchrono_update_appointment`

Update Appointment · Write

Update selected fields on an appointment, such as rescheduling it, changing its status (e.g. Arrived, Cancelled) or editing the reason. Only the fields you send change.
Returns an empty response (HTTP 204) on success; call drchrono_get_appointment to read the result.
Use drchrono_create_appointment to book a new visit.

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

Inputs:

- `id` (`string`, required): ID of the appointment. Get it from drchrono_list_appointments. Example: 12345.
- `allow_overlapping` (`boolean`, optional): Set to true to skip the overlap check and book even if the slot overlaps another appointment. Example: false.
- `color` (`string`, optional): Calendar color as a hex code. Example: #3366CC.
- `doctor` (`integer`, optional): ID of the doctor whose calendar the appointment is on. Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `duration` (`integer`, optional): Length of the appointment in minutes. Optional when profile is set, because the profile supplies a default. Example: 30.
- `exam_room` (`integer`, optional): Index of the exam room within the office (the index field of an entry in the office's exam_rooms list from drchrono_get_office). Example: 1.
- `icd10_codes` (`array`, optional): ICD-10 diagnosis codes for the visit, as a list of strings. Example: ["Z00.00"].
- `is_walk_in` (`boolean`, optional): Set to true to mark the appointment as a walk-in. Example: false.
- `notes` (`string`, optional): Free-text appointment notes. Example: Patient prefers morning visits.
- `office` (`integer`, optional): ID of the office where the appointment takes place. Get office IDs from drchrono_list_offices. Example: 12345.
- `patient` (`integer`, optional): ID of the patient the appointment is for. Get patient IDs from drchrono_list_patients. Example: 12345.
- `profile` (`integer`, optional): ID of an appointment profile (from drchrono_list_appointment_profiles). The profile sets default color, duration and reason, which explicit values override. Example: 12345.
- `reason` (`string`, optional): Reason for the visit. Example: Annual physical.
- `scheduled_time` (`string`, optional): Start time of the appointment as an ISO 8601 timestamp in the office's local time. Example: 2026-11-02T09:30:00.
- `status` (`string`, optional): Appointment status: Arrived, Checked In, Checked In Online, In Room, In Session, Complete, Confirmed, Not Confirmed, Rescheduled, Cancelled or No Show (empty string clears it). Example: Confirmed. One of: ``, `Arrived`, `Checked In`, `Checked In Online`, `In Room`, `In Session`, `Complete`, `Confirmed`, `Not Confirmed`, `Rescheduled`, `Cancelled`, `No Show`.

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

### `drchrono_update_medication`

Update Medication · Write

Update selected fields on a patient medication, such as setting a stop date or marking it inactive. Only the fields you send change.
Returns an empty response (HTTP 204) on success; call drchrono_get_medication to read the result.
Use drchrono_create_medication to add a new medication.

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

Inputs:

- `id` (`integer`, required): ID of the medication. Get it from drchrono_list_medications. Example: 12345.
- `appointment` (`integer`, optional): ID of the appointment of the initial prescription. Get appointment IDs from drchrono_list_appointments. Example: 12345.
- `date_prescribed` (`string`, optional): Date prescribed (YYYY-MM-DD). Example: 2026-10-01.
- `date_started_taking` (`string`, optional): Date the patient started taking it (YYYY-MM-DD). Example: 2026-10-02.
- `date_stopped_taking` (`string`, optional): Date the patient stopped taking it (YYYY-MM-DD). Example: 2026-12-31.
- `daw` (`boolean`, optional): Set to true if the prescription must be dispensed as written, without substitution. Example: false.
- `dispense_quantity` (`number`, optional): Quantity to dispense. Example: 30.
- `dosage_quantity` (`string`, optional): Dose amount per administration, as a number or formatted string. Example: 1.
- `dosage_units` (`string`, optional): Units for dosage_quantity. Example: tablet.
- `frequency` (`string`, optional): How often the medication is taken. Example: once daily.
- `indication` (`string`, optional): Why the medication is taken. Example: Hypertension.
- `name` (`string`, optional): Medication name, usually drug, strength and form. Example: Lisinopril 10 mg tablet.
- `ndc` (`string`, optional): National Drug Code. Example: 00000-0000-00.
- `notes` (`string`, optional): Additional notes from the provider. Example: Recheck BP in 2 weeks.
- `number_refills` (`integer`, optional): Number of refills allowed. Example: 3.
- `order_status` (`string`, optional): How the medication was ordered, e.g. Ordered, Electronic eRx Sent, Phoned into Pharmacy, Paper Rx, Over the Counter, Prescribed by other Dr or Discontinued. Example: Prescribed by other Dr. One of: `Administered during visit`, `Discontinued`, `Electronic eRx Sent`, `Faxed to Pharmacy`, `Ordered`, `Over the Counter`, `Paper Rx`, `Phoned into Pharmacy`, `Prescribed by other Dr`, `Prescription Printed`.
- `prn` (`boolean`, optional): Set to true if the medication is taken only as needed. Example: false.
- `route` (`string`, optional): Route of administration. Example: oral.
- `rxnorm` (`string`, optional): RxNorm code for the medication. Example: 314076.
- `signature_note` (`string`, optional): Sig (directions to the patient). Example: Take 1 tablet by mouth daily.
- `status` (`string`, optional): Medication status: active or inactive. DrChrono uses active when this is omitted on create. Example: active. One of: `active`, `inactive`.

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

### `drchrono_update_patient`

Update Patient · Write

Update selected fields on an existing patient. Only the fields you send change.
Returns an empty response (HTTP 204) on success; call drchrono_get_patient to read the result.
Use drchrono_create_patient to add a new patient.

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

Inputs:

- `id` (`integer`, required): ID of the patient. Get it from drchrono_list_patients. Example: 12345.
- `address` (`string`, optional): Street address. Example: 123 Example St.
- `cell_phone` (`string`, optional): Patient's cell phone number. Example: (555) 555-0100.
- `chart_id` (`string`, optional): Chart ID for the patient. DrChrono generates one from the first and last name when it is left empty. Example: TEJA000001.
- `city` (`string`, optional): City. Example: Springfield.
- `date_of_birth` (`string`, optional): Date of birth in YYYY-MM-DD format. Example: 1980-01-01.
- `default_pharmacy` (`string`, optional): NCPDP ID of the patient's default pharmacy. Example: 1234567.
- `doctor` (`integer`, optional): ID of the patient's primary doctor (to reassign the patient). Get doctor IDs from drchrono_list_doctors. Example: 12345.
- `email` (`string`, optional): Patient's email address. Example: patient@example.com.
- `emergency_contact_name` (`string`, optional): Emergency contact's full name. Example: John Testcontact.
- `emergency_contact_phone` (`string`, optional): Emergency contact's phone number. Example: (555) 555-0103.
- `emergency_contact_relation` (`string`, optional): Emergency contact's relationship to the patient. Example: Spouse.
- `ethnicity` (`string`, optional): Ethnicity. One of blank, hispanic, not_hispanic or declined. Example: declined. One of: `blank`, `hispanic`, `not_hispanic`, `declined`.
- `first_name` (`string`, optional): Patient's first name. Example: Jane.
- `gender` (`string`, optional): Patient's administrative gender. One of Male, Female, Other, UNK (unknown) or ASKU (asked, declined). Example: Female. One of: `Male`, `Female`, `Other`, `UNK`, `ASKU`.
- `home_phone` (`string`, optional): Patient's home phone number. Example: (555) 555-0101.
- `last_name` (`string`, optional): Patient's last name. Example: Testpatient.
- `middle_name` (`string`, optional): Patient's middle name. Example: Q.
- `nick_name` (`string`, optional): Common name for the patient, shown instead of the first name when set. Example: Janie.
- `office_phone` (`string`, optional): Patient's work phone number. Example: (555) 555-0102.
- `patient_payment_profile` (`string`, optional): Default payment profile for the patient: Cash, Insurance, Insurance Out of Network, Auto Accident or Worker's Comp. The matching insurance must already be on file for the insurance-based profiles. Example: Cash. One of: `Cash`, `Insurance`, `Insurance Out of Network`, `Auto Accident`, `Worker's Comp`.
- `patient_status` (`string`, optional): Patient status: A (active), I (inactive) or D (inactive, deceased). Example: A. One of: `A`, `I`, `D`.
- `preferred_language` (`string`, optional): Preferred language as an ISO 639 alpha-3 code: blank, eng, zho, fra, ita, jpn, por, rus, spa, other, unknown or declined. Example: eng. One of: `blank`, `eng`, `zho`, `fra`, `ita`, `jpn`, `por`, `rus`, `spa`, `other`, `unknown`, `declined`.
- `primary_insurance` (`object`, optional): The patient's primary insurance as an object. Common keys: insurance_company, insurance_payer_id (find payers with drchrono_search_insurance_payers), insurance_plan_name, insurance_id_number, insurance_group_number, is_subscriber_the_patient and patient_relationship_to_subscriber. DrChrono does not validate insurance data, and changing it can make past appointments unbillable. Example: {"insurance_company": "Example Health Plan", "insurance_payer_id": "12345", "insurance_id_number": "ABC123456", "is_subscriber_the_patient": true}.
- `race` (`string`, optional): Race. One of blank, indian, asian, black, hawaiian, white, other or declined. Example: declined. One of: `blank`, `indian`, `asian`, `black`, `hawaiian`, `white`, `other`, `declined`.
- `referring_source` (`string`, optional): How the patient was referred to the practice. Example: Website.
- `secondary_insurance` (`object`, optional): The patient's secondary insurance as an object. Common keys: insurance_company, insurance_payer_id (find payers with drchrono_search_insurance_payers), insurance_plan_name, insurance_id_number, insurance_group_number, is_subscriber_the_patient and patient_relationship_to_subscriber. DrChrono does not validate insurance data, and changing it can make past appointments unbillable. Example: {"insurance_company": "Example Health Plan", "insurance_payer_id": "12345", "insurance_id_number": "ABC123456", "is_subscriber_the_patient": true}.
- `state` (`string`, optional): Two-letter US state abbreviation. Example: CA.
- `zip_code` (`string`, optional): ZIP code. Example: 90210.

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

### `drchrono_update_problem`

Update Problem · Write

Update selected fields on a patient problem, such as marking it resolved. Only the fields you send change.
Returns an empty response (HTTP 204) on success; call drchrono_get_problem to read the result.
Use drchrono_create_problem to add a new problem.

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

Inputs:

- `id` (`integer`, required): ID of the problem. Get it from drchrono_list_problems. Example: 12345.
- `appointment` (`integer`, optional): ID of the appointment where the problem was recorded. Get appointment IDs from drchrono_list_appointments. Example: 12345.
- `date_diagnosis` (`string`, optional): Date the problem was diagnosed (YYYY-MM-DD). Example: 2025-06-15.
- `date_onset` (`string`, optional): Date the problem started (YYYY-MM-DD). Example: 2025-06-01.
- `description` (`string`, optional): Description of the problem. Example: High blood pressure.
- `icd_code` (`string`, optional): ICD-9 or ICD-10 code for the problem. Example: I10.
- `icd_version` (`string`, optional): ICD version of icd_code: 9 or 10. DrChrono uses 10 when this is omitted on create. Example: 10. One of: `9`, `10`.
- `name` (`string`, optional): Name of the problem. Example: Essential hypertension.
- `notes` (`string`, optional): Additional notes from the provider. Example: Monitor monthly.
- `snomed_ct_code` (`string`, optional): SNOMED CT code for the problem. Example: 38341003.
- `status` (`string`, optional): Problem status: active, inactive or resolved. DrChrono uses active when this is omitted on create. Example: active. One of: `active`, `inactive`, `resolved`.
- `verification_status` (`string`, optional): Verification status: unconfirmed, provisional, differential, confirmed, refuted or entered-in-error. Example: confirmed. One of: `unconfirmed`, `provisional`, `differential`, `confirmed`, `refuted`, `entered-in-error`.

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

### `drchrono_update_task`

Update Task · Write

Update selected fields on a task, such as its status, assignee or due date. Only the fields you send change.
Returns an empty response (HTTP 204) on success; call drchrono_get_task to read the result.
Use drchrono_create_task to add a new task.

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

Inputs:

- `id` (`integer`, required): ID of the task. Get it from drchrono_list_tasks. Example: 12345.
- `archived` (`boolean`, optional): Set to true to archive the task. Example: false.
- `assignee_group` (`integer`, optional): ID of the user group to assign the task to. Set this or assignee_user. Example: 12345.
- `assignee_user` (`string`, optional): ID of the user to assign the task to (from drchrono_list_users). Set this or assignee_group. Example: 12345.
- `associated_items` (`array`, optional): Records to link to the task, as a list of objects with type and value. type is one of Appointment, Patient, Message, Message Thread, Document, Lab order, Lab result, Lab document or Communication; value is that record's ID. Example: [{"type": "Patient", "value": 12345}].
- `category` (`integer`, optional): Task category ID. Get IDs from drchrono_list_task_categories. Example: 12345.
- `due_time` (`string`, optional): When the task is due, as an ISO 8601 timestamp. Sent as due_date.time. Example: 2026-11-02T17:00:00.
- `priority` (`string`, optional): Priority: 10 (Low), 20 (Medium), 30 (High) or 40 (Urgent). Example: 20. One of: `10`, `20`, `30`, `40`.
- `status` (`integer`, optional): Task status ID. Get IDs from drchrono_list_task_statuses. Example: 12345.
- `title` (`string`, optional): Task title. Example: Call patient with lab results.

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

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