SEOньоритаДокументация API
API v1Маршруты API
Public API v1

Маршруты API

Пути указаны после /api/v1. Используйте поиск в левом сайдбаре, чтобы найти маршрут по методу, пути, scope или назначению.

Быстрый старт

Первый запрос, базовый URL и формат ответа.

Инструкция →
GET/accessРабочая область, проекты и права текущего API-ключаtoken:discover

Формат запроса

JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.

Проекты

Получение списка, чтение и изменение проекта.

Инструкция →
GET/workspaces/{workspaceId}/projectsСписок доступных ключу проектовprojects:read

Формат запроса

Path: workspaceId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/workspaces/{workspaceId}/project-capabilitiesДоступность создания и общего порядка проектовprojects:read

Формат запроса

Path: workspaceId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/workspaces/{workspaceId}/projectsСоздать проект в рабочей областиprojects:write

Формат запроса

Path: workspaceId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PUT/workspaces/{workspaceId}/projects/orderСохранить общий порядок проектовprojects:write

Формат запроса

Path: workspaceId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}Карточка проектаprojects:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}Изменить настройки проектаprojects:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/archiveАрхивировать проектprojects:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/restoreВосстановить проектprojects:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}Запустить безопасное удаление проектаprojects:write

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.

Семантика

Ключи, папки, массовые команды, импорт и экспорт.

Инструкция →
GET/projects/{projectId}/keyword-groupsДерево папок семантики с цветамиsemantics:read

Формат запроса

Path: projectId (UUID). Тело и query отсутствуют.

Формат ответа

200 · data: [{ id, parentId?, name, path, color?, position, keywordCount, systemKind?, version, createdAt, updatedAt }].
POST/projects/{projectId}/keyword-groupsСоздать папкуsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/keyword-groups/bulkСоздать несколько папокsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/keyword-groups/{groupId}Удалить папку с выбранной стратегией для дочерних папок и запросовsemantics:write

Формат запроса

Headers: If-Match. Optional JSON: { deleteKeywords?: boolean, promoteChildren?: boolean }.

Формат ответа

204 No Content.
GET/projects/{projectId}/keywordsКлючевые слова с фильтрами, примечаниями и курсоромsemantics:read

Формат запроса

Query: limit, cursor?, search?, groupId/groupIds?, filters?, sort?, includeNotes=true|false. Полный note возвращается только при includeNotes=true; в этом режиме limit <= 200.

Формат ответа

200 · data: SemanticKeywordListItem[] с groupPath, optional groupMembershipCount для нескольких папок, targetUrl, tags, frequencies, positions, aiAnswers, hasNote и optional note; page: { hasNext, nextCursor?, totalApprox? }.
POST/projects/{projectId}/keywords/operation-scopeОблегчённая выборка запросов для большой операцииsemantics:read

Формат запроса

JSON: { groupIds?: UUID[], cursor?: UUID }. Без groupIds выбираются все активные запросы проекта; до 20 000 уникальных папок образуют один union.

Формат ответа

200 · до 10 000 строк { id, version, isTracked }; первая страница содержит totalApprox, следующая — UUID cursor. Табличные метрики, теги и custom values не загружаются.
POST/projects/{projectId}/keywordsСоздать ключевое словоsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/keywords/bulkПакетное создание ключейsemantics:write

Формат запроса

JSON: { duplicatePolicy, items[] }; row-level ADD_TO_GROUP добавляет существующую canonical keyword identity в duplicateGroupId (либо groupId), сохраняя прежние папки. groupId по-прежнему задаёт папку для новой строки.

Формат ответа

200 · data содержит indexed outcomes CREATED, LINKED_EXISTING, RESTORED, SKIPPED_EXISTING, REJECTED_EXISTING или FAILED.
PATCH/projects/{projectId}/keywords/{keywordId}Изменить ключевое словоsemantics:write

Формат запроса

Path: projectId: UUID, keywordId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/keywords/mergeОбъединить запросы с сохранением истории у выбранного основного запросаsemantics:write

Формат запроса

JSON: { keeper: { id, version }, sources: [{ id, version }] }. Все запросы должны принадлежать одному проекту и иметь один язык.

Формат ответа

