LedgerBee Developer
  • Getting started
  • Conventions
  • Products
  • Advisor firms
  • Configuration
  • API Reference
Information
Accounts
    List accountsgetCreate an accountpostGet an accountgetDelete an accountdeleteUpdate an accountpatch
Advisor Authority Extracts
    Submit authority extract data for an advisor firm's clientspost
Advisor Clients
    List the advisor firm's clientsget
API Key
    Get current API keyget
Authority Extracts
    Submit authority extract datapost
Bank Reconciliations
    Reconcile bank lines against entriespostUndo a bank reconciliationpostCheck what undoing a reconciliation would dopostReconcile a batch of matchespostCheck what reconciling a batch of matches would dopostCheck what reconciling bank lines against entries would dopost
Bank Transactions
    List bank linesgetGet a bank linegetDismiss bank lines from reconciliationpostCheck which bank lines a dismiss would changepostRestore dismissed bank lines to reconciliationpostCheck which bank lines a restore would changepost
Billing Groups
    Form a billing grouppostGet a billing groupgetAdd members to a billing grouppostRemove a member from a billing groupdeleteCheck billing group eligibilitypost
Budgets
    List budgetsgetGet a budgetgetGet the budget vs actuals comparisongetExport a budget's Excel workbookgetOverwrite a budget's figures from an edited workbookpostList a budget's frozen baselinesgetGet a frozen baseline with its snapshot cellsgetList a budget's re-baseline proposalsgetList a budget's scenariosgetResolve a budget's grid under a scenariogetGet the variance report vs a frozen baselinegetGet the runway headlineget
Checkout
    Confirm the checkoutpostQuote a first periodpostIntegration readinessgetMint a checkout sessionpostRehydrate a sessiongetRelease the card hold (edit-after-card)postPoll card statusgetOpen the card windowpostOpen a card window for a live subscriptionpost
Company
    Get company detailsget
Connected app OAuth
    JSON Web Key Set used to verify OAuth access-token signaturesgetRFC 8414 authorization-server metadata for the connected-app OAuth servergetRFC 9728 protected-resource metadata for an MCP resourcegetRFC 9728 protected-resource metadata for an MCP resourcegetOpenID Connect discovery document for the connected-app OAuth serverget
Credit Note Links
    Link a credit note to the invoice it creditspostCheck a credit note’s links and the invoices it can be linked topostDetach a credit note from the invoices it is applied topost
Credit Notes
    List credit notesgetCreate a credit notepostGet a credit notegetGet the delivery status of a credit notegetDownload the credit note PDFgetSend a credit note to the customerpostCredit a whole invoicepost
Customers
    List customersgetCreate a customerpostGet a customergetDelete a customerdeleteUpdate a customerpatchList a customer's contactsgetList a customer's departmentsgetList customer groupsget
Dimensions
    List all dimensionsgetCreate a new dimension categorypostGet a dimensiongetUpdate a dimension categoryputDelete a dimension categorydeleteList distribution keys (paginated)getCreate a distribution keypostGet a distribution keygetList dimension values (paginated)getCreate a new dimension valuepostUpdate a dimension valueputDelete a dimension valuedelete
Discounts
    List discountsgetCreate a discountpostGet a discountgetDelete a discountdeleteUpdate a discountpatchSet a discount's amount in one currencyputRemove a discount's amount in one currencydeleteCheck whether a discount applies to a product for a customer on a daygetAssign a discountpostRemove an assignmentdeleteUpdate an assignmentpatchList a discount's codesgetAdd a code to a discountpostDelete a codedeleteUpdate a codepatchList the discounts that apply to a product for a customer on a daygetCheck a cartpostLook up a discount codeget
Document Templates
    List document templatesget
Document Upload Links
    Upload a file through a minted linkpost
Download Links
    Mint a download link for a document PDFgetDownload a minted linkget
Draft Journal Entries
    Create multiple draft journal entries in batchpostList draft journal entriesgetCreate a draft journal entrypostGet a draft journal entrygetDelete a draft journal entrydeleteBook a draft journal entrypost
