Synced API
Call Synced's operations from your own systems or an AI assistant: bills to pay, bank transactions, financial statements, account transactions and documents, for the organisations a token was approved for.
Base URL https://api.syncedhq.com · OpenAPI /v1/openapi.json
The Synced API lets your own systems, a third-party app or an AI assistant call the same operations a Synced workflow uses: the bills waiting to be paid, the bank transactions still to reconcile, a Profit and Loss, what was coded to an account. Every call acts for one organisation, the one the access token was approved for, and never for anything else.
What is exposed
Only operations a Synced admin has switched on under Admin › Integrations › Synced › Operations (the API & MCP column) appear here, and only those. The reference on these pages is generated from the API's own OpenAPI document, so it is always exactly what the API serves today. If an operation you expected is missing, it has not been exposed.
Base URL
| Environment | Base URL |
|---|---|
| Production | https://api.syncedhq.com |
| Staging | https://staging-api.syncedhq.com |
Every operation lives at /v1/operations/{key}, where the key is the operation's name, such as bills.list_to_pay. The OpenAPI document is at /v1/openapi.json.
Your first call
- Get an access token (see Authentication). For a quick look, sign in on any operation page here and the console does it for you.
- Call an operation with the token as a bearer header:
curl 'https://api.syncedhq.com/v1/operations/bills.list_to_pay' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
- If your token was approved for more than one organisation, name the one this call is for in the
Synced-Organisationheader (see Organisations).
A GET operation takes its inputs as query-string parameters. Every other method takes a JSON body. Responses are JSON.
Trying requests on these pages
Each operation page has a console. Sign in with Synced sends you to Synced to approve access for the organisations you choose; the token stays in your browser's memory, never on this site's servers, and expires within an hour. Requests go straight from your browser to the API. An operation that changes data asks you to confirm before it sends.
Guides
Operations
Everything the API exposes today, generated from its OpenAPI document. Each page has the inputs, the response and a console to try it.
Banking
- GETList bank accounts
banking.accountsThe organisation's bank and card accounts, as the Transactions screen in Synced lists them: each account's id, name, number, bank, currency, how many transactions it has and how many are still to reconcile, and its balance as Synced derives it from the imported transactions. Use search to narrow it (matches name, number or bank). Use it to find the account before asking for its transactions. - GETBank transactions
banking.transactionsThe bank and card transactions on the Transactions screen in Synced, newest first. account names one account (name, number or id; banking.accounts lists them); leave it out for every account. status is to_reconcile, reconciled or all (the default). Set the period with period (this_month, last_month, this_quarter, last_quarter, ytd, last_year) or from and to (yyyy-MM-dd); the default is the last three months. search matches the bank narration or the matched supplier; amountMin and amountMax bound the size of the amount, money in or out alike. Each transaction has its date, narration, amount (negative for money spent), account, status and reconciledIn: synced (matched to a document in Synced), accounting_system (reconciled in Xero or QuickBooks) or outside_synced (marked reconciled outside Synced). A transaction matched in Synced carries linked: the document's id, number, type, supplier, total, what it is coded to and a link to open it (documents.get takes the id for its lines). totals cover the whole period and account(s), whatever status or search. It is paged: limit (default 100, at most 500) and page; hasMore says there is another page.
Bills
- GETList Bills To Pay Filters
bills.list_saved_filtersLists the organisation's saved Bills to Pay filters: name, description, and how many outstanding bills each matches with their total amount due. Pass a name to bills_list_to_pay as its filter. - GETList Bills To Pay
bills.list_to_payLists the organisation's outstanding bills and expense claims (Bills to Pay): supplier, invoice number, type, date, due date, scheduled date, tags, currency, original amount, amount due in the base currency and latest note, with the count and total. Leave filter empty for every outstanding bill. To narrow to one of the organisation's saved Bills to Pay filters, pass its name, or words from its name or description; call bills_list_saved_filters to see them. An unknown or ambiguous filter is answered with the list of filters to choose from.
Documents
- GETGet a document's file
documents.fileOne Synced document's original file (the PDF or image of the bill or receipt as it arrived), base64, up to 10 MB. Synced's account-transactions view calls this to show the document; to read a document's supplier, totals and lines, use documents.get instead. The id is a document id from ledger.account_transactions or documents.get. An id that is not one of this organisation's documents, or a document with no file, is not found. - GETGet documents
documents.getSynced documents by id: one, or several separated by commas (up to 50). Each comes with its supplier, number, dates, currency and totals; its coded lines (the account, tax, class and customer each line was published with); and its invoice line items (what the supplier's invoice itself listed: product code, quantity, unit, unit price, tax and amount). The ids are the document ids ledger.account_transactions returns. An id that is not one of this organisation's documents is listed under notFound.
Reports
- GETBalance Sheet
reports.balance_sheetThe organisation's Balance Sheet, read live from Xero or QuickBooks: assets, liabilities and equity at a date. Give the date with asAt (yyyy-MM-dd), or a period preset (this_month, last_month, this_quarter, last_quarter, ytd, last_year) for its last day. To compare, set comparePeriods (1 to 12) and compareBy (month or year). The response lists the dates once (current first) and every section, group and account with one amount per date, in that order, plus Total Assets and Total Liabilities and Equity. - GETProfit and Loss
reports.profit_and_lossThe organisation's Profit and Loss (income statement), read live from Xero or QuickBooks. Choose the period with period (this_month, last_month, this_quarter, last_quarter, ytd, last_year), or set period to custom with from and to. To compare, set comparePeriods (1 to 12) and compareBy (month or year): comparePeriods 2 with compareBy year gives this period and the same period in each of the two years before. The response lists the periods once (current first) and every section, group and account with one amount per period, in that order, plus Gross Profit and Net Profit.
