API docs
House accounts and invoices
Permission: accounts (read / write).
House accounts let a shop's trusted customers (departments, clubs, contractors) buy now and pay later. The customer's purchase is charged to their account at the register and billed on an invoice, one per sale or on a monthly statement depending on the shop's settings. Payments are applied to invoices oldest first. Charging to an account only happens at the register. Through the API you read accounts and invoices, and record money the customer paid somewhere else.
A customer's account
GET /v1/customers/{id}/account (read).
{
"status": "ok",
"data": {
"object": "account",
"customer_id": 1402,
"enabled": true,
"terms_days": 30,
"invoice_mode": "per_sale",
"credit_limit_cents": 500000,
"balance_cents": 50996,
"unbilled_cents": 0,
"overdue_cents": 0,
"available_cents": 449004,
"can_charge": true,
"open_invoice_ids": [311, 318]
}
}
| Field | Notes |
|---|---|
terms_days |
Days to pay. 0 means due on receipt. |
invoice_mode |
per_sale (an invoice for every sale) or statement (one monthly statement) |
balance_cents |
Everything owed: what's on open invoices plus unbilled_cents (charges waiting for the next statement) |
available_cents |
Credit left before the limit. null when there is no limit set. |
can_charge |
Whether the register would accept another charge right now. It's false when the account is off, at its limit, or blocked because an invoice is overdue. |
Invoices
GET /v1/invoices (read). Oldest first, cursor-paginated.
| Filter | Notes |
|---|---|
customer_id |
One customer |
status |
open, partial, paid, written_off or void |
updated_since |
ISO-8601 date-time |
GET /v1/invoices/{id} (read) also returns:
- the
ordersthe invoice bills (use Orders for their lines) - the
paymentsapplied to it - its
adjustments:creditfor returns and voids,write_off
{
"object": "invoice",
"id": 311,
"number": "INV-00311",
"kind": "sale",
"customer_id": 1402,
"location_id": 3,
"status": "overdue",
"issued_on": "2026-08-20",
"due_on": "2026-09-19",
"terms_days": 30,
"total_cents": 50996,
"paid_cents": 0,
"credited_cents": 0,
"balance_cents": 50996,
"pay_url": "https://app.ironregister.com/api/public/pay/5f0c…",
"sent_at": "2026-08-20T15:02:11Z",
"paid_at": null,
"voided_at": null,
"orders": [{ "order_id": 8812, "number": "S3-000412", "amount_cents": 50996, "completed_at": "2026-08-20T15:01:40Z" }],
"payments": [],
"adjustments": [],
"created_at": "2026-08-20T15:02:11Z",
"updated_at": "2026-08-20T15:02:11Z"
}
| Field | Notes |
|---|---|
kind |
sale or statement |
status |
open, partial, paid, written_off (closed by a write-off, not money received) or void (its sale was voided; anything paid on it moved to the customer's store credit). It reads overdue when an open or part-paid invoice is past due_on. |
pay_url |
A "Pay now" link for the customer, while something is owed and the shop has card processing on. It always charges the balance at the moment it's opened. Payments made through it arrive as account payments with tender card. |
Account payments
GET /v1/account-payments (read). Every payment received on any account, oldest first. Filters: customer_id, updated_since (this filters on the payment's created_at).
| Field | Notes |
|---|---|
tender |
cash, check, card or external |
applied_cents |
How much went onto invoices |
store_credit_cents |
What was left over after the invoices, banked as the customer's store credit |
card_brand / card_last4 |
Set when the payment went through the shop's card processor |
voided_at |
Set when the shop voided the payment. Its money comes back off the invoices. |
Record a payment received elsewhere
POST /v1/customers/{id}/account/payments (write). An Idempotency-Key header is required.
| Field | Required | Notes |
|---|---|---|
amount_cents |
yes | Up to $1,000,000 |
tender |
yes | check, cash or external (a bank transfer, a portal payment) |
reference |
no | Check number, transfer id (up to 120 characters) |
note |
no | Up to 200 characters |
invoice_ids |
no | Apply to these invoices, in this order. Without it, payments go to the oldest due first. |
curl -X POST https://app.ironregister.com/api/v1/customers/1402/account/payments \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: chk-1042" \
-d '{ "amount_cents": 50996, "tender": "check", "reference": "CHK 1042", "invoice_ids": [311] }'
This returns 201 with the account payment plus applied: [{invoice_id, number, amount_cents}]. Card payments can't be recorded through the API. They're taken at the register or through the invoice's pay_url.
A payment can't be more than the account owes (the invoices it applies to plus charges not yet billed) unless your key also has the store_credit permission (write): only then is the rest banked as store credit. Otherwise it's refused with 422 OVERPAYMENT, and details.owed_cents says how much is owed.
Webhooks
| Event | When | Payload |
|---|---|---|
invoice.created |
An invoice or monthly statement is issued | invoice |
invoice.updated |
An invoice is paid, part-paid, credited, voided or written off | invoice |
account.payment_received |
A payment is received: at the counter, through a pay link, or through the API | account payment |