Every endpoint of the Veterical REST API, generated from the API itself.
All endpoints are relative to https://api.veterical.com. Every request is authenticated with an API key scoped to a single clinic.
apiKey — HTTP Basic auth carrying only the API key secret: Authorization: Basic base64(<key secret>).
accessToken — Operator session token issued by the Veterical dashboard: Authorization: Token <access token>.
Download the OpenAPI specification for use with your own tooling.
List appointments
List appointments for the API key's clinic, optionally filtered by clientId, patientId or a startTime/endTime window. Requires the appointments:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| clientId | query | string | |
| patientId | query | string | |
| startTime | query | string | |
| endTime | query | string |
| Status | Meaning |
|---|---|
| 200 | Array of appointments |
| 401 | Missing or invalid credentials |
| 403 | The API key lacks the appointments:read scope |
| 429 | Rate limit exceeded |
Create or update an appointment
Create an appointment in the API key's clinic. Requires the appointments:write scope.
| Status | Meaning |
|---|---|
| 200 | The created appointment |
| 403 | The API key lacks the appointments:write scope |
Get an appointment by id
Fetch a single appointment owned by the API key's clinic. Requires the appointments:read scope. Returns 404 for an appointment outside the key's clinic or organization so ids cannot be probed.
| Name | In | Type | Description |
|---|---|---|---|
| appointmentIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The appointment |
| 404 | Not found (or not owned by the caller) |
List clients
List the pet owners (clients) of the API key's clinic. Requires the clients:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| query | string | ||
| fields | query | string | Comma-separated projection of fields to return |
| Status | Meaning |
|---|---|
| 200 | Array of clients |
| 401 | Missing or invalid credentials |
| 403 | The API key lacks the clients:read scope |
| 429 | Rate limit exceeded |
Create or update a client
Create a pet owner in the API key's clinic. Requires the clients:write scope.
| Status | Meaning |
|---|---|
| 200 | The created client |
| 403 | The API key lacks the clients:write scope |
Get a client by id
Fetch a single client owned by the API key's clinic. Requires the clients:read scope. Returns 404 for a client outside the key's clinic or organization so ids cannot be probed.
| Name | In | Type | Description |
|---|---|---|---|
| clientIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The client |
| 404 | Not found (or not owned by the caller) |
List invoices
List invoices for the API key's clinic, optionally filtered by patientId. Requires the invoices:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| patientId | query | string |
| Status | Meaning |
|---|---|
| 200 | Array of invoices |
| 401 | Missing or invalid credentials |
| 403 | The API key lacks the invoices:read scope |
| 429 | Rate limit exceeded |
Create or update an invoice
Create an invoice in the API key's clinic. Requires the invoices:write scope.
| Status | Meaning |
|---|---|
| 200 | The created invoice |
| 403 | The API key lacks the invoices:write scope |
Get an invoice by id
Fetch a single invoice owned by the API key's clinic. Requires the invoices:read scope. Returns 404 for an invoice outside the key's clinic or organization so ids cannot be probed.
| Name | In | Type | Description |
|---|---|---|---|
| invoiceIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The invoice |
| 404 | Not found (or not owned by the caller) |
List patients
List the patients (animals) of the API key's clinic. Requires the patients:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| fields | query | string | Comma-separated projection of fields to return |
| Status | Meaning |
|---|---|
| 200 | Array of patients |
| 401 | Missing or invalid credentials |
| 403 | The API key lacks the patients:read scope |
| 429 | Rate limit exceeded |
Create or update a patient
Create a patient (animal) in the API key's clinic. Requires the patients:write scope.
| Status | Meaning |
|---|---|
| 200 | The created patient |
| 403 | The API key lacks the patients:write scope |
Get a patient by id
Fetch a single patient owned by the API key's clinic. Requires the patients:read scope. Returns 404 for a patient outside the key's clinic or organization so ids cannot be probed.
| Name | In | Type | Description |
|---|---|---|---|
| patientIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The patient |
| 404 | Not found (or not owned by the caller) |
List payments
List payments for the API key's clinic, optionally filtered by patientId. Requires the payments:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| patientId | query | string |
| Status | Meaning |
|---|---|
| 200 | Array of payments |
| 401 | Missing or invalid credentials |
| 403 | The API key lacks the payments:read scope |
| 429 | Rate limit exceeded |
Create or update a payment
Record a payment in the API key's clinic. Requires the payments:write scope.
| Status | Meaning |
|---|---|
| 200 | The created payment |
| 403 | The API key lacks the payments:write scope |
Get a payment by id
Fetch a single payment owned by the API key's clinic. Requires the payments:read scope. Returns 404 for a payment outside the key's clinic or organization so ids cannot be probed.
| Name | In | Type | Description |
|---|---|---|---|
| paymentIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The payment |
| 404 | Not found (or not owned by the caller) |
List vaccinations
List vaccination records for the API key's clinic, optionally filtered by clientId, patientId or appointmentId. These records drive recall reminders. Requires the vaccinations:read scope.
| Name | In | Type | Description |
|---|---|---|---|
| patientId | query | string | |
| appointmentId | query | string |
| Status | Meaning |
|---|---|
| 200 | Array of vaccinations |
| 401 | Missing or invalid credentials |
| 403 | The API key lacks the vaccinations:read scope |
| 429 | Rate limit exceeded |
Create or update a vaccination
Record a vaccination in the API key's clinic. Requires the vaccinations:write scope.
| Status | Meaning |
|---|---|
| 200 | The created vaccination |
| 403 | The API key lacks the vaccinations:write scope |
Get a vaccination by id
Fetch a single vaccination record owned by the API key's clinic. Requires the vaccinations:read scope. Returns 404 for a record outside the key's clinic or organization so ids cannot be probed.
| Name | In | Type | Description |
|---|---|---|---|
| vaccinationIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The vaccination |
| 404 | Not found (or not owned by the caller) |
List webhook subscriptions
Webhook subscriptions deliver client.created, patient.created, appointment.created, appointment.updated, invoice.created, payment.created and vaccination.created events (among others) to your server as signed POST requests (X-Veterical-Signature: t=<timestamp>,v1=<hex HMAC-SHA256 of "timestamp.body">). An endpoint failing 20 times in a row is disabled automatically. Subscriptions are managed with an operator access token; the secret is only returned once, on create.
| Status | Meaning |
|---|---|
| 200 | Array of webhook subscriptions (without secrets) |
Create a webhook subscription
The response includes the signing secret exactly once — store it; it cannot be retrieved again. A subscription is scoped to a single clinicId.
| Field | Type | Description |
|---|---|---|
| clinicIdrequired | string | |
| urlrequired | string | |
| events | array (client.created | client.updated | patient.created | patient.updated | appointment.created | appointment.updated | appointment.deleted | invoice.created | invoice.updated | payment.created | payment.updated | vaccination.created | vaccination.updated) | Empty array subscribes to all events |
| Status | Meaning |
|---|---|
| 200 | The created subscription, including its secret |
Update a webhook subscription
url, events and active are editable; the secret and clinic are immutable. Re-enabling an auto-disabled endpoint is done by setting active back to true.
| Name | In | Type | Description |
|---|---|---|---|
| webhookSubscriptionIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | The updated subscription (without secret) |
Delete a webhook subscription
| Name | In | Type | Description |
|---|---|---|---|
| webhookSubscriptionIdrequired | path | string |
| Status | Meaning |
|---|---|
| 200 | Deleted |