Ledgo API Получить токен

Ledgo API

Через REST API ваша программа, скрипт или AI-агент полностью управляет вашими данными в Ledgo: счета, категории, контакты, доходы и расходы, долги, регулярные платежи, мероприятия и отчёты.

Base URL https://ledgo.uz/api/v1 OpenAPI-схема ↗

Начало работы

  1. Откройте @ledgoapp → Настройки → «API и AI-агенты».
  2. Дайте токену название и нажмите «Создать». Сразу скопируйте токен — он показывается только один раз.
  3. Добавляйте к каждому запросу заголовок: Authorization: Bearer <token>.

Токены

Можно создать несколько токенов (у каждого своё название). В настройках токен можно временно выключить и снова включить или отозвать насовсем — запрос с отозванным или выключенным токеном вернёт 401. Токен открывает только /api/v1 и действует от вашего имени; никому его не передавайте.

Записи на подтверждение

Доходы и расходы, добавленные через API, по умолчанию ЖДУТ ПОДТВЕРЖДЕНИЯ (is_pending: true, source: "api") — как записи из уведомлений по карте. Вы подтверждаете их в списке на подтверждение в приложении или через POST /transactions/{id}/confirm. Пока запись ждёт, контакт не обязателен. Чтобы запись сразу была подтверждена, передайте "auto_confirm": true — тогда для дохода/расхода контакт (contact_id) обязателен.

Правила

Пример

curl https://ledgo.uz/api/v1/accounts \
  -H "Authorization: Bearer $LEDGO_TOKEN"

curl -X POST https://ledgo.uz/api/v1/transactions \
  -H "Authorization: Bearer $LEDGO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"expense","amount":45000,"account_id":12,"note":"Lunch"}'
# → 201 {"transaction": {"id": 345, "is_pending": true, "source": "api", ...}}

curl -X POST https://ledgo.uz/api/v1/transactions \
  -H "Authorization: Bearer $LEDGO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"expense","amount":45000,"account_id":12,"contact_id":3,"auto_confirm":true}'

Для AI-агента

Передайте агенту OpenAPI-схему — он сам прочитает все пути и поля. Записи агента ждут подтверждения, поэтому его ошибка не попадёт в баланс незаметно: вы проверяете и подтверждаете.

https://ledgo.uz/api/v1/openapi.json

Профиль и настройки

GET /api/v1/me Кто вы: профиль, часовой пояс и число записей, ждущих подтверждения.
Ответ

{"user": User (+ timezone), "pending_count": int}

PUT /api/v1/settings Меняет язык и основную валюту.
Параметры
НазваниеТипГде
locale string
uz | ru | en | auto
body Язык; auto — как в Telegram.
base_currency string
UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF
body Основная валюта.
Ответ

{"user": User}

Счета

GET /api/v1/accounts Список счетов с текущим остатком.
Ответ

{"accounts": Account[]}

POST /api/v1/accounts Добавляет счёт или карту.

Каждый счёт живёт в своей валюте, конвертации нет.

Параметры
НазваниеТипГде
name * string body Название (до 60 символов).
type * string
cash | card | bank
body Тип: наличные, карта или банк.
currency * string
UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF
body Валюта; после первой операции не меняется.
initial_balance number body Начальный остаток, до 2 знаков.
color string body Цвет.
icon string body Иконка.
bank_name string body Название банка.
last4 string body Последние 4 цифры карты (для SMS банка).
is_archived boolean body В архиве.
is_primary boolean body Основной счёт (только один).
Пример запроса
{
    "name": "Humo",
    "type": "card",
    "currency": "UZS",
    "initial_balance": 1250000.5,
    "bank_name": "Kapitalbank",
    "last4": "4821"
}
Ответ

{"account": Account}

PUT /api/v1/accounts/{account} Изменяет счёт.

name, type, currency отправляйте всегда; у счёта с операциями валюта молча не меняется.

Параметры
НазваниеТипГде
account * integer path ID счёта.
name * string body Название (до 60 символов).
type * string
cash | card | bank
body Тип: наличные, карта или банк.
currency * string
UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF
body Валюта; после первой операции не меняется.
initial_balance number body Начальный остаток, до 2 знаков.
color string body Цвет.
icon string body Иконка.
bank_name string body Название банка.
last4 string body Последние 4 цифры карты (для SMS банка).
is_archived boolean body В архиве.
is_primary boolean body Основной счёт (только один).
Пример запроса
{
    "name": "Humo",
    "type": "card",
    "currency": "UZS",
    "is_primary": true
}
Ответ

