Profiles
List Profiles
List or look up patient profiles by email
GET
List patient profiles accessible to your API key, or look one up by exact email address.
When
email is provided, the endpoint performs a Redis-cached exact-match lookup against the
canonical sign-in email and returns 0 or 1 result; limit and offset are ignored in that
case. When omitted, the endpoint returns a paginated list of profiles scoped to your API
key’s access context.
Email matching is case-insensitive and exact — substring and prefix matches are not supported.
Only the canonical sign-in email is checked; alternate addresses such as work_email are not
considered.
Requires
profiles_view or impersonate scope.Request
Query parameters
string
Filter by exact email address (case-insensitive). When set, returns 0 or 1 result and
limit/offset are ignored. The lookup is served by a Redis-cached reverse index, with an
indexed SQL fallback.integer
default:"100"
Maximum number of profiles to return. Defaults to 100, maximum 500. Ignored when
email is set.integer
default:"0"
Number of profiles to skip for pagination. Defaults to 0. Ignored when
email is set.Response
On success, the API returns200 OK with an array of profile objects. The shape of each
entry matches Get Profile.
string
required
Unique profile identifier (UUID).
string
Profile handle or username. May be
null.string
First name. May be
null.string
Last name. May be
null.string
Email address. May be
null.string
Phone number in E.164 format. May be
null.integer
Biological sex per ISO/IEC 5218 (
0 = unknown, 1 = male, 2 = female). May be null.string
Date of birth in
YYYY-MM-DD format. May be null.number
Height in centimeters. May be
null.number
Weight in kilograms. May be
null.string
Preferred language (
en, de, or fi).boolean
Whether this profile receives transactional (programmatic) emails.
null when never set.string
ISO 8601 timestamp of when the profile was created.
string
ISO 8601 timestamp of the last update. May be
null.Behaviour notes
- An empty array is returned both when no profile matches the email and when a match exists outside your access context. This is intentional — it prevents the endpoint from leaking the existence of profiles you cannot read.
- Newly created profiles are immediately discoverable by
emailbecause the create flow warms the cache synchronously. - The unfiltered list is ordered by
created_atdescending (newest first) and paginated vialimitandoffset.