Справочник по API
Подключение агентов и справочник по SQL API для программного доступа к финансовым данным.
Обзор
Expense Budget Tracker предоставляет один публичный API для программного доступа:
https://api.expense-budget-tracker.com/v1/
С этим API можно работать двумя способами:
- Через нативное подключение агента, начиная с
GET /v1/ - Через прямые HTTP-запросы с уже существующим долгоживущим
ApiKey
Для всех запросов применяется тот же механизм Postgres Row Level Security, что и в веб-приложении.
Если ваш клиент поддерживает MCP, используйте размещенный MCP-коннектор по адресу https://mcp.expense-budget-tracker.com/mcp и авторизуйте его через OAuth в браузере. Эта страница описывает отдельное подключение через Agent API и прямой HTTP-контракт с долгоживущим ApiKey.
Точка входа, исходный код и runtime-схема
Начинайте здесь:
https://api.expense-budget-tracker.com/v1/
Ответ этой точки входа подсказывает агенту, как начать аутентификацию и какие вызовы выполнять дальше. Он также содержит ссылки на README и исходный код реализации. API предоставляет:
GET /v1/schemaGET /v1/openapi.jsonиGET /v1/swagger.jsonкак адреса совместимости, которые сообщают, что OpenAPI недоступен, и направляют клиента к discovery и исходному коду
Используйте schema, если вам нужен точный список разрешенных таблиц, представлений и столбцов, доступных через /v1/sql/query, /v1/sql/execute и совместимый маршрут /v1/sql.
Нативное подключение агента
Если вы хотите, чтобы Claude Code, Codex, OpenClaw или другой агент подключился самостоятельно, начните с GET /v1/ и следуйте инструкциям, которые вернет сервер.
Поток аутентификации
GET https://api.expense-budget-tracker.com/v1/- Прочитайте действие
send_codeи значениеbootstrapUrl, которые вернет сервер - Отправьте
POSTс адресом электронной почты пользователя наhttps://auth.expense-budget-tracker.com/api/agent/send-code - Получите
otpSessionToken - Запросите у пользователя 8-значный код из письма
- Отправьте
POSTсcode,otpSessionTokenиlabelнаhttps://auth.expense-budget-tracker.com/api/agent/verify-code - Получите долгоживущий
ApiKey - Сохраните этот ключ вне чата, в отдельном хранилище
GET https://api.expense-budget-tracker.com/v1/meGET https://api.expense-budget-tracker.com/v1/workspaces- При необходимости создайте рабочее пространство через
POST https://api.expense-budget-tracker.com/v1/workspaces POST https://api.expense-budget-tracker.com/v1/workspaces/{workspaceId}/selectGET https://api.expense-budget-tracker.com/v1/schema- Читайте данные через
POST https://api.expense-budget-tracker.com/v1/sql/query, а одобренные изменения отправляйте черезPOST https://api.expense-budget-tracker.com/v1/sql/execute
Заголовок аутентификации
Authorization: ApiKey <key>
Работа с рабочими пространствами
POST /v1/workspaces/{workspaceId}/selectсохраняет рабочее пространство по умолчанию для этого API-ключа- после этого в запросах к
/v1/sql/query,/v1/sql/executeи совместимому/v1/sqlможно не передаватьX-Workspace-Id X-Workspace-Id: <workspaceId>по-прежнему поддерживается, если нужно переопределить сохраненное рабочее пространство для одного запроса- если у пользователя ровно одно рабочее пространство и для ключа еще не сохранен выбор, API автоматически сохранит и будет использовать именно его
Пошаговое руководство для человека см. в разделе Настройка ИИ-агента.
Прямое использование HTTP с существующим ключом
Скрипты, cron-задачи, дашборды и собственные приложения могут напрямую обращаться к тому же API, если у них уже есть долгоживущий ApiKey.
Аутентификация
Передавайте ключ в заголовке авторизации ApiKey:
curl -X POST https://api.expense-budget-tracker.com/v1/sql/query \
-H "Authorization: ApiKey ebta_your_key_here" \
-H "X-Workspace-Id: workspace-id" \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT * FROM ledger_entries ORDER BY ts DESC LIMIT 10"}'
X-Workspace-Id нужен только в двух случаях: если для ключа еще не сохранено рабочее пространство по умолчанию или если вы хотите переопределить уже сохраненное рабочее пространство для этого запроса.
Authorization: ApiKey ebta_your_key_hereX-Workspace-Id: <workspaceId>при необходимости
Краткая сводка по эндпоинтам
GET /v1/— публичный документ для обнаружения APIGET /v1/openapi.jsonиGET /v1/swagger.json— адреса совместимости для discovery исходного кода, а не спецификации APIGET /v1/me— сведения о текущей аутентифицированной учетной записиGET /v1/workspaces— список рабочих пространств, доступных владельцу ключаPOST /v1/workspaces— создание рабочего пространстваPOST /v1/workspaces/{workspaceId}/select— сохранение рабочего пространства по умолчанию для этого ключаGET /v1/schema— просмотр доступных для SQL таблиц, представлений и столбцовPOST /v1/sql/query— выполнение одного запросаSELECTилиWITH ... SELECTтолько для чтенияPOST /v1/sql/execute— выполнение одного одобренного запросаINSERT,UPDATEилиDELETEPOST /v1/sql— совместимый маршрут для атомарных скриптов из нескольких выражений
Политика SQL
Основные маршруты намеренно разделяют чтение и запись:
POST /v1/sql/queryпринимает ровно один запрос только для чтения:SELECTилиWITH ... SELECTPOST /v1/sql/executeпринимает ровно одно изменениеINSERT,UPDATEилиDELETE, включая поддерживаемые формы сWITH- совместимый
POST /v1/sqlпринимает ограниченные скрипты из нескольких выражений и применяет их атомарно; используйте его только тогда, когда нужна такая атомарность
Блокируются или отклоняются:
- несколько SQL-запросов на основных маршрутах
/v1/sql/queryи/v1/sql/execute - DDL-команды, такие как
CREATE,DROPиALTER - транзакционные обертки, такие как
BEGIN,COMMITиROLLBACK set_config()- SQL-комментарии
- идентификаторы в кавычках
- строки с синтаксисом dollar-quoting
Сервер также ограничивает перечень объектов базы данных, к которым разрешен доступ. Перед генерацией SQL используйте /v1/schema, чтобы посмотреть доступные таблицы, представления и столбцы.
Сейчас доступны следующие объекты базы данных:
ledger_entriesbudget_linesworkspace_settingsaccount_metadataaccounts(только чтение)fx_rates_raw(только чтение)fx_rates_daily(только чтение)
Ограничения
- не более 100 возвращаемых строк на запрос
- не более 100 затронутых строк на выражение изменения и на запрос
- общий лимит времени SQL-запроса: 25 секунд
- 10 запросов в секунду и 10 000 запросов в день на один ключ
Безопасность
- API-ключи хранятся в виде SHA-256-хэшей, открытый текст никогда не сохраняется
- RLS обеспечивает изоляцию рабочих пространств на уровне базы данных
- ключи можно отозвать в любой момент прямо в продукте
- при удалении участника рабочего пространства все его ключи автоматически отзываются