Docs
API Reference

Payments

Record payments and refunds against invoices

A payment records money received against an invoice. Recording a payment (or a refund, using a negative amount) automatically recalculates the invoice's paid, depositPaid, and balancePaid flags — you do not update those fields yourself.

Stripe-linked payments are read-only

Payments that carry a stripePaymentIntentId or stripeRefundId originate from Stripe and own an entry in Stripe's ledger. They can be read and listed, but attempts to update or delete them return 409 PAYMENT_ACCOUNTING_MANAGED so the books stay in sync. Payments with xeroPaymentId or quickBooksPaymentId use the same code. The paymentMethod values you can write are card, cash, eft, cheque, and other; stripe / stripeRefund are set only by Stripe. Stripe webhook payments historically store the label "Stripe" (capital S) — that value is documented, not rewritten. customerId is accepted on create and defaults from the invoice.

Required scopes: payments:read / payments:write / payments:delete.

Endpoints

  • GET/organisations/{orgId}/payments — List payments (filter by invoiceId)
  • POST/organisations/{orgId}/payments — Record a payment or refund
  • GET/organisations/{orgId}/payments/{paymentId} — Get payment
  • PUT/organisations/{orgId}/payments/{paymentId} — Update payment
  • DELETE/organisations/{orgId}/payments/{paymentId} — Delete payment

The referenced invoiceId must belong to an existing invoice, otherwise the create returns 400. sendReceipt is stored as metadata only — the API does not send receipt emails.

Machine-readable version: OpenAPI spec.

On this page