API Reference

Get patient

Returns full details of a single patient by fingerprint. ### Multi-Clinic Visibility This endpoint succeeds if the API key's clinic has an active `CustomerClinicConnection` to the patient — **even if another clinic originally created the record**. Ownership of medical records within the patient is determined by `performed_by_clinic_fp` on each record. ### What This Returns Only the patient entity itself. Related medical records (SOAP, vaccines, medications, diagnostics) are fetched separately from their respective endpoints.

GET
/api/v1/patients/{fp}

Authorization

JWT-auth
AuthorizationBearer <token>

API key issued from the Vetigen Developer Portal. Pass as Authorization: Bearer YOUR_API_KEY.

In: header

Path Parameters

fp*string

Patient fingerprint (patient_{ULID}).

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -H "Authorization: Bearer $VETIGEN_API_KEY" \  https://api.vetigen.com/api/v1/patients/patient_01JABC9XYZKL4N7P3Q8TRM2ZDE
{
  "success": true,
  "data": {
    "fp": "patient_01JABC9XYZKL4N7P3Q8TRM2ZDE",
    "name": "Boncuk",
    "species": "dog",
    "breed": "Golden Retriever",
    "sex": "male",
    "date_of_birth": "2019-06-15",
    "weight_kg": 28.4,
    "owner_customer_fp": "customer_01JABC...",
    "created_at": "2024-11-03T09:24:17.000Z",
    "updated_at": "2026-03-18T14:02:41.000Z"
  },
  "message": "OK"
}
{
  "success": false,
  "error": {
    "code": "AUTH.UNAUTHORIZED",
    "message": "Authentication required.",
    "severity": "error"
  }
}
{
  "success": false,
  "error": {
    "code": "AUTH.FORBIDDEN",
    "message": "Insufficient permissions.",
    "severity": "error"
  }
}
{
  "success": false,
  "error": {
    "code": "PATIENT.NOT_FOUND",
    "message": "Patient with fingerprint patient_01JABC does not exist.",
    "severity": "error"
  }
}
{
  "success": false,
  "error": {
    "code": "AUTH.RATE_LIMITED",
    "message": "Rate limit exceeded. Retry in 42 seconds.",
    "severity": "warning"
  }
}
{
  "success": false,
  "error": {
    "code": "PATIENT.NOT_FOUND",
    "message": "Patient with fingerprint patient_01JABC does not exist.",
    "severity": "error",
    "details": {}
  }
}

List patients

Returns a paginated list of patients accessible to the clinic associated with your API key. ### Access Model Patients in Vetigen are **global entities** — a single patient record may be shared across multiple clinics via `CustomerClinicConnection`. This endpoint returns patients that have an active connection to the caller's clinic, regardless of which clinic originally created the record. ### Sorting Results are sorted by `updated_at DESC` by default — most recently modified first. ### Pagination Use `page` and `page_size` query parameters. The response includes `has_more: true` when additional pages are available. Prefer cursor-style iteration over random page access for large datasets — page numbers may shift as records change. ### Common Errors - `PATIENT.ACCESS_DENIED` — API key's clinic has no connection to the requested patients. - `AUTH.RATE_LIMITED` — see rate-limit headers.

List calendar events

Returns calendar events (appointments, surgeries, vaccinations, checkups, emergencies, sales) for the clinic associated with your API key. ### Timezone `start_at` and `end_at` are always UTC ISO 8601. When displaying to end users, convert to the clinic's configured timezone (returned in the `Patient` owner's locale settings, not on the event itself). ### Date Range Both `start_date` and `end_date` are optional. If omitted, the default window is **today through 30 days ahead**. Max allowed range is 90 days per request. ### Event Types & Status Machine - **Types:** `APPOINTMENT`, `SURGERY`, `VACCINATION`, `CHECKUP`, `EMERGENCY`, `SALE` - **Status flow:** `SCHEDULED → CHECKED_IN → IN_PROGRESS → PENDING_CHECKOUT → CLOSED` (or `CANCELLED`)