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
Query — limit, offset
Response — accounts, total, offset, limit
POST /v1/accounts
POST/v1/accounts
Body — number, name, type, category, report_group
Response — number, name, type, category, report_group, is_system
GET /v1/accounts//entries
GET/v1/accounts//entries
Query — startDate, endDate, limit
Response — entries, balance
GET /v1/accounts/search
GET/v1/accounts/search
Query — q, type
Response — accounts
POST /v1/bookings
POST/v1/bookings
Body — booking_date, description, lines, skip_duplicate_check, adjustment_period, fx, external_reference, custom_metadata, document_id
Response — intent_id, event_count
POST /v1/bookings/opening-balances
POST/v1/bookings/opening-balances
Body — booking_date, balances
Response — intent_id, event_count, total_debit, total_credit
POST /v1/documents
POST/v1/documents
Body — file
Response — id, 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
Query — account, startDate, endDate, search, externalReference, limit
Response — entries
GET /v1/journal/
GET/v1/journal/
Response — intent_id, entries, summary, linked_intents, metadata
POST /v1/journal/reverse
POST/v1/journal/reverse
Body — intent_id, reason, posting_mode
Response — reversal_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
Body — name, 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/
Body — name
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
Body — multipart/form-data
Response — same structure as JSON import.
GET /v1/bank-accounts/balance-history
GET/v1/bank-accounts/balance-history
Query — days
Response — history, currentBalance, startBalance
GET /v1/bank-transactions
GET/v1/bank-transactions
Query — bank_account_id, start_date, end_date, search, status, limit, offset
Response — transactions, total
POST /v1/bank-transactions
POST/v1/bank-transactions
Body — bank_account_id, transactions
Response — batch_id, total_rows, imported, skipped_duplicates, errors
GET /v1/bank-transactions/
GET/v1/bank-transactions/
Response — transaction
POST /v1/bank-transactions//dismiss
POST/v1/bank-transactions//dismiss
Response — ok
GET /v1/bank-transactions//evidence
GET/v1/bank-transactions//evidence
Response — evidence
PUT /v1/bank-transactions//evidence
PUT/v1/bank-transactions//evidence
Body — evidence_type, title, note, document_id, metadata
Response — stored evidence.
POST /v1/bank-transactions//reconcile
POST/v1/bank-transactions//reconcile
Body — intent_id, candidate_kind, open_item_account
Response — ok, 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
Body — pairs
Response — reconciled, errors
POST /v1/bank-transactions/import-file
POST/v1/bank-transactions/import-file
Body — multipart/form-data
Response — same structure as JSON import (batch_id, imported, skipped_duplicates).
GET /v1/bank-transactions/suggestions
GET/v1/bank-transactions/suggestions
Query — bank_account_id
Response — (array)
GET /v1/bank-transactions/unreconciled-count
GET/v1/bank-transactions/unreconciled-count
Response — count
Receivables
GET /v1/customers
GET/v1/customers
Query — search, is_active, limit, offset
Response — (array)
POST /v1/customers
POST/v1/customers
Body — name, 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/
Body — name, tax_id, vat_id, iban, bic, address, default_account, notes
Response — updated customer.
GET /v1/outgoing-invoices
GET/v1/outgoing-invoices
Query — customer_id, status, type, start_date, end_date, limit, offset
Response — (array)
POST /v1/outgoing-invoices
POST/v1/outgoing-invoices
Body — customer_id, document_id, invoice_number, invoice_date, due_date, total_net, total_tax, total_gross, currency, type, intent_id, notes, lines
Response — id
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/
Body — intent_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
Query — status, limit, offset
Response — (array)
POST /v1/payment-runs
POST/v1/payment-runs
Body — bank_account_id, execution_date, invoice_ids, label
Response — id, status, total_amount, invoice_count, items
GET /v1/payment-runs/
GET/v1/payment-runs/
Response — id, 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
Response — run, 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
Response — request_id, period, status, created_at, message
POST /v1/periods//lock//approve
POST/v1/periods//lock//approve
Response — period, period_number, status, locked_by, locked_at, closing_hash, request_id, approved_by
POST /v1/periods//lock//cancel
POST/v1/periods//lock//cancel
Response — ok, request_id, status
GET /v1/periods//lock/status
GET/v1/periods//lock/status
Response — has_pending_request, request_id, requested_by, created_at
POST /v1/periods//reopen
POST/v1/periods//reopen
Response — period, period_number, status
POST /v1/periods//soft-lock
POST/v1/periods//soft-lock
Response — period, period_number, status, locked_by, locked_at
Reports
GET /v1/reports
GET/v1/reports
Query — type, startDate, endDate
Response — (array)
GET /v1/reports/datev-export
GET/v1/reports/datev-export
Query — startDate, 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
Body — bank_transaction_ids, allocations, adjustments
Response — ok, match_group_id, intent_id, mode
POST /v1/bank-match-groups//unmatch
POST/v1/bank-match-groups//unmatch
Response — ok
POST /v1/contact
POST/v1/contact
Body — name, email, message, _honeypot
Response — ok
GET /v1/inbox
GET/v1/inbox
Query — status, limit, offset
Response — (array)
GET /v1/inbox/
GET/v1/inbox/
Response — id, 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
Response — confirmed, inbox_id
POST /v1/inbox//reject
POST/v1/inbox//reject
Body — reason
Response — rejected, inbox_id
GET /v1/inbox/address
GET/v1/inbox/address
Response — inbox_address
GET /v1/invoice-review-cases
GET/v1/invoice-review-cases
Query — queue_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/
Body — vendor_id, normalized_invoice
Response — Updated review case.
POST /v1/invoice-review-cases//approve
POST/v1/invoice-review-cases//approve
Response — reviewCaseId, intentId, invoiceId
POST /v1/invoice-review-cases//reject
POST/v1/invoice-review-cases//reject
Body — reason
Response — Updated review case with queue_state = "rejected".
GET /v1/invoices
GET/v1/invoices
Query — vendor_id, status, start_date, end_date, limit, offset
Response — (array)
POST /v1/invoices
POST/v1/invoices
Body — vendor_id, document_id, invoice_number, invoice_date, due_date, total_net, total_tax, total_gross, currency, intent_id, notes, lines
Response — id
GET /v1/invoices/
GET/v1/invoices/
Response — Invoice including status, remaining_amount and lines array.
PATCH /v1/invoices/
PATCH/v1/invoices/
Body — intent_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
Response — vendor_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
Query — limit, offset, outcome
Response — (array)
GET /v1/tax-codes
GET/v1/tax-codes
Query — include_inactive
Response — tax_codes
POST /v1/tax-codes
POST/v1/tax-codes
Body — code, label, description, rate, vat_account, self_assess_account
Response — code, label, description, rate, vat_account, self_assess_account, is_system, is_active
DELETE /v1/tax-codes/
DELETE/v1/tax-codes/
Response — code, is_active
PATCH /v1/tax-codes/
PATCH/v1/tax-codes/
Body — label, description, rate, vat_account, self_assess_account, is_active
Response — code, label, is_active
GET /v1/vendors
GET/v1/vendors
Query — search, is_active, limit, offset
Response — (array)
POST /v1/vendors
POST/v1/vendors
Body — name, 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/
Body — name, tax_id, vat_id, iban, bic, address, default_account, notes
Response — updated vendor.