Эндпоинты, параметры запросов и примеры использования API WebClipper.
WebClipper предоставляет REST API для работы с вырезками, папками, рецептами, списками покупок, группами и настройками кабинета. API возвращает JSON и поддерживает CORS, поэтому к нему можно обращаться напрямую из браузера, расширения или мобильного приложения.
Базовый адрес
https://webclipper.ru
Зеркало
https://клиппер.рф
Все эндпоинты, кроме перечисленных как открытые (health, register, login, download расширения), требуют аутентификации.
API принимает три способа передачи идентификации. Токен выдаётся в личном кабинете и живёт 7 дней.
Cookie-сессия
После входа через POST /api/auth/login браузер автоматически хранит сессионную cookie session.
Заголовок Authorization
Authorization: Bearer eyJ1c2VySWQiOiJleGFtcGxlIiw...Заголовок X-WebClipper-Token
Кастомный заголовок для расширений: Яндекс Браузер блокирует кросс-доменные запросы с Authorization (403), но пропускает кастомный заголовок. Расширение WebClipper использует именно этот способ.
X-WebClipper-Token: eyJ1c2VySWQiOiJleGFtcGxlIiw...Если токен отсутствует или истёк, API возвращает 401 {"error":"Не авторизован"}.
Полный список основных эндпоинтов. Все пути указываются относительно базового адреса; :id — это UUID объекта.
| Метод | Путь | Описание | Доступ |
|---|---|---|---|
| GET | /api/health | Проверка работоспособности сервиса | открытый |
| POST | /api/auth/register | Регистрация пользователя | открытый |
| POST | /api/auth/login | Вход в аккаунт | открытый |
| POST | /api/auth/logout | Выход из аккаунта | токен |
| GET | /api/auth/me | Текущий пользователь | токен |
| GET | /api/clippings | Список вырезок | токен |
| POST | /api/clippings | Создать вырезку | токен |
| PUT | /api/clippings/:id | Обновить вырезку | токен |
| PATCH | /api/clippings/:id | Переместить вырезку в папку | токен |
| DELETE | /api/clippings/:id | Удалить вырезку | токен |
| PATCH | /api/clippings/reorder | Изменить порядок вырезок | токен |
| POST | /api/clippings/:id/copy | Создать копию вырезки | токен |
| POST | /api/clippings/:id/link | Создать публичную ссылку | токен |
| DELETE | /api/clippings/:id/link?token= | Отменить публичную ссылку | токен |
| GET | /api/folders | Список папок | токен |
| POST | /api/folders | Создать папку | токен |
| PATCH | /api/folders/:id | Обновить папку | токен |
| DELETE | /api/folders/:id | Удалить папку | токен |
| GET | /api/settings | Настройки кабинета | токен |
| PUT | /api/settings | Сохранить настройки | токен |
| GET | /api/recipes | Список рецептов | токен |
| POST | /api/recipes | Создать рецепт | токен |
| GET | /api/recipes/:id | Полный рецепт | токен |
| PATCH | /api/recipes/:id | Обновить рецепт | токен |
| DELETE | /api/recipes/:id | Удалить рецепт | токен |
| GET | /api/shopping-lists | Список списков покупок | токен |
| POST | /api/shopping-lists | Создать список покупок | токен |
| DELETE | /api/shopping-lists/:id | Удалить список покупок | токен |
| POST | /api/shopping-list/:id/items | Добавить пункт | токен |
| PATCH | /api/shopping-list/:id/items/:itemId | Изменить пункт (цена, отметка) | токен |
| DELETE | /api/shopping-list/:id/items/:itemId | Удалить пункт | токен |
| PATCH | /api/shopping-list/:id | Завершить список (итоговая сумма) | токен |
| GET | /api/groups | Список групп | токен |
| POST | /api/groups | Создать группу | токен |
| GET | /api/groups/:id | Детали группы | токен |
| PUT | /api/groups/:id | Обновить группу | токен |
| DELETE | /api/groups/:id | Удалить группу | токен |
| POST | /api/groups/:id/members | Добавить участника по email | токен |
| DELETE | /api/groups/:id/members?userId= | Удалить участника | токен |
| GET | /api/groups/:id/invite | Ссылка-приглашение | токен |
| POST | /api/groups/:id/invite | Обновить ссылку-приглашение | токен |
| POST | /api/groups/:id/shares | Поделиться материалом с группой | токен |
| GET | /api/profile | Профиль и достижения | токен |
| GET | /api/support | История обращений в поддержку | токен |
| POST | /api/support | Создать обращение в поддержку | токен |
| GET | /api/extension/download | Скачать установочный архив расширения | открытый |
| GET | /api/favicon?url= | Прокси-загрузка фавиконки сайта | открытый |
Сохраняет вырезку в кабинет пользователя. Это основной метод, который использует расширение браузера при захвате текста. При успехе возвращается 201 и созданная вырезка.
| Параметр | Тип / ограничения | Обязательный | Описание |
|---|---|---|---|
| title | string ≤300 | нет | Заголовок. Если пустой — берётся excerpt.slice(0,120) или «Вырезка». |
| excerpt | string ≤100 000 | нет | Текст вырезки (до 100 000 байт UTF-8), по умолчанию «». |
| html | string ≤300 000 | нет | HTML-версия с форматированием и картинками (до 300 000 байт). |
| source | string ≤300 | нет | URL или название источника, по умолчанию «». |
| tags | string[] | нет | До 30 тегов, каждый ≤50 символов (кириллица и эмодзи поддерживаются), по умолчанию []. |
| accent | enum | нет | violet | pink | indigo | teal | amber | rose | orange. По умолчанию violet. |
| date | string ≤20 | нет | Дата в формате YYYY-MM-DD, по умолчанию сегодня. |
| folderId | string ≤100 | null | нет | ID папки, в которую поместить вырезку. |
| encrypted | boolean | нет | Пометить вырезку как зашифрованную. |
| type | enum | нет | article (скопировано из интернета) | note (своя заметка). По умолчанию article. |
Поля id, userId, position и createdAt назначает сервер.
Возвращает массив вырезок текущего пользователя, отсортированный по позиции.
Частичное обновление. Обязателен только title (от 1 до 300 символов); остальные поля опциональны: excerpt, html, tags, accent, encrypted, type. Возвращает {"success":true}.
Перемещает вырезку в другую папку. Тело: {"folderId":"..."} или {"folderId":null}, чтобы убрать вырезку из папки. Ответ — 204.
Удаляет вырезку. Ответ — 204.
PATCH /api/clippings/reorder — порядок вырезок в папке. Тело: {"folderId":"...","order":["id1","id2",...]}.POST /api/clippings/:id/copy — копия вырезки (необязательно в папку folderId).POST /api/clippings/:id/link — создаёт публичную ссылку, возвращает {"url":"/share/...","token":"..."}.DELETE /api/clippings/:id/link?token=... — отменяет публичную ссылку.Создаёт папку для организации вырезок. Поддерживается вложенность до 3 уровней через parentId. При успехе возвращается 201 и созданная папка.
| Параметр | Тип / ограничения | Обязательный | Описание |
|---|---|---|---|
| name | string ≤100 | да | Название папки. |
| icon | enum | нет | book | star | heart | briefcase | laptop | camera | music | shopping | users | sparkles | utensils | clipboard-list. По умолчанию book. |
| cover | enum | нет | violet | pink | indigo | teal | amber | rose | sky | emerald. По умолчанию violet. |
| backgroundImage | string | URL | нет | Пустой, или абсолютный URL картинки-обложки (≤2048). |
| parentId | string ≤100 | null | нет | ID родительской папки для вложенности до 3 уровней. |
GET /api/folders — список папок пользователя.PATCH /api/folders/:id — обновление папки (поля те же, что при создании: name, icon, cover, backgroundImage, parentId).DELETE /api/folders/:id — удаление папки, ответ 204.Возвращает настройки кабинета текущего пользователя.
Обновляет настройки. Достаточно передать только изменяемые поля.
| Параметр | Тип / ограничения | Обязательный | Описание |
|---|---|---|---|
| theme | enum | нет | light | dark | system. |
| accent | enum | нет | violet | pink | indigo | teal | amber | rose | orange. |
| showTokenBlock | boolean | нет | Показывать блок токена в кабинете. |
| showRecipesFolder | boolean | нет | Показывать плитку «Рецепты» в быстром доступе. |
| showShoppingListFolder | boolean | нет | Показывать плитку «Список покупок» в быстром доступе. |
| showHelpBlock | boolean | нет | Показывать блок помощи в кабинете. |
| headerImage | string ≤2000 | нет | URL картинки шапки кабинета. |
| Код | Значение |
|---|---|
| 200 | Успешный запрос. |
| 201 | Объект создан. |
| 204 | Успех без тела ответа (удаление, перемещение). |
| 400 | Некорректные данные: в теле ответа error и details (flatten ошибок zod). |
| 401 | Не авторизован: токен отсутствует или истёк. |
| 403 | Нет прав (например, только владелец группы). |
| 404 | Объект не найден или принадлежит другому пользователю. |
| 413 | Достигнут лимит бесплатного хранилища 200 МБ. |
| 500 | Внутренняя ошибка сервера. |
| 503 | База данных временно недоступна. |
Формат ошибки: {"error":"...","details":{...}}.
curl -X POST "https://webclipper.ru/api/clippings" \
-H "Content-Type: application/json" \
-H "X-WebClipper-Token: ВАШ_ТОКЕН" \
-d '{
"title": "Пример статьи",
"excerpt": "Текст сохранённой вырезки",
"html": "<p>Текст с <b>форматированием</b></p>",
"source": "https://example.com/article",
"tags": ["интересное", "статья"],
"accent": "indigo",
"type": "article"
}'// Пример для браузера или Node.js
const res = await fetch("https://webclipper.ru/api/clippings", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer ВАШ_ТОКЕН", // или X-WebClipper-Token
},
body: JSON.stringify({
title: "Пример статьи",
excerpt: "Текст сохранённой вырезки",
source: "https://example.com/article",
}),
});
if (res.ok) {
const clipping = await res.json();
console.log("Сохранено, id:", clipping.id);
} else {
const err = await res.json();
console.error("Ошибка:", err.error, err.details);
}curl "https://webclipper.ru/api/folders" \
-H "X-WebClipper-Token: ВАШ_ТОКЕН"curl -X PATCH "https://webclipper.ru/api/clippings/9f1c3a42-2c11-4d9a-8b6e-1d34c99a2f70" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ВАШ_ТОКЕН" \
-d '{ "folderId": "7a2d0f11-9a51-4c32-a6e7-4d8b22f0c3e1" }'