status field.
All eight share one payload shape. Subscribe with
invoice.* to receive them all, or subscribe to only the types you need. For example, an ERP bridge can subscribe to invoice.sync_requested alone.
Things to know
- Intermediate approval levels don’t fire events.
invoice.approvedfires once, on the final approval. invoice.sync_requestedfires whenever someone starts a sync. It says a sync was attempted, not that it finished.invoice.syncedfires only for organizations with a native accounting integration. It reports that the sync completed.- A declined invoice returns to draft. When it is submitted again, you receive
invoice.submittedagain. - Not covered: archiving, deleting or restoring an invoice, and sync failures don’t raise events.
Fields
For an uploaded document,
invoice.created fires before extraction finishes. invoiceNumber, amount and vendor can be null on that event. They are filled in on later events, or fetch the invoice by id.id for the full record.
metadata
For other event types,
metadata is null unless a later release adds keys. Ignore keys you don’t recognize.
source on invoice.paid
Example: invoice.approved
Example: invoice.paid
invoice.paid and payment.invoice.completed
The two events answer different questions.
Use
payment.invoice.* when you need each payment, its amount or its reference. Use invoice.paid when you only need to know the invoice is settled. An invoice settled by an advance or a vendor credit raises invoice.paid with source set to SETTLEMENT, and has no payment event.
Fetch the full invoice
Usedata.id with Invoice Details (GET /v1.0/invoice/:id) to get line items and the rest of the record. Treat the API as the source of truth if you suspect you missed an event.