API Reference
Suppress uses a REST API compatible with the capsolver format. All endpoints accept POST requests with JSON bodies.
Base URL: https://api.suppress.sh
Authentication
All requests require a clientKey in the JSON body. Get your key from the dashboard after signing up.
{
"clientKey": "your-api-key-here"
}POST /createTask
Create a new solving task. Returns immediately with a task ID while the solve runs in the background.
Request body
clientKeyrequiredYour API key
taskrequiredTask configuration object
task.typerequiredTask type, e.g. "AntiAwsWafTask"
task.pageURLrequiredTarget page URL with challenge parameters
task.proxyrequiredProxy in format http://user:pass@host:port
task.userAgentBrowser user agent (default: Chrome 146)
task.acceptLanguageAccept-Language header (default: "en-US,en;q=0.9")
Example request
curl -X POST https://api.suppress.sh/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "your-api-key",
"task": {
"type": "AntiAwsWafTask",
"pageURL": "https://example.com",
"proxy": "http://user:pass@host:port",
"userAgent": "Mozilla/5.0 ...",
"acceptLanguage": "en-US,en;q=0.6"
}
}'Response
{
"errorId": 0,
"errorCode": "",
"errorDescription": "",
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing"
}POST /getTaskResult
Poll for the result of a task. Recommended polling interval is 3 seconds.
Request body
clientKeyrequiredYour API key
taskIdrequiredTask ID from createTask response
Response (processing)
{
"errorId": 0,
"taskId": "...",
"status": "processing"
}Response (ready)
{
"errorId": 0,
"taskId": "...",
"status": "ready",
"solution": {
"token": "aws-waf-token value",
"chal_url": "challenge endpoint URL"
}
}Response (failed)
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Captcha not recognized",
"taskId": "...",
"status": "failed"
}Failed tasks are not charged. Your balance is automatically refunded.
POST /getBalance
Check your current account balance.
Request
{
"clientKey": "your-api-key"
}Response
{
"errorId": 0,
"balance": 9.997,
"packages": []
}Balance is in USD. 1 unit = $0.001.
Task Types
| Type | Service | Status |
|---|---|---|
| AntiAwsWafTask | AWS WAF | Available |
| TurnstileTask | Turnstile | Soon |
| GeeTestTask | GeeTest | Soon |
| TikTokCaptchaTask | TikTokCaptcha | Soon |
Solving AWS WAF
AWS WAF protects pages with a Proof-of-Work challenge (NetworkBandwidth, HashcashScrypt, SHA256) and an optional visual gridcaptcha. Both produce a single aws-waf-token cookie which you set on your subsequent requests. Use AntiAwsWafTask with the protected page URL — we discover the challenge endpoint and goku props automatically.
Required parameters
task.typerequired"AntiAwsWafTask"
task.pageURLrequiredThe protected page (e.g. https://cityline.com)
task.proxyrequiredHTTP proxy used for the solve. Match this on your subsequent requests.
task.userAgentBrowser UA. Use the same UA on your subsequent requests.
task.modeOptional. "challenge" (default, PoW only) or "captcha" (PoW + visual gridcaptcha for endpoints that require it).
Request
curl -X POST https://api.suppress.sh/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "your-api-key",
"task": {
"type": "AntiAwsWafTask",
"pageURL": "https://cityline.com",
"proxy": "http://user:pass@host:port",
"userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36"
}
}'Captcha mode (for OTP / signup endpoints)
{
"clientKey": "your-api-key",
"task": {
"type": "AntiAwsWafTask",
"pageURL": "https://cityline.com",
"mode": "captcha",
"userAgent": "Mozilla/5.0 ..."
}
}Solution
{
"errorId": 0,
"taskId": "...",
"status": "ready",
"solution": {
"token": "1b7dffca-7034-43af-a246-4b0e3db3c731:HgoA...",
"chal_url": "https://9175c2fd4189.2eca6106.ap-south-2.token.awswaf.com/9175c2fd4189"
}
}Set aws-waf-token as a cookie on your subsequent requests to the protected domain, with the same UA and proxy you sent to us.
Error Codes
All responses include errorId, errorCode, and errorDescription. When errorId is 0, the request was successful.
| Error Code | Description |
|---|---|
| ERROR_KEY_DENIED_ACCESS | Invalid or missing clientKey |
| ERROR_ZERO_BALANCE | Insufficient account balance |
| ERROR_TASK_NOT_SUPPORTED | Unknown or disabled task type |
| ERROR_TASKID_INVALID | Task ID not found |
| ERROR_CAPTCHA_UNSOLVABLE | Solve failed (not charged) |
| ERROR_INVALID_TASK_DATA | Invalid request parameters |
| ERROR_SERVICE_UNAVALIABLE | Service temporarily unavailable |