Grail

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_…