전체 문서 탐색

선물 API 레퍼런스

29개 선물의 가격과 이력

개요

29개 선물의 가격과 가격 이력입니다. 원자재, 주가지수, 국채, 통화가 포함됩니다. 모든 요청에 Bearer 키가 필요하며 REST와 MCP는 하나의 크레딧 잔액을 함께 사용합니다.

id는 거래소의 루트 코드입니다. CL은 WTI 원유, GC는 금, ES는 E-mini S&P 500, 6E는 유로를 뜻합니다. 대소문자는 구분하지 않습니다. 목록 경로는 모든 id를 이름, 카테고리, 거래소, 통화, 단위와 함께 반환합니다.

각 시리즈는 근월물 계약을 이어 붙인 것이며 조정하지 않습니다. 근월물이 바뀌는 날에는 가격이 한 계약에서 다음 계약으로 단계적으로 바뀝니다. 이 차이는 거래된 그대로 데이터에 들어 있습니다.

기본 URL: https://api.narwhalapi.com. MCP 도구: futures, with one action 를 아래 각 라우트에 대응해 둡니다.

모든 계정에 제공되는 것

항목모든 계정
최신 가격라이브
일일 바전체 이력, 2017년 4월부터
1분봉최근 12개월
시리즈 목록포함

확인 요금 페이지에서 호출당 비용을 확인할 수 있습니다. 라우트에 별도 안내가 없으면 요청은 해당 API의 가격으로 청구됩니다.

  • 선물 가격에는 전일 종가, 변동, 거래량이 없습니다. 만기 교체를 가로지르는 변동은 잘못된 값이 되므로 API는 이를 계산하지 않습니다.
  • 가격과 봉은 거래된 그대로의 근월물입니다. 교체일마다 값이 단계적으로 바뀌며, CL은 2026년 10월 19일에 약 4달러 달라졌습니다. 이 차이를 하루 동안의 변동으로 읽지 마십시오.
  • market_session은 계약의 공시된 거래 시간에 따라 open 또는 closed가 됩니다. closed 시리즈는 최종 가격으로 응답하며 stale이 아닙니다. open 시리즈는 가격이 15분을 넘으면 stale입니다.
  • 일봉은 거래일 하루이며 00:00 UTC에 나타납니다. 오늘의 미완성 봉은 표시되지 않습니다.
  • 1분봉은 12개월 동안 보관되며 요청 한 번으로 최대 5일까지 조회할 수 있습니다.
  • 배치에는 최대 50개의 id를 담을 수 있으며 가격이 반환된 id마다 호출 1회로 계산됩니다. 알 수 없는 id는 errors에 나열되고 계산되지 않습니다.

엔드포인트

모든 경로는 GET이며, 키를 다음 헤더에 담아 보내야 합니다: Authorization: Bearer 헤더입니다. 예시는 응답의 형태를 보여 줄 뿐이며 실시간 데이터가 아닙니다.

가격을 제공하는 선물

GET /v1/futures

가격을 제공하는 모든 선물 시리즈를 id별로 이름, 단위와 함께 반환합니다. 자체 목록에서 읽으므로 모든 계정에서 사용할 수 있고 호출 1회로 계산됩니다.

MCP: 도구 futures, action list.

매개변수

이 라우트는 파라미터가 없습니다.

응답 필드

