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

Webhook Endpoints

Download schema

Register HTTPS endpoints to receive signed event notifications. Each delivery is signed following the Standard Webhooks specification — verify the webhook-id, webhook-timestamp, and webhook-signature headers against the endpoint secret (returned once on create / roll-secret) using one of the spec’s drop-in verification libraries instead of implementing the HMAC-SHA256 check yourself.


List webhook endpoints

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

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

Returns the company’s webhook endpoints, newest first.

Required Scope

  • webhook-endpoints-read

List webhook endpoints › query Parameters

page
​number

Page number (1-based).

Example: 1
Default: 1
limit
​number

Page size (max 100).

Example: 25
Default: 25

List webhook endpoints › Responses

Paginated list of webhook endpoints.

WebhookEndpointList
​WebhookEndpoint[] · required
total
​number · required

Total number of endpoints matching the query.

Example: 3
page
​number · required

Current page (1-based).

Example: 1
pageSize
​number · required

Page size.

Example: 25
GET/v1/webhook-endpoints
curl https://api.ledgerbee.com/api/v1/webhook-endpoints \ --header 'x-api-key: <api-key>'
Example Responses
{ "data": [ { "id": "0192f3a1-...", "url": "https://example.com/webhooks/ledgerbee", "enabledEvents": [ "subscription.assigned" ], "status": "enabled", "description": "Production billing sync", "createdAt": "2026-05-29T10:00:00.000Z", "updatedAt": "2026-05-29T10:00:00.000Z" } ], "total": 3, "page": 1, "pageSize": 25 }
json
application/json

Create a webhook endpoint

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

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

Registers a new endpoint. url must be a public HTTPS URL. The response includes the signing secret exactly once — store it securely.

Required Scope

  • webhook-endpoints-write

Create a webhook endpoint › Headers

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

Optional idempotency key for safely retrying mutating requests.

Create a webhook endpoint › Request Body

CreateWebhookEndpointRequest
url
​string · required

The HTTPS URL events are delivered to. Must be a public https URL (loopback/private/link-local hosts are rejected).

Example: https://example.com/webhooks/ledgerbee
enabledEvents
​string[] · required

The events to subscribe to. Must contain at least one known event type.

Available events:

  • subscription.assigned — Fired when a subscription is assigned to a customer (may be future-dated / upcoming).
  • subscription.started — Fired when a subscription becomes active — grant entitlement/access on this event, not on assigned.
  • subscription.updated — Fired when a config property changes without a structural transition (e.g. name, payment method, billing direction).
  • subscription.transitioned — Fired on a structural change: plan replace, product edit, billing cadence change, phase change, or realign.
  • subscription.paused — Fired when a subscription is paused.
  • subscription.resumed — Fired when a subscription resumes from a pause.
  • subscription.trial_ended — Fired when a subscription trial ends. The payload outcome says whether billing begins (ACTIVE) or the subscription was held for a missing payment card (PAUSED).
  • subscription.cancellation_scheduled — Fired when a future cancellation is scheduled for a subscription (still active until then).
  • subscription.cancellation_cleared — Fired when a previously scheduled cancellation is cleared.
  • subscription.churned — Fired when a subscription is cancelled/finalized — revoke entitlement on this event.
  • subscription.billed — Fired once per subscription that billed onto an invoice — one per child on a parent-paid consolidated invoice, one per member on a billing-group invoice. amount is always the whole document total; deduplicate on invoiceId, attribute on billingGroupId, never sum amount across events.
  • subscription.billing_held — Fired when a billing run holds an invoice instead of issuing it, because it is below the minimum invoice amount or below the smallest amount the subscription's card can be charged: nothing is invoiced or charged, and the held periods are added to the subscription's next invoice. One event per subscription with a period on the held invoice.
  • subscription.payment_succeeded — Fired when a card charge for the subscription clears — the success pair of the charge_failed error signal. On a billing-group card charge one event fires per member, each carrying the full charged amount and the shared billingGroupId.
  • subscription.error — Fired when a delivery/processing problem occurs for a subscription (e.g. undeliverable recipient).
  • billing.invoice_sent — Fired when an invoice document is sent to the customer.
  • billing.credit_note_sent — Fired when a credit note document is sent to the customer.
  • billing.invoice_updated — Fired when an invoice is changed, in the app or through the API alike: its fields, its lines or their order, or its status. A draft scheduled or cancelled fires it, and so does an invoice reaching sent once it is delivered, beside billing.invoice_sent. A save that changes nothing fires nothing; changedFields names what moved.
  • billing.invoice_deleted — Fired when a draft invoice is deleted, in the app or through the API alike. Only drafts can be deleted; a sent invoice is corrected with a credit note instead.
  • billing.invoice_paid — Fired when a customer invoice becomes paid in full: by payments, by a settlement, or by a credit note applied to it. Only the invoice fires it — the credit note it was settled against does not, and neither does a reminder fee or an advance. A partial payment fires nothing. An invoice reopened (a payment reverted) and paid again fires again. Invoices brought in by an import do not fire it.
  • customer.created — Fired when a customer is created (payload flags whether it was a portal self-signup).
  • card.added — Fired when a card is successfully saved for a customer (provider-opaque).
  • card.removed — Fired when a saved card is removed in-app or cancelled at the provider.
  • card.updated — Fired when a saved card’s details change (network auto-update or refresh).
  • card.expiring — Fired when a saved card is approaching expiry.
  • card.expired — Fired when a saved card is observed to have expired.
  • card.default_changed — Fired when the customer’s default card changes (explicit or auto-default).
  • card.backup_changed — Fired when the customer’s designated backup card is set, replaced, or cleared.
  • card.add_failed — Fired when a card-save attempt fails (decline or authentication failure).
  • quote.sent — Fired when a quote is sent to the customer.
  • quote.converted — Fired when a quote is converted into an order confirmation or an invoice.
  • order_confirmation.sent — Fired when an order confirmation is sent to the customer.
  • order_confirmation.converted — Fired when an order confirmation is converted into an invoice.
  • checkout.card_ready — Fired when the buyer's card lands on a checkout session's card window — confirm may proceed. The card-status poll remains authoritative.
  • checkout.card_failed — Fired when a checkout card window closes without a card (the provider window expired mid-capture) — open a fresh window to retry.
  • checkout.session_expired — Fired when a checkout session expires unconsumed — the abandoned-checkout signal.
  • project.created — Fired when a project is created (payload carries the owned dimension id for correlation with the dimensions API).
  • project.updated — Fired when a project's fields are updated (payload lists the changed field names). Also fires on un-archive.
  • project.archived — Fired when a project is archived (its dimension is deactivated; postings history is preserved).
  • stock.balance_changed — Fired for every stock movement that changes sellable stock, carrying the position's on-hand after it — the signal a sales channel republishes availability on.
  • shipment.dispatched — Fired when a shipment leaves the warehouse and its cost of goods sold posts.
  • shipment.cancelled — Fired when a DISPATCHED shipment is cancelled and its posting unwound. Cancelling a draft moves nothing and fires nothing.
  • flow.tap — Fired when a flow tap this endpoint is named on fires: once per document, carrying the tap id, the optional subject and body the tap was written with, and the object the step declares for that outcome when the tap attaches it (otherwise null). Subscribing makes the endpoint available to taps; it receives only the taps that name it.
  • agent.message — Fired when an agent's Post block that names this endpoint posts: once per message that reaches the block, carrying the agent, the run, the post's title and text, and the message's structured content. Subscribing makes the endpoint available to Post blocks; it receives only the posts of the blocks that name it.
