Invoice and Credit Note Events

Three events cover invoicing. All three carry the same object shape; only the wrapping key and the event identifier differ.

Identifier Fires when Payload key
invoiceCreated An invoice is created. invoice
invoicePaid An invoice is paid. invoice
creditNoteCreated A credit note is created. creditNote

Webhook payload

{
    "event": "invoiceCreated",
    "data": {
        "invoice": {}
    }
}

A credit note uses the same structure under a different key:

{
    "event": "creditNoteCreated",
    "data": {
        "creditNote": {}
    }
}

invoice / creditNote

{
    "id": "SW52b2ljZTo5ODc2",
    "companyId": "Q29tcGFueTo0MjA=",
    "companyName": "Acme Corp",
    "number": "INV-2026-00412",
    "currency": "USD",
    "grossAmount": 1650000,
    "netAmount": 1320000,
    "taxAmount": 330000,
    "date": "2026-09-01",
    "dueDate": "2026-09-15",
    "markedPaidAt": null,
    "paymentStatus": "due",
    "isBatched": true,
    "paymentRequestIds": [
        "QmlsbDoxMjM0",
        "QmlsbDoxMjM1"
    ]
}
Field Notes
id Global ID of the invoice or credit note.
companyId, companyName The company being invoiced.
number The human-readable document number.
grossAmount, netAmount, taxAmount Integers in minor units of currency.
date, dueDate YYYY-MM-DD.
markedPaidAt Timestamp in 24-hour time (YYYY-MM-DD HH:mm:ss), null until the invoice is marked paid.
paymentStatus The invoice’s payment state.
isBatched true when the invoice covers several payment requests.
paymentRequestIds Global IDs of the payment requests billed, which link these events to the payment request events.
originalInvoiceId Credit notes only. Present only when the credit note relates to an earlier invoice, and absent otherwise rather than null.

Warning

originalInvoiceId is omitted from the payload when it does not apply, rather than being sent as null. Check for the key’s presence rather than its value.

Handling these events

  • Amounts are in minor units, so grossAmount: 1650000 in USD is $16,500.00.
  • paymentRequestIds is the join back to the work being billed. Use it to reconcile an invoice against the payment requests your system already knows about.
  • A batched invoice covers several payment requests, so do not assume one invoice maps to one engagement.
  • For anything beyond these fields, call the GraphQL API with the IDs supplied. See Handle Webhooks.