SNAPDocumentation

SNAP / API

API Reference

Read the request and response contracts without signing in. Run requests in the signed-in SNAP workspace.

Specification14 endpoints
TransportHTTP / JSON
ExecutionAuthenticated
Source and version

Contract source: backend commit 7692846. Deployment versions and available features may differ. Downloaded JSON retains its source language; MCP descriptions follow your selected language.

Time zones and date field migration

timeZone applies only to timestamp-bearing Spot, Forward, Term Structure, Swap Point, Zero Rate and Discount Factor APIs and their MCP tools. Use a GET query or the calculate-forward JSON body. Omission or JSON null means UTC. Use an IANA ID such as Asia/Seoul. Empty values, whitespace, KST, numeric offsets and unknown IDs return HTTP 400/code 4000.

2026-01-01T00:00:00.000Z and 2026-01-01T09:00:00.000+09:00 represent the same instant. DST follows the zone at that instant. referenceAt is source reference time and is not refreshed by fetching again. The REST Spot lastAt uses the same millisecond format, but the trade clock has second resolution so the fraction is always .000, and its inferred trade date can be inaccurate after market closures. YYYY-MM-DD dates and prices stay unchanged; referenceDate keeps the source UTC date.

Every success and error response uses UTC millisecond timestamps for meta.requestAt and meta.responseAt, independent of the requested timeZone. meta.requestId is a server-generated UUID. meta.clientRequestId is the incoming X-Request-ID value or null. retrievedAt is not part of the public contract.

JSON
{
  "timeZone": "Asia/Seoul",
  "referenceAt": "2026-01-01T09:00:00.000+09:00",
  "maturityDate": "2026-09-24"
}

Use the names on the right. REST quote responses no longer carry lastTradedAtKst, lastTradedAt, points[].maturity, nearMaturity or farMaturity; only the curve date remains as a deprecated alias. MCP tool results still carry the old names. Curve requests take either maturityDate or tenor; sending both date and maturityDate is an error.

JSON
{
  "asOf": "referenceAt",
  "lastTradedAtKst": "lastAt",
  "lastTradedAt": "lastAt",
  "points[].maturity": "points[].maturityDate",
  "nearMaturity": "nearMaturityDate",
  "farMaturity": "farMaturityDate",
  "curve date": "maturityDate"
}

https://snap-api.kustodyfi.com

GET /fx/spot is public; other product API calls require authentication. The gateway enforces authentication, so the generated OpenAPI has no securitySchemes. Example values illustrate the contract and are not current quotes.

Response, error and date conventions

현물·포워드·커브와 통화쌍·결제일·영업일 정보를 제공한다. 지원 범위와 필드 정의는 각 endpoint의 설명을 따른다.

## 응답과 오류

제품 API의 응답은 {code, message, data} 형식이다. 요청은 유효하지만 필요한 시세가 없으면 code: 0이며 해당 값은 null이다. null 필드는 생략하지 않는다. health와 availability는 별도의 상태 응답 형식을 사용한다.

| 상황 | 코드 | | -- | -- | | 지원하지 않는 통화쌍·만기, 잘못된 날짜, 필수 입력 누락 | 4000 | | 만기일이 결제일보다 빠르거나 같음 | 4220 | | 저장소 조회 실패 또는 필요한 계산 기준정보 없음 | 5000 |

저장소 장애는 시세 데이터가 없는 정상 상태와 구분한다. MCP는 사용할 수 있는 시세가 없으면 data_unavailable 오류를 반환한다.

## 시각과 날짜

날짜는 YYYY-MM-DD다. 제품 API 응답의 시각(referenceAt, lastAt)은 밀리초까지인 YYYY-MM-DDTHH:mm:ss.SSSZ이고, timeZone을 주면 YYYY-MM-DDTHH:mm:ss.SSS+hh:mm처럼 그 지역의 오프셋으로 끝난다. 날짜 값은 timeZone과 무관하다. 응답 meta의 requestAt·responseAt은 요청 처리시각이며 항상 UTC 밀리초다. availability의 as_of는 가용성 판정시각이며 이 형식을 따르지 않는다. UTC ISO-8601이고 초 미만 자릿수는 0이 아닐 때만 붙는다(예: 2026-08-12T09:20:00Z).

결제일·영업일 계산은 해당 통화쌍의 지원 관례와 발행된 휴일 기준정보를 사용한다. 필요한 기준정보가 없으면 영업일을 추정하지 않고 오류를 반환한다. 현물 조회 지원이 포워드·커브·결제일 계산 지원을 의미하지는 않는다.

## 접근

외부 접근의 인증·인가와 요청 제한은 게이트웨이 정책을 따른다.

POST/v1/fx/settlement-days

Settlement Dates

Calculates the settlement dates for a trade date and tenor. For standard tenors, spotDate is the spot settlement date from the currency pair's spot lag, and maturityDate adds the tenor to it and adjusts to a business day. Month and year tenors follow the end-of-month convention: when spotDate is the last business day of its month, maturityDate is the last business day of the target month. For ON, TN and SN, spotDate is the near leg and maturityDate is the far leg, and the trade date must be a business day. Business days follow the settlement calendars of the currency pair. Dates outside the published calendar coverage return error code 4220 without estimating dates. Holiday data for later years can come from rule-generated calendars, and calculation conventions are provisional, so results may change when official holiday schedules are published.

Request

application/json

pairstring

Default: USDKRW

tradeDatestring / dateRequired

Format: YYYY-MM-DD.

tenorstringRequired

ON | TN | SN | 1D | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y

Responses and errors

200 정상 산출.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tradeDatestring / dateRequired

Format: YYYY-MM-DD.

spotDatestring / dateRequired

Format: YYYY-MM-DD.

maturityDatestring / dateRequired

Format: YYYY-MM-DD.

daysToMaturityinteger / int32Required
businessDaysinteger / int32Required
tenorstringRequired

ON | TN | SN | 1D | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y

spotDaysinteger / int32Required
isBusinessTradeDatebooleanRequired

