Cadabams · Partner API

Book real mental health, rehabilitation and diagnostics care, programmatically.

Search our practising clinicians, read live appointment availability with real pricing, create a patient record and confirm a booking, book a lab test — then take payment through a hosted link. Six stages, 35 endpoints, one OpenAPI 3.1 document.

1.0 · GET /v1/campuses
# Two headers. No default env — you can never hit
# production by forgetting a flag.
curl https://external-vendors.cadabamscare.in/v1/campuses \
  -H "x-api-key: <your key>" \
  -H "x-api-env: dev"
35endpoints
2headers
1payment step

The integration, stage by stage

Six stages, in the order you build them

Each stage names the endpoint that does the work and the one operational rule that matters. Stage 4 is optional — skip straight from 3.0 to 5.0 for a plain booking with no package. Stage 6 is independent of the rest — book a lab test for a patient any time after stage 3.

  1. 1.0Reference

    Load reference data

    Every campus and care centre, with the numeric ids every later call needs. Ids are stable — fetch this once and cache it, not per request.

    GET/v1/campusesList bookable locations
    GET/v1/care-centresList care centres (CMS-facing location detail)
    Cache aggressively — stop re-fetching
  2. 2.0Clinicians

    Find a clinician, then a slot

    Search the practising directory by speciality, city, area, language, age group or condition — then read live availability for the one the patient picked, with per-slot pricing before you commit.

    GET/v1/doctorsList doctors, filterable by specialty/city/area/condition/etc.
    GET/v1/availabilityBookable slots for a doctor with live per-slot pricing
    Cache doctors for hours; never cache slots
  3. 3.0Patients

    Register the patient

    Create the lead everything downstream hangs off, idempotent by phone number. Store the id it returns — leads.lookup can recover it later from the same phone number, but not the slot you booked with it.

    POST/v1/leadsCreate a lead
    POST/v1/leads/lookupRecover a lost cadabamsCareId from a phone number
    Idempotent by mobile number
  4. 4.0Packages

    Sell care packages (optional)

    Bundles of sessions priced below the per-consultation rate. Browse the catalogue, read a single package's detail, buy one for a patient, and list what they already own — skip this stage entirely for a plain one-off booking.

    GET/v1/packagesList available packages
    GET/v1/packages/:idGet a single package
    POST/v1/packages/purchaseBuy a package for a patient
    GET/v1/packages/purchasedList packages this vendor purchased for a patient
    Optional — not every booking needs it
  5. 5.0Appointments

    Book and take payment

    Bind the slot, the lead and the campus into a confirmed appointment, and receive a hosted Razorpay link in the same response — or draw a session from a package the patient already owns. Read appointment status back any time to confirm state, move a booking to a different slot, or cancel it outright.

    POST/v1/appointments/book-and-payBook an appointment and receive a hosted payment link
    POST/v1/appointments/book-from-packageBook a slot against a previously purchased package
    GET/v1/appointmentsAppointments for a cadabamsCareId
    POST/v1/appointments/rescheduleMove a booking you made to a different slot
    POST/v1/appointments/cancelCancel an appointment booked through this API
    POST/v1/appointments/payment-linkRe-request a payment link for an existing unpaid booking
    One call — no separate payment step
  6. 6.0Diagnostics

    Book a lab test

    Browse our diagnostic centres and the tests each one offers, book a sample collection for the patient, then track the order and pull its reports once results are in.

    GET/v1/diagnostics/centresList diagnostic/lab centres
    GET/v1/diagnostics/centres/:centre/testsList tests offered at a centre
    POST/v1/diagnostics/centres/:centre/bookingsBook a lab test at a centre
    GET/v1/diagnostics/ordersList diagnostic orders for a patient
    GET/v1/diagnostics/orders/:billId/reportsFetch reports for a diagnostic order
    Book once — poll orders for status, then fetch reports

Every read stage above is runnable. Open the interactive docs, set your key, and call each one live in your browser.

Try it in the docs

The shape of the API

A cross-section of the surface, straight from the route manifest. Reads are plain GETs with query parameters; writes take a JSON body.

