LedgerBee Developer
  • Getting started
  • Conventions
  • Products
  • Configuration
  • API Reference
Information
Accounts
    List accountsget
API Key
    Get current API keyget
Authority Extracts
    Submit authority extract datapost
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 comparisongetList 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-update 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 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 customergetUpdate 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
Document Templates
    List document templatesget
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)patchBook a draft journal entry (v2)post
Entitlements
    List entitlementsgetCreate an entitlementpostGet an entitlementgetDelete an entitlementdeleteUpdate an entitlementpatch
Invoices
    List invoicesgetCreate a draft invoicepostGet an invoicegetGet 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 entrygetPreview a correction without posting itpostMove postings to different accounts, keeping the document intactpostReverse a posted entry and open a draft to re-enter itpostReverse posted journal entries in batchpostReverse 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 settlementgetCheck what settling these entries would dopost
Subscriptions
    List customer subscriptionsgetAssign a subscription to a customerpostGet a customer subscription by its stable idgetUpdate a customer subscriptionpatchRetry a failed card paymentpostList a subscription's pending scheduled changesgetCancel a single pending scheduled changedeleteCancel a customer subscriptionpostList subscription plansgetCreate a subscription planpostArchive a subscription planpost
Suppliers
    List suppliersgetCreate a supplierpostList supplier contactsgetList supplier departmentsgetList supplier groupsget
VAT Codes
    List VAT codesget
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

Products

Download schema

Catalogue products. Each product belongs to a product group and carries one or more prices.


List products

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

Retrieves a paginated list of your company's products, each including its prices.

Pass ?search= to prefix-match on product name or number, or ?productGroupId= to narrow the list to one product group.

Required Scope

  • products-read

List products › query Parameters

page
​number · min: 1

Page number (1-indexed)

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

Maximum number of items per page

Default: 25
search
​string

Prefix search on name or number

Example: Hosting
productGroupId
​string

Filter by product group ID

sortBy
​string · enum

Field to sort by

Enum values:
productNumber
name
createdAt
Default: createdAt
sortOrder
​string · enum

Sort direction

Enum values:
ASC
DESC
Default: DESC

List products › Responses

Paginated list of products for the company (each includes its prices)

ListProductsResponse
​ProductListItem[] · required

Page of products (prices omitted; GET one product for its prices)

total
​number · required

Total number of matching products

Example: 42
page
​number · required

Current page number

Example: 1
limit
​number · required

Items per page

Example: 25
totalPages
​number · required

Total number of pages

Example: 2
GET/v1/products
curl https://api.ledgerbee.com/api/v1/products \ --header 'x-api-key: <api-key>'
Example Responses
{ "data": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "productNumber": "P001", "name": "Web Hosting", "description": "description", "unit": "pcs", "productGroupId": "productGroupId", "productType": "goods", "isActive": true, "isArchived": false, "isLocked": false, "createdAt": "2024-01-15T10:30:00Z", "updatedAt": "2024-01-15T10:30:00Z" } ], "total": 42, "page": 1, "limit": 25, "totalPages": 2 }
json
application/json

Create a product

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

Creates a product.

An optional initial price can be supplied inline — it is created, activated, and set as the product's default price in the same transaction.

Required Scope

  • products-write

Create a product › Headers

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

Optional idempotency key for safely retrying mutating requests.

Create a product › Request Body

CreateProductRequest
productNumber
​string · required

Unique product number within the company

Example: P001
name
​string · maxLength: 300 · required

Name of the product

Example: Web Hosting
unit
​string · maxLength: 255 · required

Unit of measurement

Example: pcs
productGroupId
​string · required

Product group this product belongs to (must exist)

Example: 550e8400-e29b-41d4-a716-446655440000
description
​string · maxLength: 1000

Optional description

isActive
​boolean

Whether the product is active

Default: true
productType
​string · enum

Product type (goods or services)

Enum values:
goods
services
Default: services
​object

Optional initial price. If provided it is created, activated and set as default in one transaction.

entitlementIds
​array | null · maxItems: 100

Externally managed entitlement IDs to bind (max 100)

Create a product › Responses

Product created successfully

ProductResponse
id
​string · required

