Indicative vs executable FX rates: what a rates API actually gives you
Every FX rate you read from an API is one of two things: a reference price for analysis and display, or a dealer quote you can trade on. These are not interchangeable. Knowing the difference determines whether you are building the right thing.
exchangerate.dev publishes indicative rates: mid-market reference prices sourced from the ECB, the Federal Reserve, and aggregated spot data. They are suitable for reporting, dashboards, invoicing, analytics, and currency display. They are not executable quotes and every response from the API says so explicitly in the notice field.
notice field that states this.source field tells you which class of indicative data you are reading: live, ecb_daily, or fred_daily.Two kinds of rate
FX rates serve two distinct purposes. A reference rate is a published mid-market price. Central banks, statistical agencies, and data providers publish them so developers, accountants, and analysts have a consistent number to work with. An executable rate is a price a dealer or payment processor is prepared to honour for a specific transaction. It comes with a bid and an ask, and the spread between them is how the dealer earns their margin.
Reference rates and executable rates will rarely match exactly, and they are not meant to. The reference rate reflects where the market is, in aggregate, at a point in time. The executable rate reflects what a specific counterparty will accept right now, for a specific amount, in a specific direction.
What indicative means
Indicative is the technical term for a rate published without a commitment to trade. The provider is saying: this is what the market looks like. They are not saying: we will let you buy at this price.
exchangerate.dev publishes indicative rates. The source field in every response identifies which class of indicative data you are reading. ecb_daily is the European Central Bank's published reference fix, released once per business day around 16:00 CET. fred_daily is the Federal Reserve's daily series. live is an aggregated spot consensus that updates continuously, including on weekends. All three are indicative.
notice field. For live data it reads: "Indicative rates, not for settlement." For reference sources it reads: "Indicative rates, not for settlement. Source: incl. ECB statistics." This is not boilerplate; it is the accurate description of what the data is.Reading the notice field in a response
Call /v1/latest/USD and you will see the notice alongside the rate data:
The notice field is machine-readable. If you are displaying rates to end users, passing it through to your UI is good practice. It accurately frames what they are seeing.
Indicative vs executable: a direct comparison
Classes of indicative data: live vs ecb_daily vs fred_daily
The source field distinguishes three classes of indicative data. They are all reference prices, but they have different update rhythms and different authorities behind them.
live: aggregated spot consensus, updated continuously. Moves through the trading week and on weekends. Good for dashboards that need to reflect current market conditions.ecb_daily: the European Central Bank's official reference rate, published once per business day around 16:00 CET. Carries institutional authority and is the standard for many EU accounting and legal contexts.fred_daily: the US Federal Reserve's daily foreign exchange series. Published on business days. Appropriate for US-centric reporting that references Fed data.
A single API call may return any of these depending on the currency pair and the time of day. Check source before deciding how to present the rate to users. The data_updated_at field tells you when the underlying rate was last written; timestamp tells you when the response was built.
Where indicative rates belong
Indicative rates are well-suited for a wide range of applications:
- Converting prices in an e-commerce product catalogue for display purposes
- Showing users the approximate value of a transaction before they confirm it with a payment processor
- Generating financial reports and dashboards that track currency exposure over time
- Accounting entries where the rate is recorded for bookkeeping at the time of a transaction
- Monitoring alerts that trigger when a rate crosses a threshold
- Analytics and charts built over historical rate series back to 1999
Indicative rates answer the question "what is the rate?" Executable rates answer the question "what will you give me right now if I transact?"
When you need a dealer or PSP instead
Some use cases require an executable rate. If you are building a feature where money actually changes hands, the rate used to calculate the amount must come from the party executing the transaction. Using an indicative rate in these contexts would misrepresent the actual cost to the user.
Specifically: when a payment processor or bank converts currency on a customer's behalf, the rate they apply is their own executable quote, not the mid-market reference. When a business hedges FX exposure through a forward contract, the rate agreed is an executable rate with a counterparty. When a trader executes a spot transaction, the dealing price is the rate, not any external reference.
In these cases you may still use indicative rates alongside the executable rate, for example to show users the mid-market context or to record a benchmark rate for reporting. The boundary is whether the indicative rate is being used to calculate an amount that a real party will receive or pay.