瀏覽全部文件

ETF API 參考文件:ETF 與共同基金

ETF 與共同基金的價格、NAV、歷史資料與配息

概覽

ETF 與共同基金的價格、歷史價格、配息、簡介與搜尋。每個請求都需要 Bearer 金鑰,REST 與 MCP 共用同一份餘額。

ETF 的 id 就是其標的 id,例如 ARCX:SPY。共同基金的 id 為 FUND 加冒號再加代號,例如 FUND:VFIAX。若單獨的美股代號(如 SPY)只對應一個美國標的,也可直接使用。在基金路由使用股票 id 會回傳 404 not_found,在股票路由使用基金 id 則會以 301 轉址到這裡。

ETF 有價格。共同基金每天有一次淨值(NAV),放在 nav、previous_nav 與 date 欄位。價格回應中的 type 欄位會告訴你取得的是哪一種。

基礎網址: https://api.narwhalapi.com。 MCP 工具是 funds, with one action ,適用於下列每個路由。

每個帳戶都能取得的內容

費用所有帳戶
ETF 最新價格在線
共同基金 NAV最新 NAV
日 K 線與歷史配息完整歷史資料
一分鐘 K 線(僅限 ETF)已包含
搜尋與公司簡介已包含

查看 定價 說明每次呼叫的費用。除非路由另有說明,請求依其所屬 API 的價格計費。

  • 共同基金 NAV 是收盤後的數值,不會延遲。超過下一個營業日仍未更新時,即視為過時。
  • 共同基金沒有一分鐘 K 線。請求時會回傳 400 invalid_interval。
  • 共同基金的日 K 線就是其 NAV:開、高、低、收是同一個數字,也沒有成交量。
  • 配息的 kind 欄位在資料來源提供之前會省略。

端點

每個路由都是 GET 請求,並需要將你的金鑰放在以下請求標頭中: Authorization: Bearer 標頭。範例僅展示回應的結構,並非即時資料。

單一基金的基本資料

GET /v1/funds/{id}

依我們代號清單所載,回傳基金的代號、名稱、類型(etf 或 mutual_fund)、交易所(僅限 ETF)、國家與幣別。所有帳號皆可使用。未知的欄位會省略。

MCP:工具 funds, action profile。

參數

參數位置必填類型含義
idpath是字串基金 id。ETF 為其標的 id:交易所的四碼代碼、冒號與代號(ARCX:SPY)。共同基金為 FUND、冒號與代號(FUND:VFIAX)。若單獨的美股代號(如 SPY)只對應一個美國標的,也可直接使用;回應會附上標準 id。

回應欄位

欄位類型傳送含義
id字串固定回傳標準基金 id。
symbol字串固定回傳基金代號。
name字串固定回傳名稱,依我們代號清單所載。
typeetf、mutual_fund 擇一固定回傳商品的類型。
mic字串選填交易所的四碼代碼。共同基金(無交易所)會省略。
country字串選填基金所屬國家,三碼。
currency字串固定回傳價格的幣別。
請求
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/funds/ARCX:SPY"
回應範例
{
  "id": "ARCX:SPY",
  "symbol": "SPY",
  "name": "SPDR S&P 500 ETF Trust",
  "type": "etf",
  "mic": "ARCX",
  "country": "USA",
  "currency": "USD"
}

單一基金的最新價格

GET /v1/funds/{id}/price

ETF 的最新成交價,格式同股票價格並加上 type: etf;或共同基金的最新 NAV(type: mutual_fund:nav、previous_nav、change、change_percent 與 NAV 的 date;為收盤後數值,不會延遲,超過下一個營業日即為 stale)。change_percent 以百分比表示。使用股票 id 會回傳 404 not_found。

MCP:工具 funds, action price。

參數

參數位置必填類型含義
idpath是字串基金 id。ETF 為其標的 id:交易所的四碼代碼、冒號與代號(ARCX:SPY)。共同基金為 FUND、冒號與代號(FUND:VFIAX)。若單獨的美股代號(如 SPY)只對應一個美國標的,也可直接使用;回應會附上標準 id。

