Find a patient by an identifier, such as the practice's own patient number
Matches externalSystem and externalId exactly.
API version 1.3.1
Operations in Patients
/api/v1/patients Use it to find the patient you registered with your own patient number.
The integration client needs PATIENTS:READ. A practice owner
grants it under Permissions on the client.
Request
{
"object": "list",
"data": [
{
"object": "patient",
"id": "k3v9x2m8q1w7e4r6t0y5u2ia",
"active": true,
"prefix": null,
"givenNames": [
"Thandi"
],
"lastName": "Mokoena",
"gender": "female",
"birthDate": "1985-06-12",
"identifiers": [],
"externalId": {
"system": "urn:your-clinic:patient",
"value": "12345"
},
"contactPoints": [
{
"system": "email",
"value": "[email protected]",
"use": "home",
"rank": 1
}
],
"addresses": [],
"organizationId": "o1r5g9a3n7i2z6a0t4i8o3np",
"updatedAt": "2026-10-01T07:45:12.000Z"
}
],
"hasMore": true,
"nextCursor": "string"
} Parameters
Query
-
externalSystemstring Required -
The system of the external id, as you sent it.
-
externalIdstring Required -
Your patient number.
Responses
200 A page of the patients that match, in data. While hasMore is true, send nextCursor back as cursor for the next page.
Headers
-
X-Request-Idstring Required -
Quote it if you contact support about this request.
-
X-RateLimit-Limitstring Required -
Requests allowed in the current window.
-
X-RateLimit-Remainingstring Required -
Requests left in the current window.
-
X-RateLimit-Resetstring Required -
When the window resets, in seconds since the Unix epoch.
Body
PatientList
-
object"list" Required -
dataarray of Patient Required-
object"patient" Required -
idstring Required -
activeboolean Required -
prefixstring or null Required -
givenNamesarray of string Required -
lastNamestring or null Required -
genderstring or null Required -
birthDatestring or null RequiredYYYY-MM-DD.
-
identifiersarray of object Required-
typestring RequiredAs in the request.
-
valuestring Required
-
-
externalIdobject or null Required-
object-
systemstring Required -
valuestring Required
-
-
-
contactPointsarray of object Required-
systemstring Required -
valuestring Required -
usestring or null Required -
rankinteger or null Required
-
-
addressesarray of object Required-
typestring or null Required -
usestring or null Required -
linesarray of string Required -
citystring or null Required -
districtstring or null Required -
statestring or null Required -
postalCodestring or null Required -
countrystring or null RequiredTwo-letter ISO country code.
-
-
organizationIdstring or null RequiredThe practice that manages the patient.
-
updatedAtstring RequiredAn ISO 8601 date-time in UTC.
-
-
hasMoreboolean RequiredWhether another page follows this one.
-
nextCursorstring or null RequiredSend it as
cursorfor the next page. Null on the last page.
{
"object": "list",
"data": [
{
"object": "patient",
"id": "k3v9x2m8q1w7e4r6t0y5u2ia",
"active": true,
"prefix": null,
"givenNames": [
"Thandi"
],
"lastName": "Mokoena",
"gender": "female",
"birthDate": "1985-06-12",
"identifiers": [],
"externalId": {
"system": "urn:your-clinic:patient",
"value": "12345"
},
"contactPoints": [
{
"system": "email",
"value": "[email protected]",
"use": "home",
"rank": 1
}
],
"addresses": [],
"organizationId": "o1r5g9a3n7i2z6a0t4i8o3np",
"updatedAt": "2026-10-01T07:45:12.000Z"
}
],
"hasMore": true,
"nextCursor": "string"
} 400 A query parameter or header is missing or malformed, or the body isn't JSON. errors names the parameter.
Body
Problem
-
typestring RequiredWhere the error is explained:
https://developers.practor.app/guides/errors#and the code, with hyphens for underscores. -
titlestring RequiredA short summary of the kind of problem.
-
statusinteger RequiredThe HTTP status, repeated.
At least
-9007199254740991. At most9007199254740991. -
detailstring RequiredWhat went wrong with this request, in a sentence you can show a person.
-
codestring RequiredThe kind of problem. It stays the same across releases, so branch on it.
One of
invalid_request,invalid_cursor,validation_failed,unauthenticated,forbidden,addon_inactive,not_found,method_not_allowed,conflict,duplicate,business_rule,unprocessable,idempotency_key_reused,payload_too_large,unsupported_media_type,rate_limited,internal_error,service_unavailable. -
requestIdstring RequiredThe same as the X-Request-Id header. Quote it if you contact support.
-
errorsarray of FieldErrorOne entry per field that is missing or wrong, all at once, so you can fix a request in one round trip.
-
fieldstring RequiredThe field, query parameter or header the problem is in. A field in the body is a dotted path, such as
givenNames.0orprocedures.1.code. -
codestring Requiredrequiredwhen it was left out,invalidwhen its value is wrong.One of
required,invalid. -
messagestring RequiredWhat was wrong, in a sentence you can show a person.
-
{
"type": "https://developers.practor.app/guides/errors#validation-failed",
"title": "Some fields are missing or wrong",
"status": 422,
"detail": "Fix the fields listed in errors and send it again.",
"code": "validation_failed",
"requestId": "x9k2m4p7q1w8e3r6t5y0u2i4",
"errors": [
{
"field": "lastName",
"code": "required",
"message": "Send lastName."
},
{
"field": "birthDate",
"code": "invalid",
"message": "birthDate must be a real date, written YYYY-MM-DD"
}
]
} 401 No key was sent, or the key cannot be used: unknown, revoked or expired, its client suspended, or the call made from outside its allowed addresses. All of these answer the same way; the practice audit log names which it was.
Body
Problem
-
typestring RequiredWhere the error is explained:
https://developers.practor.app/guides/errors#and the code, with hyphens for underscores. -
titlestring RequiredA short summary of the kind of problem.
-
statusinteger RequiredThe HTTP status, repeated.
At least
-9007199254740991. At most9007199254740991. -
detailstring RequiredWhat went wrong with this request, in a sentence you can show a person.
-
codestring RequiredThe kind of problem. It stays the same across releases, so branch on it.
One of
invalid_request,invalid_cursor,validation_failed,unauthenticated,forbidden,addon_inactive,not_found,method_not_allowed,conflict,duplicate,business_rule,unprocessable,idempotency_key_reused,payload_too_large,unsupported_media_type,rate_limited,internal_error,service_unavailable. -
requestIdstring RequiredThe same as the X-Request-Id header. Quote it if you contact support.
-
errorsarray of FieldErrorOne entry per field that is missing or wrong, all at once, so you can fix a request in one round trip.
-
fieldstring RequiredThe field, query parameter or header the problem is in. A field in the body is a dotted path, such as
givenNames.0orprocedures.1.code. -
codestring Requiredrequiredwhen it was left out,invalidwhen its value is wrong.One of
required,invalid. -
messagestring RequiredWhat was wrong, in a sentence you can show a person.
-
{
"type": "https://developers.practor.app/guides/errors#validation-failed",
"title": "Some fields are missing or wrong",
"status": 422,
"detail": "Fix the fields listed in errors and send it again.",
"code": "validation_failed",
"requestId": "x9k2m4p7q1w8e3r6t5y0u2i4",
"errors": [
{
"field": "lastName",
"code": "required",
"message": "Send lastName."
},
{
"field": "birthDate",
"code": "invalid",
"message": "birthDate must be a real date, written YYYY-MM-DD"
}
]
} 403 The client lacks the permission this endpoint needs, or the practice's Integrations add-on is off.
Body
Problem
-
typestring RequiredWhere the error is explained:
https://developers.practor.app/guides/errors#and the code, with hyphens for underscores. -
titlestring RequiredA short summary of the kind of problem.
-
statusinteger RequiredThe HTTP status, repeated.
At least
-9007199254740991. At most9007199254740991. -
detailstring RequiredWhat went wrong with this request, in a sentence you can show a person.
-
codestring RequiredThe kind of problem. It stays the same across releases, so branch on it.
One of
invalid_request,invalid_cursor,validation_failed,unauthenticated,forbidden,addon_inactive,not_found,method_not_allowed,conflict,duplicate,business_rule,unprocessable,idempotency_key_reused,payload_too_large,unsupported_media_type,rate_limited,internal_error,service_unavailable. -
requestIdstring RequiredThe same as the X-Request-Id header. Quote it if you contact support.
-
errorsarray of FieldErrorOne entry per field that is missing or wrong, all at once, so you can fix a request in one round trip.
-
fieldstring RequiredThe field, query parameter or header the problem is in. A field in the body is a dotted path, such as
givenNames.0orprocedures.1.code. -
codestring Requiredrequiredwhen it was left out,invalidwhen its value is wrong.One of
required,invalid. -
messagestring RequiredWhat was wrong, in a sentence you can show a person.
-
{
"type": "https://developers.practor.app/guides/errors#validation-failed",
"title": "Some fields are missing or wrong",
"status": 422,
"detail": "Fix the fields listed in errors and send it again.",
"code": "validation_failed",
"requestId": "x9k2m4p7q1w8e3r6t5y0u2i4",
"errors": [
{
"field": "lastName",
"code": "required",
"message": "Send lastName."
},
{
"field": "birthDate",
"code": "invalid",
"message": "birthDate must be a real date, written YYYY-MM-DD"
}
]
} 405 This endpoint doesn't take that method. The Allow header names the one it does.
Body
Problem
-
typestring RequiredWhere the error is explained:
https://developers.practor.app/guides/errors#and the code, with hyphens for underscores. -
titlestring RequiredA short summary of the kind of problem.
-
statusinteger RequiredThe HTTP status, repeated.
At least
-9007199254740991. At most9007199254740991. -
detailstring RequiredWhat went wrong with this request, in a sentence you can show a person.
-
codestring RequiredThe kind of problem. It stays the same across releases, so branch on it.
One of
invalid_request,invalid_cursor,validation_failed,unauthenticated,forbidden,addon_inactive,not_found,method_not_allowed,conflict,duplicate,business_rule,unprocessable,idempotency_key_reused,payload_too_large,unsupported_media_type,rate_limited,internal_error,service_unavailable. -
requestIdstring RequiredThe same as the X-Request-Id header. Quote it if you contact support.
-
errorsarray of FieldErrorOne entry per field that is missing or wrong, all at once, so you can fix a request in one round trip.
-
fieldstring RequiredThe field, query parameter or header the problem is in. A field in the body is a dotted path, such as
givenNames.0orprocedures.1.code. -
codestring Requiredrequiredwhen it was left out,invalidwhen its value is wrong.One of
required,invalid. -
messagestring RequiredWhat was wrong, in a sentence you can show a person.
-
{
"type": "https://developers.practor.app/guides/errors#validation-failed",
"title": "Some fields are missing or wrong",
"status": 422,
"detail": "Fix the fields listed in errors and send it again.",
"code": "validation_failed",
"requestId": "x9k2m4p7q1w8e3r6t5y0u2i4",
"errors": [
{
"field": "lastName",
"code": "required",
"message": "Send lastName."
},
{
"field": "birthDate",
"code": "invalid",
"message": "birthDate must be a real date, written YYYY-MM-DD"
}
]
} 429 Too many requests. Wait the number of seconds in the Retry-After header, then send it again.
Body
Problem
-
typestring RequiredWhere the error is explained:
https://developers.practor.app/guides/errors#and the code, with hyphens for underscores. -
titlestring RequiredA short summary of the kind of problem.
-
statusinteger RequiredThe HTTP status, repeated.
At least
-9007199254740991. At most9007199254740991. -
detailstring RequiredWhat went wrong with this request, in a sentence you can show a person.
-
codestring RequiredThe kind of problem. It stays the same across releases, so branch on it.
One of
invalid_request,invalid_cursor,validation_failed,unauthenticated,forbidden,addon_inactive,not_found,method_not_allowed,conflict,duplicate,business_rule,unprocessable,idempotency_key_reused,payload_too_large,unsupported_media_type,rate_limited,internal_error,service_unavailable. -
requestIdstring RequiredThe same as the X-Request-Id header. Quote it if you contact support.
-
errorsarray of FieldErrorOne entry per field that is missing or wrong, all at once, so you can fix a request in one round trip.
-
fieldstring RequiredThe field, query parameter or header the problem is in. A field in the body is a dotted path, such as
givenNames.0orprocedures.1.code. -
codestring Requiredrequiredwhen it was left out,invalidwhen its value is wrong.One of
required,invalid. -
messagestring RequiredWhat was wrong, in a sentence you can show a person.
-
{
"type": "https://developers.practor.app/guides/errors#validation-failed",
"title": "Some fields are missing or wrong",
"status": 422,
"detail": "Fix the fields listed in errors and send it again.",
"code": "validation_failed",
"requestId": "x9k2m4p7q1w8e3r6t5y0u2i4",
"errors": [
{
"field": "lastName",
"code": "required",
"message": "Send lastName."
},
{
"field": "birthDate",
"code": "invalid",
"message": "birthDate must be a real date, written YYYY-MM-DD"
}
]
} 500 Something went wrong on our side. Quote the X-Request-Id if you contact support.
Body
Problem
-
typestring RequiredWhere the error is explained:
https://developers.practor.app/guides/errors#and the code, with hyphens for underscores. -
titlestring RequiredA short summary of the kind of problem.
-
statusinteger RequiredThe HTTP status, repeated.
At least
-9007199254740991. At most9007199254740991. -
detailstring RequiredWhat went wrong with this request, in a sentence you can show a person.
-
codestring RequiredThe kind of problem. It stays the same across releases, so branch on it.
One of
invalid_request,invalid_cursor,validation_failed,unauthenticated,forbidden,addon_inactive,not_found,method_not_allowed,conflict,duplicate,business_rule,unprocessable,idempotency_key_reused,payload_too_large,unsupported_media_type,rate_limited,internal_error,service_unavailable. -
requestIdstring RequiredThe same as the X-Request-Id header. Quote it if you contact support.
-
errorsarray of FieldErrorOne entry per field that is missing or wrong, all at once, so you can fix a request in one round trip.
-
fieldstring RequiredThe field, query parameter or header the problem is in. A field in the body is a dotted path, such as
givenNames.0orprocedures.1.code. -
codestring Requiredrequiredwhen it was left out,invalidwhen its value is wrong.One of
required,invalid. -
messagestring RequiredWhat was wrong, in a sentence you can show a person.
-
{
"type": "https://developers.practor.app/guides/errors#validation-failed",
"title": "Some fields are missing or wrong",
"status": 422,
"detail": "Fix the fields listed in errors and send it again.",
"code": "validation_failed",
"requestId": "x9k2m4p7q1w8e3r6t5y0u2i4",
"errors": [
{
"field": "lastName",
"code": "required",
"message": "Send lastName."
},
{
"field": "birthDate",
"code": "invalid",
"message": "birthDate must be a real date, written YYYY-MM-DD"
}
]
} 503 The request couldn't be written to the practice audit log, so its result is withheld. Wait the number of seconds in the Retry-After header, then send it again.
Body
Problem
-
typestring RequiredWhere the error is explained:
https://developers.practor.app/guides/errors#and the code, with hyphens for underscores. -
titlestring RequiredA short summary of the kind of problem.
-
statusinteger RequiredThe HTTP status, repeated.
At least
-9007199254740991. At most9007199254740991. -
detailstring RequiredWhat went wrong with this request, in a sentence you can show a person.
-
codestring RequiredThe kind of problem. It stays the same across releases, so branch on it.
One of
invalid_request,invalid_cursor,validation_failed,unauthenticated,forbidden,addon_inactive,not_found,method_not_allowed,conflict,duplicate,business_rule,unprocessable,idempotency_key_reused,payload_too_large,unsupported_media_type,rate_limited,internal_error,service_unavailable. -
requestIdstring RequiredThe same as the X-Request-Id header. Quote it if you contact support.
-
errorsarray of FieldErrorOne entry per field that is missing or wrong, all at once, so you can fix a request in one round trip.
-
fieldstring RequiredThe field, query parameter or header the problem is in. A field in the body is a dotted path, such as
givenNames.0orprocedures.1.code. -
codestring Requiredrequiredwhen it was left out,invalidwhen its value is wrong.One of
required,invalid. -
messagestring RequiredWhat was wrong, in a sentence you can show a person.
-
{
"type": "https://developers.practor.app/guides/errors#validation-failed",
"title": "Some fields are missing or wrong",
"status": 422,
"detail": "Fix the fields listed in errors and send it again.",
"code": "validation_failed",
"requestId": "x9k2m4p7q1w8e3r6t5y0u2i4",
"errors": [
{
"field": "lastName",
"code": "required",
"message": "Send lastName."
},
{
"field": "birthDate",
"code": "invalid",
"message": "birthDate must be a real date, written YYYY-MM-DD"
}
]
}