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

clientKeyrequired
string

Your API key

taskrequired
object

Task configuration object

task.typerequired
string

Task type, e.g. "AntiAwsWafTask"

task.pageURLrequired
string

Target page URL with challenge parameters

task.proxyrequired
string

Proxy in format http://user:pass@host:port

task.userAgent
string

Browser user agent (default: Chrome 146)

task.acceptLanguage
string

Accept-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

clientKeyrequired
string

Your API key

taskIdrequired
string

Task 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

TypeServiceStatus
AntiAwsWafTaskAWS WAFAvailable
TurnstileTaskTurnstileSoon
GeeTestTaskGeeTestSoon
TikTokCaptchaTaskTikTokCaptchaSoon

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
string

"AntiAwsWafTask"

task.pageURLrequired
string

The protected page (e.g. https://cityline.com)

task.proxyrequired
string

HTTP proxy used for the solve. Match this on your subsequent requests.

task.userAgent
string

Browser UA. Use the same UA on your subsequent requests.

task.mode
string

Optional. "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 CodeDescription
ERROR_KEY_DENIED_ACCESSInvalid or missing clientKey
ERROR_ZERO_BALANCEInsufficient account balance
ERROR_TASK_NOT_SUPPORTEDUnknown or disabled task type
ERROR_TASKID_INVALIDTask ID not found
ERROR_CAPTCHA_UNSOLVABLESolve failed (not charged)
ERROR_INVALID_TASK_DATAInvalid request parameters
ERROR_SERVICE_UNAVALIABLEService temporarily unavailable