200 · data: { keeperKeywordId, keeperVersion, mergedKeywordIds, mergedAt }. Immutable history остаётся доступной через keeper.
GET/projects/{projectId}/keywords/merge-suggestionsНайти повреждённые названия и ближайшие варианты для ручного объединенияsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/keywords/{keywordId}Переместить запрос в корзину или окончательно очистить его данныеsemantics:write

Формат запроса

Headers: If-Match. Optional JSON: { permanent?: boolean }; permanent=true допустим только для ключа в корзине.

Формат ответа

204 No Content.
POST/projects/{projectId}/bulk-commandsМассовое изменение выбранных ключейsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/imports/{importId}Состояние импортаsemantics:read

Формат запроса

Path: projectId: UUID, importId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/imports/{importId}/preview-rowsСтроки предпросмотра импортаsemantics:read

Формат запроса

Path: projectId: UUID, importId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/importsСоздать импортsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/exportsИстория экспортовsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/exportsСоздать экспортsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clustering-runsЗапустить кластеризациюsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/keyword-groups/{groupId}/duplicateДублировать папку и выбранное содержимоеsemantics:write

Формат запроса

Path: projectId: UUID, groupId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/keyword-groups/{groupId}Изменить название, родителя, цвет или позицию папкиsemantics:write

Формат запроса

Headers: If-Match. JSON: { name?: string, parentId?: UUID | null, color?: paletteColor | null, position?: integer }.

Формат ответа

200 · data: SemanticKeywordGroup с id, parentId, name, path, color, position, keywordCount и version.
POST/projects/{projectId}/keywords/listПолучить страницу ключей со сложным фильтром в JSON bodysemantics:read

Формат запроса

JSON: { query: { limit, cursor?, search?, sort?, groupIds?, includeNotes?, filters? } }; точные поля проверяются по allowlist.

Формат ответа

200 · data: SemanticKeywordListItem[]; page: { hasNext, nextCursor?, totalApprox? }.
GET/projects/{projectId}/keywords/tag-optionsПолучить доступные теги проектаsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/keywords/tagsПолучить теги проекта с количеством связанных запросовsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/keywords/tags/{tagId}Удалить тег и снять его со всех запросов проектаsemantics:write

Формат запроса

Path: projectId: UUID, tagId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
POST/projects/{projectId}/keywords/bulk-previewПроверить пакет ключей перед созданиемsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/keywords/{keywordId}/insightsКарточка ключа: текущие папки с цветами, позиции, частотность, SERP, URL и заметкаsemantics:read

Формат запроса

Path: projectId, keywordId (UUID). Query: dimensionKey? — точный срез поисковика, региона и устройства; snapshotId? — точный immutable снимок для списка найденных URL.

Формат ответа

200 · data: SemanticKeywordInsights с последними частотностями, позициями, SERP-результатами, target URL и note.
GET/projects/{projectId}/keywords/{keywordId}/ai-answersПоследние ИИ-ответы ключа по выбранному срезуsemantics:read

Формат запроса

Path: projectId: UUID, keywordId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/keywords/{keywordId}/ai-answers/historyИстория ИИ-ответов ключа с курсоромsemantics:read

Формат запроса

Path: projectId: UUID, keywordId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/keywords/{keywordId}/frequencies/{type}/{device}Удалить выбранный контекст частотности ключаsemantics:write

Формат запроса

Path: projectId: UUID, keywordId: UUID, type: string, device: string. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
POST/projects/{projectId}/bulk-commands/clean-previewПредпросмотр очистки выбранных ключейsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/bulk-commands/cleanПрименить очистку выбранных ключейsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/imports/{importId}/mappingСохранить сопоставление колонок импортаsemantics:write

Формат запроса

Path: projectId: UUID, importId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/imports/{importId}/publishОпубликовать проверенный импортsemantics:write

Формат запроса

Path: projectId: UUID, importId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/imports/{importId}/cancelОтменить импортsemantics:write

Формат запроса

Path: projectId: UUID, importId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/uploadsСоздать multipart-загрузку файла импортаsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/uploads/{uploadId}/partsПолучить подписанные URL частей загрузкиsemantics:write

Формат запроса

Path: projectId: UUID, uploadId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/uploads/{uploadId}/completeЗавершить multipart-загрузкуsemantics:write

Формат запроса

Path: projectId: UUID, uploadId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/uploads/{uploadId}Получить состояние загрузкиsemantics:read

Формат запроса