Whether tradeDate is a business day in the pair's settlement calendars. Standard tenors still return dates for a holiday trade date; ON, TN and SN reject it.

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "spot-1m": {
    "summary": "2026-06-26 거래, 1M: spot이 월말 영업일이라 만기도 월말 영업일",
    "description": "spot-1m",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "tradeDate": "2026-06-26",
        "spotDate": "2026-06-30",
        "maturityDate": "2026-07-31",
        "daysToMaturity": 31,
        "businessDays": 22,
        "tenor": "1M",
        "spotDays": 2,
        "isBusinessTradeDate": true
      }
    }
  },
  "overnight": {
    "summary": "2026-06-26(금) 거래, ON: near는 거래일, far는 다음 영업일",
    "description": "overnight",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "tradeDate": "2026-06-26",
        "spotDate": "2026-06-26",
        "maturityDate": "2026-06-29",
        "daysToMaturity": 3,
        "businessDays": 1,
        "tenor": "ON",
        "spotDays": 0,
        "isBusinessTradeDate": true
      }
    }
  }
}
400 미지원 통화쌍·만기, 날짜 형식 오류, 비영업일 거래일의 ON·TN·SN (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tradeDatestring / dateRequired

Format: YYYY-MM-DD.

spotDatestring / dateRequired

Format: YYYY-MM-DD.

maturityDatestring / dateRequired

Format: YYYY-MM-DD.

daysToMaturityinteger / int32Required
businessDaysinteger / int32Required
tenorstringRequired

ON | TN | SN | 1D | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y

spotDaysinteger / int32Required
isBusinessTradeDatebooleanRequired

Whether tradeDate is a business day in the pair's settlement calendars. Standard tenors still return dates for a holiday trade date; ON, TN and SN reject it.

null

JSON
{
  "type": "null"
}
422 캘린더가 덮지 않는 날짜 (4220)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tradeDatestring / dateRequired

Format: YYYY-MM-DD.

spotDatestring / dateRequired

Format: YYYY-MM-DD.

maturityDatestring / dateRequired

Format: YYYY-MM-DD.

daysToMaturityinteger / int32Required
businessDaysinteger / int32Required
tenorstringRequired

ON | TN | SN | 1D | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y

spotDaysinteger / int32Required
isBusinessTradeDatebooleanRequired

Whether tradeDate is a business day in the pair's settlement calendars. Standard tenors still return dates for a holiday trade date; ON, TN and SN reject it.

null

JSON
{
  "type": "null"
}

POST/v1/fx/calculate-forward

Forward Exchange Rate

Returns the two-way forward exchange rate for a currency pair at one forward value date. Give the date either as maturityDate or as a standard tenor of the pair; send exactly one. Supported tenors differ by pair; read them from GET /v1/fx/tenors. The forward starts from the current spot settlement date, returned as spotDate with the resolved maturityDate and the calendar-day count days. bid and ask are in quote currency per USD 1. They are both null when a two-way forward is unavailable, for example outside the quoted curve; no midpoint replaces them and nothing is extrapolated. referenceAt is the observation time in timeZone (UTC when omitted or null); calendar dates are unchanged.

Request

application/json

pairstring

Default: USDKRW

maturityDatestring | null / date

Forward value date. Provide exactly one of maturityDate and tenor. Format: YYYY-MM-DD.

tenorstring | null

Standard FX forward tenor of the pair, as listed by GET /v1/fx/tenors. Provide exactly one of maturityDate and tenor.

1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y

timeZonestring | null

IANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged.

Default: UTC

Responses and errors

200 정상 산출. 두 방향 값을 낼 수 없으면 bid·ask가 함께 null이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tenorstring | null

Requested tenor, echoed; null when the request used maturityDate.

1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y

maturityDatestring | null / date

Forward value date. For a tenor request, the date the tenor resolves to; null when no observation is available to resolve it. Format: YYYY-MM-DD.

spotDatestring | null / date

Spot settlement date the forward is measured from; null without an observation. Format: YYYY-MM-DD.

daysinteger | null / int32

Calendar days from spotDate to maturityDate; null when either date is null.

bidnumber | null

Forward bid in quote currency per USD 1, rounded down to 2 decimal places; null with ask when a two-way forward is unavailable.

asknumber | null

Forward ask in quote currency per USD 1, rounded up to 2 decimal places; null with bid when a two-way forward is unavailable.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "tenor": {
    "summary": "tenor로 조회",
    "description": "tenor",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "tenor": "1M",
        "maturityDate": "2026-09-24",
        "spotDate": "2026-08-24",
        "days": 31,
        "bid": 1390.34,
        "ask": 1390.76,
        "referenceAt": "2026-08-25T06:00:00.000Z"
      }
    }
  },
  "beyond-curve": {
    "summary": "커브보다 먼 만기: 외삽하지 않는다",
    "description": "beyond-curve",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "tenor": null,
        "maturityDate": "2028-01-01",
        "spotDate": "2026-08-24",
        "days": 495,
        "bid": null,
        "ask": null,
        "referenceAt": "2026-08-25T06:00:00.000Z"
      }
    }
  }
}
400 미지원 통화쌍, 날짜 형식 오류, maturityDate와 tenor를 둘 다 주거나 둘 다 생략, 그 통화쌍에 없는 tenor (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tenorstring | null

Requested tenor, echoed; null when the request used maturityDate.

1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y

maturityDatestring | null / date

Forward value date. For a tenor request, the date the tenor resolves to; null when no observation is available to resolve it. Format: YYYY-MM-DD.

spotDatestring | null / date

Spot settlement date the forward is measured from; null without an observation. Format: YYYY-MM-DD.

daysinteger | null / int32

Calendar days from spotDate to maturityDate; null when either date is null.

bidnumber | null

Forward bid in quote currency per USD 1, rounded down to 2 decimal places; null with ask when a two-way forward is unavailable.

asknumber | null

Forward ask in quote currency per USD 1, rounded up to 2 decimal places; null with bid when a two-way forward is unavailable.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}
422 maturityDate가 spotDate 이하 (4220)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tenorstring | null

