Nirmitee.io
DrChronoEHR IntegrationAPI Integration

DrChrono API: a guide for product teams (2026)

October 28, 202619 min readUpdated Oct 28, 2026
Written by
Jitendra Choudhary
Jitendra Choudhary

CTO & Co-Founder

CTO & Co-Founder at Nirmitee.io. Architects healthcare integrations across FHIR, SMART on FHIR, ABDM and NHCX, writing from production experience taking hospital software from sandbox to go-live.

DrChrono API: a guide for product teams (2026)

Updated October 2026

The DrChrono API is a REST API with OAuth 2.0, documented in public at app.drchrono.com/api-docs. A new app can only connect to users in its own DrChrono account until DrChrono accepts you as a business partner. If you sell software to many DrChrono practices, the partner step is the first thing to plan for, ahead of any code.

This guide is for product and engineering teams deciding whether and how to build on DrChrono. It covers access, auth, limits, webhooks, what you can write back, FHIR, fees and the failures we see most often. Every DrChrono fact here comes from DrChrono's own public pages, read on 28 October 2026, and the sources are listed at the end. If you want a team to build it with you, see our DrChrono integration services.

Key takeaways

  • DrChrono's main API is a proprietary REST API (version v4, "Hunt Valley"). The schema we read lists 168 paths and 323 operations across scheduling, patients, clinical, labs, billing, tasks and messages.
  • New API apps start in private mode. Private apps can only connect to users in the same account or practice group. Public mode, which lets you connect to other practices, is reserved for business partners.
  • Access tokens last 48 hours. Refresh tokens get you a new one without asking the user again.
  • The default rate limit is 500 calls per hour per application, reset at the top of each hour. Over the limit you get HTTP 429.
  • Webhooks exist for appointments, patients, clinical note lock and unlock, lab orders, billing line items, tasks and a few others. Failed deliveries are retried three times, at 1, 3 and 7 hours.
  • Clinical notes are read-only as a whole. You write note content through clinical note field values.
  • DrChrono's certified FHIR API is a patient-access service run with Dynamic Health IT's ConnectEHR, built from C-CDAs. It is not a general developer platform for writing data.
  • DrChrono may charge fees for API use. The docs do not publish prices. Ask api@drchrono.com.

DrChrono API facts at a glance (October 2026)

Question Answer Source
Is there a public API? Yes. A REST API with OAuth 2.0, JSON responses DrChrono API docs
Current version v4 "Hunt Valley" (v4 started 09/2018; v2 and v3 still listed) API docs, version map
Base URL https://app.drchrono.com API docs, Requests
Authorization URL https://app.drchrono.com/o/authorize/ OpenAPI schema
Token URL https://app.drchrono.com/o/token/ OpenAPI schema
Grant type Authorization code, with refresh tokens API docs, Authorization
Access token life 48 hours API docs, Refreshing an access token
Rate limit 500 calls per hour per app by default, HTTP 429 when exceeded API docs, Rate Limits
Page size 250 by default; 20 max on /api/appointments; 50 max with verbose=true API docs, Responses
Who can connect Private apps: own account or practice group only. Public apps: business partners only Support: Private vs Public API application
Webhooks Yes, about 27 event types, set up per API app API docs, Webhooks
FHIR Patient access FHIR R4 through ConnectEHR (Dynamic Health IT) Support: FHIR articles, ONC page
Fees "Company may charge a fee"; contact api@drchrono.com API license terms, Fees
Support contact api@drchrono.com Support: Contacting DrChrono Partner Support
Certification DrChrono EHR 11.0, ONC certified 05/31/2022, includes 170.315(g)(10) Support: Is DrChrono ONC Certified Health IT?

Does DrChrono have an API?

Yes. DrChrono publishes a REST API reference at app.drchrono.com/api-docs. The page is rendered from an OpenAPI schema that anyone can download from https://app.drchrono.com/openapi-schema. On 28 October 2026 that schema was labelled "v4 - Hunt Valley" and listed 168 paths and 323 operations, 159 of which create, change or delete data.

DrChrono's license terms name two kinds of API. "FHIR APIs" are the HL7 standard APIs. "Proprietary APIs" are DrChrono's own interfaces. Almost everything a product team builds on, such as booking, patient sync, notes, labs and billing, uses the proprietary REST API. The FHIR side is narrower, and we cover it below.

