OutpayDocs
Platform

Payment lifecycle

How a checkout moves from created to paid or terminal.

pending → detected → paid
   │         │
   ├─────────┴→ failed (invalid match)
   └──────────→ expired (window closed)
StateWhen it occursFulfil?
pendingThe checkout exists and awaits a matching transfer.No
detectedA transfer matches enough rules, but confirmation is incomplete.No
paidThe confirmation threshold is met and the payment is recorded.Yes, exactly once
failedThe matcher rejected an invalid amount, currency, network, or other mismatch.No
expiredThe checkout's time-to-live, or its detected-payment grace period, elapsed.No — investigate a late transfer separately
deactivatedA merchant or operator deactivated the checkout.No

The status machine also tracks internal payment-intent states — awaiting_payment, detected, confirmed, mismatched, expired — that are not a promise every internal value appears in the public API. See schemas for exactly what each API surface returns.

Underpayment and overpayment

The matcher has explicit amount-mismatch handling, including a configurable tolerance for a slight overpayment. There is no merchant-facing automatic refund or remediation workflow — investigate a mismatch manually using the checkout reference and transaction hash.

On this page