Requested tenor, echoed; null when the request used maturityDate.

1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y

maturityDatestring | null / date

Forward value date. For a tenor request, the date the tenor resolves to; null when no observation is available to resolve it. Format: YYYY-MM-DD.

spotDatestring | null / date

Spot settlement date the forward is measured from; null without an observation. Format: YYYY-MM-DD.

daysinteger | null / int32

Calendar days from spotDate to maturityDate; null when either date is null.

bidnumber | null

Forward bid in quote currency per USD 1, rounded down to 2 decimal places; null with ask when a two-way forward is unavailable.

asknumber | null

Forward ask in quote currency per USD 1, rounded up to 2 decimal places; null with bid when a two-way forward is unavailable.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}

POST/v1/fx/calculate-dates

Settlement and Maturity Dates (previous path)

Previous path, kept because the MCP tools under review still call it. Use POST /v1/fx/settlement-days in new code.

Calculates spotDate from tradeDate and the currency pair's spot lag, then adds the tenor and adjusts to obtain maturityDate. Business days require both New York and Seoul to be open. isTradeDateBusinessDay, isSpotDateEom and eomRuleApplied explain the result; end of month means the last business day, not necessarily the last calendar day. spotDays overrides the default lag. Disabling eomRule skips the end-of-month rule. For OVERNIGHT, TOM_NEXT and SPOT_NEXT anchors, business-day offsets replace the tenor. Calendar coverage is currently limited to 2026; unavailable coverage returns error code 5000 without estimating dates. Calculation conventions and holiday data are provisional and results may change.

Request

application/json

pairstring

Default: USDKRW

tradeDatestring / dateRequired

Format: YYYY-MM-DD.

tenorstringRequired

1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12M

spotDaysinteger | null / int32
eomRuleboolean

Applies to month and year tenors only. Day and week tenors roll Following and are unaffected by this flag; eomRuleApplied reports what was used.

Default: true

anchorstring

SPOT | OVERNIGHT | TOM_NEXT | SPOT_NEXT

Default: SPOT

Responses and errors

200 정상 산출. 12필드가 모두 채워진다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tradeDatestring / dateRequired

Format: YYYY-MM-DD.

spotDatestring | null / date

Format: YYYY-MM-DD.

maturityDatestring | null / date

Format: YYYY-MM-DD.

daysToMaturityinteger | null / int32
businessDaysinteger | null / int32
calendarsstring[]Required
tenorstringRequired

1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12M

