Документация API
Добро пожаловать в документацию RU-CAPTCHA.RU. Наш сервис позволяет легко и быстро добавить надежную текстовую капчу на любой сайт. Интеграция состоит всего из двух шагов: добавления виджета на клиентской стороне и проверки токена на вашем сервере.
Базовый URL API
https://ru-captcha.ru/api/v1Аутентификация
Для работы с API вам потребуется API_KEY. Вы можете получить его бесплатно в личном кабинете после регистрации.
Ключ передается в заголовке Authorization при запросах с вашего сервера (Backend валидация), а также указывается в data-атрибуте виджета на Frontend.
Интеграция в Aurora OS
Для Aurora OS подключите WebView-страницу SDK. Она принимает API-ключ в query и отдаёт cf_token через JavaScript-мост.
import QtQuick 2.15
import Sailfish.Silica 1.0
Page {
WebView {
id: captchaWebView
anchors.fill: parent
url: "https://ru-captcha.ru/sdk/captcha-webview.html?key=YOUR_API_KEY"
onLoadFailed: console.log("CAPTCHA load failed")
}
}Frontend интеграция
Добавьте скрипт виджета на страницу с вашей формой. Затем разместите контейнер для капчи внутри тега <form>.
Скрипт виджета
Подключите этот скрипт на ваш сайт для работы капчи. URL скрипта зависит от домена, на котором развёрнут сервис.
https://ru-captcha.ru/widget.js<!-- Подключите скрипт в head или перед закрывающим body -->
<script src="https://ru-captcha.ru/widget.js"></script>
<form action="/your-endpoint" method="POST">
<!-- Ваши поля -->
<input type="email" name="email" />
<!-- Виджет капчи -->
<div id="ru-captcha-widget" data-key="YOUR_API_KEY" data-api-base="https://ru-captcha.ru"></div>
<button type="submit">Отправить</button>
</form>Перед подключением добавьте домен вашего сайта в личном кабинете (раздел API ключ → Сайты) — укажите адрес без https://, как в браузере, например example.com. Поддомены подключаются автоматически.
При успешном прохождении капчи скрипт добавит скрытое поле cf_token в форму. Значок обновления встроен в виджет и появляется на подключённых сайтах автоматически. Он позволяет сменить задание или начать проверку заново после ошибки; предыдущий ответ сбрасывается.
Backend валидация
Когда форма отправлена на ваш сервер, извлеките значение cf_token и отправьте POST-запрос к нашему API для проверки.
/api/v1/public/captcha/verifycurl -X POST https://ru-captcha.ru/api/v1/public/captcha/verify \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"token": "TOKEN_FROM_FRONTEND"}'Успешный ответ
{
"success": true,
"data": {
"valid": true,
"score": 0.9,
"timestamp": "2026-05-17T10:30:00Z"
}
}Справочник API
Публичные методы используются виджетом и сайтом клиента. Методы кабинета требуют Bearer-токен пользователя.
Публичные методы
| Метод | Эндпоинт | Назначение |
|---|---|---|
| GET | /api/v1/public/captcha/allowed | Проверяет домен, активность услуги и решение правил отображения (параметры: key, host, query, sf). |
| GET | /api/v1/public/captcha/widget-theme | Возвращает настройки вида и правила отображения (параметры: key, host). |
| GET | /api/v1/public/captcha/hosts | Возвращает список подключённых доменов или приложений для API-ключа (параметр: key). |
| POST | /api/v1/public/captcha/record | Сохраняет результат прохождения. Тело: key, host, event, token, score. |
| POST | /api/v1/public/captcha/verify | Серверная проверка токена. Authorization: Bearer API_KEY, тело: { token }. |
| POST | /api/v1/public/captcha/error | Сохраняет ошибку виджета. Тело: key, host, source, code, message. |
| GET | /api/v1/public/status | Возвращает состояние API, базы данных и число подключённых проектов. |
Методы личного кабинета
| Метод | Эндпоинт | Назначение |
|---|---|---|
| GET | /api/v1/user/apikey/sites/:id/stats | Статистика сайта за период. Параметры: date_from, date_to (YYYY-MM-DD). |
| GET|PUT | /api/v1/user/widget/sites/:id/theme | Чтение и сохранение настроек виджета конкретного сайта или приложения. |
| PUT | /api/v1/user/security/2fa | Включение или отключение 2FA. Тело: { enabled: boolean }. |
| GET | /api/v1/user/activity | Выгрузка действий пользователя для аудита и интеграций. |
Жизненный цикл токена
cf_token одноразовый и действует 10 минут. После успешной проверки помечается использованным; повторная проверка возвращает invalid_token.
Статус сервиса
Публичный статус API проверяет соединение с базой данных и показывает версию API. Используйте его для мониторинга и информирования о сбоях.
/api/v1/public/status{
"status": "ok",
"database": "ok",
"api_version": "v1",
"active_sites_count": 42
}Интеграция на Java
Для Android-приложений отобразите виджет капчи во встроенном WebView, затем передайте полученный cf_token на ваш backend и проверьте его через API RU-CAPTCHA.RU.
Виджет во WebView
Загрузите HTML со скриптом widget.js и контейнером ru-captcha-widget. Укажите ваш API-ключ в data-key и домен сервиса в data-api-base.
WebView webView = findViewById(R.id.captcha_webview);
webView.getSettings().setJavaScriptEnabled(true);
String html = "<!DOCTYPE html><html><head>"
+ "<script src=\"https://ru-captcha.ru/widget.js\"></script>"
+ "</head><body>"
+ "<div id=\"ru-captcha-widget\" data-key=\"YOUR_API_KEY\" "
+ "data-api-base=\"https://ru-captcha.ru\"></div>"
+ "</body></html>";
webView.loadDataWithBaseURL("https://ru-captcha.ru", html, "text/html", "UTF-8", null);
// После прохождения капчи получите cf_token из DOM (JavascriptInterface)Проверка токена (сервер)
На backend отправьте POST на /captcha/verify с заголовком Authorization: Bearer API_KEY и телом {"token": "..."}.
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public boolean verifyCaptcha(String apiKey, String token) throws Exception {
HttpURLConnection conn = (HttpURLConnection)
new URL("https://ru-captcha.ru/api/v1/public/captcha/verify").openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Bearer " + apiKey);
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
conn.setDoOutput(true);
String json = "{\"token\":\"" + token + "\"}";
conn.getOutputStream().write(json.getBytes(StandardCharsets.UTF_8));
int status = conn.getResponseCode();
// Разберите JSON: success == true и data.valid == true
return status == 200;
}Web SDK
SDK подключает виджет, возвращает токен и отправляет его на серверную проверку. Для мобильных приложений используйте тот же виджет во WebView.
const { RuCaptcha } = window;
const token = await RuCaptcha.mount("#captcha", {
key: "YOUR_API_KEY"
});
// Send token with your form to your backend and verify it there
// with POST /api/v1/public/captcha/verify using your secret server-side key.Правила отображения
Правила задаются в кабинете в настройке виджета. Можно скрыть капчу при совпадении или показывать её только при совпадении по query, IP, региону или HTTP-заголовку.
{
"effect": "hide",
"query": "preview=1",
"ip": "203.0.113.10, 198.51.100.0/24",
"region": "RU",
"header": "x-bot-group",
"header_value": "monitoring, automation"
}Безопасность и аудит
Капча проверяется на стороне сервиса. Персональные данные обрабатываются по размещённым правовым документам.
В личном кабинете можно включить 2FA: после пароля сервис запрашивает 6-значный код из письма.
Регистрация выполняется по корпоративной почте; публичные почтовые домены блокируются.
Действия пользователя доступны для выгрузки через GET /api/v1/user/activity с Bearer-токеном.
Интеграция на Kotlin
В Android на Kotlin используйте WebView для показа виджета и OkHttp (или Ktor) для серверной проверки токена cf_token.
Виджет во WebView
Подключите widget.js через loadDataWithBaseURL — так корректно загрузятся скрипты и словари капчи с домена ru-captcha.ru.
val webView: WebView = findViewById(R.id.captcha_webview)
webView.settings.javaScriptEnabled = true
val html = """
<!DOCTYPE html>
<html>
<head><script src="https://ru-captcha.ru/widget.js"></script></head>
<body>
<div id="ru-captcha-widget"
data-key="YOUR_API_KEY"
data-api-base="https://ru-captcha.ru"></div>
</body>
</html>
""".trimIndent()
webView.loadDataWithBaseURL("https://ru-captcha.ru", html, "text/html", "UTF-8", null)
// После прохождения капчи считайте cf_token через evaluateJavascriptПроверка токена (сервер)
POST-запрос к https://ru-captcha.ru/api/v1/public/captcha/verify с Bearer-токеном и JSON {"token": "TOKEN_FROM_CLIENT"}.
val client = OkHttpClient()
val body = """{"token":"$token"}"""
.toRequestBody("application/json".toMediaType())
val request = Request.Builder()
.url("https://ru-captcha.ru/api/v1/public/captcha/verify")
.post(body)
.addHeader("Authorization", "Bearer $apiKey")
.build()
client.newCall(request).execute().use { response ->
// Проверьте response.isSuccessful и поле data.valid в JSON
}Интеграция на Swift
В iOS-приложениях покажите капчу в WKWebView, получите cf_token после прохождения и проверьте его на сервере через URLSession.
Виджет в WKWebView
Загрузите HTML с widget.js и div#ru-captcha-widget. Базовый URL loadHTMLString должен указывать на https://ru-captcha.ru.
import WebKit
let webView = WKWebView(frame: .zero)
let html = """
<!DOCTYPE html>
<html>
<head><script src="https://ru-captcha.ru/widget.js"></script></head>
<body>
<div id="ru-captcha-widget"
data-key="YOUR_API_KEY"
data-api-base="https://ru-captcha.ru"></div>
</body>
</html>
"""
webView.loadHTMLString(html, baseURL: URL(string: "https://ru-captcha.ru"))
// После прохождения капчи получите cf_token через evaluateJavaScriptПроверка токена (сервер)
Асинхронный POST к /captcha/verify: заголовок Authorization и JSON с полем token. Успех — HTTP 200 и data.valid == true.
var request = URLRequest(
url: URL(string: "https://ru-captcha.ru/api/v1/public/captcha/verify")!
)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try JSONSerialization.data(withJSONObject: ["token": token])
let (data, response) = try await URLSession.shared.data(for: request)
// Проверьте HTTP 200 и поле data.valid в JSONКоды ошибок
| Код | Описание |
|---|---|
| invalid_token | Токен недействителен, просрочен или уже был использован. |
| unauthorized | Неверный API_KEY или ключ не передан. |
| rate_limit_exceeded | Превышен лимит запросов для вашего ключа. |