Skip to content

Search Patients

Searches patients by name, status or clinic.

Endpoint

GET /v2/patients

Query Parameters

Parameter Type Required Description
page integer Yes 1-based page number. Defaults to 1.
page_size integer Yes Results per page. Defaults to 25.
query string No Name / phone / email search
status string No One of CREATED, ACTIVE, INACTIVE, DISCHARGED.
clinic_id string No The clinic this record belongs to.

Request

curl --location '{base_url}/v2/patients?page=1&page_size=25' \
  --header 'Authorization: Bearer JWT_TOKEN'

Response

Success Response

Code: 200 OK

{
  "items": [
    {
      "patient_id": "63120",
      "first_name": "Jordan",
      "middle_name": null,
      "last_name": "Whitfield",
      "suffix": null,
      "date_of_birth": "1991-07-23",
      "gender": "MALE",
      "email": "jordan.whitfield@example.com",
      "mobile": "+1-555-0168",
      "address": {
        "line1": "482 Willow Creek Rd",
        "line2": null,
        "city": "Fairview",
        "state": "OR",
        "postal_code": "97024",
        "country": "US"
      },
      "preferred_language": "en",
      "status": "ACTIVE",
      "organisation_id": "7412",
      "clinic_ids": [
        "5831"
      ],
      "provider_ids": [
        "2094"
      ],
      "secondary_contact": null,
      "photo_url": null,
      "height": null,
      "weight": null,
      "created_at": "2026-08-27T14:30:00Z",
      "updated_at": "2026-08-27T14:30:00Z"
    }
  ],
  "page": 1,
  "page_size": 25,
  "total": 1,
  "total_pages": 1
}

Response Fields

Field Type Description
items array of object The page of results. See Items.
page integer 1-based page number.
page_size integer Results per page.
total integer Total results matching the query.
total_pages integer Total pages available.

Items

Field Type Description
patient_id string The patient. Correlate on this — it's a stable id, and there's no external-reference field.
first_name string
middle_name string or null
last_name string
suffix string or null
date_of_birth string (date) or null YYYY-MM-DD.
gender string or null Administrative gender, matching FHIR Patient.gender — used for demographics and claims, not a clinical assertion. One of MALE, FEMALE, OTHER, UNKNOWN.
email string or null
mobile string or null
address object or null See Address.
preferred_language string or null ISO 639-1 language code.
status string One of CREATED, ACTIVE, INACTIVE, DISCHARGED.
organisation_id string or null The organisation this record belongs to. Derived from the access token on writes and never trusted from the body.
clinic_ids array of string Clinics this record is associated with.
provider_ids array of string Providers associated with this record.
secondary_contact string or null
photo_url string or null A fetchable URL. It may be a time-limited signed URL, so fetch it rather than storing it.
height string or null
weight string or null
created_at string (date-time) or null
updated_at string (date-time) or null

Address

Field Type Description
line1 string or null
line2 string or null
city string or null
state string or null
postal_code string or null
country string or null

Error Response

Code: 400 Bad Request

{
  "code": "bad_request",
  "message": "Validation failed",
  "errors": [
    {
      "field": "patient_id",
      "message": "must be a string"
    }
  ]
}

Every error has the same shape — a machine-readable code, a message, and an errors[] array that's empty when there's nothing field-specific to report. The HTTP status is authoritative.

Status code Meaning
400 Bad Request bad_request The request body or parameters failed validation. errors[] names the offending fields.
401 Unauthorized unauthorized The access token is missing, malformed or expired.
403 Forbidden forbidden The request references a resource outside the token's organisation or clinic scope.
404 Not Found not_found No such resource, or it's outside your scope.
429 Too Many Requests rate_limited Rate limit exceeded. Back off and retry.
500 Internal Server Error internal_error Unexpected server error.
502 Bad Gateway upstream_error Upstream service failed or timed out.

Notes

  • query matches on name.