Documentation

    QBitFlow docs.

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

    Webhooks

    Webhooks are the most reliable way to react to what happens in QBitFlow. You configure your endpoints once in the dashboard, and QBitFlow sends a signed POST request to them whenever a relevant event occurs.

    Configure endpoints in the dashboard

    Settings → Webhooks

    Webhook URLs are no longer set per session. Go to Settings → Webhooks and set your endpoints there. Test and Live keep separate configurations: test-mode events are delivered to your Test endpoints, and live-mode events to your Live endpoints.

    Two independent webhooks

    QBitFlow sends two different kinds of webhook. You can set one, both, or neither — each has its own URL and its own payload.

    Transaction webhook

    Individual payment events

    Fires on individual payment events — a payment completes, or a new subscription is created. Use it to record payments and unlock access the moment funds move. The payload is a SessionWebhookResponse containing the session details and the transaction status.

    Handling the transaction webhook

    Transaction Webhook Handler
    Verify the signature, then react to the payment status

    Subscription status webhook

    Subscription lifecycle events

    Fires whenever an existing subscription changes state — e.g. active → low_on_funds, active → past_due, or past_due → cancelled. Get notified the instant a status changes instead of polling for it on a cron.

    Payload fields

    • subscriptionUUID — the subscription that changed.
    • previousStatus — the status it moved from.
    • currentStatus — the status it moved to.
    • updatedAt — when the transition happened.

    Handling the subscription status webhook

    Subscription Status Webhook Handler
    React to subscription transitions without polling

    No more polling

    With the subscription status webhook set, you don't need a daily cron to detect status changes. See the section for what each status means and how to react.

    Verifying webhooks

    Always verify the signature

    Every delivery includes the headers X-Webhook-Signature-256, X-Webhook-Timestamp, and X-Webhook-ID. Verify the signature before trusting a payload — the SDKs expose a webhooks.verify(payload, signature, timestamp) helper for this.

    Use the raw request body

    Verify against the exact raw body you received. Do not parse the JSON and re-stringify it before verifying — formatting changes will break signature verification.

    Testing your endpoint

    The "Test the endpoint" action

    In Settings → Webhooks, the “Test the endpoint” button sends a probe request to the URL you entered so you can confirm it is reachable. The probe carries a fake payload that is not a real event.

    Short-circuit the test probe

    The probe arrives with the X-Webhook-ID header set to TEST_WEBHOOK_ID ("test-webhook-id"). When it matches, return HTTP 200 immediately and skip normal payload processing — otherwise your handler may fail to parse the fake payload. The SDKs expose this constant and header for you (see the handlers above).

    Always return 200

    Your endpoint must return HTTP 200 to acknowledge receipt. If QBitFlow doesn't receive a 200 response, it will retry delivery multiple times.
    Talk to us