Currency Switching Policy for Hosting Checkout: Lock Rates, Reprice Renewals
Learn how to set a currency-switching policy that locks exchange rates at order time and automatically reprices renewals when the spread exceeds your threshold, protecting margins and keeping customers happy.
You sell hosting in multiple currencies, but exchange rates move daily. If you don't lock the rate at checkout, a customer can pay in a currency that has weakened against your base, and you lose margin on every renewal. This article explains how to implement a currency-switching policy that locks the exchange rate at order time and automatically reprices renewals when the spread exceeds a threshold you define.
Why lock the exchange rate at order time?
Locking the rate at order time means the customer pays the exact amount shown at checkout, regardless of later currency fluctuations. This protects you from short-term volatility and gives the customer price certainty. For example, if a customer orders a plan priced at €10 when EUR/USD is 1.10, you record the rate and charge the equivalent in USD. If the rate later drops to 1.05, you still receive the agreed USD amount. Without a lock, you would absorb the loss.
How to set up rate locking in your billing system
Most hosting billing platforms allow you to store a custom field or use an API to fetch live rates. Here's a step-by-step approach:
- Choose a base currency – This is the currency in which you account for revenue and costs. Typically USD or EUR.
- Integrate a rate provider – Use a reliable exchange rate API (e.g., exchangerate-api.com, Open Exchange Rates) to fetch rates at the moment of order.
- Store the rate with the order – When an order is placed, save the exchange rate used in the order metadata. This becomes the locked rate for that customer's subscription.
- Display the locked rate on invoices – Show both the original currency amount and the converted amount with the rate, so the customer understands the charge.
If you use a platform like Teculiar, you can automate this via its public API and embeddable widgets, which handle currency conversion at checkout.
When and how to reprice renewals
Repricing renewals is necessary when the exchange rate spread—the difference between the locked rate and the current rate—exceeds a threshold you set. This threshold should cover your risk and administrative costs. For example, if your base currency is USD and you sell in EUR, you might set a 5% spread threshold. If the locked rate was 1.10 and the current rate is 1.04 (a 5.45% drop), you reprice the renewal to reflect the new rate.
Calculating the spread
Spread = (Current Rate - Locked Rate) / Locked Rate * 100. If the absolute value exceeds your threshold, trigger a repricing. You can check this daily or weekly via a cron job.
Repricing logic
- Notify the customer – Send an email explaining the rate change and the new renewal price at least 30 days before renewal.
- Apply the new rate – Update the subscription's locked rate to the current rate for future renewals.
- Offer a grace period – Allow the customer to cancel without penalty if they disagree with the new price.
Setting a fair threshold
Your threshold depends on your profit margin and currency volatility. A common approach is to set it at 3-5% for stable currencies and 7-10% for volatile ones. Monitor your historical rates to determine a level that avoids frequent repricing but protects you from significant losses. Remember, repricing too often can annoy customers, so balance risk with customer experience.
Automating the policy with your billing software
Manual repricing is error-prone. Use your billing system's automation features or custom scripts. For instance, WHMCS allows hooks to run on order placement and renewal; you can write a hook to fetch and store rates. Similarly, Clientexec and Upmind offer API access. If you're on Teculiar, the platform's automation and API can handle rate locking and repricing based on your rules. For detailed guides, check the docs.
Handling customer communication
Transparency is key. Include your currency policy in your terms of service. When repricing, send a clear email: "Your renewal price has changed due to exchange rate fluctuations. The new price is X, effective on [date]." Offer support if they have questions. This reduces disputes and chargebacks.
What to do next
- Review your current billing system's capabilities for storing custom order fields and running scheduled tasks.
- Choose an exchange rate API and test it with your base currency.
- Define your spread threshold based on your margins and currency risk.
- Implement the logic in a staging environment before going live.
Ready to automate your currency policy? Explore our pricing to see how Teculiar can help.