DodoDentist API 1.0.0

Public REST API for DodoDentist. Authenticate with an API key created in the DodoDentist dashboard: send the base64-encoded key secret with HTTP Basic auth. Each key carries per-resource scopes like patients:read or appointments:write.

Base URL https://api.dododentist.com
  • apiKey — HTTP Basic auth carrying only the API key secret: Authorization: Basic base64(<key secret>).
  • accessToken — Operator session token issued by the DodoDentist dashboard: Authorization: Token <access token>.

Download the OpenAPI specification

Appointments

GET/api/appointments

List appointments

Lists the appointments of your organization. Requires the appointments:read scope.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
clinicId query string
patientId query string
startTime query string
endTime query string
fields query string Comma-separated projection of fields to return

Responses

StatusMeaning
200Array of appointments
401Missing or invalid credentials
403API key is missing the appointments:read scope
429API key rate limit exceeded

POST/api/appointments

Create an appointment

Requires the appointments:write scope. Fires the appointment.created webhook.

Authentication apiKey accessToken

Request body application/json

FieldTypeDescription
clinicId required string
patientId string
startTime string
endTime string

Responses

StatusMeaning
200The created appointment
403API key is missing the appointments:write scope

GET/api/appointments/{appointmentId}

Get an appointment

Returns a single appointment by id. Appointments belonging to another organization respond 404. Requires the appointments:read scope.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
appointmentId required path string

Responses

StatusMeaning
200The appointment
404Not found (or owned by another organization)

PUT/api/appointments/{appointmentId}

Update an appointment

Requires the appointments:write scope. Fires the appointment.updated webhook.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
appointmentId required path string

Responses

StatusMeaning
200The updated appointment
404Not found (or owned by another organization)

DELETE/api/appointments/{appointmentId}

Delete an appointment

Requires the appointments:write scope. Fires the appointment.deleted webhook.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
appointmentId required path string

Responses

StatusMeaning
200The deleted appointment
404Not found (or owned by another organization)

Clinics

GET/api/clinics

List clinics

Lists the clinics of your organization. Requires the clinics:read scope.

Authentication apiKey accessToken

Responses

StatusMeaning
200Array of clinics
403API key is missing the clinics:read scope

Invoices

GET/api/invoices

List invoices

Lists the invoices of your organization. Requires the invoices:read scope.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
clinicId query string
patientId query string

Responses

StatusMeaning
200Array of invoices
403API key is missing the invoices:read scope

Patients

GET/api/patients

List patients

Lists the patients of your clinic. Requires the patients:read scope.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
clinicId query string
email query string
_ids query string Comma-separated list of patient ids
fields query string Comma-separated projection of fields to return

Responses

StatusMeaning
200Array of patients
401Missing or invalid credentials
403API key is missing the patients:read scope
429API key rate limit exceeded

POST/api/patients

Create a patient

Creates a patient in your clinic. Requires the patients:write scope. Fires the patient.created webhook.

Authentication apiKey accessToken

Request body application/json

FieldTypeDescription
clinicId required string
name string
email string
phone string

Responses

StatusMeaning
200The created patient
403API key is missing the patients:write scope

GET/api/patients/{patientId}

Get a patient

Returns a single patient by id. Patients belonging to another organization respond 404. Requires the patients:read scope.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
patientId required path string

Responses

StatusMeaning
200The patient
404Not found (or owned by another organization)

PUT/api/patients/{patientId}

Update a patient

Requires the patients:write scope. Fires the patient.updated webhook.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
patientId required path string

Responses

StatusMeaning
200The updated patient
404Not found (or owned by another organization)

DELETE/api/patients/{patientId}

Delete a patient

Requires the patients:write scope. Fires the patient.deleted webhook.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
patientId required path string

Responses

StatusMeaning
200The deleted patient
404Not found (or owned by another organization)

Payments

GET/api/payments

List payments

Lists the payments of your organization. Requires the payments:read scope.

Authentication apiKey accessToken

Parameters

NameInTypeDescription
clinicId query string
patientId query string

Responses

StatusMeaning
200Array of payments
403API key is missing the payments:read scope

Treatments

GET/api/treatments

List treatments

Lists your organization's treatment (service/price) catalog. Requires the treatments:read scope.

Authentication apiKey accessToken

Responses

StatusMeaning
200Array of treatments
403API key is missing the treatments:read scope

Webhook subscriptions

GET/api/webhooksubscriptions

List webhook subscriptions

Webhook subscriptions deliver patient.created, patient.updated, patient.deleted, appointment.created, appointment.updated, appointment.deleted, invoice.* and payment.* events to your server as signed POST requests (X-Dododentist-Signature: t=<timestamp>,v1=<hex HMAC-SHA256 of "timestamp.body">). An endpoint failing 20 times in a row is disabled automatically. Subscriptions are managed with an operator access token; the secret is only returned once, on create.

Authentication accessToken

Responses

StatusMeaning
200Array of webhook subscriptions (without secrets)

POST/api/webhooksubscriptions

Create a webhook subscription

The response includes the signing secret exactly once — store it; it cannot be retrieved again.

Authentication accessToken

Request body application/json

FieldTypeDescription
clinicId required string
url required string
events array Empty array subscribes to all events

Responses

StatusMeaning
200The created subscription, including its secret

PUT/api/webhooksubscriptions/{webhookSubscriptionId}

Update a webhook subscription

url, events and active are editable; the secret and clinic are immutable. Re-enabling an auto-disabled endpoint is done by setting active back to true.

Authentication accessToken

Parameters

NameInTypeDescription
webhookSubscriptionId required path string

Responses

StatusMeaning
200The updated subscription (without secret)

DELETE/api/webhooksubscriptions/{webhookSubscriptionId}

Delete a webhook subscription

Authentication accessToken

Parameters

NameInTypeDescription
webhookSubscriptionId required path string

Responses

StatusMeaning
200Deleted