Draft Journal Entries (v2)
    Create draft journal entries in batch (v2)postList draft journal entries (v2)getCreate a draft journal entry (v2)postGet a draft journal entry (v2)getDelete a draft journal entry (v2)deleteUpdate a draft journal entry (v2)patchGet attachments for a draft journal entry (v2)getAdd a document to a draft journal entry (v2)postRemove a document from a draft journal entry (v2)deleteBook a draft journal entry (v2)post
Entitlements
    List entitlementsgetCreate an entitlementpostGet an entitlementgetDelete an entitlementdeleteUpdate an entitlementpatch
Invoices
    List invoicesgetCreate a draft invoicepostGet an invoicegetDelete a draft invoicedeleteUpdate an unsent invoicepatchGet the delivery status of an invoicegetDownload the invoice PDFgetSend an invoice to the customerpost
Journal Categories
    List journal categoriesgetCreate a journal categorypostUpdate a journal categoryputDelete a journal categorydelete
Journal Entries
    List journal entriesgetGet a journal entrygetUpdate a journal entry — correct the reference and/or set your external system idpatchGet attachments for a journal entrygetAdd a document to a journal entrypostRemove a document from a journal entrydeletePreview a correction without posting itpostMove postings to different accounts, keeping the document intactpostRebuild the entry a reversal undid, as a draftpostPreview rebuilding the entry a reversal undidpostReverse a posted entry and open a draft to re-enter itpostReverse posted journal entries in batchpostPreview reversing posted journal entries in batchpostReverse a posted journal entrypostPreview reversing a posted journal entrypost
Journal Entries (v2)
    Create a journal entry (v2)postCreate journal entries in batch (v2)post
MCP
    LedgerBee Developer MCP Serverpost
Meters
    List meter subscriptions by IDgetReport usagepostList meter subscriptions by nameget
Open Entries
    List a counterparty’s open entriesget
Order Confirmations
    List order confirmationsgetCreate a draft order confirmationpostGet an order confirmationgetUpdate a draft order confirmationpatchConvert an order confirmation into an invoicepostDownload an order confirmation as PDFgetSend an order confirmationpost
Payment Methods
    List saved payment methods for a customergetCancel a saved card on the payment providerdeleteUnassign a payment method from a customerdeleteGenerate a link for the customer to save a card for future paymentspostSet a saved payment method as the customer defaultput
Portal Plans
    List the full plan cataloguegetGet a plangetResolve the gated pricing catalogue for an identified buyer (partner display)post
Portal SSO
    Get a tenant's SSO signing keys (JWKS)getMint a checkout-vouch token (partner-vouched anonymous checkout)postMint a customer-portal SSO handoff referencepostProvision a customer + grant portal access (partner JIT provisioning)postRevoke (force-refresh) a user's customer-portal sessionspost
Product Groups
    List product groupsgetCreate a product grouppostGet a product groupgetDelete a product groupdeleteUpdate a product grouppatch
Product Prices
    Create a product pricepostGet a product pricegetDelete a product pricedeleteUpdate a product pricepatchActivate a product pricepostArchive a product pricepostDisable a product pricepostSet a price as the product defaultpost
Products
    List productsgetCreate a productpostGet a productgetDelete a productdeleteUpdate a productpatchArchive a productpost
Projects
    List all projectsgetCreate or update a project by external referenceputCreate a projectpostGet a projectgetUpdate a projectputGet project profitgetAdd a subprojectpostUpdate a subprojectputDelete a subprojectdelete
Quotes
    List quotesgetCreate a draft quotepostGet a quotegetUpdate a draft quotepatchConvert a quotepostDownload a quote as PDFgetSend a quotepost
Settlements
    List a counterparty’s settlementsgetSettle open entries against each otherpostGet a settlementgetUndo a settlementpostCheck what undoing a settlement would dopostCheck what settling these entries would dopost
Shipments
    List shipmentsgetCreate a shipment from an orderpostGet a shipmentgetCancel a shipmentpostDispatch a shipmentpost
Stock
    List stock movementsgetList on-hand stockgetOn-hand for one productget