{"account": Account}

DELETE /api/v1/accounts/{account} Удаляет счёт (с операциями — 422, архивируйте его).
Параметры
НазваниеТипГде
account * integer path ID счёта.
Ответ

{"ok": true}

Категории

GET /api/v1/categories Список категорий.
Ответ

{"categories": Category[]}

POST /api/v1/categories Добавляет категорию.
Параметры
НазваниеТипГде
type * string
income | expense
body Доход или расход.
name * string body Название (до 40 символов).
icon string body Иконка.
color string body Цвет.
Ответ

{"category": Category}

PUT /api/v1/categories/{category} Изменяет категорию (тип не меняется).
Параметры
НазваниеТипГде
category * integer path ID категории.
name string body Название (до 40 символов).
icon string body Иконка.
color string body Цвет.
is_archived boolean body В архиве.
Ответ

{"category": Category}

DELETE /api/v1/categories/{category} Удаляет категорию; операции остаются без категории.
Параметры
НазваниеТипГде
category * integer path ID категории.
Ответ

{"ok": true}

Контакты

GET /api/v1/contacts Список контактов (системные «Я сам», «Хозяйство» — первыми).
Ответ

{"contacts": Contact[]}

POST /api/v1/contacts Добавляет контакт.

Контакт отвечает, для кого или кому операция.

Параметры
НазваниеТипГде
name * string body Имя (до 80 символов).
type string
person | organization
body Человек или организация.
phone string body Номер телефона.
note string body Заметка (до 500 символов).
is_dependent boolean body Находится на вашем иждивении (член семьи).
telegram_ids array<integer> body Привязываемые аккаунты Telegram (чужие — 409).
main_telegram_id integer body Основной аккаунт Telegram.
no_telegram boolean body Отметить, что Telegram нет.
Пример запроса
{
    "name": "Sardor",
    "type": "person",
    "phone": "+998901234567",
    "note": "Ishxonadan"
}
Ответ

{"contact": Contact}

GET /api/v1/contacts/{contact} Контакт: долги, последние 100 операций и сводка трат.
Параметры
НазваниеТипГде
contact * integer path ID контакта.
from date query Начало периода трат (по умолчанию — начало месяца).
to date query Конец периода трат (по умолчанию — конец месяца).
Ответ

{"contact": Contact, "net": [{currency, they_owe_me, i_owe, net}], "transactions": Transaction[], "debts": Debt[], "spend": {range, total, all_time, provided}}

PUT /api/v1/contacts/{contact} Изменяет контакт.

name отправляйте всегда; имя и тип системного контакта не меняются.

Параметры
НазваниеТипГде
contact * integer path ID контакта.
name * string body Имя (до 80 символов).
type string
person | organization
body Человек или организация.
phone string body Номер телефона.
note string body Заметка (до 500 символов).
is_dependent boolean body Находится на вашем иждивении (член семьи).
Пример запроса
{
    "name": "Sardor Karimov",
    "phone": "+998901234567",
    "is_dependent": false
}
Ответ

{"contact": Contact}

DELETE /api/v1/contacts/{contact} Удаляет контакт; операции остаются, связь снимается.
Параметры
НазваниеТипГде
contact * integer path ID контакта.
Ответ

{"ok": true}

POST /api/v1/contacts/{contact}/merge Объединяет контакт from с этим и удаляет его.
Параметры
НазваниеТипГде
contact * integer path ID остающегося контакта.
from * integer body ID контакта, который вливается и удаляется.
Ответ

{"contact": Contact, "removed": int}

Операции

GET /api/v1/transactions Операции, новые первыми, по 30 на страницу.
Параметры
НазваниеТипГде
type string
income | expense | transfer
query Тип.
account_id integer query Счёт (включая входящие переводы); в ответе также totals.
category_id integer query Категория.
activity_id integer query Событие.
contact_id integer query Контакт — как потребитель или поставщик.
from date query С этого дня (в вашем часовом поясе).
to date query По этот день (в вашем часовом поясе).
q string query Поиск по заметке.
page integer query Номер страницы.
pending_card boolean query Только ожидающие подтверждения (карта и API).
uncategorized_card boolean query Устаревший фильтр: операции по карте без категории.
Ответ

