Appointments
Update Appointment
Modify appointment details before blood draw
PATCH
/
api
/
v1
/
appointments
/
{id}
curl --request PATCH \
--url https://anivahealth.com/api/v1/appointments/c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"scheduled_at": "2026-05-20T14:00:00Z",
"location_id": "d8f3e1a2-4c5b-6d7e-8f9a-0b1c2d3e4f5a"
}'
{
"id": "c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a",
"profile_id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
"location_id": "d8f3e1a2-4c5b-6d7e-8f9a-0b1c2d3e4f5a",
"scheduled_at": "2026-05-20T14:00:00Z",
"status": "confirmed",
"cancellation_reason": null,
"results_ready_emails": [],
"created_at": "2026-04-01T09:45:00Z",
"updated_at": "2026-04-10T11:30:00Z",
"profile": {
"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",
"transactional_emails_enabled": true,
"created_at": "2026-04-01T09:14:32Z",
"updated_at": null
},
"panels": [
{
"panel_id": "f1c2d4a3-7b8e-4f2a-9c1d-2e3f4a5b6c7d",
"added_at": "2026-04-01T09:50:00Z"
}
],
"individual_biomarkers": [],
"shipments": [],
"lab_codes": []
}
{
"error": "Appointment cannot be modified after blood draw has been confirmed"
}
{
"error": "Location not found or inactive"
}
Update appointment details such as the scheduled time or test location. Only appointments that have not yet had their blood draw confirmed can be modified.
Requires the
Appointments cannot be modified after the blood draw has been confirmed or if already cancelled.
Attempting to update such an appointment returns
409 Conflict. The one exception is
results_ready_emails, which you can still change after the blood draw.test_sessions_schedule or test_sessions_manage scope.
Request
Path parameters
string
required
Unique identifier (UUID) of the appointment to update.
Body parameters
All body parameters are optional — only include the fields you want to change.string
New appointment datetime in ISO 8601 format (e.g.,
2026-05-20T14:00:00Z or
2026-05-20T16:00:00+02:00). Must include a timezone designator — either Z or an explicit
offset like +02:00; naive datetimes are rejected. Must be in the future.Must be an exact slot start with remaining capacity — see
Get Availability. The appointment being rescheduled never counts
against its own target slot, but moving onto a slot where the same profile already has a different
appointment returns 409 with that appointment’s appointment_id.If the target location is Aniva-operated, the new time must also be at least 12 hours out — see
Minimum notice.string
UUID of the new test location. The location must exist and be active. Use List
Locations to find available location IDs.
string[]
Replaces the list of up to 5 addresses that each get one email once every lab result is final.
Send
[] to turn the emails off. This field stays editable after the blood draw; only a cancelled
appointment refuses it. After the blood draw, send it alone: with scheduled_at or
location_id in the same body, the request returns 409. Your key needs results_view access to the patient, else 403. See
Results-ready emails.Response
On success, the API returns200 OK with the updated appointment and its embedded profile.
string
required
Unique appointment identifier (UUID).
string
required
UUID of the profile this appointment belongs to.
string
UUID of the test location where the draw takes place.
string
Scheduled appointment datetime as a UTC instant (ISO 8601 with
Z suffix, e.g.
2026-05-20T14:00:00Z). May be null.string
required
Current appointment status. One of
pending, confirmed, blood_drawn, or cancelled.
Lab-result completion granularity is derived from Get Results;
finer-grained shipment progression from each entry in the inline shipments array (see below)
followed to Get Shipment.string
Free-text reason captured when the appointment was cancelled (e.g. no-show, late cancellation,
‘Failed. Repeat required’).
null unless status is cancelled.string[]
required
Addresses that each get one email once every lab result is final, lowercased. Empty when off. See
Results-ready emails.
string
required
ISO 8601 timestamp of when the appointment was created.
string
ISO 8601 timestamp of the last update. May be
null.object
required
The patient profile associated with this appointment.
Show profile
Show profile
string
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. 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. May be
null.string
ISO 8601 timestamp of when the profile was created.
string
ISO 8601 timestamp of the last profile update. May be
null.AppointmentPanel[]
required
Panels currently attached to this appointment. Excludes cancelled attachments. Look up panel
details (name, biomarkers) via List Panels.
Show Panel attachment fields
Show Panel attachment fields
string
Panel UUID — cross-reference against List Panels.
string
ISO 8601 timestamp the panel was first attached to this appointment.
AppointmentIndividualBiomarker[]
required
À-la-carte biomarkers attached to this appointment outside any panel (see Add Custom
Biomarkers). Cross-reference each
biomarker_id
against List Biomarkers for display data.Show Individual biomarker fields
Show Individual biomarker fields
integer
Biomarker identifier — cross-reference against
List Biomarkers.
string
ISO 8601 timestamp the biomarker was first attached to this appointment.
AppointmentShipmentLink[]
required
Shipments linked to this appointment, oldest-link first. Empty array when no shipments are
linked. Cross-reference each
id against Get Shipment for the
full shipment payload.Show Shipment link fields
Show Shipment link fields
string
Shipment reference identifier — cross-reference against
Get Shipment.
string
ISO 8601 timestamp the shipment was first linked to this appointment.
string[]
required
Lab codes (tube barcodes) recorded for this appointment, in scan order. Empty until the blood draw
is confirmed. A venous draw carries one code printed on every tube; a pharmacy draw carries one
code per microtainer. Results and documents on Get Results reference
these codes via
lab_code.Error responses
| Status | Description |
|---|---|
400 | Validation error — e.g., scheduled_at is in the past, is less than 12 hours out at an Aniva-operated location, or invalid UUID format. |
403 | Forbidden — your API key does not have access to this operation, the appointment or location is outside your access context, or results_ready_emails is set without results_view access to the patient. |
404 | Appointment or location not found. |
409 | Appointment cannot be modified (blood draw already confirmed or appointment is cancelled), the target slot is at capacity, the location is closed on that date, or this profile already has another appointment at the target location and time (carries appointment_id). |
500 | Internal server error. |
curl --request PATCH \
--url https://anivahealth.com/api/v1/appointments/c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"scheduled_at": "2026-05-20T14:00:00Z",
"location_id": "d8f3e1a2-4c5b-6d7e-8f9a-0b1c2d3e4f5a"
}'
{
"id": "c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a",
"profile_id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
"location_id": "d8f3e1a2-4c5b-6d7e-8f9a-0b1c2d3e4f5a",
"scheduled_at": "2026-05-20T14:00:00Z",
"status": "confirmed",
"cancellation_reason": null,
"results_ready_emails": [],
"created_at": "2026-04-01T09:45:00Z",
"updated_at": "2026-04-10T11:30:00Z",
"profile": {
"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",
"transactional_emails_enabled": true,
"created_at": "2026-04-01T09:14:32Z",
"updated_at": null
},
"panels": [
{
"panel_id": "f1c2d4a3-7b8e-4f2a-9c1d-2e3f4a5b6c7d",
"added_at": "2026-04-01T09:50:00Z"
}
],
"individual_biomarkers": [],
"shipments": [],
"lab_codes": []
}
{
"error": "Appointment cannot be modified after blood draw has been confirmed"
}
{
"error": "Location not found or inactive"
}
⌘I
curl --request PATCH \
--url https://anivahealth.com/api/v1/appointments/c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"scheduled_at": "2026-05-20T14:00:00Z",
"location_id": "d8f3e1a2-4c5b-6d7e-8f9a-0b1c2d3e4f5a"
}'
{
"id": "c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a",
"profile_id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
"location_id": "d8f3e1a2-4c5b-6d7e-8f9a-0b1c2d3e4f5a",
"scheduled_at": "2026-05-20T14:00:00Z",
"status": "confirmed",
"cancellation_reason": null,
"results_ready_emails": [],
"created_at": "2026-04-01T09:45:00Z",
"updated_at": "2026-04-10T11:30:00Z",
"profile": {
"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",
"transactional_emails_enabled": true,
"created_at": "2026-04-01T09:14:32Z",
"updated_at": null
},
"panels": [
{
"panel_id": "f1c2d4a3-7b8e-4f2a-9c1d-2e3f4a5b6c7d",
"added_at": "2026-04-01T09:50:00Z"
}
],
"individual_biomarkers": [],
"shipments": [],
"lab_codes": []
}
{
"error": "Appointment cannot be modified after blood draw has been confirmed"
}
{
"error": "Location not found or inactive"
}