category_id field links all three together. Every category entry on a report, every journal entry, and every transaction shares the same category_id.
The Drill-Down Pattern
To break down any line item on a report:- Pull a report (e.g. the income statement).
- Find the category you want and grab its
category_id. - Fetch the underlying journal entries:
Reading Financial Reports
The API returns three financial reports: income statement, balance sheet, and cash flow.Sign convention
Sign convention
Income and revenue are positive, expenses and taxes are negative. On the income statement, summing all section totals gives you
net_income_cents. The same convention applies to cash flow: inflows are positive, outflows are negative.Point-in-time vs. period activity
Point-in-time vs. period activity
The balance sheet is a point-in-time snapshot, so its category entries use
balance_cents (the balance as of a single date). The income statement and cash flow statement are period reports, so their category entries use amount_cents (activity over a date range).Category hierarchy
Category hierarchy
Categories form a tree. Parent categories (e.g. “Cash”, “Admin”) appear in the array alongside their children, and each child references its parent via
parent_category_id. Root-level categories have parent_category_id: null. To reconstruct the tree, group entries by parent_category_id. The position field gives you the sort order among siblings that share the same parent.The cash flow statement also includes presentation groupings (“Changes in Working Capital”, “Non-Cash Expenses”) as entries in operating_activities.categories. These use synthetic IDs prefixed with grp_ (e.g. grp_changes_in_working_capital). Their children reference them via parent_category_id, following the same tree pattern.Section totals
Section totals
Each section (e.g.
revenue, expenses) includes a total_cents that equals the sum of its root-level categories (those with parent_category_id null). Parent categories contain subtotals of their children, so summing all entries would double-count. You can use total_cents directly without summing categories yourself.Drilling into line items
Drilling into line items
Each category entry includes a
category_id. Pass it to GET /journal-entries?category_id=cat_xxx (with the same date range) to see every journal entry behind that line item. Synthetic grouping IDs (prefixed with grp_) are not real categories and cannot be used with the journal entries endpoint.