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

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

Страницы, файлы заметок, папки и цветовая легенда проекта.

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Файлы заметок проекта с содержимымnotes:read

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

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

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

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

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

JSON: { title: string, markdown: string, visibility: PROJECT_MEMBERS | PUBLIC, format?: MARKDOWN | TEXT | CSV | TSV | JSON }. По умолчанию MARKDOWN.

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

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 для текущего пользователя.
POST/projects/{projectId}/pages/status-jobsФоновое архивирование или восстановление страницpages:write

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/pages/by-keyword/{keywordId}Целевая страница запроса; также нужен semantics:readpages:read

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

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

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

JSON { data: <типизированный результат>, meta: { requestId }, page?: { hasNext, nextCursor } }.
GET/projects/{projectId}/pages/{pageId}/panelСсылки, история или семантика страницы; для ключей нужен semantics:readpages: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}Получить файл заметки с содержимым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, format }.

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

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

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

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

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

204 No Content.