Beta

Build on the same APIthat runs circleOS.

Patients, bookings, documents, lab orders, billing — every object in the clinic is a typed REST endpoint, an event you can subscribe to, and an automation you can wire up. Public and private APIs, typed client libraries, fully documented.

quickstart.ts
import { createCircleClient } from "@circle-health-berlin/sdk";const circle = createCircleClient({  baseUrl: "https://os.example.com/api/v1",  headers: {    Authorization: `Bearer ${process.env.CIRCLE_API_KEY}`,    "x-organization-id": "org_a1b2c3",  },});// Typed end to end — every resource autocompletesconst { data: services } = await circle.GET("/services");
300+
API endpoints
30+
Webhook events
1
Typed SDK
15+
Integrations

Solutions

Whatever you're building, the endpoint exists.

Scheduling, intake, billing, records, labs, messaging — every clinical and commercial workflow in circleOS is in the API.

Scheduling

Real-time availability across providers and locations. Book, reschedule, and cancel appointments from your own UI.

/scheduling · /bookings

Intake & forms

Send dynamic intake and consent forms; submissions sync straight back into the patient record.

/forms · /form-submissions

Payments & billing

Invoices, payment links, and checkout — with Stripe payments flowing back to you as events.

/invoices · /purchases

Patient records

Demographics, documents, and notes behind one typed API, scoped per organization.

/patients · /documents

Lab orders & results

Create lab orders programmatically and receive results the moment they land, via webhook.

/lab-orders

Care plans

Generate, schedule, assign, and export structured care plans for ongoing treatment.

/plans

Messaging

Two-way patient messaging over SMS and email through built-in Twilio and Sipgate channels.

/conversations · /messages

Commerce & catalogue

A public catalogue, carts, and checkout for selling services, products, and bundles online.

offering API

The platform

Everything in the product,
exposed to your code.

The same APIs that power circleOS itself — a private app API and a public Offering API, each with a typed client library.

App API

300+ endpoints across every object in the clinic, described by a public OpenAPI 3.1 spec.

GET/patients
POST/bookings
GET/documents
…and 297 more
Offering API

A public, browser-safe API for catalogue, carts, checkout, and booking.

Service30 min

Intro consultation

€45Book
Client libraries

A typed TypeScript client for each API, generated from its spec.

$npm i @circle-health-berlin/sdk
$npm i @circle-health-berlin/offering
Webhooks

Subscribe to 30+ events and react the moment something changes.

booking.booked0ms
lab_order.results_received12ms
payment.created3ms
Automations

Turn any event into an action — or POST the payload to your own service.

Trigger

Booking · no-show

Action

Send webhook

Authentication

Organization-scoped API keys with scopes, backed by WorkOS — plus SSO for staff.

API keyScopes

Production

sk_live_••••4f2a

read · write

Client libraries

Typed from requestto response.

@circle-health-berlin/sdk is generated from the same OpenAPI spec the API is built on. Paths, params, and payloads autocomplete as you type, and a schema change surfaces as a type error in your editor — not a surprise in production.

  • Path, query, and body fully typed
  • ESM and CommonJS builds
  • Validated requests and responses

Building a patient-facing storefront? The public Offering API ships its own typed client, @circle-health-berlin/offering — see the online shop guide.

patients.ts
// One client, the whole clinicconst { data: patient } = await circle.GET("/patients/{id}", {  params: { path: { id: patientId } },});// Responses are typed — no casting, no guessingconsole.log(patient.firstName, patient.email);

Security

Built for the most sensitive data.

Patient data demands more. circleOS keeps it private, compliant, and access-controlled by default.

Hosted in Europe

All data is stored and processed in the EU. It never leaves Europe.

Encrypted throughout

TLS in transit, encrypted at rest. Nothing is ever stored in the clear.

GDPR compliant

Designed around GDPR — data minimisation, audit trails, a clear processing model.

Granular roles & scopes

Scope every key and teammate to exactly what they need. Org-isolated by default.

Events

Know the moment it happens.

Every meaningful change emits an event. Subscribe to the resources you care about and circleOS posts a signed payload to your endpoint, with at-least-once delivery.

Patients

  • patient.created
  • patient.updated
  • patient.merged
  • patient.tagged

Bookings

  • booking.booked
  • booking.cancelled
  • booking.no_show
  • booking.in_progress

Clinical

  • lab_order.results_received
  • document.created
  • note.created
  • plan.assigned

Commerce

  • checkout.complete
  • invoice.created
  • payment.created
  • voucher.created
POST /your-endpoint
{  "event": "booking.booked",  "data": {    "id": "bkg_9f2c…",    "patientId": "pat_4a1b…",    "serviceId": "svc_intro",    "startsAt": "2026-07-02T09:30:00Z",    "status": "confirmed"  }}

Start building on circleOS.

Grab an API key, install the SDK, and make your first call in minutes.