войти

Методы API

Все методы серверного API: параметры, поля ответа, примеры запросов. Рядом с описанием каждого метода — пример запроса и ответа. Все адреса — относительно https://agent-mark.ru.

Найти упоминания

POST/api/find
1 проверка на 20 000 символовсекретный ключ

Находит в тексте упоминания людей и организаций из реестров и возвращает их позиции. Текст не меняется — удобно подсветить найденное в редакторе или проверить статью перед публикацией. Текст — обычный, без HTML.

Тело запроса

ПолеТипОписание
text обязательнострока Текст до 1 000 000 символов.
registriesсписок строк Какие реестры искать: foreign_agents, undesirable, extremist, terrorist, rfm_organizations, rfm_persons, narcotics. Без поля — все реестры с пометками, а перечень наркотиков — если подключена доп. услуга. narcotics без услуги не ищется. Реестры, не входящие в тариф сайта, не ищутся и при явном указании — какие входят.

Ответ

Список упоминаний в порядке появления в тексте:

ПолеТипОписание
start, endчисло Позиции в тексте: номера символов с нуля, end не включается — подробнее.
textстрокаУпоминание как в тексте: «Екатериной Шульман».
registryстрокаКод реестра.
entry_typeстрока person — человек, organization — организация, substance — вещество из перечня наркотиков.
nameстрокаЗапись как в реестре: «Шульман Екатерина Михайловна».
variantстрока Вариант имени или названия, по которому найдено: «Екатерина Шульман», «ФБК», псевдоним или прежняя фамилия.
strongда / нет true — полное имя или название; false — короткая форма (одна фамилия), принятая потому, что в этом же тексте тот же человек упомянут полностью.

Ошибки: 401 — ключ, 403 — нет тарифа и пакета проверок или проверки на месяц закончились, 422 — текст длиннее лимита или неизвестный реестр, 503 — словарь обновляется. Все ошибки.

Запрос

curl https://agent-mark.ru/api/find \
  -H "Authorization: Bearer sk_ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{"text": "Интервью с Екатериной Шульман о выборах. ФБК опубликовал расследование."}'

Ответ

[
  {
    "start": 11, "end": 29, "text": "Екатериной Шульман",
    "registry": "foreign_agents", "entry_type": "person",
    "name": "Шульман Екатерина Михайловна",
    "variant": "Екатерина Шульман", "strong": true
  },
  {
    "start": 41, "end": 44, "text": "ФБК",
    "registry": "extremist", "entry_type": "organization",
    "name": "Некоммерческая организация «Фонд борьбы с коррупцией»",
    "variant": "ФБК", "strong": true
  }
]

Разметить текст

POST/api/mark
1 проверка на 20 000 символовсекретный ключ

Размечает HTML или обычный текст: вставляет значки, статус в скобках и блок сносок по закону, а при доп. услуге — предупреждение о вреде наркотиков перед текстом. Незаданные параметры берутся из настроек сайта в кабинете. HTML не перестраивается — только вставки; уже размеченный текст можно отправлять повторно.

Тело запроса

ПолеТипОписание
content обязательнострока HTML или текст до 1 000 000 символов.
formatстрока html (по умолчанию) или text — обычный текст: значок после упоминания, сноски строками.
styleстрока Вид пометки: footnote — значок и сноски, inline — статус в скобках, both — то и другое.
mark_everyда / нет Значок у каждого упоминания (true) или только у первого.
numberingстрока asterisk — звёздочка у всех сносок, numbers — номера 1, 2, 3.
inline_red, inline_italicда / нет Статус в скобках красным цветом и курсивом (только в HTML, атрибутом style).
registriesсписок строк Какие реестры размечать — коды как у /api/find; реестры, не входящие в тариф сайта, не размечаются. narcotics здесь не действует: предупреждение включается полем warning.
warningда / нет Предупреждение о вреде наркотиков перед текстом. По умолчанию — если подключена доп. услуга; false — не ставить (например, в анонсе). Без услуги не ставится и при true.
urlстрока Адрес страницы, где будет текст, до 2000 символов. На ней не размечаются однофамильцы, исключённые в кабинете (тариф «медиа»).

