A prescription API you can defend
Send us a customer and the medicines they want. A registered doctor on the PingMeDoc™ panel calls them, checks who they are and what they are allergic to, and signs an e-prescription or declines with a coded reason. You get the result by signed webhook, with the prescription PDF and a public verification link.
For e-pharmacies, quick-commerce apps, pharmacy chains, health brands and insurers.
{
"external_ref": "ORD-100234",
"status": "PRESCRIPTION_ISSUED",
"decided_at": "2026-10-04T10:19:41Z",
"doctor": {
"name": "Dr. K. Meera",
"registration_no": "TNMC 98765",
"registration_council": "Tamil Nadu Medical Council"
},
"prescription": {
"number": "PRX-261022-000123",
"content_hash": "9b0c..."
}
}How a case flows
Step 1
You create the case
One
POST /caseswith the customer, the medicines and a confirmation that the customer agreed to the call. Send the sameexternal_reftwice and you still get one case.Step 2
A doctor takes it
The case is offered to a doctor on the panel, or to your own dedicated doctors. The doctor accepts and the case shows who has it.
Step 3
The doctor speaks to the customer
The doctor calls, confirms identity, age and allergies, and takes the history. Software records that the doctor actually connected before anything can be signed.
Step 4
The doctor signs or declines
Each medicine is prescribed, changed or not prescribed. If the doctor declines, a coded reason is required. The checks below run before signing.
Step 5
You get the result
A signed webhook, the case object, the prescription PDF and a public verification link. Dispense only the lines the prescription says.
Rules enforced in software
| List | What it covers | On our platform |
|---|---|---|
| List O | Common medicines such as paracetamol | Any mode, first or follow-up consult |
| List A | Most other prescription medicines. Anything we cannot classify is treated as List A | Only after a verified video call. Send prefer_video: true |
| List B | Medicines for follow-up of an in-person diagnosis | Refused |
| Prohibited | Schedule X and narcotic drugs | Never prescribed |
- Allergy check before signing
- What your customer reported and what the doctor recorded on the call are both checked against every medicine, including cross-reacting classes.
- Duplicate check before signing
- The same medicine or the same molecule twice on one prescription is stopped.
- No contact, no prescription
- A prescription cannot be signed until the doctor has reached the customer. Every case tells you how: our phone bridge connected, the video call was verified, or the doctor dialled by hand and recorded it.
- Every decline is coded
- not_clinically_indicated, needs_in_person, prohibited_remotely, prescription_invalid, identity_not_confirmed, patient_declined or other, with the doctor's own words.
- Registration on every prescription
- The doctor's name, registration number and council are printed on the PDF and returned by the API.
- Public verification
- Anyone with the printed prescription can scan its code. The page re-checks the record against its content hash and lists the medicines as signed, so an altered drug or quantity shows at once. It never shows the diagnosis or the phone number.
The API in 30 seconds
curl -X POST https://www.pingmedoc.com/api/partner/v1/cases \
-H "Authorization: Bearer $PMD_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_ref": "ORD-100234",
"kind": "consult",
"patient": {
"name": "Asha Raman",
"phone": "+919876543210",
"age_years": 34,
"sex": "female",
"language": "Tamil",
"reported_allergies": "Penicillin"
},
"items": [
{ "name": "Pantoprazole", "strength": "40 mg", "form": "tablet", "quantity": 1, "sku": "SKU-8812" }
],
"consent": { "attested": true, "reference": "consent-log-77812" }
}'curl -X POST https://www.pingmedoc.com/api/partner/v1/cases/{id}/simulate \
-H "Authorization: Bearer $PMD_KEY" \
-H "Content-Type: application/json" \
-d '{ "outcome": "PRESCRIPTION_ISSUED" }'webhook-id: msg_...
webhook-timestamp: 1791195581
webhook-signature: v1,...
{
"type": "case.prescription_issued",
"created_at": "2026-10-04T10:19:41Z",
"data": {
"id": "6f1c2a0e-5d0b-4a55-9d41-0d8d5b0f7c11",
"external_ref": "ORD-100234",
"environment": "live",
"kind": "consult",
"status": "PRESCRIPTION_ISSUED",
"created_at": "2026-10-04T10:15:02Z",
"assigned_at": "2026-10-04T10:15:20Z",
"connected_at": "2026-10-04T10:16:05Z",
"decided_at": "2026-10-04T10:19:41Z",
"doctor": {
"name": "Dr. K. Meera",
"registration_no": "TNMC 98765",
"registration_council": "Tamil Nadu Medical Council",
"qualifications": "MBBS, MD"
},
"decline_reason": null,
"prescription": {
"number": "PRX-261022-000123",
"content_hash": "9b0c...",
"valid_days": 30
},
"items": [ { "line_no": 1, "partner_sku": "SKU-8812", "decision": "PRESCRIBED", "...": "..." } ]
}
}Webhooks follow the Standard Webhooks specification, so any library for it can verify them. Everything else, including errors, limits and the going-live checklist, is in the documentation.
What you get on every case
- A prescription PDF
- Signed, with the doctor's registration, a prescription number and a verification code.
- A public verify link
- Scan the code on the paper to confirm it is genuine.
- A coded decline
- A fixed reason code you can handle in your own system, and the doctor's own words.
- Timestamps for every step
- Created, assigned, connected and decided, so you can measure pickup and turnaround yourself.
- A line decision for each medicine
- PRESCRIBED, CHANGED or NOT_PRESCRIBED, with what the doctor actually prescribed and why.
- An audit trail
- Every status change on the case, kept per case.
Security and data
- Keys are hashed
- An API key is shown once. We keep only a hash and a short prefix.
- Signed webhooks
- Standard Webhooks signatures, timestamped, retried for about 15 hours (six attempts) if your endpoint is down.
- Server-only storage
- Case tables and prescription files are not reachable from any browser or app. Row-level security is on with no client access.
- Mumbai region
- Case data and prescription files are stored in the AWS Mumbai region (ap-south-1).
- No customer identity in webhooks
- The name and phone number are never sent back. You match by your own reference.
- Retention and processor terms
- Retention is set per contract. Data processing terms aligned to the DPDP Act are available on request.
Pricing
Priced per finished case, with volume pricing and no setup fee. One GST invoice a month. Start in test mode today, free.