The unique identifier of the product

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

Unique product number within the company

Example: P001
name
​string · required

Name of the product

Example: Web Hosting
unit
​string · required

Unit of measurement

Example: pcs
productGroupId
​string · required

Product group this product belongs to

productType
​string · enum · required

Product type (goods or services) for EU VAT

Enum values:
goods
services
isActive
​boolean · required

Whether the product is active

Example: true
isArchived
​boolean · required

Whether the product is archived

Example: false
isLocked
​boolean · required

Whether the product is locked (in use, cannot be deleted)

Example: false
createdAt
​string · date-time · required

When the product was created

Example: 2024-01-15T10:30:00Z
updatedAt
​string · date-time · required

When the product was last updated

Example: 2024-01-15T10:30:00Z
description
​string | null

Optional description

​ProductPriceResponse[]

Prices configured for this product

​EntitlementRef[]

Entitlements granted by this product

POST/v1/products
curl https://api.ledgerbee.com/api/v1/products \ --request POST \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "productNumber": "P001", "name": "Web Hosting", "description": "string", "unit": "pcs", "productGroupId": "550e8400-e29b-41d4-a716-446655440000", "isActive": true, "productType": "services", "initialPrice": { "nickname": "Monthly", "unitAmount": "99.99", "billingPeriodType": "recurring", "pricingModel": "flat_rate", "billingInterval": "day", "billingIntervalCount": 1, "currency": "DKK", "meterId": "string", "tiers": [] }, "entitlementIds": [ "string" ] }'
Example Request Body
{ "productNumber": "P001", "name": "Web Hosting", "description": "string", "unit": "pcs", "productGroupId": "550e8400-e29b-41d4-a716-446655440000", "isActive": true, "productType": "services", "initialPrice": { "nickname": "Monthly", "unitAmount": "99.99", "billingPeriodType": "recurring", "pricingModel": "flat_rate", "billingInterval": "day", "billingIntervalCount": 1, "currency": "DKK", "meterId": "string", "tiers": [] }, "entitlementIds": [ "string" ] }
json
application/json
Example Responses
{ "id": "550e8400-e29b-41d4-a716-446655440000", "productNumber": "P001", "name": "Web Hosting", "description": "description", "unit": "pcs", "productGroupId": "productGroupId", "productType": "goods", "isActive": true, "isArchived": false, "isLocked": false, "prices": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "productId": "productId", "nickname": "nickname", "unitAmount": "99.99", "billingPeriodType": "recurring", "pricingModel": "flat_rate", "billingInterval": "day", "billingIntervalCount": 1, "currency": "DKK", "baseCurrency": "DKK", "availableCurrencies": [ "string" ], "status": "draft", "isDefault": false, "isLocked": false, "meterId": "meterId", "tiers": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "fromQuantity": 1, "toQuantity": 10, "unitAmount": "99.99", "flatFee": "10.00" } ], "vatRatesByZone": {} } ], "entitlements": [ { "id": "id", "name": "Advanced reporting", "key": "advanced_reporting" } ], "createdAt": "2024-01-15T10:30:00Z", "updatedAt": "2024-01-15T10:30:00Z" }
json
application/json

Get a product

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

Returns a single product, including its prices.

Required Scope

  • products-read

Get a product › path Parameters

productId
​string · required

Product ID

Get a product › Responses

Product details, including its prices

ProductResponse
id
​string · required

The unique identifier of the product

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

Unique product number within the company

Example: P001
name
​string · required

Name of the product

Example: Web Hosting
unit
​string · required

Unit of measurement

Example: pcs
productGroupId
​string · required

Product group this product belongs to

productType
​string · enum · required

Product type (goods or services) for EU VAT

Enum values:
goods
services
isActive
​boolean · required

Whether the product is active

Example: true
isArchived
​boolean · required

Whether the product is archived

Example: false
isLocked
​boolean · required

Whether the product is locked (in use, cannot be deleted)

Example: false
createdAt
​string · date-time · required

When the product was created

Example: 2024-01-15T10:30:00Z
updatedAt
​string · date-time · required

When the product was last updated

Example: 2024-01-15T10:30:00Z
description
​string | null

Optional description

