Skip to main content
Invoice events fire as an invoice moves through its lifecycle in Pazy. There are eight event types. The outcome is in the event name, so the payload has no 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.approved fires once, on the final approval.
  • invoice.sync_requested fires whenever someone starts a sync. It says a sync was attempted, not that it finished.
  • invoice.synced fires 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.submitted again.
  • 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.
The payload carries no line items and no accounting system identifiers. Fetch the invoice by 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

Use data.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.