Documentation

    QBitFlow docs.

    Everything you need to integrate crypto payments — from your first checkout to going live.

    Subscription statuses

    Subscriptions have their own set of statuses that indicate the health and state of recurring billing. Understanding these helps you provide the best service to your customers.

    Status overview

    active

    Healthy

    The subscription is active and functioning normally. Billing cycles are executing successfully, and the customer has sufficient allowance.

    Action required

    None — continue providing service.

    past_due

    Attention

    The last billing cycle failed. QBitFlow will automatically retry the billing. After a grace period, if billing still fails, the subscription will be cancelled.

    Action required

    Monitor the subscription. Notify the customer that billing failed and will be retried. If it transitions back to "active", billing succeeded.

    low_on_funds

    Warning

    The last billing cycle succeeded, but the customer's allowance is running low. The next billing cycle might fail if they don't increase their allowance.

    Action required

    Send a reminder email to the customer asking them to increase their allowance via the subscription management page.

    pending

    Critical

    The max amount limit has been reached for this billing cycle. This typically happens when cryptocurrency prices drop significantly. The customer must update their max amount before billing can proceed.

    Action required

    Send urgent notification to customer. They must update the max amount via the subscription management page. After grace period, subscription will be cancelled if not updated.

    cancelled

    Inactive

    The subscription has been cancelled either by the customer or automatically due to billing failures after the grace period. This is a final state.

    Action required

    Revoke access to the service. Archive subscription data. If the customer wants to resume, they need to create a new subscription.

    trial

    Trial period

    The subscription is in its trial period. No billing occurs during this time. When trial ends, it automatically transitions to "trial_expired".

    Action required

    Provide full service access. Optionally remind customer when trial is ending.

    trial_expired

    Action needed

    The trial period has ended but the customer hasn't upgraded. They can upgrade via the subscription management page. After grace period, will be cancelled.

    Action required

    Send email prompting customer to upgrade. Provide link to subscription management page. Consider reducing service access.

    Status transitions

    Normal flow

    trial
    active
    active
    ...

    Warning states

    active
    low_on_funds
    active
    (if allowance increased)

    Billing issues

    active
    past_due
    active
    (if retry succeeds)
    past_due
    cancelled
    (if retry fails after grace period)

    Max amount issues

    active
    pending
    active
    (if max amount updated)

    Trial expiration

    trial
    trial_expired
    active
    (if upgraded)

    Recommended monitoring strategy

    1. 1.

      Subscribe to the status webhook

      Configure the Subscription status webhook in the dashboard. Its payload includes the previous and current status, so you know exactly what changed.

    2. 2.

      React on transition

      Trigger actions directly from the webhook — the transition is delivered to you, so there's no need to diff against a stored status.

    3. 3.

      Automated notifications

      Send emails when status becomes "low_on_funds", "pending", or "trial_expired". Include link to management page.

    4. 4.

      Access control

      Grant/revoke service access based on status. "active" and "trial" = full access. "cancelled" = no access.

    5. 5.

      Grace period handling

      For "past_due" and "pending" states, consider maintaining limited access during grace period while notifying customer.

    6. 6.

      Polling as a fallback

      Optionally reconcile with a periodic status fetch to catch anything missed — no longer the primary mechanism.

    Pro tip

    Prefer the Subscription status webhook over polling — you'll be notified the instant a status changes, and the payload tells you both the previous and current status. Keep an occasional status fetch only as a reconciliation fallback. See the section to set it up.
    Talk to us