Skip to main content
GET
/
api
/
v1
/
profiles
curl --request GET \
  --url 'https://anivahealth.com/api/v1/profiles?email=maria.schmidt@example.com' \
  --header 'x-api-key: YOUR_API_KEY'
[
  {
    "id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
    "handle": null,
    "first_name": "Maria",
    "last_name": "Schmidt",
    "email": "maria.schmidt@example.com",
    "phone": "+4930123456789",
    "sex": 2,
    "date_of_birth": "1985-03-22",
    "height": 168,
    "weight": 65,
    "language": "de",
    "created_at": "2026-04-01T09:14:32Z",
    "updated_at": "2026-04-01T11:05:00Z"
  }
]
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

email
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.
limit
integer
default:"100"
Maximum number of profiles to return. Defaults to 100, maximum 500. Ignored when email is set.
offset
integer
default:"0"
Number of profiles to skip for pagination. Defaults to 0. Ignored when email is set.

Response

On success, the API returns 200 OK with an array of profile objects. The shape of each entry matches Get Profile.
id
string
required
Unique profile identifier (UUID).
handle
string
Profile handle or username. May be null.
first_name
string
First name. May be null.
last_name
string
Last name. May be null.
email
string
Email address. May be null.
phone
string
Phone number in E.164 format. May be null.
sex
integer
Biological sex per ISO/IEC 5218 (1 = male, 2 = female). May be null.
date_of_birth
string
Date of birth in YYYY-MM-DD format. May be null.
height
number
Height in centimeters. May be null.
weight
number
Weight in kilograms. May be null.
language
string
Preferred language (en, de, or fi).
created_at
string
ISO 8601 timestamp of when the profile was created.
updated_at
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 email because the create flow warms the cache synchronously.
  • The unfiltered list is ordered by created_at descending (newest first) and paginated via limit and offset.

Error responses

StatusDescription
400Validation error — invalid email format, or limit/offset out of range.
403Forbidden — your API key does not have the required scope (profiles_view/impersonate).
500Internal server error.
curl --request GET \
  --url 'https://anivahealth.com/api/v1/profiles?email=maria.schmidt@example.com' \
  --header 'x-api-key: YOUR_API_KEY'
[
  {
    "id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
    "handle": null,
    "first_name": "Maria",
    "last_name": "Schmidt",
    "email": "maria.schmidt@example.com",
    "phone": "+4930123456789",
    "sex": 2,
    "date_of_birth": "1985-03-22",
    "height": 168,
    "weight": 65,
    "language": "de",
    "created_at": "2026-04-01T09:14:32Z",
    "updated_at": "2026-04-01T11:05:00Z"
  }
]