Docs / API reference

POST/v1/data/blinkit/products

Blinkit Products

Search Blinkit products for a fixed or custom delivery location.

Execution model

Live request

Runtime depends on endpoint, target, pagination, rendering mode, and active plan limits.

Credit weight

Live catalog

Current weights are managed from the Data API Weights admin table and shown on pricing before use.

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
}'
Example response
{
  "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"
}'
Example response
{
  "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"
}'
Example response
{
  "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"
Example response
{
  "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"
}'
Example response
{
  "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"
}'
Example response
{
  "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
}'
Example response
{
  "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
}

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
}'
Example response
{
  "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.

Parameters

NameTypeRequirementDescription
querystringOptionalSingle product search query, e.g. milk, chips, sunscreen. Required unless queries or start_url is supplied.
start_url / startUrlstringOptionalBlinkit search URL to derive the query from, e.g. https://blinkit.com/s/?q=milk. Only blinkit.com URLs are accepted.
queriesstring[]OptionalActor-style batch queries. Use this instead of query for multi-keyword runs. Max 25 queries.
num_resultsnumberOptionalMaximum products to return across fetched Blinkit pages (1-600).
max_pages / maxPagesnumberOptionalMaximum provider pages to fetch per query (1-50). If num_results is omitted, DataBlue requests max_pages * 12 products.
pagenumberOptionalStarting Blinkit result page (1-5).
location_keystringOptionalFixed launch location. Supported: blr_koramangala, mum_bandra, del_connaught_place.
latitude / latnumberOptionalCustom delivery latitude. Must be sent with longitude.
longitude / lonnumberOptionalCustom delivery longitude. Must be sent with latitude.
citystringOptionalOptional custom city label. Do not send city alone with a fixed location_key.
locationstringOptionalOptional custom area or address label. Use with city for text-based custom delivery context.
timeout_msnumberOptionalProvider timeout in milliseconds (3000-60000).

Response fields

FieldTypeDescription
successbooleanWhether the Blinkit request completed successfully.
query / queriesstring | string[]The normalized search query or batch query list.
location_keystringFixed launch location key used for the request.
requested_locationstringHuman-readable delivery area when available.
serviceableboolean | nulltrue when a Blinkit store was resolved for the location, false when the location is outside the delivery footprint, null when the lookup did not answer.
merchant_id / city_idnumberDecoded Blinkit merchant/city identifiers used for the source request.
pages_fetchednumberNumber of Blinkit provider pages fetched.
productsarrayProduct rows with product_id, variant_id, organic_rank, title, brand, price, MRP, discount, discount_percentage, quantity, inventory, max_allowed_quantity, sub_category, delivery_time, rating, rating_count, the full source image gallery in images/image_urls, and availability.
products[].is_sponsoredboolean | nullPaid-placement status. true when Blinkit marked the row as an ad; false when this response marked at least one other row and not this one; null when the response carried no ad markers anywhere, so the status is not captured. Do not read null as organic.
products[].delivery_eta_minutesnumber | nullDelivery ETA in whole minutes parsed from delivery_time, e.g. 30 for "30 mins". null when Blinkit states no number, such as "earliest" — DataBlue does not invent a delivery promise the source did not make.
query_resultsarrayPer-query status rows for batch requests.
time_takennumberAPI response time in seconds.
errorstringError message when the provider request fails.

Request and response

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": 5,
  "page": 1
}'
Example response
{
  "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,
  "products": [
    {
      "platform": "blinkit",
      "position": 1,
      "search_query": "milk",
      "organic_rank": 1,
      "product_id": "542051",
      "variant_id": "542051",
      "title": "Amul Taaza Toned Fresh Milk",
      "brand": "Amul",
      "price": 27,
      "mrp": 28,
      "currency": "INR",
      "discount": "4% OFF",
      "discount_percentage": 3.57,
      "quantity": "500 ml",
      "inventory": 12,
      "max_allowed_quantity": 6,
      "in_stock": true,
      "availability": "in_stock",
      "sub_category": "Milk",
      "delivery_time": "8 mins",
      "delivery_eta_minutes": 8,
      "is_sponsored": null,
      "rating": 4.54,
      "rating_count": 6491,
      "image_url": "https://cdn.grofers.com/...",
      "image_urls": [
        "https://cdn.grofers.com/..."
      ],
      "images": [
        "https://cdn.grofers.com/..."
      ],
      "merchant_id": 40076
    }
  ]
}