Skip to main content

Sume

Sumele sunt șiruri decimale, niciodată numere în virgulă mobilă și niciodată subunități:
Parsează-le cu un tip decimal. Toate sumele unui obiect sunt în currency-ul acelui obiect, un cod ISO 4217. Sumele tranzacțiilor și previziunilor au semn: negativ înseamnă bani care ies din spațiul de lucru, pozitiv înseamnă bani care intră. Semnul este cel care contează. Câmpul direction, "inflow" sau "outflow", este derivat din el, deci cele două nu pot fi niciodată în contradicție și poți grupa după direcție fără să parsezi. Suma câmpului amount pe orice set de tranzacții dă mișcarea netă.

Date

Tranzacțiile și previziunile au un date, o dată calendaristică ISO 8601 precum "2026-09-03". Nu există componentă de timp. Filtrele pe dată sunt inclusive la ambele capete. Câmpurile de audit created_at și updated_at sunt momente UTC în format RFC 3339.

Obiecte și referințe

Fiecare obiect are un câmp object cu numele tipului și un id, un șir UUID. Obiectele legate vin ca identificatori:
Cere obiectele în sine cu expand, numind relațiile dorite, separate prin virgulă. Fiecare identificator este atunci înlocuit cu obiectul către care arată:
Extinderea merge un singur nivel, iar un nume nesuportat este respins cu 400. La o tranzacție poți extinde account, category, counterparty și labels. La un cont, bank. La o previziune, category, counterparty, labels și linked_transactions. Câmpul bank al unui cont este identificatorul conexiunii care îl alimentează, null pentru conturile ținute manual:
În sens invers, de la o conexiune la conturile ei, se folosește un filtru, nu o extindere: /accounts?bank_id=<id>. Referințele nule sunt null, niciodată omise. Listele goale sunt [].

Enumerări

Toate enumerările sunt șiruri cu litere mici. Pot apărea valori noi într-o versiune minoră. Tratează valorile necunoscute ca opace, nu ca erori.

Ce conține o listă de tranzacții

/transactions este un extras de cont: câte un rând pentru fiecare mișcare, și fiecare mișcare are un rând. Un transfer între două conturi proprii înseamnă două mișcări, deci vine ca două rânduri, câte unul pe fiecare cont. Nimic nu le marchează ca pereche. O tranzacție exclusă din cash flow în ThinkOut a mișcat totuși bani, deci rămâne un rând, iar nici asta nu este marcat. O listă nu este, prin urmare, un raport de cash flow. Dacă o însumezi, fiecare transfer este numărat de două ori, iar API-ul nu îți dă cum să îl recunoști. Cifrele care se potrivesc cu ce arată ThinkOut vin din endpointul de sinteză.

Sinteze

/transactions/summary este singurul loc în care cifrele API-ului diferă deliberat de cele ale unei liste. Întoarce câte un rând pentru fiecare perioadă și un bloc totals pentru întregul interval, ca să nu aduni niciodată rânduri tu însuți:
Cele patru câmpuri de sold apar doar pe rândurile grupate exclusiv pe perioadă. Grupează după o a doua dimensiune, de exemplu group_by=counterparty, și ele devin null, pentru că un sold per partener nu înseamnă nimic. Ce numără o sinteză este fix. Transferurile între conturile proprii, mișcările excluse de un utilizator și duplicatele sunt lăsate în afara fluxurilor; transferurile și cele excluse sunt raportate pe liniile lor separate. O plată împărțită este numărată o singură dată, prin bucățile ei. Sumele sunt convertite într-o singură monedă la cursul din data fiecărei mișcări; soldurile se convertesc întregi, la un singur curs, iar obiectul conversion spune care bază s-a aplicat. O listă nu poate fi filtrată până ajunge să coincidă cu o sinteză, și nici nu este menită să coincidă.