On this page
arPay
mutation · in the family Selling
What it does
Take a payment against a customer’s house account.
PAY DOWN a house account: ONE payment AREntry + the CONDITIONED balance decrement + THE FIFO FRONTIER ADVANCE land in ONE transaction (strictly oldest-first over open charges; ledger entries stay 100% immutable — the frontier pair moves on the MASTER). amountMinor ≤ arBalanceMinor else CONFLICT/INSUFFICIENT_AR_BALANCE naming live figures (AR never negative; prepayment/credit balances = the named deferral). NO allocations array (deterministic law + the event lake = the audit trail). Requires the unrestricted capability.
What happens
The payment applies strictly oldest-first across open charges — the deterministic law; the ledger records it forever.
Careful
Money in, applied oldest-first ALWAYS (no cherry-picking invoices in v1 — that is the recorded rule).
Who may call it
Capability area: Selling — Ringing sales, serving customers and issuing invoices.
- Owner
- Manager
- Associate Manager
- Sales Associate
- Cashier
- An API key whose scope allows
api:arPay
Arguments
| Name | Type | Required | Notes |
|---|---|---|---|
input | ArPayInput ArPayInput! | yes | No further notes. |
Returns
OrgCustomer OrgCustomer! — An OrgCustomer — the per-org selling ENABLEMENT of a group CorporateCustomer, the sell-side mirror of the OrgVendor: an ACTIVE OrgCustomer IS the B2B selling enablement (no B2B terms without one). Parent = the ORGANIZATION (not the family root); the selection IS the (org × corporateCustomer) edge — ≤1 live per pair via the UNIQ pair marker minted IN the create transaction. Terms payload: accountNumber · canned paymentTerms (the registry SHARED with the OrgVendor; NO free-text twin — a born construct starts canned-only) · creditLimit/orderMinimum house Money on the sell-side currency rule (NO local currency field — every money field matches the org's defaultCurrency at set, create AND edit; the OrgVendor's local purchasingCurrency is deliberately NOT mirrored; ENFORCEMENT is credit / minimums) · the customerPriceGroupId carrier (in-tenant + ACTIVE at set — the member-carrier class; the order-time B2B precedence law is; the CPG doom RI gains this SECOND carrier class) · billToContactId/shipToContactId (non-doomed + a LIVE ContactAssignment on THIS customer's host — sell-side counterparty addresses need host-membership integrity, the disclosed OrgVendor divergence). Deactivate FREE (selling paused); doom structurally unblocked EXCEPT live holder ExemptionCertificates. The priceListId carrier is LIVE. MOQ/case enforcement is.
Example request
mutation ExampleArPay($input: ArPayInput!) {
arPay(input: $input) {
id
sysId
type
caption
status
parentId
rootId
createdAt
updatedAt
revisionNum
revision
corporateCustomerId
accountNumber
paymentTerms
customerPriceGroupId
priceListId
billToContactId
shipToContactId
code
arBalanceMinor
arCurrency
}
}
Variables:
{
"input": {
"orgCustomerId": "01900000-0000-7000-8000-ba56ff800000",
"amountMinor": 1,
"reason": "Correcting a miscount."
}
}
Send it with the envelope naming the version: "extensions": {"at": {"version": {"name":"genesis","number":0}}}.
Example response
{
"data": {
"arPay": {
"id": "01900000-0000-7000-8000-37386ae00000",
"sysId": "EC-EXMP-0000-000F",
"type": "OrgCustomer",
"caption": "Blue jeans",
"status": "active",
"parentId": "01900000-0000-7000-8000-065235280000",
"rootId": "01900000-0000-7000-8000-a093dd800000",
"createdAt": "2027-01-31T00:00:00.000Z",
"updatedAt": "2027-01-31T00:00:00.000Z",
"revisionNum": 1,
"revision": "01900000-0000-7000-8000-b7960e180000",
"corporateCustomerId": "01900000-0000-7000-8000-e09097190000",
"accountNumber": "<account number>",
"paymentTerms": "<payment terms>",
"customerPriceGroupId": "01900000-0000-7000-8000-dfbf5aa40000",
"priceListId": "01900000-0000-7000-8000-7844e9fb0000",
"billToContactId": "01900000-0000-7000-8000-cd1d9f9e0000",
"shipToContactId": "01900000-0000-7000-8000-abe45fdf0000",
"code": "BJ-001",
"arBalanceMinor": 1,
"arCurrency": "<ar currency>"
}
},
"extensions": {
"at": {
"callId": "01EXAMPLE-CALL-ID",
"version": {
"requested": {
"name": "genesis",
"number": 0
},
"serviced": {
"name": "genesis",
"number": 0
}
}
}
}
}
Errors this call can answer
VALIDATION/INVALID— Something in the request is not valid. (VALIDATION)AUTHN/REQUIRED— Sign in to do this. (AUTHN)AUTHZ/FORBIDDEN— Your role does not allow this action. (AUTHZ)RATE_LIMIT/THROTTLED— Too many requests in a short time. (RATE_LIMIT)NOT_FOUND/*— That record could not be found. (NOT_FOUND)CONFLICT/*— The record’s state, or a change made in the meantime, does not allow this; the codes are on the CONFLICT page. (CONFLICT)VALIDATION/VERSION_REQUIRED— The request did not say which app version it came from. (VALIDATION)