Swiggy Instamart Category Products API
List products in a category or supported category link with pack prices, stock, filters and pagination.
- 1 credit per call
- Failed calls are free
- Updated
- swiggy-instamart.category.products.list
{ "next_offset": "1:26", "pagination_status": "continuation_available", "available_filters": { "facets": { "brand": [ "Fruits & Vegetables Category", "Fruits and Vegetables" ], "type": [ "Vegetables", "Leafy and Seasonings" ] }, "sorts": [ { "key": "relevance", "label": "Relevance" }, { "key": "price_low_to_high", "label": "Price (Low To High)" } ] }, "store": { "delivery_eta": "10 MINS", "latitude": 28.6327426, "longitude": 77.2195969, "pincode": "110001", "place": "New Delhi, Delhi 110001, India", "primary_store_id": "1062419", "serviceability_status": "SERVICEABLE", "serviceability_type": "FAST_SERVICEABLE", "serviceable": true, "store_id": "1062419" }, "products": [ { "name": "Cowpea Beans (Lobia Phaliyaan)", "mrp": "28", "brand": "Fruits and Vegetables", "category": "Vegetables", "discount": "6", "discount_label": "21% OFF", "discount_paise": 600, "id": "JSN6O2S7BZ", "image": "NI_CATALOG/IMAGES/CIW/2026/7/10/bc7be653-ef84-4993-b1c6-1240f9353eeb_XX05H71XO6_1.png", "image_url": "https://instamart-media-assets.swiggy.com/swiggy/image/upload/fl_lossy,f_auto,q_auto/NI_CATALOG/IMAGES/CIW/2026/7/10/bc7be653-ef84-4993-b1c…", "in_stock": true, "max_per_order": 2, "mrp_paise": 2800, "offer_price": "22", "offer_price_paise": 2200, "product_url": "https://www.swiggy.com/instamart/item/JSN6O2S7BZ", "quantity": "250 g", "sku": "B540PQ5NL5", "source_widget_type": "type.googleapis.com/swiggy.im.v1.ItemCollectionCard", "sponsored": true, "store_id": "1062419" }, { "name": "Indian Tomato (Tamatar)", "mrp": "98", "brand": "Fruits & Vegetables Category", "category": "Vegetables", "discount": "22", "discount_label": "22% OFF", "discount_paise": 2200, "id": "Q3J3C2YRB4", "image": "NI_CATALOG/IMAGES/CIW/2026/5/29/a95b1a7b-e480-4288-9b6d-125b95105ac0_1284.jpg", "image_url": "https://instamart-media-assets.swiggy.com/swiggy/image/upload/fl_lossy,f_auto,q_auto/NI_CATALOG/IMAGES/CIW/2026/5/29/a95b1a7b-e480-4288-9b6…", "in_stock": true, "max_per_order": 1, "mrp_paise": 9800, "offer_price": "76", "offer_price_paise": 7600, "product_url": "https://www.swiggy.com/instamart/item/Q3J3C2YRB4", "quantity": "500 g x 2", "sku": "TCTW10074Q", "source_widget_type": "type.googleapis.com/swiggy.im.v1.ItemCollectionCard", "store_id": "1062419" } ]}
| # | Product | Pack | Price (paise) | MRP (paise) | In stock | Store | Mrp | Brand | Category | Discount |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Cowpea Beans (Lobia Phaliyaan) | 250 g | 2200 | 2800 | true | 1062419 | 28 | Fruits and Vegetables | Vegetables | 6 |
| 2 | Indian Tomato (Tamatar) | 500 g x 2 | 7600 | 9800 | true | 1062419 | 98 | Fruits & Vegetables Category | Vegetables | 22 |
| 3 | Indian Tomato (Tamatar) | 500 g | 3900 | 4900 | true | 1062419 | 49 | Fruits & Vegetables Category | Vegetables | 10 |
| 4 | Green Chilli (Hari Mirch) | 100 g x 2 | 2400 | 3200 | true | 1062419 | 32 | Fruits & Vegetables Category | Leafy and Seasonings | 8 |
| 5 | Green Chilli (Hari Mirch) | 100 g | 1300 | 1600 | true | 1062419 | 16 | Fruits & Vegetables Category | Leafy and Seasonings | 3 |
| 6 | Onion (Pyaaz) | 1 kg | 7200 | 9000 | true | 1062419 | 90 | Fruits & Vegetables Category | Vegetables | 18 |
| 7 | Potato (Aloo) | 1 kg x 3 | 6900 | 9000 | true | 1062419 | 90 | Fruits & Vegetables Category | Vegetables | 21 |
| 8 | Potato (Aloo) | 1 kg | 2400 | 3000 | true | 1062419 | 30 | Fruits & Vegetables Category | Vegetables | 6 |
| 9 | Ooty Carrot (Gajar) | 250 g x 2 | 5400 | 7000 | true | 1062419 | 70 | Fruits & Vegetables Category | Vegetables | 16 |
| 10 | Ooty Carrot (Gajar) | 250 g | 2800 | 3500 | true | 1062419 | 35 | Fruits & Vegetables Category | Vegetables | 7 |
What you send
The input
object of the request, with every field the endpoint accepts.
- Send a six-digit pincode, or latitude and longitude together. If you send both, the pincode wins. Instamart picks the store from that location, and the response names the store it used. A store ID is optional: if you add one, it must be the store serving that location, or the call is refused. Keep the returned store and delivery point; one pincode does not stand for every address in its area.
- Send a category name or a category link, together with a location. A link must carry the category name and taxonomy type; a store ID in the link is ignored, because the location picks the store. A taxonomy type alone does not pick a category.
- Use the taxonomy type the categories endpoint returns when you have it; a category name can find it when you leave it out. Send a filter name and filter ID together to pick a sub-category.
- Sort by relevance, price low to high, price high to low or biggest discount. Price and discount sorts order the packs on the returned page, not the whole catalogue. Pick brands and types from the filters each response offers, up to ten of each; the minimum rating can be 3, 4 or 4.5.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| category_url | string | one of | Instamart category page link; categoryName, taxonomyType and storeId are read from the link | |
| lat | number | one of | Latitude in decimal degrees. From -90 to 90. | |
| lng | number | one of | Longitude in decimal degrees. From -180 to 180. | |
| pincode | string | one of | 6-digit Indian PIN code; the store serving it is resolved automatically (alternative to store_id) | 110001 |
| store_id | string | one of | Instamart store ID (alternative to pincode; takes precedence when both are given) | |
| brands | array<string> | no | Selected brand values from available_filters | |
| category_name | string | no | Category name from categories.list; optional when category_url is given | Fresh Vegetables |
| filter_id | string | no | Optional sub-category ID paired with filter_name | |
| filter_name | string | no | Optional sub-category name within the category | |
| min_rating | number | no | Minimum rating facet Allowed values: 3, 4, 4.5. |
3 · 4 · 4.5 |
| offset | string | no | All new category continuations are context-bound. Legacy page:items remains accepted without sort or facets but cannot detect context changes. | |
| primary_store_id | string | no | Primary store ID; defaults to store_id | |
| secondary_store_id | string | no | Secondary store ID when the location has one | |
| sort | string | no | Listing order; relevance is the default Allowed values: relevance, price_low_to_high, price_high_to_low, discount_high_to_low. |
relevance · price_low_to_high · price_high_to_l… |
| taxonomy_type | string | no | Optional taxonomy from categories.list; resolved from category tiles when omitted | Speciality taxonomy 1 |
| types | array<string> | no | Selected type values from available_filters |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| products[].name | string | Product or category name as Instamart returns it. | Cowpea Beans (Lobia Phaliyaan) |
| products[].quantity | string | Pack size text; compare equivalent packs. | 250 g |
| products[].offer_price_paise | integer | Selling price in integer paise; divide by 100 for rupees. Missing means unknown. | 2200 |
| products[].mrp_paise | integer | MRP in integer paise where known. | 2800 |
| products[].in_stock | boolean | Availability reported for this pack at this store. An absent value is unknown. | true |
| products[].store_id | string | Store serving this location. | 1062419 |
| products[].mrp | string | Maximum retail price printed on the pack, in rupees. | 28 |
| products[].brand | string | The brand on the listing. | Fruits and Vegetables |
| products[].category | string | The product's category, such as Vegetables. | Vegetables |
| products[].discount | string | The discount, in rupees. | 6 |
| products[].discount_label | string | The discount label, such as 21% OFF. | 21% OFF |
| products[].discount_paise | integer | The discount, in paise. | 600 |
| products[].id | string | Category identifier returned by the category list. | JSN6O2S7BZ |
| products[].image | string | Instamart's image reference. | NI_CATALOG/IMAGES/CIW/2026/7/10/bc7be653-ef84-4993-b1c6-1240f93… |
| products[].image_url | string | Link to the product image. | https://instamart-media-assets.swiggy.com/swiggy/image/upload/f… |
| products[].max_per_order | integer | The most of this product one order can hold. | 2 |
| products[].offer_price | string | The price you pay now, in rupees. | 22 |
| products[].product_url | string | Link to the product on Instamart. | https://www.swiggy.com/instamart/item/JSN6O2S7BZ |
| products[].sku | string | Instamart's stock code for the product. | B540PQ5NL5 |
| products[].source_widget_type | string | The kind of section the product came from. | type.googleapis.com/swiggy.im.v1.ItemCollectionCard |
| products[].sponsored | boolean | Sponsorship flag where returned; absence is not a confirmed false. | true |
| available_filters | object | Filters and sort options Instamart offers for these results. | 2 fields |
| available_filters.facets | object | Filter values you can narrow by. | 2 fields |
| available_filters.facets.brand | array | The brand on the listing. | Fruits & Vegetables Category, Fruits and Vegetables, Alive Leafs |
| available_filters.facets.type | array | The product types you can filter by. | Vegetables, Leafy and Seasonings, Exotic Vegetables |
| available_filters.sorts | array | Sort options, such as relevance. | 4 records |
| available_filters.sorts[].key | string | relevance | |
| available_filters.sorts[].label | string | Relevance | |
| next_offset | string | Send it back to get the next page. | 1:26 |
| pagination_status | string | Whether another page can be read. | continuation_available |
| products | array | The products returned. | 37 records |
| store | object | The store that serves this location. | 10 fields |
| store.delivery_eta | string | Delivery time Instamart shows for the store. | 10 MINS |
| store.latitude | number | Latitude of the resolved or checked delivery point. | 28.63 |
| store.longitude | number | Longitude of the resolved or checked delivery point. | 77.22 |
| store.pincode | string | The pincode of the store's area. | 110001 |
| store.place | string | The place the store serves. | New Delhi, Delhi 110001, India |
| store.primary_store_id | string | Instamart's ID for the store serving this location. | 1062419 |
| store.serviceability_status | string | Whether Instamart delivers here, such as SERVICEABLE. | SERVICEABLE |
| store.serviceability_type | string | The kind of delivery available, such as fast delivery. | FAST_SERVICEABLE |
| store.serviceable | boolean | Whether this delivery point is served. | true |
| store.store_id | string | Store serving this location. | 1062419 |
What this endpoint covers
- Do price sums with the offer price, MRP and discount in paise, and divide by 100 to show rupees. A missing amount stays unknown, and a real zero stays zero. Compare the same SKU and pack size, and read stock apart from price.
- Send the next-page value back unchanged with the same location, category, sort, filters, sub-category and layout. An empty page can still lead to more. The response says whether paging was complete; a limited or unknown answer does not mean you have the whole catalogue.
- Older page:items offsets work only without sorting or filters. Use the returned next-page value for filtered or sorted pages.
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
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": "swiggy-instamart.category.products.list", "input": { "category_name": "Fresh Vegetables", "pincode": "110001", "taxonomy_type": "Speciality taxonomy 1" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "swiggy-instamart.category.products.list", "input": { "category_name": "Fresh Vegetables", "pincode": "110001", "taxonomy_type": "Speciality taxonomy 1" }}''')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": "swiggy-instamart.category.products.list", "input": { "category_name": "Fresh Vegetables", "pincode": "110001", "taxonomy_type": "Speciality taxonomy 1" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
Using Upscrape, get Fresh Vegetables using Speciality taxonomy 1 at PIN 110001. Return product and SKU IDs, brand, pack, price, MRP, stock and store as a snapshot I can save for later comparison.
More from the Swiggy Instamart API
- Swiggy Instamart Products Search API1 credit
- Swiggy Instamart Product API1 credit
- Swiggy Instamart Categories API1 credit
- Swiggy Instamart Home Products API1 credit
- Swiggy Instamart Suggestions Search API1 credit
- Swiggy Instamart Suggest Locations API1 credit
- Swiggy Instamart Resolve Location API1 credit
- Swiggy Instamart Resolve Serviceability API1 credit
- Swiggy Instamart Delivery ETA API1 credit
The same data from other platforms
Swiggy Instamart Category Products API FAQ
The short answers. The docs have the long ones.
How much does the Swiggy Instamart Category Products API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send store_id or pincode or lat or lng or category_url. The input fields below list every option with its type and limits.
Do I need a Swiggy Instamart login?
No. It reads public Swiggy Instamart data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds swiggy-instamart.category.products.list, checks its price and runs it with the same credits as the REST API.
Your first Swiggy Instamart call is free.
Up to 100 free credits to start, no card needed.