Skip to main content
This guide covers the bill pay lifecycle from a developer’s perspective — the statuses a bill can occupy, valid transitions between them, and how external events (deletion, revision, charge changes) affect in-flight cycles.

Cycle overview

Every bill that enters the bill pay pipeline gets a cycle — a stateful object that tracks the bill’s position in the payment lifecycle. The cycle progresses through a series of statuses driven by automated evaluation, manual actions, and external signals.

Status reference

StatusCategoryDescriptionTerminal?
UNVALIDATEDInitialBill entered the cycle, checking for data quality issuesNo
VALIDATEDPre-routingBill passed validation, awaiting reviewNo
PENDING_ROUTINGPre-routingNo routing rules matched; waiting for manual assignmentNo
DELIVEREDTerminalBill forwarded to AP team or ERP systemYes
FUNDING_REQUESTEDIn-flightCentralized path: waiting for customer fundingNo
FUNDING_RECEIVEDIn-flightFunds received, vendor payment being initiatedNo
PAYMENT_PROCESSINGIn-flightPayment in progress with providerNo
PAIDTerminalVendor paid successfullyYes
PAYMENT_FAILEDTerminalPayment attempt failedYes
CANCELLEDTerminalCycle cancelled (bill deleted, or manual action)Yes
NO_PAYMENT_REQUIREDTerminalNo payment needed for this billYes
IN_EXCEPTIONParkedIssue raised; cycle pauses, resumes on resolutionNo
IN_DISPUTEParkedDispute opened; cycle pauses, resumes on resolutionNo

State transitions

Primary flow (delivered path)

UNVALIDATED → VALIDATED → [rule evaluation] → DELIVERED
If no rules match:
VALIDATED → PENDING_ROUTING → (manual assignment) → DELIVERED

Primary flow (centralized path)

UNVALIDATED → VALIDATED → FUNDING_REQUESTED → FUNDING_RECEIVED → PAYMENT_PROCESSING → PAID
Payment failure:
PAYMENT_PROCESSING → PAYMENT_FAILED

Exception and dispute parking

Any non-terminal status can transition to IN_EXCEPTION or IN_DISPUTE. When resolved, the cycle restores to its prior status and resumes from that point.
VALIDATED → IN_EXCEPTION → VALIDATED (restored)
FUNDING_REQUESTED → IN_DISPUTE → FUNDING_REQUESTED (restored)

Cancellation

Most non-terminal statuses can be cancelled:
UNVALIDATED / VALIDATED / PENDING_ROUTING / FUNDING_REQUESTED / FUNDING_RECEIVED → CANCELLED

Terminal statuses

Once a cycle reaches a terminal status, no further transitions occur:
  • PAID — vendor paid successfully
  • DELIVERED — bill forwarded to AP/ERP
  • CANCELLED — cycle terminated
  • PAYMENT_FAILED — payment attempt failed, flagged for attention
  • NO_PAYMENT_REQUIRED — bill doesn’t require payment
  • REFUNDED — payment was refunded
  • ARCHIVED — cycle archived administratively

In-flight statuses (special handling)

The statuses FUNDING_REQUESTED, FUNDING_RECEIVED, and PAYMENT_PROCESSING represent cycles where real money movement may have begun. If a bill is deleted or revised while in one of these states, the cycle is cancelled and flagged for manual reconciliation rather than being silently terminated.

Bill lifecycle events

Bill deletion

Cycle stateBehavior
Terminal (including PAID)Event logged; no state change
In-flightCancelled + flagged for manual reconciliation
All other non-terminalCancelled

Bill revision

When a bill is revised (superseded by a corrected version), the old cycle is cancelled following the same rules as deletion. The new bill version creates a fresh cycle if bill pay is enabled.

Charge amount change

Cycle stateBehavior
TerminalNo action
In-flightAmount change logged + flagged for attention
VALIDATEDCycle cancelled with reason “amount changed”
All otherAmount change logged

Late-risk escalation

Bills with a due date are monitored for late-payment risk. Three escalation tiers are calculated from dueDate - bufferDays:
TierTriggerDefault timing
WARNINGdueDate - bufferDays7 days before due
URGENTdueDate - (bufferDays / 2)~3-4 days before due
CRITICALdueDate - 2 days2 days before due
The buffer is configurable per company. Each escalation tier sends notifications to users matched by notification rules. The timer is cancelled when the cycle reaches a terminal status.