API reference
One endpoint. Send the target URL and your proxy; get back cookies for that proxy’s IP. Failed solves are never charged.
Quickstart
- Log in with Discord — accounts older than 30 days get €2.50 of free credit (1,000 Akamai solves).
- Create a key on the API keys page.
- Call
POST /v1/solve.
curl https://notabot.sh/v1/solve \
-H "x-api-key: nab_live_…" \
-H "content-type: application/json" \
-d '{"type":"akamai.sbsd","url":"https://shop.example.com","proxy":"http://user:pass@host:port"}'200 response
{
"ok": true,
"requestId": "req_…",
"result": { "cookies": { "bm_so": "…", "bm_s": "…" }, "userAgent": "…" },
"cost": 0.0025,
"costMicro": 2500,
"solveMs": 184
}Request body
| field | required | notes |
|---|---|---|
| type | yes | one of the types below |
| url | yes | public http(s) URL of the protected page |
| proxy | recommended | http://user:pass@host:port — cookies are bound to this IP |
| userAgent | no | Chrome UA to emulate (max 512 chars) |
Types & prices
| type | price per successful request |
|---|---|
| akamai.sensor | €0.0025 |
| akamai.sbsd | €0.0025 |
| cloudflare.jsd | €0.0015 |
| cloudflare.turnstile | €0.0025 |
| cloudflare.waf | €0.0030 |
Not every type is enabled yet; disabled types return unsupported_type.
Errors
Always { "error": { "code", "message" }, "requestId" }. Every response has an x-request-id header.
| code | http | meaning |
|---|---|---|
| bad_params | 400 | Body is not JSON or is over 64 KB, or `type`/`url`/`proxy`/`userAgent` is missing or invalid. |
| unsupported_type | 400 | Unknown `type`, or that vendor is not enabled. |
| not_found | 404 | Unknown route. |
| invalid_key | 401 | Missing, malformed, unknown or revoked `x-api-key`. |
| insufficient_balance | 402 | Top up in the dashboard. |
| key_limit_reached | 402 | This key hit its spend limit; raise it or wait for the window to reset (00:00 UTC). |
| account_banned | 403 | Account suspended — contact support on Discord. |
| rate_limited | 429 | Slow down; see the `retry-after` header. |
| solve_failed | 502 | The solve did not succeed. Not charged. |
| solver_unavailable | 503 | Solver temporarily down. Not charged. |
| solver_timeout | 504 | Solver took too long. Not charged. |
| internal | 500 | Our fault. Not charged. |