Skip to content

Status & lifecycle reference

Four state machines drive the platform. Illegal transitions are rejected with a 422 carrying a stable problem discriminator.

Subscription

pending_activation ──► trialing ──► active ──► past_due ──► canceled
│ │ │
▼ ▼ ▼
active paused canceled
└──► active (resume)
FromToTrigger
pending_activationtrialingActivation with trial.
pending_activationactiveActivation without trial.
pending_activationincomplete_expiredActivation deadline elapsed.
trialingactiveTrial end reached; first invoice issued.
trialingcanceledCancellation during trial.
activepast_dueA payment failed.
activepausedPOST /v1/subscriptions/{id}/pause.
activecanceledCancellation, immediate.
activeendedCommitment ended without renewal.
past_dueactiveA retry succeeded (dunning recovered).
past_duecanceledDunning exhausted with on_exhaustion: cancel_subscription.
past_duepausedDunning exhausted with on_exhaustion: pause_subscription.
pausedactiveAuto-resume on paused_until, or manual resume.
pausedcanceledCancellation during pause.

Terminal: canceled, ended, incomplete_expired.

Invoice

draft ──► open ──► partially_paid ──► paid
│ │ │
▼ ▼ ▼
void uncollectible …
FromToTrigger
draftopenPOST /v1/invoices/{id}/finalize.
draft(deleted)DELETE /v1/invoices/{id} on a draft.
openpartially_paidA payment ≤ amount_due succeeded.
openpaidA payment cleared the balance to ≤ 0.
openvoidPOST /v1/invoices/{id}/void.
openuncollectiblePOST /v1/invoices/{id}/mark-uncollectible.
partially_paidpaidA subsequent payment cleared the balance.
partially_paiduncollectibleOperator marks unrecoverable.

Terminal: paid, void, uncollectible.

Payment

pending ──► processing ──► requires_action ──► succeeded
│ │ │
▼ ▼ ▼
canceled failed refunded / partially_refunded / charged_back
FromToTrigger
pendingprocessingSent to provider.
pendingcanceledManual cancel before send.
processingrequires_actionProvider returned 3DS / SCA challenge.
processingsucceededCapture cleared.
processingfailedProvider declined.
requires_actionprocessingCustomer completed the action.
requires_actionfailedAction timed out / rejected.
requires_actioncanceledManual cancel.
succeededrefundedSum of refunds equals payment amount.
succeededpartially_refundedSum of refunds < payment amount, > 0.
succeededcharged_backProvider notified of chargeback.
charged_backdispute_won (meta)Dispute resolved in your favour. (status returns to succeeded.)
charged_backdispute_lost (meta)Dispute resolved against you.

Terminal: failed, canceled, refunded, dispute_lost (charged-back final).

Dunning cycle

active ──► retry_scheduled ──► awaiting_customer_action ──► resolved
│ │
▼ ▼
exhausted exhausted
FromToTrigger
activeretry_scheduledFailed payment, next retry queued.
retry_scheduledawaiting_customer_actionProvider hint says step-up needed.
awaiting_customer_actionretry_scheduledCustomer updated method.
retry_scheduledresolvedA retry succeeded.
retry_scheduledexhaustedPolicy ran out.
awaiting_customer_actionexhaustedAction window elapsed.

Terminal: resolved, exhausted.

Common rejection problems

problemWhen
subscription.illegal_transitionTrying to cancel a canceled subscription, etc.
subscription.commitment_activeCancellation rejected because commitment forbids it.
invoice.lockedMutation attempted on a non-draft invoice.
invoice.cannot_void_paidVoiding an invoice with amount_paid > 0.
payment.requires_actionWraps the next-action contract, not strictly a rejection.
payment.cannot_refund_failedRefund attempted on a non-succeeded payment.