MedPlus Mart Category Products
medplus.category.products
Read a MedPlus Mart category with brand, printed-MRP and stock filters, its sort orders and one page of up to 20 per call.
At a glance
- Endpoint ID
medplus.category.products- Price
- 1 credit per call; failed calls are free
- Runs for up to
- 90 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.category.products", "input": { "brands": [ "DOQTAR" ], "category_id": "20093", "limit": 2, "page": 1, "parent_category_id": "10110", "sort": "price_low" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "medplus.category.products", "input": { "brands": [ "DOQTAR" ], "category_id": "20093", "limit": 2, "page": 1, "parent_category_id": "10110", "sort": "price_low" }}''')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.category.products", "input": { "brands": [ "DOQTAR" ], "category_id": "20093", "limit": 2, "page": 1, "parent_category_id": "10110", "sort": "price_low" }}),});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 |
|---|---|---|---|---|
category_id |
string | yes | Numeric MedPlus category id (20093), a MART_ prefixed id, or a public medplusmart.com category link. | 20093 |
brands |
array<string> | no | Brand names to keep, exactly as the listing publishes them (its BRAND_DATA keys). | ["DOQTAR"] |
exclude_out_of_stock |
boolean | no | Drop records the storefront marks out of stock. Default: false. |
|
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. |
2 |
mrp_max |
number | no | Highest printed MRP in rupees. From 0 to 10000000. | |
mrp_min |
number | no | Lowest printed MRP in rupees. The route filters on MRP, not on the selling price. From 0 to 10000000. | |
page |
integer | no | Page of the listing, counted in records of size limit. From 1 to 10. Default: 1. |
1 |
parent_category_id |
string | no | Parent category id. Optional; the listing route answers without it. | 10110 |
sort |
string | no | Sort order, mapped onto the storefront's own sort indexes. Allowed values: relevance, discount, name_asc, name_desc, price_low, price_high. Default: relevance. |
price_low |
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:
{ "category_name": "Accessories", "has_more": false, "total_count": 2, "filters": { "exclude_out_of_stock": false, "brands": [ "DOQTAR" ] }, "items": [ { "name": "DOQTAR MEMORY FOAM TRAVEL PILLOW", "price": 352, "mrp": 999, "availability": "available", "composition": "Surgicals", "currency": "INR", "discount_percent": 64.76, "image_url": "https://static2.medplusmart.com/products/_6d1c941_/DOQT0100_S.jpg", "manufacturer": "MEDPLUS HEALTH SERVICES LIMITED", "product_id": "DOQT0100" }, { "name": "DOQTAR YOGA MAT 6MM EVA", "price": 526.9, "mrp": 999, "availability": "available", "currency": "INR", "discount_percent": 47.26, "image_url": "https://static2.medplusmart.com/products/_ec807b9_/DOQT0101_S.jpg", "manufacturer": "MEDPLUS HEALTH SERVICES LIMITED", "product_id": "DOQT0101", "url": "https://www.medplusmart.com/product/doqtar-yoga-mat-6mm-eva_doqt0101" } ]}
Fields
| Field | Type | Example |
|---|---|---|
items[].name |
string | DOQTAR MEMORY FOAM TRAVEL PILLOW |
items[].price |
integer | 352 |
items[].mrp |
integer | 999 |
items[].availability |
string | available |
items[].composition |
string | Surgicals |
items[].currency |
string | INR |
items[].discount_percent |
number | 64.76 |
items[].image_url |
string | https://static2.medplusmart.com/products/_6d1c941_/DOQT0100_S.j… |
items[].manufacturer |
string | MEDPLUS HEALTH SERVICES LIMITED |
items[].product_id |
string | DOQT0100 |
category_name |
string | Accessories |
filters |
object | 2 fields |
filters.brands |
array | DOQTAR |
filters.exclude_out_of_stock |
boolean | false |
has_more |
boolean | false |
items |
array | 2 records |
total_count |
integer | 2 |
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.