Skip to main content
A Bank Account is a real-world account an Entity holds at a financial institution, such as a checking account or a credit card. Each account is scoped to a single Entity, denominated in one currency, and mapped to exactly one Ledger Account where its booked activity accumulates. This page covers the endpoints for managing Bank Accounts and their optional bank data feeds.
Open in the app. This resource has a page in the Sintropix web app at https://app.sintropix.com/{entityId}/banks/{bankAccountId}, where each id in braces is the same UUID as in the API route or response. That page is the reconciliation view for the account. Account settings are at /{entityId}/settings/bank-accounts, and ?open={bankAccountId} there opens the account's edit. When you mention a record to a user, include that link. See Link to the App for the full URL grammar.

Base path

All Bank Account routes are prefixed under:
Feed sub-routes live under:
Path parameters :entityId and :bankAccountId are UUIDs. To start a feed, connect a bank Provider as an Integration, then map one of its discovered accounts to a Bank Account. See Bank Feeds.

Authentication

Use a session cookie or pass x-api-key: $SINTROPIX_API_KEY. Mutations with an API key also require x-audit-actor: my-agent. See Get an API Key.

Bank Account kinds

A Bank Account has one of two kinds, validated at creation against the mapped Ledger Account’s type:

List bank accounts

Returns every Bank Account for the Entity with a computed summary. The response is a bare JSON array; each element has the fields below.

Response schema

Each Bank Account in the list carries: The last two fields (balance and unreconciledCount) are the summary; endpoints that return a Bank Account without summary omit them. The feed object, when present, contains:

Example

Create a bank account

Creates a new Bank Account.

Body parameters

Response

Returns 201 Created with the created Bank Account, including the balance and unreconciledCount summary fields, in the same shape as the list response.

Status codes

Example

Update a bank account

Updates the name, the account number, and the bank of an existing Bank Account. Only name, accountNumber, and bankCode are editable through this endpoint.

Body parameters

Response

Returns 200 OK with the updated Bank Account, in the same shape as the list response minus balance and unreconciledCount.

Status codes

Example

Delete a bank account

Removes a Bank Account. Deletion is allowed only when the account has no Movements and no active feed.

Response

Returns 200 OK with:

Status codes

Example

Delete a bank account feed

Removes the active bank data feed from a Bank Account. The account and its existing Movements remain; no new feed data will be ingested.

Response

Returns 200 OK with the Bank Account, in the same shape as the list response minus balance and unreconciledCount; feed is now null.

Status codes

Example

Sync a bank account feed

Triggers a manual sync of the Bank Account’s feed. The server reads the latest window from the Provider, lands new Movements, and records the outcome. Sintropix also syncs every feed on its own every four hours, with the same rules. A sync lands its Movements even when they don’t add up to the balance the Provider reports. It then flags the feed as out of tie-out. See Tie-out. The only sync that lands nothing is one that finds a restatement it can’t take by itself. A sync also updates the Movements it already landed when the Provider changed them since, whether they’re unbooked, booked, or reconciled:
  • The description becomes the Provider’s newest text for the Movement. Some banks complete a movement’s text a day after it posts, so the description fills in with the counterparty on the next sync.
  • The Additional Information lines the Provider writes are rewritten. Lines you added stay, in their order.
  • The Partner is set from the counterparty’s tax ID, such as a RUT, only when the Movement has none.
A sync never changes a landed Movement’s amount, side, or date, and never touches the Ledger Entry that books it, so the entry’s memo stays as you wrote it. A changed description isn’t a restatement. Each Movement it updates counts in updatedCount.

Response

Returns 201 Created with:

Status codes

Example

Tie-out

Each sync checks that the Bank Account’s Movements add up to the balance the Provider reports. The feed keeps the verdict of the last sync that judged it, and every read of the Bank Account serves it as feed.tieOut: The other side of the check is the Bank Account’s balance, the sum of its Movements. The difference is reportedBalance minus balance. Nothing blocks on out_of_tie_out: Movements keep landing, and you can book and reconcile them as usual. Use since to tell a short lag from a lasting difference. Most differences clear on their own within two days. If one lasts longer, contact Sintropix support. In the app, the movement queue of the Bank Account shows the verdict on every load, whether you or the scheduled sync ran it. An account out of tie-out shows No cuadra con el banco desde …, with the balance the bank reports, the sum of the Movements, and the difference.

Restatement

A restatement is a Movement the feed already landed that the Provider no longer serves: it dropped it, or serves it again under another reference. Only Movements dated inside the window the Provider still serves count, from the feed start date on. A Provider whose history simply stops reaching its oldest days isn’t restating anything. Landing that window as it is would write the Movement twice. Instead, the restated Movements give way to the Provider’s version: Sintropix deletes them and lands what the Provider serves now. That happens in one of two ways. The sync takes it by itself when both of these hold:
  • No restated Movement is booked or excluded.
  • Each restated day still adds up: the restated Movements of the day sum to what the Provider now serves for that day that the feed hasn’t landed.
The sync then replaces the restated Movements and lands the window as usual, with no 409. Otherwise, a person accepts it. The sync lands nothing, sets feed.tieOut.status to restated, and answers 409:
restatedExternalRefs lists the Provider references of the landed Movements the Provider no longer serves. Every later sync is refused the same way until someone accepts the Provider’s version. The first refused sync also opens a Task in the Organization’s Tareas that names the Bank Account. To accept it in the app:
  1. Open the Bank Account. Its movement queue shows Sincronización detenida desde ….
  2. Click Revisar cambios del banco. The dialog lists each restated day, with the Movements in the books (En los libros) beside what the bank lists now (El banco informa ahora), and the total of each side.
  3. If a restated Movement is marked Contabilizado or Excluido, unbook it or include it again first.
  4. Click Aceptar la versión del banco.
Accepting takes the Provider’s version whatever each day adds up to. It refuses while a restated Movement is booked or excluded, because replacing it would undo a person’s decision. The ERP Thread and files of a replaced Movement are deleted with it.

GET /feed/restatement

Read the restatement day by day. Sintropix reads it live from the Provider each time and stores nothing. days is empty when the Provider restates nothing. Each item of days:

POST /feed/restatement/acceptance

Accept the Provider’s version of the restatement you reviewed. Sintropix deletes the restated Movements and lands the window, as a sync does. It needs the books write permission, so a viewer can’t accept. Returns 201 Created with the sync result: landedCount, skippedCount, and updatedCount. The feed’s tie-out is judged again, as on any sync.

Rate limits

Bank Account endpoints share the global rate limit of 25,000 requests per hour per API key.