Path: projectId: UUID, uploadId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/uploads/{uploadId}Отменить незавершённую загрузкуsemantics:write

Формат запроса

Path: projectId: UUID, uploadId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
GET/projects/{projectId}/exports/{exportId}Получить состояние экспортаsemantics:read

Формат запроса

Path: projectId: UUID, exportId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/exports/{exportId}/downloadСкачать готовый экспорт через браузерный маршрутsemantics:read

Формат запроса

Path: projectId: UUID, exportId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/exports/{exportId}/fileСкачать готовый экспорт по Bearer APIsemantics:read

Формат запроса

Path: projectId: UUID, exportId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/exports/{exportId}/cancelОтменить активный экспортsemantics:write

Формат запроса

Path: projectId: UUID, exportId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/clustering-runsИстория кластеризацийsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/clustering-runs/{jobId}/result/sections/{sectionId}Страница секции результата кластеризацииsemantics:read

Формат запроса

Path: projectId: UUID, jobId: UUID, sectionId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/clustering-runs/{jobId}/resultСводный результат кластеризацииsemantics:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/clustering-runs/{jobId}Состояние кластеризацииsemantics:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clustering-runs/{jobId}/cancelОтменить кластеризациюsemantics:write

Формат запроса

Path: projectId: UUID, jobId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clustering-runs/{jobId}/applyПрименить proposal кластеризацииsemantics:write

Формат запроса

Path: projectId: UUID, jobId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clustering-runs/{jobId}/rejectОтклонить proposal кластеризацииsemantics:write

Формат запроса

Path: projectId: UUID, jobId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/clustersСписок кластеров проектаsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clustersСоздать кластерsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clusters/page-mapping-previewПредпросмотр назначения страниц кластерамsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clusters/page-mapping-bulkМассово назначить страницы кластерамsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clusters/merge-previewПредпросмотр объединения кластеровsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clusters/mergeОбъединить кластерыsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clusters/split-previewПредпросмотр разделения кластераsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/clusters/splitРазделить кластерsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/clusters/{clusterId}Изменить кластерsemantics:write

Формат запроса

Path: projectId: UUID, clusterId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/clusters/{clusterId}Удалить кластер и снять его со всех запросов проектаsemantics:write

Формат запроса

Path: projectId: UUID, clusterId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
GET/projects/{projectId}/semantic-custom-columnsПользовательские колонки семантикиsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/semantic-custom-columnsСоздать пользовательскую колонкуsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/semantic-custom-columns/{columnId}Изменить пользовательскую колонкуsemantics:write

Формат запроса

Path: projectId: UUID, columnId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/semantic-custom-columns/{columnId}Удалить пользовательскую колонкуsemantics:write

Формат запроса

Path: projectId: UUID, columnId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
PUT/projects/{projectId}/keywords/{keywordId}/custom-values/{columnId}Записать пользовательское значение ключаsemantics:write

Формат запроса

Path: projectId: UUID, keywordId: UUID, columnId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/keywords/{keywordId}/custom-values/{columnId}Удалить пользовательское значение ключаsemantics:write

Формат запроса

Path: projectId: UUID, keywordId: UUID, columnId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
POST/projects/{projectId}/semantic-duplicates/previewПолучить группы дублей без измененийsemantics:read

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/semantic-duplicates/applyПрименить выбранные решения по дублямsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/negative-keyword-presetsСписок наборов минус-словsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/negative-keyword-presetsСоздать набор минус-словsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/negative-keyword-presets/{presetId}Изменить набор минус-словsemantics:write

Формат запроса

Path: projectId: UUID, presetId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/negative-keyword-presets/{presetId}Удалить набор минус-словsemantics:write

Формат запроса

Path: projectId: UUID, presetId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
POST/projects/{projectId}/negative-keywords/previewПредпросмотр совпадений минус-словsemantics:read

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/negative-keywords/applyПрименить минус-слова к выборкеsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/semantic-saved-viewsПредставления таблицы семантикиsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/semantic-saved-viewsСоздать представлениеsemantics:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/semantic-saved-views/{viewId}Изменить представлениеsemantics:write

Формат запроса

Path: projectId: UUID, viewId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/semantic-saved-views/{viewId}Удалить представлениеsemantics:write

Формат запроса

Path: projectId: UUID, viewId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
GET/projects/{projectId}/semantic-versionsИстория версий семантикиsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/semantic-versions/{versionId}Детали версии семантикиsemantics:read