Enum values:
subscription.assigned
subscription.started
subscription.updated
subscription.transitioned
subscription.paused
subscription.resumed
subscription.trial_ended
subscription.cancellation_scheduled
Example: ["subscription.assigned"]
description
​string · maxLength: 512

Optional human-facing description.

Example: Production billing sync

Create a webhook endpoint › Responses

Endpoint created. Includes the one-time signing secret.

WebhookEndpointWithSecret
id
​string · required

Unique identifier of the webhook endpoint.

Example: 0192f3a1-...
url
​string · required

The HTTPS URL events are delivered to.

Example: https://example.com/webhooks/ledgerbee
enabledEvents
​string[] · required

The events this endpoint is subscribed to. An event is delivered to every enabled endpoint subscribed to its type.

Available events:

  • subscription.assigned — Fired when a subscription is assigned to a customer (may be future-dated / upcoming).
  • subscription.started — Fired when a subscription becomes active — grant entitlement/access on this event, not on assigned.
  • subscription.updated — Fired when a config property changes without a structural transition (e.g. name, payment method, billing direction).
  • subscription.transitioned — Fired on a structural change: plan replace, product edit, billing cadence change, phase change, or realign.
  • subscription.paused — Fired when a subscription is paused.
  • subscription.resumed — Fired when a subscription resumes from a pause.
  • subscription.trial_ended — Fired when a subscription trial ends. The payload outcome says whether billing begins (ACTIVE) or the subscription was held for a missing payment card (PAUSED).
  • subscription.cancellation_scheduled — Fired when a future cancellation is scheduled for a subscription (still active until then).
  • subscription.cancellation_cleared — Fired when a previously scheduled cancellation is cleared.
  • subscription.churned — Fired when a subscription is cancelled/finalized — revoke entitlement on this event.
  • subscription.billed — Fired once per subscription that billed onto an invoice — one per child on a parent-paid consolidated invoice, one per member on a billing-group invoice. amount is always the whole document total; deduplicate on invoiceId, attribute on billingGroupId, never sum amount across events.
  • subscription.billing_held — Fired when a billing run holds an invoice instead of issuing it, because it is below the minimum invoice amount or below the smallest amount the subscription's card can be charged: nothing is invoiced or charged, and the held periods are added to the subscription's next invoice. One event per subscription with a period on the held invoice.
  • subscription.payment_succeeded — Fired when a card charge for the subscription clears — the success pair of the charge_failed error signal. On a billing-group card charge one event fires per member, each carrying the full charged amount and the shared billingGroupId.
  • subscription.error — Fired when a delivery/processing problem occurs for a subscription (e.g. undeliverable recipient).
  • billing.invoice_sent — Fired when an invoice document is sent to the customer.
  • billing.credit_note_sent — Fired when a credit note document is sent to the customer.
  • billing.invoice_updated — Fired when an invoice is changed, in the app or through the API alike: its fields, its lines or their order, or its status. A draft scheduled or cancelled fires it, and so does an invoice reaching sent once it is delivered, beside billing.invoice_sent. A save that changes nothing fires nothing; changedFields names what moved.
  • billing.invoice_deleted — Fired when a draft invoice is deleted, in the app or through the API alike. Only drafts can be deleted; a sent invoice is corrected with a credit note instead.
  • billing.invoice_paid — Fired when a customer invoice becomes paid in full: by payments, by a settlement, or by a credit note applied to it. Only the invoice fires it — the credit note it was settled against does not, and neither does a reminder fee or an advance. A partial payment fires nothing. An invoice reopened (a payment reverted) and paid again fires again. Invoices brought in by an import do not fire it.
  • customer.created — Fired when a customer is created (payload flags whether it was a portal self-signup).
  • card.added — Fired when a card is successfully saved for a customer (provider-opaque).
  • card.removed — Fired when a saved card is removed in-app or cancelled at the provider.
  • card.updated — Fired when a saved card’s details change (network auto-update or refresh).
  • card.expiring — Fired when a saved card is approaching expiry.
  • card.expired — Fired when a saved card is observed to have expired.
  • card.default_changed — Fired when the customer’s default card changes (explicit or auto-default).
  • card.backup_changed — Fired when the customer’s designated backup card is set, replaced, or cleared.
  • card.add_failed — Fired when a card-save attempt fails (decline or authentication failure).
  • quote.sent — Fired when a quote is sent to the customer.
  • quote.converted — Fired when a quote is converted into an order confirmation or an invoice.
  • order_confirmation.sent — Fired when an order confirmation is sent to the customer.
  • order_confirmation.converted — Fired when an order confirmation is converted into an invoice.
  • checkout.card_ready — Fired when the buyer's card lands on a checkout session's card window — confirm may proceed. The card-status poll remains authoritative.
  • checkout.card_failed — Fired when a checkout card window closes without a card (the provider window expired mid-capture) — open a fresh window to retry.
  • checkout.session_expired — Fired when a checkout session expires unconsumed — the abandoned-checkout signal.
  • project.created — Fired when a project is created (payload carries the owned dimension id for correlation with the dimensions API).
  • project.updated — Fired when a project's fields are updated (payload lists the changed field names). Also fires on un-archive.
  • project.archived — Fired when a project is archived (its dimension is deactivated; postings history is preserved).
  • stock.balance_changed — Fired for every stock movement that changes sellable stock, carrying the position's on-hand after it — the signal a sales channel republishes availability on.
  • shipment.dispatched — Fired when a shipment leaves the warehouse and its cost of goods sold posts.
  • shipment.cancelled — Fired when a DISPATCHED shipment is cancelled and its posting unwound. Cancelling a draft moves nothing and fires nothing.
  • flow.tap — Fired when a flow tap this endpoint is named on fires: once per document, carrying the tap id, the optional subject and body the tap was written with, and the object the step declares for that outcome when the tap attaches it (otherwise null). Subscribing makes the endpoint available to taps; it receives only the taps that name it.
  • agent.message — Fired when an agent's Post block that names this endpoint posts: once per message that reaches the block, carrying the agent, the run, the post's title and text, and the message's structured content. Subscribing makes the endpoint available to Post blocks; it receives only the posts of the blocks that name it.
