Skip to main content

Jan Aushadhi Kendra discovery

Jan Aushadhi Kendras are the government generic medicine stores run under the Pradhan Mantri Bhartiya Janaushadhi Pariyojana. After this page you will know the five ways to search for one and every field that comes back.

Who does what

Three parties. Shared roles, signing and onboarding are on UHI services.

PartyWho runs itWhat it does here
EUAYou, or any PHR appSends the search. Receives the on_search on your callback URL. Renders the Kendra list.
UHI GatewayNHAValidates and routes the search. Relays the on_search back to you.
HSPAPMBI, the Pharmaceuticals and Medical Devices Bureau of IndiaQueries the PMBI Kendra database. Builds the on_search catalog.

You do not build a HSPA unless you are PMBI or their technology partner.

Message flow

Two calls, asynchronous, discovery only. There is no booking and no ordering. The HTTP 200 from the Gateway is a receipt, not the result.

StepWho actsWhat happens
1Your systemThe user taps "Find Jan Aushadhi Kendra". You build a search with your filters and POST it to the Gateway.
2GatewayReturns HTTP 200 ACK to you straight away. Forwards the search to the PMBI HSPA.
3PMBI HSPAQueries the Kendra database against your filters.
4PMBI HSPAPOSTs an on_search to the Gateway with a catalog of matching Kendras.
5GatewayPOSTs the on_search to your consumer_uri.
6Your systemACKs the on_search and renders the list.

Match the on_search to its request by context.transaction_id, which the HSPA copies from your search. Your consumer_uri must be a publicly reachable HTTPS endpoint.

Service identity

Fixed for this service. These values route your search to PMBI rather than to a teleconsultation or ambulance provider.

ParameterValueWhere it goes
domainnic2008:47721context.domain in every call
fulfillment.typeJANAUSHADHImessage.intent.fulfillment.type
item.descriptor.codeJANAUSHADHImessage.intent.item.descriptor.code
item.descriptor.nameJANAUSHADHImessage.intent.item.descriptor.name
Provider IDpmbi.hspaIdentifies the PMBI HSPA on the network
Provider URLhttps://nha-pmbi.pmbi.co.in/api/storeThe PMBI HSPA endpoint registered with NHA
HSPA public key IDpmbi.hspapid.jakThe Gateway uses it to verify PMBI's response signature
Gateway base URL, sandboxhttps://uhigatewaysandbox.abdm.gov.in/api/v1/uhi/searchAppend /search or /on_search to the base path
Gateway base URL, productionhttps://uhigateway.abdm.gov.in/api/v1/uhi/searchAppend /search or /on_search to the base path

Search filters

There is no mandatory location filter. All five filter shapes below are independent, and they combine.

Search typeFields usedUse case
By Kendra codecategory.descriptor.code, category.descriptor.nameLook up one Kendra by its PMBJP code
By state and districtlocation.state.code, location.state.name, location.district.code, location.district.nameAll Kendras in a district
By pincodeaddress.area_codeKendras in a 6 digit pincode area
By GPS and radiuslocation.gps, location.radius.type, location.radius.value, location.radius.unitKendras near the user
Combinedstate, district and address.area_code togetherNarrow to a sub area of a district

Note that address sits beside location inside message.intent, not inside it.

Sample payloads

The context block is the same in all five variants. Only message.intent changes. Fill in your own consumer_id, consumer_uri, message_id, transaction_id and timestamp.

Search by Kendra code

{
"context": {
"domain": "nic2008:47721",
"country": "IND",
"city": "std:011",
"action": "search",
"core_version": "0.7.1",
"consumer_id": "<YOUR_EUA_ID_FROM_NHA_ONBOARDING>",
"consumer_uri": "<YOUR_HTTPS_CALLBACK_URL>",
"message_id": "<FRESH_UUID_PER_CALL>",
"timestamp": "2026-06-09T18:24:35",
"transaction_id": "<FRESH_UUID_PER_SEARCH_SESSION>"
},
"message": {
"intent": {
"category": {
"descriptor": {
"code": "PMBJK02129",
"name": "PMBJK02129"
}
},
"fulfillment": {
"type": "JANAUSHADHI",
"start": { "time": { "timestamp": "2026-06-19T00:00:00" } },
"end": { "time": { "timestamp": "2026-06-19T23:59:59" } }
},
"item": {
"descriptor": { "code": "JANAUSHADHI", "name": "JANAUSHADHI" }
}
}
}
}

