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 the

Sub-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.

ComponentDescription
Base rateThe raw wholesale rate provided by Verto
Markup marginThe percentage spread you apply on top of the base rate
Client rateThe final rate shown to and charged to the sub-account
Your revenueYour 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

LevelApplies when
Universal / corridor configNo trade-level override present — applies as default to all trades
Trade-level overridefxMarkup 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:

  1. 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.
  2. Execution stage — pass the same fxMarkup percentage 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:

FieldDescription
fxMarkupPercThe markup percentage applied to this trade
PRPreFXMarkupRateThe original Verto wholesale rate before markup
amountFromThe final executed source amount
amountToThe final executed target amount
📘

Prerequisites

Markup must be enabled on your account before integrating. Contact your account manager to confirm this is configured as part of your commercial setup.