spotDaysinteger / int32Required
isTradeDateBusinessDayboolean | null
isSpotDateEomboolean | null
eomRuleAppliedbooleanRequired

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "spot-1m": {
    "summary": "2026-06-26 거래, 1M: 월말 규칙이 적용된 경우",
    "description": "spot-1m",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "tradeDate": "2026-06-26",
        "spotDate": "2026-06-30",
        "maturityDate": "2026-07-31",
        "daysToMaturity": 31,
        "businessDays": 22,
        "calendars": [
          "usd_ny",
          "krw_bank"
        ],
        "tenor": "1M",
        "spotDays": 2,
        "isTradeDateBusinessDay": true,
        "isSpotDateEom": true,
        "eomRuleApplied": true
      }
    }
  }
}
400 미지원 통화쌍·만기, 날짜 형식 오류, spotDays 범위 밖 (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tradeDatestring / dateRequired

Format: YYYY-MM-DD.

spotDatestring | null / date

Format: YYYY-MM-DD.

maturityDatestring | null / date

Format: YYYY-MM-DD.

daysToMaturityinteger | null / int32
businessDaysinteger | null / int32
calendarsstring[]Required
tenorstringRequired

1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12M

spotDaysinteger / int32Required
isTradeDateBusinessDayboolean | null
isSpotDateEomboolean | null
eomRuleAppliedbooleanRequired

null

JSON
{
  "type": "null"
}
500 적용 가능한 PUBLISHED holiday revision이 없다 (5000). 요청이 잘못된 것이 아니라 운영 데이터가 그 날짜를 덮지 않는다는 뜻이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
tradeDatestring / dateRequired

Format: YYYY-MM-DD.

spotDatestring | null / date

Format: YYYY-MM-DD.

maturityDatestring | null / date

Format: YYYY-MM-DD.

daysToMaturityinteger | null / int32
businessDaysinteger | null / int32
calendarsstring[]Required
tenorstringRequired

1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12M

spotDaysinteger / int32Required
isTradeDateBusinessDayboolean | null
isSpotDateEomboolean | null
eomRuleAppliedbooleanRequired

null

JSON
{
  "type": "null"
}

GET/v1/fx/zero-rate

Zero Rate

Returns a zero rate for USD or KRW, for exactly one of maturityDate or tenor. The deprecated date alias is accepted only without maturityDate. A tenor resolves to a maturity date by that currency's convention; the response returns it as maturityDate. Other currencies are unsupported and answer 4000, which is different from a supported currency with no value. The rate is derived from the discount factor using simple interest: DF = 1 / (1 + r * yf). curveBaseDate is the curve's base date and may differ from the FX settlement date. On the curve base date, zeroRate is null because the period is zero. Missing data or dates outside the curve produce null values; there is no extrapolation. referenceAt is the observation time of the curve inputs in timeZone (default UTC); calendar dates are unchanged.

Request

currencyquery / stringRequired

통화. USD와 KRW

JSON
{
  "type": "string",
  "example": "USD"
}
datequery / string / dateDeprecated

Deprecated alias for maturityDate. Do not supply both date names. Format: `YYYY-MM-DD`.

JSON
{
  "type": "string",
  "format": "date",
  "example": "2027-02-26"
}
tenorquery / string

만기. `maturityDate`와 택일

JSON
{
  "type": "string",
  "enum": [
    "1D",
    "SN",
    "1W",
    "2W",
    "3W",
    "1M",
    "2M",
    "3M",
    "4M",
    "5M",
    "6M",
    "7M",
    "8M",
    "9M",
    "10M",
    "11M",
    "1Y",
    "12M"
  ],
  "example": "6M"
}
timeZonequery / string | null

IANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged. Timestamps then end in that zone's offset, for example `+09:00`, instead of `Z`.

JSON
{
  "type": [
    "string",
    "null"
  ],
  "default": "UTC"
}
maturityDatequery / string / date

Maturity calendar date. Use either maturityDate or tenor, not both. Format: `YYYY-MM-DD`.

JSON
{
  "type": "string",
  "format": "date",
  "example": "2027-02-26"
}

Responses and errors

200 조회 성공. 스냅샷이 없거나 커브 범위 밖이면 zeroRate가 null이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

currencystringRequired

JPY | KRW | USD

tenorstring | null

1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12M

datestring | null / dateDeprecated

Use maturityDate. Format: YYYY-MM-DD.

curveBaseDatestring | null / date

Format: YYYY-MM-DD.

daycountstring | null

ACT/360 | ACT/365

yearFractionnumber | null / double
zeroRatenumber | null / double
referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

maturityDatestring | null / date

Resolved maturity calendar date; unaffected by timeZone. Format: YYYY-MM-DD.

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "tenor": {
    "summary": "tenor로 물으면 만기일을 서버가 산출해 돌려준다",
    "description": "tenor",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "currency": "USD",
        "tenor": "6M",
        "maturityDate": "2027-02-26",
        "date": "2027-02-26",
        "curveBaseDate": "2026-08-26",
        "daycount": "ACT/360",
        "yearFraction": 0.5083,
        "zeroRate": 0.0405,
        "referenceAt": "2026-08-24T06:00:00.000Z"
      }
    }
  },
  "outside-curve": {
    "summary": "커브 마지막 만기보다 먼 날짜. 외삽하지 않는다",
    "description": "outside-curve",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "currency": "USD",
        "tenor": null,
        "maturityDate": "2031-01-02",
        "date": "2031-01-02",
        "curveBaseDate": "2026-08-26",
        "daycount": "ACT/360",
        "yearFraction": 4.3778,
        "zeroRate": null,
        "referenceAt": "2026-08-24T06:00:00.000Z"
      }
    }
  }
}
400 미지원 통화, 또는 date·tenor를 둘 다 주거나 둘 다 안 줌 (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

currencystringRequired

JPY | KRW | USD

tenorstring | null

1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12M

datestring | null / dateDeprecated

Use maturityDate. Format: YYYY-MM-DD.

curveBaseDatestring | null / date

Format: YYYY-MM-DD.

daycountstring | null

ACT/360 | ACT/365

yearFractionnumber | null / double
zeroRatenumber | null / double
referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

maturityDatestring | null / date

Resolved maturity calendar date; unaffected by timeZone. Format: YYYY-MM-DD.

null

JSON
{
  "type": "null"
}

GET/v1/fx/term-structure

Swap Point Term Structure

Returns swap points by tenor for the currency pair, measured from the current spot settlement date returned as spotDate. Each point repeats that spotDate. Tenors without a quote are omitted. bid and ask are in quote currency per USD 1 with the sign of the market quote; negative and zero values are valid. They are null when a two-way quote is unavailable; no midpoint replaces them. Before the market quotes ON and TN for the day, those two rows are estimated from the swap curve and marked interpolated: true; when they cannot be estimated, their values are null. No tenor is extrapolated. For ON and TN, days counts settlement business days from spotDate back to the near-leg date, usually -2 and -1; for other tenors it is the calendar days from spotDate to maturityDate. With no available quotes, points is empty and referenceAt is null. referenceDate is the UTC date of the source observation, independent of timeZone. Timestamps use timeZone (default UTC); calendar dates are unchanged.

Request

pairquery / string

통화쌍

JSON
{
  "type": "string",
  "default": "USDKRW",
  "example": "USDKRW"
}
timeZonequery / string | null

IANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged. Timestamps then end in that zone's offset, for example `+09:00`, instead of `Z`.

JSON
{
  "type": [
    "string",
    "null"
  ],
  "default": "UTC"
}

Responses and errors

200 조회 성공. 호가가 없으면 points가 비고 referenceAt이 null이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
spotDatestring | null / date

Spot settlement date the points are measured from (business-day T+2 convention from the observation date); null without an observation. Format: YYYY-MM-DD.

referenceDatestring | null / date

Format: YYYY-MM-DD.

pointsobject[]Required
Nested fields
tenorstringRequired
spotDatestring | null / date

Spot settlement date the point is measured from; the same value as the response's spotDate. Null without an observation. Format: YYYY-MM-DD.

maturityDatestring | null / date

Maturity (far-leg value) date; unaffected by timeZone. Format: YYYY-MM-DD.

daysinteger | null / int32

For ON and TN, settlement business days from spotDate back to the near-leg date, usually -2 and -1, but fewer when a holiday falls in between. For other tenors, calendar days from spotDate to maturityDate.

bidnumber | null

Bid in quote currency per USD 1; null when not provided.

asknumber | null

Ask in quote currency per USD 1; null when not provided.

interpolatedbooleanRequired

True when the value is estimated from the curve because the market has not quoted this tenor yet. Only ON and TN can be estimated; nothing is extrapolated.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "intraday": {
    "summary": "장중: ON·TN은 커브로 추정한 값",
    "description": "intraday",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "spotDate": "2026-08-24",
        "referenceDate": "2026-08-20",
        "points": [
          {
            "tenor": "ON",
            "spotDate": "2026-08-24",
            "maturityDate": "2026-08-21",
            "days": -2,
            "bid": -0.04,
            "ask": -0.02,
            "interpolated": true
          },
          {
            "tenor": "TN",
            "spotDate": "2026-08-24",
            "maturityDate": "2026-08-24",
            "days": -1,
            "bid": -0.05,
            "ask": -0.03,
            "interpolated": true
          },
          {
            "tenor": "1W",
            "spotDate": "2026-08-24",
            "maturityDate": "2026-08-31",
            "days": 7,
            "bid": -0.22,
            "ask": -0.2,
            "interpolated": false
          }
        ],
        "referenceAt": "2026-08-20T06:00:00.000Z"
      }
    }
  }
}
400 미지원 통화쌍 (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
spotDatestring | null / date

Spot settlement date the points are measured from (business-day T+2 convention from the observation date); null without an observation. Format: YYYY-MM-DD.

referenceDatestring | null / date

Format: YYYY-MM-DD.

pointsobject[]Required
Nested fields
tenorstringRequired
spotDatestring | null / date

Spot settlement date the point is measured from; the same value as the response's spotDate. Null without an observation. Format: YYYY-MM-DD.

maturityDatestring | null / date

Maturity (far-leg value) date; unaffected by timeZone. Format: YYYY-MM-DD.

daysinteger | null / int32

For ON and TN, settlement business days from spotDate back to the near-leg date, usually -2 and -1, but fewer when a holiday falls in between. For other tenors, calendar days from spotDate to maturityDate.

bidnumber | null

Bid in quote currency per USD 1; null when not provided.

asknumber | null

Ask in quote currency per USD 1; null when not provided.

interpolatedbooleanRequired

True when the value is estimated from the curve because the market has not quoted this tenor yet. Only ON and TN can be estimated; nothing is extrapolated.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}

