REST API для управления карточками, заметками и категориями из любого приложения
Все запросы к /api/v1/* требуют API-ключ. Получить его можно в личном кабинете → раздел «API ключи».
Ключ передаётся в заголовке Authorization:
Authorization: Bearer npk_ваш_ключ_здесь
https://na-potom.ru/api/v1
Все запросы и ответы используют Content-Type: application/json.
При ошибке сервер возвращает JSON с полем detail:
{
"detail": "Card not found"
}
| Код | Причина |
|---|---|
| 401 | Ключ не передан, неверный или отозван |
| 404 | Ресурс не найден или не принадлежит вам |
| 422 | Ошибка валидации тела запроса |
| 429 | Превышен лимит заметок в очереди |
| 500 | Внутренняя ошибка сервера |
limit)Заметка — это сырой контент (текст, ссылка, идея), который AI обрабатывает и превращает в карточку. После отправки заметки нужно отдельно опросить статус.
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
content |
string | да | Текст, ссылка или произвольный контент. 1–50 000 символов. |
Ответ 202 Accepted
{
"task_id": 42,
"status": "queued",
"queue_position": 1
}
После получения task_id отследите результат через GET /api/v1/notes/{task_id}/status.
Path параметры
| Параметр | Тип | Описание |
|---|---|---|
task_id | integer | ID задачи из ответа POST /notes |
Ответ 200 OK
{
"id": 42,
"status": "done",
"queue_position": 0,
"result_card_id": 17,
"pipeline_stage": "done",
"moderation_failed": false,
"moderation_reason": "",
"result_action": "created_new",
"result_message": "Создана новая карточка «FastAPI»."
}
Возможные значения status
| Значение | Описание |
|---|---|
queued | Ожидает обработки |
processing | Обрабатывается прямо сейчас |
done | Карточка создана, result_card_id содержит ID |
failed | Ошибка обработки |
moderation_failed | Контент не прошёл модерацию |
Карточка — результат обработки заметки: заголовок, AI-описание, категория, теги, ссылка.
Query параметры
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
limit | integer | 20 | Кол-во результатов (макс. 100) |
offset | integer | 0 | Смещение для пагинации |
q | string | — | Поисковый запрос |
category_slug | string | — | Slug категории (например development-backend) |
tags | string | — | Теги через запятую: ai,python |
Ответ 200 OK — массив карточек:
[
{
"id": 17,
"title": "FastAPI",
"summary": "Современный высокопроизводительный веб-фреймворк...",
"url": "https://github.com/fastapi/fastapi",
"original_content": "https://github.com/fastapi/fastapi",
"is_public": true,
"created_at": "2026-04-17T05:14:07.746956",
"updated_at": "2026-04-17T05:14:07.746962",
"category_name": "Разработка / Backend",
"category_slug": "development-backend",
"category_color": "#10b981",
"tags": ["developer-tools", "open-source"]
}
]
Возвращает карточку с дополнительным полем user_id. Чужие карточки возвращают 404.
Ответ 200 OK — объект карточки (см. выше).
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
is_public | boolean | true — показать в публичном каталоге, false — скрыть |
Ответ 200 OK
{ "card_id": 17, "is_public": true }
Soft-delete: карточка помечается как удалённая и пропадает из всех списков. Операция необратима через API.
Ответ 200 OK
{ "card_id": 17, "deleted": true }
Ответ 200 OK
[
{
"id": 3,
"name": "Разработка / Backend",
"slug": "development-backend",
"color": "#10b981",
"card_count": 12
}
]
Ответ 200 OK
[
{ "name": "python", "count": 8 },
{ "name": "developer-tools","count": 5 },
{ "name": "open-source", "count": 3 }
]
Ответ 200 OK
{
"total_cards": 42,
"public_cards": 18,
"private_cards": 24,
"categories_count": 7
}
Замените npk_ваш_ключ на свой API-ключ из личного кабинета.
Добавить ссылку в каталог
curl -X POST https://na-potom.ru/api/v1/notes \
-H "Authorization: Bearer npk_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{"content": "https://example.com/article"}'
Проверить статус задачи
curl https://na-potom.ru/api/v1/notes/42/status \
-H "Authorization: Bearer npk_ваш_ключ"
Получить список карточек с фильтром
curl "https://na-potom.ru/api/v1/cards?limit=10&tags=python,ai" \
-H "Authorization: Bearer npk_ваш_ключ"
Опубликовать карточку
curl -X PATCH https://na-potom.ru/api/v1/cards/17/visibility \
-H "Authorization: Bearer npk_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{"is_public": true}'
import requests
import time
API_KEY = "npk_ваш_ключ"
BASE = "https://na-potom.ru/api/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def add_note(content: str) -> int:
"""Добавить заметку и вернуть ID карточки после обработки."""
resp = requests.post(f"{BASE}/notes",
json={"content": content},
headers=HEADERS)
resp.raise_for_status()
task_id = resp.json()["task_id"]
# Ждём пока AI обработает
for _ in range(30):
time.sleep(5)
status = requests.get(f"{BASE}/notes/{task_id}/status",
headers=HEADERS).json()
if status["status"] == "done":
return status["result_card_id"]
if status["status"] in ("failed", "moderation_failed"):
raise RuntimeError(status.get("result_message"))
raise TimeoutError("Обработка заняла слишком много времени")
card_id = add_note("https://github.com/fastapi/fastapi")
print(f"Карточка создана: {card_id}")
# Получить список всех карточек
cards = requests.get(f"{BASE}/cards", headers=HEADERS).json()
for c in cards:
print(c["title"], c["category_name"])
Создайте шорткат «Поделиться в NaPotom» для добавления ссылок прямо из браузера:
https://na-potom.ru/api/v1/notesPOSTAuthorization: Bearer npk_ваш_ключ{"content": "[URL из шага 1]"}После этого на любой странице Safari нажмите «Поделиться» → найдите ваш шорткат — ссылка уйдёт в обработку.