Confirm what goes in category.descriptor before you build this one. See Confirm at onboarding below.

Search by state and district

Replace the category block with a location block.

{
"message": {
"intent": {
"fulfillment": {
"type": "JANAUSHADHI",
"start": { "time": { "timestamp": "2026-06-09T00:00:00" } },
"end": { "time": { "timestamp": "2026-06-09T23:59:59" } }
},
"item": {
"descriptor": { "code": "JANAUSHADHI", "name": "JANAUSHADHI" }
},
"location": {
"district": { "code": "509", "name": "KHAMMAM" },
"state": { "code": "36", "name": "Telangana" }
}
}
}
}

Search by pincode

{
"message": {
"intent": {
"fulfillment": {
"type": "JANAUSHADHI",
"start": { "time": { "timestamp": "2026-06-19T00:00:00" } },
"end": { "time": { "timestamp": "2026-06-19T23:59:59" } }
},
"item": {
"descriptor": { "code": "JANAUSHADHI", "name": "JANAUSHADHI" }
},
"address": { "area_code": "500028" }
}
}
}

Search by GPS and radius

{
"message": {
"intent": {
"fulfillment": {
"type": "JANAUSHADHI",
"start": { "time": { "timestamp": "2026-06-09T00:00:00" } },
"end": { "time": { "timestamp": "2026-06-09T23:59:59" } }
},
"item": {
"descriptor": { "code": "JANAUSHADHI", "name": "JANAUSHADHI" }
},
"location": {
"gps": "17.39916197665472, 78.43400530708318",
"radius": { "type": "CONSTANT", "value": "5", "unit": "km" }
}
}
}
}

Combined filters

{
"message": {
"intent": {
"fulfillment": {
"type": "JANAUSHADHI",
"start": { "time": { "timestamp": "2026-06-19T00:00:00" } },
"end": { "time": { "timestamp": "2026-06-19T23:59:59" } }
},
"item": {
"descriptor": { "code": "JANAUSHADHI", "name": "JANAUSHADHI" }
},
"location": {
"district": { "code": "507", "name": "HYDERABAD" },
"state": { "code": "36", "name": "Telangana" }
},
"address": { "area_code": "500028" }
}
}
}

on_search response

PMBI sends this to your consumer_uri through the Gateway. Each entry in catalog.providers is one enrolled Kendra. Shortened here to one record.

{
"context": {
"domain": "nic2008:47721",
"country": "IND",
"city": "std:011",
"action": "on_search",
"core_version": "0.7.1",
"consumer_id": "nha.eua",
"consumer_uri": "https://uhieuasandbox.abdm.gov.in/api/v1/euaService",
"provider_id": "pmbi.hspa",
"provider_uri": "https://staging-nha-pmbi.pmbi.co.in/api/store",
"message_id": "e9a19230-f951-11ec-b135-53aea776f66b",
"timestamp": "2026-06-09T18:24:35",
"transaction_id": "e9a19230-f951-11ec-b135-53aea776f66b"
},
"message": {
"catalog": {
"descriptor": {
"name": "JAN AUSHADHI KENDRA HSPA",
"images": "https://janaushadhi.gov.in/img/bhartiya_janaushadhi_priyojna_2.svg",
"short_desc": "",
"long_desc": ""
},
"providers": [
{
"id": "PMBJK10844",
"descriptor": {
"name": "Jan Aushadhi Kendra",
"code": "PP",
"symbol": "1",
"short_desc": "",
"long_desc": ""
},
"fulfillments": [
{
"id": "0",
"type": "contact",
"agent": { "name": "Sunita Zanwar" },
"start": { "time": { "timestamp": "2023-06-30T00:00:00" } }
}
],
"location": {
"id": "1",
"descriptor": { "name": "Jan Aushadhi Kendra" },
"city": { "name": "", "code": "" },
"district": { "name": "PUNE", "code": "490" },
"state": { "name": "Maharashtra", "code": "27" },
"country": { "name": "INDIA", "code": "+91" },
"gps": "18.51996721338908,73.86697649999999",
"address": "Shop No.2, CTS No.350, Sai Appartment, Near KEM Hospital Rasta Peth, Pune, Pune, Maharashtra, India - 411011",
"radius": { "type": "CONSTANT", "value": "1.19", "unit": "km" }
},
"contact": {
"phone": "9309534959",
"email": "janaushadhikem@gmail.com"
}
}
]
}
}
}

