How-to guidesHow-to

Find the markup on a card or bank exchange rate

Compare the statement rate with EUR per USD

29 Oct 2026 · 3 min read

To find the markup, subtract the statement rate from the reference rate, then divide by the reference rate. For a transaction charged in USD with EUR received, both rates must be in EUR per USD. The result measures how far the statement rate falls below the reference. Check any separate fee before you compare the statement total.

Get the reference rate in EUR per USD

Use the EUR value in rates as your reference. The API quotes every currency against USD, so this value is the euros received per dollar. Keep that direction when you read the statement and calculate its rate.

Every latest response carries source, market_session, timestamp, data_updated_at and rates, plus the notice "Indicative rates, not for settlement." Use data_updated_at to check when the reference was observed. Take a reference near the transaction time so the comparison uses the same moment.

The EUR to USD rate page uses USD per EUR. Your reference here, 0.89733 EUR per USD, is the inverse of the rate on that page.

Shell
curl "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR"

Divide EUR received by USD charged

Calculate statement rate = EUR received / USD charged. The result is EUR per USD, the same unit as the reference. Use the amounts for the conversion itself and identify any separate fee before you calculate the rate.

If the statement already gives a rate, check which way it reads. A USD per EUR figure needs to be inverted before you compare it with EUR per USD. Using opposite directions changes the calculation.

Divide the rate difference by the reference

Use markup = (reference rate - statement rate) / reference rate. Express the resulting fraction as a percentage. The reference is the denominator because the calculation measures the shortfall relative to the EUR per USD rate you used for comparison.

A lower statement rate means fewer euros for the same dollar amount. You can calculate that shortfall in euros too: convert the same USD amount at each rate, subtract the statement amount from the reference amount, then divide by the reference amount.

Calculate the difference for a USD charge

These are example numbers from the response at 29 Oct 2026, 12:46 UTC, its data_updated_at. The request returns a reference of 0.89733 EUR per USD, printed to five decimal places.

Suppose a card statement converted at 0.87041 EUR per USD, which is 3% below the reference. This is an example figure, not any provider's rate. The example statement rate is the printed reference multiplied by 0.97, then rounded to five decimal places.

For 1,000 USD charged, the reference conversion is 897.33 EUR and the example statement conversion is 870.41 EUR. The calculations use the printed rates. Subtract the amounts to get 26.92 EUR, then divide that difference by the reference amount to calculate 3.00% markup.

StepCalculationResult
Reference amount1,000 × 0.89733897.33 EUR
Statement amount (example)1,000 × 0.87041870.41 EUR
Difference897.33 − 870.4126.92 EUR
Markup26.92 ÷ 897.333.00%

Check fees alongside the rate markup

A card may add a fee on top of its exchange rate. The statement total can therefore be worse than the rate markup alone. Keep the rate comparison and separate fee visible when you assess the transaction.

Banks, cards and transfer services apply their own spread and fees. The reference uses indicative mid-market figures, not rates for settlement or trading. It gives you a basis for the calculation; the statement records the applied conversion and charges.

Choose access with the delay in mind

Keyless calls allow 10 requests a minute and 100 an hour per IP, with rates 15 minutes late. A free key has 5,000 requests a month and 10 requests a minute. Free rates are also 15 minutes late; paid plans are live.

Read data_updated_at alongside the returned rate, whichever access you use. A response time and a rate observation time describe different things, and the observation time is the one to compare with the transaction.

Questions

Which rate belongs in the denominator?

Divide by the reference rate. The formula measures the difference relative to that reference. Dividing by the statement rate instead changes the basis of the percentage, so it does not follow the markup formula used here.

Can I calculate markup from the EUR amounts?

Yes. Convert the same USD amount at both rates. Subtract the statement's EUR amount from the reference EUR amount, then divide by the reference EUR amount. Keep separate fees out of that rate calculation.

Is the example statement rate a provider's rate?

The statement rate of 0.87041 EUR per USD is an example figure. It represents a rate 3% below the reference, with the example calculation based on the printed rates.

Why does the reference observation time matter?

A reference from another moment changes the comparison. Use a reference near the transaction time and check `data_updated_at` to see when it was observed. Keyless and free rates are 15 minutes late.

Keep reading

Get a free API key

Free has 5,000 requests a month and 10 requests a minute. No credit card is required.

Get a free key