Solve AWS WAF CAPTCHA
capskip_solve_amazon_wafSolves AWS WAF CAPTCHA challenges using a sitekey and page URL, then returns the captcha_voucher and existing_token pair needed to obtain an aws-waf-token.
Instructions
Solve an AWS WAF (Amazon WAF) CAPTCHA — the image-grid or toy-car puzzle Amazon's firewall shows on a 405 challenge page (window.gokuProps plus challenge.js/captcha.js from an awswaf.com host) or in a JS-API widget (jsapi.js plus AwsWafCaptcha.renderCaptcha). Only sitekey and url are required. IMPORTANT: the answer is NOT the cookie. It is a pair, captcha_voucher and existing_token, which only work together: POST them as JSON {"captcha_voucher":…,"existing_token":…} to the voucher endpoint in the same folder as the page's challenge.js (replace 'challenge.js' with 'voucher'), and the response's token field is the aws-waf-token. Send that as the aws-waf-token cookie on the protected domain (some widget pages use an x-aws-waf-token header instead) and repeat the request. Exchange the pair immediately rather than storing it.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| iv | No | gokuProps.iv from a challenge page. Send it together with context, or leave both out and CapSkip reads them from the page at solve time — the safer choice when your copy of the page is more than a few minutes old. Never send it for a widget page. | |
| url | Yes | Full URL of the page the captcha appears on, including scheme. | |
| proxy | No | Solve through this proxy. Sites behind AWS WAF usually pair the CAPTCHA with rate limits and IP reputation rules, so use one when solving at volume. | |
| context | No | gokuProps.context from a challenge page. Send it together with iv, or leave both out. | |
| sitekey | Yes | On a challenge page (the HTTP 405 page carrying window.gokuProps), the gokuProps.key value — a long key usually starting 'AQIDAH'. On a widget page (AwsWafCaptcha.renderCaptcha), the apiKey passed to renderCaptcha — a long key ending in a short suffix such as '_0_1'. | |
| timeout | No | Seconds to wait before giving up. Maximum 600. | |
| jsapiScript | No | The full https URL of the page's jsapi.js (widget pages only — sending it without iv/context is what marks the solve as a widget), exactly as it appears in the script tag's src. It must be on an awswaf.com host: CapSkip refuses any other script, because it is not an AWS WAF integration. | |
| captcha_script | No | The full https URL of the page's captcha.js, exactly as it appears in the script tag's src. It must be on an awswaf.com host: CapSkip refuses any other script, because it is not an AWS WAF integration. | |
| challenge_script | No | The full https URL of the page's challenge.js, exactly as it appears in the script tag's src. It must be on an awswaf.com host: CapSkip refuses any other script, because it is not an AWS WAF integration. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| captchaId | Yes | ||
| solveSeconds | Yes | ||
| existing_token | No | ||
| captcha_voucher | No |