Enum values:
subscription.assigned
subscription.started
subscription.updated
subscription.transitioned
subscription.paused
subscription.resumed
subscription.trial_ended
subscription.cancellation_scheduled
Example: ["subscription.assigned"]
status
​string · enum · required

Delivery status. disabled endpoints are retained but receive no events.

Enum values:
enabled
disabled
Example: enabled
createdAt
​string · required

ISO 8601 creation timestamp.

Example: 2026-05-29T10:00:00.000Z
updatedAt
​string · required

ISO 8601 last-update timestamp.

Example: 2026-05-29T10:00:00.000Z
secret
​string · required

The signing secret (shown only on create and roll-secret). Used to verify the webhook-signature header.

Example: whsec_...
description
​string | null

Optional human-facing description of what this endpoint is used for.

Example: Production billing sync
POST/v1/webhook-endpoints
curl https://api.ledgerbee.com/api/v1/webhook-endpoints \ --request POST \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "url": "https://example.com/webhooks/ledgerbee", "enabledEvents": [ "subscription.assigned" ], "description": "Production billing sync" }'
Example Request Body
{ "url": "https://example.com/webhooks/ledgerbee", "enabledEvents": [ "subscription.assigned" ], "description": "Production billing sync" }
json
application/json
Example Responses
{ "id": "0192f3a1-...", "url": "https://example.com/webhooks/ledgerbee", "enabledEvents": [ "subscription.assigned" ], "status": "enabled", "description": "Production billing sync", "createdAt": "2026-05-29T10:00:00.000Z", "updatedAt": "2026-05-29T10:00:00.000Z", "secret": "whsec_..." }
json
application/json

Retrieve a webhook endpoint

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

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

Retrieves a single webhook endpoint configuration by its id. Returns 404 with code WEBHOOK_ENDPOINT_NOT_FOUND when the endpoint does not exist in your company.

Required Scope

  • webhook-endpoints-read

Retrieve a webhook endpoint › path Parameters

id
​string · required

The webhook endpoint id.

Retrieve a webhook endpoint › Responses

The webhook endpoint.

WebhookEndpoint
id
​string · required

Unique identifier of the webhook endpoint.

Example: 0192f3a1-...
url
​string · required

The HTTPS URL events are delivered to.

Example: https://example.com/webhooks/ledgerbee
enabledEvents
​string[] · required

The events this endpoint is subscribed to. An event is delivered to every enabled endpoint subscribed to its type.

Available events:

  • subscription.assigned — Fired when a subscription is assigned to a customer (may be future-dated / upcoming).
  • subscription.started — Fired when a subscription becomes active — grant entitlement/access on this event, not on assigned.
  • subscription.updated — Fired when a config property changes without a structural transition (e.g. name, payment method, billing direction).
  • subscription.transitioned — Fired on a structural change: plan replace, product edit, billing cadence change, phase change, or realign.
  • subscription.paused — Fired when a subscription is paused.
  • subscription.resumed — Fired when a subscription resumes from a pause.
  • subscription.trial_ended — Fired when a subscription trial ends. The payload outcome says whether billing begins (ACTIVE) or the subscription was held for a missing payment card (PAUSED).
  • subscription.cancellation_scheduled — Fired when a future cancellation is scheduled for a subscription (still active until then).
  • subscription.cancellation_cleared — Fired when a previously scheduled cancellation is cleared.
  • subscription.churned — Fired when a subscription is cancelled/finalized — revoke entitlement on this event.
  • subscription.billed — Fired once per subscription that billed onto an invoice — one per child on a parent-paid consolidated invoice, one per member on a billing-group invoice. amount is always the whole document total; deduplicate on invoiceId, attribute on billingGroupId, never sum amount across events.
  • subscription.billing_held — Fired when a billing run holds an invoice instead of issuing it, because it is below the minimum invoice amount or below the smallest amount the subscription's card can be charged: nothing is invoiced or charged, and the held periods are added to the subscription's next invoice. One event per subscription with a period on the held invoice.
  • subscription.payment_succeeded — Fired when a card charge for the subscription clears — the success pair of the charge_failed error signal. On a billing-group card charge one event fires per member, each carrying the full charged amount and the shared billingGroupId.
  • subscription.error — Fired when a delivery/processing problem occurs for a subscription (e.g. undeliverable recipient).
  • billing.invoice_sent — Fired when an invoice document is sent to the customer.
  • billing.credit_note_sent — Fired when a credit note document is sent to the customer.
  • billing.invoice_updated — Fired when an invoice is changed, in the app or through the API alike: its fields, its lines or their order, or its status. A draft scheduled or cancelled fires it, and so does an invoice reaching sent once it is delivered, beside billing.invoice_sent. A save that changes nothing fires nothing; changedFields names what moved.
  • billing.invoice_deleted — Fired when a draft invoice is deleted, in the app or through the API alike. Only drafts can be deleted; a sent invoice is corrected with a credit note instead.
  • billing.invoice_paid — Fired when a customer invoice becomes paid in full: by payments, by a settlement, or by a credit note applied to it. Only the invoice fires it — the credit note it was settled against does not, and neither does a reminder fee or an advance. A partial payment fires nothing. An invoice reopened (a payment reverted) and paid again fires again. Invoices brought in by an import do not fire it.
  • customer.created — Fired when a customer is created (payload flags whether it was a portal self-signup).
  • card.added — Fired when a card is successfully saved for a customer (provider-opaque).
  • card.removed — Fired when a saved card is removed in-app or cancelled at the provider.
  • card.updated — Fired when a saved card’s details change (network auto-update or refresh).
  • card.expiring — Fired when a saved card is approaching expiry.
  • card.expired — Fired when a saved card is observed to have expired.
  • card.default_changed — Fired when the customer’s default card changes (explicit or auto-default).
  • card.backup_changed — Fired when the customer’s designated backup card is set, replaced, or cleared.
  • card.add_failed — Fired when a card-save attempt fails (decline or authentication failure).
  • quote.sent — Fired when a quote is sent to the customer.
  • quote.converted — Fired when a quote is converted into an order confirmation or an invoice.
  • order_confirmation.sent — Fired when an order confirmation is sent to the customer.
  • order_confirmation.converted — Fired when an order confirmation is converted into an invoice.
  • checkout.card_ready — Fired when the buyer's card lands on a checkout session's card window — confirm may proceed. The card-status poll remains authoritative.
  • checkout.card_failed — Fired when a checkout card window closes without a card (the provider window expired mid-capture) — open a fresh window to retry.
  • checkout.session_expired — Fired when a checkout session expires unconsumed — the abandoned-checkout signal.
  • project.created — Fired when a project is created (payload carries the owned dimension id for correlation with the dimensions API).
  • project.updated — Fired when a project's fields are updated (payload lists the changed field names). Also fires on un-archive.
  • project.archived — Fired when a project is archived (its dimension is deactivated; postings history is preserved).
  • stock.balance_changed — Fired for every stock movement that changes sellable stock, carrying the position's on-hand after it — the signal a sales channel republishes availability on.
  • shipment.dispatched — Fired when a shipment leaves the warehouse and its cost of goods sold posts.
  • shipment.cancelled — Fired when a DISPATCHED shipment is cancelled and its posting unwound. Cancelling a draft moves nothing and fires nothing.
  • flow.tap — Fired when a flow tap this endpoint is named on fires: once per document, carrying the tap id, the optional subject and body the tap was written with, and the object the step declares for that outcome when the tap attaches it (otherwise null). Subscribing makes the endpoint available to taps; it receives only the taps that name it.
  • agent.message — Fired when an agent's Post block that names this endpoint posts: once per message that reaches the block, carrying the agent, the run, the post's title and text, and the message's structured content. Subscribing makes the endpoint available to Post blocks; it receives only the posts of the blocks that name it.
