Skip to main content
An accounts payable ledger over BILL’s v3 API: vendors, bills with server-computed amounts, the approval policy a bill has to clear, the payments that settle it, and the receivable side beside it. BILL publishes no Python client, so the conformance suite pins the OpenAPI document BILL serves and validates every response the twin gives against it. Slug: 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 — the apiToken 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.