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

Vendors

Download schema

deprecated

List vendors

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

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

Retrieves all vendors for your company, sorted by vendor number. Each vendor carries its full metadata map.

Pass metadata[key]=value query parameters to return only the vendors whose metadata carries every given key with exactly the given value (AND semantics, exact match, at most 10 pairs). A request with more than 10 pairs returns 400 with error code METADATA_TOO_MANY_FILTERS.

The unfiltered list is cached for 5 seconds; creating a vendor through this API invalidates the cache, so a just-created vendor is immediately visible. A filtered list is never cached, so a metadata change is visible on the next filtered read.

Pagination

The list is returned in full, as an array, unless you send cursor, page or limit. Sending any of them switches the response to a paginated object (data, total, page, limit, totalPages, nextCursor, hasMore); page and limit take their defaults when omitted. A paginated read is never cached.

To walk the whole list, send limit and then pass each response's nextCursor back as cursor, with the same filters, until hasMore is false. Paging by page is deprecated, and page cannot be sent with cursor (400 PAGINATION_CURSOR_WITH_PAGE). A cursor replayed with other filters is refused with 400 PAGINATION_INVALID_CURSOR. From 2026-12-31, a page past the first of a list with more than 10,000 items is refused with 400 PAGINATION_OFFSET_TOO_DEEP.

DEPRECATED — sunset on 2026-12-31 (RFC 8594; every response carries Deprecation/Sunset/Link headers). Migrate to the supplier endpoints under /api/v1/suppliers — identical shapes with supplier-named fields and SUPPLIER_* error codes.

Required Scope

  • suppliers-read

List vendors › query Parameters

​object · style: deepObject · explode: true

Exact-match metadata filters in the form metadata[key]=value. Multiple pairs combine with AND semantics — a record matches only if it carries every given key with exactly the given value. At most 10 pairs per request.

cursor
​string · maxLength: 4096

Opaque cursor from the previous response's nextCursor. Returns the items after it, in the same order. Send the same filters as the request that produced it, and do not send page. The preferred way to page through the list. Sending cursor, page or limit switches the response from the full array to a paginated object.

page
​integer · min: 1 · max: 100000 · deprecated

Deprecated: page with cursor instead. Page number (1-indexed). Sending cursor, page or limit switches the response from the full array to a paginated object. When only limit or cursor is sent, page is 1.

limit
​integer · min: 1 · max: 100

Number of items per page. Sending cursor, page or limit switches the response from the full array to a paginated object. When limit is omitted from a paginated request, it is 25.

List vendors › Responses

The full list of vendors matching the given filters, or one page of it when cursor, page or limit is sent

oneOf
Exactly one variant must match.

Decision Table

VariantMatching Criteria
type = array
type = object · requires: data, total, page +4 more
Properties for Variant 1:
​VendorResponse[]
VendorResponse
id
​string · required

The unique identifier of the vendor

Example: 550e8400-e29b-41d4-a716-446655440000
vendorNumber
​string · required

Vendor number

Example: V001
name
​string · required

Name of the vendor

Example: Acme Supplies
vendorGroupId
​string · required

Vendor group ID

Example: 550e8400-e29b-41d4-a716-446655440001
currency
​string · required

Currency code

Example: DKK
status
​string · enum · required

Vendor status

Enum values:
active
inactive
archived
Example: active
vendorGroupName
​string

Vendor group name

Example: Domestic Vendors
email
​string

Email address

Example: contact@acme-supplies.com
phone
​string

Phone number

Example: +45 12345678
address
​string

Street address

Example: 123 Main Street
city
​string

City

Example: Copenhagen
postalCode
​string

Postal code

Example: 2100
countryCode
​string

Two-letter country code (ISO 3166-1 alpha-2)

Example: DK
vatNumber
​string

VAT registration number

Example: DK12345678
attention
​string

Attention field

Example: Accounts Payable
paymentTerms
​number

Payment terms in days

Example: 30
openingBalance
​number

Opening balance in the company base currency (signed: positive = we owe the vendor)

Example: 1000
​object

Key-value metadata attached to the vendor

Example: {"erpVendorId":"V-10042","tier":"preferred"}
GET/v1/vendors
curl https://api.ledgerbee.com/api/v1/vendors \ --header 'x-api-key: <api-key>'
Example Responses
[ { "id": "550e8400-e29b-41d4-a716-446655440000", "vendorNumber": "V001", "name": "Acme Supplies", "vendorGroupId": "550e8400-e29b-41d4-a716-446655440001", "vendorGroupName": "Domestic Vendors", "email": "contact@acme-supplies.com", "phone": "+45 12345678", "address": "123 Main Street", "city": "Copenhagen", "postalCode": "2100", "countryCode": "DK", "vatNumber": "DK12345678", "currency": "DKK", "attention": "Accounts Payable", "paymentTerms": 30, "openingBalance": 1000, "status": "active", "metadata": { "erpVendorId": "V-10042", "tier": "preferred" } } ]
json
application/json

deprecated

