Partner Fee Configuration

Set your own transaction fees and margins on top of the Wirex platform price from the admin panel.

Overview

You set your own fees from the Wirex admin panel, under Configuration → Fees.

Everything you configure is an addend: your margin, added on top of the platform price. You do not edit the platform's numbers, and nothing you enter reduces them.

charged fee  =  platform base × (1 − customer discount)  +  your addend

The two halves stay apart on purpose. The left half is Wirex revenue and Wirex discounts. The right half is yours, recorded separately on every calculation, so paying you out never requires reverse-engineering a total.

Two screens apply your margin, and a third assigns it per user:

ScreenWhat it does
Company FeesOne set of numbers for every user of your company
Fee ScopesNamed fee sets you can assign to individual users
Subject BindingsAssigns one user to one fee scope

Which Fees Apply to a Transaction

Exactly one fee set prices a transaction. Wirex walks this order and stops at the first match. Two sets never merge.

PrioritySourceSet on
1A binding on that specific end userSubject Bindings
2The fee scope assigned to the companyAssigned by Wirex on your company record
3The company's own feesCompany Fees
4Platform default — no addend, you earn nothing

Attribution: A fee scope carries your company id inside its name, so any fee priced through it is attributed to you. Company Fees carries no owner in its key — those addends are attributed to you only when your account is registered as a BaaS-class client. Confirm your client class with your Account Manager before relying on Company Fees for revenue.


Access

Your admin account is scoped to your own company. Platform-wide screens are hidden, and Wirex re-checks the scope on every request — the menu is convenience, not the boundary.

Configuration then Fees, as a partner administrator sees it
ScreenPartner access
Fee ScopesYour own scopes only
Company FeesYour own company only
Subject BindingsYour own company's users
Validation, Base Fees, Pre-defined FeesWirex only — not shown to partner accounts

Two roles govern what you can do:

RolePermits
EditorOpen every screen above and read the values
AdminCreate a scope, save a table, bind a user, delete anything

A page that loads but returns a permission error on Save means the account holds Editor and needs Admin.


Choosing Your Approach

Company FeesFee Scopes + Subject Bindings
Applies toEvery user of your companyOnly users you bind to the scope
SetupEnter the numbers and saveCreate a scope, enter the numbers, bind each user
Varies by customerNoYes — one scope per price point
Attributed to youOnly on a BaaS-class accountAlways
Use whenYour pricing is uniformYou run tiered or negotiated pricing

Most partners use both: standard margin on Company Fees so every new customer is priced from day one, then a scope per exception, bound only to the customers who need it.

Important: A bound user takes the scope's numbers instead of the company numbers, not in addition to them. Transaction types the scope leaves blank fall through to the platform default. Build exception scopes as complete price lists.


Create a Fee Scope

A scope is an empty price list until you fill it in. Creating one changes no pricing.

Step 1: Open Fee Scopes

Go to Configuration → Fees → Fee Scopes. Your company is pre-selected. If you administer more than one, pick it from the Company field.

Step 2: Create the scope

Press New. Owner is fixed to your company and read-only — a scope is only ever created under the company you administer.

The New fee scope dialog, with Owner locked to the partner company

Name rules: lowercase letters, digits, dot, dash or underscore. Start with a letter or digit. 31 characters maximum. The dialog shows the Full id as you type.

The description is what appears in the scope picker afterwards. Tier 2 corporates, 25bps beats new.

Step 3: Record the full id

The full id is your company id (32 characters, no dashes), a dot, then your name:

7f3c1ab94e5d42f8b0d61c9e2a5b8d04.vip-corporates

That prefix is how a fee is paid to you rather than absorbed by the platform, which is why the dialog builds it instead of accepting it typed. Step 3 of Bind an Individual User consumes this value — copy it from the line under the scope picker.

Deleting a scope

Delete is refused while a company is assigned to the scope, or a user is still bound to it. Unbind first.

This is deliberate. A scope that disappears while something still names it does not fall back to the default — it fails every transaction for that customer.


Enter Your Fees

The same editor serves Fee Scopes and Company Fees. Fees are grouped into tabs by what they are for, and each table inside a tab saves independently.

Fee Scopes with a scope selected, showing the Transaction Fees tab

Bold tab labels mark the areas that already contain rows. Save stays greyed until you change something.

Four editing rules

