Subscription Statuses

Subscription Statuses

StatusDescription
INITIATIONSubscription has been created but the customer hasn't completed checkout yet
TRIALFree trial in progress — the card is saved, no charge yet. First charge happens when the trial ends (see Trial Periods)
ACTIVESubscription is active and billing normally
PAST_DUEA recurring payment has failed. Inflow will retry automatically — at a reduced price if Smart Retry is enabled
UNPAIDMultiple payment attempts have failed
PAUSEDPayment collection is paused — no payments are collected until the subscription is resumed, manually or on the scheduled resume date. Shown as Paused in the Dashboard
INACTIVESubscription is no longer active (e.g., all cycles completed)
PENDING_CANCELLATIONCancellation requested — will take effect at the end of the current billing cycle (currentPeriodEnd). The status is kept until then, including while a failed renewal is still being retried
CANCELEDSubscription has been fully canceled

Subscription Lifecycle

INITIATION → ACTIVE → (recurring billing) → ACTIVE
           ↘ TRIAL → ACTIVE (first charge at trial end)
                                           ↘ PAUSED → ACTIVE (resumed)
                                           ↘ PAST_DUE → ACTIVE (retry success)
                                                      → UNPAID (retry exhausted)
                                           ↘ PENDING_CANCELLATION → CANCELED
                                           ↘ INACTIVE (cycles completed)

Typical Flow

  1. INITIATION — Customer starts the checkout process.
  2. TRIAL (offers with a trial period only) — Card saved without charging; the subscription stays in trial until the trial ends.
  3. ACTIVE — First payment succeeds. Recurring billing begins.
  4. ACTIVE (ongoing) — Each billing cycle processes successfully.
  5. PAST_DUE — A payment fails. Inflow retries automatically (optionally at a decreasing price — see Smart Retry).
  6. ACTIVE — Payment retry succeeds, subscription returns to normal.
  7. CANCELED — Subscription is canceled by the merchant, customer, or due to payment failures.

Waitlist Statuses

If the offer has waitlist enabled, subscriptions also carry a separate field, waitlistStatus — it does not replace status. A subscription can be e.g. status: INITIATION with waitlistStatus: pending_waitlist:

Waitlist StatusDescription
pending_waitlistCustomer subscribed, awaiting merchant approval
approvedMerchant approved, payment will be processed within 24 hours
activePayment successful, subscription is active
failed_capturePayment attempt failed after approval
declinedMerchant declined the subscriber

Status in the API

When querying subscriptions via the API, the status field contains the subscription status:

{
  "id": "sub_abc123",
  "status": "ACTIVE",
  "name": "Pro Plan",
  "amountInCents": 2999,
  "currency": "EUR",
  "interval": "month",
  "intervalCount": 1,
  "currentPeriodStart": "2025-02-15T10:30:00.000Z",
  "currentPeriodEnd": "2025-03-15T10:30:00.000Z",
  "nextBillingDate": "2025-03-15T10:30:00.000Z",
  "createdAt": "2025-01-15T10:30:00.000Z",
  "updatedAt": "2025-02-15T10:30:00.000Z"
}

Billing period

The subscription object (API responses and subscription.* webhooks alike) carries the current billing period:

  • currentPeriodStart / currentPeriodEnd — the period being billed. Each renewal is issued at the start of its period and covers that period, whatever the date it is eventually paid: a renewal recovered late and the next renewal can be charged on the same day, each for its own period.
  • nextBillingDate — when the subscription will be billed again: the start of the next period, the charge itself being attempted shortly after. null when nothing will be billed again (CANCELED, PENDING_CANCELLATION, PAUSED, last cycle reached), and until the first period starts.

Renewal dates are fixed by the billing cycle: a failed renewal is retried, but the next renewal is still issued on its scheduled date. A subscription pending cancellation ends at currentPeriodEnd.

Filtering by Status

You can filter subscriptions by status in both the Dashboard and the API:

curl "https://api.inflowpay.com/subscription?status=ACTIVE" \
  -H "X-Inflow-Api-Key: your_private_key"

Available filter values: INITIATION, TRIAL, ACTIVE, PAST_DUE, UNPAID, INACTIVE, PENDING_CANCELLATION, CANCELED


Did this page help you?