取得過去某一天的匯率

2026 年 9 月 30 日,1 美元可兌換 17,891.1 印尼盾。向 observations 端點傳入基礎貨幣、報價貨幣和日期,然後從當天那一列讀取匯率。

用 API 取得指定日期的匯率

  1. 選擇貨幣和日期 將基礎貨幣放在 observations 路徑中,將報價貨幣放在 currencies 中;USD 兌 IDR 時,路徑用 USD,參數用 IDR。把 start_date 和 end_date 都設為 2026-09-30,即可請求 2026 年 9 月 30 日的觀測值,範圍兩端使用同一個日期。
  2. 設定你的 API 金鑰 取得免費金鑰,並存放在環境變數 NARWHAL_API_KEY 中。腳本會讀取該變數作為 Authorization: Bearer YOUR_KEY 標頭,所以送出請求之前,請先把金鑰放進環境。
  3. 請求觀測值 使用此處所示的日期參數和授權標頭呼叫 observations 端點。腳本讀取回應中的 observations 陣列,並把回傳的每一天的日期與 rates 陣列一起印出來,報價貨幣及其匯率就在 rates 陣列中成對出現。
    Python,過去日期的 USD 兌 IDR 匯率
    import os
    import requests
    
    r = requests.get(
        "https://api.narwhalapi.com/v1/fx/rates/USD/observations",
        params={"currencies": "IDR", "start_date": "2026-09-30", "end_date": "2026-09-30"},
        headers={"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"},
        timeout=10,
    )
    r.raise_for_status()
    for day in r.json()["observations"]:
        print(day["date"], day["rates"])
  4. 讀取回傳的日期和匯率 2026 年 9 月 30 日的輸出是 2026-09-30 [{'currency': 'IDR', 'rate': '17891.1'}];在自己的紀錄中把匯率對應到日期時,請使用回傳列上的日期。如果需要一系列日期,請求一個起始日期和一個結束日期,再用 limit 和 next_cursor 對觀測值分頁,因為一頁可能包含很多天。

查詢過去的日期請使用 GET /v1/fx/rates/{base}/observations。取得目前匯率的端點是 GET /v1/fx/rates/{base}?currencies=...;帶日期的請求應發到 observations 路徑,並帶上起訖參數。

回應包含 base、observations 和 next_cursor。observations 中的每一列都有 date 和 rates 陣列,每個匯率都有 currency 和 rate 欄位。為試算表擷取數值時,從觀測值中取日期,從 IDR 項目中取數值,保持所請求的報價貨幣與回傳匯率之間的對應關係。

如果請求回傳錯誤,回應本文採用 application/problem+json,包含 status、code、detail 和 request_id。在把回應當作觀測值之前,先讀取錯誤的 code 和 detail。錯誤本文帶有這些錯誤欄位;帶日期的匯率在成功回應的 observations 陣列中。

不用程式碼查詢歷史匯率

想手動查某個日期,可以使用顯示歷史匯率的 Narwhal 貨幣頁面。找到所需的貨幣和日期,複製到試算表時把日期和匯率一起保留。帶日期的數值,能讓你日後追溯換算所用的那筆觀測值。

如果是一批日期,把腳本寫出的日期和匯率貼到試算表裡,日期放在查找欄,匯率放在後面一欄。公式中用 date 表示要查的日期,用 table 表示這些欄,並把這兩個預留位置換成你試算表中的日期參照和查找範圍。結尾的 FALSE 表示精確比對日期,2 表示取匯率那一欄。請把貨幣對與表格放在一起,這樣就知道貼上的數值屬於哪個基礎貨幣和報價貨幣,並用回傳的觀測日期作為查找欄中的日期。

在試算表中查找日期
=VLOOKUP(date, table, 2, FALSE)

各種情況適合的方式

情況最適合的方式原因
單一日期,手動查詢貨幣頁面貨幣頁面顯示歷史匯率
日期清單observations 端點請求起訖日期,再逐一查找日期

所有帳戶都能讀取完整歷史。數列的起點可能晚於你請求的起始日期,所以請查看回傳的第一個日期。

如果該日期是週末或假日怎麼辦?

如果所請求的日期沒有匯率,就取在此之前最近一個有資料列的日期。匯率是每日觀測值,週末等沒有匯率的日子沒有資料列,因此請求某個週六時,不會回傳該日期的觀測值。

記錄是哪筆觀測值提供了該匯率時,請使用較早那一列的日期。沒有觀測值的日期如何回退,請參閱發票日期的做法。

匯率是什麼意思?

匯率是基礎貨幣每一單位對應的報價貨幣單位數。在 2026 年 9 月 30 日的 USD/IDR 觀測值中,USD 是基礎貨幣、IDR 是報價貨幣,所以 17,891.1 表示每 1 美元兌多少印尼盾。把美元金額乘以該日期的匯率,就得到對應的 IDR 金額。

應如何處理帶小數的匯率?

做金額運算時,請把回傳的匯率保留為小數或字串。API 回傳的是十進位字串,2026 年 9 月 30 日輸出中帶引號的 '17891.1' 就是例子。計算中的乘法請使用十進位表示,不要把匯率轉換成二進位浮點數。

實例:2026 年 9 月 30 日的 USD/IDR

要用 2026 年 9 月 30 日的觀測值換算 1,000 USD,先從該日期的 USD 列中讀取 IDR 匯率,再把美元金額乘以每美元 17,891.1 IDR。讓日期跟著結果一起保留,這樣該金額就能對應到計算時用的歷史觀測值。在試算表裡,先在貼上的日期中查找 2026 年 9 月 30 日,取出其匯率,再把它作為 USD 金額的乘數。

步驟數值
觀測日期2026 年 9 月 30 日
基礎貨幣金額1,000 USD
2026年9月30日的匯率每 1 美元 17,891.1 IDR
乘以1,000 USD × 每美元 17,891.1 IDR
報價貨幣金額17,891,100 IDR

發布於 。

後續步驟