GET/v1/fx/tenors

Supported Tenors

Lists the standard FX forward tenors supported for the requested currency pair in fxForward. pair is required and supports the published pairs USDKRW and USDJPY. Unsupported pairs return 4000. Overnight, tomorrow-next and spot-next are settlement anchors, so ON, TN and SN are not included here.

Request

pairquery / stringRequired

통화쌍

JSON
{
  "type": "string",
  "example": "USDKRW"
}

Responses and errors

200 요청한 지원 통화쌍의 표준 FX forward 만기 목록.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

fxForwardstring[]Required

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "supported": {
    "description": "supported",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "fxForward": [
          "1W",
          "1M",
          "2M",
          "3M",
          "6M",
          "9M",
          "1Y"
        ]
      }
    }
  }
}
400 필수 pair 누락 또는 미지원 통화쌍 (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

fxForwardstring[]Required

null

JSON
{
  "type": "null"
}

GET/v1/fx/swap-point

Forward Swap Points

Returns two-way swap points for a swap from nearDate to farDate in quote currency per USD 1. farDate must follow nearDate. Both legs are measured from the current spot settlement date, returned as spotDate; a nearDate on spotDate is a spot-starting swap. swapPoint.bid is the far-leg bid minus the near-leg ask and swapPoint.ask is the far-leg ask minus the near-leg bid, so the spread includes both legs. Bid is rounded down and ask up to 2 decimal places. days is the calendar-day count from nearMaturityDate to farMaturityDate. swapPoint is null when a two-way price is unavailable, including a nearDate before spotDate or a date outside the quoted curve; no midpoint replaces it and nothing is extrapolated. referenceAt is the observation time in timeZone (UTC when omitted or null); calendar dates are unchanged.

Request

pairquery / string

통화쌍

JSON
{
  "type": "string",
  "default": "USDKRW",
  "example": "USDKRW"
}
nearDatequery / string / dateRequired

near leg 결제일 Format: `YYYY-MM-DD`.

JSON
{
  "type": "string",
  "format": "date",
  "example": "2026-09-24"
}
farDatequery / string / dateRequired

far leg 결제일 Format: `YYYY-MM-DD`.

JSON
{
  "type": "string",
  "format": "date",
  "example": "2026-11-24"
}
timeZonequery / string | null

IANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged. Timestamps then end in that zone's offset, for example `+09:00`, instead of `Z`.

JSON
{
  "type": [
    "string",
    "null"
  ],
  "default": "UTC"
}

Responses and errors

200 정상 산출. 두 방향 값을 낼 수 없으면 swapPoint가 null이다. nearDate가 spotDate보다 이르면 오류가 아니라 null이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
spotDatestring | null / date

Spot settlement date of the observation; a nearDate before it has no price. Null without an observation. Format: YYYY-MM-DD.

nearMaturityDatestring / dateRequired

Near-leg value date, as requested; unaffected by timeZone. Format: YYYY-MM-DD.

farMaturityDatestring / dateRequired

Far-leg value date, as requested; unaffected by timeZone. Format: YYYY-MM-DD.

daysinteger / int32Required

Calendar days from nearMaturityDate to farMaturityDate.

swapPointobject | null

Two-way swap points from nearMaturityDate to farMaturityDate; null when a two-way price is unavailable. Never one-sided or a midpoint.

Nested fields

object

bidnumberRequired

Far-leg bid minus near-leg ask, in quote currency per USD 1, rounded down to 2 decimal places.

asknumberRequired

Far-leg ask minus near-leg bid, in quote currency per USD 1, rounded up to 2 decimal places.

null

JSON
{
  "type": "null"
}
referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "1m-3m": {
    "summary": "1M에서 3M까지",
    "description": "1m-3m",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "spotDate": "2026-08-24",
        "nearMaturityDate": "2026-09-24",
        "farMaturityDate": "2026-11-24",
        "days": 61,
        "swapPoint": {
          "bid": -2.1,
          "ask": -1.76
        },
        "referenceAt": "2026-08-25T06:00:00.000Z"
      }
    }
  },
  "near-before-spot": {
    "summary": "near가 결제일보다 이르다: 값 없음",
    "description": "near-before-spot",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "spotDate": "2026-08-24",
        "nearMaturityDate": "2026-08-21",
        "farMaturityDate": "2026-09-24",
        "days": 34,
        "swapPoint": null,
        "referenceAt": "2026-08-25T06:00:00.000Z"
      }
    }
  }
}
400 미지원 통화쌍, 날짜 형식 오류 (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
spotDatestring | null / date

Spot settlement date of the observation; a nearDate before it has no price. Null without an observation. Format: YYYY-MM-DD.

nearMaturityDatestring / dateRequired

Near-leg value date, as requested; unaffected by timeZone. Format: YYYY-MM-DD.

farMaturityDatestring / dateRequired

Far-leg value date, as requested; unaffected by timeZone. Format: YYYY-MM-DD.

daysinteger / int32Required

Calendar days from nearMaturityDate to farMaturityDate.

swapPointobject | null

Two-way swap points from nearMaturityDate to farMaturityDate; null when a two-way price is unavailable. Never one-sided or a midpoint.

Nested fields

object

bidnumberRequired

Far-leg bid minus near-leg ask, in quote currency per USD 1, rounded down to 2 decimal places.

asknumberRequired

Far-leg ask minus near-leg bid, in quote currency per USD 1, rounded up to 2 decimal places.

null

JSON
{
  "type": "null"
}
referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}
422 farDate가 nearDate 이하 (4220)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
spotDatestring | null / date