필드유형전송의미
futures객체 목록항상가격을 제공하는 모든 시리즈를 id별로 반환합니다.
futures[].id문자열항상루트 코드입니다. 예: CL.
futures[].name문자열항상시리즈의 이름입니다.
futures[].categoryenergy, metals, grains, livestock, equity_index, interest_rate, currency 중 하나항상
futures[].commodity_key문자열선택원자재의 고정 키이며 현물, 선물, 예측, 실물 가격에서 모두 같습니다. 예: gold, crude-oil. 이 키로 서로 연결할 수 있습니다. 주가지수, 금리, 통화 선물에서는 생략됩니다.
futures[].benchmarkwti, brent, urals, dubai 중 하나선택원유 기준물이며 wti, brent, urals, dubai 중 하나입니다. 원유에만 전달되며, 이 값이 없는 원유 행은 원유 전체를 뜻합니다.
futures[].exchange문자열항상해당 선물을 상장한 거래소입니다.
futures[].exchange_mic문자열선택거래소의 ISO 10383 시장 식별 코드입니다. 예: XNYM.
futures[].currency문자열항상가격의 통화입니다.
futures[].unit문자열항상가격의 기준 단위입니다. 예: usd_per_barrel, index_point.
futures[].unit_key문자열선택단위의 표준 소문자 이름이며 이 값을 쓰는 모든 곳에서 동일합니다. 예: barrel, troy_ounce, mmbtu, tonne. unit은 출처의 표기를 그대로 유지합니다.
futures[].price_scale문자열선택가격이 보조 단위로 표시될 때만 전달됩니다. price에 이 값을 곱하면 currency 단위의 가격이 됩니다. 0.01은 price가 센트 단위라는 뜻이므로, 단위가 cent_per_bushel이고 가격이 450이면 부셸당 4.50 USD입니다.
요청
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/futures"
응답 예시
{
  "futures": [
    {
      "id": "CL",
      "name": "WTI Crude Oil",
      "category": "energy",
      "exchange": "NYMEX",
      "currency": "USD",
      "unit": "usd_per_barrel"
    },
    {
      "id": "GC",
      "name": "Gold",
      "category": "metals",
      "exchange": "COMEX",
      "currency": "USD",
      "unit": "usd_per_troy_ounce"
    }
  ]
}

선물 시리즈 하나의 최신 가격

GET /v1/futures/{id}/price

최신 가격입니다. market_session은 시리즈의 거래 시간에 따라 open 또는 closed가 됩니다. closed 시리즈는 최종 가격으로 응답하며, stale은 open 시리즈에 최근 15분 이내의 가격이 없을 때만 true입니다. 선물 가격에는 전일 종가, 변동, 거래량이 없습니다. 시리즈는 근월물을 이어 붙인 것이며 조정하지 않으므로 교체일마다 가격 차이가 생깁니다.

MCP: 도구 futures, action price.

매개변수

매개변수위치필수유형의미
id경로예문자열선물 id로, 거래소의 루트 코드입니다. 예: CL, GC, ES, 6E. 대소문자는 구분하지 않습니다. 시리즈는 조정하지 않은 연속 근월물이며 교체일마다 가격 차이가 있습니다.

응답 필드

필드유형전송의미
id문자열항상루트 코드입니다.
name문자열항상자체 심볼 목록에 있는 그대로의 이름입니다.
commodity_key문자열선택원자재의 고정 키이며 현물, 선물, 예측, 실물 가격에서 모두 같습니다. 예: gold, crude-oil. 이 키로 서로 연결할 수 있습니다. 주가지수, 금리, 통화 선물에서는 생략됩니다.
benchmarkwti, brent, urals, dubai 중 하나선택원유 기준물이며 wti, brent, urals, dubai 중 하나입니다. 원유에만 전달되며, 이 값이 없는 원유 행은 원유 전체를 뜻합니다.
exchange문자열항상
exchange_mic문자열선택거래소의 ISO 10383 시장 식별 코드입니다. 예: XNYM.
currency문자열항상가격의 통화입니다.
unit문자열항상
unit_key문자열선택단위의 표준 소문자 이름이며 이 값을 쓰는 모든 곳에서 동일합니다. 예: barrel, troy_ounce, mmbtu, tonne. unit은 출처의 표기를 그대로 유지합니다.
price_scale문자열선택가격이 보조 단위로 표시될 때만 전달됩니다. price에 이 값을 곱하면 currency 단위의 가격이 됩니다. 0.01은 price가 센트 단위라는 뜻이므로, 단위가 cent_per_bushel이고 가격이 450이면 부셸당 4.50 USD입니다.
price문자열항상연속 근월물의 최종 가격입니다.
market_sessionopen, closed 중 하나항상시리즈가 공시된 거래 시간에 거래되는 동안은 open, 그 외에는 closed입니다. closed 시리즈도 최종 가격으로 응답하며, 거래 시간 안에 있는 휴일은 open으로 표시되고 stale로 나타납니다.
timestamp날짜·시간항상가격이 유효했던 시각(UTC, 초 단위).
stale불리언항상시리즈가 open이고 가격이 15분을 넘었거나 갱신하지 못했으면 true입니다. closed 시리즈는 stale이 아닙니다.
delayed항상 true선택전송되지 않음: 모든 계정에서 가격은 실시간입니다.
요청
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/futures/CL/price"
응답 예시
{
  "id": "CL",
  "name": "WTI Crude Oil",
  "commodity_key": "crude-oil",
  "benchmark": "wti",
  "exchange": "NYMEX",
  "exchange_mic": "XNYM",
  "currency": "USD",
  "unit": "usd_per_barrel",
  "unit_key": "barrel",
  "price": "102.11",
  "market_session": "open",
  "timestamp": "2026-10-29T18:38:00Z",
  "stale": false
}

