Skip to main content
PingMeDoc

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.

What your server receives (excerpt of the case object)
{
  "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

Two kinds of case. A consult is for a customer with no prescription. A validation is for one who uploaded a prescription.
  1. Step 1

    You create the case

    One POST /cases with the customer, the medicines and a confirmation that the customer agreed to the call. Send the same external_ref twice and you still get one case.

  2. 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.

  3. 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.

  4. 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.

  5. 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

The Telemedicine Practice Guidelines 2020 are not a policy document here. They decide what the doctor can sign.
Medicine lists and what each allows
ListWhat it coversOn our platform
List OCommon medicines such as paracetamolAny mode, first or follow-up consult
List AMost other prescription medicines. Anything we cannot classify is treated as List AOnly after a verified video call. Send prefer_video: true
List BMedicines for follow-up of an in-person diagnosisRefused
ProhibitedSchedule X and narcotic drugsNever 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

JSON over HTTPS, called from your server. A test key and a live key use the same URL.
1. Create a case
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" }
  }'
2. In test mode, choose the outcome
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" }'
3. We post the result to your https address
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.

Get a test key

Fill this in and we email you a link. Open it and press one button to get your key. Our team will also write to you.
What you need

Free. A test key never reaches a doctor or a customer.

Questions businesses ask

Is this legal?
Doctors in India may prescribe over a tele-consultation under the Telemedicine Practice Guidelines 2020, which sort medicines into lists and say which can be prescribed in which mode. We enforce those lists in software, so a prescription that the guidelines do not allow cannot be signed. We cannot give you legal advice about your own licences. The pharmacy that dispenses remains responsible for its own licence and for the Drugs and Cosmetics Rules, so show this page to your counsel.
Who are the doctors?
Registered medical practitioners on our panel. Every prescription and every case in the API carries the doctor's name, registration number and the state medical council or NMC that registered them, and the public verification page confirms the doctor and the date.
Can we use our own doctors?
Yes. A partner account can use the shared PingMeDoc panel or a dedicated pool of doctors assigned only to your cases. Your doctors work in the same checks, audit trail and prescription format.
Which languages are covered?
You send the customer's preferred language with the case and the doctor sees it. Which languages the panel covers for your volumes is agreed in your contract.
What if the customer does not pick up?
The case ends as PATIENT_UNREACHABLE and you get a signed webhook, so you can tell your customer and offer a new request. Whether unreachable cases are billed is set in your contract.
What is the difference between consult and validation?
A consult is for a customer who has no prescription: the doctor speaks to them and decides. A validation is for a customer who uploaded one: the doctor checks that it is genuine and covers each medicine. Either can end in a decline with a coded reason.
Will the doctor always prescribe what we send?
No, and you should not promise your customer that. The doctor decides independently. They may change a medicine, remove one or decline. Each line comes back as PRESCRIBED, CHANGED or NOT_PRESCRIBED, and you dispense only what the prescription says.
How fast is it?
Pickup and turnaround targets are agreed per contract and reported on every case. The API returns when the case was created, assigned, connected and decided, so you measure us yourself.
Can we test before we sign anything?
Yes. Ask for a test key on this page and you get one by email in minutes, free. A test key never reaches a doctor or phones a customer. You choose each outcome with the simulate call and get the same signed webhooks you will get live.
How are we invoiced? Is GST charged?
You get one invoice a month for the cases that finished. The GST treatment is set in your contract and printed on the invoice.
Where is our customers' data kept?
In our Supabase database in Mumbai. Names and phone numbers are never included in a webhook; you match it to your order by your own reference. The phone number is used to make the consultation call and for nothing else. Retention is set per contract, and we sign data processing terms aligned to the DPDP Act on request.