Inbox LedgerInbox Ledger
FeaturesWebhooks

Events and payloads

Reference for the nine webhook events Inbox Ledger dispatches, plus the full and excluded JSON payload shapes you receive for each one.

Admin+

When you register a webhook you choose which events you want delivered. Inbox Ledger dispatches nine events today, and the JSON body shape depends on the event.

The events

  • invoice.created: a new invoice finished extraction and was saved.
  • invoice.updated: an existing invoice's fields changed, such as status or total.
  • invoice.excluded: an invoice was marked excluded or filtered out.
  • receipt.created: a new receipt finished extraction and was saved.
  • receipt.updated: an existing receipt's fields changed.
  • receipt.excluded: a receipt was marked excluded or filtered out.
  • credit_note.created: a new credit note finished extraction and was saved.
  • credit_note.updated: an existing credit note's fields changed.
  • credit_note.excluded: a credit note was marked excluded or filtered out.

The three credit-note events fire once credit-note detection is enabled for your workspace. You can subscribe to them now. No delivery arrives until your workspace captures its first credit note.

A tenth event, document.processed, is reserved and not currently dispatched, so do not subscribe to it yet.

Full versus excluded payloads

Created and updated events carry the full payload. The full payload holds the complete invoice, receipt, or credit note, including vendor, recipient (Bill To), tags, and line items.

The three excluded events carry the excluded payload. The excluded payload holds minimal metadata only, because an excluded document has no confirmed financial fields to report.

Fields that tell the kinds apart

document_kind is invoice, receipt, or credit_note, and it appears in both payload shapes. Two fields in the full payload go with it.

  • signed_total is the total with the sign the kind implies. It is negative on a credit note and equal to total on an invoice or a receipt. Sum this field when you want net spend.
  • related_invoice_number is the supplier invoice a credit note corrects. It is null on every other kind, and null on a credit note that does not print one.

total itself stays the positive figure printed on the document, whatever the kind. A credit note carries no due_date.

Example body

The body below is an invoice.created full payload. Fields are null when extraction could not find a value.

{
  "document_id": "8f2a1c44-3b9e-4d77-a1f0-6c2e9b5d0a31",
  "org_id": "1d9c7e22-44a8-4b1c-9f3e-2a6b8c0d4e57",
  "document_kind": "invoice",
  "document_status": "done",
  "document_received_at": "2026-05-24T09:14:02.000Z",
  "document_processed_at": "2026-05-24T09:14:48.000Z",
  "original_filename": "acme-invoice-0042.pdf",
  "email_from": "billing@acme.example",
  "email_subject": "Invoice 0042 from Acme",
  "source_id": "b6e0f3a1-7c2d-49ab-8e11-5d3f9a0c1b22",
  "source_name": "Accounts inbox",
  "source_type": "gmail",
  "invoice_id": "c4d5e6f7-8a9b-40c1-b2d3-e4f5a6b7c8d9",
  "invoice_number": "0042",
  "invoice_status": "unpaid",
  "issue_date": "2026-05-20",
  "due_date": "2026-06-19",
  "currency": "USD",
  "subtotal": 1200.0,
  "tax": 240.0,
  "discount": 0.0,
  "total": 1440.0,
  "signed_total": 1440.0,
  "related_invoice_number": null,
  "is_subscription": false,
  "vendor_id": "a1b2c3d4-5e6f-4071-8293-a4b5c6d7e8f9",
  "vendor_name": "Acme Inc",
  "vendor_vat_id": "US123456789",
  "recipient_name": "Northwind LLC",
  "recipient_vat_id": "US987654321",
  "tag_names": ["software", "monthly"],
  "line_items": [
    { "position": 1, "description": "Pro plan seat", "quantity": 4, "unit_price": 300.0, "amount": 1200.0, "tax": 0.0 }
  ]
}

A credit_note.created payload has the same shape, with the amount fields reading like this.

{
  "document_kind": "credit_note",
  "invoice_number": "CN-0007",
  "related_invoice_number": "0042",
  "issue_date": "2026-06-02",
  "due_date": null,
  "total": 240.0,
  "signed_total": -240.0
}

An excluded payload carries only document_id, org_id, document_kind, email_from, email_subject, original_filename, and extracted_json. Read the X-Event request header to tell which event arrived before you parse the body.

Ready to try this?

Inbox Ledger turns your inbox into clean accounting data. The free tier includes 10 credits, refilled every 30 days.

Start free

On this page