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 requiresAuthorizationheader only404means either the job never existed or belongs to another organization; these cases are intentionally identical- Failed crawls return
500with no refund; charges are committed at queue time
| Parameter | In | Type | Description |
|---|---|---|---|
| job * | path | string | The `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"Guides using this endpoint
- Rightmove API Alternative: How to Scrape Rightmove Listings (2026)
- How to Give Claude, ChatGPT and Cursor Live Web Access with an MCP Server
- Build Your Own AI Overview Tracker: Monitor Google AI Overviews by Keyword (2026)
- ChatGPT Brand Monitoring: Track What AI Tells Your Customers (2026)
- Booking.com API Alternative: Get Hotel Data Without Partner Approval
- How to Scrape Hotel Prices and Build a Hotel Database (2026)
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())| Status | Meaning |
|---|---|
| 200 | The 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. |
| 202 | Still 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. |
| 401 | No key, an unknown key, or a caller that is not an organization. |
| 404 | No such crawl -- an id that never existed, or one belonging to another organization. The two are deliberately indistinguishable. |
| 500 | The 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.