Submit a large batch for incremental webhook delivery. Results are pushed to callback_url in batches as they complete.
{
"job_id": "...",
"client_ref": "...",
"batch_sequence": 1,
"is_final": false,
"results": [ ... ]
}Each delivery is signed with HMAC-SHA256. Verify using the webhook_secret returned at submission:
X-Signature: sha256=<hex digest>Compute HMAC-SHA256(webhook_secret, raw_request_body) and compare.
If webhook delivery fails after all retries, use POST /stream/{id}/replay-all to re-queue dead-lettered deliveries, or retrieve results directly via GET /stream/{id}/results.
| Parameter | Default | Maximum |
|---|---|---|
values | — | 100 000 |
delivery_batch_size | 100 | 200 |
| Job timeout | 1 440 min | 1 440 min |
Values to query. Maximum 1 000 per request. Duplicates are removed.
A comma-separated string is also accepted as a convenience form ("a,b,c" → ["a","b","c"]), but is not compatible with key: product — product values contain commas internally.
[ "4006381333962", "4719512101148" ]
Number of result pages to fetch per value. Applicable to Idealo and Amazon. Ignored by Google and eBay.
Maximum acceptable age of a result, in seconds. Default: 1200 (20 minutes). Maximum: 259200 (3 days) — the retention period for results; larger values are clamped.
When a value was already crawled inside this window, the stored result is returned without re-crawling it and the response is not charged. Set to 0 to always force a fresh crawl.
Available on eligible accounts; elsewhere every value is always crawled fresh.
Job hard timeout in minutes. The job is forcibly finished with whatever partial results exist after this time. Default: 1 440 (24 h).
Webhook URL to receive results when the job finishes. For incremental push delivery, use the Stream endpoint instead.
How many days a not-found cache entry is honoured before the product is re-queried. Applies to GTIN and PZN lookups (Idealo gtin/pzn, Amazon gtin, Google product). Set to 1 to force a fresh lookup on the next job after a single day. Ignored for term and id keys.
When true, each result carries a meta provenance block — the crawl trail (meta.crawls[]) with URL, HTTP status, timing and observation timestamp per fetch. See Audit & provenance.
Hold the request open for up to this many seconds (true = the maximum, 120) and, if the job finishes in time, return the results inline — the response gains a results array identical to what GET /job/{id}/download serves. If the job is still running when the wait elapses, the normal job object is returned with wait_timed_out: true; keep waiting with GET /job/{id}?wait=N or poll GET /job/{id} as usual. Accepts exactly one value (more returns "error": true); leave it off for batches.
Opaque reference string echoed in every webhook payload and in the status response. Use to correlate jobs with your own records.
Idealo only. When true, seller detail pages are crawled for marketplace offer sellers whose names are not yet in the database. Seller names already cached in the database are always applied regardless of this flag.
Enabling this adds one additional request per unresolved seller, billed at the standard rate.
- Mock serverhttps://docs.kwery.co/_mock/api-reference/stream
- Productionhttps://api.kwery.co/stream
curl -i -X POST \
https://docs.kwery.co/_mock/api-reference/stream \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-d '{
"source": "idealo",
"country": "de",
"key": "gtin",
"values": [
"4006381333962",
"4719512101148"
],
"callback_url": "https://your-server.example.com/webhooks/prices",
"client_ref": "batch-2026-04-03",
"delivery_batch_size": 50
}'{ "error": false, "job_id": "64f1c2d3e4b5a6c7d8e9f0a1", "webhook_secret": "a3f8c2d1e9b4...", "client_ref": "batch-2026-04-03" }