---
title: SDK Web
---
# SDK Web
Le SDK Web prend en charge tous les navigateurs modernes avec plusieurs méthodes d'intégration.
::: tip Voyez-le fonctionner en 30 secondes
[demo-v1.captcha.la](https://demo-v1.captcha.la) — HTML + PHP pur, sous licence MIT, code source consultable sur chaque page.
- [popup.html](https://demo-v1.captcha.la/popup.html) — mode popup
- [float.html](https://demo-v1.captcha.la/float.html) — widget flottant
- [bind.html](https://demo-v1.captcha.la/bind.html) — lié à un bouton
- [inline.html](https://demo-v1.captcha.la/inline.html) — intégration en ligne
- [server-token.html](https://demo-v1.captcha.la/server-token.html) — token émis par le serveur (anti-rejeu)
:::
## Démarrage rapide
```html
```
## Installation
### 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';
```
## Modes
### Mode popup
```js
Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'popup', action: 'login' })
.bindTo('#login-btn')
.onSuccess(res => sendToBackend(res.token));
```
### Mode flottant
```js
Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'float', action: 'browse' })
.appendTo('#captcha-container')
.onSuccess(res => sendToBackend(res.token));
```
### Mode 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
```
### Mode embed
```js
Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'embed', action: 'register' })
.appendTo('#captcha-container')
.onSuccess(res => sendToBackend(res.token));
```
## Options communes
| Paramètre | Type | Valeur par défaut | Description |
| --- | --- | --- | --- |
| `appKey` | string | — | Clé d'application (obligatoire) |
| `product` | string | `popup` | Mode d'affichage : popup | float | embed | bind |
| `action` | string | `default` | Scène métier (par ex. login, register, pay). Le serveur applique des politiques de sécurité différentes selon la scène. |
| `lang` | string | `auto` | Étiquette BCP-47 (par ex. `en`, `ja`, `pt-BR`) ou `auto` pour suivre `navigator.language`. Voir [Langues prises en charge](/supported-languages) — 54 locales. |
| `serverToken` | string | — | Token à usage unique (sct_xxx) émis par votre serveur. Fortement recommandé en production — empêche les abus de rafraîchissement illimité du challenge. |
| `onServerTokenExpired` | `() => Promise` | — | Appelé lorsque le serverToken expire ; renvoyez-en un nouveau pour que le SDK puisse continuer sans interrompre le flux. |
| `enableVoice` | boolean | `true` | Affiche le point d'entrée du CAPTCHA audio (prise en charge de l'accessibilité pour les utilisateurs malvoyants). |
## Validation côté serveur
Après `onSuccess`, envoyez `res.token` (préfixe `pt_`) à votre propre backend, puis validez-le côté serveur :
```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": "" }
```
Consultez la [Référence de l'API](./api-reference) pour l'endpoint de validation complet.