Skip to content

Referencia de la API

CaptchaLa proporciona una API RESTful para todas las integraciones del lado servidor.

URL base

https://apiv1.captcha.la

Una sola URL base

Todos los endpoints de esta página están en apiv1.captcha.la. Los hosts de reserva (bypass.*, fallbackapiv1.*) son destinos de failover a los que los SDK acuden por su cuenta durante una caída: apuntar tu integración a ellos devuelve service_online.

Autenticación

Todas las solicitudes a la API requieren cabeceras de autenticación:

X-App-Key:    YOUR_APP_KEY
X-App-Secret: YOUR_APP_SECRET

WARNING

X-App-Secret es solo del lado del servidor. Nunca lo expongas a navegadores, aplicaciones móviles o repositorios públicos.

API de validación del lado del servidor

💡 Usa un SDK de servidor para evitar el código repetitivo. Envuelve el endpoint, gestiona los reintentos y expone errores tipados:

Después de que el usuario supere el CAPTCHA en el frontend, tu servidor debe validar el token devuelto por el SDK. A continuación se muestran los endpoints de validación del lado del servidor.

Validación de token en el servidor

Valida el pass_token del SDK del frontend (con prefijo pt_). Requiere las cabeceras X-App-Key y X-App-Secret.

bash
POST /v1/validate
X-App-Key: YOUR_APP_KEY
X-App-Secret: YOUR_APP_SECRET
Content-Type: application/json

{ "pass_token": "pt_xxx", "client_ip": "1.2.3.4" }

client_ip es opcional pero recomendado: la IP del usuario final tomada de tu solicitud entrante, usada para comprobaciones de riesgo adicionales. Puedes omitirlo sin problema.

json
{
  "code": 0,
  "data": {
    "valid": true,
    "challenge_id": "ch_xxx",
    "action": "login",
    "uid": null,
    "captcha_args": {
      "platform": "web",
      "user_ip": "1.2.3.4",
      "referer": "https://your-site.com/login",
      "pkg": null,
      "solved_at": 1750000000,
      "risk_score": 12
    }
  }
}

El objeto captcha_args es solo informativo (para tus registros / análisis de riesgo):

CampoDescripción
platformPlataforma desde la que se resolvió el desafío.
user_ipIP registrada en el momento de la resolución.
refererURL de referencia de la página del desafío.
pkgIdentificador de paquete de la app (móvil), si aplica.
solved_atMarca de tiempo Unix de la resolución.
risk_scorePuntuación de riesgo de la sesión de resolución.

TIP

Verifica que data.valid === true y que data.action coincide con el escenario esperado (rechaza si se presenta un token de un flujo pay en /login). Los tokens son de un solo uso.

Token de desafío emitido por el servidor

Emite un server_token de corta duración desde tu backend. El navegador pasa este token al inicializar un desafío, demostrando que la solicitud se originó en tu servidor de confianza.

Emitir el server token

Llama a este endpoint solo desde tu propio servidor. Requiere X-App-Key + X-App-Secret. La respuesta contiene un server_token (prefijo sct_) que el frontend reenvía al inicializar el desafío.

bash
POST /v1/server/challenge/issue
X-App-Key: YOUR_APP_KEY
X-App-Secret: YOUR_APP_SECRET
Content-Type: application/x-www-form-urlencoded

action=login&ttl=300&max_uses=1&bind_ip=1.2.3.4
json
{
  "code": 0,
  "data": {
    "server_token": "sct_xxxxxxxxxxxx",
    "expires_in": 300,
    "issued_at": 1713600000
  }
}

Parámetros del cuerpo (form-urlencoded)

CampoDescripción
actionEscenario de negocio, por ejemplo login, register, pay. Debe coincidir con la acción usada al inicializar el desafío.
ttlDuración del token en segundos. Por defecto 300, máximo 900.
max_usesNúmero máximo de usos del token. Por defecto 10.
bind_ipVincula el token a una IP de cliente. Se rechaza la inicialización desde otra IP.
bind_device_idVincula el token a un ID de dispositivo específico.
bind_fingerprintVincula el token a una huella digital de navegador concreta.

Inicializar el desafío

Llamado por el SDK para iniciar un desafío CAPTCHA. Acepta un server_token opcional emitido por /v1/server/challenge/issue.

CampoDescripción
app_keyTu App Key público.
actionEscenario de negocio. Debe coincidir con la acción usada al emitir el server_token.
server_tokenOpcional; obligatorio cuando la aplicación tiene server_token_required = true.

INFO

Si server_token_required está activado para esta aplicación en el panel, la inicialización del desafío rechazará las solicitudes que no incluyan un server_token válido.

Endpoints de respaldo sin conexión

CaptchaLa mantiene un servicio de reserva en hosts separados para que la verificación siga funcionando cuando la API principal no está disponible:

HostLo llamaFunción
bypass.captchala.com · bypass.captcha-cdn.netSDK web / nativo (lado del usuario final)Ejecuta la verificación sin conexión y emite un pass token offline_ mientras la API principal está caída
fallbackapiv1.captchala.com · fallbackapiv1.captcha-cdn.netSDK de servidorValida tokens offline_ (POST /api/validate)

Son destinos de failover, no una API alternativa. Los SDK cambian a ellos por sí solos, únicamente después de que la API principal haya fallado de verdad, y vuelven en cuanto se recupera. Nada en tu configuración debe apuntar ahí.

service_online (HTTP 503)

json
{ "code": -1, "error": "service_online", "message": "Main API is online, please use main API" }

Lo recibes mientras la API principal está activa: el servicio de reserva solo atiende durante una caída. La petición llegó a bypass.* en lugar de a https://apiv1.captcha.la; corrige la URL, reintentar no sirve.

Causas habituales:

CausaSolución
La opción apiServer del SDK apunta a un host bypassPonla en https://apiv1.captcha.la o quítala y deja que el SDK elija
bypassServers sobrescrito a manoQuita la sobrescritura salvo que te hayamos dado hosts concretos
Un cliente HTTP propio copió una URL bypass (p. ej. de las devtools durante un incidente)Llama a https://apiv1.captcha.la y deja el failover al SDK; el servicio de reserva no acepta tráfico normal de retos
Balanceador / proxy / DNS reescribiendo el host de la APIDevuelve el upstream a apiv1.captcha.la

TIP

La validación en servidor tampoco necesita el host de respaldo: POST /v1/validate en apiv1.captcha.la basta, y los SDK de servidor PHP / Go verifican los tokens offline_ contra la API de respaldo automáticamente.

Códigos de error

CódigoDescripción
invalid_app_keyApp Key no válida
invalid_app_secretApp Secret no válido
challenge_expiredDesafío caducado
challenge_not_foundDesafío no encontrado
invalid_answerRespuesta no válida
token_expiredToken caducado
token_already_usedToken ya utilizado
token_not_foundToken no encontrado
quota_exceededCuota superada
rate_limitedLímite de tasa alcanzado
rate_limit_exceededDemasiadas solicitudes de emisión para esta aplicación. Espera y reintenta.
service_onlineLa petición llegó al servicio de respaldo sin conexión mientras la API principal está activa. Usa https://apiv1.captcha.la — consulta Endpoints de respaldo sin conexión.

MIT-licensed examples · CaptchaLa is operated independently