LedgerLou Docs is optimized for desktop.

Please open this page on a device with a wider screen.

88 Endpoints · OpenAPI JSON

All endpoints except POST /v1/auth/login, /forgot-password, and /setup-password require Authorization: Bearer <API key or session token>. Error codes: 400 validation · 401 not authenticated · 403 scope missing · 404 not found · 409 conflict

Journal

GET /v1/accounts

GET /v1/accounts

Querylimit, offset

Responseaccounts, total, offset, limit

POST /v1/accounts

POST /v1/accounts

Bodynumber, name, type, category, report_group

Responsenumber, name, type, category, report_group, is_system

GET /v1/accounts/
/entries

GET /v1/accounts/
/entries

QuerystartDate, endDate, limit

Responseentries, balance

GET /v1/accounts/search

GET /v1/accounts/search

Queryq, type

Responseaccounts

POST /v1/bookings

POST /v1/bookings

Bodybooking_date, description, lines, skip_duplicate_check, adjustment_period, fx, external_reference, custom_metadata, document_id

Responseintent_id, event_count

POST /v1/bookings/opening-balances

POST /v1/bookings/opening-balances

Bodybooking_date, balances

Responseintent_id, event_count, total_debit, total_credit

POST /v1/documents

POST /v1/documents

Bodyfile

Responseid, mime_type, original_name

GET /v1/documents/
/file

GET /v1/documents/
/file

Response — Binary file with Content-Type (e.g. application/pdf) and Content-Disposition: attachment; filename="originalname.pdf".

GET /v1/documents/
/preview

GET /v1/documents/
/preview

Response — Binary file with Content-Type (e.g. application/pdf) and Content-Disposition: inline; filename="originalname.pdf".

GET /v1/journal

GET /v1/journal

Queryaccount, startDate, endDate, search, externalReference, limit

Responseentries

GET /v1/journal/

GET /v1/journal/

Responseintent_id, entries, summary, linked_intents, metadata

POST /v1/journal/reverse

POST /v1/journal/reverse

Bodyintent_id, reason, posting_mode

Responsereversal_intent_id, original_intent_id, event_count

Bank

GET /v1/bank-accounts

GET /v1/bank-accounts

Response — (array)

POST /v1/bank-accounts

POST /v1/bank-accounts

Bodyname, iban, bic, account_number, currency

Response — created bank account.

GET /v1/bank-accounts/

GET /v1/bank-accounts/

Response — Bank account including tx_count, unreconciled_count and last_tx_date.

PUT /v1/bank-accounts/

PUT /v1/bank-accounts/

Bodyname

Response — updated bank account.

GET /v1/bank-accounts/
/reconciliation

GET /v1/bank-accounts/
/reconciliation

Response — Side-by-side view with open vs. reconciled transactions and current booking state. ledger.amount / unmatched_ledger.amount are in currency; additionally base_amount is returned in base_currency.

POST /v1/bank-accounts/
/upload

POST /v1/bank-accounts/
/upload

Bodymultipart/form-data

Response — same structure as JSON import.

GET /v1/bank-accounts/balance-history

GET /v1/bank-accounts/balance-history

Querydays

Responsehistory, currentBalance, startBalance

GET /v1/bank-transactions

GET /v1/bank-transactions

Querybank_account_id, start_date, end_date, search, status, limit, offset

Responsetransactions, total

POST /v1/bank-transactions

POST /v1/bank-transactions

Bodybank_account_id, transactions

Responsebatch_id, total_rows, imported, skipped_duplicates, errors

GET /v1/bank-transactions/

GET /v1/bank-transactions/

Responsetransaction

POST /v1/bank-transactions/
/dismiss

POST /v1/bank-transactions/
/dismiss

Responseok

GET /v1/bank-transactions/
/evidence

GET /v1/bank-transactions/
/evidence

Responseevidence

PUT /v1/bank-transactions/
/evidence

PUT /v1/bank-transactions/
/evidence

Bodyevidence_type, title, note, document_id, metadata

Response — stored evidence.

POST /v1/bank-transactions/
/reconcile

POST /v1/bank-transactions/
/reconcile

Bodyintent_id, candidate_kind, open_item_account

Responseok, mode, intent_id

POST /v1/bank-transactions/
/unmatch