Subscriptions
    List customer subscriptionsgetAssign a subscription to a customerpostGet a customer subscription by its stable idgetUpdate a customer subscriptionpatchAdd an add-on to a customer subscriptionpostAttach existing subscriptions as add-onspostCheck whether subscriptions can become add-onspostChange the products on a customer subscriptionpostRetry a failed card paymentpostList a subscription's pending scheduled changesgetCancel a single pending scheduled changedeleteGet a subscription's unbilled usagegetCancel a customer subscriptionpostList subscription plansgetCreate a subscription planpostArchive a subscription planpost
Suppliers
    List suppliersgetCreate a supplierpostDelete a supplierdeleteList supplier contactsgetList supplier departmentsgetList supplier groupsget
VAT Codes
    List VAT codesgetCreate a VAT codepostGet a VAT codegetDelete a VAT codedeleteUpdate a VAT codepatch
VAT periods
    Record a VAT return filed outside LedgerBeepostPreview recording a VAT return filed outside LedgerBeepostSettle a filed VAT periodpostPreview a VAT period settlementpost
Vendors
    List vendorsgetCreate a vendorpostList vendor contactsgetList vendor departmentsgetList vendor groupsget
Webhook Endpoints
    List webhook endpointsgetCreate a webhook endpointpostRetrieve a webhook endpointgetUpdate a webhook endpointputDelete a webhook endpointdeleteRoll the signing secretpostSend a test eventpost
Schemas
LedgerBee Public API
LedgerBee Public API

Bank Transactions

Download schema

List bank lines

GET
https://api.ledgerbee.com/api
/v1/bank-transactions
x-api-key (header)
or
OAuth 2.0

Credential: a company's API key or OAuth token.

The bank lines on the company’s bank accounts, newest booking first, with each line’s reconciliation and dismissal state. Lines on a deleted bank account are left out; lines on a disabled one are included.

Filter by bankAccountId, by booking date (bookingDateFrom / bookingDateTo, both inclusive), by signed amount (bankAccountAmountMin / bankAccountAmountMax) and by status. Sort by bookingDate or bankAccountAmount. Page with cursor: pass the previous response’s nextCursor with the same filters and sort.

Required Scope

  • bank-transactions-read

List bank lines › query Parameters

cursor
​string

Opaque cursor from the previous response's nextCursor. Returns the rows after it, in the same order. Send the same filters and sort as the request that produced it, and do not send page. The preferred way to page through a list.

page
​number · min: 1 · deprecated

Deprecated: page with cursor instead. Page number (1-indexed). From 2026-12-31, a page past the first of a list with more than 10,000 matching rows is refused.

Default: 1
limit
​number · min: 1 · max: 100

Number of items per page

Example: 25
Default: 25
bankAccountId
​string · uuid

Only lines on this bank account. A bank account of another company returns an empty list.

bookingDateFrom
​string

Only lines booked by the bank on or after this date (YYYY-MM-DD). Filters bookingDate.

Example: 2026-01-01
bookingDateTo
​string

Only lines booked by the bank on or before this date (YYYY-MM-DD). Filters bookingDate.

Example: 2026-01-31
bankAccountAmountMin
​number

Only lines whose bankAccountAmount is at least this value. Amounts are signed: money out is negative, so bankAccountAmountMin=-500&bankAccountAmountMax=-100 selects payments of 100 to 500.

Example: -500
bankAccountAmountMax
​number

Only lines whose bankAccountAmount is at most this value. Signed, like the minimum.

Example: -100
status
​string · enum

Only lines in this state: open (waiting to be reconciled), reconciled, or dismissed (taken off reconciliation). Omit for every line.

Enum values:
open
reconciled
dismissed
sortBy
​string · enum

Sort field. Ties are broken by the line id, so a cursor walk never repeats or skips a line.

Enum values:
bookingDate
bankAccountAmount
Default: bookingDate
sortOrder
​string · enum

Sort direction

Enum values:
ASC
DESC
Default: DESC

List bank lines › Responses

One page of bank lines

PublicListBankTransactionsResponse
​PublicBankTransaction[] · required
total
​number · required

Lines matching the query, across all pages.

Example: 42
limit
​number · required

Items per page

Example: 25
nextCursor
​string | null · required