Формат запроса

Path: projectId: UUID, versionId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/semantic-versions/{versionId}/undo-previewПредпросмотр отката версииsemantics:read

Формат запроса

Path: projectId: UUID, versionId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/semantic-versions/{versionId}/undoОткатить версию семантикиsemantics:write

Формат запроса

Path: projectId: UUID, versionId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.

Страницы и заметки

Страницы, Markdown-примечания, папки и цветовая легенда проекта.

Инструкция →
GET/projects/{projectId}/pagesСтраницы проектаpages:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/pagesСоздать страницуpages:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/notesЗаметки проекта с полным Markdownnotes:read

Формат запроса

Path: projectId (UUID). Тело и query отсутствуют.

Формат ответа

200 · data: { notes: ProjectNote[] }; ProjectNote содержит id, title, markdown, visibility, version, createdAt и updatedAt.
POST/projects/{projectId}/notesСоздать заметкуnotes:write

Формат запроса

JSON: { title: string, markdown: string, visibility: PROJECT_MEMBERS | PUBLIC }.

Формат ответа

201 · data: ProjectNote; заголовок ETag содержит актуальную version.
GET/projects/{projectId}/semantic-group-color-legendПримечания к цветам папокsemantics:read

Формат запроса

Path: projectId (UUID). Тело и query отсутствуют.

Формат ответа

200 · data: { entries: [{ color, note }], version, unread, updatedAt?, updatedByUserId?, access: { canManage } }.
PATCH/projects/{projectId}/semantic-group-color-legendЗаменить примечания цветовой легендыsemantics:write

Формат запроса

Headers: If-Match. JSON: { entries: [{ color: paletteColor, note: string(1..240) }] }.

Формат ответа

200 · data: SemanticGroupColorLegend; ETag содержит новую version.
POST/projects/{projectId}/semantic-group-color-legend/seenОтметить текущую версию цветовой легенды просмотреннойsemantics:read

Формат запроса

JSON: { version: non-negative integer }.

Формат ответа

200 · data: SemanticGroupColorLegend с unread=false для текущего пользователя.
GET/projects/{projectId}/pages/{pageId}Получить страницу проектаpages:read

Формат запроса

Path: projectId: UUID, pageId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/pages/{pageId}Изменить страницу проектаpages:write

Формат запроса

Path: projectId: UUID, pageId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/pages/{pageId}/archiveАрхивировать страницуpages:write

Формат запроса

Path: projectId: UUID, pageId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/pages/{pageId}/restoreВосстановить страницуpages:write

Формат запроса

Path: projectId: UUID, pageId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/notes/{noteId}Получить полную Markdown-заметкуnotes:read

Формат запроса

Path: projectId, noteId (UUID). Тело и query отсутствуют.

Формат ответа

200 · data: ProjectNote; ETag содержит version для последующего PATCH или DELETE.
PATCH/projects/{projectId}/notes/{noteId}Изменить заметкуnotes:write

Формат запроса

Headers: If-Match. JSON: любое непустое подмножество { title, markdown, visibility }.

Формат ответа

200 · data: обновлённый ProjectNote; ETag содержит новую version.
DELETE/projects/{projectId}/notes/{noteId}Удалить заметкуnotes:write

Формат запроса

Headers: If-Match. Path: projectId, noteId (UUID). Тело отсутствует.

Формат ответа

204 No Content.

Позиции и конкуренты

Контекст, оценка, запуск позиций и сбор обычной выдачи.

Инструкция →
GET/projects/{projectId}/keywords/position-summaryТекущая средняя позиция и число запросов в Топ-3/5/10/30/50semantics:read

Формат запроса

Query: rankDimensionKey? — точный поисковик, город и устройство; includeUntracked? — учитывать неотслеживаемые запросы.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/keywords/position-historyДо 100 последних проектных срезов; includeUntracked=true включает активные неотслеживаемые запросыsemantics:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/tracking-contextsКонтексты съёма позицийpositions:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/tracking-contextsСоздать контекст съёмаpositions:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/tracking-contexts/{contextId}Изменить контекстpositions:run

Формат запроса

Path: projectId: UUID, contextId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/tracking-contexts/{contextId}/materializeПересчитать актуальные запросы сохранённого контекстаpositions:run

