Intraday exchange rate API

Pull timestamped market observations for supported pairs over REST. Use a Pro API key for this 15-minute USD/JPY request.

exchangerate.devExchange-rate API · Updated Sep 15, 2026

Try a 15-minute USD/JPY observation

Try a 15-minute USD/JPY observation · Pro
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" -H "Authorization: Bearer YOUR_API_KEY"
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
1m2217 d
5m22131 d
15m22193 d
1h221366 d
4h2091830 d
1d102961830 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

Plus: 1h and 4h for 30 days. Pro: 1m to 4h, full depth. Both need a key. Anonymous latest and 30-day daily history: 10 requests per minute, 100 per hour per IP.

PlanCalls per monthCommercial use
Free5,000Display with visible linked credit
Basic100,000Yes
Plus300,000Yes
Pro1,000,000Yes

View pricing · Create a free key