回應欄位

欄位類型傳送含義
id字串固定回傳標準標的 ID。
symbol字串固定回傳該交易所上的股票代號。
currency字串固定回傳所有價格欄位的幣別。便士會換算為英鎊。
price字串選填最新成交價,以 currency 計。
previous_close字串選填前一個交易時段的收盤價。未知時省略。
change字串選填price 減去 previous_close。previous_close 省略時一併省略。
change_percent字串選填相對於 previous_close 的漲跌幅,以百分比表示(1.5 代表 1.5%)。
volume字串選填今日成交股數。未知時省略,延遲報價一律省略。
market_session下列其一:pre、open、post、closed選填標的所屬交易所在 timestamp 時的狀態:pre、open、post 或 closed。只有美國交易所有 pre 與 post。
timestamp日期時間選填價格有效的時間(UTC,精確到秒)。
stale布林值固定回傳交易所開盤期間價格已超過 15 分鐘,或無法更新時為 true。休市時永遠不算過時。
delayed一律為 true選填不會回傳:所有帳號的價格皆為即時。
typeetf、mutual_fund 擇一固定回傳ETF 為 etf,共同基金為 mutual_fund。
nav字串選填每單位淨值,幣別為 currency。
previous_nav字串選填前一日的 NAV。未知時省略。
date日期選填NAV 所屬的日期(YYYY-MM-DD)。
請求
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/funds/ARCX:SPY/price"
回應範例
{
  "id": "ARCX:SPY",
  "symbol": "SPY",
  "currency": "USD",
  "price": "578.12",
  "previous_close": "576.40",
  "change": "1.72",
  "change_percent": "0.30",
  "volume": "61230500",
  "market_session": "open",
  "timestamp": "2026-10-26T15:42:00Z",
  "stale": false,
  "type": "etf"
}

最多 50 檔基金的最新價格

GET /v1/funds/prices

所列每檔基金的最新價格:ETF 的最新成交價,或共同基金的最新 NAV。每個回傳價格的 id 計為一次呼叫,並一次性扣款:若餘額不足以支付已解析的 id,整個請求會以 402 insufficient_credits 拒絕。未回傳價格的 id 會列在 errors,不收費。change_percent 以百分比表示。

最多可傳送 50 個 id,ETF 與共同基金可混用。批次一次性扣款:若餘額不足以支付可解析的 id,整個請求會回傳 402 insufficient_credits。

MCP:工具 funds, action prices。

參數

參數位置必填類型含義
idsquery是字串以逗號分隔的基金 id,去除重複後最多 50 個。每個 id 的規則與單一價格路由相同。每個回傳價格的 id 計為一次呼叫。

回應欄位

