Blinkit Products Endpoint
Search one term or a batch of terms in a selected delivery area.
Getting Started
Send your API key as a bearer token. Start with the smallest request below.
Search a Fixed Location
Use a supported location_key for the simplest request.
curl -X POST "https://api.datablue.dev/v1/data/blinkit/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "milk",
"location_key": "blr_koramangala",
"num_results": 20
}'{
"success": true,
"source": "blinkit",
"query": "milk",
"location_key": "blr_koramangala",
"requested_location": "Koramangala, Bengaluru",
"city": "Bengaluru",
"serviceable": true,
"merchant_id": 40076,
"city_id": 1,
"page": 1,
"pages_fetched": 1,
"time_taken": 0.84
}Search Input
Search From a Blinkit URL
Send start_url to derive the query from a Blinkit search page. Only blinkit.com URLs are accepted.
curl -X POST "https://api.datablue.dev/v1/data/blinkit/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"start_url": "https://blinkit.com/s/?q=milk",
"location_key": "blr_koramangala"
}'{
"success": true,
"source": "blinkit",
"query": "milk",
"location_key": "blr_koramangala",
"requested_location": "Koramangala, Bengaluru",
"city": "Bengaluru",
"serviceable": true,
"merchant_id": 40076,
"city_id": 1,
"page": 1,
"pages_fetched": 1,
"time_taken": 0.84
}Batch Queries
Search several terms in one run. Batch is always asynchronous, so it takes two steps.
Start a Batch Job
Send queries instead of query for up to 25 terms. Every request containing queries is queued, so this returns 202 with a job to poll and reserves one credit per query.
curl -X POST "https://api.datablue.dev/v1/data/blinkit/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"queries": [
"milk",
"bread"
],
"num_results": 5,
"location_key": "blr_koramangala"
}'{
"success": true,
"job_id": "3f9c1a24-8b7e-4f52-9a10-6c2d8e5b4771",
"status": "queued",
"platform": "blinkit",
"operation": "products",
"status_url": "/v1/data/jobs/3f9c1a24-8b7e-4f52-9a10-6c2d8e5b4771",
"credits_reserved": 2
}Check Batch Status
Poll the returned status_url until status is completed, then read result. It holds one flat products list across every term plus a per-query breakdown in query_results. Every product carries search_query, so a row traces back to the term that produced it.
curl -X GET "https://api.datablue.dev/v1/data/jobs/3f9c1a24-8b7e-4f52-9a10-6c2d8e5b4771" \ -H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"job_id": "3f9c1a24-8b7e-4f52-9a10-6c2d8e5b4771",
"status": "completed",
"platform": "blinkit",
"operation": "products",
"status_url": "/v1/data/jobs/3f9c1a24-8b7e-4f52-9a10-6c2d8e5b4771",
"credits_reserved": 2,
"created_at": "2026-07-30T09:15:04Z",
"started_at": "2026-07-30T09:15:04Z",
"completed_at": "2026-07-30T09:15:11Z",
"error": null,
"result": {
"success": true,
"source": "blinkit",
"query": "milk",
"queries": [
"milk",
"bread"
],
"query_count": 2,
"location_key": "blr_koramangala",
"requested_location": "Koramangala, Bengaluru",
"city": "Bengaluru",
"page": 1,
"pages_fetched": 2,
"time_taken": 1.92,
"products": [
{
"platform": "blinkit",
"position": 1,
"search_query": "milk",
"organic_rank": 1,
"product_id": "542051",
"title": "Amul Taaza Toned Fresh Milk",
"brand": "Amul",
"price": 27,
"mrp": 28,
"currency": "INR",
"discount": "4% OFF",
"quantity": "500 ml",
"sub_category": "Milk",
"delivery_time": "8 mins",
"delivery_eta_minutes": 8,
"availability": "in_stock",
"is_sponsored": null
},
{
"platform": "blinkit",
"position": 1,
"search_query": "bread",
"organic_rank": 1,
"product_id": "11384",
"title": "Britannia Whole Wheat Bread",
"brand": "Britannia",
"price": 55,
"mrp": 60,
"currency": "INR",
"discount": "8% OFF",
"quantity": "400 g",
"sub_category": "Bread",
"delivery_time": "8 mins",
"delivery_eta_minutes": 8,
"availability": "in_stock",
"is_sponsored": null
}
],
"query_results": [
{
"query": "milk",
"success": true,
"result_count": 5,
"pages_fetched": 1
},
{
"query": "bread",
"success": true,
"result_count": 5,
"pages_fetched": 1
}
]
}
}Results and Pages
Control Pagination
Set a starting page and cap products or provider pages.
curl -X POST "https://api.datablue.dev/v1/data/blinkit/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "milk",
"num_results": 48,
"max_pages": 4,
"page": 1,
"location_key": "blr_koramangala"
}'{
"success": true,
"source": "blinkit",
"query": "milk",
"location_key": "blr_koramangala",
"requested_location": "Koramangala, Bengaluru",
"city": "Bengaluru",
"serviceable": true,
"merchant_id": 40076,
"city_id": 1,
"page": 1,
"pages_fetched": 1,
"time_taken": 0.84
}Delivery Location
Custom Coordinates
Send latitude and longitude together; city and location are optional labels.
curl -X POST "https://api.datablue.dev/v1/data/blinkit/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "milk",
"location_key": null,
"latitude": 12.9352,
"longitude": 77.6245,
"city": "Bengaluru",
"location": "Koramangala"
}'{
"success": true,
"source": "blinkit",
"query": "milk",
"location_key": "blr_koramangala",
"requested_location": "Koramangala, Bengaluru",
"city": "Bengaluru",
"serviceable": true,
"merchant_id": 40076,
"city_id": 1,
"page": 1,
"pages_fetched": 1,
"time_taken": 0.84
}Request Controls
Provider Timeout
Set the source timeout between 3,000 and 60,000 milliseconds.
curl -X POST "https://api.datablue.dev/v1/data/blinkit/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "milk",
"location_key": "blr_koramangala",
"timeout_ms": 30000
}'{
"success": true,
"source": "blinkit",
"query": "milk",
"location_key": "blr_koramangala",
"requested_location": "Koramangala, Bengaluru",
"city": "Bengaluru",
"serviceable": true,
"merchant_id": 40076,
"city_id": 1,
"page": 1,
"pages_fetched": 1,
"time_taken": 0.84
}Sponsored Rows
is_sponsored has three states, because Blinkit only publishes a positive ad marker. An ad-heavy query marks some rows and leaves the rest false; a query with no ads anywhere returns null on every row, meaning the status was not captured rather than that the rows are organic.
Identify Paid Placements
On a query that carries ads, marked rows return true and the unmarked rows in that same response return false.
curl -X POST "https://api.datablue.dev/v1/data/blinkit/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "smart watch",
"location_key": "blr_koramangala",
"num_results": 2
}'{
"success": true,
"source": "blinkit",
"query": "smart watch",
"location_key": "blr_koramangala",
"serviceable": true,
"page": 1,
"pages_fetched": 1,
"time_taken": 0.91,
"products": [
{
"platform": "blinkit",
"position": 1,
"search_query": "smart watch",
"product_id": "618922",
"title": "Noise Smart Watch",
"brand": "Noise",
"price": 1499,
"mrp": 2999,
"currency": "INR",
"availability": "in_stock",
"is_sponsored": true
},
{
"platform": "blinkit",
"position": 2,
"search_query": "smart watch",
"product_id": "618945",
"title": "Fire-Boltt Smart Watch",
"brand": "Fire-Boltt",
"price": 1799,
"mrp": 3499,
"currency": "INR",
"availability": "in_stock",
"is_sponsored": false
}
]
}Response
Read products; batch requests also include per-query status in query_results. To count paid placements, match is_sponsored === true and treat null as not captured — filtering on falsy would silently count unknown rows as organic.
Error Handling
A failed request returns success: false and an error drawn from exactly six messages: This location is not serviceable by Blinkit, Could not find a location matching '<name>'. Check the city or area name, or send latitude and longitude instead., No results found for this query on Blinkit, No search queries supplied, Blinkit is temporarily unavailable, please retry, and Blinkit did not respond in time, please retry. The first two are both location failures but need different fixes: a name that cannot be geocoded is a typo you can correct, while an unserviceable pin is outside Blinkit's delivery footprint. Only the last two are worth retrying. Handle 401 for authentication, 422 for invalid input, and 429 for limits.
