Inbound events
API-key authenticated events sent to /api/v1/events.
Webhook Event Registry
Use this registry to see which inbound event types LedgerLine accepts, which outbound webhook events are active, which provider webhook paths are optional, and which event patterns remain planned. The page is static documentation only: no live webhook tester, no secret input, and no external provider calls.
API-key authenticated events sent to /api/v1/events.
Signed JSON POST deliveries to active endpoints.
Stable event ids and Idempotency-Key values keep retries safe.
Stripe paths are optional; core accounting is provider-neutral.
The active public API request uses `event_type`, `external_event_id`, and `payload`. Unsupported event types return validation errors.
POST /api/v1/events
Authorization: Bearer ll_test_replace_me
Content-Type: application/json
Idempotency-Key: evt_example_123
{
"event_type": "payment.received",
"external_event_id": "evt_example_123",
"payload": {
"external_payment_id": "pay_example",
"external_invoice_id": "inv_example",
"amount_cents": 25000,
"currency": "USD",
"processor": "other",
"received_at": "2026-01-01T00:00:00.000Z"
}
}| Event type | Status | Behavior |
|---|---|---|
| customer.created | accepted/stored | Stores the event. It does not create a LedgerLine customer. |
| customer.updated | accepted/stored | Stores the event. It does not update a LedgerLine customer. |
| invoice.created | accepted/stored | Stores the event. It does not create or post an invoice. |
| invoice.voided | accepted/stored | Stores the event. It does not void or reverse an invoice. |
| payment.received | active | Stores the event and can process into the existing payment flow when payload validation and invoice matching pass. |
| payment.refunded | accepted/stored; active when mapped | Public API ingest stores it. Verified Stripe refund mapping can process supported full refunds. |
| credit.applied | accepted/stored | Stores the event. Credit memo behavior remains future. |
| expense.created | accepted/stored | Stores the event. It does not create expenses or journal entries. |
| estimate.created | planned | Recommended future pattern only; not accepted by /api/v1/events today. |
| vendor.created | planned | Recommended future pattern only; use the Vendor API today. |
| bill.posted | planned | Recommended future pattern only; use the Bills API posting route today. |
| vendor_payment.posted | planned | Recommended future pattern only; use the Vendor Payments API posting route today. |
| document.uploaded | planned | Recommended future pattern only; use Document Center APIs today. |
| Event type | Status | Behavior |
|---|---|---|
| webhook.test | active | Sent from the dashboard test action for active webhook endpoints. |
| invoice.posted | active | Emitted after successful invoice posting when connected app context exists. |
| payment.posted | active | Emitted after successful payment posting when connected app context exists. |
| invoice.paid | active | Emitted after payment posting when an invoice reaches paid status. |
| invoice.partially_paid | active | Emitted after payment posting when an invoice remains partially paid. |
| processor_payout.posted | planned | Type exists, but current manual payout flow does not emit it because dashboard-created payouts do not have connected app context. |
| journal_entry.posted | planned | Type exists for future ledger notifications; not broadly emitted today. |
| bill.posted | planned | Planned future outbound notification for A/P posting. |
| vendor_payment.posted | planned | Planned future outbound notification for vendor payment posting. |
| api_key.revoked | planned | Planned future security/audit notification. |
{
"id": "evt_delivery_uuid",
"type": "payment.posted",
"created_at": "2026-01-01T00:00:00.000Z",
"environment": "test",
"organization_id": "org_example",
"connected_app_id": "app_example",
"data": {
"payment_id": "pay_example",
"invoice_id": "inv_example",
"amount_cents": 25000,
"currency": "USD"
}
}Ledgerline-Signature: hex_hmac_signature
Ledgerline-Timestamp: 1767225600
Ledgerline-Event-Id: evt_delivery_uuidVerify HMAC-SHA-256 over timestamp + "." + raw JSON payload. Respond quickly with 2xx, enqueue slow work, and deduplicate using the webhook event id. Review these rules in test mode before relying on webhooks for live-mode workflows.
The repo includes a fake-only Node receiver example at examples/webhook-receiver. It demonstrates server-side HMAC verification, sample payload signing, safe logs, and demo-only in-memory idempotency. It does not call LedgerLine APIs, mutate LedgerLine data, upload files, or connect providers.
The repo registry gives deeper status labels, examples, retry behavior, error handling, and QA coverage.
Developer Docs
Pair event schemas with setup guidance, API recipes, OpenAPI, the read-only API Reference, and security boundaries.
Browse the technical LedgerLine developer documentation hub.
Open docs homeFollow the first-run setup/testing path for connected apps.
Start setup pathReview server-side API keys, first calls, webhooks, errors, and boundaries.
Read guideBrowse read-only route groups, fake examples, SDK snippets, and response shapes.
Open referenceDownload the manual OpenAPI 3.1 source for the public API.
View specPreserved bridge to the Build with AI prompt library.
Open bridgeUse workflow examples for money-in, money-out, documents, and reports.
Browse recipesReview API versioning, changelog, deprecation, and compatibility policy.
Review policyUnderstand posting, reversals, A/R, A/P, reports, and documents.
Read modelReview API-key safety, scope isolation, storage, rate limits, and gates.
Read securityUse the guided setup planner when you are not sure which endpoints you need.
Open planner