Live rates, picked in your favour
At any given moment your rate providers disagree — by 0.14% on a typical pair, and up to 0.38% on the widest. Most APIs hand you whichever number the one vendor they buy from happens to publish. We compare 8 independent sources on every request and return the one most favourable to you: the highest when you charge, the lowest when you pay.
No card required. Your first API key takes about two minutes.
- 8 rate sources
- 8
- currency pairs
- 20
- fastest source refresh
- 1m
What that's worth to you
Choosing the most favourable source instead of a middling one is worth about 0.068% per order right now — 0.28% on the widest pair. It applies to every cross-border order, automatically, with no change to how you price.
Computed from the live spread across our sources at this moment (highest vs. median, charging side), before any markup you configure. Real figures move with the market.
And it stays defensible
The selected rate is clamped in both directions — capped when you charge, floored when you pay — so it never drifts far from the live market. If a customer or counterparty checks it against a public converter, it holds up. You are not overcharging — you are no longer donating the spread to whichever vendor your old API happened to use.
For anyone charging or paying across currencies
If you price in one currency and settle in another, this is the problem it solves. Common uses:
Cross-border e-commerce
Price goods in one currency and show checkout totals in the customer's.
SaaS and subscriptions
Keep one price list in US dollars and bill each customer in their local currency.
Visitor spending in Japan
Hotels, retail, duty-free shops and POS systems price in yen; visitors pay in US dollars, euros, Hong Kong dollars or yuan.
B2B import and export
Invoice in the buyer's currency, and lock the rate with a quote for as long as your offer is valid.
Platforms and marketplaces
Charge buyers with strategy=max and pay sellers out with strategy=min — one API for both sides.
Travel, study-abroad and visa agencies
Quote service fees in the client's currency.
Games and digital goods
Set regional prices in each local currency.
You choose which side the rate favours
On the same pair, a higher rate is better when you charge and a lower one is better when you pay. Tell us your side with the strategy parameter; markup direction and rounding follow it.
You're charging
When collecting from customers, take the highest rate across sources. The same list price brings in more.
For: e-commerce, SaaS, hotels, B2B invoicing
You're paying
When paying out, take the lowest rate. The same amount owed costs you less.
For: marketplace seller payouts, paying overseas suppliers
Neutral
Take the rate closest to the median of all sources, favouring neither side.
For: bookkeeping, internal reporting
Both directions are guarded
The selected rate is checked against a live market anchor. When charging, a rate that is too high is pulled back to the cap. When paying, a rate that is too low is lifted to the floor. The capped and floored fields tell you when either kicked in. Whichever side you are on, the price holds up against a public converter.
Markup per API key, changeable any time
Markup is the margin you add on top of the selected rate, in basis points: 100 bps = 1%. Set it for each key in the dashboard.
- Each key has one default markup, from 0 to 1,000 bps (0% to 10%).
- Override it per payment currency — for example HKD at 120 bps and JPY at 200 bps. A per-currency setting beats the key's default.
- Direction follows the side: charging moves the rate up, paying moves it down. Rounding follows too, so the fraction always lands in your favour.
- Saved changes apply immediately, from the next request.
- Quotes already issued are unaffected — markup is locked in when a quote is created.
- The dashboard previews the effect as you type: how much more the customer pays, or how much less you pay out.
Worked example
An order of US$1,000, settled in Hong Kong dollars, at a rate of 7.8000.
| Scenario | No markup | Markup 150 bps (1.5%) | Difference |
|---|---|---|---|
You're chargingstrategy=max | Customer pays HK$7,800.00Rate 7.8000 | Customer pays HK$7,917.00Rate 7.9170 | HK$117.00 more collected |
You're payingstrategy=min | You pay HK$7,800.00Rate 7.8000 | You pay HK$7,683.00Rate 7.6830 | HK$117.00 less paid out |
Illustrative numbers, not live rates. For an easy comparison, both rows assume the same selected rate.
Where markups must be disclosed (for example, consumer payments in the EU), disclose yours to your customers.
What you get
Many sources, one rate
Every quote is cross-checked against all live sources. Outliers are dropped, stale snapshots are excluded, and the response tells you exactly which source won and why.
Rounding in your favour
Payable amounts round to the currency's smallest unit — up when you charge, down when you pay. Yen rounds to 1, Hong Kong dollars to 0.01.
Locked quotes
Create a quote and the rate is frozen for its TTL. The amount your customer sees at checkout is the amount you settle on, even if the market moves mid-session.
Freshness, monitored
Real-time and hourly sources anchor the pricing; daily feeds only fill gaps. Source staleness is monitored and surfaced, so you find out before your customers do.
Try a live call
No sign-up needed. Run a real pricing request and see the full response: what each source quoted, which one was picked, and why. Demo data is delayed by 1 hour; calls with your own API key get live rates.
Demo data delayed by 1 hour
Pick a pair and press Run. The full JSON response appears here.
Frequently asked questions
How accurate are the rates?
Every source is cross-checked against the freshest tier and anything deviating beyond the configured threshold is discarded. The full source breakdown ships with each response, so you can audit any number we return.
How long can I lock a quote?
A quote locks the rate for 15 minutes, which covers a typical hosted checkout. Expired quotes return 404 rather than silently repricing.
Which currencies are supported?
Real-time data is available today for USD, JPY, EUR, HKD, and CNY, in any combination. TWD, SGD, GBP, AUD, KRW, MYR, and THB: real-time data temporarily unavailable — they open once the data is stable. If a pair has too few usable sources at that moment, the API returns 503 instead of guessing.
What happens when I hit my limit?
Rate limits return 429 with a Retry-After header and error code rate_limited. When the monthly quota runs out you also get 429, with error code quota_exceeded — retrying won't help until the quota resets or you upgrade. We email you at 80% and 100% of quota.