최대 50개 선물 시리즈의 최신 가격

GET /v1/futures/prices

나열된 각 id의 최신 가격입니다. 가격이 반환된 id마다 호출 1회로 계산하며 한 번에 차감합니다. 조회에 성공한 id의 비용을 잔액으로 감당할 수 없으면 요청 전체가 402 insufficient_credits로 거부됩니다. 가격이 반환되지 않은 id는 errors에 (id로) 나열되며 비용이 들지 않습니다. 조회에 성공한 id가 하나도 없어도 응답은 200이며 prices가 비어 있습니다. 선물 가격에는 전일 종가, 변동, 거래량이 없습니다. 시리즈는 근월물을 이어 붙인 것이며 조정하지 않으므로 교체일마다 가격 차이가 생깁니다.

최대 50개의 ID를 보낼 수 있습니다. 배치는 한 번에 과금됩니다. 확인된 ID의 비용을 잔액으로 감당할 수 없으면 전체 요청이 402 insufficient_credits를 반환합니다.

MCP: 도구 futures, action prices.

매개변수

매개변수위치필수유형의미
ids쿼리예문자열쉼표로 구분한 id이며 중복을 제거한 뒤 최대 50개입니다. 각 id는 단건 가격 경로와 같은 규칙을 따릅니다. 가격이 반환된 id마다 호출 1회로 계산됩니다.

응답 필드