Cursor for the next page; pass it as cursor. null on the last page, and on every page of a sort that cannot page by cursor — hasMore then says whether another page follows by page number.

Example: eyJ2IjoxLCJmIjoiOWMxZjQyYWIzMTA4ZDc2ZSIsImsiOlsiMjAyNi0wMS0yMCJdfQ
hasMore
​boolean · required

Whether more rows follow this page.

Example: true
page
​number · deprecated

Deprecated: page with nextCursor instead. Current page (1-indexed).

Example: 1
totalPages
​number · deprecated

Deprecated: page with nextCursor instead. Total pages.

Example: 2
GET/v1/bank-transactions
curl https://api.ledgerbee.com/api/v1/bank-transactions \ --header 'x-api-key: <api-key>'
Example Responses
{ "data": [ { "id": "id", "bankAccountId": "bankAccountId", "bookingDate": "2026-01-15", "valueDate": "2026-01-15", "bankAccountAmount": -1250, "bankAccountCurrency": "DKK", "originalAmount": -167.5, "originalCurrency": "EUR", "originalExchangeRate": 0, "direction": "INCOMING", "description": "description", "bankText": "bankText", "reference": "reference", "paymentMessage": "paymentMessage", "counterparty": { "name": "name", "iban": "iban", "bic": "bic", "accountNumber": "accountNumber" }, "fik": { "typeCode": "typeCode", "creditorId": "creditorId", "documentId": "documentId" }, "status": "open", "reconciliation": { "reconciliationId": "reconciliationId", "journalEntryIds": [ "string" ], "draftJournalEntryIds": [ "string" ], "openEntryId": "openEntryId" }, "dismissedAt": "dismissedAt", "createdAt": "createdAt" } ], "total": 42, "page": 1, "limit": 25, "totalPages": 2, "nextCursor": "eyJ2IjoxLCJmIjoiOWMxZjQyYWIzMTA4ZDc2ZSIsImsiOlsiMjAyNi0wMS0yMCJdfQ", "hasMore": true }
json
application/json

Get a bank line

GET
https://api.ledgerbee.com/api
/v1/bank-transactions/{bankTransactionId}
x-api-key (header)
or
OAuth 2.0

Credential: a company's API key or OAuth token.

One bank line, with what it is reconciled to when it is reconciled, and when it was dismissed when it is dismissed. Answers 404 BANK_TRANSACTION_NOT_FOUND for a line of another company or on a deleted bank account.

Required Scope

  • bank-transactions-read

Get a bank line › path Parameters

bankTransactionId
​string · required

ID of the bank line (UUID)

Get a bank line › Responses

The bank line

PublicBankTransaction
id
​string · required
bankAccountId
​string · required

The bank account the line is on.

bookingDate
​string · required

The date the bank booked the line (YYYY-MM-DD).

Example: 2026-01-15
valueDate
​string · required

The date the money moved, as the bank reports it (YYYY-MM-DD).

Example: 2026-01-15
bankAccountAmount
​number · required

The amount in the bank account's currency (bankAccountCurrency). Negative for money out, positive for money in.

Example: -1250
bankAccountCurrency
​string · required

The bank account's currency, which bankAccountAmount is in.

Example: DKK
originalAmount
​number | null · required

The amount in the currency the payment was made in, when the bank reports one, such as a card purchase abroad. In originalCurrency, with the sign of bankAccountAmount; on a line whose bankAccountAmount is 0 it is the figure as the bank sent it, which may carry either sign. Null when the bank reports none.

Example: -167.5
originalCurrency
​string | null · required
originalExchangeRate
​number | null · required

The rate the bank converted at, as it reports it. Null when it reports none.

direction
​string | null · enum · required

Which way the money went. Null on a zero-amount line.

Enum values:
INCOMING
OUTGOING
description
​string · required

The line text.

bankText
​string | null · required

The bank's own text for the line, when it sends one apart from description.

reference
​string | null · required
paymentMessage
​string | null · required

The message the payer sent with the payment.

​PublicBankTransactionCounterparty · required
fik
​object | null · required

The payment slip (FIK) the line was paid with. Null when the line carries none.

