---
title: Web SDK
---
# Web SDK
Web SDK поддерживает все современные браузеры с несколькими способами интеграции.
::: tip Посмотрите работу за 30 секунд
[demo-v1.captcha.la](https://demo-v1.captcha.la) — чистый HTML + PHP, лицензия MIT, исходный код доступен на каждой странице.
- [popup.html](https://demo-v1.captcha.la/popup.html) — режим всплывающего окна
- [float.html](https://demo-v1.captcha.la/float.html) — плавающий виджет
- [bind.html](https://demo-v1.captcha.la/bind.html) — привязка к кнопке
- [inline.html](https://demo-v1.captcha.la/inline.html) — встраивание inline
- [server-token.html](https://demo-v1.captcha.la/server-token.html) — Token, выданный сервером (защита от повторов)
:::
## Быстрый старт
```html
```
## Установка
### 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';
```
## Режимы
### Режим Popup
```js
Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'popup', action: 'login' })
.bindTo('#login-btn')
.onSuccess(res => sendToBackend(res.token));
```
### Режим Float
```js
Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'float', action: 'browse' })
.appendTo('#captcha-container')
.onSuccess(res => sendToBackend(res.token));
```
### Режим 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
```
### Режим Embed
```js
Captchala.init({ appKey: 'YOUR_APP_KEY', product: 'embed', action: 'register' })
.appendTo('#captcha-container')
.onSuccess(res => sendToBackend(res.token));
```
## Общие параметры
| Параметр | Тип | По умолчанию | Описание |
| --- | --- | --- | --- |
| `appKey` | string | — | Ключ приложения (обязательно) |
| `product` | string | `popup` | Режим отображения: popup | float | embed | bind |
| `action` | string | `default` | Бизнес-сценарий (например login, register, pay). Сервер применяет разные политики безопасности для каждого сценария. |
| `lang` | string | `auto` | BCP-47 тег (например `en`, `ja`, `pt-BR`) или `auto`, чтобы следовать `navigator.language`. См. [Поддерживаемые языки](/ru/supported-languages) — 54 локали. |
| `serverToken` | string | — | Одноразовый Token (sct_xxx), выданный вашим сервером. Настоятельно рекомендуется в production — предотвращает неограниченное обновление запросов. |
| `onServerTokenExpired` | `() => Promise` | — | Вызывается при истечении serverToken; верните новый, чтобы SDK мог продолжить без прерывания потока. |
| `enableVoice` | boolean | `true` | Показать пункт аудио-CAPTCHA (доступность для пользователей с нарушением зрения). |
## Серверная проверка
После `onSuccess` отправьте `res.token` (префикс `pt_`) на ваш backend, затем проверьте его на стороне сервера:
```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": "" }
```
См. [Справочник API](./api-reference) для полного endpoint проверки.