REST API
Fourteen read-only GET routes over HTTPS, answered as JSON.
Base URL
https://auth.42six.ai/functions/v1/api/v1Every route is a GET with Authorization: Bearer ftx_YOUR_KEY. Any other method answers 405. The API is meant for servers and scripts: it sends no CORS headers, so a browser page cannot read it.
Routes
GET /entitiesGET /accounts?entityGET /journal-entries?entity&from&toGET /journal-lines?entity&account&from&toGET /bank-transactions?entity&from&toGET /trial-balance?entity&from&to(from and to required)GET /income-statement?entity&from&to(from and to required)GET /balance-sheet?entity&as_of(as_of required)GET /analytics?entity&preset&as_ofGET /cash-flow?entity&preset&as_ofGET /needs-review?entityGET /rules?entityGET /reconciliations?entityGET /period-locks?entity
Each route's parameters are listed on the Tool reference pages.
Conventions
- Dates are YYYY-MM-DD. A range is half-open: from is included, to is not.
- Money is a decimal string such as "1250.00", never a floating-point number.
- Journal entries and lines are posted entries only.
- In journal lines and the trial balance a debit is positive. In bank transactions a positive amount is money out, the bank feed convention. The statements show each line as the app does: revenue, liabilities and equity positive, and accounts at zero left out.
Paging
Every route but the two statements answers { "data": [...], "next_cursor": ... }; income-statement and balance-sheet answer one statement as { "data": { ... } }. A full page carries next_cursor; send it back as cursor for the next page. A page shorter than limit has next_cursor null and is the last. A last page that happens to be exactly full costs one more call, which returns no rows.
curl "https://auth.42six.ai/functions/v1/api/v1/journal-lines?entity=ENTITY_ID&from=2026-01-01&to=2026-04-01&limit=500" \
-H "Authorization: Bearer ftx_YOUR_KEY"