status
​string · enum · required
Enum values:
open
reconciled
dismissed
reconciliation
​object | null · required

What the line is reconciled to. Null unless status is reconciled.

dismissedAt
​string | null · required

When the line was taken off reconciliation (ISO 8601). Null unless status is dismissed, and null on a dismissed line whose dismissal time was not recorded.

createdAt
​string · required

When the line was recorded in LedgerBee (ISO 8601).

GET/v1/bank-transactions/{bankTransactionId}
curl https://api.ledgerbee.com/api/v1/bank-transactions/:bankTransactionId \ --header 'x-api-key: <api-key>'
Example Responses
{ "id": "id", "bankAccountId": "bankAccountId", "bookingDate": "2026-01-15", "valueDate": "2026-01-15", "bankAccountAmount": -1250, "bankAccountCurrency": "DKK", "originalAmount": -167.5, "originalCurrency": "EUR", "originalExchangeRate": 0, "direction": "INCOMING", "description": "description", "bankText": "bankText", "reference": "reference", "paymentMessage": "paymentMessage", "counterparty": { "name": "name", "iban": "iban", "bic": "bic", "accountNumber": "accountNumber" }, "fik": { "typeCode": "typeCode", "creditorId": "creditorId", "documentId": "documentId" }, "status": "open", "reconciliation": { "reconciliationId": "reconciliationId", "journalEntryIds": [ "string" ], "draftJournalEntryIds": [ "string" ], "openEntryId": "openEntryId" }, "dismissedAt": "dismissedAt", "createdAt": "createdAt" }
json
application/json

Dismiss bank lines from reconciliation

POST
https://api.ledgerbee.com/api
/v1/bank-transactions/dismiss
x-api-key (header)
or
OAuth 2.0

Credential: a company's API key or OAuth token.

Takes the lines off reconciliation, as the bank page’s dismiss does: they need no match, typically because the bank feed delivered the same payment twice. Nothing is posted to the books. A reconciled line is left alone; undo its reconciliation first. Each line’s row says whether it was changed.

Undo it with POST /v1/bank-transactions/undismiss.

Required Scope

  • bank-reconciliations-write

Dismiss bank lines from reconciliation › Headers

x-api-idempotency-key
​string · maxLength: 255

Optional idempotency key for safely retrying mutating requests.

Dismiss bank lines from reconciliation › Request Body

PublicBankTransactionSelectionRequest
bankTransactionIds
​string[] · required

The bank lines to dismiss from reconciliation, or to restore to it, at most 50.

Dismiss bank lines from reconciliation › Responses

One row per line: changed, or the code it was left alone with.

PublicBankTransactionDismissResponse
changedCount
​number · required
unchangedCount
​number · required
​PublicBankTransactionDismissRow[] · required

One row per line, in request order.

POST/v1/bank-transactions/dismiss
curl https://api.ledgerbee.com/api/v1/bank-transactions/dismiss \ --request POST \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "bankTransactionIds": [ "string" ] }'
Example Request Body
{ "bankTransactionIds": [ "string" ] }
json
application/json
Example Responses
{ "changedCount": 0, "unchangedCount": 0, "results": [ { "bankTransactionId": "bankTransactionId", "changed": true, "errorCode": "errorCode" } ] }
json
application/json

Check which bank lines a dismiss would change

POST
https://api.ledgerbee.com/api
/v1/bank-transactions/dismiss/preview
x-api-key (header)
or
OAuth 2.0

Credential: a company's API key or OAuth token.

Reports per line whether dismissing it would take it off reconciliation, or why not: not found, reconciled (undo the reconciliation first), or already dismissed. Nothing is changed.

Answers 400 BANK_DISMISS_NOTHING_ELIGIBLE, with the rows in details.results, when no line would change.

Required Scope

  • bank-reconciliations-write

Check which bank lines a dismiss would change › Headers

x-api-idempotency-key
​string · maxLength: 255

Optional idempotency key for safely retrying mutating requests.

Check which bank lines a dismiss would change › Request Body

PublicBankTransactionSelectionRequest
bankTransactionIds
​string[] · required

The bank lines to dismiss from reconciliation, or to restore to it, at most 50.

