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 orders the invoice bills (use Orders for their lines)
  • the payments applied to it
  • its adjustments: credit for 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