Returns a paginated list of patients for a practice, with optional filters.
When no query filters are provided, all patients for the practice are returned (subject to pagination), ordered for keyset paging.
When one or more filters are provided, patients matching any of those filters are included (logical OR). Filters combine only with each other under this OR rule.
When family_id is provided, only patients in that family are considered. Any other filters are OR-combined within that family. Behaviour without family_id is unchanged.
Filter semantics:
family_id— exact UUID match limiting results to patients in that family.id— primary key equality.first_name— case-insensitive prefix match on first name.last_name— case-insensitive prefix match on last name.date_of_birth— exact calendar date match (YYYY-MM-DD).email_address— case-insensitive prefix match on stored email.mobile_phone— match against mobile number (substring match, case-insensitive).
Response body matches GET /patients (same data items and meta.cursor pagination). Visibility of email, address, and phone fields still depends on the token scopes, as for the patient list endpoint.
Inclusive start of a created date range filter. Calendar date only (YYYY-MM-DD). Use together with created_date_to for explicit date range control.
- When used together with
created_date_to, the range between the two values must not exceed 90 days. - When used without
created_date_to, returns records fromcreated_date_fromup to 90 days later (or up to the current date-time if it is earlier).
Inclusive end of a created date range filter. Calendar date only (YYYY-MM-DD). Use together with created_date_from for explicit date range control.
- When used together with
created_date_from, the range between the two values must not exceed 90 days. - When used without
created_date_from, returns records from 90 days beforecreated_date_to(or from the earliest available date if less than 90 days of data exists) up tocreated_date_to.
Inclusive start of an updated date range filter. Calendar date only (YYYY-MM-DD). Use together with updated_date_to for explicit date range control.
- When used together with
updated_date_to, the range between the two values must not exceed 90 days. - When used without
updated_date_to, returns records fromupdated_date_fromup to 90 days later (or up to the current date-time if it is earlier).
Inclusive end of an updated date range filter. Calendar date only (YYYY-MM-DD). Use together with updated_date_from for explicit date range control.
- When used together with
updated_date_from, the range between the two values must not exceed 90 days. - When used without
updated_date_from, returns records from 90 days beforeupdated_date_to(or from the earliest available date if less than 90 days of data exists) up toupdated_date_to.
- Mock serverhttps://docs.api.dentally.com/_mock/docs/versions/2026-01-01/nexgen/patients/search
- Production - UKhttps://api.dentally.co/patients/search
- Production - APAChttps://api.apac.dentally.com/patients/search
curl -i -X GET \
'https://docs.api.dentally.com/_mock/docs/versions/2026-01-01/nexgen/patients/search?limit=20&cursor=string&family_id=497f6eca-6276-4993-bfeb-53cbbbba6f08&id=string&first_name=string&last_name=string&date_of_birth=2019-08-24&email_address=user%40example.com&mobile_phone=string&created_date_from=2026-01-01&created_date_to=2026-01-01&updated_date_from=2026-01-01&updated_date_to=2026-01-01' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'X-Practice-Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08'Paginated list of patients for the requested practice, ordered by creation time (latest first) and then by ID for a stable sort.
{ "data": [ { … } ], "meta": { "cursor": "eyJjdXJzb3IiOiJuZXh0In0" } }