--- title: SDK Web --- # SDK Web El SDK Web es compatible con todos los navegadores modernos y ofrece múltiples métodos de integración. ::: tip Míralo funcionar en 30 segundos [demo-v1.captcha.la](https://demo-v1.captcha.la) — HTML + PHP puro, licencia MIT, ver el código fuente en cada página. - [popup.html](https://demo-v1.captcha.la/popup.html) — modo popup - [float.html](https://demo-v1.captcha.la/float.html) — widget flotante - [bind.html](https://demo-v1.captcha.la/bind.html) — enlazar a un botón - [inline.html](https://demo-v1.captcha.la/inline.html) — integración en línea - [server-token.html](https://demo-v1.captcha.la/server-token.html) — token emitido por el servidor (anti-replay) ::: ## Inicio rápido ```html ``` ## Instalación ### CDN ```html ``` ### NPM ```bash npm install captchala # or framework wrappers npm install @captcha-la/vue npm install @captcha-la/react ``` ```js import Captchala from 'captchala'; import 'captchala/dist/captchala.css'; ``` ## Modos ### Modo popup ```js Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'popup', action: 'login' }) .bindTo('#login-btn') .onSuccess(res => sendToBackend(res.token)); ``` ### Modo flotante ```js Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'float', action: 'browse' }) .appendTo('#captcha-container') .onSuccess(res => sendToBackend(res.token)); ``` ### Modo bind ```js Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'bind', action: 'login' }) .bindTo('#submit-button') .onSuccess(res => submitForm(res.token)); // fires only after challenge passes ``` ### Modo embed ```js Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'embed', action: 'register' }) .appendTo('#captcha-container') .onSuccess(res => sendToBackend(res.token)); ``` ## Opciones comunes | Parámetro | Tipo | Por defecto | Descripción | | --- | --- | --- | --- | | `appKey` | string | — | Application Key (obligatorio) | | `product` | string | `popup` | Modo de visualización: popup | float | embed | bind | | `action` | string | `default` | Escenario de negocio (p. ej. login, register, pay). El servidor aplica diferentes políticas de seguridad según el escenario. | | `lang` | string | `auto` | Etiqueta BCP-47 (p. ej. `en`, `ja`, `pt-BR`) o `auto` para seguir `navigator.language`. Consulta [Idiomas soportados](/es/supported-languages) — 54 idiomas. | | `serverToken` | string | — | Token de un solo uso (sct_xxx) emitido por tu servidor. Muy recomendado en producción — evita el abuso por refresco ilimitado de desafíos. | | `onServerTokenExpired` | `() => Promise` | — | Se invoca cuando caduca el serverToken; devuelve uno nuevo para que el SDK pueda continuar sin interrumpir el flujo. | | `enableVoice` | boolean | `true` | Muestra el acceso al CAPTCHA por audio (soporte de accesibilidad para personas con discapacidad visual). | ## Validación en el servidor Tras `onSuccess`, envía `res.token` (prefijo `pt_`) a tu propio backend y luego valídalo en el servidor: ```bash POST https://apiv1.captcha.la/v1/validate X-App-Key: YOUR_APP_KEY X-App-Secret: YOUR_APP_SECRET Content-Type: application/json { "pass_token": "" } ``` Consulta la [Referencia de la API](/es/api-reference) para conocer el endpoint completo de validación.