Irmu
API Reference

Every endpoint, one page

Base URL https://app.irmu.com/api — bearer auth, JSON responses, predictable errors.

View /api-reference.md
Endpoints

The surface area

Generated from the live OpenAPI spec and refreshed daily.

GET/crawl

Crawl a url

Fetches a single URL, charges the calling organization's credit balance, and returns the response body alongside billing metadata. Costs are computed before the fetch and exposed in credits_charged; daily per-host tallies are recorded for rate-limiting purposes.

When to use it for one-off page retrieval where you need the raw content, a JavaScript-rendered view, or an AI-generated answer about the page. Use premium when standard egress IPs are blocked. Use js=false only when you are certain the target is static and want lower cost.

  • js defaults to enabled; explicitly disable it for static targets to reduce charges.
  • ai_query adds a fixed 5-credit surcharge; omit or leave empty to skip it.
  • Passing key in the query string logs the credential in proxies and access logs; prefer the Authorization header.
ParameterInTypeDescription
url *querystring<uri>The page to crawl. Must be `http` or `https` and must have a host.
premiumquerystringFetch through the premium pool. Costs more; use it for targets that refuse ordinary requests. Sent as text in a query string, so the spellings a person would reach for all work: `true`, `false`, `1`, `0`, `yes`, `no`, `on`, `off`, in any case. Anything that is not a yes or a no is refused rather than quietly read as `false`.
jsquerystringRender javascript before reading the page. On by default, because it is what works on most of the web -- a caller who knows their target is static turns it off and pays less. Accepts the same spellings as `premium`.
ai_queryquerystringA question to answer about the page once it has been retrieved. Costs 5 credits on top of the fetch. An empty value is the same as asking nothing and costs nothing extra.
keyquerystringThe API key, for callers that cannot set a header. Accepted on this route only -- a key in a url is copied into access logs, proxy logs and `Referer` headers, which is a fair trade for a machine-to-machine endpoint and a bad one for anything else. Ignored when an `Authorization` header is present.
request.sh
curl -X GET "https://app.irmu.com/api/crawl?url=&premium=&js=&ai_query=&key=" \
  -H "Authorization: Bearer $IRMU_API_KEY"
200.json
{
  "url": "https://www.Example.COM/products?page=2",
  "domain": "www.example.com",
  "premium": false,
  "js": true,
  "ai_query": "",
  "credits_charged": 5,
  "credits_remaining": 995
}
Parameters

Shared request parameters

These apply across endpoints unless a product page says otherwise.

ParameterTypeDescription
urlstring, requiredAbsolute URL of the target page.
renderbooleanRun the request in real headless Chrome before capturing.
countrystringTwo-letter country code for proxy geo-targeting.
citystringCity-level targeting where the pool supports it.
session_idstringReuse the same IP and cookie jar across requests.
wait_forstringCSS selector to wait for before capture.
timeout_msintegerHard ceiling for the request, 1000–120000.
premium_proxybooleanForce residential IPs for hard targets.
devicestringdesktop | mobile — sets viewport and fingerprint.
outputstringhtml | text | markdown for scrape responses.
Authentication

Bearer tokens

auth.sh
curl https://app.irmu.com/api/account \
  -H "Authorization: Bearer irmu_sk_live_..."
Errors

Error envelope

error.json
{
  "error": {
    "code": "target_unreachable",
    "message": "Target failed after 4 retries.",
    "request_id": "req_01J9K2XA7Q",
    "billed": false
  }
}
Limits

Rate limits and concurrency

PlanConcurrent requestsBurst
Free11 req/s
Lite55 req/s
Standard5050 req/s
Pro100100 req/s
Enterprise500+ (negotiated)Negotiated

Start building with Irmu today

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