DrChrono's own getting-started steps are short: read the docs, log in and go to Account > API, and join the developer forum, a Google Group at groups.google.com/g/drchrono-api.

Private vs public apps: the access question that decides your plan

When you create an API application in DrChrono, it starts in private mode. DrChrono's support article says a private application "can only connect to a user from the same account or practice group". Private mode has no other API or webhook limits.

Public mode lets an app connect to DrChrono users outside its home account. DrChrono says public mode "is currently reserved for business partners" and is meant for "an organization or developer with multiple DrChrono clients". You apply through the partner form at partners.drchrono.com/become-a-partner, and the partnership team contacts you.

What this means for your plan:

  • One practice building for itself. A private app in that practice's own account is enough. The practice creates it, and its users authorize it.
  • A vendor selling to many practices. You need public mode. Start the partner conversation early, because it sits on your critical path. DrChrono does not publish how long partner review takes or what it costs. Ask before you commit dates to customers.
  • Credentials belong to a practice group. In a 2017 developer forum reply, a DrChrono engineer explained that each practice group has its own API key, so a second practice group needs its own credentials. Treat that as an older forum answer and confirm it for public apps.

To see the API page in DrChrono, a user needs the Settings staff permission. That detail comes from integration setup guides that other vendors publish for their customers, not from DrChrono, so confirm it in your test account.

New DrChrono apps start private. Reaching other practices means applying to the partner program.

How DrChrono API authentication works

DrChrono uses the OAuth 2.0 authorization code flow, the same base flow that SMART on FHIR builds on (see our guide to SMART on FHIR OAuth for clinical apps). There are three steps.

  1. Send the user to DrChrono. Usually a "Connect to DrChrono" button that links to:
https://app.drchrono.com/o/authorize/?redirect_uri=REDIRECT_URI_ENCODED&response_type=code&client_id=CLIENT_ID_ENCODED&scope=SCOPES_ENCODED
  1. The provider approves. DrChrono shows your app name and the scopes you asked for. On "Authorize", the user returns to your redirect URI with a code. On "Cancel", you get error=access_denied.
  2. Exchange the code. POST the code, grant_type=authorization_code, your redirect URI, client ID and client secret to https://app.drchrono.com/o/token/. You get an access_token, a refresh_token and expires_in.

Two details from the docs cause trouble in practice. The authorization code "expires extremely quickly" and works only once, so exchange it on the server before you render the next page. And access tokens last 48 hours, so store the refresh token and refresh in the background with grant_type=refresh_token.

How DrChrono OAuth works: exchange the code once, at once, and refresh before 48 hours.

Scopes

Scopes look like BASE_SCOPE:read or BASE_SCOPE:write. The docs name user, calendar, patients, patients:summary, billing, clinical and labs. The schema adds finer ones such as messages, tasks, settings and billing:patient-payment, for 22 in total.

If you leave out the scope parameter, DrChrono asks the user for every scope. The docs advise asking only for what you need. Their own example: a birthday email app needs patients:summary:read, while an online booking app needs at least patients:summary:read patients:summary:write calendar:read calendar:write clinical:read clinical:write.

Scopes are not the whole permission check

A scope only says what your app may ask for. DrChrono also checks the permissions of the user who authorized you, which a primary user grants inside the DrChrono web app. The docs put it this way: the user must authorize the app for the scopes, "and the user must have the appropriate permissions set." So a valid token can still get a 403 when the person who connected your app lacks the right staff permission. Plan for a short permission checklist that each practice runs before go-live.

Is there a DrChrono sandbox?

DrChrono's license terms grant developers access to "a dedicated test environment of the EHR" for testing the API, and the webhook docs mention apps that are still in test mode. The public docs do not explain how to request that environment, what test data it holds or how it differs from production. Ask api@drchrono.com, or your partner contact, how you get a test account before you plan your test phase.

What the DrChrono API covers

The schema groups endpoints into Administrative, Billing, Clinical, Practice Management and Audit. In product terms:

