bill
What it models
Advancing moves every lifecycle one step: a vendor bank account from unverified to verified, which closes BILL’s two business day window and is what makes its
BDC_1402 refusal reachable; a session past its idle window; a scheduled payment into process and then to paid — or to failed, when a directive seeded that outcome, which puts the bill back in debt; and a bill past its due date, which an aging report reads as BILL gives it, through dueDate and dueAmount.
Scenarios
busy-payables, awaiting-approval, failed-payment, expired-session, open-receivables.
Not modelled
Every Spend & Expense operation — theapiToken surface BILL ships in the same document, which was Divvy — so the twin never implies it covers it. Budgets, cards, credit memos, vendor credits, reimbursements, recurring bills and invoices, mass and bulk payments, exports and reports, risk verifications, the BILL network, user roles, custom fields, documents and attachments, and international payment configuration. Voiding a payment, creating an organization bank account, the vendor bank account endpoints, non-USD amounts, the accounting classifications BILL filters bills and invoices by, and MFA, which this organization has switched off at the developer key level. BILL declares no idempotency header, so the twin reads none: a retried create makes a second bill, and refusing a duplicate invoice number is the protection BILL actually offers.
The twin was built from BILL’s OpenAPI document and developer documentation without a sandbox account, so the per-code HTTP statuses, the developer key and session id formats, and the payment lifecycle’s exact order are choices rather than observations. Its README lists every one of them.