Формат запроса

Пустой JSON: {}. Сервер использует сохранённый scope и не принимает keyword IDs от клиента.

Формат ответа

200 · data: { contextId, assignedKeywordCount, addedKeywordCount, removedKeywordCount, unchangedKeywordCount, keywordSetHash, version, changedAt }.
PUT/projects/{projectId}/tracking-contexts/{contextId}/keywordsЗаменить точный набор ключей контекстаpositions:run

Формат запроса

Path: projectId: UUID, contextId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/rank-estimatesРассчитать неизменяемую оценку позиций или выдачи конкурентовpositions:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/rank-runsИстория запусков позиций и выдачи конкурентовpositions:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/rank-runsПодтвердить оценку и создать заданиеpositions:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/jobs/{jobId}Текущее состояние заданияpositions:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/jobs/{jobId}/resultПостраничный результат позицийpositions:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/jobs/{jobId}/cancelЗапросить отмену заданияpositions:run

Формат запроса

Path: projectId: UUID, jobId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/jobs/{jobId}/runtime-diagnosticsБезопасная диагностика активного съёмаpositions:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/jobs/{jobId}/retry-missingПовторить только отсутствующие результатыpositions:run

Формат запроса

Path: projectId: UUID, jobId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/rank-historyИстория позиций и сохранённой SERP конкретного ключаpositions:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/rank-workbench/dimension-mergesНастройки объединения импортированных срезовpositions:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/rank-workbench/dimension-mergesОбъединить совместимые срезы в представленииpositions:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/rank-workbench/dimension-merges/{mergeId}/removeУдалить правило объединения срезовpositions:run

Формат запроса

Path: projectId: UUID, mergeId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/rank-workbench/positionsМатрица позиций, URL, частотности и ИИ-позицийpositions:read

Формат запроса

JSON: { mode?: SEO|AI, dimensionKey, observedFrom, observedBefore, dateLimit: 2..31, groupIds?, search?, limit: 50|100|200, cursor?, sort }. Без mode используется SEO.

Формат ответа

200 · data: { dimension, dates, summary, trend, rows, page }; dates, summary, trend и cells с position/rankingUrl относятся только к выбранному mode.
POST/projects/{projectId}/rank-workbench/serpСравнить обычную и ИИ-выдачу до пяти срезовpositions:read

Формат запроса

JSON: { dimensionKeys: string[1..5], groupIds?, search?, limit: 50|100|200, cursor? }.

Формат ответа

200 · data: { dimensions, rows, page }; каждая строка содержит snapshots и aiSnapshots с position, URL, title, snippet и faviconUrl. Обычный snapshot имеет canonical provider ARSENKIN | XMLSTOCK | KEY_COLLECTOR.
POST/projects/{projectId}/rank-workbench/delete-dimension-historyИсключить старую историю выбранного срезаpositions:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/keyword-ranks/dimensionsКаталог поисковиков, городов и устройствpositions:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

200 · data: { dimensions, aiDimensions?, truncated }; dimensions содержит SEO-срезы, aiDimensions — срезы с сохранёнными ИИ-позициями.
POST/projects/{projectId}/keyword-ranks/comparisonСравнить позиции ключей по нескольким срезамpositions:read

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/tracking-contexts/{contextId}Получить контекст съёмаpositions:read

Формат запроса

Path: projectId: UUID, contextId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/tracking-contexts/{contextId}/archiveАрхивировать контекстpositions:run

Формат запроса

Path: projectId: UUID, contextId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/tracking-contexts/{contextId}/restoreВосстановить контекстpositions:run

Формат запроса

Path: projectId: UUID, contextId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/tracking-contexts/{contextId}/keywordsПолучить ключи контекстаpositions:read

Формат запроса

Path: projectId: UUID, contextId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PUT/projects/{projectId}/tracking-contexts/{contextId}/keywords/{keywordId}Добавить или обновить ключ в контекстеpositions:run

Формат запроса

Path: projectId: UUID, contextId: UUID, keywordId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/tracking-contexts/{contextId}/keywords/{keywordId}Удалить ключ из контекстаpositions:run

Формат запроса

Path: projectId: UUID, contextId: UUID, keywordId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.

ИИ-ответы и ИИ-выдача

Сбор ответов, источников и конкурентов в ИИ-выдаче Arsenkin.

