openapi: 3.1.0 info: version: '' title: InstantFX Quote Request description: > FX quote request API facilitates rate requests for either a specific currency pair or all configured currency pairs over a session. FX quote report request API facilitates historic rate pull for a rate set ID or for a tradedate over a session. ### Web Sockets The response to this endpoint will be sent via web socket connection. Refer to the User Guide tab for more information on enabling a web socket connection. This allows you to integrate the responses you receive from Citi into your workflow for automated processing. Ensure that you have an open web socket session before sending any requests to consume the response. ### Trading Rules Please contact your Citi representative to obtain a list of currency pairs currently supported by Instant FX. #### Platform Operational Hours The Instant FX platform is available during standard FX market trading hours. The platform is not available during weekend hours. * Start of business is Monday 07:00 NZDT New Zealand/Auckland * End of business is Friday 17:00 EST New York servers: - url: https://api.citivelocity.com/markets description: production URL - url: https://sandbox.api.citivelocity.com/markets description: sanbox URL security: - OAuth2: - fxapi paths: /fxgateway/async/instantfxquote/api/v1: post: parameters: - name: client_id in: query description: >- Your unique identifier shared during your API onboarding. It is the same client_id used for oauth token generation. required: true schema: type: string summary: Quote Request and Quote Report Request API description: > This endpoint facilitates requests for active rate enquiries - for a specific currency pair or all currency pairs and historic rate enquiries - for all currency pairs. The response will be sent via web socket connection. For Quote Report Request, while the fields ‘tradeDate’, ‘rateSetId’, are optional, you must send them in at least one of the combinations below to fetch the results: a) ‘tradeDate’ b) ‘rateSetId’ requestBody: content: application/json: schema: oneOf: - $ref: '#/components/schemas/FXQuoteRequest' - $ref: '#/components/schemas/FXQuoteReportRequest' required: true responses: '200': description: >- OK Acknowledged. Note: The quote response message will be sent via web socket. Please see the User Guide tab for more information on using the web socket connection. In rate response, if you are configured to have time-based guaranteed rates, then all live rates are included. Expired rates are omitted in the sent response. In rate report response, if you are configured to have time based guaranteed rates, then all the tier-based rates are included. The different spot rates for a given currency pair will have different spreads and can be viewed based on the `validUntilTime` field. Missing rates are omitted in the rates and rates report response unless configured to receive missing rates. content: application/json: schema: oneOf: - $ref: '#/components/schemas/FXQuoteResponse' - $ref: '#/components/schemas/FXQuoteReportResponse' '401': description: Unauthorized user error '403': description: Access Forbidden error '500': description: Internal Server Error x-codeSamples: - lang: cURL label: cURL source: >- curl --request POST \ --url 'https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2' \ --header 'accept: application/json' \ --header 'authorization: Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ' \ --header 'content-type: application/json' \ --data '{ "action": "rate-request", "senderCompId": "IFXCLIENT0", "onBehalfOfCompId": "IFXCLIENT0", "jsonReqId": "brs-25-09-2018-01", "sendingTime": "20180925-14:41:56.807", "symbol": "ALL", "account": "Xxxxxxxxxxx" }' - lang: python label: Python source: >- import http.client #If a proxy is used, set the tunnel as per below: #conn=http.client.HTTPSConnection("your_proxy_host",your_proxy_port) #conn.set_tunnel("api.citivelocity.com",443) conn = http.client.HTTPSConnection("api.citivelocity.com") payload = "{ \"action\": \"rate-request\", \"senderCompId\": \"IFXCLIENT0\", \"onBehalfOfCompId\": \"IFXCLIENT0\", \"jsonReqId\": \"brs-25-09-2018-01\", \"sendingTime\": \"20180925-14:41:56.807\", \"symbol\": \"ALL\", \"account\": \"Xxxxxxxxxxx\" }" headers = { 'content-type': "application/json", 'accept': "application/json", 'authorization': "Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ" } conn.request("POST", "/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8")) - lang: PHP label: PHP source: >- "https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2 ", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => " ", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{ \"action\": \"rate-request\", \"senderCompId\": \"IFXCLIENT0\", \"onBehalfOfCompId\": \"IFXCLIENT0\", \"jsonReqId\": \"brs-25-09-2018-01\", \"sendingTime\": \"20180925-14:41:56.807\", \"symbol\": \"ALL\", \"account\": \"Xxxxxxxxxxx\" }", CURLOPT_HTTPHEADER => array( "accept: application/json", "authorization: Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ", "content-type: application/json", ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } - lang: JAVA label: Java source: |- /**Include following Maven dependency com.squareup.okhttp3 okhttp3 3.9.0 */ import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class Main { public static void main(String[] args) { OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{ \"action\": \"rate-request\", \"senderCompId\": \"IFXCLIENT0\", \"onBehalfOfCompId\": \"IFXCLIENT0\", \"jsonReqId\": \"brs-25-09-2018-01\", \"sendingTime\": \"20180925-14:41:56.807\", \"symbol\": \"ALL\", \"account\": \"Xxxxxxxxxxx\" }"); Request request = new Request.Builder() .url("https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2") .post(body) .addHeader("content-type", "application/json") .addHeader("accept", "application/json") .addHeader("authorization", "Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ") .build(); try { Response response = client.newCall(request).execute(); } catch (IOException e) { e.printStackTrace(); } } } - lang: Javacript label: Node source: |2- // Install request by running "npm install --save request" var request = require("request"); var options = { method: 'POST', url: 'https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1', qs: { client_id: 'REPLACE_THIS_VALUE' }, headers: { authorization: 'Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ', accept: 'application/json', 'content-type': 'application/json' }, body: { "action": "rate-request", "senderCompId": "IFXCLIENT0", "onBehalfOfCompId": "IFXCLIENT0", "jsonReqId": "brs-25-09-2018-01", "sendingTime": "20180925-14:41:56.807", "symbol": "ALL", "account": "Xxxxxxxxxxx" }, json: true }; request(options, function (error, response, body) { if (error) return console.error('Failed: %s', error.message); console.log('Success: ', body); }); - lang: Go label: Go source: >- package main import ( "fmt" "strings" "net/http" "io/ioutil" ) func main() { url := "https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2" payload := strings.NewReader("{ \"action\": \"rate-request\", \"senderCompId\": \"IFXCLIENT0\", \"onBehalfOfCompId\": \"IFXCLIENT0\", \"jsonReqId\": \"brs-25-09-2018-01\", \"sendingTime\": \"20180925-14:41:56.807\", \"symbol\": \"ALL\", \"account\": \"Xxxxxxxxxxx\" }") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("content-type", "application/json") req.Header.Add("accept", "application/json") req.Header.Add("authorization", "Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } - lang: Swift label: Swift source: >- import Foundation let headers = [ "content-type": "application/json", "authorization": "Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ", "accept": "application/json" var request = URLRequest(url: URL(string: "https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2")!, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 10.0) let data: [String: Any] = [ "action": "rate-request", "senderCompId": "IFXCLIENT0", "onBehalfOfCompId": "IFXCLIENT0", "jsonReqId": "brs-25-09-2018-01", "sendingTime": "20180925-14:41:56.807", "symbol": "ALL", "account": "Xxxxxxxxxxx" ] let jsonData: Data do { jsonData = try JSONSerialization.data(withJSONObject: data, options: []) request.httpBody = jsonData } catch { print("Error: cannot create JSON from todo") } request.httpMethod = "POST" request.allHTTPHeaderFields = headers let session = URLSession.shared let task = session.dataTask(with: request, completionHandler: { (data, response, error) in guard let data = data, error == nil else { // check for fundamental networking error print("error=\(String(describing: error))") return } if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors print("statusCode should be 200, but is \(httpStatus.statusCode)") print("response = \(String(describing: response))") } let responseString = String(data: data, encoding: .utf8) print("responseString = \(String(describing: responseString))") }) task.resume() - lang: R label: R source: >- ## install the packages httr,jsonlite library(httr) library(jsonlite) url<- 'https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2' req<- '{ "action": "rate-request", "senderCompId": "IFXCLIENT0", "onBehalfOfCompId": "IFXCLIENT0", "jsonReqId": "brs-25-09-2018-01", "sendingTime": "20180925-14:41:56.807", "symbol": "ALL", "account": "Xxxxxxxxxxx" }' resp<- POST(url , body=req, add_headers("accept" = "applicaton/json","authorization" ="Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ", "content-type" = "application/json")) data<- (toJSON(content(resp, as = "parsed"))) prettify(data) - lang: Ruby label: Ruby source: >- require 'uri' require 'openssl' require 'net/http' url = URI("https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_PEER request = Net::HTTP::Post.new(url) request["content-type"] = 'application/json' request["accept"] = 'application/json' request["authorization"] = 'Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ' request.body = "{ \"action\": \"rate-request\", \"senderCompId\": \"IFXCLIENT0\", \"onBehalfOfCompId\": \"IFXCLIENT0\", \"jsonReqId\": \"brs-25-09-2018-01\", \"sendingTime\": \"20180925-14:41:56.807\", \"symbol\": \"ALL\", \"account\": \"Xxxxxxxxxxx\" }" response = http.request(request) puts response.read_body.force_encoding("utf-8") - lang: C# label: C# source: |- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System; using System.Web; using System.Net; using System.IO; namespace ConsoleProgram { public class Class1 { private const string URL = "https://api.citivelocity.com/markets/fxgateway/async/instantfxquote/api/v1?client_id=da41c8aa-c96b-437c-ad95-dade40c85fa2"; private const string DATA = @"{ \"action\": \"rate-request\", \"senderCompId\": \"IFXCLIENT0\", \"onBehalfOfCompId\": \"IFXCLIENT0\", \"jsonReqId\": \"brs-25-09-2018-01\", \"sendingTime\": \"20180925-14:41:56.807\", \"symbol\": \"ALL\", \"account\": \"Xxxxxxxxxxx\" }"; static void Main(string[] args) { Class1.CreateObject(); } private static void CreateObject() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "POST"; request.ContentType = "application/json"; request.ContentLength = DATA.Length; request.Headers["authorization"] = "Bearer AAIkZGE0MWM4YWEtYzk2Yi00MzdjLWFkOTUtZGFkZTQwYzg1ZmEy9q61Vj0ly6PHyTj84qbE5UaKGxf3fdz2ARY15Kszu-zf_SWLloRClpkg6aBQxG9I608HzrBB7FSV3DVJcyrpjsGtJx0rOfNEO_Sn708nqxQsBuPzn03YZ2OHi5Q0jLpLpvE-s5XoaAf74nLYKLHtnQ"; using (Stream webStream = request.GetRequestStream()) using (StreamWriter requestWriter = new StreamWriter(webStream, System.Text.Encoding.ASCII)) { requestWriter.Write(DATA); } try { WebResponse webResponse = request.GetResponse(); using (Stream webStream = webResponse.GetResponseStream() ?? Stream.Null) using (StreamReader responseReader = new StreamReader(webStream)) { string response = responseReader.ReadToEnd(); Console.Out.WriteLine(response); } }catch (Exception e) { Console.Out.WriteLine("-----------------"); Console.Out.WriteLine(e.Message); } } } } components: securitySchemes: OAuth2: type: oauth2 description: >- Citi Velocity APIs use the oAuth2 authentication scheme, which requires a bearer token to authenticate your API call. See the Citi Authentication API reference for information on requesting a token. flows: clientCredentials: scopes: fxapi: '' tokenUrl: https://api.citivelocity.com/markets/cv/api/fx/oauth2/token schemas: FXQuoteRequest: description: > Use this endpoint to request a rate for either a specific currency pair or all configured currency pairs over a session. type: object required: - action - jsonReqId - senderCompId - onBehalfOfCompId - sendingTime - account - symbol properties: action: type: string description: 'The service you are requesting. Allowed values: rate-request.' maxLength: 20 example: rate-request jsonReqId: type: string description: The unique identifier for the JSON request. Must be alphanumeric. maxLength: 100 example: Req20181011776 senderCompId: type: string description: >- The Citi-assigned value used to identify the message sender. This was assigned to you during onboarding. May contain special characters ( ‘_’, ‘.’, ‘-‘). maxLength: 20 example: ClientName onBehalfOfCompId: type: string description: >- The Citi-assigned value used to identify the sub-entity. This was assigned to you during onboarding. May contain special characters ( ‘_’, ‘.’, ‘-‘) maxLength: 20 example: ClientName sendingTime: type: string description: >- The time of the message transmission expressed in UTC (Universal Time Coordinated, also known as "GMT"). Format: YYYYMMDD-HH:MM:SS.mmm. example: 20180820-04:48:29.125 account: type: string description: >- Your Citi-assigned client identifier. May contain special characters ( ‘_’, ‘.’, ‘-‘) maxLength: 50 example: ABC123 symbol: type: string maxLength: 6 description: > The Currency Pair of the rate you are requesting. Note that the symbol value for the first request must be “ALL”. This will send the rate response for all of your configured currency pairs. You can then request rates for individual currency pairs in subsequent calls. Discuss sending the value of the currency pair in either BaseTerm format or alphabetic sort order with your Citi representative. example: GBPUSD example: action: rate-request jsonReqId: 8ee02197-d54d-41ac-84a4-b607462ba3b1 senderCompId: IFXCLIENT1 onBehalfOfCompId: IFXCLIENT1 sendingTime: 20180820-04:48:29.125 account: XXXXXXX symbol: ALL FXQuoteResponse: type: object required: - action - jsonReqId - senderCompId - onBehalfOfCompId - sendingTime properties: action: type: string description: Defines the action of the message. Value will be rate-response. example: rate-response maxLength: 20 jsonReqId: type: string description: The unique identifier for the JSON request. Format is alphanumeric. maxLength: 100 example: Req20181011776 senderCompId: type: string description: >- The Citi-assigned value used to identify the firm sending the message. May contain special characters ( ‘_’, ‘.’, ‘-‘). maxLength: 20 example: ClientName onBehalfOfCompId: type: string description: >- The Citi-assigned value used to identify the sub-entity. May contain special characters ( ‘_’, ‘.’, ‘-‘) maxLength: 20 example: ClientName sendingTime: type: string description: >- The time of message transmission. Always expressed in UTC (Universal Time Coordinated, also known as 'GMT'), format: YYYYMMDD-HH:MM:SS.mmm. example: 20180820-04:48:31.155 errorCode: type: integer description: >- The error code associated with the response. See the Error Codes tab for a complete list. example: 89 errorMessage: type: string description: >- The error message associated with the response. See the Error Codes tab for a complete list. example: No records found for the given inputs. ifxRates: type: array items: type: object required: - rateSetId - ccyPair - tenor - bidSpotRate - offerSpotRate - bidForwardPoints - offerForwardPoints - midPrice - validUntilTime - isValid - baseCurrency - ratePrecision - valueDate - bidOutrightRate - offerOutrightRate - fixingRate properties: rateSetId: type: integer description: The Citi-defined rate set ID that the rate belongs to. example: 123456 ccyPair: type: string description: >- A six character sorted alpha string comprising two ISO ccy codes that the rate applies to. example: EURUSD maxLength: 6 tenor: type: string description: The Tenor for the rate. maxLength: 3 example: SP bidSpotRate: type: string format: double description: The Bid Spot Rate for the currency pair. example: '1.04' offerSpotRate: type: string format: double description: The Offer Spot Rate for the currency pair. example: '1.06' bidForwardPoints: type: string format: double description: The Bid Forward Points for this tenor (Forward Pricing Only). example: '0.01' offerForwardPoints: type: string format: double description: >- The Offer Forward Points for this tenor (Forward Pricing Only). example: '0.02' midPrice: type: string format: double description: The Mid Price for the rate. example: '1.05' validUntilTime: type: string description: >- The time and date that this rate will expire. Note-This is held in GMT / UTC format: yyyyMM-dd HH:mm:ss.SSS example: 2018-10-15 16:30:00.000 GMT isValid: type: boolean description: >- A flag that shows that Citi was able to provide the requested rate. If this field is false, then midPrice, points, and rates are zero. example: true baseCurrency: type: string maxLength: 3 description: The base currency of the currency pair. example: EUR ratePrecision: type: integer description: >- The number of decimal places to which the rate(s) for this tenor should be quoted in regular base/term format. example: 2 isTradable: type: boolean description: >- A flag to indicate whether the rate is tradable by the client (TRUE) or is to be used for reference purposes only. example: true fixingRate: type: string format: double description: >- This field and `fixingsource` field will only be populated once a month on the agreed NDF fixing date. Will contain the fixing rate to be used for this currency pair. example: '0' fixingSource: type: string description: >- Will contain the fixing source associated with the fixingRate field. example: Citi New York 15:00 Fixing maxLength: 100 valueDate: type: string format: date description: 'The value date of the rate returned in format: yyyy-MM-dd.' example: '2011-05-06' drawDownValidUntilTime: description: > Optional field. The extended time and date that this rate will expire for sending draw down orders. This field will be sent only if you are enabled for sending pre-order requests. Note: this is held in GMT / UTC in format: yyyy-MM-dd HH:mm:ss.SSS. example: '2011-05-05 09:30:00.000' bidOutrightRate: type: string format: double description: The Bid Outright Rate for this currency pair. example: '111.24' offerOutrightRate: type: string format: double description: The Offer Outright Rate for this currency pair. example: '112.24' isMrf: description: >- Optional field. Applicable when MRF hourly updated rate option enabled. Flag indicates whether this is updated rate due to MRF True indicates updated rate. type: boolean example: true rateId: type: integer description: >- Optional field. Applicable when MRF hourly updated rate option enabled. Unique identifier of a rate. Value is incremental. Used for reference purpose to identify latest rate in case of incremental version of rate due to MRF. example: 456123 example: action: rate-response jsonReqId: 8ee02197-d54d-41ac-84a4-b607462ba3b1 senderCompId: IFXCLIENT1 onBehalfOfCompId: IFXCLIENT1 sendingTime: 20250126-22:54:56.684 ifxRates: - rateSetId: 13052961 ccyPair: EURGBP tenor: SP bidSpotRate: '0.84391' offerSpotRate: '0.84391' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.84391' validUntilTime: '2025-01-26 23:00:00.000' isValid: true baseCurrency: EUR ratePrecision: 5 isTradable: true fixingRate: '0.0' valueDate: '2025-01-30' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.84391' offerOutrightRate: '0.84391' - rateSetId: 13052961 ccyPair: EURGBP tenor: W1 bidSpotRate: '0.0' offerSpotRate: '0.0' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.0' validUntilTime: '2025-01-26 23:00:00.000' isValid: false baseCurrency: EUR ratePrecision: 6 isTradable: true fixingRate: '0.0' valueDate: '2025-02-06' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.0' offerOutrightRate: '0.0' - rateSetId: 13052961 ccyPair: EURUSD tenor: SP bidSpotRate: '1.0433' offerSpotRate: '1.0474' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '1.04535' validUntilTime: '2025-01-26 23:00:00.000' isValid: true baseCurrency: EUR ratePrecision: 4 isTradable: true fixingRate: '0.0' valueDate: '2025-01-28' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '1.0433' offerOutrightRate: '1.0474' - rateSetId: 13052961 ccyPair: EURUSD tenor: W1 bidSpotRate: '0.0' offerSpotRate: '0.0' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.0' validUntilTime: '2025-01-26 23:00:00.000' isValid: false baseCurrency: EUR ratePrecision: 6 isTradable: true fixingRate: '0.0' valueDate: '2025-02-05' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.0' offerOutrightRate: '0.0' - rateSetId: 13052961 ccyPair: EURUSD tenor: M1 bidSpotRate: '0.0' offerSpotRate: '0.0' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.0' validUntilTime: '2025-01-26 23:00:00.000' isValid: false baseCurrency: EUR ratePrecision: 6 isTradable: true fixingRate: '0.0' valueDate: '2025-02-28' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.0' offerOutrightRate: '0.0' FXQuoteReportRequest: description: > Use this endpoint to request historic rates for all currency pairs for either a tradedate or ratesetid over a session. While the fields ‘tradeDate’, ‘rateSetId’, are optional, you must send them in at least one of the combinations below to fetch the results: a) ‘tradeDate’ b) ‘rateSetId’ type: object required: - action - jsonReqId - senderCompId - onBehalfOfCompId - sendingTime - account properties: action: type: string description: 'The service you are requesting. Allowed values: rate-report-request.' maxLength: 20 example: rate-report-request jsonReqId: type: string description: The unique identifier for the JSON request. Must be alphanumeric. maxLength: 100 example: Req20181011776 senderCompId: type: string description: >- The Citi-assigned value used to identify the message sender. This was assigned to you during onboarding. May contain special characters ( ‘_’, ‘.’, ‘-‘). maxLength: 20 example: ClientName onBehalfOfCompId: type: string description: >- The Citi-assigned value used to identify the sub-entity. This was assigned to you during onboarding. May contain special characters ( ‘_’, ‘.’, ‘-‘) maxLength: 20 example: ClientName sendingTime: type: string description: >- The time of the message transmission expressed in UTC (Universal Time Coordinated, also known as "GMT"). Format: YYYYMMDD-HH:MM:SS.mmm. example: 20180820-04:48:29.125 account: type: string description: >- Your Citi-assigned client identifier. May contain special characters ( ‘_’, ‘.’, ‘-‘) maxLength: 50 example: ABC123 rateSetId: type: string description: | The Rate Set ID for which the rate report is requested. example: '12345' tradeDate: type: string format: date description: | The trade date for which the rate report is requested. example: '2026-06-30' example: action: rate-report-request jsonReqId: 8ee02197-d54d-41ac-84a4-b607462ba3b1 senderCompId: IFXCLIENT1 onBehalfOfCompId: IFXCLIENT1 sendingTime: 20180820-04:48:29.125 account: XXXXXXX rateSetId: '12345' FXQuoteReportResponse: type: object required: - action - jsonReqId - senderCompId - onBehalfOfCompId - sendingTime properties: action: type: string description: >- Defines the action of the message. Value will be rate-report-response. example: rate-report-response maxLength: 20 jsonReqId: type: string description: The unique identifier for the JSON request. Format is alphanumeric. maxLength: 100 example: Req20181011776 senderCompId: type: string description: >- The Citi-assigned value used to identify the firm sending the message. May contain special characters ( ‘_’, ‘.’, ‘-‘). maxLength: 20 example: ClientName onBehalfOfCompId: type: string description: >- The Citi-assigned value used to identify the sub-entity. May contain special characters ( ‘_’, ‘.’, ‘-‘) maxLength: 20 example: ClientName sendingTime: type: string description: >- The time of message transmission. Always expressed in UTC (Universal Time Coordinated, also known as 'GMT'), format: YYYYMMDD-HH:MM:SS.mmm. example: 20180820-04:48:31.155 errorCode: type: integer description: >- The error code associated with the response. See the Error Codes tab for a complete list. example: 89 errorMessage: type: string description: >- The error message associated with the response. See the Error Codes tab for a complete list. example: No records found for the given inputs. ifxRates: type: array items: type: object required: - rateSetId - ccyPair - tenor - bidSpotRate - offerSpotRate - bidForwardPoints - offerForwardPoints - midPrice - validUntilTime - isValid - baseCurrency - ratePrecision - valueDate - bidOutrightRate - offerOutrightRate - fixingRate properties: rateSetId: type: integer description: The Citi-defined rate set ID that the rate belongs to. example: 123456 ccyPair: type: string description: >- A six character sorted alpha string comprising two ISO ccy codes that the rate applies to. example: EURUSD maxLength: 6 tenor: type: string description: The Tenor for the rate. maxLength: 3 example: SP bidSpotRate: type: string format: double description: The Bid Spot Rate for the currency pair. example: '1.04' offerSpotRate: type: string format: double description: The Offer Spot Rate for the currency pair. example: '1.06' bidForwardPoints: type: string format: double description: The Bid Forward Points for this tenor (Forward Pricing Only). example: '0.01' offerForwardPoints: type: string format: double description: >- The Offer Forward Points for this tenor (Forward Pricing Only). example: '0.02' midPrice: type: string format: double description: The Mid Price for the rate. example: '0.0' validUntilTime: type: string description: >- The time and date that this rate will expire. Note-This is held in GMT / UTC format: yyyyMM-dd HH:mm:ss.SSS example: 2018-10-15 16:30:00.000 GMT isValid: type: boolean description: >- A flag that shows that Citi was able to provide the requested rate. If this field is false, then midPrice, points, and rates are zero. example: true baseCurrency: type: string maxLength: 3 description: The base currency of the currency pair. example: EUR ratePrecision: type: integer description: >- The number of decimal places to which the rate(s) for this tenor should be quoted in regular base/term format. example: 2 isTradable: type: boolean description: >- A flag to indicate whether the rate is tradable by the client (TRUE) or is to be used for reference purposes only. example: true fixingRate: type: string format: double description: >- This field and `fixingsource` field will only be populated once a month on the agreed NDF fixing date. Will contain the fixing rate to be used for this currency pair. example: '0' fixingSource: type: string description: >- Will contain the fixing source associated with the fixingRate field. example: Citi New York 15:00 Fixing maxLength: 100 valueDate: type: string format: date description: 'The value date of the rate returned in format: yyyy-MM-dd.' example: '2011-05-06' drawDownValidUntilTime: description: > Optional field. The extended time and date that this rate will expire for sending draw down orders. This field will be sent only if you are enabled for sending pre-order requests. Note: this is held in GMT / UTC in format: yyyy-MM-dd HH:mm:ss.SSS. example: '2011-05-05 09:30:00.000' bidOutrightRate: type: string format: double description: The Bid Outright Rate for this currency pair. example: '0.0' offerOutrightRate: type: string format: double description: The Offer Outright Rate for this currency pair. example: '0.0' isMrf: description: >- Optional field. Applicable when MRF hourly updated rate option enabled. Flag indicates whether this is updated rate due to MRF True indicates updated rate. type: boolean example: true rateId: type: integer description: >- Optional field. Applicable when MRF hourly updated rate option enabled. Unique identifier of a rate. Value is incremental. Used for reference purpose to identify latest rate in case of incremental version of rate due to MRF. example: 456123 example: action: rate-report-response jsonReqId: 8ee02197-d54d-41ac-84a4-b607462ba3b1 senderCompId: IFXCLIENT1 onBehalfOfCompId: IFXCLIENT1 sendingTime: 20250126-22:54:56.684 ifxRates: - rateSetId: 13052961 ccyPair: EURGBP tenor: SP bidSpotRate: '0.84391' offerSpotRate: '0.84391' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.0' validUntilTime: '2025-01-26 23:00:00.000' isValid: true baseCurrency: EUR ratePrecision: 5 isTradable: true fixingRate: '0.0' valueDate: '2025-01-30' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.0' offerOutrightRate: '0.0' - rateSetId: 13052961 ccyPair: EURGBP tenor: W1 bidSpotRate: '0.0' offerSpotRate: '0.0' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.0' validUntilTime: '2025-01-26 23:00:00.000' isValid: false baseCurrency: EUR ratePrecision: 6 isTradable: true fixingRate: '0.0' valueDate: '2025-02-06' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.0' offerOutrightRate: '0.0' - rateSetId: 13052961 ccyPair: EURUSD tenor: SP bidSpotRate: '1.0433' offerSpotRate: '1.0474' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.0' validUntilTime: '2025-01-26 23:00:00.000' isValid: true baseCurrency: EUR ratePrecision: 4 isTradable: true fixingRate: '0.0' valueDate: '2025-01-28' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.0' offerOutrightRate: '0.0' - rateSetId: 13052961 ccyPair: EURUSD tenor: W1 bidSpotRate: '0.0' offerSpotRate: '0.0' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.0' validUntilTime: '2025-01-26 23:00:00.000' isValid: false baseCurrency: EUR ratePrecision: 6 isTradable: true fixingRate: '0.0' valueDate: '2025-02-05' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.0' offerOutrightRate: '0.0' - rateSetId: 13052961 ccyPair: EURUSD tenor: M1 bidSpotRate: '0.0' offerSpotRate: '0.0' bidForwardPoints: '0.0' offerForwardPoints: '0.0' midPrice: '0.0' validUntilTime: '2025-01-26 23:00:00.000' isValid: false baseCurrency: EUR ratePrecision: 6 isTradable: true fixingRate: '0.0' valueDate: '2025-02-28' drawDownValidUntilTime: '2025-01-27 23:00:00.000' bidOutrightRate: '0.0' offerOutrightRate: '0.0' tags: []