Area Main endpoints Notes from the docs
Scheduling /api/appointments, /api/availability, /api/appointment_profiles, /api/doctor_work_schedule, /api/office_work_schedule A list call needs since, occurred_since, date or date_range. date_range is capped at 190 days
Patients /api/patients, /api/patients_summary, /api/patients_list (async batch) /api/patients/{id}/ccda returns a C-CDA
Clinical /api/clinical_notes, /api/clinical_note_field_values, /api/problems, /api/medications, /api/allergies, /api/documents Clinical notes are read-only as a whole
Labs /api/lab_orders, /api/lab_results, /api/lab_documents, /api/lab_tests Create, update and delete supported
Billing /api/line_items, /api/transactions, /api/eligibility_checks, /api/eobs, /api/patient_payments, /api/insurances insurances and procedures are read-only
Tasks and messages /api/tasks, /api/task_notes, /api/messages, /api/patient_messages
Telehealth /api/telehealth_appointments
Audit /api/audit_log Needs billing:read and a date filter

Scheduling: availability, booking and conflicts

GET /api/availability returns open slots for a date or date range, filtered by office, doctor, exam room and visit length. To book, POST /api/appointments needs doctor, exam_room, office, patient and scheduled_time. If the time overlaps an existing appointment, DrChrono returns 409 with "Scheduled time overlaps with an existing appointment". Your booking flow should treat a 409 as "slot taken, offer another time".

Appointment status is a fixed list (for example Confirmed, Arrived, Checked In, In Room, In Session, Complete, Cancelled, No Show, Rescheduled) plus any custom statuses the practice defines. Membership plan charges create placeholder appointments each billing cycle, and they come back by default. Pass exclude_membership=true so they do not show up as real visits in your product.

Patients and duplicates

Creating a patient needs at least gender and doctor. POST /api/patients runs a duplicate check, and an allow_duplicates flag overrides it. Do not set that flag by default. Search first by name, date of birth, chart ID or email, and only create a patient when the search finds no match.

For large historical loads, /api/patients_list and /api/clinical_notes_list work as async batches. You create a request, get a UUID back, and collect the results later. The docs suggest this for "large historical record loading".

DrChrono API rate limits

The docs say: "By default, applications are limited to 500 calls per hour." The limit resets at the top of each hour, and calls over it get HTTP 429. To raise it, contact api@drchrono.com or your account representative.

500 an hour is low for a multi-practice product, and pagination makes it tighter:

  • Most lists return 250 records a page.
  • /api/appointments returns at most 20 a page. A day with 400 appointments takes 20 calls.
  • With verbose=true, pages drop to 50.

Some ways to stay inside the budget:

  • Use webhooks for changes, and poll only to catch up.
  • Use since filters so each sync pulls only what changed.
  • Use the async _list endpoints for backfills.
  • Queue calls per app and back off on 429 until the next hour starts.
  • Ask DrChrono early for the limit you need, with a call estimate per practice.

The docs do not say whether the limit counts per app overall or per app per practice. The wording ("applications are limited") suggests per app. Confirm with DrChrono if you serve many practices from one public app.

Some third-party pages describe the limit as about 100 requests per minute. DrChrono's own docs say 500 per hour. Use DrChrono's number until DrChrono tells you otherwise.

DrChrono webhooks

Webhooks belong to an API application. You set the callback URL, a secret token and the events in the app's webhook section. Supported events, as listed in the docs:

  • Appointments: create, modify, delete
  • Patients: create, modify; allergy, problem, medication and flag create and modify
  • Clinical notes: lock, unlock
  • Lab orders: create, modify, delete
  • Billing: line item create, modify, delete; line item transaction delete; cash payment delete
  • Tasks: create, modify (including task note changes), delete
  • VACCINE_ADMINISTERED, sent when a vaccine consent form is signed

How delivery works, per the docs:

  • Verification. When you create a webhook or change its URL, DrChrono sends a GET with a msg parameter. You reply 200 with JSON {"secret_token": HMAC-SHA256(msg, your secret)}.
  • Headers. X-drchrono-event (the event name or PING), X-drchrono-signature and X-drchrono-delivery (a delivery ID). The body has receiver and object, where object uses the same format as the REST API.
  • Success. Only a 2xx response counts. A 302 counts as a failure.
  • Retries. Three retries, at 1, 3 and 7 hours after the event. After that, you redeliver by hand from the deliveries page.