{"transactions": Transaction[], "current_page": int, "last_page": int, "total": int, "has_more": bool, "totals": {income, expense}|null}

POST /api/v1/transactions Записывает доход, расход или перевод.

С токеном разработчика запись создаётся с source: "api" и ждёт подтверждения (is_pending: true): подтвердите её в приложении или через confirm; пока она ждёт, контакт необязателен. Валюта берётся со счёта, сумма округляется до 2 знаков; для перевода между разными валютами укажите to_amount.

Параметры
НазваниеТипГде
type * string
income | expense | transfer
body Тип.
amount * number body Сумма в валюте счёта, до 2 знаков.
account_id * integer body Счёт; валюта всегда берётся из него.
note string body Заметка (до 500 символов).
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
category_id integer body Категория того же типа (для перевода игнорируется).
contact_ids array<integer> body Для кого (потребители), первый — основной; нужен для дохода/расхода.
contact_id integer body Один потребитель (вместо contact_ids).
provider_id integer body Кому заплачено / от кого (поставщик).
activity_ids array<integer> body События (несколько).
activity_id integer body Одно событие.
to_account_id integer body Счёт получателя при переводе (обязателен).
to_amount number body Зачисленная сумма при переводе (обязательна); при одной валюте приравнивается к amount.
auto_confirm boolean body true — запись сразу подтверждена (тогда для дохода/расхода нужен контакт).
Пример запроса
{
    "type": "expense",
    "amount": 45000,
    "account_id": 12,
    "category_id": 3,
    "contact_ids": [
        1
    ],
    "note": "Tushlik",
    "occurred_at": "2026-10-30T13:15:00+05:00"
}
Ответ

{"transaction": Transaction}

POST /api/v1/transactions/confirm Подтверждает ожидающие записи пакетом (без ids — все).
Параметры
НазваниеТипГде
ids array<integer> body Подтверждаемые записи (до 500).
contact_id integer body Ставится операциям без контакта; если такие есть — обязателен.
Ответ

{"confirmed": int, "pending_count": int}

PUT /api/v1/transactions/{transaction} Изменяет запись — меняются только отправленные поля (тип не меняется).

С токеном разработчика неотправленные поля сохраняют значение; чтобы очистить, отправьте null (для списка — []). Ожидающую API-запись можно менять и без контакта. Записи долгов и регулярных платежей здесь не меняются (422).

Параметры
НазваниеТипГде
transaction * integer path ID записи.
amount number body Сумма в валюте счёта, до 2 знаков.
account_id integer body Счёт; валюта всегда берётся из него.
note string body Заметка (до 500 символов).
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
category_id integer body Категория того же типа (для перевода игнорируется).
contact_ids array<integer> body Для кого (потребители), первый — основной; нужен для дохода/расхода.
contact_id integer body Один потребитель (вместо contact_ids).
provider_id integer body Кому заплачено / от кого (поставщик).
activity_ids array<integer> body События (несколько).
activity_id integer body Одно событие.
to_account_id integer body Счёт получателя при переводе (обязателен).
to_amount number body Зачисленная сумма при переводе (обязательна); при одной валюте приравнивается к amount.
Пример запроса
{
    "amount": 52000,
    "account_id": 12,
    "category_id": 3,
    "contact_ids": [
        1
    ],
    "note": "Tushlik, choy bilan",
    "occurred_at": "2026-10-30T13:15:00+05:00"
}
Ответ

{"transaction": Transaction}

DELETE /api/v1/transactions/{transaction} Удаляет запись (записи долгов и регулярных платежей — 422).
Параметры
НазваниеТипГде
transaction * integer path ID записи.
Ответ

{"ok": true}

POST /api/v1/transactions/{transaction}/confirm Подтверждает запись карты или API, при необходимости с категорией и контактом.

Доход/расход без контакта не подтверждается (422); сумма, счёт и дата не меняются.

Параметры
НазваниеТипГде
transaction * integer path ID записи (только карта или API).
category_id integer body Категория (null — убрать).
contact_ids array<integer> body Для кого, первый — основной.
contact_id integer body Один потребитель.
provider_id integer body Поставщик (null — убрать).
Ответ

{"transaction": Transaction}

PUT /api/v1/transactions/{transaction}/parts Делит сумму на части (пустой список — отменяет деление).
Параметры
НазваниеТипГде
transaction * integer path ID записи.
parts * array<object> body Части (до 30): amount, contact_ids (обязательно), category_id, note; сумма частей равна сумме записи.
Ответ