Enum values:
subscription.assigned
subscription.started
subscription.updated
subscription.transitioned
subscription.paused
subscription.resumed
subscription.trial_ended
subscription.cancellation_scheduled
Example: ["subscription.assigned"]
status
​string · enum · required

Delivery status. disabled endpoints are retained but receive no events.

Enum values:
enabled
disabled
Example: enabled
createdAt
​string · required

ISO 8601 creation timestamp.

Example: 2026-05-29T10:00:00.000Z
updatedAt
​string · required

ISO 8601 last-update timestamp.

Example: 2026-05-29T10:00:00.000Z
description
​string | null

Optional human-facing description of what this endpoint is used for.

Example: Production billing sync
GET/v1/webhook-endpoints/{id}
curl https://api.ledgerbee.com/api/v1/webhook-endpoints/:id \ --header 'x-api-key: <api-key>'
Example Responses
{ "id": "0192f3a1-...", "url": "https://example.com/webhooks/ledgerbee", "enabledEvents": [ "subscription.assigned" ], "status": "enabled", "description": "Production billing sync", "createdAt": "2026-05-29T10:00:00.000Z", "updatedAt": "2026-05-29T10:00:00.000Z" }
json
application/json

Update a webhook endpoint

PUT
https://api.ledgerbee.com/api
/v1/webhook-endpoints/{id}
x-api-key (header)
or
OAuth 2.0

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

All fields optional. enabledEvents replaces the full subscription set. Send description: null to clear it.

Required Scope

  • webhook-endpoints-write

Update a webhook endpoint › path Parameters

id
​string · required

The webhook endpoint id.

Update a webhook endpoint › Headers

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

Optional idempotency key for safely retrying mutating requests.

Update a webhook endpoint › Request Body

UpdateWebhookEndpointRequest
url
​string

New HTTPS delivery URL.

Example: https://example.com/webhooks/v2
enabledEvents
​string[]

Replace the full set of subscribed events.

