t0 Customer API
Read and submit accounting records, post journal entries, and read financial statements for the entity your API key belongs to.
Authenticate every request with the Authorization: Bearer <key> header. The key is the scope: it resolves to exactly one entity, and every route reads or writes that entity's records.
There are two kinds of key. A key created under API keys on the T0 app's Connections page reads records, reports and the chart of accounts, and posts manual journal entries when it has the Create journal entries permission; it cannot submit records. Submitting records with POST /v1/records needs the key of a Custom API connection instead. Each Custom API connection is one integration, a source of data for the entity like a bank or a billing system, and the records submitted with its key land under it. An entity can have several, for example one per system that sends data, each with its own key; that key only submits records.
MCP clients can instead sign a user in to act with OAuth and send the access token the same way. Signed in, a user reaches every entity in their organization they can see in the T0 app, with the permissions their role gives them there: list them with GET /v1/entities and pass the chosen one as entity on every other route. Submitting records still needs an API key.
Record reads are served from the accounting system of record and are eventually consistent: a record created in act, or submitted through this API, can take up to one export cycle (nightly) to appear here. Every list response carries as_of. The chart of accounts and the financial statements under /v1/reports read act's general ledger directly and reflect every posted entry immediately.
Posting a journal entry needs a key with the Create journal entries permission (or, signed in, the app's permission to create journal entries in that entity), and every post needs an X-Idempotency-Key header or idempotency_key body field, so a retried request never posts twice. Use the GL account external_id values from /v1/gl-accounts on each line.
Amounts and currencyCode are always the record's own transaction currency. Keys under customFields that start with t0_ are reserved for act: a documented few are returned, the rest are internal, and submitting one is rejected.
Reads honour the entity's first month of books: a record is visible when its date is on or after the books start date. A dimension record (Customer, Vendor, Product, Employee) is visible once a transaction dated on or after the books start links to it; one submitted with no such transaction is stored but not returned.