Read the signature header with care. The docs describe X-drchrono-signature as the "Secret token associated with this webhook" and suggest checking incoming requests against your token. They do not describe a signature computed over the request body. If your security review needs proof that the body was not changed, ask DrChrono how to get it. Either way, treat each webhook as a hint, and fetch the current record from the API before you act on it.

If your endpoint is down for a short while, the first retry comes an hour later, and after 7 hours a missed event stays missed until someone redelivers it. Run a scheduled since poll as a safety net.

DrChrono retries a failed webhook at 1, 3 and 7 hours, then stops. A since poll is the safety net.

What can you write back to DrChrono?

Going by the methods in the schema, most record types are writable, with some exceptions:

  • Writable: appointments, patients, problems, medications, allergies, documents, lab orders and results, billing line items, patient payments, tasks, messages, consent forms, clinical note field values, and telehealth appointments.
  • Read-only: clinical notes as a whole, insurances, procedures, doctors, users, care plans, implantable devices and fee schedules.

For AI scribes and documentation tools, the main limit is that you cannot POST a finished clinical note. You write values into the fields of the note template (/api/clinical_note_field_values), tied to an appointment. Template fields can be marked required, which means "a note should not be locked unless a value is provided for this field". Map your output to the practice's templates before you promise "notes land in the chart". Our post on connecting AI agents to an EHR covers the wider design choices.

You can also upload a PDF or other file to the chart with POST /api/documents when structured fields are not needed.

Embedding inside DrChrono with an iframe

DrChrono lets an approved app appear inside the patient chart or the clinical note page as an iframe. You set the iframe URL and height in API management, and DrChrono reviews the app "to ensure that it is functional and secure" before approving it. You register each doctor with POST /api/iframe_integration.

When the iframe loads, DrChrono adds doctor_id, patient_id, practice_id, iat and a jwt to the URL. The JWT is signed with HMAC SHA-256 using your client secret. The docs say to validate it and use only the values inside it. Do not trust the plain query parameters.

FHIR and DrChrono: what exists and who it is for

DrChrono is ONC certified (DrChrono EHR 11.0, certified 05/31/2022), and its criteria include 170.315(g)(10), the standardized FHIR API. Its certification page lists "Dynamic Health IT, Inc ConnectEHR + BulkFHIR (version FHIR4-B)" as the software behind it.

DrChrono's support articles describe how it works:

  • The practice turns it on under Account > API > ConnectEHR Setup for FHIR. The articles frame this around the MIPS Promoting Interoperability measure.
  • When a clinician signs and locks a note, DrChrono sends a C-CDA to ConnectEHR, and the patient gets an email with an activation key.
  • The patient activates a FHIR R4 account and can connect third-party apps, including from the OnPatient portal.
  • DrChrono says it provides this to practices "at no additional charge".

For a product team, this means DrChrono's FHIR API is a patient-access channel built from documents. Data shows up after a note is locked, and it reaches patients through ConnectEHR so they can read their records. If your product needs to book visits, write to the chart or react to events, use the REST API. That is a different setup from EHRs where FHIR is the main developer route, such as Epic and eClinicalWorks. If you build a patient-facing app that reads records, the FHIR route may fit. Ask DrChrono or Dynamic Health IT for the practice's FHIR endpoint and app registration steps, because DrChrono's support pages do not publish them.

Fees for the certified API are a separate question. DrChrono's certification page says customers "may incur an annual one-time setup/maintenance fee" and third-party developers "may incur a one-time setup fee plus monthly, recurring fees based on transaction volume". The FHIR FAQ says the service costs practices nothing extra. The two statements may describe different setups. Ask before you budget.

Bulk data and EHI export

For a one-time move of a whole practice, such as a migration, DrChrono has an EHI Export feature. Its FAQ says a full practice export can take up to 14 business days and arrives as a ZIP of CSV files, in sets of 50 patients. Large practices have seen exports over 200 GB, and DrChrono's ETL team can ship one on a hard drive for an extra cost. This is a practice-run export, separate from the API, and it suits migrations better than ongoing sync.

How much does the DrChrono API cost?