Available events:

  • subscription.assigned — Fired when a subscription is assigned to a customer (may be future-dated / upcoming).
  • subscription.started — Fired when a subscription becomes active — grant entitlement/access on this event, not on assigned.
  • subscription.updated — Fired when a config property changes without a structural transition (e.g. name, payment method, billing direction).
  • subscription.transitioned — Fired on a structural change: plan replace, product edit, billing cadence change, phase change, or realign.
  • subscription.paused — Fired when a subscription is paused.
  • subscription.resumed — Fired when a subscription resumes from a pause.
  • subscription.trial_ended — Fired when a subscription trial ends. The payload outcome says whether billing begins (ACTIVE) or the subscription was held for a missing payment card (PAUSED).
  • subscription.cancellation_scheduled — Fired when a future cancellation is scheduled for a subscription (still active until then).
  • subscription.cancellation_cleared — Fired when a previously scheduled cancellation is cleared.
  • subscription.churned — Fired when a subscription is cancelled/finalized — revoke entitlement on this event.
  • subscription.billed — Fired once per subscription that billed onto an invoice — one per child on a parent-paid consolidated invoice, one per member on a billing-group invoice. amount is always the whole document total; deduplicate on invoiceId, attribute on billingGroupId, never sum amount across events.
  • subscription.billing_held — Fired when a billing run holds an invoice instead of issuing it, because it is below the minimum invoice amount or below the smallest amount the subscription's card can be charged: nothing is invoiced or charged, and the held periods are added to the subscription's next invoice. One event per subscription with a period on the held invoice.
  • subscription.payment_succeeded — Fired when a card charge for the subscription clears — the success pair of the charge_failed error signal. On a billing-group card charge one event fires per member, each carrying the full charged amount and the shared billingGroupId.
  • subscription.error — Fired when a delivery/processing problem occurs for a subscription (e.g. undeliverable recipient).
  • billing.invoice_sent — Fired when an invoice document is sent to the customer.
  • billing.credit_note_sent — Fired when a credit note document is sent to the customer.
  • billing.invoice_updated — Fired when an invoice is changed, in the app or through the API alike: its fields, its lines or their order, or its status. A draft scheduled or cancelled fires it, and so does an invoice reaching sent once it is delivered, beside billing.invoice_sent. A save that changes nothing fires nothing; changedFields names what moved.
  • billing.invoice_deleted — Fired when a draft invoice is deleted, in the app or through the API alike. Only drafts can be deleted; a sent invoice is corrected with a credit note instead.
  • billing.invoice_paid — Fired when a customer invoice becomes paid in full: by payments, by a settlement, or by a credit note applied to it. Only the invoice fires it — the credit note it was settled against does not, and neither does a reminder fee or an advance. A partial payment fires nothing. An invoice reopened (a payment reverted) and paid again fires again. Invoices brought in by an import do not fire it.
  • customer.created — Fired when a customer is created (payload flags whether it was a portal self-signup).
  • card.added — Fired when a card is successfully saved for a customer (provider-opaque).
  • card.removed — Fired when a saved card is removed in-app or cancelled at the provider.
  • card.updated — Fired when a saved card’s details change (network auto-update or refresh).
  • card.expiring — Fired when a saved card is approaching expiry.
  • card.expired — Fired when a saved card is observed to have expired.
  • card.default_changed — Fired when the customer’s default card changes (explicit or auto-default).
  • card.backup_changed — Fired when the customer’s designated backup card is set, replaced, or cleared.
  • card.add_failed — Fired when a card-save attempt fails (decline or authentication failure).
  • quote.sent — Fired when a quote is sent to the customer.
  • quote.converted — Fired when a quote is converted into an order confirmation or an invoice.
  • order_confirmation.sent — Fired when an order confirmation is sent to the customer.
  • order_confirmation.converted — Fired when an order confirmation is converted into an invoice.
  • checkout.card_ready — Fired when the buyer's card lands on a checkout session's card window — confirm may proceed. The card-status poll remains authoritative.
  • checkout.card_failed — Fired when a checkout card window closes without a card (the provider window expired mid-capture) — open a fresh window to retry.
  • checkout.session_expired — Fired when a checkout session expires unconsumed — the abandoned-checkout signal.
  • project.created — Fired when a project is created (payload carries the owned dimension id for correlation with the dimensions API).
  • project.updated — Fired when a project's fields are updated (payload lists the changed field names). Also fires on un-archive.
  • project.archived — Fired when a project is archived (its dimension is deactivated; postings history is preserved).
  • stock.balance_changed — Fired for every stock movement that changes sellable stock, carrying the position's on-hand after it — the signal a sales channel republishes availability on.
  • shipment.dispatched — Fired when a shipment leaves the warehouse and its cost of goods sold posts.
  • shipment.cancelled — Fired when a DISPATCHED shipment is cancelled and its posting unwound. Cancelling a draft moves nothing and fires nothing.
  • flow.tap — Fired when a flow tap this endpoint is named on fires: once per document, carrying the tap id, the optional subject and body the tap was written with, and the object the step declares for that outcome when the tap attaches it (otherwise null). Subscribing makes the endpoint available to taps; it receives only the taps that name it.
  • agent.message — Fired when an agent's Post block that names this endpoint posts: once per message that reaches the block, carrying the agent, the run, the post's title and text, and the message's structured content. Subscribing makes the endpoint available to Post blocks; it receives only the posts of the blocks that name it.
Enum values:
subscription.assigned
subscription.started
subscription.updated
subscription.transitioned
subscription.paused
subscription.resumed
subscription.trial_ended
subscription.cancellation_scheduled
Example: ["subscription.assigned"]
status
​string · enum

Enable or disable delivery without deleting the endpoint.

Enum values:
enabled
disabled
description
​string | null · maxLength: 512

Update the description. Send null to clear it.

Example: Updated description

Update a webhook endpoint › Responses

The updated webhook endpoint.

WebhookEndpoint
id
​string · required

Unique identifier of the webhook endpoint.

Example: 0192f3a1-...
url
​string · required

The HTTPS URL events are delivered to.

Example: https://example.com/webhooks/ledgerbee
enabledEvents
​string[] · required

The events this endpoint is subscribed to. An event is delivered to every enabled endpoint subscribed to its type.

Available events:

  • subscription.assigned — Fired when a subscription is assigned to a customer (may be future-dated / upcoming).
  • subscription.started — Fired when a subscription becomes active — grant entitlement/access on this event, not on assigned.
  • subscription.updated — Fired when a config property changes without a structural transition (e.g. name, payment method, billing direction).
  • subscription.transitioned — Fired on a structural change: plan replace, product edit, billing cadence change, phase change, or realign.
  • subscription.paused — Fired when a subscription is paused.
  • subscription.resumed — Fired when a subscription resumes from a pause.
  • subscription.trial_ended — Fired when a subscription trial ends. The payload outcome says whether billing begins (ACTIVE) or the subscription was held for a missing payment card (PAUSED).
  • subscription.cancellation_scheduled — Fired when a future cancellation is scheduled for a subscription (still active until then).
  • subscription.cancellation_cleared — Fired when a previously scheduled cancellation is cleared.
  • subscription.churned — Fired when a subscription is cancelled/finalized — revoke entitlement on this event.
  • subscription.billed — Fired once per subscription that billed onto an invoice — one per child on a parent-paid consolidated invoice, one per member on a billing-group invoice. amount is always the whole document total; deduplicate on invoiceId, attribute on billingGroupId, never sum amount across events.
  • subscription.billing_held — Fired when a billing run holds an invoice instead of issuing it, because it is below the minimum invoice amount or below the smallest amount the subscription's card can be charged: nothing is invoiced or charged, and the held periods are added to the subscription's next invoice. One event per subscription with a period on the held invoice.
  • subscription.payment_succeeded — Fired when a card charge for the subscription clears — the success pair of the charge_failed error signal. On a billing-group card charge one event fires per member, each carrying the full charged amount and the shared billingGroupId.
  • subscription.error — Fired when a delivery/processing problem occurs for a subscription (e.g. undeliverable recipient).
  • billing.invoice_sent — Fired when an invoice document is sent to the customer.
  • billing.credit_note_sent — Fired when a credit note document is sent to the customer.
  • billing.invoice_updated — Fired when an invoice is changed, in the app or through the API alike: its fields, its lines or their order, or its status. A draft scheduled or cancelled fires it, and so does an invoice reaching sent once it is delivered, beside billing.invoice_sent. A save that changes nothing fires nothing; changedFields names what moved.
  • billing.invoice_deleted — Fired when a draft invoice is deleted, in the app or through the API alike. Only drafts can be deleted; a sent invoice is corrected with a credit note instead.
  • billing.invoice_paid — Fired when a customer invoice becomes paid in full: by payments, by a settlement, or by a credit note applied to it. Only the invoice fires it — the credit note it was settled against does not, and neither does a reminder fee or an advance. A partial payment fires nothing. An invoice reopened (a payment reverted) and paid again fires again. Invoices brought in by an import do not fire it.
  • customer.created — Fired when a customer is created (payload flags whether it was a portal self-signup).
  • card.added — Fired when a card is successfully saved for a customer (provider-opaque).
  • card.removed — Fired when a saved card is removed in-app or cancelled at the provider.
  • card.updated — Fired when a saved card’s details change (network auto-update or refresh).
  • card.expiring — Fired when a saved card is approaching expiry.
  • card.expired — Fired when a saved card is observed to have expired.
  • card.default_changed — Fired when the customer’s default card changes (explicit or auto-default).
  • card.backup_changed — Fired when the customer’s designated backup card is set, replaced, or cleared.
  • card.add_failed — Fired when a card-save attempt fails (decline or authentication failure).
  • quote.sent — Fired when a quote is sent to the customer.
  • quote.converted — Fired when a quote is converted into an order confirmation or an invoice.
  • order_confirmation.sent — Fired when an order confirmation is sent to the customer.
  • order_confirmation.converted — Fired when an order confirmation is converted into an invoice.
  • checkout.card_ready — Fired when the buyer's card lands on a checkout session's card window — confirm may proceed. The card-status poll remains authoritative.
  • checkout.card_failed — Fired when a checkout card window closes without a card (the provider window expired mid-capture) — open a fresh window to retry.
  • checkout.session_expired — Fired when a checkout session expires unconsumed — the abandoned-checkout signal.
  • project.created — Fired when a project is created (payload carries the owned dimension id for correlation with the dimensions API).
  • project.updated — Fired when a project's fields are updated (payload lists the changed field names). Also fires on un-archive.
  • project.archived — Fired when a project is archived (its dimension is deactivated; postings history is preserved).
  • stock.balance_changed — Fired for every stock movement that changes sellable stock, carrying the position's on-hand after it — the signal a sales channel republishes availability on.
  • shipment.dispatched — Fired when a shipment leaves the warehouse and its cost of goods sold posts.
  • shipment.cancelled — Fired when a DISPATCHED shipment is cancelled and its posting unwound. Cancelling a draft moves nothing and fires nothing.
  • flow.tap — Fired when a flow tap this endpoint is named on fires: once per document, carrying the tap id, the optional subject and body the tap was written with, and the object the step declares for that outcome when the tap attaches it (otherwise null). Subscribing makes the endpoint available to taps; it receives only the taps that name it.
  • agent.message — Fired when an agent's Post block that names this endpoint posts: once per message that reaches the block, carrying the agent, the run, the post's title and text, and the message's structured content. Subscribing makes the endpoint available to Post blocks; it receives only the posts of the blocks that name it.
