Reference

Migrar de AZCaptcha a CaptchaAI: Guía completa

AZCaptcha y CaptchaAI utilizan un formato API compatible con 2Captcha, lo que facilita la migración. Básicamente, cambiará la URL base y la clave API; el formato de solicitud sigue siendo el mismo.

Mapeo de puntos finales

acción AZCaptcha CaptchaAI
Enviar tarea https://azcaptcha.com/in.php https://ocr.captchaai.com/in.php
Obtener resultado https://azcaptcha.com/res.php https://ocr.captchaai.com/res.php
Consultar saldo res.php?action=getbalance res.php?action=getbalance
Informe incorrecto res.php?action=reportbad res.php?action=reportbad

Compatibilidad de parámetros

La mayoría de los parámetros son idénticos. Diferencias clave:

Parámetro AZCaptcha CaptchaAI Notas
key clave API clave API Clave diferente: consigue la tuya en captchaai.com
method userrecaptcha userrecaptcha Lo mismo
googlekey Clave del sitio Clave del sitio Lo mismo
pageurl URL de la página URL de la página Lo mismo
json 1 1 Lo mismo
proxy user:pass@host:port user:pass@host:port Mismo formato
proxytype HTTP/SOCKS5 HTTP/SOCKS5 Lo mismo

Pasos de migración

Paso 1: Obtenga la clave API CaptchaAI

  1. Regístrese encaptchaai.com
  2. Agregue fondos a su cuenta
  3. Copie su clave API desde el panel

Paso 2: actualice su código

Python - Antes (AZCaptcha)

import requests

API_KEY = "your_azcaptcha_key"

def solve_recaptcha(sitekey, pageurl):
    # Submit
    resp = requests.post("https://azcaptcha.com/in.php", data={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1
    })
    data = resp.json()
    if data["status"] != 1:
        return {"error": data["request"]}

    captcha_id = data["request"]

    # Poll
    import time
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://azcaptcha.com/res.php", params={
            "key": API_KEY, "action": "get", "id": captcha_id, "json": 1
        }).json()
        if result["status"] == 1:
            return {"solution": result["request"]}
        if result["request"] != "CAPCHA_NOT_READY":
            return {"error": result["request"]}

    return {"error": "TIMEOUT"}

Python - Después (CaptchaAI)

import os
import time
import requests

API_KEY = os.environ["CAPTCHAAI_API_KEY"]  # Changed: use env var

def solve_recaptcha(sitekey, pageurl):
    # Submit — only URL changed
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1
    })
    data = resp.json()
    if data.get("status") != 1:
        return {"error": data.get("request")}

    captcha_id = data["request"]

    # Poll — only URL changed
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": captcha_id, "json": 1
        }).json()
        if result.get("status") == 1:
            return {"solution": result["request"]}
        if result.get("request") != "CAPCHA_NOT_READY":
            return {"error": result.get("request")}

    return {"error": "TIMEOUT"}

JavaScript: antes (AZCaptcha)

const axios = require("axios");
const API_KEY = "your_azcaptcha_key";

async function solveRecaptcha(sitekey, pageurl) {
  const submit = await axios.post("https://azcaptcha.com/in.php", null, {
    params: { key: API_KEY, method: "userrecaptcha", googlekey: sitekey, pageurl, json: 1 },
  });
  if (submit.data.status !== 1) return { error: submit.data.request };

  const captchaId = submit.data.request;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const poll = await axios.get("https://azcaptcha.com/res.php", {
      params: { key: API_KEY, action: "get", id: captchaId, json: 1 },
    });
    if (poll.data.status === 1) return { solution: poll.data.request };
    if (poll.data.request !== "CAPCHA_NOT_READY") return { error: poll.data.request };
  }
  return { error: "TIMEOUT" };
}

JavaScript: después (CaptchaAI)

const axios = require("axios");
const API_KEY = process.env.CAPTCHAAI_API_KEY;  // Changed: env var

async function solveRecaptcha(sitekey, pageurl) {
  // Only URLs changed
  const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
    params: { key: API_KEY, method: "userrecaptcha", googlekey: sitekey, pageurl, json: 1 },
  });
  if (submit.data.status !== 1) return { error: submit.data.request };

  const captchaId = submit.data.request;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const poll = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: captchaId, json: 1 },
    });
    if (poll.data.status === 1) return { solution: poll.data.request };
    if (poll.data.request !== "CAPCHA_NOT_READY") return { error: poll.data.request };
  }
  return { error: "TIMEOUT" };
}

Paso 3: abstraer al proveedor

Para una migración más segura, cree un contenedor independiente del proveedor:

import os
import time
import requests


