Cadabams · Partner API
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.
# 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"
The integration, stage by stage
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.
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.
/v1/campusesList bookable locations/v1/care-centresList care centres (CMS-facing location detail)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.
/v1/doctorsList doctors, filterable by specialty/city/area/condition/etc./v1/availabilityBookable slots for a doctor with live per-slot pricingCreate 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.
/v1/leadsCreate a lead/v1/leads/lookupRecover a lost cadabamsCareId from a phone numberBundles 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.
/v1/packagesList available packages/v1/packages/:idGet a single package/v1/packages/purchaseBuy a package for a patient/v1/packages/purchasedList packages this vendor purchased for a patientBind 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.
/v1/appointments/book-and-payBook an appointment and receive a hosted payment link/v1/appointments/book-from-packageBook a slot against a previously purchased package/v1/appointmentsAppointments for a cadabamsCareId/v1/appointments/rescheduleMove a booking you made to a different slot/v1/appointments/cancelCancel an appointment booked through this API/v1/appointments/payment-linkRe-request a payment link for an existing unpaid bookingBrowse 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.
/v1/diagnostics/centresList diagnostic/lab centres/v1/diagnostics/centres/:centre/testsList tests offered at a centre/v1/diagnostics/centres/:centre/bookingsBook a lab test at a centre/v1/diagnostics/ordersList diagnostic orders for a patient/v1/diagnostics/orders/:billId/reportsFetch reports for a diagnostic orderEvery read stage above is runnable. Open the interactive docs, set your key, and call each one live in your browser.
Try it in the docsA cross-section of the surface, straight from the route manifest. Reads are plain GETs with query parameters; writes take a JSON body.
/v1/campuses
List bookable locations/v1/doctors
List doctors, filterable by specialty/city/area/condition/etc./v1/availability
Bookable slots for a doctor with live per-slot pricing/v1/leads
Create a lead/v1/leads/lookup
Recover a lost cadabamsCareId from a phone number/v1/packages
List available packages/v1/packages/purchase
Buy a package for a patient/v1/appointments/book-and-pay
Book an appointment and receive a hosted payment link/v1/appointments
Appointments for a cadabamsCareIddev or prod. Required on every request — there is no default,
so you can never hit production by forgetting a flag.2026-07-30T16:30:00+05:30. No conversion needed on your side;
just send IST explicitly when a parameter takes a datetime.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.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
x-api-key and x-api-env on every request in the
client's default header config — once, centrally.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.