Authentication
Every request carries an API key. Create keys in your dashboard.
Base URL
Every endpoint lives under /v1 of the API. In these pages, the examples read it from an environment variable:
export SCRAPE_ENGINE_URL="https://<your API host>/v1"
export SCRAPE_ENGINE_KEY="sk_…"API keys
Create a key in Dashboard → API keys. It's shown once: copy it into your secrets manager or environment. We only keep a hash, so a lost key can't be recovered; revoke it and create a new one.
Send it with each request, in either header:
curl "$SCRAPE_ENGINE_URL/scrape" \
-H "Authorization: Bearer $SCRAPE_ENGINE_KEY" \
-H "Content-Type: application/json" \
-d '{ "target_url": "https://example.com", "fields": ["h1"] }'curl "$SCRAPE_ENGINE_URL/browsers" -H "x-api-key: $SCRAPE_ENGINE_KEY"Each key allows 60 requests per minute. Use one key per app or server, so you can revoke one without touching the others.
Expiry and rotation
A key can expire on its own: pick 30, 90 or 365 days when you create it (or never). The keys page shows when each one expires, in red in its last week; after that date, requests with it answer 401 UNAUTHORIZED.
Rotate a key (the ⟳ button) to replace it without downtime: you get a new key with the same name and lifetime, and the old one keeps working for 24 hours, time to deploy the new one everywhere. Rotate when someone who knew it leaves, when it may have leaked, or on a schedule.
What we store
Logs, results, captures and monitoring snapshots are encrypted at rest. Credentials in a saved template or schedule (Authorization or Cookie headers, cookies, a password typed by an action) must be secrets: {{secrets.NAME}}. Written in the clear, the template or schedule is refused.
Credits in responses
Every response says what it cost, in headers:
| Header | Value |
|---|---|
x-credits-used | Credits this request used |
x-credits-remaining | Your balance after it |
x-duration-ms | Time on our side, queue included |
x-trace-id | The request's trace id: quote it to support (see Logs & request ids) |
See Credits for how a request is priced.
Errors
| Status | Code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | Missing, revoked or invalid key |
| 402 | INSUFFICIENT_CREDITS | Your balance is empty (demo pages stay free) |
| 400 | UNKNOWN_SECRET | The request references a secret you haven't created |
| 400 | TARGET_NOT_ALLOWED | Private and internal addresses can't be scraped |
| 429 | RATE_LIMITED | More than 60 requests in a minute on this key |
Errors of the scrape itself (timeouts, blocks, bad selectors) are listed in Errors.