Preserve attribution before checkout
- Let the browser SDK capture
bq_id. - Associate it with your authenticated customer, checkout record, or Stripe metadata.
- Keep your own stable customer ID as
customerExternalId. - Retrieve both values when Stripe sends the payment webhook.
Verify and process the webhook
Stripe’s
amount_total is already an integer minor-unit amount. Do not multiply it by 100.Subscriptions and retries
- Send each paid invoice with its stable Stripe invoice ID.
- Use
paymentProcessor: 'stripe'consistently. - Let exact Stripe webhook retries call Biqli again with the same data.
- Do not create a sale for an unpaid or failed invoice.
- Decide how refunds affect your reporting before implementing a separate refund workflow.

