Updating Recurring USDC Subscription Caps Onchain: A Step-by-Step Guide
Step-by-step guide to updating the cap on a recurring USDC subscription payment onchain. Avoid service interruption and maintain seamless stablecoin billing.

A recurring USDC subscription works by letting a customer pre-approve a capped spend from their wallet to a merchant’s settlement address. Over time, your SaaS or protocol may need to update that cap. Maybe your price increases. Maybe your customer wants to change their usage tier. Either way, the recurring approval is a specific onchain allowance. If you want to collect more (or less) per billing cycle, you must update the cap. This guide covers how to change the cap on an active onchain subscription without missing a billing period or forcing a new subscription flow.
Why Update the Payment Cap?
Recurring USDC approvals are intentionally bounded. The customer authorizes a maximum USDC outflow per billing period, visible and signed from their own wallet. If your pricing changes or usage increases, you need a new approval reflecting the new cap. Without this, collection attempts above the old cap will fail with an onchain error.
Use cases for cap updates: - The subscription price increases due to a plan upgrade. - Metered billing hits a new expected maximum based on usage. - The customer requests to lower their exposure and reduce the cap.
How Recurring Subscription Approvals Work Onchain
When a customer subscribes, their wallet signs an ERC-20 approval for your contract or collection address. This approval is not unlimited. It is set to the agreed cap. Each recurring pull uses that allowance. When the cap is reached, further pulls fail until a new approval is signed.
If you try to pull more than the approved cap, the transaction reverts. This is not something you can override as the merchant. To increase (or decrease) the cap, you must prompt the customer to sign a new approval. The new approval replaces the old one for the specified spender and token.
When Should You Prompt for a New Cap?
Do not wait until a payment attempt fails. A failed onchain transfer means a missed billing window and possible interruption of service. Instead, prompt the customer to sign a new approval before the next billing cycle at the new price or usage cap.
Typical triggers: - Plan upgrade is confirmed in your UI. - Metered usage exceeds a set threshold. - Customer requests cap change from their portal.
What Happens When You Update the Cap
The process is not automatic. ERC-20 approvals are explicit, onchain, and require a user signature. The customer must interact with your dApp or checkout flow and approve the new cap. Some wallets require prior allowance to be set to zero before setting a new amount, while others allow a direct overwrite. This is wallet-dependent and should be handled in your frontend logic.
You do not lose past allowance by updating. The new approval replaces the old one for future transactions. As soon as the transaction is confirmed, you can collect up to the new cap per billing period.
Example: Upgrading a USDC Subscription from $100 to $200 per Month
Suppose you bill SaaS at $100 USDC per month. The customer has already approved a 100 USDC cap. You want to upgrade them to a $200/month plan.
Your flow: 1. Customer clicks “Upgrade” in your UI. 2. You prompt them to sign a new ERC-20 approval for 200 USDC to your settlement address. 3. Customer signs and broadcasts the transaction. 4. Once confirmed, your billing logic collects up to 200 USDC per cycle.
Here’s how the approval transaction might look in Solidity, if you are building the dApp:
IERC20(usdcAddress).approve(settlementAddress, 200 * 1e6); // 200 USDC, 6 decimals
If the wallet requires zeroing out first:
IERC20(usdcAddress).approve(settlementAddress, 0);
IERC20(usdcAddress).approve(settlementAddress, 200 * 1e6);
You do not need to cancel the subscription or re-onboard the customer. The only requirement is the new signed approval.
UX Patterns for Cap Updates
- In-app Prompt: When a customer requests a plan change, display a modal or redirect to a hosted approval page.
- Email Reminder: If your SaaS uses usage-based billing and the customer is approaching their cap, send an email with a link to sign a higher approval. Do this before hitting the limit.
- Portal Option: Let customers proactively lower their cap from the portal. This can be a risk control feature as well as a support tool.
Handling Failed Cap Update Attempts
Transactions can fail if the customer declines, gas is insufficient, or the chain is congested. If the approval transaction is not confirmed, your billing attempt at the new cap will revert. In this case: - Keep the old cap in place. Do not attempt to pull above it. - Notify the customer and retry the approval flow. - Optionally, let the customer continue at the old price until the new approval is signed.
Security and Trust Considerations
- Always display the new cap clearly in your UI before the signature prompt.
- Make it explicit that the approval is bounded to the new amount.
- Never request unlimited approvals. This is not supported in Reclack and is not safe for production use.
- If you use a customer portal, let the customer view and revoke approvals as needed.
Cap Decreases and Customer-Initiated Changes
Sometimes the customer wants to reduce their exposure. The same mechanics apply. They sign a new approval with a lower cap. If any billing attempt exceeds the new cap, it will fail. Your UI should warn about any upcoming charges that will not fit under the reduced cap.
Monitoring Allowance and Preventing Service Interruptions
- Track allowance onchain using the ERC-20
allowancefunction. - Check current allowance before each billing attempt.
- If you detect that the next charge will exceed the cap, prompt for a new approval in advance.
- Do not attempt to pull more than the approved amount. This will revert and could interrupt service.
Example code for checking allowance:
uint256 allowance = IERC20(usdcAddress).allowance(customerAddress, settlementAddress);
if (allowance < nextChargeAmount) {
// Prompt for new approval
}
What Not to Do
- Do not ask for a seed phrase or private key under any circumstances.
- Do not attempt to increase the cap without a user signature. Only the customer can update their approval.
- Do not retry failed approvals automatically. Always require explicit user action.
- Do not batch unrelated cap updates. Each approval should be explicit and bounded.
How Reclack Handles Recurring Cap Updates
We built Reclack so that you never hold customer funds and never ask for unbounded approvals. When you need to update a recurring USDC subscription cap, Reclack prompts the customer to sign a new, bounded approval right from the customer portal or hosted checkout. The new cap takes effect as soon as the transaction confirms onchain. If the customer declines or the transaction fails, the old cap remains in place and billing continues at the previous limit. No service interruption if you prompt in advance. Learn more about integrating recurring USDC billing and approval management at reclack.com.