Spot settlement date of the observation; a nearDate before it has no price. Null without an observation. Format: YYYY-MM-DD.

nearMaturityDatestring / dateRequired

Near-leg value date, as requested; unaffected by timeZone. Format: YYYY-MM-DD.

farMaturityDatestring / dateRequired

Far-leg value date, as requested; unaffected by timeZone. Format: YYYY-MM-DD.

daysinteger / int32Required

Calendar days from nearMaturityDate to farMaturityDate.

swapPointobject | null

Two-way swap points from nearMaturityDate to farMaturityDate; null when a two-way price is unavailable. Never one-sided or a midpoint.

Nested fields

object

bidnumberRequired

Far-leg bid minus near-leg ask, in quote currency per USD 1, rounded down to 2 decimal places.

asknumberRequired

Far-leg ask minus near-leg bid, in quote currency per USD 1, rounded up to 2 decimal places.

null

JSON
{
  "type": "null"
}
referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}

GET/v1/fx/spot

Spot Exchange Rate

Returns the spot bid and ask, settlement date and last trade for a currency pair. USDKRW is supported; USDJPY is available when its spot service is enabled. Spot availability does not imply support for other calculations. bid and ask are quotes in quote currency per USD 1. When a midpoint is needed, compute it from both sides. Missing or expired quotes produce null bid and ask; decide price availability from these two fields. referenceAt is the observation time of the spot source data, not a retrieval time, and is null when no observation exists. It can be present without quotes. It uses ISO-8601 with milliseconds in timeZone (UTC when omitted or null). last and lastAt describe the last available trade, independently of quote expiry. Pairs without a trade source, currently USDJPY, return null for both. lastAt uses the same millisecond format and timeZone, but the trade clock has second resolution, so its fractional part is always .000. Its date is inferred from the observation date and may be inaccurate for trades retransmitted after a market closure. A last trade does not necessarily represent a recent trade.

Request

pairquery / string

통화쌍

JSON
{
  "type": "string",
  "default": "USDKRW",
  "example": "USDKRW"
}
timeZonequery / string | null

IANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged. Timestamps then end in that zone's offset, for example `+09:00`, instead of `Z`.

JSON
{
  "type": [
    "string",
    "null"
  ],
  "default": "UTC"
}

Responses and errors

200 조회 성공. 호가가 없거나 만료되면 bid·ask가 null이다. 가격 유무는 referenceAt이 아니라 bid·ask로 판단한다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
spotDatestring | null / date

Format: YYYY-MM-DD.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

bidnumber | null

Bid in quote currency per USD 1; null when this side is not provided.

asknumber | null

Ask in quote currency per USD 1; null when this side is not provided.

lastnumber | null

Last traded price in quote currency per USD 1; null for pairs without a trade source and when no trade is available.

lastAtstring | null / date-time

Estimated time of the last trade in timeZone (default UTC), rendered with milliseconds; the trade clock has second resolution, so the fractional part is always .000. Null without a trade clock. Date is inferred from the observation and can be inaccurate after closures. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "no-quote": {
    "summary": "지원 쌍인데 호가가 없다. 오류가 아니다",
    "description": "no-quote",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "pair": "USDKRW",
        "spotDate": null,
        "referenceAt": null,
        "bid": null,
        "ask": null,
        "last": null,
        "lastAt": null
      }
    }
  }
}
400 미지원 통화쌍 (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
spotDatestring | null / date

Format: YYYY-MM-DD.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

bidnumber | null

Bid in quote currency per USD 1; null when this side is not provided.

asknumber | null

Ask in quote currency per USD 1; null when this side is not provided.

lastnumber | null

Last traded price in quote currency per USD 1; null for pairs without a trade source and when no trade is available.

lastAtstring | null / date-time

Estimated time of the last trade in timeZone (default UTC), rendered with milliseconds; the trade clock has second resolution, so the fractional part is always .000. Null without a trade clock. Date is inferred from the observation and can be inaccurate after closures. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}

GET/v1/fx/discount-factor

Discount Factor

Returns a discount factor and corresponding simple-interest zero rate for USD or KRW, for exactly one of maturityDate or tenor. The deprecated date alias is accepted only without maturityDate. A tenor resolves to a maturity date by that currency's convention; the response returns it as maturityDate. Other currencies are unsupported and answer 4000, which is different from a supported currency with no value. curveBaseDate is the curve's base date and may differ from the FX settlement date. On the curve base date, the discount factor is 1.0 and zeroRate is null. Missing data or dates outside the curve produce null values; there is no extrapolation. referenceAt is the observation time of the curve inputs in timeZone (default UTC); calendar dates are unchanged.

Request

currencyquery / stringRequired

통화. USD와 KRW

JSON
{
  "type": "string",
  "example": "USD"
}
datequery / string / dateDeprecated

Deprecated alias for maturityDate. Do not supply both date names. Format: `YYYY-MM-DD`.

JSON
{
  "type": "string",
  "format": "date",
  "example": "2027-02-26"
}
tenorquery / string

만기. `maturityDate`와 택일

JSON
{
  "type": "string",
  "enum": [
    "1D",
    "SN",
    "1W",
    "2W",
    "3W",
    "1M",
    "2M",
    "3M",
    "4M",
    "5M",
    "6M",
    "7M",
    "8M",
    "9M",
    "10M",
    "11M",
    "1Y",
    "12M"
  ],
  "example": "6M"
}
timeZonequery / string | null

IANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged. Timestamps then end in that zone's offset, for example `+09:00`, instead of `Z`.

JSON
{
  "type": [
    "string",
    "null"
  ],
  "default": "UTC"
}
maturityDatequery / string / date

Maturity calendar date. Use either maturityDate or tenor, not both. Format: `YYYY-MM-DD`.

JSON
{
  "type": "string",
  "format": "date",
  "example": "2027-02-26"
}

Responses and errors

200 조회 성공. 스냅샷이 없거나 커브 범위 밖이면 discountFactor가 null이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

currencystringRequired

JPY | KRW | USD

tenorstring | null

1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12M

datestring | null / dateDeprecated

Use maturityDate. Format: YYYY-MM-DD.

curveBaseDatestring | null / date

Format: YYYY-MM-DD.

daycountstring | null

ACT/360 | ACT/365

yearFractionnumber | null / double
discountFactornumber | null / double
zeroRatenumber | null / double
referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

maturityDatestring | null / date

Resolved maturity calendar date; unaffected by timeZone. Format: YYYY-MM-DD.

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "date": {
    "description": "date",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "currency": "USD",
        "tenor": null,
        "maturityDate": "2027-02-26",
        "date": "2027-02-26",
        "curveBaseDate": "2026-08-26",
        "daycount": "ACT/360",
        "yearFraction": 0.5083,
        "discountFactor": 0.9798,
        "zeroRate": 0.0405,
        "referenceAt": "2026-08-24T06:00:00.000Z"
      }
    }
  },
  "curve-base-date": {
    "summary": "커브 기준일 당일. 할인이 없고 금리는 정의되지 않는다",
    "description": "curve-base-date",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "currency": "USD",
        "tenor": null,
        "maturityDate": "2026-08-26",
        "date": "2026-08-26",
        "curveBaseDate": "2026-08-26",
        "daycount": "ACT/360",
        "yearFraction": 0,
        "discountFactor": 1,
        "zeroRate": null,
        "referenceAt": "2026-08-24T06:00:00.000Z"
      }
    }
  }
}
400 미지원 통화, 또는 date·tenor를 둘 다 주거나 둘 다 안 줌 (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

currencystringRequired

JPY | KRW | USD

tenorstring | null

1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12M

datestring | null / dateDeprecated

Use maturityDate. Format: YYYY-MM-DD.

curveBaseDatestring | null / date

Format: YYYY-MM-DD.

daycountstring | null

ACT/360 | ACT/365

yearFractionnumber | null / double
discountFactornumber | null / double
zeroRatenumber | null / double
referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

maturityDatestring | null / date

Resolved maturity calendar date; unaffected by timeZone. Format: YYYY-MM-DD.

null

JSON
{
  "type": "null"
}

GET/v1/fx/currency-pairs

Supported Currency Pairs

Lists currencies and currency pairs published by the calculation conventions. The plural list keys are currencies and pairs. Returns USDKRW and USDJPY in pairs, with JPY, KRW and USD in currencies. Spot and forward quote availability is described by each quote operation. Currency and pair conventions are available from /v1/fx/config.

Request

No request parameters.

Responses and errors

200 항상 이 응답이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

currenciesstring[]Required
pairsstring[]Required

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "supported": {
    "description": "supported",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "currencies": [
          "JPY",
          "KRW",
          "USD"
        ],
        "pairs": [
          "USDKRW",
          "USDJPY"
        ]
      }
    }
  }
}

GET/v1/fx/config

Calculation Conventions

Returns currency day-count conventions and calendars in currencies, and base currency, quote currency, spot lag and point factor in pairs. A currency listed here has published conventions; it does not follow that every product accepts it. JPY conventions are listed while zero-rate and discount-factor still serve USD and KRW only.

currencies carries one row per currency, identified by currency. daycount is the convention used to report rates from that currency's curve.

pointFactor converts a quote-currency change to swap points: points = (outright - spot) * pointFactor. Convert points back to quote-currency units with outright = spot + points / pointFactor. Both USDKRW and USDJPY currently use 100. These are reference conventions; quote responses provide their applicable settlement dates.

Request

No request parameters.

Responses and errors

200 항상 이 응답이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

currenciesobject[]Required
Nested fields
currencystringRequired

JPY | KRW | USD

daycountstringRequired

Actual-day convention used when reporting rates from this curve.

ACT/360 | ACT/365

calendarstringRequired

USD_NEWYORK | KRW_SEOUL | JPY_TOKYO

pairsobject[]Required
Nested fields
pairstringRequired

USDKRW | USDJPY | JPYKRW

basestringRequired

JPY | KRW | USD

quotestringRequired

JPY | KRW | USD

spotLaginteger / int32Required
pointFactornumber / doubleRequired

Multiplier from the quote-currency change to swap points: points = (outright - spot) * pointFactor. Convert points back by dividing by this value.

null

JSON
{
  "type": "null"
}
Response examples (not current quotes)
JSON
{
  "conventions": {
    "description": "conventions",
    "value": {
      "code": 0,
      "message": "",
      "data": {
        "currencies": [
          {
            "currency": "JPY",
            "daycount": "ACT/360",
            "calendar": "JPY_TOKYO"
          },
          {
            "currency": "KRW",
            "daycount": "ACT/365",
            "calendar": "KRW_SEOUL"
          },
          {
            "currency": "USD",
            "daycount": "ACT/360",
            "calendar": "USD_NEWYORK"
          }
        ],
        "pairs": [
          {
            "pair": "USDKRW",
            "base": "USD",
            "quote": "KRW",
            "spotLag": 2,
            "pointFactor": 100
          },
          {
            "pair": "USDJPY",
            "base": "USD",
            "quote": "JPY",
            "spotLag": 2,
            "pointFactor": 100
          }
        ]
      }
    }
  }
}

GET/v1/fx/business-days

Business Days

