Blinkit Sample Merchant Coverage API
Check points across an area you choose to see which merchant IDs serve each one, with location and delivery time.
- 1 credit per call
- Failed calls are free
- Updated
- blinkit.merchant.coverage
{ "sampling": { "attempted_points": 12, "completed_points": 12, "coordinates_scope": "sampled_delivery_points", "elapsed_ms": 18071, "grid_complete": false, "grid_points": 20, "grid_step_km": 3, "selected_points": 12, "serviceable_points": 12, "bounds": { "east": 77.7, "north": 12.98, "south": 12.9, "west": 77.6 }, "points": [ { "latitude": 12.9, "longitude": 77.6, "observed_at": "2026-10-04T14:27:49.240370066Z", "status": "serviceable" }, { "latitude": 12.9, "longitude": 77.65, "observed_at": "2026-10-04T14:27:52.22980404Z", "status": "serviceable" } ] }, "results": [ { "merchant_id": "30614", "observations": [ { "city": "Bengaluru", "latitude": 12.9, "locality": "HSR Layout", "longitude": 77.65, "observed_at": "2026-10-04T14:27:53.601089011Z", "pincode": "560102", "fulfillment": [ { "eta_minutes": 8, "type": "express" } ] } ] }, { "merchant_id": "30632", "observations": [ { "city": "Bengaluru", "latitude": 12.953333333333333, "locality": "Marathahalli", "longitude": 77.7, "observed_at": "2026-10-04T14:28:03.193491645Z", "pincode": "560037", "fulfillment": [ { "eta_minutes": 19, "type": "longtail" } ] } ] } ]}
| # | Merchant ID |
|---|---|
| 1 | 30614 |
| 2 | 30632 |
| 3 | 30771 |
| 4 | 31130 |
| 5 | 35088 |
| 6 | 35572 |
| 7 | 35578 |
| 8 | 35940 |
| 9 | 36475 |
| 10 | 37746 |
What you send
The input
object of the request, with every field the endpoint accepts.
- Send the area to check in bounds, as its south, north, west and east edges. South must be below north and west below east. The area can be at most 10,000 square km and each side at most 200 km.
- grid_step_km sets the spacing between checked points, from 1.5 to 20 km, 5 by default. sampling_limit caps how many points are checked, from 1 to 200, 25 by default.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| bounds | object | yes | Geographic bounds of the requested area. | {…} |
| grid_step_km | number | no | From 1.5 to 20. Default: 5. |
3 |
| sampling_limit | integer | no | From 1 to 200. Default: 25. |
12 |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| results[].merchant_id | string | Store serving this location. | 30614 |
| results[].observations | array | How many of the checked delivery points this merchant serves. | 1 records |
| results[].observations[].city | string | City of the point where the store was seen. | Bengaluru |
| results[].observations[].fulfillment | array | Delivery types and times at that point. | 1 records |
| results[].observations[].latitude | number | Latitude of the point checked. | 12.9 |
| results[].observations[].locality | string | Area name of the point, such as HSR Layout. | HSR Layout |
| results[].observations[].longitude | number | Longitude of the point checked. | 77.65 |
| results[].observations[].observed_at | string | When the point was checked, in UTC. | 2026-10-04T14:27:53.601089011Z |
| results[].observations[].pincode | string | Pincode of the point checked. | 560102 |
| results | array | The results returned. | 29 records |
| sampling | object | How the area was checked: points, bounds and results. | 11 fields |
| sampling.attempted_points | integer | How many points in the area were checked. | 12 |
| sampling.bounds | object | The area checked, as north, south, east and west edges. | 4 fields |
| sampling.bounds.east | number | The area's eastern edge, as longitude. | 77.7 |
| sampling.bounds.north | number | The area's northern edge, as latitude. | 12.98 |
| sampling.bounds.south | number | The area's southern edge, as latitude. | 12.9 |
| sampling.bounds.west | number | The area's western edge, as longitude. | 77.6 |
| sampling.completed_points | integer | How many checks finished. | 12 |
| sampling.coordinates_scope | string | What the coordinates stand for, such as the points checked. | sampled_delivery_points |
| sampling.elapsed_ms | integer | How long the check took, in milliseconds. | 18,071 |
| sampling.grid_complete | boolean | Whether every grid point was checked. | false |
| sampling.grid_points | integer | How many points the area's grid has. | 20 |
| sampling.grid_step_km | integer | Distance between grid points, in kilometres. | 3 |
| sampling.points | array | Each point checked, with its result. | 12 records |
| sampling.points[].latitude | number | Latitude of the point checked. | 12.9 |
| sampling.points[].longitude | number | Longitude of the point checked. | 77.6 |
| sampling.points[].observed_at | string | When the point was checked, in UTC. | 2026-10-04T14:27:49.240370066Z |
| sampling.points[].status | string | The point's result: serviceable, unserviceable or failed. | serviceable |
| sampling.selected_points | integer | How many points were chosen in the area. | 12 |
| sampling.serviceable_points | integer | How many points Blinkit delivers to. | 12 |
What this endpoint covers
- Each merchant lists the checked delivery points it serves. The coordinates are those points, not physical stores.
- The response says whether the whole grid was checked, how many points were done and why it stopped. A capped or interrupted grid does not cover the whole area or every address in a pincode. Physical store addresses, opening hours and delivery radii are not returned.
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": "blinkit.merchant.coverage", "input": { "bounds": { "east": 77.7, "north": 12.98, "south": 12.9, "west": 77.6 }, "grid_step_km": 3, "sampling_limit": 12 }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "blinkit.merchant.coverage", "input": { "bounds": { "east": 77.7, "north": 12.98, "south": 12.9, "west": 77.6 }, "grid_step_km": 3, "sampling_limit": 12 }}''')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": "blinkit.merchant.coverage", "input": { "bounds": { "east": 77.7, "north": 12.98, "south": 12.9, "west": 77.6 }, "grid_step_km": 3, "sampling_limit": 12 }}),});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
With Upscrape, get the Blinkit sample merchant coverage for grid step km "3" and sampling limit "12". Tell me what it costs before you run it, then show the results as a table.
More from the Blinkit API
Blinkit Sample Merchant Coverage API FAQ
The short answers. The docs have the long ones.
How much does the Blinkit Sample Merchant Coverage 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 bounds. The input fields below list every option with its type and limits.
Do I need a Blinkit login?
No. It reads public Blinkit data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds blinkit.merchant.coverage, checks its price and runs it with the same credits as the REST API.
Your first Blinkit call is free.
Up to 100 free credits to start, no card needed.