FX & Markup
Atlas for Platform — FX & Markup
This guide covers performing FX conversions at the sub-account level and applying markup to generate revenue on your platform.
Authenticate as the sub-account using theSub-Account Login endpoint before proceeding. Use the returned JWT token in all requests.
FX at sub-account level
All FX conversions on Atlas for Platform are executed at the sub-account level. The flow is identical to the standard Instant FX guide — authenticate as the sub-account, get a quote, and book the trade.
See the Instant FX guide for full details on the quote-and-book flow.
FX markup
Atlas for Platform enables you to apply a markup to the base Verto FX rate for sub-account transactions, allowing you to generate revenue on every conversion. Markup is configured at the parent account level and applied automatically to sub-account trades.
How markup works
When a markup is applied, Verto calculates a new client rate by adding your configured margin to the base wholesale Verto rate. The difference between the base rate and the client rate is your net revenue, paid according to your partnership agreement.
| Component | Description |
|---|---|
| Base rate | The raw wholesale rate provided by Verto |
| Markup margin | The percentage spread you apply on top of the base rate |
| Client rate | The final rate shown to and charged to the sub-account |
| Your revenue | Your share of the spread, per your partnership agreement |
Markup models
Verto supports three markup approaches:
1. Universal markup
Set a single static margin that applies to all sub-account FX transactions.
POST https://api-exchange-now-sandbox.vertofx.com/fx/markup/config
{
"markupType": "universal",
"markupPerc": 1.5
}2. Currency pair markup
Set different margins per currency corridor.
POST https://api-exchange-now-sandbox.vertofx.com/fx/markup/config
{
"markupType": "currency_pair",
"markupPerc": 2.0
}3. Trade-by-trade markup
Pass a markup object directly in the trade execution payload, overriding any stateful configuration for that trade.
{
"paymentType": "convertWalletPayout",
"sourceWalletId": 11435,
"sourceAmount": 4800,
"vfxToken": "eyJhbGci...",
"targetAccountId": 23181,
"paymentId": "a7c01c2d-f677-41d8-a11c-4d66804669f4",
"fxMarkup": {
"markupType": "currency_pair",
"markupPerc": 2.5
}
}Markup hierarchy
| Level | Applies when |
|---|---|
| Universal / corridor config | No trade-level override present — applies as default to all trades |
| Trade-level override | fxMarkup object passed in the trade payload — overrides stateful config for that trade |
Recommended implementation pattern
To ensure sub-accounts see consistent pricing between the rate display and the settled amount, follow this two-step pattern:
- Quote stage — call the Get FX Rate endpoint to get the base Verto rate. Calculate your client rate by adding your markup margin, then display this to the sub-account.
- Execution stage — pass the same
fxMarkuppercentage in the Create FX Trade call. Verto performs the same calculation on the backend, ensuring the settled amount matches exactly what was displayed.
Verifying markup on a trade
The 200 OK response from the Create FX Trade endpoint includes the following fields for reconciliation:
| Field | Description |
|---|---|
fxMarkupPerc | The markup percentage applied to this trade |
PRPreFXMarkupRate | The original Verto wholesale rate before markup |
amountFrom | The final executed source amount |
amountTo | The final executed target amount |
PrerequisitesMarkup must be enabled on your account before integrating. Contact your account manager to confirm this is configured as part of your commercial setup.