Ответ

ПолеТипОписание
contentстрока Размеченный HTML или текст — что вставляется.
mentionsсписок Все найденные упоминания, как у /api/find, включая те, что пометки не получили (например, автор пометил сам). Для HTML позиции — по видимому тексту.
footnotesсписок Сноски: marker — значок («*» или номер), label — имя в сноске, registries — коды реестров, text — текст сноски без точки.
warningстрока Текст поставленного предупреждения о вреде наркотиков; пустая строка — не ставили.

Ошибки: 401 — ключ, 403 — нет тарифа и пакета проверок или проверки на месяц закончились, 413 — тело больше 2 МБ, 422 — поле запроса, 503 — словарь обновляется. Все ошибки.

Запрос

curl https://agent-mark.ru/api/mark \
  -H "Authorization: Bearer sk_ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "<p>Интервью с Екатериной Шульман о выборах.</p><p>ФБК опубликовал расследование.</p>",
    "url": "https://example.ru/news/1"
  }'

Ответ

{
  "content": "<p>Интервью с Екатериной Шульман<sup class=\"am-mark\" title=\"Екатерина Шульман — иностранный агент\">*</sup> о выборах.</p><p>ФБК<sup class=\"am-mark\" title=\"ФБК — организация признана экстремистской, её деятельность запрещена в России\">*</sup> опубликовал расследование.</p><div class=\"am-footnotes\"><p>* Екатерина Шульман — иностранный агент.</p><p>* ФБК — организация признана экстремистской, её деятельность запрещена в России.</p></div>",
  "mentions": [
    {"start": 12, "end": 30, "text": "Екатериной Шульман", "registry": "foreign_agents",
     "entry_type": "person", "name": "Шульман Екатерина Михайловна",
     "variant": "Екатерина Шульман", "strong": true},
    {"start": 43, "end": 46, "text": "ФБК", "registry": "extremist",
     "entry_type": "organization",
     "name": "Некоммерческая организация «Фонд борьбы с коррупцией»",
     "variant": "ФБК", "strong": true}
  ],
  "footnotes": [
    {"marker": "*", "label": "Екатерина Шульман", "registries": ["foreign_agents"],
     "text": "Екатерина Шульман — иностранный агент"},
    {"marker": "*", "label": "ФБК", "registries": ["extremist"],
     "text": "ФБК — организация признана экстремистской, её деятельность запрещена в России"}
  ],
  "warning": ""
}

Статус в скобках

"style": "inline" — та же статья:

<p>Интервью с Екатериной Шульман <span class="am-inline" style="color:#c4382b">(иностранный агент)</span> о выборах.</p><p>ФБК <span class="am-inline" style="color:#c4382b">(организация признана экстремистской, деятельность запрещена в РФ)</span> опубликовал расследование.</p>

Сведения о сайте

GET/api/site
проверкой не считаетсясекретный ключ

Сайт, которому принадлежит ключ: домены, настройки пометок, доп. услуги и версия словаря. Так плагины раз в час узнают, что пометки пора пересчитать; так же удобно проверить, что ключ работает.

Поля ответа

ПолеТипОписание
public_keyстрокаПубличный ключ сайта для виджета.
domainsсписок строкДомены сайта из кабинета.
settingsобъект Настройки пометок: style, mark_every, numbering, inline_red, inline_italic, registries, allow_subdomains — как в кабинете.
addonsсписок строк Действующие доп. услуги: narcotics — предупреждение о вреде наркотиков.
tariffстрока или null Код действующего тарифа сайта: start, standard, media. null — тарифа нет: виджет пометок не ставит, API работает только из пакетов проверок.
dictionary_versionчисло Версия разметки для этого сайта. Сравнивайте только на равенство: меняется, когда обновились реестры, изменились настройки пометок, тариф, доп. услуга или исключения однофамильцев — тогда сохранённые пометки нужно пересчитать.
dictionary_updated_atчисло Unix-время последней пересборки словаря — чтобы показать людям.
widget_urlстрокаАдрес скрипта виджета.

