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 byinvoiceId) - 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.