Capability Matrix
Single source of truth β every CaptchaSonic captcha type mapped to its Python SDK method, Node.js SDK method, REST taskType, and return field.
The Capability Matrix is the canonical answer to "what does CaptchaSonic solve, and how do I call it?". Every row pins a captcha to its Python method, Node.js method, REST task.type, and the exact field that holds the answer. It is the single source of truth that the docs, the SDKs, and external AI agents / MCP clients all read from.
TIP
Download the matrix as JSON for use in agents, automations, or your own dashboards: capabilities.json. The JSON mirrors src/data/capabilities.ts field-for-field.
How to read this
- Family β
tokenreturns a string token (drop it into a hidden form field);imagereturns coordinates or text from an image you supplied;interactivereturns a structured action (click indices, drag deltas, etc.). - Python SDK / Node.js SDK β the method name and the dotted path under the response object where the answer lives.
not in SDKmeans the captcha is reachable today only via the REST API. - REST taskType β the exact string you pass as
task.typetoPOST /createTask. A separateproxylessvariant is shown when the API exposes one (e.g.TurnstileTaskProxyless). - Notes β pinned caveats (required arguments, proxy requirements, subtype semantics).
Matrix
Token solvers5
Submit website_url + website_key. The SDK polls our infrastructure and returns a ready-to-submit token (~6β12s typical).
| Captcha | Python | Node.js | REST task type |
|---|---|---|---|
| reCAPTCHA v2 (token) Solve a reCAPTCHA v2 token challenge via browser automation (async β polls until ready). | solve_recaptcha_v2_tokensolution.token | solveRecaptchaV2Tokensolution.token | RecaptchaV2Task+ RecaptchaV2TaskProxyless |
| reCAPTCHA v3 (token) Solve a reCAPTCHA v3 token challenge via browser automation (async β polls until ready). | solve_recaptcha_v3_tokensolution.token | solveRecaptchaV3Tokensolution.token | RecaptchaV3Task+ RecaptchaV3TaskProxyless |
| Cloudflare Turnstile Solve a Cloudflare Turnstile token challenge (async β polls until ready). | solve_turnstilesolution.token | solveTurnstilesolution.token | AntiTurnstileTask |
| Cloudflare Challenge Solve a Cloudflare challenge via browser automation (async β polls until ready). | solve_cloudflaresolution.tokenproxy | solveCloudflaresolution.tokenproxy | AntiCloudflareTask |
| PopularCaptcha (token) Solve a popular CAPTCHA token challenge via browser automation (async β polls until ready). | solve_popular_captcha_tokensolution.token | solvePopularCaptchaTokensolution.token | PopularTask+ PopularTaskProxyless |
Image solvers4
You supply the challenge images; the SDK returns a typed_solution payload describing what to do (tile indices, text, slide offset).
| Captcha | Python | Node.js | REST task type |
|---|---|---|---|
| reCAPTCHA v2 (image grid) Solve a reCAPTCHA v2 image classification challenge. | solve_recaptcha_v2typed_solution.grid.objects | solveRecaptchaV2typedSolution.grid.objects | RecaptchaV2Classification |
| AWS WAF Solve an AWS WAF image challenge. | solve_aws_waftyped_solution.grid.objects | solveAwsWaftypedSolution.grid.objects | AwsWafClassification |
| Image-to-text (OCR) Solve an OCR / image-to-text task. | solve_ocrtyped_solution.text.texts[0] | solveOcrtypedSolution.text.texts[0] | ImageToTextTask |
| Slide puzzle Solve a slide CAPTCHA using local alpha/contour detection (no AI). | solve_slide_imagetyped_solution.slide.x | solveSlideImagetypedSolution.slide.x | SlideImage |
Interactive solvers4
Images plus extra metadata for slide / click / whirl variants. Return shape varies by sub-type.
| Captcha | Python | Node.js | REST task type |
|---|---|---|---|
| PopularCaptcha Solve a popular CAPTCHA image classification challenge (grid/bbox/drag). | solve_popular_captchatyped_solution.grid.objects | solvePopularCaptchatypedSolution.grid.objects | PopularCaptchaImage |
| GeeTest Solve a Geetest CAPTCHA challenge. | solve_geetesttyped_solution | solveGeetesttypedSolution | GeetestClassification |
| TikTok Solve a TikTok CAPTCHA challenge. | solve_tiktoktyped_solution | solveTikToktypedSolution | TikTokClassification |
| Binance Solve a Binance CAPTCHA challenge. | solve_binancetyped_solution | solveBinancetypedSolution | BinanceSlideTask |
Counts
- 13 rows total β one per documented captcha.
- 13 Python SDK methods and 13 Node.js SDK methods (one each per captcha).
- 5 token-family, 4 image-family, 4 interactive-family.
These counts are read live from the generated capabilities.ts, so they track the SDK and can't drift from the matrix above.
Stability guarantees
- Adding rows is non-breaking. New captchas append to the bottom of
CAPABILITIESinsrc/data/capabilities.ts. - Removing or renaming a
slugis a breaking change for any agent that pinned to it. We will not do this silently. - Method names and return fields mirror the SDK docs verbatim β if a method renames, this matrix updates in the same release.
For the raw REST contract, see the REST API reference. For end-to-end install / quick-start, see the Python SDK and Node.js SDK pages.
Error codes
The matrix above pins each captcha to its method and return field. The table below is the matching one-stop reference for the numeric errorId codes every SDK and the REST API surface when a task fails.
| id | Python exception | Node errorName | Meaning | Action |
|---|---|---|---|---|
0 | SonicError | SonicError | Base class for every SDK error β catches anything below. | Inspect `error.errorId` (Node) / `err.error_id` (Python) and branch. |
1 | InvalidApiKeyError | InvalidApiKeyError | API key is missing, malformed, or revoked. | Verify the key in your dashboard. |
2 | InsufficientBalanceError | InsufficientBalanceError | Account balance can't cover the task. | Add funds. |
3 | DailyLimitExceededError | DailyLimitExceededError | Daily quota exhausted. | Wait for the daily reset or upgrade your plan. |
4 | MinuteLimitExceededError | MinuteLimitExceededError | Per-minute rate limit hit. | Slow down requests / add exponential backoff. |
5 | QuotaExceededError | QuotaExceededError | Plan quota exhausted. | Upgrade your plan. |
6 | PlanExpiredError | PlanExpiredError | Subscription has expired. | Renew your subscription. |
Every concrete row inherits from SonicError β catch it once to handle all SDK failures, or branch on errorId / exception subclass for granular control. Transient gRPC errors are retried automatically with exponential backoff (up to 3 attempts).