Skip to content

Use code FUN10 for 10% bonus credits

DocsAWS WAF

AWS WAF API Reference

Solve AWS WAF invisible challenges and replay the aws-waf-token cookie.

Read Markdown (English)

The Captcha.fun AWS WAF API accepts kind, url and returns aws-waf-token cookie. Send the API_KEY header, create a solve with POST /v1/request, then poll GET /v2/response/{id} until ready is true.

What you’ll need

  • Your API key
  • The URL of the page where the challenge appears
  • Optional: jsUrl
  • A proxy, if the result must come from your own IP (aws_waf_proxy)
Use kind

Good to Know

Passes the AWS WAF invisible challenge and returns the aws-waf-token, together with the user agent of the solve.

The challenge script is located automatically from the page. Pass jsUrl only for deployments whose page never references it, such as geo-blocked shells or API-only integrations.

Important: Send the token as the aws-waf-token cookie, not an x-aws-waf-token header. Real browsers never send that header. Tokens are reusable for a few minutes, then the edge re-challenges (202/405) — solve again when that happens.

Send the Challenge

Send the page details with your API key. You get a solve id back right away.

POSThttps://api.captcha.fun/v1/request
curl -X POST https://api.captcha.fun/v1/request \
  -H "API_KEY: CAPFUN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
  "kind": "aws_waf",
  "url": "https://your-domain.example"
}'

Response

Returns the solve id. Use it to get the result.

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "message": "Started Solving"
}
Request fields5 body fields · 2 required

Headers

NameTypeRequiredDescription
API_KEYstringYesYour API key
Content-TypestringYesapplication/json
APP_IDstringNoOptional app ID for request tracking

Body

NameTypeRequiredDescription
kindstringYesOne of aws_waf, aws_waf_proxy
urlstringYesPage URL where the challenge appears
jsUrlstringNoChallenge script URL (*.token.awswaf.com, *.edge.sdk.awswaf.com, or a first-party /__challenge_* path). Found on the page if omitted
proxystringNoFor _proxy kinds: host:port or host:port:username:password
platformstringNoRequested platform label: windows (default) or mac

Wait for the Result

Use the solve id to fetch the result.

GEThttps://api.captcha.fun/v2/response/{id}

Poll every second until ready is true.

Example

curl -X GET https://api.captcha.fun/v2/response/550e8400-e29b-41d4-a716-446655440000 \
  -H "API_KEY: CAPFUN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Accept: application/json"

Response

{
  "ready": true,
  "status": "SUCCESS",
  "success": true,
  "userAgent": "RETURNED_USER_AGENT",
  "secUa": "RETURNED_SEC_CH_UA",
  "token": "a1B2c3D4e5F6g7H8i9J0-K1L2M3..."
}
Request and response fields7 response fields

Request

NameTypeRequiredDescription
idstring (UUID)YesPath parameter. The id from Create Solve
API_KEYstringYesHeader. Your API key

Response Fields

NameTypeRequiredDescription
readyboolean—true when the solve is finished (v2 only)
statusstring—PENDING while solving, then SUCCESS or FAILURE
successboolean—Whether the solve succeeded
userAgentstring—Value to send as User-Agent when using the result. Preserve it exactly
secUastring—Value to send as Sec-CH-UA when using the result
tokenstring—aws-waf-token value. Send it as a cookie
messagestring—Failure reason. Omitted on success

Send the Cookies

Send it as the aws-waf-token cookie with the returned userAgent and from the same IP as the solve.

When using a successful result, preserve the returned userAgent as User-Agent and secUa as Sec-CH-UA.

Wrong or rejected result? Report the failed solve.