Prerequisites
- A Stripe account (live or test mode)
- A Stripe Secret Key (
sk_live_...orsk_test_...) - A Stripe Webhook Signing Secret (
whsec_...)
Setup
Step 1 — Get your Stripe API Key
- Go to Stripe Dashboard → Developers → API Keys.
- Copy your Secret key (
sk_live_...).
Step 2 — Connect in Fluxrate
- Open Dashboard → Integrations.
- Click Connect next to Stripe.
- Fill in the form:
| Field | Value |
|---|---|
| Connection Name | A friendly label, e.g. Production Stripe |
| Secret Key | Your Stripe secret key (sk_live_...) |
| Webhook Secret | Leave blank for now — you’ll add this after setting up the webhook |
- Click Create Connection. Fluxrate generates a unique Webhook URL for your integration.
Step 3 — Configure the Webhook in Stripe
- Go to Stripe Dashboard → Developers → Webhooks.
- Click Add endpoint.
- Paste the Webhook URL from Fluxrate (shown after connecting):
- Under Events to send, select:
checkout.session.completedpayment_intent.succeededpayment_intent.payment_failedinvoice.payment_succeededinvoice.payment_failed
- Click Add endpoint.
- Copy the Signing secret (
whsec_...) shown on the webhook details page.
Step 4 — Save the Webhook Secret
- Back in Fluxrate, go to Dashboard → Integrations → Manage (Stripe).
- Paste the signing secret into the Webhook Secret field.
- Click Save Changes.
How Payments Work
Fluxrate passesinvoice_id and customer_id in the Stripe Payment Link metadata. When Stripe fires a webhook on payment completion, Fluxrate reads these values from data.object.metadata to identify the invoice and marks it as PAID.
Webhook Payload Handling
Fluxrate reads the following fields from Stripe webhook payloads:| Field | Source in payload | Purpose |
|---|---|---|
invoice_id | data.object.metadata.invoice_id | Links event to a Fluxrate invoice |
customer_id | data.object.metadata.customer_id | Links event to a Fluxrate customer |
amount | data.object.amount ÷ 100 | Payment amount in major currency unit |
currency | data.object.currency (uppercased) | ISO 4217 currency code |
provider_payment_id | data.object.payment_intent or data.object.id | Stripe payment reference |
checkout.session.completedpayment_intent.succeeded
Managing the Integration
| Action | How |
|---|---|
| Rotate API key | Manage → enter new secret key → Save Changes |
| Rotate webhook secret | Manage → enter new webhook secret → Save Changes |
| Temporarily disable | Toggle is_active via API or disconnect from dashboard |
| Remove entirely | Dashboard → Integrations → ··· → Disconnect |
Troubleshooting
Webhook signature verification failed
Webhook signature verification failed
The
Stripe-Signature header didn’t match your stored webhook secret. Make sure you copied the Signing secret from Stripe (starts with whsec_), not the endpoint URL. Re-save the secret in Fluxrate and ensure Stripe is sending to the exact URL shown.Invoice not marked as paid after payment
Invoice not marked as paid after payment
Check that your Payment Link was created with
invoice_id in the metadata. Also confirm that the webhook event (checkout.session.completed or payment_intent.succeeded) is in your subscribed events list in Stripe Dashboard.Webhook events not being received
Webhook events not being received
Verify the webhook URL in Stripe Dashboard matches the one shown in Fluxrate exactly. Check Dashboard → Integrations → Webhook Events in Fluxrate to see all received events and their statuses.