Currency and exchange rates
Where in the admin: Finance › Payment channels › Exchange rates (
/payments/fx) for the rates. System › Settings › Brand (/settings/branding) for the Site currency switch.
What it does
NexCMP keeps wallets and invoices in USD. VM plan prices are stored as micro-dollars per hour. Display currencies let customers read USD amounts in their own currency at a published rate; they do not change the wallet balance. Some services accept prices entered in VND, including bandwidth add-ons, S3, Private Cloud and existing Bare Metal plans that retain VND pricing. Bank transfers through Sepay are paid in VND.
Rates are published by an administrator. Nothing refreshes by itself, so the rates you saved stay exactly as they are until you press the update button.
Requirements
| Item | Requirement |
|---|---|
| Internet access | The panel server must reach open.er-api.com (for USD/VND) and api.frankfurter.dev (for the other currencies) when you press Update exchange rates. |
| Permissions | An administrator for changes; every change asks for a reason. |
| Depends on | Nothing. Plans, Bandwidth, S3 and VND bank transfers use the rate. |
Prepare the infrastructure
Not required. If your server filters outbound traffic, allow HTTPS to the two services above.
Connect in NexCMP
1. Choose the site currency
Open System › Settings › Brand and set Site currency:
| Choice | What customers see |
|---|---|
| Language-based (auto) (the default in a new installation) | The portal picks a display currency from the language (table below). The customer can choose USD instead. |
| USD | Prices and balances in USD only. No currency switch and no converted amounts. |
| VND | Legacy setting; follows the same language-based display rules as Auto. |
Save. Customer pages update within about a minute.
When the site follows the customer's language:
| Language | Display currency |
|---|---|
| English | USD |
| Vietnamese | VND |
| Chinese (simplified / traditional) | CNY / TWD |
| Japanese, Korean | JPY, KRW |
| French, German, Spanish, Italian | EUR |
| Portuguese, Russian | BRL, RUB |
| Arabic, Hindi | SAR, INR |
| Indonesian, Thai | IDR, THB |
A currency whose rate has not been published is not offered: the portal falls back to USD.
2. Publish the rates
Open Finance › Payment channels › Exchange rates.
The card Currency by language lists the 11 display currencies with their rate per USD, the source (Frankfurter) and the time of the last update. Click Update exchange rates.
The button does two things in one step: it reads the public market table for USD/VND and it reads the other 11 rates. Both are checked before either is saved. If one fails, nothing is changed and the previous rates remain.
The card Active exchange rate shows the USD/VND rate in effect, its source tag (public market or fixed), the margin and the market reference figures with their timestamps.
The card Config (save with a reason):
Field Meaning Range Margin (bp, 100 = 1 %) Added on top of the market reference rate. The effective rate is the reference rate plus the margin, rounded up. 0 to 1000 Fixed rate (VND per USD, 0 = follow market) A rate you set yourself. It replaces the market figure. 0 or 15,000 to 50,000 Jump threshold (bp) A new market rate that differs from the current one by more than this is held until you confirm it. 50 to 2000 (default 500) VND rounding step Rounds VND prices and bank-transfer amounts. 1, 100, 1,000 (default) or 10,000 If a new market rate jumps by more than the threshold, the card Pending exchange rate appears and the rate is not applied. Check it against your chosen reference and click Apply this rate.
A market rate outside 15,000 to 50,000 VND per USD is rejected as unreasonable. Manual refreshes are limited to one request per five minutes, so the button can ask you to wait.
The Exchange rate history table lists every fetched or confirmed rate with its time, effective rate, market reference, source, whether it was applied, who did it and a note (held jumps are marked held).
How a rate is used
| Place | Rule |
|---|---|
| Wallet and invoices | USD cents. The rate never changes a balance. |
| VM plans entered in VND | Converted once at the rate in effect when you save, then stored in USD. Later rate changes do not reprice those VM plans. |
| Bank transfer through Sepay | Customer pays ceil(USD × rate), rounded up to the rounding step. Sepay is blocked until a USD/VND rate exists. |
| Bare Metal plans | New installations use USD directly. Existing VND plans retain their price unit and need a rate when charging; see Dedicated servers. |
| Other international payments entered in VND | Rounded to the nearest cent. |
| Display in the portal | USD multiplied by the published rate of the display currency, formatted for the language. |
Verify
- Active exchange rate shows a USD/VND value with a recent "fetched" time.
- The grid Currency by language shows non-empty rates.
- In the customer portal, switch language to Vietnamese (site currency Auto): prices show in dong; switch to Japanese: yen. With site currency USD, only dollars are shown.
- On a plan form (Plans & pricing) the Enter price by list offers VND / month.
Limits and notes
- No automatic refresh. Press Update exchange rates when you want new rates, and set a reminder if rates matter to you.
- The public market rate is used for USD/VND; it is a reference rate rather than a bank buy or sell quote. The other display currencies come from Frankfurter; a date older than 14 days or an incomplete table is rejected.
- Margin and a fixed rate affect only USD/VND. The 11 display currencies carry no margin.
- Each customer language has one currency. Changing language resets to that language's currency unless the customer picked USD for the same language.
- Reseller sites follow the same rates.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| "New exchange rate deviates beyond threshold - ON HOLD, requires manual confirmation" | The jump is larger than the threshold | Verify and click Apply this rate, or change the threshold. |
| "Server rejected new exchange rate" | The market figure is outside 15,000 to 50,000 or malformed | Wait and try again, or set a fixed rate. |
| Refresh asks you to wait before trying again | Too frequent updates | Wait and retry. |
| "could not fetch the rate: …" | The panel server cannot reach the rate services | Allow outbound HTTPS and retry. |
| Sepay blocked tag | No USD/VND rate has been published yet | Press Update exchange rates or set a fixed rate. |
| A currency is missing in the portal | Its rate is missing | Press Update exchange rates. |
| Customers see prices only in USD | Site currency is USD, or the rate is missing | Set Site currency to Auto and publish rates. |
| "Fx incomplete rate table; previous rates retained" | Frankfurter returned fewer than 11 currencies | Retry later; nothing was changed. |
| The VND option is missing in the plan form | No USD/VND rate | Publish a rate first. |