{"transaction": Transaction}

Долги

GET /api/v1/debts Список долгов с оплатами и добавлениями.
Ответ

{"debts": Debt[]}

POST /api/v1/debts Записывает новый долг.

Итог долга не хранится: начальная сумма + добавления − оплаты.

Параметры
НазваниеТипГде
direction * string
they_owe_me | i_owe
body Кто должен: вам должны или вы должны.
person_name * string body Имя человека (до 80 символов).
amount * number body Начальная сумма, до 2 знаков.
currency * string
UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF
body Валюта долга.
note string body Заметка (до 500 символов).
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
due_date date body Срок возврата.
account_id integer body Деньги проходят через этот счёт (той же валюты); без него — без движения денег.
category_id integer body Категория движения денег (или покупки в долг).
contact_id integer body Контакт.
activity_id integer body Событие.
on_credit boolean body Покупка в долг (только i_owe): расход сейчас, деньги при оплате; account_id игнорируется.
Пример запроса
{
    "direction": "they_owe_me",
    "person_name": "Sardor",
    "contact_id": 5,
    "amount": 2000000,
    "currency": "UZS",
    "account_id": 12,
    "due_date": "2026-12-01",
    "note": "Telefon uchun"
}
Ответ

{"debt": Debt}

PUT /api/v1/debts/{debt} Частично изменяет долг (только отправленные поля).
Параметры
НазваниеТипГде
debt * integer path ID долга.
direction string
they_owe_me | i_owe
body Направление (у долга с движением денег не меняется).
person_name string body Имя человека.
amount number body Исправляет начальную сумму (и движение денег).
currency string
UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF
body Валюта (у долга с движением денег не меняется).
note string body Заметка (до 500 символов).
due_date date body Срок возврата.
contact_id integer body Контакт (null — отвязать).
activity_id integer body Событие (null — отвязать).
Пример запроса
{
    "due_date": "2027-01-15",
    "note": "Muddat uzaytirildi"
}
Ответ

{"debt": Debt}

DELETE /api/v1/debts/{debt} Удаляет долг со всеми оплатами и движениями денег.
Параметры
НазваниеТипГде
debt * integer path ID долга.
Ответ

{"ok": true}

POST /api/v1/debts/{debt}/payments Записывает оплату долга (не больше остатка).
Параметры
НазваниеТипГде
debt * integer path ID долга.
amount * number body Сумма в валюте долга, до 2 знаков.
note string body Заметка (до 300 символов).
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
account_id integer body Деньги проходят через этот счёт (валюта должна совпадать с долгом); без него меняется только долг.
category_id integer body Категория движения денег (если указан счёт).
Пример запроса
{
    "amount": 500000,
    "account_id": 12,
    "occurred_at": "2026-10-30T18:00:00+05:00"
}
Ответ

{"debt": Debt}

PUT /api/v1/debts/{debt}/payments/{payment} Полностью заменяет оплату.

Без account_id движение денег удаляется.

Параметры
НазваниеТипГде
debt * integer path ID долга.
payment * integer path ID оплаты.
amount * number body Сумма в валюте долга, до 2 знаков.
note string body Заметка (до 300 символов).
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
account_id integer body Деньги проходят через этот счёт (валюта должна совпадать с долгом); без него меняется только долг.
category_id integer body Категория движения денег (если указан счёт).
Ответ

{"debt": Debt}

DELETE /api/v1/debts/{debt}/payments/{payment} Удаляет оплату, баланс восстанавливается.
Параметры
НазваниеТипГде
debt * integer path ID долга.
payment * integer path ID оплаты.
Ответ

{"debt": Debt}

POST /api/v1/debts/{debt}/additions Увеличивает долг («дал ещё»).
Параметры
НазваниеТипГде
debt * integer path ID долга.
amount * number body Сумма в валюте долга, до 2 знаков.
note string body Заметка (до 300 символов).
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
account_id integer body Деньги проходят через этот счёт (валюта должна совпадать с долгом); без него меняется только долг.
category_id integer body Категория движения денег (если указан счёт).
Ответ

{"debt": Debt}

