Key takeaways
- A subscription billing API is storage of a payment method, scheduled charges, and reliable results, not necessarily one monolithic product.
- The compliance headache comes from storing cards; tokenization removes it by keeping the number off your servers.
- Store tokens and charge them each cycle through the REST API.
- Drive renewals and dunning from webhooks so your system reacts to real outcomes.
- Offer ACH on recurring plans to reduce card-expiry churn, since bank accounts do not expire like cards.
What a subscription billing API really needs
A subscription billing API is really a few capabilities working together: a way to securely store a customer's payment method, a way to charge it on a schedule, and a way to know whether each charge succeeded. You do not necessarily need a monolithic subscriptions product to get there.
With Flux, you can assemble a subscription billing API from tokenization, the REST API, and webhooks, keeping your own scheduler in control of when charges happen. The reason to think about it this way is that it keeps the compliance surface small, which is where most of the headaches live.
Where the compliance headache usually comes from
The pain in recurring billing rarely comes from the scheduling. It comes from storing payment credentials. The instant your database holds card numbers so you can bill them again next month, you are running a card vault, and PCI scope expands to every system that touches it.
Teams underestimate this and end up owning an audit burden they never wanted. The way to avoid the headache is to never store the card in the first place.
Tokens instead of stored cards
This is exactly what tokenization is for. When the customer signs up, their card is entered into Flux's origin-isolated hosted fields on payments.fluxpayments.com and turned into a token before it reaches you. You store the token, not the number. Each billing cycle, your scheduler charges the token through the REST API.
Because the raw card never touches your servers and Flux carries SAQ-D Level 2 PCI DSS certification for the sensitive part, the recurring nature of the charges does not expand your compliance scope. You are billing a reference, not warehousing cards.
Driving renewals with webhooks
Recurring billing is asynchronous by nature: a charge you kick off may succeed, fail, or need review, and often the result matters days later, especially with ACH. Webhooks are how your system learns each outcome without polling.
Let the webhook for a successful charge extend the subscription and the webhook for a failed one start your dunning flow. Building renewals as event-driven reactions rather than optimistic assumptions is what keeps a subscription system honest about which customers have actually paid.
Handling failed and expiring cards
Cards expire and get reissued, so some share of your recurring charges will fail for reasons that have nothing to do with the customer's intent to keep paying. Plan for it. Retry declines on a sensible schedule rather than hammering the card, and prompt customers to update their details before expiry.
Treat a run of failures as a signal to reach out rather than silently churn the account. A subscription billing API is only as good as its handling of the cards that stop working, which is most of the real-world complexity.
ACH as a hedge against card churn
Cards expire and get reissued; bank accounts generally do not. For long-lived subscriptions, offering ACH as a payment option can reduce the involuntary churn that comes from cards lapsing between billing cycles. Flux supports ACH through the same interface as cards, settling in 1-3 business days.
So adding a bank-debit option for annual plans or larger contracts is a configuration in the flow you already built rather than a new integration. Giving customers a choice of rail also meets a simple preference: some payers would rather have recurring charges hit their bank directly.
Frequently asked questions
Do I have to store card numbers to bill customers every month?
No, and you should not. Store a token instead. With Flux the card is tokenized in hosted fields before it reaches you, so you charge the token each cycle without holding the card.
How do I keep recurring billing PCI compliant?
Keep card data off your servers. Because Flux captures cards in origin-isolated hosted fields and is SAQ-D Level 2 certified, storing and charging tokens does not put your database in card-vault scope.
What happens when a subscriber's card expires?
The charge will fail, so listen for the webhook, retry sensibly, and prompt the customer to update their card. Handling these gracefully is what keeps involuntary churn low.
Related reading
Ready to get set up with Flux?
Cards, ACH, and stablecoins in one platform, with volume-based pricing. No setup fees or contracts.
Get Started