После установки модуля sendev.inozapret на сайт 1С-Битрикс вы получаете не только интерфейс проверки контента в админке, но и полноценный программный слой для создания собственного сервиса.

Функционал будет доступен в релизе 0.9.00 после 8 марта. Подробная документация будет доступна в самом модуле в разделе "Документация API"
Это особенно полезно, если вы хотите:
- проверять тексты перед публикацией;
- анализировать загружаемые документы;
- проверять страницы сайтов по URL;
- выдавать результат в личном кабинете клиента;
- продавать проверки по модели подписки, кредитов или пакетных тарифов.
Такой подход подходит для редакций, агентств, корпоративных порталов, образовательных платформ и сервисов контент-контроля, где важно автоматизировать внутренние регламенты и процессы проверки в логике требований 168-ФЗ, 53-ФЗ, 38-ФЗ и внутренних правил компании.
Что даёт собственное API модуля sendev.inozapret
С практической точки зрения API превращает модуль в "движок" сервиса. Вместо того чтобы ограничиваться ручной проверкой внутри админки, вы можете вынести функциональность наружу и построить поверх неё:
- публичную форму проверки текста;
- загрузку файлов с отчётом;
- проверку страниц по ссылке;
- интеграцию с личным кабинетом;
- платный доступ по API-ключу;
- внутренний инструмент для редакторов, контент-менеджеров или юристов.
Главное преимущество в том, что логика проверки остаётся единой. Один и тот же механизм работает и в административной части, и в публичных сценариях, и в API-интеграциях.
Какие задачи решает API
Собственное API модуля покрывает четыре базовых сценария:
1. Проверка текста
Подходит для статей, карточек товаров, описаний услуг, лендингов, email-рассылок и любых материалов, которые нужно быстро проверить до публикации.
2. Проверка URL
Подходит для анализа готовой страницы: лендинга, статьи, новости, раздела сайта, страницы клиента или партнёра.
3. Проверка файла
Подходит для случаев, когда пользователь или сотрудник загружает документ и хочет получить отчёт без ручного копирования текста.
4. Информационный метод
Позволяет узнать состояние словаря, версию API и доступные действия. Это полезно для интеграций, диагностики и мониторинга.
Где находится API endpoint
Путь зависит от того, куда установлен модуль.
Если модуль установлен вручную для тестирования, endpoint обычно находится по пути:
/local/modules/sendev.inozapret/api/v1/index.php
Если модуль установлен через маркетплейс 1С-Битрикс, endpoint может находиться по пути:
/bitrix/modules/sendev.inozapret/api/v1/index.php
Именно поэтому в рабочем проекте лучше либо определять путь автоматически, либо хранить его в настройках.
Пример вызова с параметром действия:
https://example.com/local/modules/sendev.inozapret/api/v1/index.php?action=check_text
или
https://example.com/bitrix/modules/sendev.inozapret/api/v1/index.php?action=check_text
Как работает аутентификация
API требует ключ доступа. Передать его можно несколькими способами, но основной вариант — через заголовок X-Api-Key.
Поддерживаются варианты:
- HTTP-заголовок
X-Api-Key - параметр
api_keyв теле POST-запроса - параметр
api_keyв query string api_keyв JSON body
Рекомендуемый способ:
curl -X POST 'https://example.com/local/modules/sendev.inozapret/api/v1/index.php?action=info' \
-H 'X-Api-Key: ВАШ_КЛЮЧ'
Важно: API принимает только POST
Это ключевой момент, который нужно понимать сразу.
Параметр action можно передавать в URL, например:
?action=check_text
Но сам запрос должен быть именно POST.
Если просто открыть endpoint в браузере, будет отправлен GET, и API вернёт ошибку METHOD_NOT_ALLOWED.
Если сервер перенаправляет http на https, часть клиентов может повторять такой запрос уже как GET. Поэтому в продакшене всегда лучше сразу отправлять запрос на итоговый адрес и на нужном протоколе.
Какие методы доступны в API
На момент обновления доступны четыре действия:
check_text
Проверка текста.
Основные параметры:
action=check_texttext— текст для анализаskip_whitelist=Y— опционально, если нужно отключить белый список
Пример:
curl -X POST 'https://example.com/local/modules/sendev.inozapret/api/v1/index.php?action=check_text' \
-H 'X-Api-Key: ВАШ_КЛЮЧ' \
--data-urlencode 'text=Для максимальной конверсии используйте AI-дриблинг и стратегический апроач'
check_url
Проверка страницы по ссылке.
Основные параметры:
action=check_urlurl— полный URL страницыskip_whitelist=Y— опционально
Пример:
curl -X POST 'https://example.com/local/modules/sendev.inozapret/api/v1/index.php?action=check_url' \
-H 'X-Api-Key: ВАШ_КЛЮЧ' \
--data-urlencode 'url=https://example.com/article'
check_file
Проверка файла.
Поддерживаемые форматы в текущей реализации API:
txthtmlhtmdocx
Пример:
curl -X POST 'https://example.com/local/modules/sendev.inozapret/api/v1/index.php?action=check_file' \
-H 'X-Api-Key: ВАШ_КЛЮЧ' \
-F 'file=@/path/to/document.docx'
info
Информация о состоянии сервиса.
Пример:
curl -X POST 'https://example.com/local/modules/sendev.inozapret/api/v1/index.php?action=info' \
-H 'X-Api-Key: ВАШ_КЛЮЧ'
Как выглядит ответ API
Успешный ответ возвращается в JSON.
Пример для check_text:
{
"ok": true,
"data": {
"violations_count": 2,
"violations": [
{
"word": "конверсии",
"type": "missing_in_normative_dicts",
"context": "Для максимальной конверсии используйте"
}
],
"settings": {
"storage": "db",
"normative_mask": 31,
"whitelist_enabled": true
}
}
}
Пример ошибки:
{
"ok": false,
"error": {
"code": "AUTH_FAILED",
"message": "Неверный или отсутствующий API-ключ."
}
}
Пример использования API в PHP
Ниже — простой PHP-клиент, который можно использовать в сервисном коде, в компоненте или в кастомной странице на 1С-Битрикс.
<?php
class InozapretClient
{
private string $endpoint;
private string $apiKey;
public function __construct(string $endpoint, string $apiKey)
{
$this->endpoint = rtrim($endpoint, '/');
$this->apiKey = $apiKey;
}
public function checkText(string $text, bool $skipWhitelist = false): array
{
return $this->request('check_text', [
'text' => $text,
'skip_whitelist' => $skipWhitelist ? 'Y' : 'N',
]);
}
public function checkUrl(string $url, bool $skipWhitelist = false): array
{
return $this->request('check_url', [
'url' => $url,
'skip_whitelist' => $skipWhitelist ? 'Y' : 'N',
]);
}
public function request(string $action, array $data = []): array
{
$ch = curl_init($this->endpoint . '?action=' . $action);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-Api-Key: ' . $this->apiKey,
],
CURLOPT_POSTFIELDS => $data,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
curl_close($ch);
$decoded = json_decode((string)$response, true);
return is_array($decoded) ? $decoded : [];
}
}
Использование:
<?php
$client = new InozapretClient(
'https://example.com/local/modules/sendev.inozapret/api/v1/index.php',
'ВАШ_API_КЛЮЧ'
);
$result = $client->checkText('Текст для проверки');
print_r($result);
Пример кода прямо на странице 1С-Битрикс
Один из самых частых сценариев — сделать страницу /tools/text-check/, где пользователь вставляет текст, а сайт отправляет запрос во внутренний API от имени сервера. Это правильно, потому что API-ключ не должен уходить в браузер.
Ниже пример упрощённой страницы index.php для Bitrix.
<?php
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/header.php');
use Bitrix\Main\Config\Option;
$APPLICATION->SetTitle('Проверка текста');
$moduleId = 'sendev.inozapret';
$text = '';
$result = null;
$error = '';
$apiKey = Option::get($moduleId, 'api_key', '');
$possiblePaths = [
'/local/modules/' . $moduleId . '/api/v1/index.php',
'/bitrix/modules/' . $moduleId . '/api/v1/index.php',
];
$apiPath = '';
foreach ($possiblePaths as $path) {
if (file_exists($_SERVER['DOCUMENT_ROOT'] . $path)) {
$apiPath = $path;
break;
}
}
$scheme = (!empty($_SERVER['HTTPS']) && strtolower((string)$_SERVER['HTTPS']) !== 'off') ? 'https' : 'http';
$apiUrl = $apiPath !== '' ? $scheme . '://' . $_SERVER['HTTP_HOST'] . $apiPath : '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && check_bitrix_sessid()) {
$text = trim((string)($_POST['text'] ?? ''));
if ($apiKey === '') {
$error = 'API-ключ не настроен.';
} elseif ($apiUrl === '') {
$error = 'Не удалось определить путь к API.';
} elseif ($text === '') {
$error = 'Введите текст для проверки.';
} else {
$ch = curl_init($apiUrl . '?action=check_text');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-Api-Key: ' . $apiKey,
],
CURLOPT_POSTFIELDS => [
'text' => $text,
],
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode((string)$response, true);
if (!is_array($result)) {
$error = 'Не удалось разобрать ответ API.';
}
}
}
?>
<form method="post">
<?= bitrix_sessid_post() ?>
<textarea name="text" rows="10" style="width:100%;"><?= htmlspecialcharsbx($text) ?></textarea>
<div style="margin-top:10px;">
<button type="submit">Проверить</button>
</div>
</form>
<?php if ($error !== ''): ?>
<div style="margin-top:15px; color:#b94a48;"><?= htmlspecialcharsbx($error) ?></div>
<?php endif; ?>
<?php if (is_array($result) && !empty($result['ok'])): ?>
<div style="margin-top:20px;">
<h3>Результат проверки</h3>
<p>Найдено нарушений: <?= (int)($result['data']['violations_count'] ?? 0) ?></p>
<?php if (!empty($result['data']['violations']) && is_array($result['data']['violations'])): ?>
<table style="width:100%; border-collapse:collapse;">
<tr>
<th style="text-align:left; border-bottom:1px solid #ddd; padding:8px;">Слово</th>
<th style="text-align:left; border-bottom:1px solid #ddd; padding:8px;">Тип</th>
<th style="text-align:left; border-bottom:1px solid #ddd; padding:8px;">Контекст</th>
</tr>
<?php foreach ($result['data']['violations'] as $item): ?>
<tr>
<td style="padding:8px; border-bottom:1px solid #eee;"><?= htmlspecialcharsbx((string)($item['word'] ?? '')) ?></td>
<td style="padding:8px; border-bottom:1px solid #eee;"><?= htmlspecialcharsbx((string)($item['type'] ?? '')) ?></td>
<td style="padding:8px; border-bottom:1px solid #eee;"><?= htmlspecialcharsbx((string)($item['context'] ?? '')) ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
</div>
<?php endif; ?>
<?php require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/footer.php'); ?>
Этот пример хорош тем, что:
- API-ключ хранится на сервере;
- страница подходит для быстрого MVP;
- путь к API определяется автоматически;
- решение одинаково подходит и для
local/modules, и дляbitrix/modules.
Как использовать API в коммерческом сервисе
Собственное API удобно использовать как внутренний слой, поверх которого строится уже полноценный продукт.
Типовая архитектура выглядит так:
Публичные страницы
/tools/text-check//tools/file-check//tools/link-check/
Личный кабинет
- история проверок;
- баланс или тариф;
- экспорт отчётов;
- API-ключ для PRO-тарифа.
Монетизация
- кредиты за символы;
- подписки;
- пакетные тарифы;
- корпоративный доступ.
Дополнительная обвязка
- троттлинг;
- лимиты по IP и пользователю;
- журналирование;
- сохранение истории;
- интеграция с оплатой.
Практические сценарии использования
Сценарий 1. Проверка текста перед публикацией
Контент-менеджер вставляет текст, сайт отправляет POST-запрос в check_text, результат выводится в интерфейсе и при необходимости сохраняется в историю.
Сценарий 2. Проверка документа
Пользователь загружает docx, сервис вызывает check_file, получает нарушения и показывает отчёт в личном кабинете.
Сценарий 3. Проверка лендинга или статьи по URL
Клиент вставляет ссылку, сервис вызывает check_url, скачивает страницу, извлекает текст и показывает результат.
Сценарий 4. Интеграция по API для партнёров
Партнёрская система или внешний кабинет получает свой ключ и вызывает API напрямую по тарифу с ограничениями.
Что важно учесть в продакшене
При запуске собственного сервиса поверх API есть несколько обязательных моментов.
Во-первых, не отдавайте API-ключ в браузер. Все вызовы с ключом лучше делать сервер-сервер.
Во-вторых, если вы делаете публичную проверку URL, добавляйте ограничения по доменам, адресам, редиректам и объёму ответа. Это особенно важно для защиты от SSRF-сценариев.
В-третьих, для публичных форм обязательно нужны лимиты и троттлинг. Даже простой лимит по IP уже сильно снижает риск злоупотреблений.
В-четвёртых, если вы продаёте проверки, почти всегда лучше считать их в кредитах. Так проще делать демо, тарифы, подписки и корпоративные пакеты.
Кому особенно полезно собственное API sendev.inozapret
Такой подход хорошо подходит:
- редакциям и медиапроектам;
- маркетинговым агентствам;
- корпоративным порталам;
- образовательным платформам;
- внутренним юридическим и контентным отделам;
- SaaS-сервисам, которые хотят продавать проверку как отдельный продукт.
Итог
Собственное API в модуле sendev.inozapret — это важное расширение, которое переводит модуль из формата "инструмент в админке" в формат "платформа для сервиса".
На практике это означает, что на базе одного модуля можно построить:
- публичную проверку текстов;
- загрузку и анализ файлов;
- проверку страниц по URL;
- личный кабинет клиента;
- платную модель доступа;
- партнёрский API.
Если вам нужен быстрый запуск на 1С-Битрикс, то самый практичный путь такой: сначала поднять проверку текста через внутренний API, затем добавить файлы и ссылки, а уже после — историю, тарифы, биллинг и кабинет пользователя.