Returns the date day business days from date in the calendar selected by calendarCode. For example, day 2 from a Monday with no holidays returns the Wednesday. day 0 returns date itself when it is a business day, and the next business day otherwise. Negative values move backward; the range is -30 to 30. When date is not a business day, counting starts from date, so day 1 from a Saturday returns the following Monday. isBusinessDay and reason describe the requested date; resultDate is the answer. certainty describes resultDate: PREDICTED when any day the search passed through comes from a rule-generated revision, so the answer can move once the real holiday schedule is published. Dates outside the calendar's published coverage return an error.

Request

datequery / string / dateRequired

Format: `YYYY-MM-DD`.

JSON
{
  "type": "string",
  "format": "date"
}
calendarCodequery / stringRequired

JSON
{
  "type": "string",
  "enum": [
    "USD_NEWYORK",
    "KRW_SEOUL",
    "JPY_TOKYO"
  ]
}
dayquery / integer / int32Required

JSON
{
  "type": "integer",
  "format": "int32"
}

Responses and errors

200 OK
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

datestring / dateRequired

Format: YYYY-MM-DD.

calendarstringRequired

USD_NEWYORK | KRW_SEOUL | JPY_TOKYO

isBusinessDaybooleanRequired
certaintystringRequired
reasonstringRequired
resultDatestring / dateRequired

Format: YYYY-MM-DD.

null

JSON
{
  "type": "null"
}

GET/v1/calendars/business-day

Business Day (previous path)

Previous path, kept because the MCP tools under review still call it. Use GET /v1/fx/business-days in new code.

Returns the business day at offset business days from date in the selected calendar. offset 0 returns date itself when it is a business day, and the next business day otherwise. Positive values move forward and negative values move backward; the range is -30 to 30. isBusinessDay and reason describe the requested date; resultDate is the answer. certainty describes resultDate: PREDICTED when any day the search passed through comes from a rule-generated revision, so the answer can move once the real holiday schedule is published. Dates outside the calendar's published coverage return an error.

Request

datequery / string / dateRequired

Format: `YYYY-MM-DD`.

JSON
{
  "type": "string",
  "format": "date"
}
calendarquery / stringRequired

JSON
{
  "type": "string",
  "enum": [
    "USD_NEWYORK",
    "KRW_SEOUL",
    "JPY_TOKYO"
  ]
}
offsetquery / integer / int32

JSON
{
  "type": "integer",
  "format": "int32",
  "default": 0
}

Responses and errors

200 OK
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

datestring / dateRequired

Format: YYYY-MM-DD.

calendarstringRequired

USD_NEWYORK | KRW_SEOUL | JPY_TOKYO

isBusinessDaybooleanRequired
certaintystringRequired
reasonstringRequired
resultDatestring / dateRequired

Format: YYYY-MM-DD.

null

JSON
{
  "type": "null"
}

GET/fx/spot

현물 가격과 호가 조회

로그인, 세션, Bearer token 또는 API key 없이 사용하는 조회 계약이다. price는 유효시간 미만의 최근 체결가이며, 그 외에는 bid와 ask의 중간값이다. 체결가 유효시간은 서버 설정을 따르며 기본 300초다. 정확히 유효시간에 도달하면 중간값을 사용한다. USDKRW 체결시각은 /v1/fx/spot의 lastAt과 같은 추정 날짜 기준이다. 체결시각이 없거나 미래이면 중간값을 사용한다. USDJPY는 체결가가 없어 중간값을 사용한다. bid와 ask는 제공 가능한 표시 호가이며 price가 체결가여도 유지된다. 사용할 호가가 없으면 해당 필드는 null이다. 체결가와 중간값이 모두 없으면 price는 null이다. referenceAt은 price의 기준시각이며 호가 시각을 보장하지 않는다. 체결가이면 추정 체결시각이다. 가격 유효시간 판정에 쓰는 서버 시각은 응답에 싣지 않는다. referenceAt은 timeZone의 밀리초 형식이며 생략하면 UTC다.

Request

pairquery / stringRequired

통화쌍

JSON
{
  "type": "string",
  "example": "USDKRW"
}
timeZonequery / string | null

IANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged. Timestamps then end in that zone's offset, for example `+09:00`, instead of `Z`.

JSON
{
  "type": [
    "string",
    "null"
  ],
  "default": "UTC"
}

Responses and errors

200 조회 성공. 사용할 가격이 없으면 price가 null이다.
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
pricenumber | null

유효시간 미만의 최근 체결가, 그 외에는 호가 중간값. 둘 다 없으면 null.

bidnumber | null

매수 호가. 제공 가능한 호가가 없으면 null.

asknumber | null

매도 호가. 제공 가능한 호가가 없으면 null.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}
400 pair 누락, 형식 오류 또는 미지원 통화쌍 (4000)
codeinteger / int32Required

성공은 0. 실패는 에러 번호(4000·4220·5000).

messagestringRequired

성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.

metaobjectRequired

REST와 MCP가 공유하는 요청·응답 처리 메타데이터.

Nested fields
requestAtstringRequired

UTC time when the server received the request. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

requestIdstringRequired

Server-generated UUID for response and log correlation.

responseAtstringRequired

UTC time when the response envelope was created. Format: YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.

clientRequestIdstring | nullRequired

Client correlation value received in X-Request-ID; null when absent.

dataobject | null

payload. 실패 응답에서는 항상 null이다.

Nested fields

object

pairstringRequired
pricenumber | null

유효시간 미만의 최근 체결가, 그 외에는 호가 중간값. 둘 다 없으면 null.

bidnumber | null

매수 호가. 제공 가능한 호가가 없으면 null.

asknumber | null

매도 호가. 제공 가능한 호가가 없으면 null.

referenceAtstring | null / date-time

Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format: YYYY-MM-DDTHH:mm:ss.SSSZ in UTC, or YYYY-MM-DDTHH:mm:ss.SSS+hh:mm in the requested timeZone, for example 2026-10-08T15:00:00.000+09:00.

null

JSON
{
  "type": "null"
}