Create a vendor

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

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

Creates a vendor together with its contacts.

vendorNumber is trimmed and must be unique within your company — a duplicate returns 400 with error code VENDOR_NUMBER_ALREADY_EXISTS.

Exactly one contact must be marked as default. When you provide a single contact it is made the default automatically; otherwise a missing or duplicated default returns 400 with error code CONTACT_DEFAULT_REQUIRED or CONTACT_MULTIPLE_DEFAULTS.

vendorGroupId must reference an existing vendor group in your company (404 VENDOR_GROUP_NOT_FOUND), and defaultAccountId, when provided, must reference an existing ledger account (404 LEDGER_NOT_FOUND).

An optional metadata map (string keys to string values, at most 50 entries, keys up to 128 characters, values up to 500 characters) is stored with the vendor. An invalid map is rejected before the vendor is created, with error code METADATA_KEY_REQUIRED, METADATA_KEY_TOO_LONG, METADATA_VALUE_TOO_LONG, METADATA_DUPLICATE_KEY or METADATA_TOO_MANY_ENTRIES.

The response contains only the new vendor's id and vendorNumber; fetch the full record, including its metadata, via the list endpoint.

DEPRECATED — sunset on 2026-12-31 (RFC 8594; every response carries Deprecation/Sunset/Link headers). Migrate to the supplier endpoints under /api/v1/suppliers — identical shapes with supplier-named fields and SUPPLIER_* error codes.

Required Scope

  • suppliers-write

Create a vendor › Headers

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

Optional idempotency key for safely retrying mutating requests.

Create a vendor › Request Body

CreateVendorRequest
vendorNumber
​string · required

Unique vendor number

Example: V001
name
​string · required

Vendor name

Example: Acme Supplies
vendorGroupId
​string · required

Vendor group ID

Example: 550e8400-e29b-41d4-a716-446655440001
currency
​string · pattern: ^[A-Za-z]{3}$ · required

The currency this vendor bills us in, ISO 4217 alpha-3.

Example: DKK
countryCode
​string · required

Two-letter country code

Example: DK
​CreateVendorContactRequest[] · minItems: 1 · maxItems: 50 · required

Contacts for the vendor. At least one contact with isDefault: true is required.

email
​string

Email address

Example: contact@acme-supplies.com
phone
​string

Phone number

Example: +45 12345678
address
​string · maxLength: 255

Street address

Example: 123 Main Street
city
​string

City

Example: Copenhagen
postalCode
​string

Postal code

Example: 2100
vatNumber
​string

VAT registration number

Example: DK12345678
attention
​string

Attention field

Example: Accounts Payable
paymentTerms
​number · min: 0

Payment terms in days

Example: 30
openingBalance
​number

Opening balance in the company base currency, seeding payables that predate LedgerBee. Signed: positive = we owe the vendor, negative = a credit position.

Example: 1000
defaultAccountId
​string

Default ledger account ID

Example: 550e8400-e29b-41d4-a716-446655440002
​object

Key-value metadata to attach to the vendor. At most 50 entries; keys up to 128 characters, string values up to 500 characters. Read it back, or filter on it, through the list endpoint.

Example: {"erpVendorId":"V-10042"}

Create a vendor › Responses

Vendor created successfully

CreateVendorResponse
id
​string · required

The unique identifier of the created vendor

Example: 550e8400-e29b-41d4-a716-446655440000
vendorNumber
​string · required

Vendor number

Example: V001
POST/v1/vendors
curl https://api.ledgerbee.com/api/v1/vendors \ --request POST \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "vendorNumber": "V001", "name": "Acme Supplies", "vendorGroupId": "550e8400-e29b-41d4-a716-446655440001", "currency": "DKK", "countryCode": "DK", "email": "contact@acme-supplies.com", "phone": "+45 12345678", "address": "123 Main Street", "city": "Copenhagen", "postalCode": "2100", "vatNumber": "DK12345678", "attention": "Accounts Payable", "paymentTerms": 30, "openingBalance": 1000, "defaultAccountId": "550e8400-e29b-41d4-a716-446655440002", "contacts": [ { "name": "John Doe", "email": "john.doe@acme-supplies.com", "phone": "+45 12345678", "isDefault": true } ], "metadata": { "erpVendorId": "V-10042" } }'
Example Request Body
{ "vendorNumber": "V001", "name": "Acme Supplies", "vendorGroupId": "550e8400-e29b-41d4-a716-446655440001", "currency": "DKK", "countryCode": "DK", "email": "contact@acme-supplies.com", "phone": "+45 12345678", "address": "123 Main Street", "city": "Copenhagen", "postalCode": "2100", "vatNumber": "DK12345678", "attention": "Accounts Payable", "paymentTerms": 30, "openingBalance": 1000, "defaultAccountId": "550e8400-e29b-41d4-a716-446655440002", "contacts": [ { "name": "John Doe", "email": "john.doe@acme-supplies.com", "phone": "+45 12345678", "isDefault": true } ], "metadata": { "erpVendorId": "V-10042" } }
json
application/json
Example Responses
{ "id": "550e8400-e29b-41d4-a716-446655440000", "vendorNumber": "V001" }
json
application/json