필드유형전송의미
prices객체 목록항상확인된 ID별 시세 하나씩.
prices[].id문자열항상루트 코드입니다.
prices[].name문자열항상자체 심볼 목록에 있는 그대로의 이름입니다.
prices[].commodity_key문자열선택원자재의 고정 키이며 현물, 선물, 예측, 실물 가격에서 모두 같습니다. 예: gold, crude-oil. 이 키로 서로 연결할 수 있습니다. 주가지수, 금리, 통화 선물에서는 생략됩니다.
prices[].benchmarkwti, brent, urals, dubai 중 하나선택원유 기준물이며 wti, brent, urals, dubai 중 하나입니다. 원유에만 전달되며, 이 값이 없는 원유 행은 원유 전체를 뜻합니다.
prices[].exchange문자열항상
prices[].exchange_mic문자열선택거래소의 ISO 10383 시장 식별 코드입니다. 예: XNYM.
prices[].currency문자열항상가격의 통화입니다.
prices[].unit문자열항상
prices[].unit_key문자열선택단위의 표준 소문자 이름이며 이 값을 쓰는 모든 곳에서 동일합니다. 예: barrel, troy_ounce, mmbtu, tonne. unit은 출처의 표기를 그대로 유지합니다.
prices[].price_scale문자열선택가격이 보조 단위로 표시될 때만 전달됩니다. price에 이 값을 곱하면 currency 단위의 가격이 됩니다. 0.01은 price가 센트 단위라는 뜻이므로, 단위가 cent_per_bushel이고 가격이 450이면 부셸당 4.50 USD입니다.
prices[].price문자열항상연속 근월물의 최종 가격입니다.
prices[].market_sessionopen, closed 중 하나항상시리즈가 공시된 거래 시간에 거래되는 동안은 open, 그 외에는 closed입니다. closed 시리즈도 최종 가격으로 응답하며, 거래 시간 안에 있는 휴일은 open으로 표시되고 stale로 나타납니다.
prices[].timestamp날짜·시간항상가격이 유효했던 시각(UTC, 초 단위).
prices[].stale불리언항상시리즈가 open이고 가격이 15분을 넘었거나 갱신하지 못했으면 true입니다. closed 시리즈는 stale이 아닙니다.
prices[].delayed항상 true선택전송되지 않음: 모든 계정에서 가격은 실시간입니다.
errors객체 목록항상시세를 반환하지 않은 ID. 과금되지 않습니다.
errors[].id문자열항상요청한 그대로의 ID.
errors[].code항상 "not_found"항상not_found: 해당하는 시리즈가 없습니다.
요청
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/futures/prices?ids=CL,GC,ES"
응답 예시
{
  "prices": [
    {
      "id": "CL",
      "name": "WTI Crude Oil",
      "commodity_key": "crude-oil",
      "benchmark": "wti",
      "exchange": "NYMEX",
      "exchange_mic": "XNYM",
      "currency": "USD",
      "unit": "usd_per_barrel",
      "unit_key": "barrel",
      "price": "102.11",
      "market_session": "open",
      "timestamp": "2026-10-29T18:38:00Z",
      "stale": false
    },
    {
      "id": "GC",
      "name": "Gold",
      "exchange": "COMEX",
      "currency": "USD",
      "unit": "usd_per_troy_ounce",
      "price": "4021.3",
      "market_session": "open",
      "timestamp": "2026-10-29T18:38:00Z",
      "stale": false
    }
  ],
  "errors": [
    {
      "id": "XX",
      "code": "not_found"
    }
  ]
}

선물 시리즈 하나의 가격 봉

GET /v1/futures/{id}/bars

일봉(1d, 거래일당 봉 1개) 또는 1분봉(1m)을 오래된 순으로 반환합니다. 하루치 봉은 그날 이후 00:00 UTC에 나오며 오늘의 미완성 봉은 표시되지 않습니다. 1분봉은 12개월 동안 보관됩니다. 이력은 모든 계정에 전체 기간이 제공됩니다. 한 페이지에 최대 5,000개의 봉이 담기며 next_cursor가 함께 반환됩니다. 페이지당 호출 1회입니다.

봉은 조정하지 않은 근월물 가격이므로 교체일에는 봉의 시가가 직전 봉의 종가와 다를 수 있습니다.

MCP: 도구 futures, action bars.

매개변수

매개변수위치필수유형의미
id경로예문자열선물 id로, 거래소의 루트 코드입니다. 예: CL, GC, ES, 6E. 대소문자는 구분하지 않습니다. 시리즈는 조정하지 않은 연속 근월물이며 교체일마다 가격 차이가 있습니다.
interval쿼리아니요다음 중 하나: 1d, 1m1d(거래일당 봉 1개이며 해당 거래일 날짜로 표시) 또는 1m(1분봉이며 12개월 동안 보관). 그 외의 값은 400 invalid_interval입니다.
start쿼리아니요문자열첫 봉. 1d: 날짜(YYYY-MM-DD), 해당 일 포함, 생략하면 가장 오래된 봉. 1m: UTC 시각(YYYY-MM-DDTHH:MM:SSZ, 또는 00:00 UTC를 뜻하는 날짜), 포함, 생략하면 end의 하루 전.
end쿼리아니요문자열마지막 봉입니다. 1d는 날짜이며 해당 날짜를 포함하고, 생략하면 마감된 가장 최근 날을 뜻합니다. 1m은 UTC 시각이며 해당 시각을 포함하지 않고, 생략하면 현재 시각 또는 start로부터 5일 뒤를 뜻합니다. 1m은 start와 end의 간격이 최대 5일입니다(400 range_too_large).
cursor쿼리아니요문자열이전 페이지의 next_cursor이며 파라미터는 동일하게 보내야 합니다.

