Skip to main content
POST
/
api
/
v1
/
appointments
curl --request POST \
  --url https://anivahealth.com/api/v1/appointments \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "profile_id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
    "location_id": "b7e2d1f5-3c4a-4e8b-a2f1-9d0c1e2f3a4b",
    "scheduled_at": "2026-05-15T12:30:00+02:00"
  }'
{
  "id": "c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a",
  "profile_id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
  "location_id": "b7e2d1f5-3c4a-4e8b-a2f1-9d0c1e2f3a4b",
  "scheduled_at": "2026-05-15T12:30:00+02:00",
  "status": "confirmed",
  "test_method": "practitioner",
  "created_at": "2026-04-01T09:45:00Z",
  "updated_at": null,
  "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",
    "created_at": "2026-04-01T09:14:32Z",
    "updated_at": null
  },
  "panels": [],
  "shipments": []
}
Schedule a blood draw appointment for a patient profile at a specific test location. Once created, the appointment enters confirmed status by default (some locations may instead default to pending — this is a per-location setting). Use Add Panels to attach blood test panels before confirming the blood draw.

Request

Body parameters

profile_id
string
required
UUID of the patient profile to create the appointment for.
location_id
string
required
UUID of the test location where the blood draw will take place. Use List Locations to find available location IDs.
scheduled_at
string
required
Date and time of the appointment in ISO 8601 format (e.g., 2026-05-15T10:30:00Z or 2026-05-15T12:30: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.

Response

On success, the API returns 201 Created with the new appointment.
id
string
required
Unique appointment identifier (UUID).
profile_id
string
required
UUID of the profile this appointment belongs to.
location_id
string
UUID of the test location. null for home kit appointments.
scheduled_at
string
Scheduled appointment datetime in ISO 8601 format, returned with the test location’s offset (e.g. 2026-05-15T12:30:00+02:00). May be null.
status
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.
test_method
string
Method used for the blood draw. One of practitioner or home. May be null.
profile
object
required
The patient profile associated with this appointment.
panels
AppointmentPanel[]
required
Panels currently attached to this appointment. Empty for newly-created appointments — attach via Add Panels. Look up panel details (name, biomarkers) via List Panels.
shipments
AppointmentShipmentLink[]
required
Shipments linked to this appointment, oldest-link first. Empty for newly-created appointments — link via Create Shipment (with appointment_id) or Attach Shipments to Appointment.

Error responses

StatusDescription
400Validation error — e.g., scheduled_at is in the past.
403Forbidden — your API key does not have access to this operation.
404Profile or location not found.
500Internal server error.
curl --request POST \
  --url https://anivahealth.com/api/v1/appointments \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "profile_id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
    "location_id": "b7e2d1f5-3c4a-4e8b-a2f1-9d0c1e2f3a4b",
    "scheduled_at": "2026-05-15T12:30:00+02:00"
  }'
{
  "id": "c9f3e2a1-7d6b-4c5e-b3a2-1f0e9d8c7b6a",
  "profile_id": "a3f1c2d4-8b7e-4f2a-9c1d-2e3f4a5b6c7d",
  "location_id": "b7e2d1f5-3c4a-4e8b-a2f1-9d0c1e2f3a4b",
  "scheduled_at": "2026-05-15T12:30:00+02:00",
  "status": "confirmed",
  "test_method": "practitioner",
  "created_at": "2026-04-01T09:45:00Z",
  "updated_at": null,
  "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",
    "created_at": "2026-04-01T09:14:32Z",
    "updated_at": null
  },
  "panels": [],
  "shipments": []
}