PUT /api/v1/debts/{debt}/additions/{addition} Полностью заменяет добавление.
Параметры
НазваниеТипГде
debt * integer path ID долга.
addition * integer path ID добавления.
amount * number body Сумма в валюте долга, до 2 знаков.
note string body Заметка (до 300 символов).
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
account_id integer body Деньги проходят через этот счёт (валюта должна совпадать с долгом); без него меняется только долг.
category_id integer body Категория движения денег (если указан счёт).
Ответ

{"debt": Debt}

DELETE /api/v1/debts/{debt}/additions/{addition} Удаляет добавление, баланс восстанавливается.
Параметры
НазваниеТипГде
debt * integer path ID долга.
addition * integer path ID добавления.
Ответ

{"debt": Debt}

Регулярные платежи

GET /api/v1/recurrings Список регулярных платежей.
Ответ

{"recurrings": Recurring[]}

POST /api/v1/recurrings Добавляет регулярный платёж.

Расписание не хранится — считается от starts_on и периода.

Параметры
НазваниеТипГде
title * string body Название (до 80 символов).
type * string
income | expense
body Тип: доход или расход.
amount * number body Сумма за период, до 2 знаков.
currency * string
UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF
body Валюта; после первой оплаты не меняется.
account_id integer body Счёт по умолчанию (той же валюты).
category_id integer body Категория.
contact_id integer body Контакт.
debt_id integer body Погашение этого долга частями (той же валюты).
interval_unit * string
day | week | month | year
body Единица периода.
interval_count integer body Раз в сколько единиц (1–60, по умолчанию 1).
anchor_day integer body День платежа (1–31).
starts_on * date body Дата начала.
ends_on date body Дата окончания (не раньше начала).
total_periods integer body Всего периодов (1–600).
auto_amount boolean body Следующая сумма = последней оплаченной.
penalty_daily_amount number body Пеня за день просрочки (сумма).
penalty_daily_percent number body Пеня за день, % (0–100).
is_active boolean body Активен ли (false — на паузе).
note string body Заметка (до 500 символов).
Пример запроса
{
    "title": "Internet",
    "type": "expense",
    "amount": 120000,
    "currency": "UZS",
    "account_id": 12,
    "category_id": 7,
    "interval_unit": "month",
    "interval_count": 1,
    "anchor_day": 5,
    "starts_on": "2026-11-05"
}
Ответ

{"recurring": Recurring}

PUT /api/v1/recurrings/{recurring} Частично изменяет регулярный платёж.
Параметры
НазваниеТипГде
recurring * integer path ID платежа.
title string body Название (до 80 символов).
type string
income | expense
body Тип: доход или расход.
amount number body Сумма за период, до 2 знаков.
currency string
UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF
body Валюта; после первой оплаты не меняется.
account_id integer body Счёт по умолчанию (той же валюты).
category_id integer body Категория.
contact_id integer body Контакт.
debt_id integer body Погашение этого долга частями (той же валюты).
interval_unit string
day | week | month | year
body Единица периода.
interval_count integer body Раз в сколько единиц (1–60, по умолчанию 1).
anchor_day integer body День платежа (1–31).
starts_on date body Дата начала.
ends_on date body Дата окончания (не раньше начала).
total_periods integer body Всего периодов (1–600).
auto_amount boolean body Следующая сумма = последней оплаченной.
penalty_daily_amount number body Пеня за день просрочки (сумма).
penalty_daily_percent number body Пеня за день, % (0–100).
is_active boolean body Активен ли (false — на паузе).
note string body Заметка (до 500 символов).
Пример запроса
{
    "amount": 135000,
    "is_active": true
}
Ответ

{"recurring": Recurring}

DELETE /api/v1/recurrings/{recurring} Удаляет регулярный платёж со всеми записями и движениями денег.
Параметры
НазваниеТипГде
recurring * integer path ID платежа.
Ответ

{"ok": true}

POST /api/v1/recurrings/{recurring}/entries Отмечает период оплаченным (один период — одна запись).
Параметры
НазваниеТипГде
recurring * integer path ID платежа.
period_on * date body За какой период (дата периода).
amount number body Сумма; обязательна без debt_payment_id и transaction_id.
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
account_id integer body Деньги с этого счёта (той же валюты); без него — только отметка.
category_id integer body Категория (по умолчанию — из платежа).
note string body Заметка (до 300 символов).
debt_payment_id integer body Закрыть период существующей оплатой долга (новых денег нет).
transaction_id integer body Закрыть период существующей операцией (например, по карте).
Пример запроса
{
    "period_on": "2026-11-05",
    "amount": 120000,
    "account_id": 12
}
Ответ

