{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/citi/main/json-schema/citi-fx-query-response-schema.json", "title": "FxQueryResponse", "x-generated": "2026-10-12", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/citi-fx-api-openapi.yml#/components/schemas/Fx-Query-Response", "allOf": [ { "$ref": "#/$defs/Multiple-Currency-Amount" }, { "type": "object", "title": "Fx-Query-Response", "required": [ "buy_currency_code", "buy_amount", "sell_currency_code", "sell_amount", "fx_rate", "reference_id" ], "properties": { "fx_rate_id": { "$ref": "#/$defs/Fx-Rate-Id" }, "fx_rate": { "$ref": "#/$defs/Fx-Rate" }, "value_date": { "allOf": [ { "$ref": "#/$defs/Common-Date" } ], "title": "value_date", "description": "Settlement date of the FX transaction (yyyy-MM-dd, not required for Instant FX transactions)." }, "expiry_time": { "allOf": [ { "$ref": "#/$defs/Created-Time" } ], "title": "expiry_time", "description": "The expiration timestamp of the quote. If the transaction is not executed, the `fx_rate_id` will expire after the date and time. After the expiration timestamp, you should request new fx_rate format : YYYY-MM-DDTHH:mm:ssZ)." }, "reference_id": { "$ref": "#/$defs/Reference-Id" } } } ], "$defs": { "Amount": { "type": "number", "title": "amount", "description": "Amount in currency.", "minimum": 0.01, "maximum": 10000000000000 }, "Common-Date": { "type": "string", "title": "date", "format": "date", "description": "Date in ISO 8601 (YYYY-MM-DD)." }, "Created-Time": { "type": "string", "format": "date-time", "description": "Date and time of the file created. Pattern YYYY-MM-DDTHH:mm:ssZ", "title": "created_time" }, "Currency-Code": { "type": "string", "title": "currency_code", "description": "The currency code in the transaction.", "pattern": "^[A-Z]{3}$" }, "Fx-Rate": { "type": "number", "title": "fx_rate", "description": "The indicative FX rate which is for reference only. The number indicates how much units of buy_currency you can get from one unit of sell_currency." }, "Fx-Rate-Id": { "type": "string", "title": "fx_rate_id", "description": "When you request a guaranteed quote of Instant FX and Reserved FX, the Citi will return a `fx_rate_id`, which is the unique ID only for guaranteed `fx_indi_rate. fx_rate_id is mandatory for other than USD to USD transfer.", "minLength": 1, "maxLength": 64 }, "Multiple-Currency-Amount": { "title": "FxQuery", "type": "object", "properties": { "buy_currency_code": { "allOf": [ { "$ref": "#/$defs/Currency-Code" } ], "title": "buy_currency_code", "description": "The currency that the client is buying." }, "buy_amount": { "allOf": [ { "$ref": "#/$defs/Amount" } ], "title": "buy_amount", "description": "The amount of buy_currency for the transaction. (You ONLY need to define one amount, either buy_amount or sell_amount in a request.)" }, "sell_currency_code": { "allOf": [ { "$ref": "#/$defs/Currency-Code" } ], "title": "sell_currency_code", "description": "The currency that the client is selling." }, "sell_amount": { "allOf": [ { "$ref": "#/$defs/Amount" } ], "title": "sell_amount", "description": "The amount of sell_currency for the transaction. (You ONLY need to define one amount, either buy_amount or sell_amount in a request.)" } } }, "Reference-Id": { "type": "string", "title": "reference_id", "description": "Unique identifier for this request from your system.", "minLength": 1, "maxLength": 120 } } }