Enum values:
subscription.assigned
subscription.started
subscription.updated
subscription.transitioned
subscription.paused
subscription.resumed
subscription.trial_ended
subscription.cancellation_scheduled
Example: ["subscription.assigned"]
status
​string · enum · required

Delivery status. disabled endpoints are retained but receive no events.

Enum values:
enabled
disabled
Example: enabled
createdAt
​string · required

ISO 8601 creation timestamp.

Example: 2026-05-29T10:00:00.000Z
updatedAt
​string · required

ISO 8601 last-update timestamp.

Example: 2026-05-29T10:00:00.000Z
description
​string | null

Optional human-facing description of what this endpoint is used for.

Example: Production billing sync
PUT/v1/webhook-endpoints/{id}
curl https://api.ledgerbee.com/api/v1/webhook-endpoints/:id \ --request PUT \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "url": "https://example.com/webhooks/v2", "enabledEvents": [ "subscription.assigned" ], "status": "enabled", "description": "Updated description" }'
Example Request Body
{ "url": "https://example.com/webhooks/v2", "enabledEvents": [ "subscription.assigned" ], "status": "enabled", "description": "Updated description" }
json
application/json
Example Responses
{ "id": "0192f3a1-...", "url": "https://example.com/webhooks/ledgerbee", "enabledEvents": [ "subscription.assigned" ], "status": "enabled", "description": "Production billing sync", "createdAt": "2026-05-29T10:00:00.000Z", "updatedAt": "2026-05-29T10:00:00.000Z" }
json
application/json

Delete a webhook endpoint

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

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

Permanently removes the endpoint and its delivery log.

Required Scope

  • webhook-endpoints-write

Delete a webhook endpoint › path Parameters

id
​string · required

The webhook endpoint id.

Delete a webhook endpoint › Headers

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

Optional idempotency key for safely retrying mutating requests.

Delete a webhook endpoint › Responses

Endpoint deleted.

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

Roll the signing secret

POST
https://api.ledgerbee.com/api
/v1/webhook-endpoints/{id}/roll-secret
x-api-key (header)
or
OAuth 2.0

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

Generates a new signing secret for the endpoint, returned once. The endpoint id is unchanged. The previous secret stops verifying immediately.

Required Scope

  • webhook-endpoints-write

Roll the signing secret › path Parameters

id
​string · required

The webhook endpoint id.

Roll the signing secret › Headers

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

Optional idempotency key for safely retrying mutating requests.

Roll the signing secret › Responses

The endpoint with its new one-time signing secret.

WebhookEndpointWithSecret
id
​string · required

Unique identifier of the webhook endpoint.

Example: 0192f3a1-...
url
​string · required

The HTTPS URL events are delivered to.

Example: https://example.com/webhooks/ledgerbee
enabledEvents
​string[] · required

The events this endpoint is subscribed to. An event is delivered to every enabled endpoint subscribed to its type.

