API удалённой бухгалтерии
Последнее обновление: 10 мая 2026 г.
Записывайте операции из cURL, Команд iOS или скриптов автоматизации с помощью персонального API-токена. Токен только для записи — может добавлять транзакции и читать списки категорий / тегов, но не может читать или удалять никакие данные транзакций.
1. Получить токен
Войдите как admin, откройте Настройки → 🔑 API удалённой бухгалтерии и нажмите «Создать токен».
Открытый токен показывается только один раз — сразу скопируйте его. Сервер хранит только SHA-256-хеш, поэтому потерянный токен можно заменить только ротацией (которая аннулирует старый).
Формат токена: bb_<userId>_<secret>. Отправляйте в каждом запросе как Authorization: Bearer <token>.
2. POST /api/ingest — вставить одну транзакцию
Тело запроса — JSON-объект со следующими полями:
title(string, обязательно) — имя транзакцииamount(number, обязательно) — должно быть положительнымtype(string, опционально, по умолчаниюexpense) — одно изexpense/income/prepaid_expense/pending_incomecategory(string, опционально) — имя категорииnote(string, опционально) — произвольная заметкаcreated_at(string, опционально) — ISO 8601; по умолчанию сейчас
curl -X POST https://billbook.me/api/ingest \
-H "Authorization: Bearer bb_<userId>_<secret>" \
-H "Content-Type: application/json" \
-d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'
# response: 201
{ "id": "...", "created_at": "..." }3. GET /api/ingest/categories — список категорий
Возвращает имена категорий админа в порядке выпадающего меню панели. В ответе только имена — без id, user id и данных транзакций.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — недавно использованные теги
Возвращает наиболее недавно обновлённые префиксы тегов (маркеры #XXX, встроенные в заголовки). По умолчанию 20; используйте ?limit=, чтобы изменить (макс. 100).
Возвращает пустой массив вместо ошибки, если таблица tag_prefixes ещё не существует.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. Коды ошибок
Все ошибки в формате JSON: { "error": "сообщение" }.
401— отсутствует авторизация, неверный формат токена, отозван или не совпадает402— подписка истекла; требуется продление для записи405— метод не поддерживается (например, GET к/api/ingest)501— на сервере отсутствуетSUPABASE_SERVICE_ROLE_KEY500— другая внутренняя ошибка
6. Безопасность и ограничения
По дизайну токен может писать только в свою организацию — не может выдавать себя за другие orgs или читать существующие данные:
user_idвсегда — владелец токена; подделать нельзяorg_idвсегда — org владельца; записи между orgs невозможны- Токены выдаются только роли admin (manager / staff получают 403)
- Ответы не утечкают других строк — возвращается только
{ id, created_at } - Отзыв немедленный; перевыпускайте в любое время из Настроек
7. Пример Команды iOS
Добавьте действие «Получить содержимое URL», URL https://billbook.me/api/ingest, метод POST, заголовки Authorization: Bearer bb_... и Content-Type: application/json, тело запроса JSON: {"title":"Кофе","amount":120,"type":"expense"}. Привяжите title и amount к вводу Команды или переменным «Спрашивать каждый раз».
Этот документ — быстрая справка; реальное поведение определяется кодом бэкенда.