Clear exchange rates
One unit of the base currency equals the returned amount of the quote currency.
Read the methodology →Get current exchange rates through REST or MCP. Convert amounts or retrieve stored historical rates with the same API key.
curl --request GET \
--url "https://api.narwhalapi.com/v1/fx/rates/USD?currencies=EUR,JPY" \
--header "Authorization: Bearer $NARWHAL_API_KEY"{
"base": "USD",
"market_session": "open",
"rates": [
{
"currency": "EUR",
"rate": "0.9200",
"timestamp": "2026-08-22T06:29:41Z",
"stale": false
},
{
"currency": "JPY",
"rate": "147.23",
"timestamp": "2026-08-22T06:29:39Z",
"stale": false
}
]
}Convert an amount between supported currencies using the current indicative exchange rate. Each result includes the rate, timestamp, and market-session context.
curl --request GET \
--url "https://api.narwhalapi.com/v1/fx/convert?from=USD&to=JPY&amount=100.00" \
--header "Authorization: Bearer $NARWHAL_API_KEY"{
"from": "USD",
"to": "JPY",
"rate": "147.23",
"converted": "14723",
"market_session": "open",
"timestamp": "2026-08-22T06:29:39Z",
"stale": false
}Get historical exchange rates by currency and date range. Retrieve stored observations in pages, with genuine gaps preserved.
curl --request GET \
--url "https://api.narwhalapi.com/v1/fx/rates/USD/observations?currencies=EUR,NZD&start_date=2026-08-20&end_date=2026-08-28&limit=100" \
--header "Authorization: Bearer $NARWHAL_API_KEY"{
"base": "USD",
"observations": [
{
"date": "2026-08-20",
"rates": [
{
"currency": "EUR",
"rate": "0.85609"
},
{
"currency": "NZD",
"rate": "1.681"
}
]
}
],
"next_cursor": null
}/v1/fx/rates/{base}/v1/fx/convert/v1/fx/rates/{base}/observationsOne unit of the base currency equals the returned amount of the quote currency.
Read the methodology →Each rate has its own timestamp and stale state.
Each response identifies whether the market is open, on a weekend, or closed between trading sessions.
144 Currencies
Current rates, conversion, and history.
View endpoints →Convert an amount using the current exchange rate.
Read the docs →Retrieve stored rates by currency and date range.
Read the docs →Currencies, dates, limits, and gaps.
View coverage →Rate meaning, freshness, and rounding.
View methods →History, weekends, and your first request.
View guides →One unit of the base equals the returned amount of the quote currency.
Yes. History uses genuine stored dates, bounded pages, and opaque cursors.
The latest accepted rate can remain available with its timestamp, stale state, and weekend market session. Missing publication dates are not filled with synthetic rates.
No. Rates and conversions are indicative, not dealer quotes or official fixings.