GET/v1/campuses List bookable locations
GET/v1/doctors List doctors, filterable by specialty/city/area/condition/etc.
GET/v1/availability Bookable slots for a doctor with live per-slot pricing
POST/v1/leads Create a lead
POST/v1/leads/lookup Recover a lost cadabamsCareId from a phone number
GET/v1/packages List available packages
POST/v1/packages/purchase Buy a package for a patient
POST/v1/appointments/book-and-pay Book an appointment and receive a hosted payment link
GET/v1/appointments Appointments for a cadabamsCareId
26 further endpoints — care-centre detail, single-package lookups, and the rest of booking — are in the reference and the OpenAPI document.

How it works

x-api-key
Issued to you per environment. A dev key never works against production.
x-api-env
dev or prod. Required on every request — there is no default, so you can never hit production by forgetting a flag.
All times IST
Every timestamp is India Standard Time (UTC+05:30), returned as offset-aware ISO 8601 — 2026-07-30T16:30:00+05:30. No conversion needed on your side; just send IST explicitly when a parameter takes a datetime.
Strict by default
Unknown or mistyped fields are rejected with a 422 naming them, never silently dropped — patient_nmae fails loudly instead of booking a patient with no name. Every validation error comes back at once, and numeric bounds are enforced, so you fix a bad request in one pass.
Hosted payments
You receive a payment link and redirect the payer. Payments are processed by Razorpay and the hosted page takes every major method — cards, UPI, netbanking and wallets — so you add no payment methods yourself. Card data and our payment credentials stay out of your systems entirely.
Stable contract
Additive changes only within a version. Anything breaking arrives as a new path.
Secure payments via RazorpayVisa · Mastercard · RuPay · UPI · netbanking · walletsCard data never touches your systemsHosted link — no payment credentials to holdPatient identifiers redacted from logsCurated response fields

Generate a client

The OpenAPI document is public and needs no key, so you can generate a typed SDK before access is granted. It is derived from the live service, not written by hand, so it cannot drift from behaviour. Pick your stack:

Emits typed request functions plus Zod schemas. This is the generator we use internally against the same document, so it is the best-tested path.

npx @hey-api/openapi-ts \
  -i https://external-vendors.cadabamscare.in/openapi.json \
  -o ./sdk

Prefer httpx and attrs over urllib3? openapi-python-client generate --url https://external-vendors.cadabamscare.in/openapi.json reads the same document.

openapi-generator-cli generate -g python \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

The default library is okhttp-gson; pass library=native for java.net.http with no third-party HTTP dependency.

openapi-generator-cli generate -g java \
  --additional-properties=library=okhttp-gson \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

Use library=multiplatform for Kotlin Multiplatform, or jvm-ktor if the rest of your stack is already Ktor.

openapi-generator-cli generate -g kotlin \
  --additional-properties=library=jvm-retrofit2 \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

Set packageName explicitly — the default is openapi, which reads badly at every call site.

openapi-generator-cli generate -g go \
  --additional-properties=packageName=cadabams \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

csharp is the maintained generator; the older csharp-netcore id is an alias kept for compatibility.

openapi-generator-cli generate -g csharp \
  --additional-properties=targetFramework=net8.0 \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

Produces a Guzzle client with PSR-4 autoloading. Composer-install the generated directory as a path repository.

openapi-generator-cli generate -g php \
  --additional-properties=invokerPackage=Cadabams\\Partner \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

Generates a faraday-based gem; library=typhoeus is the alternative if you need parallel requests.

openapi-generator-cli generate -g ruby \
  --additional-properties=gemName=cadabams_partner \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

The id is swift5 — plain swift targets Swift 4 and will not build in a current toolchain.

openapi-generator-cli generate -g swift5 \
  --additional-properties=responseAs=AsyncAwait \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

dart-dio is null-safe and the right choice for Flutter; the legacy dart generator is not maintained.

openapi-generator-cli generate -g dart-dio \
  --additional-properties=pubName=cadabams_partner \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk

Emits a reqwest client. Add packageName to control the crate name in the generated Cargo.toml.

openapi-generator-cli generate -g rust \
  --additional-properties=supportAsync=true \
  -i https://external-vendors.cadabamscare.in/openapi.json -o ./sdk
Generators do not know about our headers. Whatever you generate, set x-api-key and x-api-env on every request in the client's default header config — once, centrally.

Ready to build?

Run every read stage above live, against real data, with your own key — no install, no sandbox to configure.

Prefer to read first? See the recipe book or request access.