Check which bank lines a dismiss would change › Responses

What the dismiss would change. Nothing was changed.

PublicBankTransactionDismissPreview
eligibleCount
​number · required

Lines the call would change.

ineligibleCount
​number · required

Lines the call would leave as they are.

​PublicBankTransactionDismissPreviewRow[] · required

One row per line, in request order.

POST/v1/bank-transactions/dismiss/preview
curl https://api.ledgerbee.com/api/v1/bank-transactions/dismiss/preview \ --request POST \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "bankTransactionIds": [ "string" ] }'
Example Request Body
{ "bankTransactionIds": [ "string" ] }
json
application/json
Example Responses
{ "eligibleCount": 0, "ineligibleCount": 0, "results": [ { "bankTransactionId": "bankTransactionId", "eligible": true, "errorCode": "errorCode" } ] }
json
application/json

Restore dismissed bank lines to reconciliation

POST
https://api.ledgerbee.com/api
/v1/bank-transactions/undismiss
x-api-key (header)
or
OAuth 2.0

Credential: a company's API key or OAuth token.

Puts dismissed lines back on reconciliation, so they can be matched again. Nothing is posted to the books. Each line’s row says whether it was changed.

Required Scope

  • bank-reconciliations-write

Restore dismissed bank lines to reconciliation › Headers

x-api-idempotency-key
​string · maxLength: 255

Optional idempotency key for safely retrying mutating requests.

Restore dismissed bank lines to reconciliation › Request Body

PublicBankTransactionSelectionRequest
bankTransactionIds
​string[] · required

The bank lines to dismiss from reconciliation, or to restore to it, at most 50.

Restore dismissed bank lines to reconciliation › Responses

One row per line: changed, or the code it was left alone with.

PublicBankTransactionDismissResponse
changedCount
​number · required
unchangedCount
​number · required
​PublicBankTransactionDismissRow[] · required

One row per line, in request order.

POST/v1/bank-transactions/undismiss
curl https://api.ledgerbee.com/api/v1/bank-transactions/undismiss \ --request POST \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "bankTransactionIds": [ "string" ] }'
Example Request Body
{ "bankTransactionIds": [ "string" ] }
json
application/json
Example Responses
{ "changedCount": 0, "unchangedCount": 0, "results": [ { "bankTransactionId": "bankTransactionId", "changed": true, "errorCode": "errorCode" } ] }
json
application/json

Check which bank lines a restore would change

POST
https://api.ledgerbee.com/api
/v1/bank-transactions/undismiss/preview
x-api-key (header)
or
OAuth 2.0

Credential: a company's API key or OAuth token.

Reports per line whether restoring it would put it back on reconciliation, or why not: not found, or not dismissed. Nothing is changed.

Answers 400 BANK_DISMISS_NOTHING_ELIGIBLE, with the rows in details.results, when no line would change.

Required Scope

  • bank-reconciliations-write

Check which bank lines a restore would change › Headers

x-api-idempotency-key
​string · maxLength: 255

Optional idempotency key for safely retrying mutating requests.

Check which bank lines a restore would change › Request Body

PublicBankTransactionSelectionRequest
bankTransactionIds
​string[] · required

The bank lines to dismiss from reconciliation, or to restore to it, at most 50.

Check which bank lines a restore would change › Responses

What the restore would change. Nothing was changed.

PublicBankTransactionDismissPreview
eligibleCount
​number · required

Lines the call would change.

ineligibleCount
​number · required

Lines the call would leave as they are.

​PublicBankTransactionDismissPreviewRow[] · required

One row per line, in request order.

POST/v1/bank-transactions/undismiss/preview
curl https://api.ledgerbee.com/api/v1/bank-transactions/undismiss/preview \ --request POST \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "bankTransactionIds": [ "string" ] }'
Example Request Body
{ "bankTransactionIds": [ "string" ] }
json
application/json
Example Responses
{ "eligibleCount": 0, "ineligibleCount": 0, "results": [ { "bankTransactionId": "bankTransactionId", "eligible": true, "errorCode": "errorCode" } ] }
json
application/json

Bank ReconciliationsBilling Groups