SNAP / MCP
MCP 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/mcp / Streamable HTTP / JSON-RPC
Connections and calls require OAuth authentication. The available tools depend on granted scopes. This reference captures tools/list with the full rates-read scope.
MCP connection guideTOOLget_tenors
Supported Tenors
/v1/fx/tenors. Lists supported tenors separately for USD interest rates (usdRate) and FX forwards (fxForward).
The lists are independent of quote availability and can differ; a rate tenor does not imply an FX forward tenor.
Input schema
inputSchema JSON
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
fxForwardstring[]RequiredusdRatestring[]Required
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"Tenor": {
"type": "string",
"enum": [
"1D",
"SN",
"1W",
"2W",
"3W",
"1M",
"2M",
"3M",
"4M",
"5M",
"6M",
"7M",
"8M",
"9M",
"10M",
"11M",
"1Y",
"12M"
]
}
},
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"fxForward": {
"type": "array",
"items": {
"$ref": "#/$defs/Tenor"
}
},
"usdRate": {
"type": "array",
"items": {
"$ref": "#/$defs/Tenor"
}
}
},
"required": [
"fxForward",
"usdRate"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Supported Tenors",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLget_currency_pairs
Supported Currency Pairs
/v1/fx/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.
Input schema
inputSchema JSON
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
currenciesstring[]Requiredpairsstring[]Required
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"currencies": {
"type": "array",
"items": {
"type": "string",
"enum": [
"JPY",
"KRW",
"USD"
]
}
},
"pairs": {
"type": "array",
"items": {
"type": "string",
"enum": [
"USDKRW",
"USDJPY",
"JPYKRW"
]
}
}
},
"required": [
"currencies",
"pairs"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Supported Currency Pairs",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLget_config
Calculation Conventions
/v1/fx/config. 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. curveMethod describes
the active production calculation path: OIS_BOOTSTRAP builds USD from SOFR OIS quotes, while
FX_SWAP_IMPLIED derives KRW and JPY from the USD curve and FX spot and swap points.
daycount is the convention used to report rates from that curve. It does not advertise
an OIS convention that the production curve builder does not use.
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.
Input schema
inputSchema JSON
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
currenciesobject[]RequiredNested fields
calendarstringRequiredUSD_NEWYORK | KRW_SEOUL | JPY_TOKYOcurrencystringRequiredJPY | KRW | USDcurveMethodstringRequiredMethod used to construct the published curve for this currency.
OIS_BOOTSTRAP | FX_SWAP_IMPLIEDdaycountstringRequiredActual-day convention used when reporting rates from this curve.
ACT/360 | ACT/365
pairsobject[]RequiredNested fields
basestringRequiredJPY | KRW | USDpairstringRequiredUSDKRW | USDJPY | JPYKRWpointFactornumberRequiredMultiplier from the quote-currency change to swap points: points = (outright - spot) * pointFactor. Convert points back by dividing by this value.
quotestringRequiredJPY | KRW | USDspotLagintegerRequired
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"Currency": {
"type": "string",
"enum": [
"JPY",
"KRW",
"USD"
]
}
},
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"currencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"calendar": {
"type": "string",
"enum": [
"USD_NEWYORK",
"KRW_SEOUL",
"JPY_TOKYO"
]
},
"currency": {
"$ref": "#/$defs/Currency"
},
"curveMethod": {
"type": "string",
"enum": [
"OIS_BOOTSTRAP",
"FX_SWAP_IMPLIED"
],
"description": "Method used to construct the published curve for this currency."
},
"daycount": {
"type": "string",
"enum": [
"ACT/360",
"ACT/365"
],
"description": "Actual-day convention used when reporting rates from this curve."
}
},
"required": [
"calendar",
"currency",
"curveMethod",
"daycount"
]
}
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"base": {
"$ref": "#/$defs/Currency"
},
"pair": {
"type": "string",
"enum": [
"USDKRW",
"USDJPY",
"JPYKRW"
]
},
"pointFactor": {
"type": "number",
"description": "Multiplier from the quote-currency change to swap points: points = (outright - spot) * pointFactor. Convert points back by dividing by this value."
},
"quote": {
"$ref": "#/$defs/Currency"
},
"spotLag": {
"type": "integer"
}
},
"required": [
"base",
"pair",
"pointFactor",
"quote",
"spotLag"
]
}
}
},
"required": [
"currencies",
"pairs"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Calculation Conventions",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLcalculate_dates
Settlement and Maturity Dates
/v1/fx/calculate-dates. 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.
Input schema
anchorstringSPOT | OVERNIGHT | TOM_NEXT | SPOT_NEXTDefault:
SPOTeomRulebooleanApplies to month and year tenors only. Day and week tenors roll Following and are unaffected by this flag;
eomRuleAppliedreports what was used.Default:
truepairstringDefault:
USDKRWspotDaysinteger | nulltenorstringRequired1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12MtradeDatestring / dateRequired
inputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"anchor": {
"type": "string",
"enum": [
"SPOT",
"OVERNIGHT",
"TOM_NEXT",
"SPOT_NEXT"
],
"default": "SPOT"
},
"eomRule": {
"type": "boolean",
"description": "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
},
"pair": {
"type": "string",
"default": "USDKRW"
},
"spotDays": {
"type": [
"integer",
"null"
]
},
"tenor": {
"type": "string",
"enum": [
"1D",
"SN",
"1W",
"2W",
"3W",
"1M",
"2M",
"3M",
"4M",
"5M",
"6M",
"7M",
"8M",
"9M",
"10M",
"11M",
"1Y",
"12M"
]
},
"tradeDate": {
"type": "string",
"format": "date"
}
},
"required": [
"tenor",
"tradeDate"
]
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
businessDaysinteger | nullcalendarsstring[]RequireddaysToMaturityinteger | nulleomRuleAppliedbooleanRequiredisSpotDateEomboolean | nullisTradeDateBusinessDayboolean | nullmaturityDatestring | null / datepairstringRequiredspotDatestring | null / datespotDaysintegerRequiredtenorstringRequired1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12MtradeDatestring / dateRequired
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"businessDays": {
"type": [
"integer",
"null"
]
},
"calendars": {
"type": "array",
"items": {
"type": "string"
}
},
"daysToMaturity": {
"type": [
"integer",
"null"
]
},
"eomRuleApplied": {
"type": "boolean"
},
"isSpotDateEom": {
"type": [
"boolean",
"null"
]
},
"isTradeDateBusinessDay": {
"type": [
"boolean",
"null"
]
},
"maturityDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"pair": {
"type": "string"
},
"spotDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"spotDays": {
"type": "integer"
},
"tenor": {
"type": "string",
"enum": [
"1D",
"SN",
"1W",
"2W",
"3W",
"1M",
"2M",
"3M",
"4M",
"5M",
"6M",
"7M",
"8M",
"9M",
"10M",
"11M",
"1Y",
"12M"
]
},
"tradeDate": {
"type": "string",
"format": "date"
}
},
"required": [
"calendars",
"eomRuleApplied",
"pair",
"spotDays",
"tenor",
"tradeDate"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Settlement and Maturity Dates",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLget_spot
Spot Exchange Rate
/v1/fx/spot. Returns the spot exchange rate and settlement date 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 per USD 1; spotRate is their midpoint, or the available single rate.
Missing or expired quotes produce null price fields and null referenceAt. referenceAt is the observation
time of the quote, not a retrieval time, and uses ISO-8601 with milliseconds in timeZone (UTC when omitted or null).
lastTradedPrice and lastTradedAt describe the last available USDKRW trade, independently of quote expiry.
The trade timestamp includes the date and requested timeZone offset; lastTradedAtKst remains KST-fixed. Its date is inferred from the observation date
and may be inaccurate for trades retransmitted after a market closure. Missing trade values are null;
a last trade does not necessarily represent a recent trade.
Input schema
pairstring통화쌍
Default:
USDKRWtimeZonestring | 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
inputSchema JSON
{
"type": "object",
"properties": {
"pair": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"description": "통화쌍",
"default": "USDKRW"
},
"timeZone": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"string",
"null"
],
"description": "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"
}
},
"required": [],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
asknumber | nullAsk in KRW or JPY per USD; null when this side is not provided.
bidnumber | nullBid in KRW or JPY per USD; null when this side is not provided.
lastTradedAtstring | null / date-timeEstimated trade date and time in timeZone (default UTC), with seconds; null without a trade clock. Date is inferred from the observation and can be inaccurate after closures.
lastTradedAtKststring | null / date-timeKST-fixed legacy timestamp. Use lastTradedAt for the requested timeZone.
lastTradedPricenumber | nullLast traded price from the latest priced LS observation; USDKRW only, otherwise null.
pairstringRequiredreferenceAtstring | null / date-timeSnapshot observation time in timeZone (default UTC), with milliseconds; null when no snapshot exists.
spotDatestring | null / datespotRatenumber | null
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"ask": {
"type": [
"number",
"null"
],
"description": "Ask in KRW or JPY per USD; null when this side is not provided."
},
"bid": {
"type": [
"number",
"null"
],
"description": "Bid in KRW or JPY per USD; null when this side is not provided."
},
"lastTradedAt": {
"type": [
"string",
"null"
],
"description": "Estimated trade date and time in timeZone (default UTC), with seconds; null without a trade clock. Date is inferred from the observation and can be inaccurate after closures.",
"format": "date-time"
},
"lastTradedAtKst": {
"type": [
"string",
"null"
],
"description": "KST-fixed legacy timestamp. Use lastTradedAt for the requested timeZone.",
"format": "date-time"
},
"lastTradedPrice": {
"type": [
"number",
"null"
],
"description": "Last traded price from the latest priced LS observation; USDKRW only, otherwise null."
},
"pair": {
"type": "string"
},
"referenceAt": {
"type": [
"string",
"null"
],
"description": "Snapshot observation time in timeZone (default UTC), with milliseconds; null when no snapshot exists.",
"format": "date-time"
},
"spotDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"spotRate": {
"type": [
"number",
"null"
]
}
},
"required": [
"pair"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Spot Exchange Rate",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLcalculate_forward
Forward Exchange Rate
/v1/fx/calculate-forward. Calculates swap points and a forward exchange rate between spotDate and the later targetDate.
The requested spot date anchors the calculation; points are the difference between the curve values at both dates.
Standard tenors use available values and intermediate dates use linear interpolation in calendar days.
There is no extrapolation beyond the curve: unavailable points or forward rates are null.
midPoints is in pips and mid is in currency units (midPoints / pointFactor).
Read pointFactor for the pair from GET /v1/fx/config.
referenceAt is the observation time in timeZone (UTC when omitted or null); calendar dates are unchanged.
Input schema
pairstringDefault:
USDKRWspotDatestring / dateRequiredtargetDatestring / dateRequiredtimeZonestring | 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
inputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"pair": {
"type": "string",
"default": "USDKRW"
},
"spotDate": {
"type": "string",
"format": "date"
},
"targetDate": {
"type": "string",
"format": "date"
},
"timeZone": {
"type": [
"string",
"null"
],
"description": "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"
}
},
"required": [
"spotDate",
"targetDate"
]
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
daysintegerRequiredmidnumber | nullmidForwardnumber | nullmidPointsnumber | nullpairstringRequiredreferenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.
spotDatestring / dateRequiredspotRatenumber | nulltargetDatestring / dateRequired
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"days": {
"type": "integer"
},
"mid": {
"type": [
"number",
"null"
]
},
"midForward": {
"type": [
"number",
"null"
]
},
"midPoints": {
"type": [
"number",
"null"
]
},
"pair": {
"type": "string"
},
"referenceAt": {
"type": [
"string",
"null"
],
"description": "Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.",
"format": "date-time"
},
"spotDate": {
"type": "string",
"format": "date"
},
"spotRate": {
"type": [
"number",
"null"
]
},
"targetDate": {
"type": "string",
"format": "date"
}
},
"required": [
"days",
"pair",
"spotDate",
"targetDate"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Forward Exchange Rate",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLget_term_structure
Swap Point Term Structure
/v1/fx/term-structure. Returns available swap points by tenor for the currency pair. Missing tenors are omitted.
bid, ask and mid are quote-currency units per USD 1; negative and zero points are valid.
mid is the average of available two-sided quotes. Single-value quotes can have null bid and ask.
midPips is mid converted to pips using the pair's pointFactor from GET /v1/fx/config.
An omitted spotDate uses the standard spot settlement date.
days is the calendar-day interval to maturity; spPerDay is mid / days and is null for missing or nonpositive days.
Missing dates are not estimated. 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.
Input schema
pairstring통화쌍
Default:
USDKRWspotDatestring / date기준 결제일. 생략하면 스냅샷의 결제일
timeZonestring | 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
inputSchema JSON
{
"type": "object",
"properties": {
"pair": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"description": "통화쌍",
"default": "USDKRW"
},
"spotDate": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date",
"description": "기준 결제일. 생략하면 스냅샷의 결제일"
},
"timeZone": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"string",
"null"
],
"description": "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"
}
},
"required": [],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
pairstringRequiredpointsobject[]RequiredNested fields
asknumber | nullbidnumber | nulldaysinteger | nullmaturitystring | null / dateUse maturityDate.
midnumber | nullmidPipsnumber | nullspPerDaynumber | nulltenorstringRequired
referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.
referenceDatestring | null / datespotDatestring | null / datespotRatenumber | null
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"pair": {
"type": "string"
},
"points": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ask": {
"type": [
"number",
"null"
]
},
"bid": {
"type": [
"number",
"null"
]
},
"days": {
"type": [
"integer",
"null"
]
},
"maturity": {
"type": [
"string",
"null"
],
"format": "date",
"description": "Use maturityDate."
},
"mid": {
"type": [
"number",
"null"
]
},
"midPips": {
"type": [
"number",
"null"
]
},
"spPerDay": {
"type": [
"number",
"null"
]
},
"tenor": {
"type": "string"
}
},
"required": [
"tenor"
]
}
},
"referenceAt": {
"type": [
"string",
"null"
],
"description": "Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.",
"format": "date-time"
},
"referenceDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"spotDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"spotRate": {
"type": [
"number",
"null"
]
}
},
"required": [
"pair",
"points"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Swap Point Term Structure",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLget_swap_point
Forward Swap Points
/v1/fx/swap-point. Returns forward-starting swap points between nearDate and farDate, as far-leg points minus near-leg points.
nearDate must follow spotDate and farDate must follow nearDate.
Each leg uses the same interpolation as the forward calculation. If either leg is unavailable or outside
the curve, fxf is null. referenceAt is the observation time in timeZone (UTC when omitted or null); calendar dates are unchanged.
Input schema
pairstring통화쌍
Default:
USDKRWnearDatestring / dateRequirednear leg 만기
farDatestring / dateRequiredfar leg 만기
spotDatestring / date기준 결제일. 생략하면 스냅샷의 결제일
timeZonestring | 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
inputSchema JSON
{
"type": "object",
"properties": {
"pair": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"description": "통화쌍",
"default": "USDKRW"
},
"nearDate": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date",
"description": "near leg 만기"
},
"farDate": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date",
"description": "far leg 만기"
},
"spotDate": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date",
"description": "기준 결제일. 생략하면 스냅샷의 결제일"
},
"timeZone": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"string",
"null"
],
"description": "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"
}
},
"required": [
"nearDate",
"farDate"
],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
farobjectRequiredNested fields
fwdMidnumber | nullmidnumber | null
farDaysintegerRequiredfarMaturitystring / dateRequiredUse farMaturityDate.
fxfobjectRequiredNested fields
midnumber | nullmidPipsnumber | null
nearobjectRequiredNested fields
fwdMidnumber | nullmidnumber | null
nearDaysintegerRequirednearMaturitystring / dateRequiredUse nearMaturityDate.
pairstringRequiredreferenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.
spotDatestring | null / datespotRatenumber | null
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"SwapPointLeg": {
"type": "object",
"properties": {
"fwdMid": {
"type": [
"number",
"null"
]
},
"mid": {
"type": [
"number",
"null"
]
}
}
}
},
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"far": {
"$ref": "#/$defs/SwapPointLeg"
},
"farDays": {
"type": "integer"
},
"farMaturity": {
"type": "string",
"format": "date",
"description": "Use farMaturityDate."
},
"fxf": {
"type": "object",
"properties": {
"mid": {
"type": [
"number",
"null"
]
},
"midPips": {
"type": [
"number",
"null"
]
}
}
},
"near": {
"$ref": "#/$defs/SwapPointLeg"
},
"nearDays": {
"type": "integer"
},
"nearMaturity": {
"type": "string",
"format": "date",
"description": "Use nearMaturityDate."
},
"pair": {
"type": "string"
},
"referenceAt": {
"type": [
"string",
"null"
],
"description": "Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.",
"format": "date-time"
},
"spotDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"spotRate": {
"type": [
"number",
"null"
]
}
},
"required": [
"far",
"farDays",
"farMaturity",
"fxf",
"near",
"nearDays",
"nearMaturity",
"pair"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Forward Swap Points",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLget_zero_rate
Zero Rate
/v1/fx/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 using the convention that built that curve: SOFR OIS termination for USD, the FX forward value date for the implied KRW curve.
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.
Input schema
currencystringRequired통화. USD와 KRW.
tenor는 그 커브를 세운 관례로 만기일이 된다datestring / dateDeprecatedDeprecated alias for maturityDate. Do not supply both date names.
tenorstring만기.
maturityDate와 택일1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12MtimeZonestring | nullIANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged.
Default:
UTCmaturityDatestring / dateMaturity calendar date. Use either maturityDate or tenor, not both.
inputSchema JSON
{
"type": "object",
"properties": {
"currency": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"description": "통화. USD와 KRW. `tenor`는 그 커브를 세운 관례로 만기일이 된다"
},
"date": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date",
"deprecated": true,
"description": "Deprecated alias for maturityDate. Do not supply both date names."
},
"tenor": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"enum": [
"1D",
"SN",
"1W",
"2W",
"3W",
"1M",
"2M",
"3M",
"4M",
"5M",
"6M",
"7M",
"8M",
"9M",
"10M",
"11M",
"1Y",
"12M"
],
"description": "만기. `maturityDate`와 택일"
},
"timeZone": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"string",
"null"
],
"description": "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"
},
"maturityDate": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date",
"description": "Maturity calendar date. Use either maturityDate or tenor, not both."
}
},
"required": [
"currency"
],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | null | objectNested fields
object | nullcurrencystringRequiredJPY | KRW | USDcurveBaseDatestring | null / datedatestring | null / dateUse maturityDate.
daycountnull | stringNested fields
null{ "type": "null" }string{ "type": "string", "enum": [ "ACT/360", "ACT/365" ] }referenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.
tenornull | stringNested fields
null{ "type": "null" }string{ "type": "string", "enum": [ "1D", "SN", "1W", "2W", "3W", "1M", "2M", "3M", "4M", "5M", "6M", "7M", "8M", "9M", "10M", "11M", "1Y", "12M" ] }yearFractionnumber | nullzeroRatenumber | null
object{ "description": "payload. 실패 응답에서는 항상 `null`이다." }messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"allOf": [
{
"type": [
"object",
"null"
],
"properties": {
"currency": {
"type": "string",
"enum": [
"JPY",
"KRW",
"USD"
]
},
"curveBaseDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"date": {
"type": [
"string",
"null"
],
"format": "date",
"description": "Use maturityDate."
},
"daycount": {
"anyOf": [
{
"type": "null"
},
{
"type": "string",
"enum": [
"ACT/360",
"ACT/365"
]
}
]
},
"referenceAt": {
"type": [
"string",
"null"
],
"description": "Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.",
"format": "date-time"
},
"tenor": {
"anyOf": [
{
"type": "null"
},
{
"type": "string",
"enum": [
"1D",
"SN",
"1W",
"2W",
"3W",
"1M",
"2M",
"3M",
"4M",
"5M",
"6M",
"7M",
"8M",
"9M",
"10M",
"11M",
"1Y",
"12M"
]
}
]
},
"yearFraction": {
"type": [
"number",
"null"
]
},
"zeroRate": {
"type": [
"number",
"null"
]
}
},
"required": [
"currency"
],
"description": "지정 통화·날짜의 zero rate. 커브 범위 밖이면 `zeroRate`가 `null`이다."
},
{
"description": "payload. 실패 응답에서는 항상 `null`이다."
}
]
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Zero Rate",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLget_discount_factor
Discount Factor
/v1/fx/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 using the convention that built that curve: SOFR OIS termination for USD, the FX forward value date for the implied KRW curve.
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.
Input schema
currencystringRequired통화. USD와 KRW.
tenor는 그 커브를 세운 관례로 만기일이 된다datestring / dateDeprecatedDeprecated alias for maturityDate. Do not supply both date names.
tenorstring만기.
maturityDate와 택일1D | SN | 1W | 2W | 3W | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M | 10M | 11M | 1Y | 12MtimeZonestring | nullIANA area/location time zone for response timestamps, for example Asia/Seoul. Omitted or null means UTC. Calendar dates and prices are unchanged.
Default:
UTCmaturityDatestring / dateMaturity calendar date. Use either maturityDate or tenor, not both.
inputSchema JSON
{
"type": "object",
"properties": {
"currency": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"description": "통화. USD와 KRW. `tenor`는 그 커브를 세운 관례로 만기일이 된다"
},
"date": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date",
"deprecated": true,
"description": "Deprecated alias for maturityDate. Do not supply both date names."
},
"tenor": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"enum": [
"1D",
"SN",
"1W",
"2W",
"3W",
"1M",
"2M",
"3M",
"4M",
"5M",
"6M",
"7M",
"8M",
"9M",
"10M",
"11M",
"1Y",
"12M"
],
"description": "만기. `maturityDate`와 택일"
},
"timeZone": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"string",
"null"
],
"description": "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"
},
"maturityDate": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date",
"description": "Maturity calendar date. Use either maturityDate or tenor, not both."
}
},
"required": [
"currency"
],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
currencystringRequiredJPY | KRW | USDcurveBaseDatestring | null / datedatestring | null / dateUse maturityDate.
daycountnull | stringNested fields
null{ "type": "null" }string{ "type": "string", "enum": [ "ACT/360", "ACT/365" ] }discountFactornumber | nullreferenceAtstring | null / date-timeObservation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.
tenornull | stringNested fields
null{ "type": "null" }string{ "type": "string", "enum": [ "1D", "SN", "1W", "2W", "3W", "1M", "2M", "3M", "4M", "5M", "6M", "7M", "8M", "9M", "10M", "11M", "1Y", "12M" ] }yearFractionnumber | nullzeroRatenumber | null
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"currency": {
"type": "string",
"enum": [
"JPY",
"KRW",
"USD"
]
},
"curveBaseDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"date": {
"type": [
"string",
"null"
],
"format": "date",
"description": "Use maturityDate."
},
"daycount": {
"anyOf": [
{
"type": "null"
},
{
"type": "string",
"enum": [
"ACT/360",
"ACT/365"
]
}
]
},
"discountFactor": {
"type": [
"number",
"null"
]
},
"referenceAt": {
"type": [
"string",
"null"
],
"description": "Observation time of the source values in timeZone (default UTC), with milliseconds; null when no observation backs the response.",
"format": "date-time"
},
"tenor": {
"anyOf": [
{
"type": "null"
},
{
"type": "string",
"enum": [
"1D",
"SN",
"1W",
"2W",
"3W",
"1M",
"2M",
"3M",
"4M",
"5M",
"6M",
"7M",
"8M",
"9M",
"10M",
"11M",
"1Y",
"12M"
]
}
]
},
"yearFraction": {
"type": [
"number",
"null"
]
},
"zeroRate": {
"type": [
"number",
"null"
]
}
},
"required": [
"currency"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Discount Factor",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}TOOLget_business_day
Business Day
/v1/calendars/business-day. 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.
Input schema
datestring / dateRequiredcalendarstringRequiredUSD_NEWYORK | KRW_SEOUL | JPY_TOKYOoffsetintegerDefault:
0
inputSchema JSON
{
"type": "object",
"properties": {
"date": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"format": "date"
},
"calendar": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"enum": [
"USD_NEWYORK",
"KRW_SEOUL",
"JPY_TOKYO"
]
},
"offset": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "integer",
"default": 0
}
},
"required": [
"date",
"calendar"
],
"additionalProperties": true
}Result
codeintegerRequired성공은
0. 실패는 에러 번호(4000·4220·5000).dataobject | nullpayload. 실패 응답에서는 항상
null이다.Nested fields
calendarstringRequiredUSD_NEWYORK | KRW_SEOUL | JPY_TOKYOcertaintystringRequireddatestring / dateRequiredisBusinessDaybooleanRequiredreasonstringRequiredresultDatestring / dateRequired
messagestringRequired성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지.
metaobject | objectRequiredNested fields
objectclientRequestIdstring | nullRequiredClient correlation value received in X-Request-ID; null when absent.
requestAtstringRequiredUTC time when the server received the request.
requestIdstringRequiredServer-generated UUID for response and log correlation.
responseAtstringRequiredUTC time when the response envelope was created.
object{ "description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터." }
outputSchema JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "성공은 `0`. 실패는 에러 번호(`4000`·`4220`·`5000`)."
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"calendar": {
"type": "string",
"enum": [
"USD_NEWYORK",
"KRW_SEOUL",
"JPY_TOKYO"
]
},
"certainty": {
"type": "string"
},
"date": {
"type": "string",
"format": "date"
},
"isBusinessDay": {
"type": "boolean"
},
"reason": {
"type": "string"
},
"resultDate": {
"type": "string",
"format": "date"
}
},
"required": [
"calendar",
"certainty",
"date",
"isBusinessDay",
"reason",
"resultDate"
],
"description": "payload. 실패 응답에서는 항상 `null`이다."
},
"message": {
"type": "string",
"description": "성공은 빈 문자열. 실패는 유저에게 노출해도 되는 메시지."
},
"meta": {
"allOf": [
{
"type": "object",
"properties": {
"clientRequestId": {
"type": [
"string",
"null"
],
"description": "Client correlation value received in X-Request-ID; null when absent."
},
"requestAt": {
"type": "string",
"description": "UTC time when the server received the request."
},
"requestId": {
"type": "string",
"description": "Server-generated UUID for response and log correlation."
},
"responseAt": {
"type": "string",
"description": "UTC time when the response envelope was created."
}
},
"required": [
"clientRequestId",
"requestAt",
"requestId",
"responseAt"
],
"description": "Request-response metadata shared by REST and MCP results."
},
{
"description": "REST와 MCP가 공유하는 요청·응답 처리 메타데이터."
}
]
}
},
"required": [
"code",
"message",
"meta"
],
"description": "\n SNAP 응답 래퍼. 성공은 `code: 0` · `message: \"\"`이고 payload는 `data`에 담긴다.\n 프런트엔드는 `code`로 분기한다.\n\n **\"데이터 없음\"은 실패가 아니다.** 요청이 유효한데 스냅샷이 아직 안 들어왔거나 요청한\n 만기가 커브 범위 밖이면 `code: 0`으로 응답하고 `data` 안쪽 필드를 `null`로 둔다.\n "
}Tool annotations
{
"title": "Business Day",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
}Call results and errors
tools/call returns content in result.content. Treat isError: true as a failed call. Valid requests can return code 0 with null fields when market data is unavailable. Do not turn null into zero. structuredContent and content JSON follow the REST response envelope and its meta contract. The X-Request-ID sent with tools/call returns as meta.clientRequestId and differs from the server UUID in meta.requestId.