Skip to main content
POST
Book an appointment

Authorizations

Authorization
string
header
required

Marketplace API key

Headers

idempotency-key
string

Client-generated UUID. Strongly recommended: on a live calendar a duplicate appointment is worse than a slow response. Sending it is also a request for exactly-once — if that cannot be honoured the write is refused (503 idempotency_unavailable) rather than downgraded.

X-Organization-Id
string
required

Target clinic organization ID

Body

application/json
patientId
string
required

Patient ID (pat_…)

providerId
string
required

Provider ID (prv_…)

facilityId
string
required

Facility ID (fac_…)

appointmentTypeId
string
required

Appointment type ID (atp_…)

startsAt
string
required

Start instant, ISO-8601 with an explicit offset

Example:

"2026-08-03T08:00:00-04:00"

durationMinutes
number
required

Appointment length in minutes

Example:

15

newPatient
boolean
required

Whether this is a new-patient visit. Both EHRs distinguish it, and it changes the EHR-side workflow.

Example:

true

visitReasonId
string

Visit reason ID (vrs_…). Only meaningful on EHRs where /visit-reasons reports supported: true.

holdId
string

Hold ID (hld_…) taken from POST /schedule/holds

templateId
string

Availability template ID (avt_…) from the chosen slot's templateIds. On ModMed this pins the appointment to that calendar preference so it consumes the right window's capacity.

notes
string

Patient-supplied comment

Example:

"Patient comment text"

source
object

Booking attribution, echoed back on read. Use this instead of prefixing appointment notes — notes are a clinical field and get read aloud at check-in.

Response

Success

code
string
required

Response code

Example:

"success"

data
object
required