Irmu
API Reference

Collect a crawl

GET /crawl/{job} — bearer auth, JSON responses, billed per successful request.

GET/crawl/{job}

Collect a crawl

Retrieves the result of an asynchronous crawl job that previously returned 202 Accepted. Use this endpoint after /crawl indicates a job is still running and you need to poll for completion.

When to use it: Call when /crawl responds with 202 and you need the final result, or when you want to monitor a long-running crawl's progress without consuming credits. Suitable for any polling strategy; no rate limits apply.

  • Authentication: Authorization header only. Query parameter ?key= is rejected.
  • Privacy by design: Other organizations' job IDs return 404, identical to nonexistent IDs. Job IDs are scoped to your organization prefix.
  • No credit headers: 200 responses omit credits_charged and credit headers; collection is always free regardless of outcome.
ParameterInTypeDescription
job *pathstringThe `job_id` from the `202`, verbatim.
request.sh
curl -X GET "https://app.irmu.com/api/crawl/{job}" \
  -H "Authorization: Bearer $IRMU_API_KEY"
200.json
"string"
request.js
const res = await fetch("https://app.irmu.com/api/crawl/{job}", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.IRMU_API_KEY}`,
    "Content-Type": "application/json",
  }
});

const data = await res.json();
request.py
import os, requests

res = requests.get(
    "https://app.irmu.com/api/crawl/{job}",
    headers={"Authorization": f"Bearer {os.environ['IRMU_API_KEY']}"}
)

print(res.json())
StatusMeaning
200The crawl has finished. As with `/crawl`, a page comes back as `text/html` and anything else -- the answer to an `ai_query`, say -- as the JSON envelope. Branch on the content type. No credit headers here, and no `credits_charged`: collecting costs nothing, so there is nothing to report.
202Still going. `position` says where it sits in the runner's queue while it is `queued`, and is null once it is `running`. A running crawl also carries `debug`: the url, a viewport screenshot and the page source as they stood when this was asked. Polling again takes a fresh look, so it is how to watch a slow crawl rather than wait blind on it. Collecting is free, and so is looking.
401No key, an unknown key, or a caller that is not an organization.
404No such crawl -- an id that never existed, or one belonging to another organization. The two are deliberately indistinguishable.
500The crawl failed after it had been accepted. Nothing is refunded. The charge was taken when the crawl was queued, and only a crawl that fails at `/crawl` itself -- before any work was done -- is handed back. `error` says what went wrong.

Start building with Irmu today

200 free credits every month, no card required. Every API, every integration, one key.