What Happens If a Customer Cancels a Stablecoin Recurring Approval?
Canceling a USDC recurring payment approval onchain stops new charges but does not reverse settled payments. Learn what actually happens, with real examples.

Recurring stablecoin payments onchain rely on explicit approvals. Customers sign a spending cap for a known maximum, letting a billing system make future charges up to that limit. But what actually happens if a customer cancels that approval? The answer is mechanical, not theoretical, and it affects how subscriptions and onchain billing work in practice.
ERC-20 Approvals: The Moving Parts
Recurring USDC payments use the ERC-20 approve and transferFrom flow. The payer authorizes a smart contract to spend up to N USDC on their behalf. Each time a charge is due, the contract calls transferFrom to move funds from the payer’s wallet to the merchant’s address. The approval is a cap, not an open door. The contract cannot exceed the signed limit. Once the cap is reached, or if the customer revokes the approval, no further transfers can succeed without a new signature.
Revoking or reducing an approval is a separate onchain transaction. The customer can use their wallet to set the allowance to zero, or to a lower value. This is atomic. Once confirmed, the contract cannot pull more than the new allowance.
Worked Example: Canceling a USDC Subscription Approval
Suppose Alice is paying for a SaaS tool that bills 50 USDC a month. She signs an approval for a cap of 100 USDC, covering two months. The contract address is 0xBillingContract. Alice’s wallet is 0xAlice and the merchant settles to 0xMerchant.
- Month 1: The contract calls
transferFrom(0xAlice, 0xMerchant, 50e6)on USDC. The transfer succeeds. Alice’s remaining allowance is 50 USDC. - Month 2: Another
transferFromfor 50 USDC. The transfer succeeds. Allowance drops to zero. - Month 3: Before the contract can bill again, Alice uses her wallet (or a third-party tool) to call
approve(0xBillingContract, 0). She signs this transaction and submits it onchain. Once mined, the contract cannot pull any more USDC.
If the contract tries to bill for Month 3, the transferFrom call fails. There is no fallback. No USDC moves. The merchant cannot collect unless Alice signs a new approval.
Code: Revoking an ERC-20 Approval
A customer can revoke an approval with this simple call:
IERC20(usdc).approve(billingContract, 0);
This sets the allowance to zero. It does not affect past transfers. Settled payments are irreversible by design.
What About Payments Already Made?
Onchain settlement is atomic. Once a transferFrom is confirmed, the USDC is in the merchant’s account. Canceling or reducing approval does not claw back funds. There is no onchain mechanism for refunds unless the merchant initiates a separate payment. A customer who cancels approval is only stopping future billing, not reversing history.
This is different from some fiat rails, where a customer can dispute and reverse a card payment. Onchain, the best a customer can do is stop the next charge.
Edge Cases: Partial Allowances and Missed Payments
If a customer reduces allowance to less than the next bill, the next transferFrom will fail. For example, if Alice leaves 30 USDC approved but the bill is 50 USDC, the contract cannot pull 50 USDC. Billing fails onchain. The merchant may notify Alice offchain, or prompt her to top up approval or balance.
There is no partial pull: ERC-20 transferFrom either moves the full requested amount or fails. This creates a clear boundary between paid and unpaid periods.
Engineering Implications for Billing Systems
From a billing engineering perspective, handling approval cancellation is straightforward. The contract checks allowance before attempting a pull. If the allowance is zero or insufficient, the pull fails. The merchant system needs to handle this gracefully, updating the subscription status and prompting the customer for renewal or manual payment.
No data is lost. The subscription state is deterministic: either the funds moved and the period is paid, or they did not. There is no confusion about pending or reversible charges. This reduces complexity compared to offchain or semi-custodial models.
How Reclack Handles Approval Cancellation
At Reclack, we never hold user funds or ask for unlimited approvals. Every recurring USDC billing flow uses a capped, explicit authorization. If a customer cancels or reduces their approval, our system detects this onchain. No further charges are attempted. Settled payments remain final. We notify both merchant and payer of the status, and prompt for renewal if needed. You can read more about our approach to non-custodial stablecoin billing at reclack.com.


