Intraday exchange rate API

Pull timestamped market observations for supported pairs over REST. Start with an anonymous USD/JPY request, then use an API key for account quotas.

Read the historical docsCreate a free key

Try a 15-minute USD/JPY observation

Try a 15-minute USD/JPY observation
curl "https://api.exchangerate.dev/v1/timeseries?base=USD&symbols=JPY&interval=15m&from=2026-09-14T12:00:00Z&to=2026-09-14T12:00:00Z"
JSON · recorded response, 2026-09-14
{
  "result": "success",
  "base": "USD",
  "symbols": ["JPY"],
  "interval": "15m",
  "from": "2026-09-14T12:00:00Z",
  "to": "2026-09-14T12:00:00Z",
  "data": [{
    "timestamp": "2026-09-14T12:00:00Z",
    "effective_at": { "JPY": "2026-09-14T12:14:58.972181Z" },
    "rates": { "JPY": 154.582 },
    "source": "live",
    "source_type": "market",
    "market_session": "open",
    "derived_symbols": []
  }],
  "next_cursor": null,
  "has_more": false,
  "notice": "Indicative rates, not for settlement."
}

This fixed example was observed on 2026-09-15 for the 2026-09-14 12:00 UTC bucket. The rate is indicative. timestamp is the bucket start; effective_at is the observation time.

Intervals and available history

The supported market intervals are 1m, 5m, 15m, 1h and 4h. The 1d interval reads daily reference history. Market collection began on 2026-09-14; 1m is retained for 30 days, while coarser intervals have no scheduled expiry. Retention does not mean that every pair already has that much history.

intervalUnique pairsMaximum request window
1m917 d
5m9131 d
15m9193 d
1h91366 d
4h791830 d
1d4651830 d

Check pair-specific coverage and limits

Missing observations and crosses

Intraday gaps remain gaps. Cross rates require real closing ticks from both USD legs in the same UTC interval, at most five seconds apart. effective_at is the older observation time. The current bucket can change; 1d remains daily reference history.

A supported window without observations returns HTTP 200 with data: [], has_more: false and next_cursor: null. An unknown interval returns unsupported_interval. A request containing an unsupported pair returns HTTP 400 unsupported_pair_interval with rejected_pairs; the whole request is rejected.

Read the historical docs · WebSocket exchange rate API

Authentication and commercial use

REST data routes can be tried anonymously: 12 requests per minute and 100 per hour per IP. A bearer API key applies your account quota. Keep keys on your server.

PlanCalls per monthCommercial use
Free10,000No
Basic100,000Yes
Pro1,000,000Yes

View pricing · Create a free key