Запрос

curl https://agent-mark.ru/api/site \
  -H "Authorization: Bearer sk_ваш_ключ"

Ответ

{
  "public_key": "pk_6f2c…",
  "domains": ["example.ru"],
  "settings": {
    "style": "footnote", "mark_every": true, "numbering": "asterisk",
    "inline_red": true, "inline_italic": false,
    "registries": ["foreign_agents", "undesirable", "extremist",
                   "terrorist", "rfm_organizations", "rfm_persons"],
    "allow_subdomains": false
  },
  "addons": ["narcotics"],
  "tariff": "media",
  "dictionary_version": 2893746012,
  "dictionary_updated_at": 1761102000,
  "widget_url": "https://agent-mark.ru/widget.js"
}

Сводка по реестрам

GET/api/registries
без ключапроверкой не считается

Сколько действующих записей в каждом реестре и когда он в последний раз успешно синхронизировался. Подходит для мониторинга и для подписи «данные на …» на вашем сайте.

Поля ответа

ПолеТипОписание
registryстрокаКод реестра.
activeчислоДействующих записей.
last_syncдата и время или null Последняя успешная синхронизация, ISO 8601 в UTC; null — ещё не было.

Запрос

curl https://agent-mark.ru/api/registries

Ответ

[
  {"registry": "foreign_agents", "active": 1282,
   "last_sync": "2026-10-22T00:01:12.483915+00:00"},
  {"registry": "extremist", "active": 150,
   "last_sync": "2026-10-22T00:01:20.117204+00:00"},
  …
]

Разметка для виджета

POST/api/widget/mark
публичный ключтолько из браузера с домена сайтаформат может меняться

Служебный метод JS-виджета: по видимому тексту страницы возвращает план — после каких позиций вставить пометки. Описан для понимания, как работает виджет; для своих интеграций используйте /api/mark. Запрос принимается только с заголовком Origin домена сайта; виджет отправляет JSON с типом text/plain, чтобы браузер не делал предварительный запрос OPTIONS.

Тело запроса

ПолеТипОписание
key обязательнострокаПубличный ключ pk_….
text обязательнострока Видимый текст страницы до 200 000 символов.
urlстрокаАдрес страницы — для исключений однофамильцев.

Поля ответа

ПолеТипОписание
styleстрокаВид пометки из настроек сайта.
inline_cssстрокаСтиль статуса в скобках: color:#c4382b и т. п.
warningстрокаПредупреждение перед текстом или пустая строка.
footnotesсписокmarker, label, text — как у /api/mark.
insertionsсписок Пометки: end — позиция в единицах UTF-16, после которой вставить; kind — marker (значок) или inline (статус в скобках); footnote — номер сноски в списке; status — короткий статус для inline.

Без действующего тарифа сайта метод отвечает 403 и пометок не ставит; реестры — по тарифу. Ошибки приходят как {"error": "…"}: 400, 403, 413, 429, 503 — подробнее.

Запрос

fetch("https://agent-mark.ru/api/widget/mark", {
  method: "POST",
  headers: {"Content-Type": "text/plain"},
  body: JSON.stringify({key: "pk_…", url: location.href,
                        text: "Интервью с Екатериной Шульман о выборах."})
})

Ответ

{
  "style": "footnote",
  "inline_css": "color:#c4382b",
  "warning": "",
  "footnotes": [
    {"marker": "*", "label": "Екатерина Шульман",
     "text": "Екатерина Шульман — иностранный агент"}
  ],
  "insertions": [
    {"end": 29, "kind": "marker", "footnote": 0, "status": ""}
  ]
}

Обновлено 22.10.2026 · вопросы — mail@brain-pro.ru