Инструкция →
GET/projects/{projectId}/ai-answer-collectionsИстория съёмов ответов и выдачи ИИai:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/ai-answer-collectionsСоздать съём ответов или конкурентов ИИai:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/ai-answer-collections/{jobId}Состояние съёма ИИai:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/ai-answer-collections/{jobId}/resultПостраничный результат съёма ИИai:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/ai-answer-collections/{jobId}/cancelОтменить съём ИИai:run

Формат запроса

Path: projectId: UUID, jobId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.

Частотность

Запуск Wordstat, состояние и постраничный результат.

Инструкция →
GET/projects/{projectId}/frequency-collectionsИстория съёмов частотностиfrequency:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/frequency-collectionsСоздать съём частотностиfrequency:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/frequency-collections/{jobId}Состояние съёма частотностиfrequency:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/frequency-collections/{jobId}/resultПостраничный результат частотностиfrequency:read

Формат запроса

Path: projectId: UUID, jobId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/frequency-collections/{jobId}/cancelОтменить съём частотностиfrequency:run

Формат запроса

Path: projectId: UUID, jobId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/frequency-collections/{jobId}/retry-failedПовторить только неуспешные элементыfrequency:run

Формат запроса

Path: projectId: UUID, jobId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.

Подбор ключей

Расширение Wordstat, строки результата и импорт выбранных фраз.

Инструкция →
GET/projects/{projectId}/keyword-research-runsИстория подбора ключейresearch:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/keyword-research-runsСоздать подбор ключейresearch:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/keyword-research-runs/{runId}Состояние подбора ключейresearch:read

Формат запроса

Path: projectId: UUID, runId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/keyword-research-runs/{runId}/rowsСтроки подбора с курсоромresearch:read

Формат запроса

Path: projectId: UUID, runId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/keyword-research-runs/{runId}/confirmПодтвердить выбранные строки и импортresearch:run

Формат запроса

Path: projectId: UUID, runId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/keyword-research-runs/{runId}/cancelОтменить подбор ключейresearch:run

Формат запроса

Path: projectId: UUID, runId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/keyword-research-runs/{runId}/retry-importПовторить импорт готового результатаresearch:run

Формат запроса

Path: projectId: UUID, runId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.

Технический аудит

Запуски обхода, проблемы, изменения, дубли и отсутствующие страницы.

Инструкция →
GET/projects/{projectId}/crawlsИстория технических аудитовaudits:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/crawlsЗапустить технический аудитaudits:run

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/crawl-issuesАгрегированные проблемы технического аудитаaudits:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/crawl-changesИзменения между обходамиaudits:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/crawls/{crawlId}/duplicate-groupsГруппы дублей конкретного обходаaudits:read

Формат запроса

Path: projectId: UUID, crawlId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/crawls/{crawlId}/absent-pagesСтраницы карты, отсутствующие в обходеaudits:read

Формат запроса

Path: projectId: UUID, crawlId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/crawls/{crawlId}Состояние обходаaudits:read

Формат запроса

Path: projectId: UUID, crawlId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/crawls/{crawlId}/resultПостраничный результат обходаaudits:read

Формат запроса

Path: projectId: UUID, crawlId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/crawls/{crawlId}/cancelОтменить технический аудитaudits:run

Формат запроса

Path: projectId: UUID, crawlId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.

Расписания

Регулярные и отложенные запуски позиций.

Инструкция →
GET/projects/{projectId}/automationsСписок расписаний позицийautomations:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/automationsСоздать расписаниеautomations:manage

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/automations/{automationId}Изменить расписаниеautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/automations/{automationId}/runsИстория запусков расписанияautomations:read

Формат запроса

Path: projectId: UUID, automationId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/automations/{automationId}/runsЗапустить расписание сейчасautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/automations/{automationId}/pauseПоставить расписание на паузуautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/automations/{automationId}/resumeВозобновить расписаниеautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/projects/{projectId}/automations/{automationId}Удалить расписаниеautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
GET/projects/{projectId}/crawl-automationsРасписания аудитовautomations:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/crawl-automationsСоздать расписание аудитаautomations:manage

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/crawl-automations/{automationId}/runsИстория запусков расписания аудитаautomations:read

Формат запроса