Field reference

search: context

All fields are mandatory. The block is identical across every variant.

FieldTypeValue
domainstringnic2008:47721, fixed
countrystringIND, fixed
citystringSTD code, for example std:011
actionstringsearch, fixed
core_versionstring0.7.1
consumer_idstringYour registered EUA identifier
consumer_uristringYour HTTPS callback URL
message_idUUIDFresh per call. Never reuse.
transaction_idUUIDFresh per search session. The on_search copies it.
timestampISO 8601Request time, for example 2026-06-09T18:24:35

search: message.intent

Field pathTypeMandatoryDescription
fulfillment.typestringYesJANAUSHADHI, fixed
fulfillment.start.time.timestampdatetimeYesStart of the search window
fulfillment.end.time.timestampdatetimeYesEnd of the search window
item.descriptor.codestringYesJANAUSHADHI, fixed
item.descriptor.namestringYesJANAUSHADHI, fixed
category.descriptor.codestringConditionalSet when searching by Kendra code
category.descriptor.namestringConditionalSet when searching by Kendra code
location.state.namestringNoState name, for example Maharashtra
location.state.codestringNoNumeric state code, for example 27
location.district.namestringNoDistrict name, for example Ahmednagar
location.district.codestringNoNumeric district code, for example 466
location.gpsstringNolat,long, for example 19.7126974,74.4833288
location.radius.typestringNoCONSTANT. Required with a GPS search.
location.radius.valuestring or floatNoRadius in km, for example 5
location.radius.unitstringNokm
address.area_codestringNo6 digit pincode, for example 413736

on_search: provider records

Field pathTypeDescription
catalog.providers[].idstringPMBJP Kendra code, for example PMBJK01460
catalog.providers[].descriptor.namestringKendra name
catalog.providers[].descriptor.codestringOwnership type: PP private-private, PG private-government, GG government-government. Treat the list as incomplete.
catalog.providers[].descriptor.symbolstringSerial number assigned by PMBI
catalog.providers[].descriptor.short_descstringMay be empty
catalog.providers[].descriptor.long_descstringMay be empty
catalog.providers[].fulfillments[].typestringcontact. This block carries the contact person.
catalog.providers[].fulfillments[].agent.namestringContact person at the Kendra
catalog.providers[].fulfillments[].start.time.timestampdatetimePMBJP enrolment date
catalog.providers[].location.gpsstringlat,long of the Kendra
catalog.providers[].location.addressstringFull street address
catalog.providers[].location.city.namestringMay be empty
catalog.providers[].location.city.codestringMay be empty
catalog.providers[].location.district.namestringDistrict name
catalog.providers[].location.district.codestringDistrict code
catalog.providers[].location.state.namestringState name
catalog.providers[].location.state.codestringState code
catalog.providers[].location.radiusobjectA distance with a unit, for example 1.19 km. Present in responses, absent from the field reference, so what it is measured from is not stated.
catalog.providers[].location.country.namestringINDIA, fixed
catalog.providers[].location.country.codestring+91, fixed
catalog.providers[].contact.phonestringKendra phone number
catalog.providers[].contact.emailstringMay be empty

Confirm at onboarding

Two values are settled when you onboard. Build the flow and hold these until your onboarding contact confirms them.

  • What goes in category.descriptor for a Kendra code search. Both the Kendra code itself, for example PMBJK02129, and the literal string Jan Aushadhi Kendra Code are in circulation. Confirm which the HSPA accepts before you ship a Kendra code search.
  • The HSPA identity in on_search. Route on transaction_id, not on provider_id, so a change of provider host does not break your matching.

Next