How to benchmark a bank's FX quote against the market
A quote is only expensive or cheap relative to something. On African corridors the reference most desks use — a mid from a screen — is often not a price anyone in the corridor can deal at. This guide sets out a benchmark built from what named providers actually quoted at the same time.
Updated 2 Sep 2026 · 6 min read · by Modan
Step 1 — Get the book at the same moment
Pull the corridor's provider book at the time of your quote: every tracked provider's rate, fee and observation time. On the site that is the corridor page; programmatically it is one call to /rates?from=USD&to=NGN with an API key. Note the as_of and data_freshness fields — on Free and Individual keys the book is as of the top of the current UTC hour; Team keys receive every observation as it lands.
Step 2 — Measure two distances
Express the bank's quote in the same terms as the book — units of destination currency per unit of source — and compute two numbers. First, its distance from the best executable quote in the book: (best − quote) ÷ best × 10,000, in basis points. Second, its distance from the independent mid the book carries as mid_rate: (quote − mid) ÷ mid × 10,000. The first tells you how the bank compares with the providers a customer could actually use; the second anchors everyone, bank included, to a reference outside the corridor.
Do not measure against the official rate. It is a reference, not a price, and Modan never ranks it as best for the same reason.
vs_best_bps = (best_executable − quote) / best_executable × 10,000 vs_mid_bps = (quote − mid_rate) / mid_rate × 10,000
Step 3 — Read the dispersion
A 40 bps gap to the best quote means one thing on a corridor where providers cluster within 30 bps of each other and something else on a corridor where they span 400. Every corridor page carries a *Dispersion* tile — the gap between the best and the worst executable quote — and the provider pages show each provider's rank. Judge the bank's quote against the spread of the market it is operating in, not against a single number.
Step 4 — Adjust for what the rate doesn't say
- Fees: compare net of any explicit fee for the notional in question.
- Settlement: a provider's transfer time is on its page; a sharper rate with slower settlement may not be the better deal.
- Size: provider quotes are per unit and typically for retail-sized transfers; a bank pricing a large ticket is pricing different liquidity. Say so in the record rather than pretending the comparison is exact.
Step 5 — Keep the record
The value of a benchmark is that it can be reproduced later. Modan's history is append-only: the observations you compared against remain retrievable through /rates/history and the time-series endpoints, so a decision made at 10:40 UTC can be reviewed against the book as it stood at 10:40 UTC. Store the corridor, the timestamp, the best executable quote, the mid and the two distances with the trade.
Frequently asked questions
- What is a reasonable spread over mid on an African corridor?
- There is no single figure; it varies by corridor, size and time. The honest yardstick is the observed dispersion among executable quotes on that corridor at that moment, which every Modan corridor page shows, and the distance of the best executable quote from the independent mid.
- Can I get the history to justify a decision later?
- Yes. Every observation is timestamped and kept; /rates/history returns the series for a corridor (optionally one provider), and /historical returns the book as it stood on a past date. Free keys allow 50 requests a day.
- Does Modan quote interbank rates?
- Where a tracked provider publishes an interbank print it is recorded and labelled interbank, and spread is measured within that kind. Coverage varies by corridor — the providers index shows what kind of price each source publishes.