MedPlus Mart Products Search
medplus.search.products
Search MedPlus Mart medicines and health products with selling price, printed MRP, pack size, manufacturer and stock, one page of up to 20 per call.
At a glance
- Endpoint ID
medplus.search.products- Price
- 1 credit per call; failed calls are free
- Runs for up to
- 120 seconds
Request
Send the endpoint ID as capability and its fields as input. Set UPSCRAPE_API_KEY to your key first.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "medplus.search.products", "input": { "limit": 20, "page": 1, "query": "paracetamol" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "medplus.search.products", "input": { "limit": 20, "page": 1, "query": "paracetamol" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "medplus.search.products", "input": { "limit": 20, "page": 1, "query": "paracetamol" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
Input
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
query |
string | yes | Medicine name, brand, salt or health product to search for. A search-type prefix such as C:: is accepted and kept. | paracetamol |
limit |
integer | no | Records in this call's one page, at most 20. A call reads one page; ask for the next one with page. From 1 to 20. Default: 20. |
20 |
page |
integer | no | Result page. The public search route takes a page number directly. From 1 to 10. Default: 1. |
1 |
Response
A finished call answers with HTTP 200; the data is in results[0].data, and billing.credits_charged is what it cost. A call still running after the wait answers 202: see jobs and results.
This is results[0].data from a real run:
{ "has_more": false, "items": [ { "name": "ROSCILLIN INJ 250MG INJ", "mrp": 24.14, "availability": "out_of_stock", "composition": "Ampicillin sodium 250 MG /INJ", "currency": "INR", "image_url": "https://static2.medplusmart.com/products/_669010_/ROSC0013_S.jpg", "manufacturer": "RANBAXY", "product_id": "ROSC0013", "url": "https://www.medplusmart.com/product/roscillin-inj-250mg-inj_rosc0013" }, { "name": "CATHFLUSH 2ML INJ INJ", "mrp": 22.07, "availability": "out_of_stock", "composition": "Heparin 2000 IU", "currency": "INR", "image_url": "https://static2.medplusmart.com/products/_669010_/CATH0001_S.jpg", "manufacturer": "TROIKAA PHARMACEUTICALS LTD", "product_id": "CATH0001", "url": "https://www.medplusmart.com/product/cathflush-2ml-inj-inj_cath0001" } ]}
Fields
| Field | Type | Example |
|---|---|---|
items[].name |
string | ROSCILLIN INJ 250MG INJ |
items[].mrp |
number | 24.14 |
items[].availability |
string | out_of_stock |
items[].composition |
string | Ampicillin sodium 250 MG /INJ |
items[].currency |
string | INR |
items[].image_url |
string | https://static2.medplusmart.com/products/_669010_/ROSC0013_S.jpg |
items[].manufacturer |
string | RANBAXY |
items[].product_id |
string | ROSC0013 |
items[].url |
string | https://www.medplusmart.com/product/roscillin-inj-250mg-inj_ros… |
has_more |
boolean | false |
items |
array | 2 records |
If a call fails
A failed call costs nothing. The response carries an error.code you can branch on; Errors and retries lists every code and which ones to retry.
Other MedPlus Mart endpoints
Something missing or unclear? Ask the team that builds the MedPlus Mart endpoints.