2026 年 9 月 30 日,1 美元可兌換 17,891.1 印尼盾。向 observations 端點傳入基礎貨幣、報價貨幣和日期,然後從當天那一列讀取匯率。
用 API 取得指定日期的匯率
- 選擇貨幣和日期 將基礎貨幣放在 observations 路徑中,將報價貨幣放在
currencies中;USD 兌 IDR 時,路徑用USD,參數用IDR。把start_date和end_date都設為2026-09-30,即可請求 2026 年 9 月 30 日的觀測值,範圍兩端使用同一個日期。 - 設定你的 API 金鑰 取得免費金鑰,並存放在環境變數
NARWHAL_API_KEY中。腳本會讀取該變數作為Authorization: Bearer YOUR_KEY標頭,所以送出請求之前,請先把金鑰放進環境。 - 請求觀測值 使用此處所示的日期參數和授權標頭呼叫 observations 端點。腳本讀取回應中的
observations陣列,並把回傳的每一天的日期與rates陣列一起印出來,報價貨幣及其匯率就在rates陣列中成對出現。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"]) - 讀取回傳的日期和匯率 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 |
發布於 。