POST /v1/bank-transactions/
/unmatch

Response — Result of the removal.

POST /v1/bank-transactions/batch-reconcile

POST /v1/bank-transactions/batch-reconcile

Bodypairs

Responsereconciled, errors

POST /v1/bank-transactions/import-file

POST /v1/bank-transactions/import-file

Bodymultipart/form-data

Response — same structure as JSON import (batch_id, imported, skipped_duplicates).

GET /v1/bank-transactions/suggestions

GET /v1/bank-transactions/suggestions

Querybank_account_id

Response — (array)

GET /v1/bank-transactions/unreconciled-count

GET /v1/bank-transactions/unreconciled-count

Responsecount

Receivables

GET /v1/customers

GET /v1/customers

Querysearch, is_active, limit, offset

Response — (array)

POST /v1/customers

POST /v1/customers

Bodyname, tax_id, vat_id, iban, bic, address, default_account, notes

Response — created customer.

DELETE /v1/customers/

DELETE /v1/customers/

Response — deactivated customer.

GET /v1/customers/

GET /v1/customers/

Response — Customer including open_amount.

PUT /v1/customers/

PUT /v1/customers/

Bodyname, tax_id, vat_id, iban, bic, address, default_account, notes

Response — updated customer.

GET /v1/outgoing-invoices

GET /v1/outgoing-invoices

Querycustomer_id, status, type, start_date, end_date, limit, offset

Response — (array)

POST /v1/outgoing-invoices

POST /v1/outgoing-invoices

Bodycustomer_id, document_id, invoice_number, invoice_date, due_date, total_net, total_tax, total_gross, currency, type, intent_id, notes, lines

Responseid

GET /v1/outgoing-invoices/

GET /v1/outgoing-invoices/

Response — Outgoing invoice including status, remaining_amount and lines array.

PATCH /v1/outgoing-invoices/

PATCH /v1/outgoing-invoices/

Bodyintent_id, notes, due_date

Response — updated outgoing invoice.

GET /v1/outgoing-invoices/open-items

GET /v1/outgoing-invoices/open-items

Response — (array)

Payables

GET /v1/payment-runs

GET /v1/payment-runs

Querystatus, limit, offset

Response — (array)

POST /v1/payment-runs

POST /v1/payment-runs

Bodybank_account_id, execution_date, invoice_ids, label

Responseid, status, total_amount, invoice_count, items

GET /v1/payment-runs/

GET /v1/payment-runs/

Responseid, status, items

POST /v1/payment-runs/
/approve

POST /v1/payment-runs/
/approve

Response — Approve payment run

POST /v1/payment-runs/
/cancel

POST /v1/payment-runs/
/cancel

Response — Cancel payment run

POST /v1/payment-runs/
/complete

POST /v1/payment-runs/
/complete

Response — Complete payment run

POST /v1/payment-runs/
/export

POST /v1/payment-runs/
/export

Responserun, sepa_xml, message_id, number_of_transactions, control_sum

GET /v1/payment-runs/eligible-invoices

GET /v1/payment-runs/eligible-invoices

Response — (array)

Periods

GET /v1/periods

GET /v1/periods

Response — (array)

POST /v1/periods/
/lock

POST /v1/periods/
/lock

Responserequest_id, period, status, created_at, message

POST /v1/periods/
/lock/
/approve

POST /v1/periods/
/lock/
/approve

Responseperiod, period_number, status, locked_by, locked_at, closing_hash, request_id, approved_by

POST /v1/periods/
/lock/
/cancel

POST /v1/periods/
/lock/
/cancel

Responseok, request_id, status

GET /v1/periods/
/lock/status

GET /v1/periods/
/lock/status

Responsehas_pending_request, request_id, requested_by, created_at

POST /v1/periods/
/reopen

POST /v1/periods/
/reopen

Responseperiod, period_number, status

POST /v1/periods/
/soft-lock

POST /v1/periods/
/soft-lock

Responseperiod, period_number, status, locked_by, locked_at

Reports

GET /v1/reports

GET /v1/reports

Querytype, startDate, endDate

Response — (array)

GET /v1/reports/datev-export

GET /v1/reports/datev-export

QuerystartDate, endDate

Response — Generate DATEV export

