Ledgo API
REST API orqali o'z dasturingiz, skriptingiz yoki AI agentingiz Ledgo'dagi ma'lumotlaringizni to'liq boshqaradi: hisoblar, kategoriyalar, kontaktlar, kirim-chiqim, qarzlar, muntazam to'lovlar, tadbirlar va hisobot.
Boshlash
- @ledgoapp ni oching → Sozlamalar → «API va AI agentlar».
- Tokenga nom bering va «Yaratish» ni bosing. Tokenni darhol nusxalab oling — u faqat bir marta ko'rsatiladi.
- Har so'rovga sarlavha qo'shing: Authorization: Bearer <token>.
Tokenlar
Bir nechta token yaratishingiz mumkin (har biriga o'z nomi). Sozlamalarda tokenni vaqtincha o'chirib, keyin qayta yoqishingiz yoki butunlay bekor qilishingiz mumkin — bekor qilingan yoki o'chiq token bilan so'rov 401 qaytaradi. Token faqat /api/v1 ni ochadi va sizning hisobingiz nomidan ishlaydi; uni hech kimga bermang.
Tasdiq kutadigan yozuvlar
Qoidalar
- Pul doim 2 xonali (x.xx); valyuta har doim hisobning o'zidan olinadi — konvertatsiya yo'q.
- Turli valyutadagi hisoblar orasida ayirboshlash — type: transfer, amount (chiqadi) va to_amount (kiradi).
- Sana-vaqt: ISO 8601, vaqt zonasi bilan (masalan 2026-10-30T13:45:00+05:00). Sizning zonangiz — GET /me da.
- Kirim/chiqim kim uchun ekanini bildiradi (contact_id yoki contact_ids) — tizim kontaktlari «O'zim» va «Ro'zg'or» ham kontakt.
- Xatolar: 401 — token yo'q, o'chiq yoki bekor qilingan; 403 — bu yo'l API'ga kirmaydi; 404 — topilmadi; 422 — ma'lumot noto'g'ri ({message, errors}); 429 — juda ko'p so'rov (daqiqasiga 120 ta).
Misol
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 agent uchun
OpenAPI sxemasini agentingizga bering — u barcha yo'llar va maydonlarni o'zi o'qiydi. Agent yozgan yozuvlar tasdiq kutgani uchun uning xatosi balansingizga sezdirmasdan tushib qolmaydi: siz ko'rib tasdiqlaysiz.
https://ledgo.uz/api/v1/openapi.json
Profil va sozlamalar
GET /api/v1/me Siz kimsiz: profil, vaqt zonasi va tasdiq kutayotgan yozuvlar soni.
{"user": User (+ timezone), "pending_count": int}
PUT /api/v1/settings Til va asosiy valyutani o'zgartiradi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| locale | string uz | ru | en | auto |
body | Til; auto — Telegram tiliga ergashadi. |
| base_currency | string UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF |
body | Asosiy valyuta. |
{"user": User}
Hisoblar
GET /api/v1/accounts Hisoblar ro'yxati joriy qoldiq bilan.
{"accounts": Account[]}
POST /api/v1/accounts Yangi hisob yoki karta qo'shadi.
Har hisob o'z valyutasida turadi, konvertatsiya yo'q.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| name * | string | body | Nomi (60 belgigacha). |
| type * | string cash | card | bank |
body | Turi: naqd, karta yoki bank. |
| currency * | string UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF |
body | Valyuta; amal yozilgandan keyin o'zgarmaydi. |
| initial_balance | number | body | Boshlang'ich qoldiq, 2 xonagacha. |
| color | string | body | Rang. |
| icon | string | body | Belgi. |
| bank_name | string | body | Bank nomi. |
| last4 | string | body | Kartaning oxirgi 4 raqami (bank xabarlarini ulash uchun). |
| is_archived | boolean | body | Arxivdami. |
| is_primary | boolean | body | Asosiy hisob (faqat bittasi bo'ladi). |
{
"name": "Humo",
"type": "card",
"currency": "UZS",
"initial_balance": 1250000.5,
"bank_name": "Kapitalbank",
"last4": "4821"
}
{"account": Account}
PUT /api/v1/accounts/{account} Hisobni tahrirlaydi.
name, type, currency har safar yuborilsin; amal bor hisobda valyuta jimgina o'zgarmaydi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| account * | integer | path | Hisob ID si. |
| name * | string | body | Nomi (60 belgigacha). |
| type * | string cash | card | bank |
body | Turi: naqd, karta yoki bank. |
| currency * | string UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF |
body | Valyuta; amal yozilgandan keyin o'zgarmaydi. |
| initial_balance | number | body | Boshlang'ich qoldiq, 2 xonagacha. |
| color | string | body | Rang. |
| icon | string | body | Belgi. |
| bank_name | string | body | Bank nomi. |
| last4 | string | body | Kartaning oxirgi 4 raqami (bank xabarlarini ulash uchun). |
| is_archived | boolean | body | Arxivdami. |
| is_primary | boolean | body | Asosiy hisob (faqat bittasi bo'ladi). |
{
"name": "Humo",
"type": "card",
"currency": "UZS",
"is_primary": true
}
{"account": Account}
DELETE /api/v1/accounts/{account} Hisobni o'chiradi (amali bor hisob — 422, uni arxivlang).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| account * | integer | path | Hisob ID si. |
{"ok": true}
Kategoriyalar
GET /api/v1/categories Kategoriyalar ro'yxati.
{"categories": Category[]}
POST /api/v1/categories Yangi kategoriya qo'shadi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| type * | string income | expense |
body | Kirim yoki chiqim. |
| name * | string | body | Nomi (40 belgigacha). |
| icon | string | body | Belgi. |
| color | string | body | Rang. |
{"category": Category}
PUT /api/v1/categories/{category} Kategoriyani tahrirlaydi (turi o'zgarmaydi).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| category * | integer | path | Kategoriya ID si. |
| name | string | body | Nomi (40 belgigacha). |
| icon | string | body | Belgi. |
| color | string | body | Rang. |
| is_archived | boolean | body | Arxivdami. |
{"category": Category}
DELETE /api/v1/categories/{category} Kategoriyani o'chiradi; yozuvlar kategoriyasiz qoladi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| category * | integer | path | Kategoriya ID si. |
{"ok": true}
Kontaktlar
GET /api/v1/contacts Kontaktlar ro'yxati (tizim kontaktlari «O'zim», «Ro'zg'or» boshida).
{"contacts": Contact[]}
POST /api/v1/contacts Yangi kontakt qo'shadi.
Kontakt — kirim/chiqim kim uchun yoki kimga ekanini bildiradi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| name * | string | body | Ismi (80 belgigacha). |
| type | string person | organization |
body | Odam yoki tashkilot. |
| phone | string | body | Telefon raqami. |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| is_dependent | boolean | body | Qaramog'ingizdagi odam (oila a'zosi). |
| telegram_ids | array<integer> | body | Biriktiriladigan Telegram accountlari (boshqa kontaktniki bo'lsa — 409). |
| main_telegram_id | integer | body | Asosiy Telegram account. |
| no_telegram | boolean | body | Telegrami yo'q deb belgilash. |
{
"name": "Sardor",
"type": "person",
"phone": "+998901234567",
"note": "Ishxonadan"
}
{"contact": Contact}
GET /api/v1/contacts/{contact} Kontakt: qarzlar, so'nggi 100 yozuv va sarf jamlanmasi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| contact * | integer | path | Kontakt ID si. |
| from | date | query | Sarf davri boshi (berilmasa — oy boshi). |
| to | date | query | Sarf davri oxiri (berilmasa — oy oxiri). |
{"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} Kontaktni tahrirlaydi.
name har safar yuborilsin; tizim kontaktining nomi va turi o'zgarmaydi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| contact * | integer | path | Kontakt ID si. |
| name * | string | body | Ismi (80 belgigacha). |
| type | string person | organization |
body | Odam yoki tashkilot. |
| phone | string | body | Telefon raqami. |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| is_dependent | boolean | body | Qaramog'ingizdagi odam (oila a'zosi). |
{
"name": "Sardor Karimov",
"phone": "+998901234567",
"is_dependent": false
}
{"contact": Contact}
DELETE /api/v1/contacts/{contact} Kontaktni o'chiradi; yozuvlar qoladi, faqat bog'lanish uziladi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| contact * | integer | path | Kontakt ID si. |
{"ok": true}
POST
/api/v1/contacts/{contact}/merge
from kontaktini shu kontaktga qo'shib, uni o'chiradi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| contact * | integer | path | Qoladigan kontakt ID si. |
| from * | integer | body | Qo'shilib o'chadigan kontakt ID si. |
{"contact": Contact, "removed": int}
Kirim-chiqimlar
GET /api/v1/transactions Yozuvlar, yangisi oldin, 30 tadan sahifalab.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| type | string income | expense | transfer |
query | Turi. |
| account_id | integer | query | Hisob (kirgan va chiqqan o'tkazmalar ham); javobda totals ham keladi. |
| category_id | integer | query | Kategoriya. |
| activity_id | integer | query | Tadbir. |
| contact_id | integer | query | Kontakt — iste'molchi yoki xizmat ko'rsatuvchi sifatida. |
| from | date | query | Shu kundan (sizning vaqt zonangizda). |
| to | date | query | Shu kungacha (sizning vaqt zonangizda). |
| q | string | query | Izoh bo'yicha qidiruv. |
| page | integer | query | Sahifa raqami. |
| pending_card | boolean | query | Faqat tasdiq kutayotganlar (karta va API yozuvlari). |
| uncategorized_card | boolean | query | Eski filtr: kategoriyasiz karta yozuvlari. |
{"transactions": Transaction[], "current_page": int, "last_page": int, "total": int, "has_more": bool, "totals": {income, expense}|null}
POST /api/v1/transactions Kirim, chiqim yoki o'tkazma yozadi.
Dasturchi tokeni bilan yozuv source: "api" va tasdiq kutadi (is_pending: true): uni ilovada yoki confirm orqali tasdiqlang; kutayotganda kontakt ixtiyoriy. Valyuta hisobdan olinadi, summa 2 xonaga yaxlitlanadi; har xil valyutali o'tkazmada to_amount kiritiladi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| type * | string income | expense | transfer |
body | Turi. |
| amount * | number | body | Summa, hisob valyutasida, 2 xonagacha. |
| account_id * | integer | body | Hisob; valyuta doim shundan olinadi. |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| category_id | integer | body | Yozuv turidagi kategoriya (o'tkazmada e'tiborsiz). |
| contact_ids | array<integer> | body | Kim uchun (iste'molchilar), birinchisi asosiy; kirim/chiqimda kerak. |
| contact_id | integer | body | Bitta iste'molchi (contact_ids o'rniga). |
| provider_id | integer | body | Kimga to'langan / kimdan kelgan (xizmat ko'rsatuvchi). |
| activity_ids | array<integer> | body | Tadbirlar (bir nechta). |
| activity_id | integer | body | Bitta tadbir. |
| to_account_id | integer | body | O'tkazmada qabul qiluvchi hisob (shart). |
| to_amount | number | body | O'tkazmada kirgan summa (shart); valyuta bir xil bo'lsa amount ga tenglanadi. |
| auto_confirm | boolean | body | true — darhol tasdiqlangan yoziladi (unda kirim/chiqimga kontakt shart). |
{
"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
Tasdiq kutayotgan yozuvlarni birdan tasdiqlaydi (ids siz — hammasini).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| ids | array<integer> | body | Tasdiqlanadigan yozuvlar (500 tagacha). |
| contact_id | integer | body | Kontaktsiz kirim/chiqimlarga qo'yiladi; ular bo'lsa — shart. |
{"confirmed": int, "pending_count": int}
PUT /api/v1/transactions/{transaction} Yozuvni tahrirlaydi — faqat yuborilgan maydonlar o'zgaradi (turi o'zgarmaydi).
Dasturchi tokeni bilan yuborilmagan maydon o'z qiymatini saqlaydi; tozalash uchun null (ro'yxatga []) yuboring. Tasdiq kutayotgan API yozuvi kontaktsiz ham tahrirlanadi. Qarz va rejali to'lov yozuvlari bu yerdan tahrirlanmaydi (422).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| transaction * | integer | path | Yozuv ID si. |
| amount | number | body | Summa, hisob valyutasida, 2 xonagacha. |
| account_id | integer | body | Hisob; valyuta doim shundan olinadi. |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| category_id | integer | body | Yozuv turidagi kategoriya (o'tkazmada e'tiborsiz). |
| contact_ids | array<integer> | body | Kim uchun (iste'molchilar), birinchisi asosiy; kirim/chiqimda kerak. |
| contact_id | integer | body | Bitta iste'molchi (contact_ids o'rniga). |
| provider_id | integer | body | Kimga to'langan / kimdan kelgan (xizmat ko'rsatuvchi). |
| activity_ids | array<integer> | body | Tadbirlar (bir nechta). |
| activity_id | integer | body | Bitta tadbir. |
| to_account_id | integer | body | O'tkazmada qabul qiluvchi hisob (shart). |
| to_amount | number | body | O'tkazmada kirgan summa (shart); valyuta bir xil bo'lsa amount ga tenglanadi. |
{
"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} Yozuvni o'chiradi (qarz va rejali to'lov yozuvlari — 422).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| transaction * | integer | path | Yozuv ID si. |
{"ok": true}
POST /api/v1/transactions/{transaction}/confirm Karta yoki API yozuvini tasdiqlaydi, kerak bo'lsa kategoriya va kontakt bilan.
Kirim/chiqimda kontakt bo'lmasa tasdiqlanmaydi (422); summa, hisob va sanaga tegilmaydi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| transaction * | integer | path | Yozuv ID si (faqat karta yoki API yozuvi). |
| category_id | integer | body | Kategoriya (null — olib tashlash). |
| contact_ids | array<integer> | body | Kim uchun, birinchisi asosiy. |
| contact_id | integer | body | Bitta iste'molchi. |
| provider_id | integer | body | Xizmat ko'rsatuvchi (null — olib tashlash). |
{"transaction": Transaction}
PUT /api/v1/transactions/{transaction}/parts Summani qismlarga bo'ladi (bo'sh ro'yxat — bo'lishni bekor qiladi).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| transaction * | integer | path | Yozuv ID si. |
| parts * | array<object> | body | Qismlar (30 tagacha): amount, contact_ids (shart), category_id, note; yig'indisi yozuv summasiga teng. |
{"transaction": Transaction}
Qarzlar
GET /api/v1/debts Qarzlar ro'yxati to'lov va qo'shimchalari bilan.
{"debts": Debt[]}
POST /api/v1/debts Yangi qarz yozadi.
Qarz jami saqlanmaydi: boshlang'ich + qo'shimchalar − to'lovlar.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| direction * | string they_owe_me | i_owe |
body | Kim qarzdor: sizga qarzdor yoki siz qarzdorsiz. |
| person_name * | string | body | Odamning ismi (80 belgigacha). |
| amount * | number | body | Boshlang'ich summa, 2 xonagacha. |
| currency * | string UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF |
body | Qarz valyutasi. |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| due_date | date | body | Qaytarish muddati. |
| account_id | integer | body | Pul shu hisobdan o'tadi (valyutasi teng); berilmasa — pul harakatisiz. |
| category_id | integer | body | Pul harakati (yoki qarzga xarid) kategoriyasi. |
| contact_id | integer | body | Kontakt. |
| activity_id | integer | body | Tadbir. |
| on_credit | boolean | body | Qarzga xarid (faqat i_owe): xarajat hozir, pul to'langanda; account_id e'tiborsiz. |
{
"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} Qarzni qisman tahrirlaydi (faqat yuborilgan maydonlar).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| debt * | integer | path | Qarz ID si. |
| direction | string they_owe_me | i_owe |
body | Yo'nalish (pul harakati bor qarzda o'zgarmaydi). |
| person_name | string | body | Odamning ismi. |
| amount | number | body | Boshlang'ich summani tuzatadi (pul harakati ham). |
| currency | string UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF |
body | Valyuta (pul harakati bor qarzda o'zgarmaydi). |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| due_date | date | body | Qaytarish muddati. |
| contact_id | integer | body | Kontakt (null — uzish). |
| activity_id | integer | body | Tadbir (null — uzish). |
{
"due_date": "2027-01-15",
"note": "Muddat uzaytirildi"
}
{"debt": Debt}
DELETE /api/v1/debts/{debt} Qarzni barcha to'lovlari va pul harakatlari bilan o'chiradi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| debt * | integer | path | Qarz ID si. |
{"ok": true}
POST /api/v1/debts/{debt}/payments Qarzga to'lov yozadi (qoldiqdan oshmasin).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| debt * | integer | path | Qarz ID si. |
| amount * | number | body | Summa, qarz valyutasida, 2 xonagacha. |
| note | string | body | Izoh (ko'pi bilan 300 belgi). |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| account_id | integer | body | Pul shu hisobdan o'tadi (valyutasi qarznikiga teng bo'lsin); berilmasa — faqat qarz yoziladi. |
| category_id | integer | body | Pul harakatining kategoriyasi (hisob berilganda). |
{
"amount": 500000,
"account_id": 12,
"occurred_at": "2026-10-30T18:00:00+05:00"
}
{"debt": Debt}
PUT /api/v1/debts/{debt}/payments/{payment} To'lovni to'liq almashtiradi.
account_id yuborilmasa pul harakati olib tashlanadi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| debt * | integer | path | Qarz ID si. |
| payment * | integer | path | To'lov ID si. |
| amount * | number | body | Summa, qarz valyutasida, 2 xonagacha. |
| note | string | body | Izoh (ko'pi bilan 300 belgi). |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| account_id | integer | body | Pul shu hisobdan o'tadi (valyutasi qarznikiga teng bo'lsin); berilmasa — faqat qarz yoziladi. |
| category_id | integer | body | Pul harakatining kategoriyasi (hisob berilganda). |
{"debt": Debt}
DELETE /api/v1/debts/{debt}/payments/{payment} To'lovni o'chiradi, balans tiklanadi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| debt * | integer | path | Qarz ID si. |
| payment * | integer | path | To'lov ID si. |
{"debt": Debt}
POST /api/v1/debts/{debt}/additions Qarz ustiga qo'shadi («yana berdi»).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| debt * | integer | path | Qarz ID si. |
| amount * | number | body | Summa, qarz valyutasida, 2 xonagacha. |
| note | string | body | Izoh (ko'pi bilan 300 belgi). |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| account_id | integer | body | Pul shu hisobdan o'tadi (valyutasi qarznikiga teng bo'lsin); berilmasa — faqat qarz yoziladi. |
| category_id | integer | body | Pul harakatining kategoriyasi (hisob berilganda). |
{"debt": Debt}
PUT /api/v1/debts/{debt}/additions/{addition} Qo'shimchani to'liq almashtiradi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| debt * | integer | path | Qarz ID si. |
| addition * | integer | path | Qo'shimcha ID si. |
| amount * | number | body | Summa, qarz valyutasida, 2 xonagacha. |
| note | string | body | Izoh (ko'pi bilan 300 belgi). |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| account_id | integer | body | Pul shu hisobdan o'tadi (valyutasi qarznikiga teng bo'lsin); berilmasa — faqat qarz yoziladi. |
| category_id | integer | body | Pul harakatining kategoriyasi (hisob berilganda). |
{"debt": Debt}
DELETE /api/v1/debts/{debt}/additions/{addition} Qo'shimchani o'chiradi, balans tiklanadi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| debt * | integer | path | Qarz ID si. |
| addition * | integer | path | Qo'shimcha ID si. |
{"debt": Debt}
Rejali to'lovlar
GET /api/v1/recurrings Rejali to'lovlar ro'yxati.
{"recurrings": Recurring[]}
POST /api/v1/recurrings Yangi rejali to'lov qo'shadi.
Jadval saqlanmaydi — starts_on va davrdan hisoblanadi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| title * | string | body | Nomi (80 belgigacha). |
| type * | string income | expense |
body | Turi: kirim yoki chiqim. |
| amount * | number | body | Har davr summasi, 2 xonagacha. |
| currency * | string UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF |
body | Valyuta; birinchi to'lovdan keyin o'zgarmaydi. |
| account_id | integer | body | Odatiy hisob (valyutasi to'lovnikiga teng). |
| category_id | integer | body | Kategoriya. |
| contact_id | integer | body | Kontakt. |
| debt_id | integer | body | Shu qarzni bo'lib to'lash (valyutasi teng bo'lsin). |
| interval_unit * | string day | week | month | year |
body | Davr birligi. |
| interval_count | integer | body | Necha birlikda bir marta (1–60, odatda 1). |
| anchor_day | integer | body | To'lov kuni (1–31). |
| starts_on * | date | body | Boshlanish sanasi. |
| ends_on | date | body | Tugash sanasi (boshlanishdan oldin emas). |
| total_periods | integer | body | Jami davrlar soni (1–600). |
| auto_amount | boolean | body | Keyingi summa oxirgi to'langanga tenglashsin. |
| penalty_daily_amount | number | body | Kechikish uchun kunlik jarima summasi. |
| penalty_daily_percent | number | body | Kunlik jarima foizi (0–100). |
| is_active | boolean | body | Faolmi (false — to'xtatilgan). |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
{
"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} Rejali to'lovni qisman tahrirlaydi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| recurring * | integer | path | Rejali to'lov ID si. |
| title | string | body | Nomi (80 belgigacha). |
| type | string income | expense |
body | Turi: kirim yoki chiqim. |
| amount | number | body | Har davr summasi, 2 xonagacha. |
| currency | string UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF |
body | Valyuta; birinchi to'lovdan keyin o'zgarmaydi. |
| account_id | integer | body | Odatiy hisob (valyutasi to'lovnikiga teng). |
| category_id | integer | body | Kategoriya. |
| contact_id | integer | body | Kontakt. |
| debt_id | integer | body | Shu qarzni bo'lib to'lash (valyutasi teng bo'lsin). |
| interval_unit | string day | week | month | year |
body | Davr birligi. |
| interval_count | integer | body | Necha birlikda bir marta (1–60, odatda 1). |
| anchor_day | integer | body | To'lov kuni (1–31). |
| starts_on | date | body | Boshlanish sanasi. |
| ends_on | date | body | Tugash sanasi (boshlanishdan oldin emas). |
| total_periods | integer | body | Jami davrlar soni (1–600). |
| auto_amount | boolean | body | Keyingi summa oxirgi to'langanga tenglashsin. |
| penalty_daily_amount | number | body | Kechikish uchun kunlik jarima summasi. |
| penalty_daily_percent | number | body | Kunlik jarima foizi (0–100). |
| is_active | boolean | body | Faolmi (false — to'xtatilgan). |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
{
"amount": 135000,
"is_active": true
}
{"recurring": Recurring}
DELETE /api/v1/recurrings/{recurring} Rejali to'lovni barcha yozuvlari va pul harakatlari bilan o'chiradi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| recurring * | integer | path | Rejali to'lov ID si. |
{"ok": true}
POST /api/v1/recurrings/{recurring}/entries Bir davrni to'langan deb yozadi (bir davr — bir yozuv).
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| recurring * | integer | path | Rejali to'lov ID si. |
| period_on * | date | body | Qaysi davr uchun (davr sanasi). |
| amount | number | body | Summa; debt_payment_id yoki transaction_id berilmasa shart. |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| account_id | integer | body | Pul shu hisobdan (valyutasi teng); berilmasa — faqat belgi. |
| category_id | integer | body | Kategoriya (berilmasa — rejaliniki). |
| note | string | body | Izoh (ko'pi bilan 300 belgi). |
| debt_payment_id | integer | body | Davrni qarzning mavjud to'lovi bilan yopish (yangi pul yozilmaydi). |
| transaction_id | integer | body | Davrni mavjud kirim/chiqim bilan yopish (masalan, karta yozuvi). |
{
"period_on": "2026-11-05",
"amount": 120000,
"account_id": 12
}
{"recurring": Recurring}
PUT /api/v1/recurrings/{recurring}/entries/{entry} Davr yozuvini tahrirlaydi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| recurring * | integer | path | Rejali to'lov ID si. |
| entry * | integer | path | Yozuv ID si. |
| period_on * | date | body | Qaysi davr uchun (davr sanasi). |
| amount | number | body | Summa. |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| account_id | integer | body | Pul shu hisobdan (valyutasi teng); berilmasa — faqat belgi. |
| category_id | integer | body | Kategoriya (berilmasa — rejaliniki). |
| note | string | body | Izoh (ko'pi bilan 300 belgi). |
{"recurring": Recurring}
DELETE /api/v1/recurrings/{recurring}/entries/{entry} Davr yozuvini o'chiradi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| recurring * | integer | path | Rejali to'lov ID si. |
| entry * | integer | path | Yozuv ID si. |
{"recurring": Recurring}
Tadbirlar
GET /api/v1/activities Tadbirlar ro'yxati jamlanmasi bilan.
{"activities": Activity[]}
POST /api/v1/activities Yangi tadbir qo'shadi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| title * | string | body | Nomi (80 belgigacha). |
| icon | string | body | Belgi (emoji). |
| color | string | body | Rang. |
| starts_on | date | body | Boshlanish sanasi. |
| ends_on | date | body | Tugash sanasi. |
| is_closed | boolean | body | Yopilganmi. |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| parent_id | integer | body | Ota tadbir (o'zi yoki ichidagisi bo'lolmaydi). |
{"activity": Activity}
GET /api/v1/activities/{activity} Tadbir: yozuvlar, qarzlar, ichidagi tadbirlar va oylar bo'yicha.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| activity * | integer | path | Tadbir ID si. |
{"activity": Activity, "transactions": Transaction[], "debts": Debt[], "children": Activity[], "monthly": array}
PUT /api/v1/activities/{activity} Tadbirni qisman tahrirlaydi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| activity * | integer | path | Tadbir ID si. |
| title | string | body | Nomi (80 belgigacha). |
| icon | string | body | Belgi (emoji). |
| color | string | body | Rang. |
| starts_on | date | body | Boshlanish sanasi. |
| ends_on | date | body | Tugash sanasi. |
| is_closed | boolean | body | Yopilganmi. |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| parent_id | integer | body | Ota tadbir (o'zi yoki ichidagisi bo'lolmaydi). |
{"activity": Activity}
DELETE /api/v1/activities/{activity} Tadbirni o'chiradi; yozuvlar va qarzlar joyida qoladi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| activity * | integer | path | Tadbir ID si. |
{"ok": true}
Xaridlar
GET /api/v1/purchases So'nggi 50 ta xarid.
{"purchases": Purchase[]}
POST /api/v1/purchases Xarid yoki bo'lingan xarajat yozadi: to'lovlar, ishtirokchilar va qarzlar birga.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| title * | string | body | Nomi (120 belgigacha). |
| contact_id | integer | body | Sotuvchi (kontakt). |
| category_id | integer | body | Chiqim kategoriyasi. |
| currency * | string UZS | USD | EUR | RUB | KZT | KGS | TJS | GBP | TRY | AED | JPY | CNY | KRW | CAD | CHF |
body | Xarid valyutasi. |
| occurred_at | date-time | body | Vaqti, ISO 8601, vaqt zonasi siljishi bilan yuboring (berilmasa — hozir). |
| note | string | body | Izoh (ko'pi bilan 500 belgi). |
| service_percent | number | body | Xizmat haqi foizi (0–100). |
| items | array<object> | body | Pozitsiyalar: title, amount, shared_with (ishtirokchi kalitlari: me yoki c<kontakt id>). |
| participants | array<object> | body | Ishtirokchilar: contact_id (bo'sh — siz), kind (mine | owed — qarz bo'ladi). |
| participant_amounts | object | body | Pozitsiyasiz bo'lishda ulushlar: kalit (me, c<id>) → summa. |
| payments | array<object> | body | To'lovlar: account_id, amount — har biri chiqim bo'ladi. |
| deferred | object | body | {amount} — keyin to'lanadigan qism, sotuvchiga qarz bo'ladi. |
{"purchase": Purchase}
GET /api/v1/purchases/{purchase} Bitta xarid.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| purchase * | integer | path | Xarid ID si. |
{"purchase": Purchase}
DELETE /api/v1/purchases/{purchase} Xaridni to'lovlari va qarzlari bilan o'chiradi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| purchase * | integer | path | Xarid ID si. |
{"ok": true}
Hisobot
GET /api/v1/stats Davr bo'yicha kirim/chiqim, har valyuta alohida.
O'tkazmalar sanalmaydi; valyutalar qo'shilmaydi.
| Nomi | Turi | Qayerda | |
|---|---|---|---|
| from | date | query | Davr boshi (berilmasa — oy boshi). |
| to | date | query | Davr oxiri (berilmasa — oy oxiri). |
{"range": {from, to}, "expense": [{currency, category_id, total}], "income": [...], "daily": [{currency, type, date, total}], "totals": [{currency, income, expense}]}