All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- GeeTest v3 (slide) support via
geetest(gt, challenge, url, **kwargs)on bothCapSkipandAsyncCapSkip. Accepts the optionalapi_serverdomain override and the usualproxyparameter. The result exposes the answer as the parsedchallenge,validate, andseccodefields, whilecodekeeps the raw JSON string CapSkip returns. - Parameter aliases
apiServerandapi_subdomainforapi_server. proxytypeis now validated against the values CapSkip accepts (HTTP,HTTPS,SOCKS5,SOCKS5H, case-insensitive) for every proxy-capable captcha type.SOCKS4and other values previously reached the server and came back asERROR_BAD_PARAMETERS; they now raiseValidationExceptionlocally.
1.0.2 - 2026-07-15
- Submitting with
json=1no longer fails withApiException: cannot recognize response. Withjson=1CapSkip'sin.phpreturns{"status": 1, "request": "<id>"}instead ofOK|<id>;send()now parses both forms, sonormal(..., json=1)and the equivalent reCAPTCHA/Turnstile calls submit and solve correctly. Applies to both the sync and async clients.
1.0.1 - 2026-07-14
- Polling no longer crashes with
ApiException: cannot recognize responsewhen CapSkip returns an empty response body. CapSkip returns an empty body while no result is available yet — briefly right after a captcha is submitted (before it reportsCAPCHA_NOT_READY), for an unknown id, and after a solved token has already been read. The SDK now treats an empty body as "not ready" and keeps polling, sorecaptcha(),turnstile(), andnormal()solve reliably instead of failing on the first poll. Applies to both the sync and async clients.
1.0.0 - 2026-07-14
- Initial release of the CapSkip Python SDK
CapSkipsynchronous client for the local CapSkip APIAsyncCapSkipasynchronous client (httpx+aiofiles)- Image CAPTCHA solving via
normal()(file, URL, base64, or data-URI) - reCAPTCHA v2 / v3 solving via
recaptcha()(invisible, enterprise, proxy) - Cloudflare Turnstile solving via
turnstile()(widget and challenge page) - Turnstile automatically polls with
json=1and returnsuserAgentwhen provided - Manual workflow:
send(),get_result(),solve() - Adaptive result polling — starts at 0.25s and backs off (doubling) up to the
configured
pollingInterval, so fast solves (e.g. image captchas) return in a fraction of a second;pollingIntervalalso accepts sub-second (float) values - Familiar parameter aliases (
url→pageurl,score→min_score, etc.) - Proxy support via dict format
{'type': '...', 'uri': '...'} - Strict per-captcha parameter validation — only documented parameters are accepted
- Exception hierarchy:
ValidationException,NetworkException,ApiException,TimeoutException - Example scripts for every supported captcha type
- Unit tests (sync + async) with a mocked API client
- Documentation: Tutorial, Getting Started, API Reference, Troubleshooting