GET /v1/reports/monthly-revenue-expenses

GET /v1/reports/monthly-revenue-expenses

Response — (array)

Other Endpoints

POST /v1/bank-match-groups

POST /v1/bank-match-groups

Bodybank_transaction_ids, allocations, adjustments

Responseok, match_group_id, intent_id, mode

POST /v1/bank-match-groups/
/unmatch

POST /v1/bank-match-groups/
/unmatch

Responseok

POST /v1/contact

POST /v1/contact

Bodyname, email, message, _honeypot

Responseok

GET /v1/inbox

GET /v1/inbox

Querystatus, limit, offset

Response — (array)

GET /v1/inbox/

GET /v1/inbox/

Responseid, document_id, status, ocr_extraction, ocr_raw, vendor_match, compliance_check, source_email, source_subject, original_name, created_at

POST /v1/inbox/
/confirm

POST /v1/inbox/
/confirm

Responseconfirmed, inbox_id

POST /v1/inbox/
/reject

POST /v1/inbox/
/reject

Bodyreason

Responserejected, inbox_id

GET /v1/inbox/address

GET /v1/inbox/address

Responseinbox_address

GET /v1/invoice-review-cases

GET /v1/invoice-review-cases

Queryqueue_state, limit, offset

Response — Array of review cases with queue state, normalized invoice payload, vendor candidates and any posting errors.

GET /v1/invoice-review-cases/

GET /v1/invoice-review-cases/

Response — Review case object.

PATCH /v1/invoice-review-cases/

PATCH /v1/invoice-review-cases/

Bodyvendor_id, normalized_invoice

Response — Updated review case.

POST /v1/invoice-review-cases/
/approve

POST /v1/invoice-review-cases/
/approve

ResponsereviewCaseId, intentId, invoiceId

POST /v1/invoice-review-cases/
/reject

POST /v1/invoice-review-cases/
/reject

Bodyreason

Response — Updated review case with queue_state = "rejected".

GET /v1/invoices

GET /v1/invoices

Queryvendor_id, status, start_date, end_date, limit, offset

Response — (array)

POST /v1/invoices

POST /v1/invoices

Bodyvendor_id, document_id, invoice_number, invoice_date, due_date, total_net, total_tax, total_gross, currency, intent_id, notes, lines

Responseid

GET /v1/invoices/

GET /v1/invoices/

Response — Invoice including status, remaining_amount and lines array.

PATCH /v1/invoices/

PATCH /v1/invoices/

Bodyintent_id, notes, due_date

Response — updated invoice.

GET /v1/invoices/open-items

GET /v1/invoices/open-items

Response — (array)

POST /v1/ocr/extract

POST /v1/ocr/extract

Responsevendor_name, vendor_vat_id, vendor_iban, vendor_address, invoice_number, invoice_date, due_date, total_net, total_tax, total_gross, currency, line_items, payment_terms, reference_text, raw_markdown

GET /v1/payables/ingestion-log

GET /v1/payables/ingestion-log

Querylimit, offset, outcome

Response — (array)

GET /v1/tax-codes

GET /v1/tax-codes

Queryinclude_inactive

Responsetax_codes

POST /v1/tax-codes

POST /v1/tax-codes

Bodycode, label, description, rate, vat_account, self_assess_account

Responsecode, label, description, rate, vat_account, self_assess_account, is_system, is_active

DELETE /v1/tax-codes/

DELETE /v1/tax-codes/

Responsecode, is_active

PATCH /v1/tax-codes/

PATCH /v1/tax-codes/

Bodylabel, description, rate, vat_account, self_assess_account, is_active

Responsecode, label, is_active

GET /v1/vendors

GET /v1/vendors

Querysearch, is_active, limit, offset

Response — (array)

POST /v1/vendors

POST /v1/vendors

Bodyname, tax_id, vat_id, iban, bic, address, default_account, notes

Response — created vendor.

DELETE /v1/vendors/

DELETE /v1/vendors/

Response — deactivated vendor.

GET /v1/vendors/

GET /v1/vendors/

Response — Vendor including open_amount.

PUT /v1/vendors/

PUT /v1/vendors/

Bodyname, tax_id, vat_id, iban, bic, address, default_account, notes

Response — updated vendor.