欄位類型傳送含義
prices物件陣列固定回傳每個成功解析的 ID 各有一筆價格,以 ID 為鍵。
prices[].id字串固定回傳標準標的 ID。
prices[].symbol字串固定回傳該交易所上的股票代號。
prices[].currency字串固定回傳所有價格欄位的幣別。便士會換算為英鎊。
prices[].price字串選填最新成交價,以 currency 計。
prices[].previous_close字串選填前一個交易時段的收盤價。未知時省略。
prices[].change字串選填price 減去 previous_close。previous_close 省略時一併省略。
prices[].change_percent字串選填相對於 previous_close 的漲跌幅,以百分比表示(1.5 代表 1.5%)。
prices[].volume字串選填今日成交股數。未知時省略,延遲報價一律省略。
prices[].market_session下列其一:pre、open、post、closed選填標的所屬交易所在 timestamp 時的狀態:pre、open、post 或 closed。只有美國交易所有 pre 與 post。
prices[].timestamp日期時間選填價格有效的時間(UTC,精確到秒)。
prices[].stale布林值固定回傳交易所開盤期間價格已超過 15 分鐘,或無法更新時為 true。休市時永遠不算過時。
prices[].delayed一律為 true選填不會回傳:所有帳號的價格皆為即時。
prices[].typeetf、mutual_fund 擇一固定回傳ETF 為 etf,共同基金為 mutual_fund。
prices[].nav字串選填每單位淨值,幣別為 currency。
prices[].previous_nav字串選填前一日的 NAV。未知時省略。
prices[].date日期選填NAV 所屬的日期(YYYY-MM-DD)。
errors物件陣列固定回傳沒有回傳價格的 ID,不收費。
errors[].id字串固定回傳請求時傳入的 ID。
errors[].code下列其一:not_found、not_covered、upstream_busy固定回傳not_found:沒有這個標的。not_covered:該交易所尚無價格。upstream_busy:目前無法取得價格,請稍後再試。
請求
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/funds/prices?ids=ARCX:SPY,FUND:VFIAX"
回應範例
{
  "prices": [
    {
      "id": "ARCX:SPY",
      "symbol": "SPY",
      "currency": "USD",
      "price": "578.12",
      "previous_close": "576.40",
      "change": "1.72",
      "change_percent": "0.30",
      "volume": "61230500",
      "market_session": "open",
      "timestamp": "2026-10-26T15:42:00Z",
      "stale": false,
      "type": "etf"
    },
    {
      "id": "FUND:VFIAX",
      "symbol": "VFIAX",
      "currency": "USD",
      "type": "mutual_fund",
      "nav": "551.07",
      "previous_nav": "549.80",
      "change": "1.27",
      "change_percent": "0.23",
      "date": "2026-10-23",
      "stale": false
    }
  ],
  "errors": [
    {
      "id": "FUND:NOPE",
      "code": "not_found"
    }
  ]
}

單一基金的價格 K 線

GET /v1/funds/{id}/bars

日(1d)或一分鐘(1m)K 線,由舊到新排列,格式同股票 K 線。共同基金的日 K 線就是其每日 NAV(開、高、低、收皆為 NAV,無成交量);它沒有一分鐘 K 線(400 invalid_interval)。一分鐘 K 線僅限 ETF。歷史資料:全部,所有帳號皆可取得。每頁最多 5,000 根 K 線,並附 next_cursor;游標與價格不再相符時會回傳 409 cursor_expired。每頁計為一次呼叫。

若兩頁之間因股票分割或配息而使歷史資料變動,游標會失效並回傳 409 cursor_expired。

MCP:工具 funds, action bars。

參數

參數位置必填類型含義
idpath是字串基金 id。ETF 為其標的 id:交易所的四碼代碼、冒號與代號(ARCX:SPY)。共同基金為 FUND、冒號與代號(FUND:VFIAX)。若單獨的美股代號(如 SPY)只對應一個美國標的,也可直接使用;回應會附上標準 id。
intervalquery否下列其一:1d、1m1d(每個交易日一根 K 線;共同基金的 K 線為其每日 NAV)或 1m(一分鐘 K 線,僅限 ETF)。其他值會回傳 400 invalid_interval。
startquery否字串第一根 K 線。1d:日期(YYYY-MM-DD),含該日;省略時為最舊的一根。1m:UTC 時間(YYYY-MM-DDTHH:MM:SSZ,或以日期代表 UTC 00:00),含該時間;省略時為 end 的前一天。
endquery否字串最後一根 K 線。1d:日期,含該日;省略時為已有 K 線的最新交易日。1m:UTC 時間,不含該時間;省略時為現在,或 start 之後五天。1m 的 start 與 end 相隔最多 5 天(400 range_too_large)。
cursorquery否字串上一頁的 next_cursor,其他參數須與上一頁相同。游標背後的價格改變(股票分割或股利)時會失效:409 cursor_expired。

回應欄位

