Документация Открыть приложение

API-доступ: удалённая запись заметок

Внешнее приложение может складывать заметки в ваш блокнот автоматически — по секретному ключу, без логина и пароля. Удобно для ботов, скриптов, форм и любых интеграций, которые должны «оставить запись».

Что это и зачем

Вы выдаёте приложению API-ключ — длинную секретную строку. Приложение прикладывает её к каждому запросу, а leavemessage создаёт заметку в привязанном к ключу блокноте. Например:

Как получить ключ

  1. Откройте настройки нужного блокнота (карандаш у блокнота).
  2. Раздел «API-доступ» → «Управление ключами».
  3. Введите название, отметьте блокноты, к которым ключ имеет доступ (один или несколько), и — по желанию — «только чтение». Нажмите «Создать ключ».
  4. Ключ вида lm_live_… покажется один раз — скопируйте его сразу.
API-доступ — Входящее lm_live_d17bf709644309fda8c8… Копировать КЛЮЧИ Мой бот ещё не использован Отчёты использован вчера POST /api/v1/notes
Ключ показывается один раз; ниже — список ключей блокнота.

Ключ — это как пароль: он даёт право писать в блокнот. Держите его в секрете, передавайте только по защищённому соединению и не публикуйте в открытых репозиториях. Потеряли или скомпрометировали — просто отзовите ключ в том же окне и создайте новый.

Куда пишет ключ и что ему можно

Ключ работает со своим списком блокнотов — одним или несколькими. Какой блокнот трогать в запросе, задаёт параметр notebook (при одном блокноте он подставляется сам). Если ключ утечёт, под угрозой только его блокноты, а не весь аккаунт.

У ключа есть скоуп: write (по умолчанию — создавать, менять, удалять) или readтолько чтение: запросы на запись такой ключ отклоняет (403 api.read_only). Read-only ключом безопаснее делиться, если приложению нужно лишь читать.

Только незашифрованные блокноты

Выдать ключ можно лишь для обычного блокнота. Для зашифрованного — нельзя: сервер не хранит ключей шифрования и физически не может зашифровать присланный текст.

Если вы включите шифрование у блокнота, для которого уже были выданы API-ключи, они автоматически отзовутся — приложения с ними перестанут писать. Это защищает границу шифрования.

Справочник (для разработчиков)

Все запросы — с заголовком Authorization: Bearer lm_live_…, тело и ответы — JSON в кодировке UTF-8. Эндпоинты:

Метод и путьЧто делает
POST /api/v1/notesСоздать / обновить заметку (см. mode ниже)
POST /api/v1/notes/batchНесколько заметок за раз (всё-или-ничего, до 50)
GET /api/v1/notesСписок заметок блокнота (?notebook=, ?limit=, ?external_id=)
GET /api/v1/notes/{id}Одна заметка целиком
PATCH / PUT /api/v1/notes/{id}Обновить title/body по id
DELETE /api/v1/notes/{id}Убрать заметку в корзину
GET /api/v1/notebookПроверить ключ, узнать блокнот(ы)
GET /api/v1/notebooksСписок блокнотов ключа (с числом заметок и объёмом)
GET · POST /api/v1/notes/{id}/versions…История версий и откат (защита от затирания)

Обновление без дублей: external_id + mode

Чтобы повторный экспорт обновлял ту же заметку, а не плодил копии, пришлите свой стабильный идентификатор external_id и режим upsert:

curl -X POST https://leavemessage.me/api/v1/notes \
  -H "Authorization: Bearer lm_live_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"external_id":"atlas:pushkin:macro","mode":"upsert","title":"Пушкин","body":"# Маршрут\n…"}'

Ответ (201 — создано, 200 — обновлено):

{
  "action": "created",
  "note": {
    "id": 128,
    "external_id": "atlas:pushkin:macro",
    "notebook": { "id": 42, "name": "Атлас — макро" },
    "title": "Пушкин",
    "body": "# Маршрут…",
    "url": "https://leavemessage.me/note/128",
    "is_sealed": false,
    "created_at": "2026-07-30T14:01:34Z",
    "updated_at": "2026-07-30T14:01:34Z"
  }
}

url — прямая ссылка на заметку (можно сразу дать редактору «открыть»). action: created / updated / appended / replayed.

Полезные мелочи

Ошибка приходит с HTTP-статусом ≥ 400 и телом {"error":{"code":"…","meta":{…}}} — поля message нет, code машинный (текст для пользователя составьте по нему):

HTTPcodeЧто значит / что делать
401api.unauthorizedНет/битый/неизвестный/отозванный ключ — проверьте ключ
403api.notebook_encryptedБлокнот зашифровали — убран из ключа; выберите незашифрованный
403api.read_onlyКлюч «только чтение», а запрос на запись — нужен write-ключ
403api.notebook_not_allowednotebook не входит в список ключа
410api.notebook_goneБлокнот удалён — прекратите слать
404api.note_not_foundНет заметки с таким id в блокнотах ключа
404api.version_not_foundНет версии с таким vid у заметки
409api.external_id_existsmode=create, а external_id занят — используйте upsert
409api.conflictbase_version устарел — заметку изменили; в ответе актуальное состояние
422api.note_empty / invalid_mode / notebook_required / external_id_required / invalid_external_id / title_too_longОшибка в запросе — см. описание кода
422api.batch_empty / batch_too_large / batch_failed / invalid_itemПроблема с /notes/batch; при batch_failed не применено ничего (детали в results)
413api.body_too_largeТело больше 256 КБ
423note.sealedЗаметка запечатана как капсула — недоступна до раскрытия
429throttle.too_manyПревышен лимит — подождите (Retry-After)

Чего API пока не умеет