Card batch
Pricing a binder? Batch it. Small batches go synchronous; large or bursty work goes to the job queue.
Bulk (≤ 25 queries)
curl -X POST https://grail.solutions/v1/scrape/bulk \
-H "Authorization: Bearer ***" \
-H "Content-Type: application/json" \
-d '{"queries":[
{"q":"mew ex 151","count":60},
{"q":"charizard base set","count":60}
]}'Each query runs through the cache-first path and is metered once. Per-query results include ok or an error — one bad query never fails the batch.
{
"results": [
{ "q": "mew ex 151", "ok": true, "summary": { "median": 156.5, "count": 3 }, "source": "live" },
{ "q": "charizard base set", "ok": true, "summary": { "median": 215.0, "count": 207 }, "source": "ledger" }
],
"metered": 2
}Jobs (bigger / bursty)
Above 25 queries, or when you'd rather not wait, enqueue a job. We pace it against our pool so you never get blocked, and you poll for the result.
curl -X POST https://grail.solutions/v1/scrape/jobs \
-H "Authorization: Bearer ***" -H "Content-Type: application/json" \
-d '{"queries":[{"q":"umbreon hs undainted"}]}'
# => 202 { "job_id": "job_…", "status": "queued" }
curl -H "Authorization: Bearer ***" \
https://grail.solutions/v1/scrape/jobs/job_…