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
defaultError response

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
defaultError response

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)
defaultError response

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

Request body application/json

FieldTypeDescription
_id string
clinicId string
patientId string
startTime string
endTime string
status string REQUESTED | SCHEDULED | PATIENT_ARRIVED | NO_SHOW | CANCELED
procedures array
reminders array
lastEditTime string

Responses

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

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)
defaultError response

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
defaultError response

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
defaultError response

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
defaultError response

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
defaultError response

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)
defaultError response

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

Request body application/json

FieldTypeDescription
_id string
clinicId string
name string
email string
phone string
language string
lastEditTime string

Responses

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

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)
defaultError response

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
defaultError response

Treatments

GET/api/treatments

List treatments

Lists your organization's clinical treatment records. Requires the treatments:read scope.

Authentication apiKey accessToken

Responses

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

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)
defaultError response

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
defaultError response

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)
defaultError response

DELETE/api/webhooksubscriptions/{webhookSubscriptionId}

Delete a webhook subscription

Delete a webhook subscription

Authentication accessToken

Parameters

NameInTypeDescription
webhookSubscriptionId required path string

Responses

StatusMeaning
200Deleted
defaultError response