DrChrono does not publish an API price list. Here is what its public pages say:

  • The API license terms say DrChrono "may charge a fee for Developer's use of the Services and/or for support", payable within 30 days of invoice. For details, contact api@drchrono.com.
  • Fees may be waived or treated differently for patient access use, at DrChrono's discretion.
  • The docs sort endpoints into "Level 1" and "Level 2" API calls. For example, patients and appointments are Level 1, and clinical notes, labs, insurances and line items are Level 2. The docs do not say what the levels mean for price or limits. Ask.
  • The certification page describes setup and monthly volume-based fees for third-party developers using the certified API.

Budget for DrChrono's fees, your own build, and the time partner approval takes. Get the first two in writing before you price your product for DrChrono customers.

Agreements, BAAs and terms worth reading

The API license terms apply as soon as you use the API. Points a product team should read with its lawyer:

  • Business associates. The terms say "Neither Party is the business associate of the other." If you handle PHI, you need your own business associate agreement with each practice, along with their written authorization.
  • No scraping. The terms ban screen scraping and data scraping of the service.
  • No card data. You may not send or store data covered by PCI standards through the service.
  • Limits can change. DrChrono may limit API calls or change the API without notice.
  • Marketing. You may list DrChrono as a supported EHR. Other public statements need written approval.
  • Ending the agreement. Either side can end it with 90 days' notice. Existing customers then get a 90-day wind-down.

Versions and deprecation

The version map lists v2 (from 08/2015), v3 (from 06/2016) and v4 (from 09/2018). DrChrono's stability policy says changes within a version only add endpoints, fields or optional query parameters. A deprecated version stays supported for one year, and after that it can be switched off at any time. Build on v4. If you inherit v2 or v3 code, plan the move.

Common DrChrono API errors and fixes

What you see Likely cause What to do
403 with a valid token The user who authorized you lacks the staff permission, or you did not request the scope Check the scope list in the token, then the user's permissions in DrChrono
Your app cannot connect a new practice Your app is in private mode Apply for public mode through the partner program
429 Past 500 calls this hour Queue and wait for the next hour; ask for a higher limit
409 on booking The slot overlaps an existing appointment Offer another slot from /api/availability
Appointment list returns only 20 /api/appointments page size cap Follow next links, and filter by since or date
Appointment list call fails No date filter Add since, occurred_since, date or date_range (max 190 days)
Fields missing from a response They are verbose-only Add verbose=true, and expect pages of 50
Request breaks after a 302 Your HTTP library resent it wrongly Resend the original method and headers to the Location URL
Login works once, then fails two days later Access token expired after 48 hours Refresh with the refresh token
Code exchange fails Code used twice or too late Exchange the code once, right away, on the server
Webhook not verified Wrong HMAC or wrong response shape Return 200 JSON with secret_token = HMAC-SHA256 of msg
Duplicate patients Created without searching first, or allow_duplicates=true Search, then create; leave the duplicate check on
Placeholder visits in reports Membership plan appointments Pass exclude_membership=true

DrChrono API integration checklist

  1. Decide whether you need private mode (one practice) or public mode (many practices). If public, contact DrChrono partnerships now.
  2. Ask DrChrono in writing about fees, the Level 1 and Level 2 pricing, your rate limit and test environment access.
  3. List the scopes you need, and nothing more.
  4. Write a permission checklist for each practice's admin.
  5. Store refresh tokens securely and refresh before the 48 hours run out.
  6. Set up webhooks for the events you need, and add a since poll to catch anything missed.
  7. Budget calls per practice against 500 an hour, and remember the 20-per-page cap on appointments.
  8. Handle 409 on booking and the patient duplicate check.
  9. For notes, map your output to template fields.
  10. Sign a BAA with each practice before you touch PHI.
  11. Test in the DrChrono test environment, and keep test results separate from production evidence.

If you would like help with any of these steps, our team builds DrChrono integrations for product companies. Start with the DrChrono integration service page, which covers scope, the access review and how we work.

Sources