欄位類型傳送含義
id字串固定回傳標準標的 ID。
currency字串固定回傳所有價格的幣別。便士會換算為英鎊。
adjusted布林值固定回傳一律為 true:價格已依股票分割與股利調整。相鄰兩頁的資料保持一致;若在兩頁之間因分割或股利而使歷史資料改變,游標會失效(409 cursor_expired),不會混用兩種資料。
start字串選填不會回傳:start 不會被調整。
end字串選填不會回傳:日 K 線不會被截斷。
bars物件陣列固定回傳每頁最多 5,000 根 K 線。
bars[].date字串選填交易日(YYYY-MM-DD)。僅日 K 線有,1 分鐘 K 線省略。
bars[].timestamp日期時間固定回傳K 線期間的起點(UTC):日 K 線為交易所開盤時間,1 分鐘 K 線為該分鐘。
bars[].open字串固定回傳期間的第一個價格。
bars[].high字串固定回傳期間的最高價。
bars[].low字串固定回傳期間的最低價。
bars[].close字串固定回傳期間的最後價格。
bars[].volume字串選填該期間的成交股數。未知時省略。
next_cursor字串固定回傳傳回此值即可讀取下一頁。最後一頁為 null。
請求
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/funds/ARCX:SPY/bars?interval=1d&start=2026-10-01"
回應範例
{
  "id": "ARCX:SPY",
  "currency": "USD",
  "adjusted": true,
  "bars": [
    {
      "date": "2026-10-23",
      "timestamp": "2026-10-23T13:30:00Z",
      "open": "575.10",
      "high": "577.60",
      "low": "573.90",
      "close": "576.40",
      "volume": "48210300"
    }
  ],
  "next_cursor": null
}

單一基金的配息

GET /v1/funds/{id}/distributions

單一基金的配息,依除息日由新到舊分頁排列。所有帳號皆可取得完整歷史。每個請求計為一次呼叫。未知的 id 會回傳 404 not_found。

MCP:工具 funds, action distributions。

參數

參數位置必填類型含義
idpath是字串基金 id。ETF 為其標的 id:交易所的四碼代碼、冒號與代號(ARCX:SPY)。共同基金為 FUND、冒號與代號(FUND:VFIAX)。若單獨的美股代號(如 SPY)只對應一個美國標的,也可直接使用;回應會附上標準 id。
cursorquery否字串上一頁的 next_cursor,其他參數須與上一頁相同。

回應欄位

欄位類型傳送含義
id字串固定回傳標準基金 id。
start日期選填不會回傳:所有帳號皆可取得完整歷史。
distributions物件陣列固定回傳除息日由新到舊。
distributions[].ex_date日期固定回傳基金不含該筆配息交易的第一天。
distributions[].amount字串固定回傳每單位配息,幣別為 currency。
distributions[].currency字串固定回傳amount 的幣別。
distributions[].pay_date日期選填發放日。未知時省略。
distributions[].record_date日期選填股東須登記在冊的日期。未知時省略。
distributions[].kindincome、capital_gain 擇一選填配息的性質。資料來源未說明時省略。
next_cursor字串固定回傳作為 cursor 傳入即可取得下一頁;最後一頁為 null。
請求
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/funds/ARCX:SPY/distributions"
回應範例
{
  "id": "ARCX:SPY",
  "distributions": [
    {
      "ex_date": "2026-09-18",
      "amount": "1.78",
      "currency": "USD",
      "pay_date": "2026-10-30",
      "record_date": "2026-09-18"
    }
  ],
  "next_cursor": null
}

錯誤

錯誤使用共用的問題格式,並包含 request_id。查看 API 錯誤 處理:錯誤碼、額度與重試 了解格式與額度標頭。失敗的請求不計費。

代碼狀態含義
invalid_query400參數缺漏、未知、重複,或超出範圍。
invalid_id400id 或交易對的寫法不符合此 API 的要求。
too_many_ids400批次包含超過 50 個 id。
invalid_interval400間隔不是 1d 或 1m,或此商品不支援該間隔。
range_too_large400區間超過此路由允許的長度。
not_found404沒有此標的、基金或交易對。
invalid_cursor400此游標不是這個請求所回傳的,或來自不同的請求。
cursor_expired409游標所對應的價格已變動。請不帶游標重新開始。
insufficient_credits402您的額度餘額不足以支付此請求的費用。
upstream_busy503目前無法取得價格。在批次中會列在 errors。請稍後再試。
area_unavailable503此區域目前無法回應。

此頁面對你有幫助嗎?