​ProductPriceResponse[]

Prices configured for this product

​EntitlementRef[]

Entitlements granted by this product

GET/v1/products/{productId}
curl https://api.ledgerbee.com/api/v1/products/:productId \ --header 'x-api-key: <api-key>'
Example Responses
{ "id": "550e8400-e29b-41d4-a716-446655440000", "productNumber": "P001", "name": "Web Hosting", "description": "description", "unit": "pcs", "productGroupId": "productGroupId", "productType": "goods", "isActive": true, "isArchived": false, "isLocked": false, "prices": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "productId": "productId", "nickname": "nickname", "unitAmount": "99.99", "billingPeriodType": "recurring", "pricingModel": "flat_rate", "billingInterval": "day", "billingIntervalCount": 1, "currency": "DKK", "baseCurrency": "DKK", "availableCurrencies": [ "string" ], "status": "draft", "isDefault": false, "isLocked": false, "meterId": "meterId", "tiers": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "fromQuantity": 1, "toQuantity": 10, "unitAmount": "99.99", "flatFee": "10.00" } ], "vatRatesByZone": {} } ], "entitlements": [ { "id": "id", "name": "Advanced reporting", "key": "advanced_reporting" } ], "createdAt": "2024-01-15T10:30:00Z", "updatedAt": "2024-01-15T10:30:00Z" }
json
application/json

Delete a product

DELETE
https://api.ledgerbee.com/api
/v1/products/{productId}
x-api-key (header)
or
OAuth 2.0

Deletes a product. A product that is locked (in use) cannot be deleted.

Required Scope

  • products-write

Delete a product › path Parameters

productId
​string · required

Product ID

Delete a product › Headers

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

Optional idempotency key for safely retrying mutating requests.

Delete a product › Responses

Product deleted successfully

No data returned
DELETE/v1/products/{productId}
curl https://api.ledgerbee.com/api/v1/products/:productId \ --request DELETE \ --header 'x-api-key: <api-key>'
Example Responses
No example specified for this content type

Update a product

PATCH
https://api.ledgerbee.com/api
/v1/products/{productId}
x-api-key (header)
or
OAuth 2.0

Updates a product. Only the fields provided in the request are changed.

Required Scope

  • products-write

Update a product › path Parameters

productId
​string · required

Product ID

Update a product › Headers

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

Optional idempotency key for safely retrying mutating requests.

Update a product › Request Body

UpdateProductRequest
productNumber
​string

Unique product number within the company

Example: P001
name
​string · maxLength: 300

Name of the product

Example: Web Hosting
description
​string · maxLength: 1000

Optional description

unit
​string · maxLength: 255

Unit of measurement

Example: pcs
productGroupId
​string

Product group this product belongs to

isActive
​boolean

Whether the product is active

productType
​string · enum

Product type (goods or services)

Enum values:
goods
services
entitlementIds
​array | null · maxItems: 100

Externally managed entitlement IDs to bind (max 100)

Update a product › Responses

Product updated successfully

ProductResponse
id
​string · required

The unique identifier of the product

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

Unique product number within the company

Example: P001
name
​string · required

Name of the product

Example: Web Hosting
unit
​string · required

Unit of measurement

Example: pcs
productGroupId
​string · required

Product group this product belongs to

productType
​string · enum · required

Product type (goods or services) for EU VAT

Enum values:
goods
services
isActive
​boolean · required

Whether the product is active

Example: true
isArchived
​boolean · required

Whether the product is archived

Example: false
isLocked
​boolean · required

Whether the product is locked (in use, cannot be deleted)

Example: false
createdAt
​string · date-time · required

When the product was created

Example: 2024-01-15T10:30:00Z
updatedAt
​string · date-time · required

When the product was last updated

Example: 2024-01-15T10:30:00Z
description
​string | null

Optional description

​ProductPriceResponse[]

Prices configured for this product

​EntitlementRef[]

Entitlements granted by this product