RuleEffect
Save replaces the whole tableSave sends every row on screen and discards what was stored before. Delete a row and save, it is gone. Save an empty table and that table is cleared for the scope completely.
Empty is not zeroAn empty box means "not setting this" — the platform value applies unchanged and you add nothing. A typed 0 means an explicit zero. The two produce different settlement outcomes.
Rates are basis points100 bps = 1%. 25 bps = 0.25%. 10000 bps = 100%.
One table at a timeEach block saves on its own. Switching tabs with unsaved changes discards them, with no prompt. Save before you move.

What you can save

The editor shows five tabs. Three accept a partner's changes.

TabPartner can save
Transaction FeesYes
Currency ExchangeYes
TradingYes
Corporate PlansNo — these set what Wirex discounts
Card Issuance & DeliveryNo — Wirex-controlled

Retail Plans and the currency and asset grouping tables are hidden on partner screens. They are platform structure and carry no per-company variant.


Company-Wide Fees

Same editor, no scope to name. What you set here applies to every user of the company, unless a binding overrides them.

Company Fees, showing which areas are currently customized

The Currently customized chips and the bold tab labels show which areas you have changed. Everything else is on the platform default.

Important: Reset to default removes every custom fee for the company in one action — all tabs, all tables. There is no undo and no partial reset. To clear one table only, empty its rows and save that block.


Bind an Individual User

A binding attaches one end-user wallet address to one fee scope. From then on that user is priced entirely by that scope.

Subject Bindings, showing the add form and the existing bindings table

Step 1: Copy the full scope id

On Fee Scopes, select the scope. The id is the line under the picker. This is the value Step 3 requires.

Step 2: Enter the user's wallet address

Paste the full address into Subject address. A truncated display value is rejected.

Step 3: Enter the scope id and save

Paste the full scope id into Fee scope and press Save. The field checks the format before sending, then Wirex checks the scope exists. A malformed id and a non-existent one are both rejected.

Step 4: Confirm the binding

The binding appears in the table below with the operator who set it and the time. Saving the same subject again updates the existing binding rather than adding a second one.

Removing a binding returns the user to the normal order: the company's scope, then Company Fees, then the platform default. It never strands them.


Fee Fields

Fees by transaction type

ColumnUnitMeaning
Op TypelistWhich operation the row prices. Fixed list, selected from the dropdown
Op CurrencycodeOptional. Blank prices the operation in every currency. A row naming a specific currency wins over the blank-currency row for that currency
Fixed Fee (USD)USDA flat amount added per transaction. Decimal, for example 0.35
Amount Fee (bps)bpsYour percentage of the transaction amount
Same-Ccy Amount (bps)bpsReplaces Amount Fee when source and destination are the same asset. Blank uses Amount Fee for those too
Transport (bps)bpsYour share of the network cost. Ignored when Wirex absorbs transport for that operation

Exchange margin by currency pair

ColumnUnitMeaning
Pair ClasslistDEFAULT, MAJOR_MAJOR, MAJOR_MID, MAJOR_EM, MAJOR_PEGGED
Markup (bps)bpsAdded to the platform exchange margin for that pair class
Weekend Surcharge (bps)bpsAdded only on transactions inside the weekend window. Charges nothing on weekdays

Trading margin by asset group

ColumnUnitMeaning
Asset ClasslistMAJOR, ALT, MICRO, STABLECOIN
Markup (bps)bpsAdded to the platform trading margin for that asset class

Operation types

GroupValues
CardCARD_DOMESTIC, CARD_REGIONAL, CARD_INTL, CARD_TOPUP
ATMATM_DOMESTIC, ATM_REGIONAL, ATM_INTL
Bank railsACH, FPS, PIX, SEPA, SPEI, SWIFT, P2C
TradingTRADE_CRYPTO, TRADE_FX, TRADE_STOCK
On-chainTRANSFER_CRYPTO, DEPOSIT_CRYPTO
Card lifecycleCARD_ORDER, CARD_DELIVERY — priced from the card price lists. A row for either must leave every fee column empty

Currency and Asset Classes

You price by class, not by currency. One row covers every pair that falls into it. The mappings below are platform structure — not editable by you, and not shown on your screens.

Currency classes

ClassCurrencies
MAJORCHF, EUR, EURC, GBP, TGBP, USD, USDC
MIDAUD, CAD, MXN, PLN, SEK, SGD
EMBRL, COP, INR, NGN, PHP, TRY
PEGGEDAED, BGN, HKD

