Every endpoint of the DodoDentist REST API, generated from the API itself.
All endpoints are relative to https://api.dododentist.com. Create an API key in your DodoDentist dashboard, then authenticate every request with it.
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 for use with your own tooling.
List appointments
Lists the appointments of your organization. Requires the appointments:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| clinicId | query | string | |
| patientId | query | string | |
| startTime | query | string | |
| endTime | query | string | |
| fields | query | string | Comma-separated projection of fields to return |
| Status | Meaning |
|---|---|
| 200 | Array of appointments |
| 401 | Missing or invalid credentials |
| 403 | API key is missing the appointments:read scope |
| 429 | API key rate limit exceeded |
Create an appointment
Requires the appointments:write scope. Fires the appointment.created webhook.
| Field | Type | Description |
|---|---|---|
| clinicIdrequired | string | |
| patientId | string | |
| startTime | string | |
| endTime | string |
| Status | Meaning |
|---|---|
| 200 | The created appointment |
| 403 | API key is missing the appointments:write scope |
Get an appointment
Returns a single appointment by id. Appointments belonging to another organization respond 404. Requires the appointments:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| appointmentIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The appointment |
| 404 | Not found (or owned by another organization) |
Update an appointment
Requires the appointments:write scope. Fires the appointment.updated webhook.
| Name | In | Type | Description |
|---|---|---|---|
| appointmentIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The updated appointment |
| 404 | Not found (or owned by another organization) |
Delete an appointment
Requires the appointments:write scope. Fires the appointment.deleted webhook.
| Name | In | Type | Description |
|---|---|---|---|
| appointmentIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The deleted appointment |
| 404 | Not found (or owned by another organization) |
List clinics
Lists the clinics of your organization. Requires the clinics:read scope.
| Status | Meaning |
|---|---|
| 200 | Array of clinics |
| 403 | API key is missing the clinics:read scope |
List invoices
Lists the invoices of your organization. Requires the invoices:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| clinicId | query | string | |
| patientId | query | string |
| Status | Meaning |
|---|---|
| 200 | Array of invoices |
| 403 | API key is missing the invoices:read scope |
List patients
Lists the patients of your clinic. Requires the patients:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| clinicId | query | string | |
| query | string | ||
| _ids | query | string | Comma-separated list of patient ids |
| fields | query | string | Comma-separated projection of fields to return |
| Status | Meaning |
|---|---|
| 200 | Array of patients |
| 401 | Missing or invalid credentials |
| 403 | API key is missing the patients:read scope |
| 429 | API key rate limit exceeded |
Create a patient
Creates a patient in your clinic. Requires the patients:write scope. Fires the patient.created webhook.
| Field | Type | Description |
|---|---|---|
| clinicIdrequired | string | |
| name | string | |
| string | ||
| phone | string |
| Status | Meaning |
|---|---|
| 200 | The created patient |
| 403 | API key is missing the patients:write scope |
Get a patient
Returns a single patient by id. Patients belonging to another organization respond 404. Requires the patients:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| patientIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The patient |
| 404 | Not found (or owned by another organization) |
Update a patient
Requires the patients:write scope. Fires the patient.updated webhook.
| Name | In | Type | Description |
|---|---|---|---|
| patientIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The updated patient |
| 404 | Not found (or owned by another organization) |
Delete a patient
Requires the patients:write scope. Fires the patient.deleted webhook.
| Name | In | Type | Description |
|---|---|---|---|
| patientIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The deleted patient |
| 404 | Not found (or owned by another organization) |
List payments
Lists the payments of your organization. Requires the payments:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| clinicId | query | string | |
| patientId | query | string |
| Status | Meaning |
|---|---|
| 200 | Array of payments |
| 403 | API key is missing the payments:read scope |
List treatments
Lists your organization's treatment (service/price) catalog. Requires the treatments:read scope.
| Status | Meaning |
|---|---|
| 200 | Array of treatments |
| 403 | API key is missing the treatments:read scope |
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.
| Status | Meaning |
|---|---|
| 200 | Array of webhook subscriptions (without secrets) |
Create a webhook subscription
The response includes the signing secret exactly once — store it; it cannot be retrieved again.
| Field | Type | Description |
|---|---|---|
| clinicIdrequired | string | |
| urlrequired | string | |
| events | array (patient.created | patient.updated | patient.deleted | appointment.created | appointment.updated | appointment.deleted | invoice.created | invoice.updated | invoice.deleted | payment.created | payment.updated | payment.deleted) | Empty array subscribes to all events |
| Status | Meaning |
|---|---|
| 200 | The created subscription, including its secret |
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.
| Name | In | Type | Description |
|---|---|---|---|
| webhookSubscriptionIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The updated subscription (without secret) |
Delete a webhook subscription
| Name | In | Type | Description |
|---|---|---|---|
| webhookSubscriptionIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | Deleted |