Available events:

  • subscription.assigned — Fired when a subscription is assigned to a customer (may be future-dated / upcoming).
  • subscription.started — Fired when a subscription becomes active — grant entitlement/access on this event, not on assigned.
  • subscription.updated — Fired when a config property changes without a structural transition (e.g. name, payment method, billing direction).
  • subscription.transitioned — Fired on a structural change: plan replace, product edit, billing cadence change, phase change, or realign.
  • subscription.paused — Fired when a subscription is paused.
  • subscription.resumed — Fired when a subscription resumes from a pause.
  • subscription.trial_ended — Fired when a subscription trial ends. The payload outcome says whether billing begins (ACTIVE) or the subscription was held for a missing payment card (PAUSED).
  • subscription.cancellation_scheduled — Fired when a future cancellation is scheduled for a subscription (still active until then).
  • subscription.cancellation_cleared — Fired when a previously scheduled cancellation is cleared.
  • subscription.churned — Fired when a subscription is cancelled/finalized — revoke entitlement on this event.
  • subscription.billed — Fired once per subscription that billed onto an invoice — one per child on a parent-paid consolidated invoice, one per member on a billing-group invoice. amount is always the whole document total; deduplicate on invoiceId, attribute on billingGroupId, never sum amount across events.
  • subscription.billing_held — Fired when a billing run holds an invoice instead of issuing it, because it is below the minimum invoice amount or below the smallest amount the subscription's card can be charged: nothing is invoiced or charged, and the held periods are added to the subscription's next invoice. One event per subscription with a period on the held invoice.
  • subscription.payment_succeeded — Fired when a card charge for the subscription clears — the success pair of the charge_failed error signal. On a billing-group card charge one event fires per member, each carrying the full charged amount and the shared billingGroupId.
  • subscription.error — Fired when a delivery/processing problem occurs for a subscription (e.g. undeliverable recipient).
  • billing.invoice_sent — Fired when an invoice document is sent to the customer.
  • billing.credit_note_sent — Fired when a credit note document is sent to the customer.
  • billing.invoice_updated — Fired when an invoice is changed, in the app or through the API alike: its fields, its lines or their order, or its status. A draft scheduled or cancelled fires it, and so does an invoice reaching sent once it is delivered, beside billing.invoice_sent. A save that changes nothing fires nothing; changedFields names what moved.
  • billing.invoice_deleted — Fired when a draft invoice is deleted, in the app or through the API alike. Only drafts can be deleted; a sent invoice is corrected with a credit note instead.
  • billing.invoice_paid — Fired when a customer invoice becomes paid in full: by payments, by a settlement, or by a credit note applied to it. Only the invoice fires it — the credit note it was settled against does not, and neither does a reminder fee or an advance. A partial payment fires nothing. An invoice reopened (a payment reverted) and paid again fires again. Invoices brought in by an import do not fire it.
  • customer.created — Fired when a customer is created (payload flags whether it was a portal self-signup).
  • card.added — Fired when a card is successfully saved for a customer (provider-opaque).
  • card.removed — Fired when a saved card is removed in-app or cancelled at the provider.
  • card.updated — Fired when a saved card’s details change (network auto-update or refresh).
  • card.expiring — Fired when a saved card is approaching expiry.
  • card.expired — Fired when a saved card is observed to have expired.
  • card.default_changed — Fired when the customer’s default card changes (explicit or auto-default).
  • card.backup_changed — Fired when the customer’s designated backup card is set, replaced, or cleared.
  • card.add_failed — Fired when a card-save attempt fails (decline or authentication failure).
  • quote.sent — Fired when a quote is sent to the customer.
  • quote.converted — Fired when a quote is converted into an order confirmation or an invoice.
  • order_confirmation.sent — Fired when an order confirmation is sent to the customer.
  • order_confirmation.converted — Fired when an order confirmation is converted into an invoice.
  • checkout.card_ready — Fired when the buyer's card lands on a checkout session's card window — confirm may proceed. The card-status poll remains authoritative.
  • checkout.card_failed — Fired when a checkout card window closes without a card (the provider window expired mid-capture) — open a fresh window to retry.
  • checkout.session_expired — Fired when a checkout session expires unconsumed — the abandoned-checkout signal.
  • project.created — Fired when a project is created (payload carries the owned dimension id for correlation with the dimensions API).
  • project.updated — Fired when a project's fields are updated (payload lists the changed field names). Also fires on un-archive.
  • project.archived — Fired when a project is archived (its dimension is deactivated; postings history is preserved).
  • stock.balance_changed — Fired for every stock movement that changes sellable stock, carrying the position's on-hand after it — the signal a sales channel republishes availability on.
  • shipment.dispatched — Fired when a shipment leaves the warehouse and its cost of goods sold posts.
  • shipment.cancelled — Fired when a DISPATCHED shipment is cancelled and its posting unwound. Cancelling a draft moves nothing and fires nothing.
  • flow.tap — Fired when a flow tap this endpoint is named on fires: once per document, carrying the tap id, the optional subject and body the tap was written with, and the object the step declares for that outcome when the tap attaches it (otherwise null). Subscribing makes the endpoint available to taps; it receives only the taps that name it.
  • agent.message — Fired when an agent's Post block that names this endpoint posts: once per message that reaches the block, carrying the agent, the run, the post's title and text, and the message's structured content. Subscribing makes the endpoint available to Post blocks; it receives only the posts of the blocks that name it.
Enum values:
subscription.assigned
subscription.started
subscription.updated
subscription.transitioned
subscription.paused
subscription.resumed
subscription.trial_ended
subscription.cancellation_scheduled
Example: ["subscription.assigned"]
status
​string · enum · required

Delivery status. disabled endpoints are retained but receive no events.

Enum values:
enabled
disabled
Example: enabled
createdAt
​string · required

ISO 8601 creation timestamp.

Example: 2026-05-29T10:00:00.000Z
updatedAt
​string · required

ISO 8601 last-update timestamp.

Example: 2026-05-29T10:00:00.000Z
secret
​string · required

The signing secret (shown only on create and roll-secret). Used to verify the webhook-signature header.

Example: whsec_...
description
​string | null

Optional human-facing description of what this endpoint is used for.

Example: Production billing sync
POST/v1/webhook-endpoints/{id}/roll-secret
curl https://api.ledgerbee.com/api/v1/webhook-endpoints/:id/roll-secret \ --request POST \ --header 'x-api-key: <api-key>'
Example Responses
{ "id": "0192f3a1-...", "url": "https://example.com/webhooks/ledgerbee", "enabledEvents": [ "subscription.assigned" ], "status": "enabled", "description": "Production billing sync", "createdAt": "2026-05-29T10:00:00.000Z", "updatedAt": "2026-05-29T10:00:00.000Z", "secret": "whsec_..." }
json
application/json

Send a test event

POST
https://api.ledgerbee.com/api
/v1/webhook-endpoints/{id}/test
x-api-key (header)
or
OAuth 2.0

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

Synchronously POSTs a signed sample payload for the given event to the endpoint’s URL and returns the result. No delivery is recorded.

Required Scope

  • webhook-endpoints-read

Send a test event › path Parameters

id
​string · required

The webhook endpoint id.

Send a test event › Headers

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

Optional idempotency key for safely retrying mutating requests.

Send a test event › Request Body

TestWebhookEndpointRequest
event
​string · enum · required

The event type to simulate. Must be one of the endpoint’s subscribed events.

