SNAP / API
API Reference
Read the request and response contracts without signing in. Run requests in the signed-in SNAP workspace.
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.
{
"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.
{
"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
pairstringDefault:
USDKRWtradeDatestring / dateRequiredFormat:
YYYY-MM-DD.tenorstringRequiredON | 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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtradeDatestring / dateRequiredFormat:
YYYY-MM-DD.spotDatestring / dateRequiredFormat:
YYYY-MM-DD.maturityDatestring / dateRequiredFormat:
YYYY-MM-DD.daysToMaturityinteger / int32RequiredbusinessDaysinteger / int32RequiredtenorstringRequiredON | TN | SN | 1D | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1YspotDaysinteger / int32RequiredisBusinessTradeDatebooleanRequiredWhether 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{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtradeDatestring / dateRequiredFormat:
YYYY-MM-DD.spotDatestring / dateRequiredFormat:
YYYY-MM-DD.maturityDatestring / dateRequiredFormat:
YYYY-MM-DD.daysToMaturityinteger / int32RequiredbusinessDaysinteger / int32RequiredtenorstringRequiredON | TN | SN | 1D | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1YspotDaysinteger / int32RequiredisBusinessTradeDatebooleanRequiredWhether 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{ "type": "null" }
422 캘린더가 덮지 않는 날짜 (4220)
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtradeDatestring / dateRequiredFormat:
YYYY-MM-DD.spotDatestring / dateRequiredFormat:
YYYY-MM-DD.maturityDatestring / dateRequiredFormat:
YYYY-MM-DD.daysToMaturityinteger / int32RequiredbusinessDaysinteger / int32RequiredtenorstringRequiredON | TN | SN | 1D | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1YspotDaysinteger / int32RequiredisBusinessTradeDatebooleanRequiredWhether 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{ "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
pairstringDefault:
USDKRWmaturityDatestring | null / dateForward value date. Provide exactly one of maturityDate and tenor. Format:
YYYY-MM-DD.tenorstring | nullStandard 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 | 1YtimeZonestring | nullIANA 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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtenorstring | nullRequested tenor, echoed; null when the request used maturityDate.
1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1YmaturityDatestring | null / dateForward 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 / dateSpot settlement date the forward is measured from; null without an observation. Format:
YYYY-MM-DD.daysinteger | null / int32Calendar days from spotDate to maturityDate; null when either date is null.
bidnumber | nullForward bid in quote currency per USD 1, rounded down to 2 decimal places; null with ask when a two-way forward is unavailable.
asknumber | nullForward 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-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtenorstring | nullRequested tenor, echoed; null when the request used maturityDate.
1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1YmaturityDatestring | null / dateForward 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 / dateSpot settlement date the forward is measured from; null without an observation. Format:
YYYY-MM-DD.daysinteger | null / int32Calendar days from spotDate to maturityDate; null when either date is null.
bidnumber | nullForward bid in quote currency per USD 1, rounded down to 2 decimal places; null with ask when a two-way forward is unavailable.
asknumber | nullForward 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-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "type": "null" }
422 maturityDate가 spotDate 이하 (4220)
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtenorstring | nullRequested tenor, echoed; null when the request used maturityDate.
1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1YmaturityDatestring | null / dateForward 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 / dateSpot settlement date the forward is measured from; null without an observation. Format:
YYYY-MM-DD.daysinteger | null / int32Calendar days from spotDate to maturityDate; null when either date is null.
bidnumber | nullForward bid in quote currency per USD 1, rounded down to 2 decimal places; null with ask when a two-way forward is unavailable.
asknumber | nullForward 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-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "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
pairstringDefault:
USDKRWtradeDatestring / dateRequiredFormat:
YYYY-MM-DD.tenorstringRequired1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12MspotDaysinteger | null / int32eomRulebooleanApplies to month and year tenors only. Day and week tenors roll Following and are unaffected by this flag;
eomRuleAppliedreports what was used.Default:
trueanchorstringSPOT | OVERNIGHT | TOM_NEXT | SPOT_NEXTDefault:
SPOT
Responses and errors
200 정상 산출. 12필드가 모두 채워진다.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtradeDatestring / dateRequiredFormat:
YYYY-MM-DD.spotDatestring | null / dateFormat:
YYYY-MM-DD.maturityDatestring | null / dateFormat:
YYYY-MM-DD.daysToMaturityinteger | null / int32businessDaysinteger | null / int32calendarsstring[]RequiredtenorstringRequired1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12MspotDaysinteger / int32RequiredisTradeDateBusinessDayboolean | nullisSpotDateEomboolean | nulleomRuleAppliedbooleanRequired
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtradeDatestring / dateRequiredFormat:
YYYY-MM-DD.spotDatestring | null / dateFormat:
YYYY-MM-DD.maturityDatestring | null / dateFormat:
YYYY-MM-DD.daysToMaturityinteger | null / int32businessDaysinteger | null / int32calendarsstring[]RequiredtenorstringRequired1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12MspotDaysinteger / int32RequiredisTradeDateBusinessDayboolean | nullisSpotDateEomboolean | nulleomRuleAppliedbooleanRequired
null{ "type": "null" }
500
적용 가능한 PUBLISHED holiday revision이 없다 (5000). 요청이 잘못된 것이
아니라 운영 데이터가 그 날짜를 덮지 않는다는 뜻이다.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredtradeDatestring / dateRequiredFormat:
YYYY-MM-DD.spotDatestring | null / dateFormat:
YYYY-MM-DD.maturityDatestring | null / dateFormat:
YYYY-MM-DD.daysToMaturityinteger | null / int32businessDaysinteger | null / int32calendarsstring[]RequiredtenorstringRequired1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12MspotDaysinteger / int32RequiredisTradeDateBusinessDayboolean | nullisSpotDateEomboolean | nulleomRuleAppliedbooleanRequired
null{ "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
{ "type": "string", "example": "USD" }datequery / string / dateDeprecatedDeprecated alias for maturityDate. Do not supply both date names. Format: `YYYY-MM-DD`.
{ "type": "string", "format": "date", "example": "2027-02-26" }tenorquery / string만기. `maturityDate`와 택일
{ "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 | nullIANA 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`.
{ "type": [ "string", "null" ], "default": "UTC" }maturityDatequery / string / dateMaturity calendar date. Use either maturityDate or tenor, not both. Format: `YYYY-MM-DD`.
{ "type": "string", "format": "date", "example": "2027-02-26" }
Responses and errors
200 조회 성공. 스냅샷이 없거나 커브 범위 밖이면 zeroRate가 null이다.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectcurrencystringRequiredJPY | KRW | USDtenorstring | null1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12Mdatestring | null / dateDeprecatedUse maturityDate. Format:
YYYY-MM-DD.curveBaseDatestring | null / dateFormat:
YYYY-MM-DD.daycountstring | nullACT/360 | ACT/365yearFractionnumber | null / doublezeroRatenumber | null / doublereferenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.maturityDatestring | null / dateResolved maturity calendar date; unaffected by timeZone. Format:
YYYY-MM-DD.
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectcurrencystringRequiredJPY | KRW | USDtenorstring | null1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12Mdatestring | null / dateDeprecatedUse maturityDate. Format:
YYYY-MM-DD.curveBaseDatestring | null / dateFormat:
YYYY-MM-DD.daycountstring | nullACT/360 | ACT/365yearFractionnumber | null / doublezeroRatenumber | null / doublereferenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.maturityDatestring | null / dateResolved maturity calendar date; unaffected by timeZone. Format:
YYYY-MM-DD.
null{ "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통화쌍
{ "type": "string", "default": "USDKRW", "example": "USDKRW" }timeZonequery / string | nullIANA 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`.
{ "type": [ "string", "null" ], "default": "UTC" }
Responses and errors
200 조회 성공. 호가가 없으면 points가 비고 referenceAt이 null이다.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredspotDatestring | null / dateSpot 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 / dateFormat:
YYYY-MM-DD.pointsobject[]RequiredNested fields
tenorstringRequiredspotDatestring | null / dateSpot 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 / dateMaturity (far-leg value) date; unaffected by timeZone. Format:
YYYY-MM-DD.daysinteger | null / int32For 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 | nullBid in quote currency per USD 1; null when not provided.
asknumber | nullAsk in quote currency per USD 1; null when not provided.
interpolatedbooleanRequiredTrue 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-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredspotDatestring | null / dateSpot 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 / dateFormat:
YYYY-MM-DD.pointsobject[]RequiredNested fields
tenorstringRequiredspotDatestring | null / dateSpot 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 / dateMaturity (far-leg value) date; unaffected by timeZone. Format:
YYYY-MM-DD.daysinteger | null / int32For 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 | nullBid in quote currency per USD 1; null when not provided.
asknumber | nullAsk in quote currency per USD 1; null when not provided.
interpolatedbooleanRequiredTrue 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-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "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통화쌍
{ "type": "string", "example": "USDKRW" }
Responses and errors
200 요청한 지원 통화쌍의 표준 FX forward 만기 목록.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectfxForwardstring[]Required
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectfxForwardstring[]Required
null{ "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통화쌍
{ "type": "string", "default": "USDKRW", "example": "USDKRW" }nearDatequery / string / dateRequirednear leg 결제일 Format: `YYYY-MM-DD`.
{ "type": "string", "format": "date", "example": "2026-09-24" }farDatequery / string / dateRequiredfar leg 결제일 Format: `YYYY-MM-DD`.
{ "type": "string", "format": "date", "example": "2026-11-24" }timeZonequery / string | nullIANA 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`.
{ "type": [ "string", "null" ], "default": "UTC" }
Responses and errors
200 정상 산출. 두 방향 값을 낼 수 없으면 swapPoint가 null이다. nearDate가 spotDate보다 이르면 오류가 아니라 null이다.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredspotDatestring | null / dateSpot settlement date of the observation; a nearDate before it has no price. Null without an observation. Format:
YYYY-MM-DD.nearMaturityDatestring / dateRequiredNear-leg value date, as requested; unaffected by timeZone. Format:
YYYY-MM-DD.farMaturityDatestring / dateRequiredFar-leg value date, as requested; unaffected by timeZone. Format:
YYYY-MM-DD.daysinteger / int32RequiredCalendar days from nearMaturityDate to farMaturityDate.
swapPointobject | nullTwo-way swap points from nearMaturityDate to farMaturityDate; null when a two-way price is unavailable. Never one-sided or a midpoint.
Nested fields
objectbidnumberRequiredFar-leg bid minus near-leg ask, in quote currency per USD 1, rounded down to 2 decimal places.
asknumberRequiredFar-leg ask minus near-leg bid, in quote currency per USD 1, rounded up to 2 decimal places.
null{ "type": "null" }referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredspotDatestring | null / dateSpot settlement date of the observation; a nearDate before it has no price. Null without an observation. Format:
YYYY-MM-DD.nearMaturityDatestring / dateRequiredNear-leg value date, as requested; unaffected by timeZone. Format:
YYYY-MM-DD.farMaturityDatestring / dateRequiredFar-leg value date, as requested; unaffected by timeZone. Format:
YYYY-MM-DD.daysinteger / int32RequiredCalendar days from nearMaturityDate to farMaturityDate.
swapPointobject | nullTwo-way swap points from nearMaturityDate to farMaturityDate; null when a two-way price is unavailable. Never one-sided or a midpoint.
Nested fields
objectbidnumberRequiredFar-leg bid minus near-leg ask, in quote currency per USD 1, rounded down to 2 decimal places.
asknumberRequiredFar-leg ask minus near-leg bid, in quote currency per USD 1, rounded up to 2 decimal places.
null{ "type": "null" }referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "type": "null" }
422 farDate가 nearDate 이하 (4220)
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredspotDatestring | null / dateSpot settlement date of the observation; a nearDate before it has no price. Null without an observation. Format:
YYYY-MM-DD.nearMaturityDatestring / dateRequiredNear-leg value date, as requested; unaffected by timeZone. Format:
YYYY-MM-DD.farMaturityDatestring / dateRequiredFar-leg value date, as requested; unaffected by timeZone. Format:
YYYY-MM-DD.daysinteger / int32RequiredCalendar days from nearMaturityDate to farMaturityDate.
swapPointobject | nullTwo-way swap points from nearMaturityDate to farMaturityDate; null when a two-way price is unavailable. Never one-sided or a midpoint.
Nested fields
objectbidnumberRequiredFar-leg bid minus near-leg ask, in quote currency per USD 1, rounded down to 2 decimal places.
asknumberRequiredFar-leg ask minus near-leg bid, in quote currency per USD 1, rounded up to 2 decimal places.
null{ "type": "null" }referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "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통화쌍
{ "type": "string", "default": "USDKRW", "example": "USDKRW" }timeZonequery / string | nullIANA 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`.
{ "type": [ "string", "null" ], "default": "UTC" }
Responses and errors
200 조회 성공. 호가가 없거나 만료되면 bid·ask가 null이다. 가격 유무는 referenceAt이 아니라 bid·ask로 판단한다.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredspotDatestring | null / dateFormat:
YYYY-MM-DD.referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.bidnumber | nullBid in quote currency per USD 1; null when this side is not provided.
asknumber | nullAsk in quote currency per USD 1; null when this side is not provided.
lastnumber | nullLast traded price in quote currency per USD 1; null for pairs without a trade source and when no trade is available.
lastAtstring | null / date-timeEstimated 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.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredspotDatestring | null / dateFormat:
YYYY-MM-DD.referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.bidnumber | nullBid in quote currency per USD 1; null when this side is not provided.
asknumber | nullAsk in quote currency per USD 1; null when this side is not provided.
lastnumber | nullLast traded price in quote currency per USD 1; null for pairs without a trade source and when no trade is available.
lastAtstring | null / date-timeEstimated 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.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "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
{ "type": "string", "example": "USD" }datequery / string / dateDeprecatedDeprecated alias for maturityDate. Do not supply both date names. Format: `YYYY-MM-DD`.
{ "type": "string", "format": "date", "example": "2027-02-26" }tenorquery / string만기. `maturityDate`와 택일
{ "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 | nullIANA 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`.
{ "type": [ "string", "null" ], "default": "UTC" }maturityDatequery / string / dateMaturity calendar date. Use either maturityDate or tenor, not both. Format: `YYYY-MM-DD`.
{ "type": "string", "format": "date", "example": "2027-02-26" }
Responses and errors
200 조회 성공. 스냅샷이 없거나 커브 범위 밖이면 discountFactor가 null이다.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectcurrencystringRequiredJPY | KRW | USDtenorstring | null1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12Mdatestring | null / dateDeprecatedUse maturityDate. Format:
YYYY-MM-DD.curveBaseDatestring | null / dateFormat:
YYYY-MM-DD.daycountstring | nullACT/360 | ACT/365yearFractionnumber | null / doublediscountFactornumber | null / doublezeroRatenumber | null / doublereferenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.maturityDatestring | null / dateResolved maturity calendar date; unaffected by timeZone. Format:
YYYY-MM-DD.
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectcurrencystringRequiredJPY | KRW | USDtenorstring | null1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12Mdatestring | null / dateDeprecatedUse maturityDate. Format:
YYYY-MM-DD.curveBaseDatestring | null / dateFormat:
YYYY-MM-DD.daycountstring | nullACT/360 | ACT/365yearFractionnumber | null / doublediscountFactornumber | null / doublezeroRatenumber | null / doublereferenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.maturityDatestring | null / dateResolved maturity calendar date; unaffected by timeZone. Format:
YYYY-MM-DD.
null{ "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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectcurrenciesstring[]Requiredpairsstring[]Required
null{ "type": "null" }
Response examples (not current quotes)
{
"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성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectcurrenciesobject[]RequiredNested fields
currencystringRequiredJPY | KRW | USDdaycountstringRequiredActual-day convention used when reporting rates from this curve.
ACT/360 | ACT/365calendarstringRequiredUSD_NEWYORK | KRW_SEOUL | JPY_TOKYO
pairsobject[]RequiredNested fields
pairstringRequiredUSDKRW | USDJPY | JPYKRWbasestringRequiredJPY | KRW | USDquotestringRequiredJPY | KRW | USDspotLaginteger / int32RequiredpointFactornumber / doubleRequiredMultiplier from the quote-currency change to swap points: points = (outright - spot) * pointFactor. Convert points back by dividing by this value.
null{ "type": "null" }
Response examples (not current quotes)
{
"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 / dateRequiredFormat: `YYYY-MM-DD`.
{ "type": "string", "format": "date" }calendarCodequery / stringRequired{ "type": "string", "enum": [ "USD_NEWYORK", "KRW_SEOUL", "JPY_TOKYO" ] }dayquery / integer / int32Required{ "type": "integer", "format": "int32" }
Responses and errors
200 OK
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectdatestring / dateRequiredFormat:
YYYY-MM-DD.calendarstringRequiredUSD_NEWYORK | KRW_SEOUL | JPY_TOKYOisBusinessDaybooleanRequiredcertaintystringRequiredreasonstringRequiredresultDatestring / dateRequiredFormat:
YYYY-MM-DD.
null{ "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 / dateRequiredFormat: `YYYY-MM-DD`.
{ "type": "string", "format": "date" }calendarquery / stringRequired{ "type": "string", "enum": [ "USD_NEWYORK", "KRW_SEOUL", "JPY_TOKYO" ] }offsetquery / integer / int32{ "type": "integer", "format": "int32", "default": 0 }
Responses and errors
200 OK
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectdatestring / dateRequiredFormat:
YYYY-MM-DD.calendarstringRequiredUSD_NEWYORK | KRW_SEOUL | JPY_TOKYOisBusinessDaybooleanRequiredcertaintystringRequiredreasonstringRequiredresultDatestring / dateRequiredFormat:
YYYY-MM-DD.
null{ "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통화쌍
{ "type": "string", "example": "USDKRW" }timeZonequery / string | nullIANA 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`.
{ "type": [ "string", "null" ], "default": "UTC" }
Responses and errors
200 조회 성공. 사용할 가격이 없으면 price가 null이다.
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredpricenumber | null유효시간 미만의 최근 체결가, 그 외에는 호가 중간값. 둘 다 없으면 null.
bidnumber | null매수 호가. 제공 가능한 호가가 없으면 null.
asknumber | null매도 호가. 제공 가능한 호가가 없으면 null.
referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "type": "null" }
400 pair 누락, 형식 오류 또는 미지원 통화쌍 (4000)
codeinteger / int32Required성공은
0. 실패는 에러 번호(4000·4220·5000).messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobjectRequiredREST와 MCP가 공유하는 요청·응답 처리 메타데이터.
Nested fields
requestAtstringRequiredUTC time when the server received the request. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created. Format:
YYYY-MM-DDTHH:mm:ss.SSSZ, always UTC.clientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
objectpairstringRequiredpricenumber | null유효시간 미만의 최근 체결가, 그 외에는 호가 중간값. 둘 다 없으면 null.
bidnumber | null매수 호가. 제공 가능한 호가가 없으면 null.
asknumber | null매도 호가. 제공 가능한 호가가 없으면 null.
referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response. Format:
YYYY-MM-DDTHH:mm:ss.SSSZin UTC, orYYYY-MM-DDTHH:mm:ss.SSS+hh:mmin the requested timeZone, for example2026-10-08T15:00:00.000+09:00.
null{ "type": "null" }