Маршруты 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/searchНайти ключи по большому списку фраз без query-stringsemantics:read
Формат запроса
Path: projectId: UUID. Content-Type: application/json; неизвестные поля отклоняются.Формат ответа
JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.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 при запуске.