Bank Reconciliations
Reconcile bank lines against entries
Credential: a company's API key or OAuth token.
Marks the bank lines reconciled against the entries named. A booked payment already posted to the
bank account is linked as it is; an invoice gets a payment entry created for it, as a draft unless
bookPayments is true.
Name targets by journalEntryIds, or by the openEntryIds the open-entries listing reports — an
invoice or credit note there is matched through its newest booked, unreconciled entry. Or name one
non-invoice draftJournalEntryId instead: the lines are reconciled against that draft alone, as the inbox
reconciles a document’s draft.
Preview it first: the preview takes this exact body and answers with the refusal the reconcile call would give.
Required Scope
bank-reconciliations-write
Headers
x-api-idempotency-keyOptional idempotency key for safely retrying mutating requests.
Reconcile bank lines against entries › Request Body
bankTransactionIdsThe bank lines to reconcile, all unreconciled. Several lines may face one target (a payment that arrived in parts), or one line several targets — not several of each.
journalEntryIdsBooked journal entries the lines settle: a payment entry already posted to the bank account, or the invoice entry a payment is to be created for. Each must be live (not reversed) and unreconciled.
openEntryIdsOpen invoices, credit notes or payments the lines settle, by the id the open-entries listing reports. An invoice or credit note is matched through its newest booked, unreconciled entry, the one the reconciliation screen would pick; a payment row is its own entry.
draftJournalEntryIdA draft journal entry the lines settle, instead of booked or open entries: an editable, unreconciled, non-invoice draft that already carries the line on the bank’s account or is balanced onto it. It is matched alone, so it cannot be combined with journalEntryIds, openEntryIds or journalCategoryId (400 BANK_RECONCILE_DRAFT_TARGET_CONFLICT). An invoice draft is refused with BANK_INBOX_INVOICE_NOT_SUPPORTED: match its payment draft instead. bookPayments books the draft in the same call.
descriptionA note stored on the reconciliation.
journalCategoryIdJournal category for a payment the reconciliation creates. Omit it to let the category be chosen the way the reconciliation screen chooses it.
bookPaymentsBook the payments the reconciliation creates in the same call. Omitted or false, they are created as drafts to book separately.
Reconcile bank lines against entries › Responses
The reconciliation was recorded
idThe reconciliation. Undo it with POST /v1/bank-reconciliations/{id}/unreconcile.
bankTransactionIdsjournalEntryIdsoffsetJournalEntryIdsUndo a bank reconciliation
Credential: a company's API key or OAuth token.
Releases the bank lines, deletes the payment drafts the reconciliation created, and reverses the
payments it booked — the last only with confirmPaymentReversal: true. Entries it only linked stay
posted unless named in alsoReverseJournalEntryIds.
Undoing an undone reconciliation is refused with BANK_RECONCILIATION_ALREADY_UNRECONCILED.
Required Scope
bank-reconciliations-write
path Parameters
reconciliationIdID of the bank reconciliation (UUID)
Headers
x-api-idempotency-keyOptional idempotency key for safely retrying mutating requests.
Undo a bank reconciliation › Request Body
reasonWhy the reconciliation is undone. Stored for the audit trail.
confirmPaymentReversalConfirms that the payments the reconciliation booked are reversed. Required when it booked any; the preview’s paymentsToReverse lists them.
reversalDatealsoReverseJournalEntryIdsEntries the undo would otherwise leave posted (the preview’s entriesStillPostedAfterUndo) to reverse as well. Any other id refuses the undo.
Undo a bank reconciliation › Responses
The reconciliation was undone
reconciliationIddeletedDraftCountreversedPaymentCountalsoReversedEntryCountCheck what undoing a reconciliation would do
Credential: a company's API key or OAuth token.
Reports the bank lines it releases, the payment drafts it deletes, the booked payments it reverses and the posted entries it only unlinks. A reconciliation settled as part of a cluster is undone with the whole cluster, and the figures cover all of it. Nothing is changed.
Answers 400 with the undo’s own refusal when a date it would post on is in a closed period. Send
confirmPaymentReversal: false to be refused, as an unconfirmed undo is, when booked payments would
be reversed.
Required Scope
bank-reconciliations-write
path Parameters
reconciliationIdID of the bank reconciliation (UUID)
Headers
x-api-idempotency-keyOptional idempotency key for safely retrying mutating requests.
Check what undoing a reconciliation would do › Request Body
reversalDateWhen the reversal of each booked payment posts: on the payment’s own date (ORIGINAL, the default) or today (TODAY).
reasonIgnored here; accepted so the undo body can be previewed as it is.
confirmPaymentReversalSend false to be answered 400 BANK_UNRECONCILE_REQUIRES_CONFIRMATION if the undo would reverse booked payments, as the undo itself would without confirmation. Omitted, the preview reports them in paymentsToReverse instead.
alsoReverseJournalEntryIdsAnswered 400 BANK_UNRECONCILE_ENTRY_NOT_REVERSIBLE when one of them is not an entry the undo would leave posted (entriesStillPostedAfterUndo), as the undo itself would refuse it.
Check what undoing a reconciliation would do › Responses
What the undo would do. Nothing was changed.
reconciliationIdbankTransactionCountBank lines released, across the whole cluster when it was settled as one.
journalEntryCountdraftsToDeletePayment drafts the reconciliation created, deleted by the undo.
paymentsToReverseBooked payments the reconciliation created, reversed by the undo once confirmed.
requiresConfirmationThe undo needs confirmPaymentReversal: true.
Posted entries the undo only unlinks; they stay posted unless named in alsoReverseJournalEntryIds.
Reconcile a batch of matches
Credential: a company's API key or OAuth token.
Reconciles up to 50 matches, each exactly as the single reconcile call
would: one at a time, in order, each in its own transaction. A refused match does not undo the others; its
row carries the code the single call would have answered with, and its errorDetails.
bookPayments applies to every match. journalCategoryId applies to the payments the matches create, and
not to a match that names a draft.
Preview it first with POST /v1/bank-reconciliations/batch/preview, which takes this exact body.
Required Scope
bank-reconciliations-write
Headers
x-api-idempotency-keyOptional idempotency key for safely retrying mutating requests.
Reconcile a batch of matches › Request Body
The matches, at most 50. Each is reconciled on its own, in order; a later match naming a bank line an earlier one names is refused with BANK_RECONCILE_BATCH_LINE_REPEATED, and one naming a draft an earlier one names with BANK_RECONCILE_BATCH_DRAFT_REPEATED.
bookPaymentsBook the payments every match creates, and a matched draft, in the same call. Omitted or false, they stay drafts.
journalCategoryIdJournal category for the payments the matches create. Not applied to a match that names a draft, which keeps its own.
Reconcile a batch of matches › Responses
One row per match: its reconciliation, or the code it was refused with.
reconciledCountfailedCountOne row per match, in order.
Check what reconciling a batch of matches would do
Credential: a company's API key or OAuth token.
Runs each match’s preview, in order, and reports per match whether the batch would reconcile it or the
code it would be refused with. Nothing is written. A match naming a bank line an earlier match names is
reported as BANK_RECONCILE_BATCH_LINE_REPEATED, and one naming a draft an earlier match names as
BANK_RECONCILE_BATCH_DRAFT_REPEATED, as the batch refuses them.
Answers 400 BANK_RECONCILE_BATCH_NOTHING_RECONCILABLE, with the per-match rows in details.results, when
no match would be reconciled.
Required Scope
bank-reconciliations-write
Headers
x-api-idempotency-keyOptional idempotency key for safely retrying mutating requests.
Check what reconciling a batch of matches would do › Request Body
The matches, at most 50. Each is reconciled on its own, in order; a later match naming a bank line an earlier one names is refused with BANK_RECONCILE_BATCH_LINE_REPEATED, and one naming a draft an earlier one names with BANK_RECONCILE_BATCH_DRAFT_REPEATED.
bookPaymentsBook the payments every match creates, and a matched draft, in the same call. Omitted or false, they stay drafts.
journalCategoryIdJournal category for the payments the matches create. Not applied to a match that names a draft, which keeps its own.
Check what reconciling a batch of matches would do › Responses
What each match would do. Nothing was written.
reconcilableCountMatches the batch would reconcile.
failedCountMatches the batch would refuse.
One row per match, in order.
Check what reconciling bank lines against entries would do
Credential: a company's API key or OAuth token.
Runs the reconciliation and rolls it back: which entries the lines would settle, the payment entries it would create with their lines, and its warnings. Nothing is written.
Takes the same body as the reconcile call. A request the reconcile call would refuse answers 400 with that refusal’s own code and details — an outgoing line against an incoming entry, an entry without a line on the bank’s account, an entry already reconciled or reversed.
Required Scope
bank-reconciliations-write
Headers
x-api-idempotency-keyOptional idempotency key for safely retrying mutating requests.
Check what reconciling bank lines against entries would do › Request Body
bankTransactionIdsThe bank lines to reconcile, all unreconciled. Several lines may face one target (a payment that arrived in parts), or one line several targets — not several of each.
journalEntryIdsBooked journal entries the lines settle: a payment entry already posted to the bank account, or the invoice entry a payment is to be created for. Each must be live (not reversed) and unreconciled.
openEntryIdsOpen invoices, credit notes or payments the lines settle, by the id the open-entries listing reports. An invoice or credit note is matched through its newest booked, unreconciled entry, the one the reconciliation screen would pick; a payment row is its own entry.
draftJournalEntryIdA draft journal entry the lines settle, instead of booked or open entries: an editable, unreconciled, non-invoice draft that already carries the line on the bank’s account or is balanced onto it. It is matched alone, so it cannot be combined with journalEntryIds, openEntryIds or journalCategoryId (400 BANK_RECONCILE_DRAFT_TARGET_CONFLICT). An invoice draft is refused with BANK_INBOX_INVOICE_NOT_SUPPORTED: match its payment draft instead. bookPayments books the draft in the same call.
descriptionA note stored on the reconciliation.
journalCategoryIdJournal category for a payment the reconciliation creates. Omit it to let the category be chosen the way the reconciliation screen chooses it.
bookPaymentsBook the payments the reconciliation creates in the same call. Omitted or false, they are created as drafts to book separately.
Check what reconciling bank lines against entries would do › Responses
What the reconciliation would do. Nothing was written.
journalEntryIdsThe journal entries the lines would be reconciled against, with open entries resolved.
The payment entries the reconciliation would create, line by line. Empty when every target is already a payment.
offsetJournalEntryIdsInvoice entries that cancel each other inside the selection and settle without a bank payment.