Available events:

  • subscription.assigned — Fired when a subscription is assigned to a customer (may be future-dated / upcoming).
  • subscription.started — Fired when a subscription becomes active — grant entitlement/access on this event, not on assigned.
  • subscription.updated — Fired when a config property changes without a structural transition (e.g. name, payment method, billing direction).
  • subscription.transitioned — Fired on a structural change: plan replace, product edit, billing cadence change, phase change, or realign.
  • subscription.paused — Fired when a subscription is paused.
  • subscription.resumed — Fired when a subscription resumes from a pause.
  • subscription.trial_ended — Fired when a subscription trial ends. The payload outcome says whether billing begins (ACTIVE) or the subscription was held for a missing payment card (PAUSED).
  • subscription.cancellation_scheduled — Fired when a future cancellation is scheduled for a subscription (still active until then).
  • subscription.cancellation_cleared — Fired when a previously scheduled cancellation is cleared.
  • subscription.churned — Fired when a subscription is cancelled/finalized — revoke entitlement on this event.
  • subscription.billed — Fired once per subscription that billed onto an invoice — one per child on a parent-paid consolidated invoice, one per member on a billing-group invoice. amount is always the whole document total; deduplicate on invoiceId, attribute on billingGroupId, never sum amount across events.
  • subscription.billing_held — Fired when a billing run holds an invoice instead of issuing it, because it is below the minimum invoice amount or below the smallest amount the subscription's card can be charged: nothing is invoiced or charged, and the held periods are added to the subscription's next invoice. One event per subscription with a period on the held invoice.
  • subscription.payment_succeeded — Fired when a card charge for the subscription clears — the success pair of the charge_failed error signal. On a billing-group card charge one event fires per member, each carrying the full charged amount and the shared billingGroupId.
  • subscription.error — Fired when a delivery/processing problem occurs for a subscription (e.g. undeliverable recipient).
  • billing.invoice_sent — Fired when an invoice document is sent to the customer.
  • billing.credit_note_sent — Fired when a credit note document is sent to the customer.
  • billing.invoice_updated — Fired when an invoice is changed, in the app or through the API alike: its fields, its lines or their order, or its status. A draft scheduled or cancelled fires it, and so does an invoice reaching sent once it is delivered, beside billing.invoice_sent. A save that changes nothing fires nothing; changedFields names what moved.
  • billing.invoice_deleted — Fired when a draft invoice is deleted, in the app or through the API alike. Only drafts can be deleted; a sent invoice is corrected with a credit note instead.
  • billing.invoice_paid — Fired when a customer invoice becomes paid in full: by payments, by a settlement, or by a credit note applied to it. Only the invoice fires it — the credit note it was settled against does not, and neither does a reminder fee or an advance. A partial payment fires nothing. An invoice reopened (a payment reverted) and paid again fires again. Invoices brought in by an import do not fire it.
  • customer.created — Fired when a customer is created (payload flags whether it was a portal self-signup).
  • card.added — Fired when a card is successfully saved for a customer (provider-opaque).
  • card.removed — Fired when a saved card is removed in-app or cancelled at the provider.
  • card.updated — Fired when a saved card’s details change (network auto-update or refresh).
  • card.expiring — Fired when a saved card is approaching expiry.
  • card.expired — Fired when a saved card is observed to have expired.
  • card.default_changed — Fired when the customer’s default card changes (explicit or auto-default).
  • card.backup_changed — Fired when the customer’s designated backup card is set, replaced, or cleared.
  • card.add_failed — Fired when a card-save attempt fails (decline or authentication failure).
  • quote.sent — Fired when a quote is sent to the customer.
  • quote.converted — Fired when a quote is converted into an order confirmation or an invoice.
  • order_confirmation.sent — Fired when an order confirmation is sent to the customer.
  • order_confirmation.converted — Fired when an order confirmation is converted into an invoice.
  • checkout.card_ready — Fired when the buyer's card lands on a checkout session's card window — confirm may proceed. The card-status poll remains authoritative.
  • checkout.card_failed — Fired when a checkout card window closes without a card (the provider window expired mid-capture) — open a fresh window to retry.
  • checkout.session_expired — Fired when a checkout session expires unconsumed — the abandoned-checkout signal.
  • project.created — Fired when a project is created (payload carries the owned dimension id for correlation with the dimensions API).
  • project.updated — Fired when a project's fields are updated (payload lists the changed field names). Also fires on un-archive.
  • project.archived — Fired when a project is archived (its dimension is deactivated; postings history is preserved).
  • stock.balance_changed — Fired for every stock movement that changes sellable stock, carrying the position's on-hand after it — the signal a sales channel republishes availability on.
  • shipment.dispatched — Fired when a shipment leaves the warehouse and its cost of goods sold posts.
  • shipment.cancelled — Fired when a DISPATCHED shipment is cancelled and its posting unwound. Cancelling a draft moves nothing and fires nothing.
  • flow.tap — Fired when a flow tap this endpoint is named on fires: once per document, carrying the tap id, the optional subject and body the tap was written with, and the object the step declares for that outcome when the tap attaches it (otherwise null). Subscribing makes the endpoint available to taps; it receives only the taps that name it.
  • agent.message — Fired when an agent's Post block that names this endpoint posts: once per message that reaches the block, carrying the agent, the run, the post's title and text, and the message's structured content. Subscribing makes the endpoint available to Post blocks; it receives only the posts of the blocks that name it.
Enum values:
subscription.assigned
subscription.started
subscription.updated
subscription.transitioned
subscription.paused
subscription.resumed
subscription.trial_ended
subscription.cancellation_scheduled
Example: subscription.assigned

Send a test event › Responses

The probe result.

TestWebhookEndpointResult
success
​boolean · required

Whether the endpoint responded with a 2xx status.

Example: true
durationMs
​number · required

Round-trip time of the probe in milliseconds.

Example: 142
statusCode
​number | null

HTTP status returned by the endpoint, or null on a transport error.

Example: 200
error
​string | null

Transport/error message when the probe failed, otherwise null.

Example: null
POST/v1/webhook-endpoints/{id}/test
curl https://api.ledgerbee.com/api/v1/webhook-endpoints/:id/test \ --request POST \ --header 'Content-Type: application/json' \ --header 'x-api-key: <api-key>' \ --data '{ "event": "subscription.assigned" }'
Example Request Body
{ "event": "subscription.assigned" }
json
application/json
Example Responses
{ "success": true, "statusCode": 200, "durationMs": 142, "error": null }
json
application/json

Vendors