Vetch for multi-location practices is now in private beta · Join the waitlist →
VetchVetch
Vetch API

Build on top. Without begging for a CSV.

Read and write to the chart, the schedule, the inbox, the till. Webhooks for the moment things change. SDKs in the languages your team already uses.

Read the docs Get a sandbox key
REST · OAuth 2.0 · webhooks · TS + Python SDKs · BAA covers API access
vetch.vet/api · sandboxLive · 6 events / sec
NodecurlPythonPOST /v1/appointments
// Book an appointment from your front desk
const appt = await vetch.vetointments.create({
patient: 'pat_atlas_park',
doctor: 'dr_sample',
reason: 'limp · third visit',
duration: 30,
idempotencyKey: 'evt_2k8jqx'
})
// → 201 Created
// { id: 'appt_2k8jqx', start: '2026-05-12T14:30Z', ... }
Idempotent. Retry the same key — you get the same appointment, not a duplicate.
webhooks · POST https://your-app/vetch-events200 OK
Events fire the moment they happen.
  • just now
    appointment.booked
    Atlas · Sample · 14:30
  • 14s
    chart.signed
    Vetch Romero · Sample · limp
  • 38s
    payment.captured
    Anderson household · $148.50
  • 1m
    message.replied
    Forsythe · refill (Vetch-drafted)
  • 2m
    recall.due
    Bailey Anderson · annual
  • 4m
    inventory.low
    Truck 2 · Xylazine 100mg/ml
Signed payload, automatic retries with exponential backoff, replay any event from the last 30 days.
What you can build

The API the rest of the website is built on.

REST

Every object, both directions

Patients, owners, appointments, charts, invoices, payments, messages, inventory, recall queues. Versioned endpoints; predictable shapes; cursor-paginated.

Webhooks

Events the moment they fire

60+ events — chart.signed, payment.captured, appointment.booked, message.received. Signed payloads, automatic retries, 30-day replay.

Auth

OAuth + scoped tokens

OAuth 2.0 with per-integration scopes. Service tokens for trusted backends. Rotate keys without redeploying. Every call attributed in the audit log.

SDKs

TS and Python, typed

First-party SDKs for TypeScript and Python — typed end-to-end, autocomplete on every field. Anything we miss, the OpenAPI spec covers.

Sandbox

A real test environment

Seeded with a realistic clinic — patients, appointments, history, owners. No charges hit real cards. Reset to a clean slate from the dashboard.

BAA-covered

PHI-safe by default

API access is covered by the same BAA as the product. Every call is in the audit log. No customer data is used to train shared models.

Production-grade

The API the rest of Vetch runs on.

The same endpoints your integrations call are the endpoints the Vetch web app, the mobile app, and the front-desk screen call. There is no second-class API.

  • Versioned endpoints · 12-month deprecation window before any breaking change
  • 99.9% uptime target · status page + RSS for incidents · public post-mortems
  • Cursor pagination + idempotency keys on every write
  • Audit log captures the calling key, IP, and human (if OAuth) for every request
  • OpenAPI spec published; SDKs regenerated nightly from the same source
Last 30 days
Endpoints142
Webhook events61
Read p95 latency142 ms
Daily API calls12.4M
Breaking changes shipped0

Honest answers.

REST, with cursor pagination and idempotency keys on writes. GraphQL is on the roadmap; we’ve held off until the use cases are concrete enough to design well.

An API that earns the rest of your stack.

Read the docs, claim a sandbox key, and ship the integration this week.

Read the docs Talk to an engineer