What you can do
- Profile management — Create, retrieve, and update patient demographic profiles.
- Appointment scheduling — Book blood draw appointments at Aniva test locations.
- Panel management — Add or remove lab test panels on an existing appointment.
- Individual biomarkers — Attach or detach individual biomarkers on an appointment without picking a panel.
- Panel catalog — Browse available panels with
GET /api/v1/panelsto discover panel IDs and biomarker membership. - Biomarker catalog — Browse the available biomarkers with
GET /api/v1/biomarkersto discover IDs. - Blood draw confirmation — Submit a barcode after a draw to trigger the lab order pipeline.
- Shipment pickup — Record courier pickup of blood samples in batch.
- Lab results — Retrieve clinical and genetic results and download lab report PDFs.
- Location discovery — List available test locations to present to patients.
- Shipment logistics — Create, track, modify, and cancel courier shipment orders.
Explore the docs
Authentication
Authenticate requests with your partner API key.
Quick Start
Make your first API call in minutes with step-by-step examples.
Profiles
Learn how patient profiles work and what data they hold.
Appointments
Understand the appointment lifecycle from scheduling to confirmation.
API versioning
The current API version is v1. All endpoints are prefixed with/api/v1/. The base URL is https://anivahealth.com.
Dates and timezones
The API uses two wire formats: ISO 8601 with offset for instants, and wall-clock pieces (YYYY-MM-DD, HH:MM) for tz-less calendar values. The offset on an instant tells you where the
value is anchored.
| Bucket | Format | Used for |
|---|---|---|
| Schedule-bound instant | ISO 8601 with the relevant location offset (e.g. 2026-04-15T10:30:00+02:00); often accompanied by an IANA timezone field | Times the user-facing schedule cares about — appointment scheduled_at, availability slots[], shipment pickup.from / pickup.till, shipment status_updates[].time (offset comes from the upstream provider). The wall-clock you read in the string is the wall-clock at the location. |
| System-audit instant | ISO 8601 in UTC (with Z suffix, e.g. 2026-04-15T08:30:00Z) | Audit timestamps not anchored to any user-facing location — created_at, updated_at, added_at. |
| Wall-clock pieces | YYYY-MM-DD for dates, HH:MM for times — no offset | Calendar-only or time-of-day values — date_of_birth, results tested_at, availability start_date / end_date, shipment pickup_date / pickup_time_from / pickup_time_till, location open_hours. |
- Inputs that take a datetime (e.g.
scheduled_atonPOST/PATCH /api/v1/appointments) must include a timezone designator — eitherZor an explicit offset like+02:00. Naive datetimes are rejected with400. The instant you sent is the instant we store, but the response always re-rendersscheduled_atin the test location’s offset — so the wall-clock you read in the response string matches the wall-clock at the location, regardless of which designator you sent. (new Date(response.scheduled_at)returns the same UTC instant either way; only the human-readable rendering changes.) - Wall-clock inputs are interpreted in the timezone of the resource they target: availability
dates use the
timezonequery param (defaults to the location’s timezone); shipmentpickup_date/pickup_time_*are interpreted in the origin location’s timezone. - Date-only response fields (e.g.
tested_at, availabilityavailability[].date) are calendar dates with no timezone.
Getting access
API keys are issued per partner by Aniva.Contact Aniva to receive your partner API key.