Irmu
API Reference

Collect a crawl

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

GET/crawl/{job}

Collect a crawl

Retrieves a crawl that was still running when POST /crawl returned 202 Accepted. Poll this endpoint until you receive 200 or an error. The response mirrors /crawl format: text/html for pages, JSON envelope for other content types.

When to use it: Call after POST /crawl responds 202. Use it for long-running jobs where blocking is impractical, or to monitor progress with debuga=1 without waiting blindly. Call as frequently as needed; there is no cost, rate limit, or quota impact.

  • ?key= query parameter is rejected; authentication requires Authorization header only
  • 404 means either the job never existed or belongs to another organization; these cases are intentionally identical
  • Failed crawls return 500 with no refund; charges are committed at queue time
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`. With `debuga=1`, 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.