Path: projectId: UUID, automationId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/crawl-automations/{automationId}Изменить расписание аудитаautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/crawl-automations/{automationId}/pauseПоставить аудит на паузуautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/crawl-automations/{automationId}/resumeВозобновить аудитautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/crawl-automations/{automationId}/runsЗапустить аудит по расписанию сейчасautomations:manage

Формат запроса

Path: projectId: UUID, automationId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.

Интеграции

Безопасные метаданные подключений и маршруты провайдеров.

Инструкция →
GET/projects/{projectId}/integration-settingsМаршрутизация интеграций проектаintegrations:read

Формат запроса

Path: projectId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/projects/{projectId}/integration-settings/{bindingId}Изменить привязку интеграцииintegrations:write

Формат запроса

Path: projectId: UUID, bindingId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/workspaces/{workspaceId}/integrations/catalogКаталог провайдеров и возможностейintegrations:read

Формат запроса

Path: workspaceId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/workspaces/{workspaceId}/integrations/credentialsБезопасные метаданные подключений без секретовintegrations:read

Формат запроса

Path: workspaceId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/workspaces/{workspaceId}/integrations/routingМаршруты провайдеров рабочей областиintegrations:read

Формат запроса

Path: workspaceId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PUT/workspaces/{workspaceId}/integrations/routing/{capability}Заменить маршрут выбранной возможностиintegrations:write

Формат запроса

Path: workspaceId: UUID, capability: string. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/workspaces/{workspaceId}/integrations/credentialsДобавить BYOK credentialintegrations:write

Формат запроса

Path: workspaceId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/workspaces/{workspaceId}/integrations/platform-credentialsПодключить системный credentialintegrations:write

Формат запроса

Path: workspaceId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
PATCH/workspaces/{workspaceId}/integrations/credentials/{credentialId}Переименовать или заменить credentialintegrations:write

Формат запроса

Path: workspaceId: UUID, credentialId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/workspaces/{workspaceId}/integrations/credentials/{credentialId}/validationsЗапустить безопасную проверку credentialintegrations:write

Формат запроса

Path: workspaceId: UUID, credentialId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/workspaces/{workspaceId}/integrations/credentials/{credentialId}/validations/{validationId}Получить состояние проверки credentialintegrations:read

Формат запроса

Path: workspaceId: UUID, credentialId: UUID, validationId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
DELETE/workspaces/{workspaceId}/integrations/credentials/{credentialId}Отозвать credential и стереть его secret materialintegrations:write

Формат запроса

Path: workspaceId: UUID, credentialId: UUID. JSON body отсутствует, если для метода явно не указано обратное.

Формат ответа

204 No Content либо JSON { data, meta: { requestId } }, если команда возвращает ресурс.
POST/projects/{projectId}/integration-settingsСоздать project override маршрутаintegrations:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/integration-settings/prepare-systemПодготовить доступные системные маршрутыintegrations:write

Формат запроса

Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
POST/projects/{projectId}/integration-settings/{bindingId}/inheritВернуть маршрут к настройкам workspaceintegrations:write

Формат запроса

Path: projectId: UUID, bindingId: UUID. Content-Type: application/json; неизвестные поля отклоняются.

Формат ответа

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.

Задания и пагинация

Жизненный цикл, polling, курсоры, отмена и повторы.

Инструкция →
DELETE/projects/{projectId}/operations/{operationId}Убрать завершившуюся с ошибкой или истёкшую операцию из пользовательского журналаprojects:write

Формат запроса

Path: projectId, operationId (UUID). Тело отсутствует. Допустимы только terminal statuses FAILED_FINAL, ACTION_REQUIRED и EXPIRED.

Формат ответа

200 · data: { operationId, dismissedAt }. Результаты, биллинг и audit history не удаляются.
POST/projects/{projectId}/operation-estimatesРассчитать стоимость платной операции по её kindfrequency:run | ai:run | semantics:write | research:run

Формат запроса

Headers: Idempotency-Key. JSON: { kind: FREQUENCY_COLLECTION | AI_ANSWER_COLLECTION | CLUSTERING_RUN | KEYWORD_RESEARCH, command: <тело соответствующего запуска> }.

Формат ответа

200 · data: { workspaceId, projectId, id, kind, provider, credentialMode, currency, maximumChargeMinor, quantity, affordable, expiresAt, priceBookVersion }; для PLATFORM_PAID передайте id в X-Operation-Estimate-Id при запуске.