Spaces:
Paused
Paused
| # hCaptcha Usage | |
| hCaptcha presents a CAPTCHA challenge via an iframe widget. The solver visits the target page with a Playwright-controlled Chromium browser, clicks the hCaptcha checkbox, waits for the challenge to resolve, and extracts the `h-captcha-response` token. | |
| ## Supported task type | |
| | Task type | Description | | |
| |-----------|-------------| | |
| | `HCaptchaTaskProxyless` | Browser-based hCaptcha solving | | |
| ## Required fields | |
| | Field | Type | Description | | |
| |-------|------|-------------| | |
| | `websiteURL` | string | Full URL of the page containing the captcha | | |
| | `websiteKey` | string | The `data-sitekey` value from the page's HTML | | |
| ## Test targets | |
| hCaptcha provides official test keys that produce predictable results: | |
| | URL | Site key | Behavior | | |
| |-----|----------|----------| | |
| | `https://accounts.hcaptcha.com/demo` | `10000000-ffff-ffff-ffff-000000000001` | Always passes (test key) | | |
| | `https://accounts.hcaptcha.com/demo` | `20000000-ffff-ffff-ffff-000000000002` | Enterprise safe-user test | | |
| | `https://demo.hcaptcha.com/` | `10000000-ffff-ffff-ffff-000000000001` | Always passes (test key) | | |
| ## Create a task | |
| ```bash | |
| curl -X POST http://localhost:8000/createTask \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "clientKey": "your-client-key", | |
| "task": { | |
| "type": "HCaptchaTaskProxyless", | |
| "websiteURL": "https://accounts.hcaptcha.com/demo", | |
| "websiteKey": "10000000-ffff-ffff-ffff-000000000001" | |
| } | |
| }' | |
| ``` | |
| Response: | |
| ```json | |
| { | |
| "errorId": 0, | |
| "taskId": "uuid-string" | |
| } | |
| ``` | |
| ## Poll for result | |
| ```bash | |
| curl -X POST http://localhost:8000/getTaskResult \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "clientKey": "your-client-key", | |
| "taskId": "uuid-from-createTask" | |
| }' | |
| ``` | |
| When ready: | |
| ```json | |
| { | |
| "errorId": 0, | |
| "status": "ready", | |
| "solution": { | |
| "gRecaptchaResponse": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." | |
| } | |
| } | |
| ``` | |
| !!! note "Response field name" | |
| The token is returned in `solution.gRecaptchaResponse` for YesCaptcha API compatibility, even though hCaptcha natively uses the `h-captcha-response` field name. | |
| ## Acceptance status | |
| | Target | Site key | Status | Notes | | |
| |--------|----------|--------|-------| | |
| | `https://accounts.hcaptcha.com/demo` | `10000000-ffff-ffff-ffff-000000000001` | ⚠️ Challenge-dependent | Headless browsers may still receive image challenges | | |
| ### Headless browser note | |
| Even with the test site key (`10000000-ffff-ffff-ffff-000000000001`), hCaptcha may present an image challenge when the widget detects a headless browser. The solver clicks the checkbox and polls for a token for up to 30 seconds. | |
| For headless environments, the recommended approach is to use the `HCaptchaClassification` task type to solve the image grid challenge, then inject the token. See [Image Classification](classification.md) for details. | |
| ## Image classification (HCaptchaClassification) | |
| For programmatic grid classification without browser automation, see [Image Classification](classification.md). | |
| ## Operational notes | |
| - hCaptcha challenges may require more time than reCAPTCHA v2 — the solver waits up to 5 seconds after clicking. | |
| - Real-world sites with aggressive bot detection may require additional fingerprinting improvements. | |
| - Test keys (`10000000-ffff-ffff-ffff-000000000001`) always pass and are useful for flow validation. | |