class CaptchaProvider:
    def __init__(self, base_url, api_key):
        self.submit_url = f"{base_url}/in.php"
        self.result_url = f"{base_url}/res.php"
        self.api_key = api_key
        self.session = requests.Session()

    def solve(self, sitekey, pageurl, method="userrecaptcha"):
        resp = self.session.post(self.submit_url, data={
            "key": self.api_key,
            "method": method,
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": 1
        })
        data = resp.json()
        if data.get("status") != 1:
            return {"error": data.get("request")}

        captcha_id = data["request"]
        for _ in range(60):
            time.sleep(5)
            result = self.session.get(self.result_url, params={
                "key": self.api_key, "action": "get",
                "id": captcha_id, "json": 1
            }).json()
            if result.get("status") == 1:
                return {"solution": result["request"]}
            if result.get("request") != "CAPCHA_NOT_READY":
                return {"error": result.get("request")}
        return {"error": "TIMEOUT"}


# Switch by changing one line:
# provider = CaptchaProvider("https://azcaptcha.com", "old_key")
provider = CaptchaProvider(
    "https://ocr.captchaai.com",
    os.environ["CAPTCHAAI_API_KEY"]
)

Paso 4: prueba paralela

Ejecute ambos proveedores simultáneamente para comparar:

def parallel_test(sitekey, pageurl, runs=10):
    azcaptcha = CaptchaProvider("https://azcaptcha.com", "old_key")
    captchaai = CaptchaProvider(
        "https://ocr.captchaai.com",
        os.environ["CAPTCHAAI_API_KEY"]
    )

    results = {"azcaptcha": [], "captchaai": []}

    for i in range(runs):
        start = time.time()
        az_result = azcaptcha.solve(sitekey, pageurl)
        results["azcaptcha"].append({
            "success": "solution" in az_result,
            "time": time.time() - start
        })

        start = time.time()
        cai_result = captchaai.solve(sitekey, pageurl)
        results["captchaai"].append({
            "success": "solution" in cai_result,
            "time": time.time() - start
        })

    for provider, data in results.items():
        successes = sum(1 for r in data if r["success"])
        avg_time = sum(r["time"] for r in data) / len(data)
        print(f"{provider}: {successes}/{runs} success, {avg_time:.1f}s avg")

Lista de verificación de migración

paso Estado
Cree una cuenta CaptchaAI y deposite fondos
Reemplazar la URL base en todos los archivos
Actualizar clave API (use env var)
Ejecutar prueba paralela (más de 10 soluciones)
Comparar tasas de éxito
Comparar tiempos de resolución
Actualizar el monitoreo/alerting para nuevos puntos finales
Cambiar el tráfico de producción
Monitorear durante 24 horas
Clave AZCaptcha de desmantelamiento

Solución de problemas

Problema causa Solución
ERROR_KEY_DOES_NOT_EXIST Clave API incorrecta Verifique la clave API CaptchaAI desde el panel
ERROR_ZERO_BALANCE No hay fondos en la cuenta nueva Agregue fondos en captchaai.com
Diferentes códigos de error Diferencias menores de códigos de error Códigos de error del mapa; la mayoría son idénticas
La tasa de resolución difiere Diferentes grupos de solucionadores Ejecute más de 50 soluciones de prueba para una comparación estadísticamente válida

Preguntas frecuentes

¿Es CaptchaAI un reemplazo directo de AZCaptcha?

Casi. Ambos utilizan el formato API compatible con 2Captcha. Cambie la URL base y la clave API: los parámetros y el formato de respuesta son los mismos.

¿Funcionará mi configuración de proxy existente?

Sí. CaptchaAI utiliza los mismos parámetros proxy y proxytype. No se necesitan cambios para la resolución basada en proxy.

¿Cuánto tiempo dura la migración?

Para una única base de código, entre 15 y 30 minutos. La mayor parte consiste en actualizar la URL base con búsqueda y reemplazo, además de ejecutar una prueba paralela para verificar.

Próximos pasos

Cambie a una resolución CAPTCHA más rápida y confiable:obtenga su clave API CaptchaAIy migrar en minutos.

Guías relacionadas:

Los comentarios están deshabilitados para este artículo.

Publicaciones relacionadas

Explainers CaptchaAI JSON API vs Form API: qué formato usar
Captcha AI JSON API vs Form API: cuándo usar cada formato, comparativa lado a lado en Python y Java Script, y cómo elegir el más adecuado para tu integración.

Captcha AI JSON API vs Form API: cuándo usar cada formato, comparativa lado a lado en Python y Java Script, y...

Apr 17, 2026
Explainers Impacto de la resolución DNS en el rendimiento de la API CAPTCHA
Cómo afecta la resolución DNS al rendimiento de la API CAPTCHA: cuándo es un cuello de botella, cómo optimizarla con keep-alive, caché y pre-resolución.

Cómo afecta la resolución DNS al rendimiento de la API CAPTCHA: cuándo es un cuello de botella, cómo optimizar...

Apr 24, 2026