deprecated

List vendor contacts

GET
https://api.ledgerbee.com/api
/v1/vendors/{vendorId}/contacts
x-api-key (header)
or
OAuth 2.0

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

Retrieves all contacts for a vendor, with the default contact first and the rest sorted alphabetically by name.

Returns 404 with error code VENDOR_NOT_FOUND when the vendor does not exist in your company.

DEPRECATED — sunset on 2026-12-31 (RFC 8594; every response carries Deprecation/Sunset/Link headers). Migrate to the supplier endpoints under /api/v1/suppliers — identical shapes with supplier-named fields and SUPPLIER_* error codes.

Required Scope

  • suppliers-read

List vendor contacts › path Parameters

vendorId
​string · required

Vendor ID

List vendor contacts › Responses

List of contacts for a vendor

​VendorContactResponse[]
VendorContactResponse
id
​string · required

The unique identifier of the contact

Example: 550e8400-e29b-41d4-a716-446655440000
name
​string · required

Name of the contact

Example: John Doe
isDefaultForVendor
​boolean · required

Whether this is the default contact for the vendor

Example: true
email
​string

Email address

Example: john.doe@acme-supplies.com
phone
​string

Phone number

Example: +45 12345678
GET/v1/vendors/{vendorId}/contacts
curl https://api.ledgerbee.com/api/v1/vendors/:vendorId/contacts \ --header 'x-api-key: <api-key>'
Example Responses
[ { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "John Doe", "email": "john.doe@acme-supplies.com", "phone": "+45 12345678", "isDefaultForVendor": true } ]
json
application/json

deprecated

List vendor departments

GET
https://api.ledgerbee.com/api
/v1/vendors/{vendorId}/departments
x-api-key (header)
or
OAuth 2.0

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

Retrieves all departments for a vendor, with the default department first and the rest sorted alphabetically by name.

Returns 404 with error code VENDOR_NOT_FOUND when the vendor does not exist in your company.

DEPRECATED — sunset on 2026-12-31 (RFC 8594; every response carries Deprecation/Sunset/Link headers). Migrate to the supplier endpoints under /api/v1/suppliers — identical shapes with supplier-named fields and SUPPLIER_* error codes.

Required Scope

  • suppliers-read

List vendor departments › path Parameters

vendorId
​string · required

Vendor ID

List vendor departments › Responses

List of departments for a vendor

​VendorDepartmentResponse[]
VendorDepartmentResponse
id
​string · required

The unique identifier of the department

Example: 550e8400-e29b-41d4-a716-446655440000
name
​string · required

Name of the department

Example: Headquarters
isDefault
​boolean · required

Whether this is the default department for the vendor

Example: true
isActive
​boolean · required

Whether the department is active

Example: true
poNumber
​string

Purchase order number

Example: PO-12345
eanNumber
​string

EAN number for e-invoicing

Example: 5790000000000
address
​string

Street address

Example: 123 Main Street
city
​string

City

Example: Copenhagen
postalCode
​string

Postal code

Example: 2100
countryCode
​string

Two-letter country code (ISO 3166-1 alpha-2)

Example: DK
GET/v1/vendors/{vendorId}/departments
curl https://api.ledgerbee.com/api/v1/vendors/:vendorId/departments \ --header 'x-api-key: <api-key>'
Example Responses
[ { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Headquarters", "isDefault": true, "isActive": true, "poNumber": "PO-12345", "eanNumber": "5790000000000", "address": "123 Main Street", "city": "Copenhagen", "postalCode": "2100", "countryCode": "DK" } ]
json
application/json

deprecated

List vendor groups

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

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

Retrieves all vendor groups for your company, sorted alphabetically by name.

The list is cached for 5 seconds.

DEPRECATED — sunset on 2026-12-31 (RFC 8594; every response carries Deprecation/Sunset/Link headers). Migrate to the supplier endpoints under /api/v1/suppliers — identical shapes with supplier-named fields and SUPPLIER_* error codes.

Required Scope

  • suppliers-read

List vendor groups › Responses

List of vendor groups for the company

​VendorGroupResponse[]
VendorGroupResponse
id
​string · required

The unique identifier of the vendor group

Example: 550e8400-e29b-41d4-a716-446655440000
name
​string · required

Name of the vendor group

Example: Domestic Vendors
description
​string

Description of the vendor group

Example: All domestic vendor accounts
defaultAccountId
​string

Default ledger account ID

Example: 550e8400-e29b-41d4-a716-446655440001
GET/v1/vendors/groups
curl https://api.ledgerbee.com/api/v1/vendors/groups \ --header 'x-api-key: <api-key>'
Example Responses
[ { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Domestic Vendors", "description": "All domestic vendor accounts", "defaultAccountId": "550e8400-e29b-41d4-a716-446655440001" } ]
json
application/json

VAT periodsWebhook Endpoints