{"recurring": Recurring}

PUT /api/v1/recurrings/{recurring}/entries/{entry} Изменяет запись периода.
Параметры
НазваниеТипГде
recurring * integer path ID платежа.
entry * integer path ID записи.
period_on * date body За какой период (дата периода).
amount number body Сумма.
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
account_id integer body Деньги с этого счёта (той же валюты); без него — только отметка.
category_id integer body Категория (по умолчанию — из платежа).
note string body Заметка (до 300 символов).
Ответ

{"recurring": Recurring}

DELETE /api/v1/recurrings/{recurring}/entries/{entry} Удаляет запись периода.
Параметры
НазваниеТипГде
recurring * integer path ID платежа.
entry * integer path ID записи.
Ответ

{"recurring": Recurring}

События

GET /api/v1/activities Список событий с итогами.
Ответ

{"activities": Activity[]}

POST /api/v1/activities Добавляет событие.
Параметры
НазваниеТипГде
title * string body Название (до 80 символов).
icon string body Иконка (эмодзи).
color string body Цвет.
starts_on date body Дата начала.
ends_on date body Дата окончания.
is_closed boolean body Закрыто ли.
note string body Заметка (до 500 символов).
parent_id integer body Родительское событие (не само и не вложенное).
Ответ

{"activity": Activity}

GET /api/v1/activities/{activity} Событие: операции, долги, вложенные события и по месяцам.
Параметры
НазваниеТипГде
activity * integer path ID события.
Ответ

{"activity": Activity, "transactions": Transaction[], "debts": Debt[], "children": Activity[], "monthly": array}

PUT /api/v1/activities/{activity} Частично изменяет событие.
Параметры
НазваниеТипГде
activity * integer path ID события.
title string body Название (до 80 символов).
icon string body Иконка (эмодзи).
color string body Цвет.
starts_on date body Дата начала.
ends_on date body Дата окончания.
is_closed boolean body Закрыто ли.
note string body Заметка (до 500 символов).
parent_id integer body Родительское событие (не само и не вложенное).
Ответ

{"activity": Activity}

DELETE /api/v1/activities/{activity} Удаляет событие; операции и долги остаются.
Параметры
НазваниеТипГде
activity * integer path ID события.
Ответ

{"ok": true}

Покупки

GET /api/v1/purchases Последние 50 покупок.
Ответ

{"purchases": Purchase[]}

POST /api/v1/purchases Записывает покупку или общий счёт: оплаты, участники и долги разом.
Параметры
НазваниеТипГде
title * string body Название (до 120 символов).
contact_id integer body Продавец (контакт).
category_id integer body Категория расхода.
currency * string
UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF
body Валюта покупки.
occurred_at date-time body Время, ISO 8601; отправляйте со смещением часового пояса (по умолчанию — сейчас).
note string body Заметка (до 500 символов).
service_percent number body Процент за обслуживание (0–100).
items array<object> body Позиции: title, amount, shared_with (ключи участников: me или c<id контакта>).
participants array<object> body Участники: contact_id (пусто — вы), kind (mine | owed — станет долгом).
participant_amounts object body Доли без позиций: ключ (me, c<id>) → сумма.
payments array<object> body Оплаты: account_id, amount — каждая станет расходом.
deferred object body {amount} — часть к оплате позже, станет долгом продавцу.
Ответ

{"purchase": Purchase}

GET /api/v1/purchases/{purchase} Одна покупка.
Параметры
НазваниеТипГде
purchase * integer path ID покупки.
Ответ

{"purchase": Purchase}

DELETE /api/v1/purchases/{purchase} Удаляет покупку с оплатами и долгами.
Параметры
НазваниеТипГде
purchase * integer path ID покупки.
Ответ

{"ok": true}

Отчёт

GET /api/v1/stats Доходы и расходы за период, по каждой валюте отдельно.

Переводы не учитываются; валюты не суммируются.

Параметры
НазваниеТипГде
from date query Начало периода (по умолчанию — начало месяца).
to date query Конец периода (по умолчанию — конец месяца).
Ответ

{"range": {from, to}, "expense": [{currency, category_id, total}], "income": [...], "daily": [{currency, type, date, total}], "totals": [{currency, income, expense}]}