FX Markup Functionality
Configure platform FX markups, choose the right pricing model, and keep customer-facing quotes aligned with executed exchange rates.
💹 FX Markup Functionality
Use FX markups to define the customer-facing exchange rate for sub-account flows and apply your margin on top of the base Verto rate.
✅ Before you start
Complete these steps before you configure FX pricing:
- Confirm you are operating an Atlas account with markup access enabled.
- Make sure you already understand the core quote and conversion flow in FX Conversion Guide.
- Decide whether your pricing model should be global, corridor-specific, or per-trade.
- Define how your application will store and audit the configured markup used for each customer-facing rate.
The FX Markup API lets partners apply a structured margin to the base Verto exchange rate for downstream customer flows so pricing and margin capture can be managed programmatically.
We offer three integration paths to accommodate your exact commercial model:
- Universal Markup Model: Set a static margin percentage across all transactions statefully.
- DynamicMargin Model (
currency_pair): Inject custom spreads per individual currency route statefully. - Trade-by-Trade Execution: Pass an explicit
fxMarkupobject dynamically per transaction payload for absolute precision.
Choose the markup model that fits your pricing strategy
| Model | Best for | How it works |
|---|---|---|
| Universal | One consistent platform-wide spread | Apply one default markup percentage across eligible FX transactions. |
| Currency-pair | Different margins by corridor | Apply a different spread depending on the route being traded. |
| Per-trade override | High-value or custom-priced transactions | Pass the markup directly on the execution payload for that single trade. |
💡 Core Value Proposition
- Automated Profitability: Systematically capture the spread without delayed manual reconciliation.
- Absolute Flexibility: Switch between continuous state models and trade-by-trade overrides instantly.
- Real-Time Calculation: Client Rates are instantly generated upon request, guaranteeing zero latency.
📐 How Markup Revenue is Calculated
When a margin is applied to a currency exchange, a new Client Rate is dynamically executed.
| Component | Description |
|---|---|
| The Base Buy Rate | The raw wholesale exchange rate cost provided by VertoFX. |
| The Margin Spread | The exact fractional difference between the Verto Buy Rate and your finalized Client Rate. |
| Your Net Profit | You are paid a direct share of this spread based strictly on your partnership agreement. |
📋 Prerequisites
Before integrating the FX Markup endpoints, ensure you possess:
- An active Atlas for Platforms production account.
- A valid, secure API Key provisioned with Markup Control scoping.
Use sandbox to validate your pricing logic first, then move the same model into production only after the account-level capability is approved.
🔧 Step-by-Step Implementation
All API requests require Bearer authentication using your generated credentials.
Option 1: Stateful Universal & Dynamic Configurations
Ideal for standard marketplace deployments. You push a configuration payload to the /fx/markup/config endpoint, and Verto applies that markup automatically to matching downstream FX requests.
# Stateful Universal Configuration
curl --request POST \
--url https://api-exchange-now-sandbox.vertofx.com/fx/markup/config \
--header 'Authorization: Bearer <SECURE_REDACTED_API_TOKEN>' \
--header 'content-type: application/json' \
--data '{
"markupType": "universal",
"markupPerc": 1.5
}'Option 2: Trade-by-Trade Execution (Granular Overrides)
Ideal for high-precision brokerage or custom-priced flows. Pass an explicit fxMarkup object directly inside the /fx/payments execution payload when one transaction should override the default pricing model.
# Per-Trade Explicit Payload Modifier
curl --request POST \
--url https://api-exchange-now-sandbox.vertofx.com/fx/payments \
--header 'Authorization: Bearer <SECURE_REDACTED_API_TOKEN>' \
--header 'content-type: application/json' \
--data '{
"paymentType": "convertWalletPayout",
"sourceWalletId": 11435,
"sourceAmount": 4800,
"vfxToken": "<YOUR_VFX_TOKEN>",
"targetAccountId": 23181,
"fxMarkup": {
"markupType": "currency_pair",
"markupPerc": 2.5
}
}'🔀 The Suggested Implementation Workflow
To ensure your customers see consistent pricing, use the Quote-to-Execution pattern:
- Quote Stage: Call the
Get Rate (New)API to fetch the authoritative Verto rate token. On your own system, calculate your final "Client Rate" by adding your desired margin to the Verto rate, then display it in your checkout UI. - Execution Stage: Pass that same
fxMarkuppercentage into the/fx/paymentsexecution call. Verto will perform the same calculation on their backend, ensuring the final settled amount matches exactly what your customer was shown.
If you support customer-visible quoting, keep the quote and execution paths aligned so the final trade reflects the price shown in your UI.
✝️ Controlling the "Fix Side" (Buy vs. Sell)
The Exchange Service API handles "Fixing" based on which volume parameter you populate in the payload:
- Fix Source (Fix Sell): Populate
sourceAmount. You define what you want to spend; the API calculates the recipient amount accordingly. - Fix Target (Fix Buy): Populate
targetAmount. The API ensures the recipient receives exactly this volume (e.g., exactly 1,000 EUR) and calculates the necessary wallet deduction accordingly.
📌 Markup Hierarchy & Precedence
To ensure absolute flexibility, Verto uses a "Specific-Wins" logic:
- Global/Corridor Levels: Used as the DEFAULT base for all sub-account trades.
- Trade-Level Override: If you pass an
fxMarkupobject in your/fx/paymentscall, it overrides any existing defaults. This allows you to differentiate pricing for specific high-value trades or promotional cohorts.
In practice, this means your application should always know whether the current trade is using inherited markup or an explicit override.
✅ Verifying Transaction Margins
Once a trade is created, the 200 OK response from the Create FX Trade endpoint includes clear auditing fields to simplify your reconciliation.
| Key Field | Description |
|---|---|
fxMarkupPerc | The explicit fractional percentage (e.g., 2.5) applied to this trade. |
PRPreFXMarkupRate | The original wholesale Verto rate before your margin was added. |
amountFrom & amountTo | The final executed volumes on both ends of the transaction. |
Troubleshooting
| Issue | What to check |
|---|---|
| Displayed rate does not match executed rate | Make sure the same markup logic used in the quote path is passed through execution. |
| Wrong spread is applied | Check whether a trade-level fxMarkup override is replacing your default configuration. |
| Margin audit is unclear | Persist the returned markup fields and final trade amounts so finance teams can reconcile the trade later. |
| Sandbox and production behavior differ | Confirm the same markup model, permissions, and route assumptions are enabled in both environments. |
Next steps
| FX Conversion Guide → Review the core quote-to-convert flow that markup logic builds on. | Exchange → Compare markup behavior with the broader exchange execution modes. |
Updated about 1 month ago
