Migrer vers CaptchaAI depuis 2Captcha tient en deux changements : le domaine et la clé API. Le reste de votre code — noms de paramètres, format des réponses, codes d'erreur — ne bouge pas. Depuis Anti-Captcha ou CapMonster Cloud, l'effort est un peu plus élevé, car ces API travaillent en JSON là où CaptchaAI et 2Captcha utilisent des paramètres de formulaire. Cette référence met en correspondance, type par type, les endpoints, les paramètres et les réponses de CaptchaAI avec ceux de 2Captcha, Anti-Captcha et CapMonster Cloud — pour que vous sachiez exactement quoi modifier.
URL de base par fournisseur
| Fournisseur | Endpoint de soumission | Endpoint de résultat |
|---|---|---|
| CaptchaAI | https://ocr.captchaai.com/in.php |
https://ocr.captchaai.com/res.php |
| 2Captcha | https://2captcha.com/in.php |
https://2captcha.com/res.php |
| Anti-Captcha | https://api.anti-captcha.com/createTask |
https://api.anti-captcha.com/getTaskResult |
| CapMonster Cloud | https://api.capmonster.cloud/createTask |
https://api.capmonster.cloud/getTaskResult |
CaptchaAI reprend la même structure d'URL que 2Captcha. Depuis 2Captcha, il suffit donc de changer le domaine.
Style d'API : formulaire ou JSON
| Fournisseur | Style d'API | Type de contenu | Authentification |
|---|---|---|---|
| CaptchaAI | Paramètres de formulaire | application/x-www-form-urlencoded |
Paramètre key |
| 2Captcha | Paramètres de formulaire | application/x-www-form-urlencoded |
Paramètre key |
| Anti-Captcha | Corps JSON | application/json |
clientKey dans le corps |
| CapMonster Cloud | Corps JSON | application/json |
clientKey dans le corps |
C'est la vraie ligne de partage : CaptchaAI et 2Captcha attendent un formulaire encodé, Anti-Captcha et CapMonster un corps JSON. Toute votre charge de migration se situe là.
reCAPTCHA v2
Côté CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=userrecaptcha
googlekey=SITE_KEY
pageurl=PAGE_URL
json=1
Côté Anti-Captcha / CapMonster
POST /createTask
{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
Correspondance des paramètres
| CaptchaAI | Anti-Captcha/CapMonster | Rôle |
|---|---|---|
key |
clientKey |
Clé API |
method=userrecaptcha |
type=RecaptchaV2TaskProxyless |
Type de tâche |
googlekey |
websiteKey |
Sitekey reCAPTCHA |
pageurl |
websiteURL |
URL de la page cible |
invisible=1 |
isInvisible: true |
reCAPTCHA invisible |
enterprise=1 |
type=RecaptchaV2EnterpriseTaskProxyless |
Indicateur Enterprise |
reCAPTCHA v3
Côté CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=userrecaptcha
googlekey=SITE_KEY
pageurl=PAGE_URL
version=v3
action=verify
Côté Anti-Captcha / CapMonster
{
"clientKey": "API_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY",
"pageAction": "verify"
}
}
Pour reCAPTCHA v3, le paramètre action de CaptchaAI correspond à pageAction, et l'action déclarée doit correspondre à celle attendue par la page cible.
Cloudflare Turnstile
Turnstile suit le même schéma que reCAPTCHA : method=turnstile côté formulaire, TurnstileTaskProxyless côté JSON. Seul le nom de la clé change (sitekey).
Côté CaptchaAI
POST /in.php
key=API_KEY
method=turnstile
sitekey=SITE_KEY
pageurl=PAGE_URL
Côté Anti-Captcha
{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
hCaptcha : format 2Captcha, non pris en charge par CaptchaAI
CaptchaAI ne résout pas hCaptcha (pas encore pris en charge). Le format ci-dessous est celui de 2Captcha, présenté uniquement à titre de comparaison : si votre code cible aujourd'hui hCaptcha, gardez à l'esprit que CaptchaAI ne traitera pas ce type de défi.
Côté 2Captcha
POST /in.php
key=API_KEY
method=hcaptcha
sitekey=SITE_KEY
pageurl=PAGE_URL
Côté Anti-Captcha
{
"clientKey": "API_KEY",
"task": {
"type": "HCaptchaTaskProxyless",
"websiteURL": "PAGE_URL",
"websiteKey": "SITE_KEY"
}
}
GeeTest v3
GeeTest v3 attend deux valeurs dynamiques, gt et challenge, à extraire de la page cible avant d'envoyer la tâche. Les deux se transmettent à l'identique quel que soit le fournisseur.
Côté CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=geetest
gt=GT_VALUE
challenge=CHALLENGE_VALUE
pageurl=PAGE_URL
Côté Anti-Captcha
{
"clientKey": "API_KEY",
"task": {
"type": "GeeTestTaskProxyless",
"websiteURL": "PAGE_URL",
"gt": "GT_VALUE",
"challenge": "CHALLENGE_VALUE"
}
}
CAPTCHA image (OCR)
Pour un CAPTCHA image, vous transmettez directement l'image encodée en base64 : aucun sitekey ni URL de page n'est requis, seulement le contenu à lire.
Côté CaptchaAI / 2Captcha
POST /in.php
key=API_KEY
method=base64
body=BASE64_IMAGE
Côté Anti-Captcha
{
"clientKey": "API_KEY",
"task": {
"type": "ImageToTextTask",
"body": "BASE64_IMAGE"
}
}
Récupérer le résultat (polling)
Côté CaptchaAI / 2Captcha
GET /res.php?key=API_KEY&action=get&id=TASK_ID&json=1
Response: {"status":1,"request":"TOKEN"}
Not ready: {"status":0,"request":"CAPCHA_NOT_READY"}
Côté Anti-Captcha / CapMonster
POST /getTaskResult
{
"clientKey": "API_KEY",
"taskId": 123456
}
Response: {"status":"ready","solution":{"gRecaptchaResponse":"TOKEN"}}
Not ready: {"status":"processing"}
Chez CaptchaAI et 2Captcha, l'interrogation du résultat se fait en GET sur res.php ; chez Anti-Captcha et CapMonster, en POST sur getTaskResult. Prévoyez un backoff (interrogation toutes les 5 secondes, par exemple) plutôt qu'une boucle trop agressive.
Vérifier le solde
| Fournisseur | Endpoint | Réponse |
|---|---|---|
| CaptchaAI | GET /res.php?key=KEY&action=getbalance |
12.345 |
| 2Captcha | GET /res.php?key=KEY&action=getbalance |
12.345 |
| Anti-Captcha | POST /getBalance {"clientKey":"KEY"} |
{"balance":12.345} |
| CapMonster | POST /getBalance {"clientKey":"KEY"} |
{"balance":12.345} |
Chez CaptchaAI et 2Captcha, le solde revient en texte brut ; Anti-Captcha et CapMonster l'encapsulent dans un objet JSON. Un seul champ à adapter dans votre client.
Codes d'erreur équivalents
| Scénario | CaptchaAI / 2Captcha | Anti-Captcha |
|---|---|---|
| Mauvaise clé API | ERROR_WRONG_USER_KEY |
ERROR_KEY_DOES_NOT_EXIST |
| Solde nul | ERROR_ZERO_BALANCE |
ERROR_ZERO_BALANCE |
| Mauvais sitekey | ERROR_WRONG_GOOGLEKEY |
ERROR_RECAPTCHA_INVALID_SITEKEY |
| Résultat pas prêt | CAPCHA_NOT_READY |
status: "processing" |
| Limitation de débit | ERROR_TOO_MUCH_REQUESTS |
ERROR_TOO_MUCH_REQUESTS |
Scénario : migrer un pipeline de scraping hébergé en Europe
Prenons une équipe qui exploite un pipeline de collecte de données sur une instance OVHcloud à Gravelines, aujourd'hui branchée sur 2Captcha. Le code envoie des requêtes POST /in.php avec method=userrecaptcha, puis interroge res.php toutes les 5 secondes. Pour basculer sur CaptchaAI, l'équipe modifie une seule constante — l'URL de base devient ocr.captchaai.com — et remplace la clé API. Aucun paramètre à renommer, aucun parseur de réponse à réécrire.
Côté budget, un forfait BASIC ($15/mois, 5 threads) suffit à couvrir un pipeline de test ; les threads déterminent le nombre de résolutions simultanées, sans quota facturé à l'unité. Si cette même équipe partait d'Anti-Captcha, elle devrait en plus convertir ses corps JSON en paramètres de formulaire et repasser l'interrogation du résultat de POST à GET.
Check-list de migration
- [ ] Remplacer l'URL de base par
ocr.captchaai.com - [ ] Mettre à jour la clé API
- [ ] Depuis Anti-Captcha/CapMonster : convertir le corps JSON en paramètres de formulaire
- [ ] Remplacer
clientKeyparkey - [ ] Remplacer le
typede la tâche parmethod - [ ] Repasser l'interrogation du résultat en GET au lieu de POST (si depuis Anti-Captcha)
- [ ] Tester une seule tâche avant la bascule complète
FAQ
Faut-il réécrire mon code pour passer de 2Captcha à CaptchaAI ?
Non, dans la plupart des cas. Depuis 2Captcha, remplacez 2captcha.com par ocr.captchaai.com et mettez à jour votre clé : les noms de paramètres et le format des réponses sont identiques. Depuis Anti-Captcha ou CapMonster, prévoyez une conversion des corps JSON vers des paramètres de formulaire.
Comment migrer depuis Anti-Captcha ou CapMonster Cloud ?
Convertissez les corps JSON en paramètres de formulaire, remplacez clientKey par key et le champ type par method, puis repassez l'interrogation du résultat de POST /getTaskResult à GET /res.php. La table de correspondance des paramètres plus haut couvre chaque champ.
CaptchaAI prend-il en charge hCaptcha ?
Non — hCaptcha n'est pas encore pris en charge. Les types couverts incluent reCAPTCHA v2 et v3, Cloudflare Turnstile et Challenge, GeeTest v3, ainsi que les CAPTCHA image (OCR) et en grille d'images.
Le format des réponses est-il le même que chez 2Captcha ?
Oui, côté 2Captcha. res.php renvoie {"status":1,"request":"TOKEN"} chez CaptchaAI comme chez 2Captcha, tandis qu'Anti-Captcha et CapMonster renvoient un objet solution imbriqué. Vous n'adaptez votre parseur que si vous venez de ces deux services.
Passez à CaptchaAI en modifiant un minimum de code
Obtenez votre clé API sur captchaai.com, pointez votre base URL sur ocr.captchaai.com et envoyez votre première tâche.