응답 필드

필드유형전송의미
id문자열항상
commodity_key문자열선택원자재의 고정 키이며 현물, 선물, 예측, 실물 가격에서 모두 같습니다. 예: gold, crude-oil. 이 키로 서로 연결할 수 있습니다. 주가지수, 금리, 통화 선물에서는 생략됩니다.
benchmarkwti, brent, urals, dubai 중 하나선택원유 기준물이며 wti, brent, urals, dubai 중 하나입니다. 원유에만 전달되며, 이 값이 없는 원유 행은 원유 전체를 뜻합니다.
currency문자열항상가격의 통화입니다.
price_scale문자열선택가격이 보조 단위로 표시될 때만 전달됩니다. price에 이 값을 곱하면 currency 단위의 가격이 됩니다. 0.01은 price가 센트 단위라는 뜻이므로, 단위가 cent_per_bushel이고 가격이 450이면 부셸당 4.50 USD입니다.
start문자열선택전송되지 않음: start는 이동되지 않습니다.
end문자열선택전송되지 않음: 일봉은 잘리지 않습니다.
bars객체 목록항상한 페이지에 최대 5,000개의 봉.
bars[].timestamp날짜·시간항상봉 기간의 시작 시각(UTC)입니다. 일봉은 해당 거래일의 00:00, 1분봉은 해당 분입니다.
bars[].open문자열항상해당 기간의 첫 가격입니다.
bars[].high문자열항상해당 기간의 최고가입니다.
bars[].low문자열항상해당 기간의 최저가입니다.
bars[].close문자열항상해당 기간의 마지막 가격입니다.
next_cursor문자열항상다음 페이지를 읽으려면 이 값을 다시 전달합니다. 마지막 페이지에서는 null입니다.
요청
curl -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/futures/ES/bars?interval=1d&start=2017-04-03&end=2017-04-05"
응답 예시
{
  "id": "ES",
  "currency": "USD",
  "bars": [
    {
      "timestamp": "2017-04-03T00:00:00Z",
      "open": "2357.5",
      "high": "2363.25",
      "low": "2340",
      "close": "2354.5"
    }
  ],
  "next_cursor": null
}

오류

오류는 공통 문제 형식을 사용하며, 다음 필드를 포함합니다: request_id. 확인 API 오류 코드와 크레딧 형식과 크레딧 헤더에 대한 설명이 있습니다. 실패한 요청에는 요금이 부과되지 않습니다.

코드상태의미
invalid_query400매개변수가 없거나, 알 수 없거나, 중복되었거나, 범위를 벗어났습니다.
invalid_id400id 또는 페어가 이 API에서 요구하는 형식과 다릅니다.
too_many_ids400배치에 50개를 넘는 id가 들어 있습니다.
invalid_interval400interval이 1d 또는 1m이 아니거나, 이 상품에서는 사용할 수 없습니다.
range_too_large400기간이 이 경로에서 허용하는 길이를 넘었습니다.
not_found404해당하는 종목, 펀드 또는 페어가 없습니다.
invalid_cursor400이 요청이 반환한 커서가 아니거나, 다른 요청의 커서입니다.
insufficient_credits402크레딧 잔액이 요청 비용보다 적습니다.
area_unavailable503이 영역은 지금 응답할 수 없습니다.

이 페이지가 도움이 되었나요?