All read on 28 October 2026.

  1. DrChrono API reference: https://app.drchrono.com/api-docs/ (rendered from https://app.drchrono.com/openapi-schema, "v4 - Hunt Valley")
  2. DrChrono API License Terms and Conditions (part of the API reference above)
  3. Why use DrChrono's API? (last modified 12/12/2025): https://support.drchrono.com/home/201883240-why-use-drchrono-s-api
  4. Private vs Public API application (last modified 10/02/2024): https://support.drchrono.com/home/private-vs-public-api-application
  5. Contacting DrChrono Partner Support (last modified 01/13/2025): https://support.drchrono.com/home/contact-drchrono-partner-support
  6. Is DrChrono ONC Certified Health IT? (last modified 01/15/2025): https://support.drchrono.com/home/360028249532-is-drchrono-cehrt-certified
  7. DrChrono ONC certification information: https://www.drchrono.com/meaningful-use-ehr/
  8. Overview of ConnectEHR (last modified 02/06/2025): https://support.drchrono.com/help/19009575165979
  9. FHIR API FAQ (last modified 02/06/2025): https://support.drchrono.com/help/19311277515291
  10. Set Up ConnectEHR for FHIR (last modified 11/21/2025): https://support.drchrono.com/home/set-up-connectehr-for-fhir
  11. What to Expect with FHIR APIs (last modified 02/06/2025): https://support.drchrono.com/home/19098823939739-what-to-expect-with-fhir-apis
  12. Connect Patient Dynamic FHIR API to OnPatient (last modified 06/11/2025): https://support.drchrono.com/home/how-to-connect-patient-dynamic-fhir-api-to-onpatient
  13. EHI Export: Overview and EHI Export FAQ (last modified 09/23/2025): https://support.drchrono.com/home/20260096536987-ehi-export-overview and https://support.drchrono.com/help/21368739016859
  14. DrChrono API developer forum thread, 2017: https://groups.google.com/g/drchrono-api/c/9qFr-0Hji70
  15. DrChrono partner form: https://partners.drchrono.com/become-a-partner

Planning an integration like this one? Our healthcare interoperability team builds and supports vendor API, FHIR and HL7 integrations for product companies. Talk to our team to scope yours.

Ready to scale?

Talk to our healthcare engineering team about building, integrating, and shipping faster.

Frequently Asked Questions

Does DrChrono have a public API?

Yes. DrChrono publishes a REST API reference at app.drchrono.com/api-docs, with OAuth 2.0 authorization and JSON responses. The current version is v4, "Hunt Valley". Anyone can read the docs. To connect to practices outside your own account, you need DrChrono to switch your app to public mode, which is reserved for business partners.

How do I get DrChrono API credentials?

Log in to DrChrono, go to Account > API and create an API application. DrChrono issues a client ID and client secret. The app starts in private mode and can only connect users in that account or practice group. For other practices, apply to the DrChrono partner program through partners.drchrono.com/become-a-partner.

What is the DrChrono API rate limit?

By default, 500 calls per hour per application. The count resets at the top of each hour, and calls over the limit get HTTP 429. DrChrono's docs say to contact api@drchrono.com or your account representative for a higher limit. The docs do not publish how high it can go.

Is the DrChrono API free?

DrChrono does not publish prices. Its API license terms say DrChrono may charge fees for API use and support, and they point to api@drchrono.com for details. Patient access use may be exempt at DrChrono's discretion. The ONC certification page mentions setup and monthly volume-based fees for third-party developers.

Does DrChrono support FHIR?

Yes, for patient access. DrChrono's ONC-certified FHIR R4 API runs on Dynamic Health IT's ConnectEHR. The practice sets it up, and data arrives from C-CDAs when notes are signed and locked. It suits patient-facing apps that read records. For booking, chart writes or events, use the REST API.

Does DrChrono have webhooks?

Yes. Each API application can register a callback URL, a secret token and events such as appointment, patient, clinical note lock, lab order, line item and task changes. DrChrono verifies the URL with an HMAC challenge. It retries failed deliveries three times, at 1, 3 and 7 hours, and after that you redeliver by hand.

Can I write clinical notes to DrChrono through the API?

Not as a whole note. The clinical notes endpoint is read-only. You write into the note's template fields with the clinical note field values endpoint, tied to an appointment, or upload a file to the chart with the documents endpoint. Map your content to each practice's templates first.

Is there a DrChrono sandbox?

DrChrono's API terms grant developers a dedicated test environment, and the webhook docs mention apps in test mode. The public docs do not explain how to request it or what data it holds. Ask api@drchrono.com or your partner contact before you plan your test phase.
Share