/v1/latest/USDを呼び出してsource: ecb_dailyが返ってきたとき、それは欧州中央銀行のユーロ外国為替参照レートを読んでいる、CET16:00頃に営業日ごとに1回公表され、参照および情報提供を目的としており、取引には使えない。これはEURペアにとって最も権威ある日次のFX数値だが、あくまで1回のスナップショットであり、市場はCET16:00以降も動き続け、フィックスは翌営業日まで更新されない。
- ECBはユーロ参照レートを営業日ごとに1回、CET16:00頃に公表する。
sourceはlive、ecb_daily、market_daily(ECB対象外通貨の保存済み日次市場終値)。- 週末や祝日には新しいECBフィックスは公表されない。該当日の履歴レスポンスには
is_forward_filled: trueが付く。 - すべてのレートはインディケーティブであり、参照・分析目的のみに用いる。決済やディーリングには使えない。
- 履歴は1999年、ECBのEXRシリーズの開始時点まで遡れる。
ECB参照レートとは何か
欧州中央銀行は営業日ごとに、ユーロ外国為替参照レートの一式を公表している。これらはCET16:00頃、欧州中央銀行制度の内外の中央銀行との協議プロセスを通じて算出される。レートはその時点でのコンセンサス・ミッドマーケット値を表しており、ECB自身の文書が明記するとおり、情報提供および参照目的のみに用いることを意図している。
これらは公的機関に由来し、固定された透明なスケジュールで公表されるため、EU域内の金融契約、会計、規制報告で広く使われている。APIレスポンスでsource: ecb_dailyを見たとき、まさにこれを読んでいることになる。
ECB参照レートはディーリングレートではない。ある時点での市場コンセンサスを反映したものだ。ECB由来のレートを含むすべての/v1/latestレスポンスには、これを確認するnoticeフィールドが含まれる:「Indicative rates, not for settlement. Source: incl. ECB statistics.」
APIにおける3つのソースクラス
APIのすべてのレスポンスには、そのレートがどのデータクラスに由来するかを示すsourceフィールドが含まれる。3種類ある:
| フィールド値 | ecb_daily | live |
|---|---|---|
| 提供元 | 欧州中央銀行 | 参考用スポット市場レート |
| 頻度 | 営業日ごとに1回 | 取引週を通じて日中(約60秒間隔) |
| 公表 | 平日CET16:00頃 | 取引週を通じて |
| フィックスの合間 | 前回のフィックスを維持。市場変動は反映されない | 取引週を通じて更新が続く |
| 週末・祝日 | 新しいフィックスなし。前回値を維持 | 銀行間市場は休止。最後の市場レートを維持 |
| 利用可能な履歴 | 1999年まで遡及 | 直近の期間のみ |
| 適した用途 | 会計、レポーティング、監査証跡 | リアルタイム表示、プライシング |
ECB由来のレスポンスを読む
任意のベース通貨で最新レートをリクエストし、sourceを確認すれば何を見ているかがわかる:
curl -s https://api.exchangerate.dev/v1/latest/EUR{ "result": "success", "base": "EUR", "source": "ecb_daily", "market_session": "open", "timestamp": "2026-06-19T14:05:33Z", "data_updated_at": "2026-06-19T14:00:00Z", "rates": { "USD": 1.14235, "GBP": 0.86781, "JPY": 184.320 }, "notice": "Indicative rates, not for settlement. Source: incl. ECB statistics."}すべてのレスポンスに2つのタイムスタンプフィールドが現れる。data_updated_atは元のレートがデータストアに最後に書き込まれた時刻だ。ecb_dailyの場合、直近の営業日のCET16:00頃になる。timestampはAPIがレスポンスを構築した時刻だ。レスポンスをキャッシュするなら、鮮度を追跡すべきフィールドはdata_updated_atだ。
この最初のリクエストはキーなしで動く。スケジュールされたジョブやアプリケーションで呼び出すようになったら、無料キーを作成してアカウント単位のクォータを得て、サーバー側に保管する。
フィックス間、週末、フォワードフィル
ECBフィックスは1日1回のスナップショットだ。CET16:00頃の公表から翌営業日のフィックスまでの間、ecb_dailyのデータは更新されない、日中や夜間の市場変動は反映されない。ECBは週末や祝日にも公表しないため、土曜日や日曜日のリクエストには金曜日のフィックスが返る。APIはis_forward_filledフィールドで非公表日を扱う:
curl -s https://api.exchangerate.dev/v1/2026-06-13/USD \ -H "Authorization: Bearer exr_live_..."{ "result": "success", "base": "USD", "source": "ecb_daily", "market_session": "weekend", "is_forward_filled": true, "rates": { "EUR": 0.87531, "GBP": 0.75945, "JPY": 161.412 }}is_forward_filledがtrueのとき、レスポンス中のレートは直前の営業日から持ち越された最後の公表値だ。新しい観測値ではない。多くの用途(週末にレートを表示する、チャートを埋めるなど)ではこれで問題ない。会計や監査証跡のように、特定の日に実際にフィックスが存在したかを記録する必要がある場合は、このフラグを確認すべきだ。
liveソースは取引週を通じて約60秒ごとに更新される、ECBの日次フィックスの合間や夜間も含む。CET16:00昨日時点ではなく、今現在の市場を反映するレートが必要なら、レスポンスにsource: liveが含まれるか確認するとよい。
Pythonでsourceを確認する
レートを読み取り、sourceによって表示方法を分岐させるのはよくあるパターンだ:
import requestsAPI = "https://api.exchangerate.dev/v1"KEY = "exr_live_..."resp = requests.get( f"{API}/latest/USD", headers={"Authorization": f"Bearer {KEY}"}, timeout=10,)resp.raise_for_status()data = resp.json()rate = data["rates"]["EUR"] # 0.87531source = data["source"] # ecb_dailysession = data["market_session"] # openif source == "ecb_daily": print(f"ECB reference rate as of last business day: {rate}")elif source == "live": print(f"Indicative spot rate ({session}): {rate}")else: print(f"Rate ({source}): {rate}")1999年までの履歴
ECBはユーロ導入時にEXRシリーズを開始した。Plus/ProのキーでAPIは日付パス/v1/{date}/{base}とレンジエンドポイント/v1/rangeで全履歴を公開する。どちらも該当箇所にはis_forward_filledを返す。任意の期間について、特定の通貨ペアの時系列を取得できる:
curl -s "https://api.exchangerate.dev/v1/range?base=EUR&symbols=USD&start_date=2026-06-10&end_date=2026-06-16" \ -H "Authorization: Bearer exr_live_..."パラメータ名に注意:start_dateとend_date(スネークケース)、symbolsはカンマ区切りの文字列だ。レンジは公表された営業日ごとに1行を返し、各行に固有のsourceとis_forward_filledが付く。週末の日付は行として含まれない。
ECBフィックスは営業日ごとの1つの観測値だ。ライブスポット、フォワードフィル、三角測量によるクロスレートは、すべてそのアンカーを取り巻く文脈にすぎない。
1回のリクエスト、キー不要:/v1/latest/USDを試し、実際のペイロードでsourceとmarket_sessionを読んでみる。履歴と自分のクォータが必要になったら、無料キーは月5,000コール、カード不要。