USDC, EURC and TGBP are classified as currencies, not as tradeable assets. A USDC to EUR conversion is priced as an exchange on MAJOR_MAJOR. A trading markup never applies to it.

How a pair becomes a Pair Class

src ╲ dstMAJORMIDEMPEGGED
MAJORMAJOR_MAJORMAJOR_MIDMAJOR_EMMAJOR_PEGGED
MIDMAJOR_MIDDEFAULTDEFAULTDEFAULT
EMMAJOR_EMDEFAULTDEFAULTDEFAULT
PEGGEDMAJOR_PEGGEDDEFAULTDEFAULTDEFAULT

Only pairs involving a MAJOR get their own class. Everything else lands on DEFAULT — including MID to EM, EM to EM, PEGGED to MID, and any currency absent from the table above. A single exchange row covering the most traffic is DEFAULT.

Asset classes

ClassAssets
MAJORBTC, ETH, SOL
ALTADA, APT, ATOM, AVAX, BCH, BNB, DOGE, DOT, HBAR, LINK, LTC, MATIC, NEAR, SHIB, TON, TRX, UNI, XLM, XRP
MICRONo assets listed. Every asset absent from the rows above prices as MICRO
STABLECOINNo assets listed. Stablecoins are classified as currencies instead

Important: A markup row on STABLECOIN earns nothing while no asset is classified into it. List a new asset and a MICRO row prices it, not ALT.

Exchange or trading — one applies, never both

PriorityConditionResult
1Both sides are listed currencies and the pair resolves to a named classExchange markup for that pair class
2Either side is a listed asset — source checked firstTrading markup for that asset class
3Either side is a listed currencyExchange markup on DEFAULT
4Neither side is recognisedTrading markup on MICRO

Same-asset transactions skip both. No conversion means no margin to add to.


Common Pitfalls

SituationWhat happens
You cleared a field to make a transaction freeEmpty means no addend. The platform fee still applies in full. Empty is already how you charge nothing on top; the platform fee cannot be zeroed from these screens
You set Transport (bps) and see no chargeWirex absorbs transport for that operation. A transport addend only takes a share of a charge that exists
Your exchange markup did not applyThe transaction was same-asset. No conversion, no margin to add to. Same-asset also skips the trading markup
You priced MAJOR_MID but earned nothing on an AUD to SEK transactionBoth are MID. Only pairs involving a MAJOR get their own class, so that transaction priced on DEFAULT
A newly listed asset does not pick up your ALT markupThe asset is absent from the platform asset list, so it prices as MICRO. Add a MICRO row, or ask Wirex to classify the asset
Your weekend surcharge earned nothing all weekIt is billed only inside the weekend window. Five days in seven it contributes zero
A bound user is cheaper than expectedThe binding replaced your company fees. Anything the scope leaves undefined falls to the platform default, not to your company numbers
Duplicate rows appeared after an editSave replaces the whole table with what is on screen. Duplicates mean a row was added rather than edited
Changes are not visible in pricing yetWirex polls for configuration changes. A short delay after Save is expected. A delay beyond two minutes is a fault — raise it with your Technical Account Manager
You typed a lowercase operation type or currencyIt is upper-cased on save. Use the dropdowns — a value outside the known list is stored and then never matched at pricing time

Your Responsibilities

  • Verify every change after saving. Reopen the screen: the Defines and Currently customized chips and the bold tab labels are read back from Wirex. An area absent from them did not save, whatever the confirmation message said.
  • Build exception scopes as complete price lists. A bound user does not inherit your company fees.
  • Unbind every user before deleting a scope they are bound to.
  • Confirm your client class with your Account Manager before relying on Company Fees for attributed revenue.

Limitations

  • Corporate Plans and Card Issuance & Delivery are visible in the editor but reject a partner's save. They set what Wirex discounts and what Wirex charges for cards.
  • Currency classes, asset classes and retail plan tiers are platform structure. Changing them is a request to Wirex, not a self-service action.
  • A transport addend cannot create a transport charge where Wirex absorbs the cost.
  • A weekend surcharge addend bills only inside the weekend window.
  • Fee scope self-service depends on the scope-ownership release being live in your environment. Until it is, Fee Scopes reports a permission warning, and Company Fees and Subject Bindings are the available screens.

Contact

PurposeContact
Pricing, commercial terms, client classYour Account Manager
Admin panel access and rolesYour Technical Account Manager
Getting started[email protected]

Did this page help you?