PATCH/v1/products/{productId}
curl https://api.ledgerbee.com/api/v1/products/:productId \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "productNumber": "P001", "name": "Web Hosting", "description": "string", "unit": "pcs", "productGroupId": "string", "isActive": true, "productType": "goods", "entitlementIds": [ "string" ] }'
Example Request Body
{ "productNumber": "P001", "name": "Web Hosting", "description": "string", "unit": "pcs", "productGroupId": "string", "isActive": true, "productType": "goods", "entitlementIds": [ "string" ] }
json
application/json
Example Responses
{ "id": "550e8400-e29b-41d4-a716-446655440000", "productNumber": "P001", "name": "Web Hosting", "description": "description", "unit": "pcs", "productGroupId": "productGroupId", "productType": "goods", "isActive": true, "isArchived": false, "isLocked": false, "prices": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "productId": "productId", "nickname": "nickname", "unitAmount": "99.99", "billingPeriodType": "recurring", "pricingModel": "flat_rate", "billingInterval": "day", "billingIntervalCount": 1, "currency": "DKK", "baseCurrency": "DKK", "availableCurrencies": [ "string" ], "status": "draft", "isDefault": false, "isLocked": false, "meterId": "meterId", "tiers": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "fromQuantity": 1, "toQuantity": 10, "unitAmount": "99.99", "flatFee": "10.00" } ], "vatRatesByZone": {} } ], "entitlements": [ { "id": "id", "name": "Advanced reporting", "key": "advanced_reporting" } ], "createdAt": "2024-01-15T10:30:00Z", "updatedAt": "2024-01-15T10:30:00Z" }
json
application/json

Archive a product

POST
https://api.ledgerbee.com/api
/v1/products/{productId}/archive
x-api-key (header)
or
OAuth 2.0

Archives a product and every price on it. Nothing new can be sold against an archived product, while the subscriptions and documents already referencing it keep resolving — which is why this, not DELETE, is what a product in use gets. There is no unarchive.

Required Scope

  • products-write

Archive a product › path Parameters

productId
​string · required

Product ID

Archive a product › Headers

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

Optional idempotency key for safely retrying mutating requests.

Archive a product › Responses

Product archived successfully

ProductResponse
id
​string · required

The unique identifier of the product

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

Unique product number within the company

Example: P001
name
​string · required

Name of the product

Example: Web Hosting
unit
​string · required

Unit of measurement

Example: pcs
productGroupId
​string · required

Product group this product belongs to

productType
​string · enum · required

Product type (goods or services) for EU VAT

Enum values:
goods
services
isActive
​boolean · required

Whether the product is active

Example: true
isArchived
​boolean · required

Whether the product is archived

Example: false
isLocked
​boolean · required

Whether the product is locked (in use, cannot be deleted)

Example: false
createdAt
​string · date-time · required

When the product was created

Example: 2024-01-15T10:30:00Z
updatedAt
​string · date-time · required

When the product was last updated

Example: 2024-01-15T10:30:00Z
description
​string | null

Optional description

​ProductPriceResponse[]

Prices configured for this product

​EntitlementRef[]

Entitlements granted by this product

POST/v1/products/{productId}/archive
curl https://api.ledgerbee.com/api/v1/products/:productId/archive \ --request POST \ --header 'x-api-key: <api-key>'
Example Responses
{ "id": "550e8400-e29b-41d4-a716-446655440000", "productNumber": "P001", "name": "Web Hosting", "description": "description", "unit": "pcs", "productGroupId": "productGroupId", "productType": "goods", "isActive": true, "isArchived": false, "isLocked": false, "prices": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "productId": "productId", "nickname": "nickname", "unitAmount": "99.99", "billingPeriodType": "recurring", "pricingModel": "flat_rate", "billingInterval": "day", "billingIntervalCount": 1, "currency": "DKK", "baseCurrency": "DKK", "availableCurrencies": [ "string" ], "status": "draft", "isDefault": false, "isLocked": false, "meterId": "meterId", "tiers": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "fromQuantity": 1, "toQuantity": 10, "unitAmount": "99.99", "flatFee": "10.00" } ], "vatRatesByZone": {} } ], "entitlements": [ { "id": "id", "name": "Advanced reporting", "key": "advanced_reporting" } ], "createdAt": "2024-01-15T10:30:00Z", "updatedAt": "2024-01-15T10:30:00Z" }
json
application/json

Product PricesProjects