> This page is for Enterprise.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://citi-demo.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://citi-demo.ferndocs.com/_mcp/server.

# WorldLink FX Rate Inquiry

POST /v3/fx/raterequest
Content-Type: application/json

The CitiConnect WorldLink FX Rate Inquiry endpoint allows users to get updates on the present FX Rate details along with the rate expiry date, time, and Rate Quote ID, accelerating FX transactions.

Reference: https://citi-demo.ferndocs.com/enterprises/api-reference/payment-services/world-link/world-link-fx/process-rate-request

## Authentication

- `Authorization` header (bearer token, required) — All CitiConnect APIs use the oAuth2 authentication scheme, which requires a bearer token to authenticate your API call. The Token URL includes the version of authentication used by this API. See the Citi Authentication API reference for information on requesting a token.

## Request

### Query parameters

- `client_id` (string, required) — Unique identifier created during the onboarding process.

### Headers

- `Authorization` (string, required) — The OAuth Token prefixed with "Bearer" and space in between.

### Body (application/json)

This endpoint expects an IFXRequest-FX-Rate.

- `SignonRq` (IfxRequestFxRateSignonRq, required)
- `BankSvcRq` (list of IfxRequestFxRateBankSvcRqItems, required) — Bank Service Request for FX Rate

## Response

### 200

OK

- `BankSvcRs` (IfxResponseFxRateBankSvcRs, optional)

## Errors

### 400 Bad Request Error

Bad Request

- `correlationId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `message` (string, optional)
- `status` (string, optional) — Error response code

### 401 Unauthorized Error

Unauthorized

- `correlationId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `message` (string, optional)
- `status` (string, optional) — Error response code

### 403 Forbidden Error

Forbidden

- `correlationId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `message` (string, optional)
- `status` (string, optional) — Error response code

### 404 Not Found Error

Not Found.

- `correlationId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `message` (string, optional)
- `status` (string, optional) — Error response code

### 500 Internal Server Error

Internal Server Error

- `correlationId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `message` (string, optional)
- `status` (string, optional) — Error response code

## Types

### IfxRequestFxRateSignonRq

- `ClientDt` (string, required) — Customer date and time for the message. Format: Header -Date/Time 'yyyy-mm-ddThh:mm:ss'. Will be stored for use in service related issues.
- `CustLangPref` (string, required) — Always set to "ENGLISH". Only English language is supported. Value in this parameter will be ignored.
- `ClientApp` (IfxRequestFxRateSignonRqClientApp, required)

### IfxRequestFxRateBankSvcRqItems

- `RqUID` (string, required) — Customer Ref No for the BankSvcRq request.Needs to be unique.
- `ForExRateInqRq` (list of IfxRequestFxRateBankSvcRqItemsForExRateInqRqItems, required) — FX Rate inquiry request array.
- `PrefPrice` (string, optional) — Preferred pricing indicator.N - Default value for standard pricing. Value must be 'W' for Alipay Wallet payments and 'E' for UPI Cards payment.
- `BaseNo` (string, optional) — FXLM Base Number. If provided this base number will be passed to FXLM for pricing and settlement. Only one of \<BaseNo> or \<FXLMEntity> may be provided. If neither is present the OLR to base number configuration will be used. Echoed from customer request.
- `FXLMEntity` (string, optional) — FXLM Entity. If provided this Entity will be passed to FXLM for pricing and settlement. Only one of \<BaseNo> or \<FXLMEntity> may be provided. If neither is present the OLR to base number configuration will be used. Echoed from customer request.
- `WLFlag` (string, optional) — Account processing and settlement. W - Standard WorldLink account processing and settlementN- Bypass all WorldLink account processing and settlement. Pass the numeric detail TRN to FXLM.O - Bypass all WorldLink account processing and settlement. Pass the OLR numeric sequence number as the TRN to FXLM.If not provided default will be W.
- `DealType` (string, optional) — Deal type. Deal type- 'B' for all bench deals for bench fixing ratesDeal type- `Q` for all real time quoted rate deals This must be coordinated with QUOTED fixing typeDeal Type- 'O' book per OLR parametersDefault value will be O, if not provided.

### IfxResponseFxRateBankSvcRs

- `Status` (IfxResponseFxRateBankSvcRsStatus, optional)
- `RqUID` (string, optional) — Customer Ref No for the request.
- `PrefPrice` (string, optional) — Preferred pricing indicator.N - Default value for standard pricing. Value must be 'W' for Alipay Wallet payments and 'E' for UPI Cards payment.
- `BaseNo` (string, optional) — FXLM Base Number. If provided this base number will be passed to FXLM for pricing and settlement. Only one of \<BaseNo> or \<FXLMEntity> may be provided. If neither is present the OLR to base number configuration will be used. Echoed from customer request.
- `FXLMEntity` (string, optional) — FXLM Entity. If provided this Entity will be passed to FXLM for pricing and settlement. Only one of \<BaseNo> or \<FXLMEntity> may be provided. If neither is present the OLR to base number configuration will be used. Echoed from customer request.
- `WLFlag` (string, optional) — Account processing and settlement. W - Standard WorldLink account processing and settlementN- Bypass all WorldLink account processing and settlement. Pass the numeric detail TRN to FXLM.O - Bypass all WorldLink account processing and settlement. Pass the OLR numeric sequence number as the TRN to FXLM.If not provided default will be W.
- `DealType` (string, optional) — Deal type. Deal type- 'B' for all bench deals for bench fixing ratesDeal type- `Q` for all real time quoted rate deals This must be coordinated with QUOTED fixing typeDeal Type- 'O' book per OLR parametersDefault value will be O, if not provided.
- `ForExRateInqRs` (IfxResponseFxRateBankSvcRsForExRateInqRs, optional)

### IfxRequestFxRateSignonRqClientApp

- `Name` (string, required) — Customer System application name. CTSI INTERFACE/ GPP would map this as default - GPP
- `Org` (string, required) — Customer System application manufacturer. CTSI INTERFACE/ GPP would map this as default - GPP
- `Version` (string, required) — Customer system application version.

### IfxRequestFxRateBankSvcRqItemsForExRateInqRqItems

- `RqUID` (string, required) — Customer Ref No for the request. Will be used to track individual ForExRateInqRq blocks. Needs to be unique.
- `CustId` (IfxRequestFxRateBankSvcRqItemsForExRateInqRqItemsCustId, required)
- `DepAcctId` (IfxRequestFxRateBankSvcRqItemsForExRateInqRqItemsDepAcctId, required)
- `RemitCurCode` (string, required) — Remit Currency. It is an ISO currency code. It is mandatory field for rate request if RemitAmt is provided and will be used for validating currency code.
- `IssueCurCode` (string, required) — Issue Currency. It is an ISO currency code. It is mandatory field for rate request if issueAmt is provided and will be used for validating currency code.
- `RemitAmt` (string, optional) — Amount to Buy or Sell. If RemitAmt is provided it means you are selling the currency.
- `IssueAmt` (string, optional) — Amount to Buy or Sell. If IssueAmt is provided it means you are buying the currency.
- `CurConvertRule` (enum, optional) — Currency conversion method Direct/Indirect
  - Allowed values: `DIRECT`, `INDIRECT`, `INTERBANK`
- `ForExRateType` (enum, optional) — If value is Indicated > Interactive and if the value is Committed, its Auto-accept.
  - Allowed values: `Indicated`, `Committed`
- `ForExRateDealType` (string, optional) — Buy or Sell. Default is Buy.
- `ForExValDtType` (string, optional) — Daily, Spot or Future. Default value is Spot, if no value is provided.
- `ForExTnr` (string, optional) — Tenor value from frontend. Two Alphanumeric code for tenor.0 SP, TN, SD & BA. Conditional when FX request has Tenor listed as SD or TN or SP, OLR will book the FX and respond with the same requested tenor value. If the request is having BA as tenor value, OLR will determine tenor value either as SD or TN or SP based on FX availablity.
- `ForExValDt` (string, optional) — Value date required only if ForExValDtType is Future. Data type is "Date" as defined in IFX XML. FX contract Value Date mapped as yyyy-mm-dd. Value date is required if ForExValDtType is Future GPP to map the value date if Client profile is set up for FX Request type as Value date
- `DeliveryMethod` (string, optional) — DEALID6 or DEALID16
- `PayAcct` (string, optional) — Citi Account held at Citi Branch routing id (valid Citi acct). This is only passed if requesting OLR to credit a source requested Citi account. Previous tag must also be sent in conjunction with this tag.
- `PayBrnch` (string, optional) — Citi Branch routing id (valid Citi Branch). This is only passed if requesting OLR to credit a source requested Citi account. Next tag must also be sent in conjunction with this tag.
- `RemitAcct` (string, optional) — Citi Account held at Citi Branch routing id (valid Citi acct). This is only passed if requesting OLR to debit a source requested Citi account. remitBrnch must also be sent.
- `RemitBrnch` (string, optional) — Citi Branch routing ID (valid Citi Branch). This is only passed if the requesting OLR to debit a source requested Citi account. RemitAcct must also be sent.
- `BenchFixing` (string, optional) — Bench Fixing. Required only for Bench Deals

### IfxResponseFxRateBankSvcRsStatus

- `StatusCode` (string, optional) — StatusCode as Per IFX XML. PROCESSED for code 000 and 120 (Rate returned and value date changed) FAILED for all other codes (Rejects)
- `Severity` (string, optional) — Error,Warn,Info. NONE for code 000, HIGH for all the other status codes.
- `StatusDesc` (string, optional) — Text description for status code. 991 : Application program abend has occurred 000 : Rate Returned

### IfxResponseFxRateBankSvcRsForExRateInqRs

- `Status` (IfxResponseFxRateBankSvcRsForExRateInqRsStatus, optional)
- `RqUID` (string, optional) — Customer Ref No for the request. Header - Client Reference Number. Echoed from customer request.
- `CustId` (IfxResponseFxRateBankSvcRsForExRateInqRsCustId, optional)
- `ResTime` (string, optional) — Date & Time when the response is generated
- `RemitAmt` (string, optional) — Amount to Buy or Sell. If RemitAmt is provided it means you are selling the currency.
- `IssueAmt` (string, optional) — Amount to Buy or Sell. If IssueAmt is provided it means you are buying the currency.
- `RemitCurCode` (string, optional) — Remit Currency. It is an ISO currency code. It is mandatory field for rate request if RemitAmt is provided and will be used for validating currency code.
- `IssueCurCode` (string, optional) — Issue Currency. It is an ISO currency code. It is mandatory field for rate request if issueAmt is provided and will be used for validating currency code.
- `CurConvertRule` (enum, optional) — Currency conversion method Direct/Indirect
  - Allowed values: `DIRECT`, `INDIRECT`, `INTERBANK`
- `DepAcctId` (IfxResponseFxRateBankSvcRsForExRateInqRsDepAcctId, optional)
- `ForExRateRec` (IfxResponseFxRateBankSvcRsForExRateInqRsForExRateRec, optional)

### IfxRequestFxRateBankSvcRqItemsForExRateInqRqItemsCustId

- `SPName` (string, required) — Always set to "CTSI".
- `CustPermId` (string, required) — WL Client Number + WorldLink Branch Number. It is used to validate client id. Please note this will be same for all requests in a single message as per existing CMX flow.

### IfxRequestFxRateBankSvcRqItemsForExRateInqRqItemsDepAcctId

- `AcctId` (string, required) — FROM account number. Not used. Echoed from Customer Request ForExRateInqRq
- `AcctType` (string, required) — FROM account type. Not used. Echoed from Customer Request ForExRateInqRq
- `BankInfo` (BankInfo, required) — Only parameter need to be present in the message. Parameters under this block will be ignored.

### IfxResponseFxRateBankSvcRsForExRateInqRsStatus

- `StatusCode` (string, optional) — StatusCode as Per IFX XML. PROCESSED for code 000 and 120 (Rate returned and value date changed) FAILED for all other codes (Rejects)
- `ServerStatusCode` (string, optional) — Backend Status Code
- `Severity` (string, optional) — Error,Warn,Info. NONE for code 000, HIGH for all the other status codes.
- `StatusDesc` (string, optional) — Text description for status code. 991 : Application program abend has occurred 000 : Rate Returned

### IfxResponseFxRateBankSvcRsForExRateInqRsCustId

- `SPName` (string, optional) — Always set to "CTSI".
- `CustPermId` (string, optional) — WL Client Number + WorldLink Branch Number. It is used to validate client id. Please note this will be same for all requests in a single message as per existing CMX flow.

### IfxResponseFxRateBankSvcRsForExRateInqRsDepAcctId

- `AcctId` (string, optional) — FROM account number. Not used. Echoed from Customer Request ForExRateInqRq
- `AcctType` (string, optional) — FROM account type. Not used. Echoed from Customer Request ForExRateInqRq
- `BankInfo` (BankInfo, optional) — Only parameter need to be present in the message. Parameters under this block will be ignored.

### IfxResponseFxRateBankSvcRsForExRateInqRsForExRateRec

- `ForExRateId` (string, optional) — The commited FX contract ID. This parameter is present if the ForExRateRq had ForExRateType=Committed and the deal was successfully booked.
- `ForExValDt` (string, optional) — Value date
- `ForExRateInfo` (IfxResponseFxRateBankSvcRsForExRateInqRsForExRateRecForExRateInfo, optional)

### BankInfo

Only parameter need to be present in the message. Parameters under this block will be ignored.

- `bankId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `bankIdType` (string, optional)
- `branchId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `branchName` (string, optional)
- `city` (string, optional)
- `country` (string, optional)
- `name` (string, optional)
- `postAddr` (PostAddr, optional)
- `postalCode` (string, optional)
- `refInfo` (list of RefInfo, optional)
- `stateProv` (string, optional)

### IfxResponseFxRateBankSvcRsForExRateInqRsForExRateRecForExRateInfo

- `RemitAmt` (string, optional) — Amount to Buy or Sell. If RemitAmt is provided it means you are selling the currency.
- `IssueAmt` (string, optional) — Amount to Buy or Sell. If IssueAmt is provided it means you are buying the currency.
- `RemitCurCode` (string, optional) — Remit Currency. It is an ISO currency code. It is mandatory field for rate request if RemitAmt is provided and will be used for validating currency code.
- `IssueCurCode` (string, optional) — Issue Currency. It is an ISO currency code. It is mandatory field for rate request if issueAmt is provided and will be used for validating currency code.
- `CurRate` (double, optional) — FX Rate
- `CurConvertRule` (enum, optional) — Currency conversion method Direct/Indirect
  - Allowed values: `DIRECT`, `INDIRECT`, `INTERBANK`
- `ExpDt` (string, optional) — Contract Expiry Datetime. This is the expiry datetime for this contract. This may be a few minutes for a rate offer and may be few days for a committed rate.
- `SPRefId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `ForExValDtType` (string, optional) — Daily, Spot or Future. Default value is Spot, if no value is provided.
- `ForExTnr` (string, optional) — Tenor value from frontend. Two Alphanumeric code for tenor.0 SP, TN, SD & BA. Conditional when FX request has Tenor listed as SD or TN or SP, OLR will book the FX and respond with the same requested tenor value. If the request is having BA as tenor value, OLR will determine tenor value either as SD or TN or SP based on FX availablity.
- `BenchFixing` (string, optional) — Bench Fixing. Required only for Bench Deals

### PostAddr

- `addr1` (string, optional)
- `addr2` (string, optional)
- `addr3` (string, optional)
- `addr4` (string, optional)
- `addrType` (string, optional)
- `city` (string, optional)
- `country` (string, optional)
- `endDt` (string, optional)
- `postalCode` (string, optional)
- `startDt` (string, optional)
- `stateProv` (string, optional)

### RefInfo

- `refId` (string, optional) — Object identifiers in the IFX specification are of the data type "Identifier." This is a narrow character data type with a maximum length of 36.
- `refType` (string, optional)

## Examples

### Fx-Rate-Request-Json (application/json)

**Request**

```json
{
  "SignonRq": {
    "ClientDt": "2020-02-25T05:21:02",
    "CustLangPref": "ENGLISH",
    "ClientApp": {
      "Name": "CTSI INTERFACE",
      "Org": "ABCDBANK",
      "Version": "1"
    }
  },
  "BankSvcRq": [
    {
      "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
      "ForExRateInqRq": [
        {
          "RqUID": "99dc17a3-6bbf-4310-973a-a369e50",
          "CustId": {
            "SPName": "CTSI",
            "CustPermId": "85370001"
          },
          "DepAcctId": {
            "AcctId": "9999999999",
            "AcctType": "SD",
            "BankInfo": {}
          },
          "RemitCurCode": "USD",
          "IssueCurCode": "CAD",
          "RemitAmt": "3.00",
          "ForExRateType": "Indicated",
          "ForExRateDealType": "BUY",
          "ForExValDtType": "SPOT",
          "ForExTnr": "BA",
          "ForExValDt": "2020-03-15"
        }
      ]
    }
  ]
}
```

**Response**

```json
{
  "IFX": {
    "BankSvcRs": {
      "ForExRateInqRs": {
        "DepAcctId": {
          "AcctId": "9999999999",
          "AcctType": "SD",
          "BankInfo": {}
        },
        "ForExRateRec": {
          "ForExRateInfo": {
            "CurConvertRule": "Direct",
            "CurRate": 0.7254,
            "ExpDt": "2026-01-07T08:19:51",
            "IssueAmt": "4.14",
            "IssueCurCode": "CAD",
            "RemitAmt": "3",
            "RemitCurCode": "USD",
            "SPRefId": "XML56HCU"
          },
          "ForExTnr": "TN",
          "ForExValDt": "2026-01-08"
        },
        "IssueCurCode": "CAD",
        "RemitAmt": "3",
        "RemitCurCode": "USD",
        "RqUID": "99dc17a3-6bbf-4310-973a-a369e50",
        "Status": {
          "Severity": "NONE",
          "StatusCode": "PROCESSED",
          "StatusDesc": "000 : Rate returned"
        }
      },
      "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
      "Status": {
        "Severity": "NONE",
        "StatusCode": "PROCESSED",
        "StatusDesc": "000 : Rate returned"
      }
    }
  }
}
```

**SDK Code**

```python Fx-Rate-Request-Json (application/json)
import requests

url = "https://api.example.com/v3/fx/raterequest"

payload = {
    "SignonRq": {
        "ClientDt": "2020-02-25T05:21:02",
        "CustLangPref": "ENGLISH",
        "ClientApp": {
            "Name": "CTSI INTERFACE",
            "Org": "ABCDBANK",
            "Version": "1"
        }
    },
    "BankSvcRq": [
        {
            "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
            "ForExRateInqRq": [
                {
                    "RqUID": "99dc17a3-6bbf-4310-973a-a369e50",
                    "CustId": {
                        "SPName": "CTSI",
                        "CustPermId": "85370001"
                    },
                    "DepAcctId": {
                        "AcctId": "9999999999",
                        "AcctType": "SD",
                        "BankInfo": {}
                    },
                    "RemitCurCode": "USD",
                    "IssueCurCode": "CAD",
                    "RemitAmt": "3.00",
                    "ForExRateType": "Indicated",
                    "ForExRateDealType": "BUY",
                    "ForExValDtType": "SPOT",
                    "ForExTnr": "BA",
                    "ForExValDt": "2020-03-15"
                }
            ]
        }
    ]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Fx-Rate-Request-Json (application/json)
const url = 'https://api.example.com/v3/fx/raterequest';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"SignonRq":{"ClientDt":"2020-02-25T05:21:02","CustLangPref":"ENGLISH","ClientApp":{"Name":"CTSI INTERFACE","Org":"ABCDBANK","Version":"1"}},"BankSvcRq":[{"RqUID":"99dc17a3-6bbf-4310-973a-a369e5","ForExRateInqRq":[{"RqUID":"99dc17a3-6bbf-4310-973a-a369e50","CustId":{"SPName":"CTSI","CustPermId":"85370001"},"DepAcctId":{"AcctId":"9999999999","AcctType":"SD","BankInfo":{}},"RemitCurCode":"USD","IssueCurCode":"CAD","RemitAmt":"3.00","ForExRateType":"Indicated","ForExRateDealType":"BUY","ForExValDtType":"SPOT","ForExTnr":"BA","ForExValDt":"2020-03-15"}]}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Fx-Rate-Request-Json (application/json)
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.example.com/v3/fx/raterequest"

	payload := strings.NewReader("{\n  \"SignonRq\": {\n    \"ClientDt\": \"2020-02-25T05:21:02\",\n    \"CustLangPref\": \"ENGLISH\",\n    \"ClientApp\": {\n      \"Name\": \"CTSI INTERFACE\",\n      \"Org\": \"ABCDBANK\",\n      \"Version\": \"1\"\n    }\n  },\n  \"BankSvcRq\": [\n    {\n      \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n      \"ForExRateInqRq\": [\n        {\n          \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e50\",\n          \"CustId\": {\n            \"SPName\": \"CTSI\",\n            \"CustPermId\": \"85370001\"\n          },\n          \"DepAcctId\": {\n            \"AcctId\": \"9999999999\",\n            \"AcctType\": \"SD\",\n            \"BankInfo\": {}\n          },\n          \"RemitCurCode\": \"USD\",\n          \"IssueCurCode\": \"CAD\",\n          \"RemitAmt\": \"3.00\",\n          \"ForExRateType\": \"Indicated\",\n          \"ForExRateDealType\": \"BUY\",\n          \"ForExValDtType\": \"SPOT\",\n          \"ForExTnr\": \"BA\",\n          \"ForExValDt\": \"2020-03-15\"\n        }\n      ]\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Fx-Rate-Request-Json (application/json)
require 'uri'
require 'net/http'

url = URI("https://api.example.com/v3/fx/raterequest")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"SignonRq\": {\n    \"ClientDt\": \"2020-02-25T05:21:02\",\n    \"CustLangPref\": \"ENGLISH\",\n    \"ClientApp\": {\n      \"Name\": \"CTSI INTERFACE\",\n      \"Org\": \"ABCDBANK\",\n      \"Version\": \"1\"\n    }\n  },\n  \"BankSvcRq\": [\n    {\n      \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n      \"ForExRateInqRq\": [\n        {\n          \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e50\",\n          \"CustId\": {\n            \"SPName\": \"CTSI\",\n            \"CustPermId\": \"85370001\"\n          },\n          \"DepAcctId\": {\n            \"AcctId\": \"9999999999\",\n            \"AcctType\": \"SD\",\n            \"BankInfo\": {}\n          },\n          \"RemitCurCode\": \"USD\",\n          \"IssueCurCode\": \"CAD\",\n          \"RemitAmt\": \"3.00\",\n          \"ForExRateType\": \"Indicated\",\n          \"ForExRateDealType\": \"BUY\",\n          \"ForExValDtType\": \"SPOT\",\n          \"ForExTnr\": \"BA\",\n          \"ForExValDt\": \"2020-03-15\"\n        }\n      ]\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java Fx-Rate-Request-Json (application/json)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.example.com/v3/fx/raterequest")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"SignonRq\": {\n    \"ClientDt\": \"2020-02-25T05:21:02\",\n    \"CustLangPref\": \"ENGLISH\",\n    \"ClientApp\": {\n      \"Name\": \"CTSI INTERFACE\",\n      \"Org\": \"ABCDBANK\",\n      \"Version\": \"1\"\n    }\n  },\n  \"BankSvcRq\": [\n    {\n      \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n      \"ForExRateInqRq\": [\n        {\n          \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e50\",\n          \"CustId\": {\n            \"SPName\": \"CTSI\",\n            \"CustPermId\": \"85370001\"\n          },\n          \"DepAcctId\": {\n            \"AcctId\": \"9999999999\",\n            \"AcctType\": \"SD\",\n            \"BankInfo\": {}\n          },\n          \"RemitCurCode\": \"USD\",\n          \"IssueCurCode\": \"CAD\",\n          \"RemitAmt\": \"3.00\",\n          \"ForExRateType\": \"Indicated\",\n          \"ForExRateDealType\": \"BUY\",\n          \"ForExValDtType\": \"SPOT\",\n          \"ForExTnr\": \"BA\",\n          \"ForExValDt\": \"2020-03-15\"\n        }\n      ]\n    }\n  ]\n}")
  .asString();
```

```php Fx-Rate-Request-Json (application/json)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.example.com/v3/fx/raterequest', [
  'body' => '{
  "SignonRq": {
    "ClientDt": "2020-02-25T05:21:02",
    "CustLangPref": "ENGLISH",
    "ClientApp": {
      "Name": "CTSI INTERFACE",
      "Org": "ABCDBANK",
      "Version": "1"
    }
  },
  "BankSvcRq": [
    {
      "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
      "ForExRateInqRq": [
        {
          "RqUID": "99dc17a3-6bbf-4310-973a-a369e50",
          "CustId": {
            "SPName": "CTSI",
            "CustPermId": "85370001"
          },
          "DepAcctId": {
            "AcctId": "9999999999",
            "AcctType": "SD",
            "BankInfo": {}
          },
          "RemitCurCode": "USD",
          "IssueCurCode": "CAD",
          "RemitAmt": "3.00",
          "ForExRateType": "Indicated",
          "ForExRateDealType": "BUY",
          "ForExValDtType": "SPOT",
          "ForExTnr": "BA",
          "ForExValDt": "2020-03-15"
        }
      ]
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Fx-Rate-Request-Json (application/json)
using RestSharp;

var client = new RestClient("https://api.example.com/v3/fx/raterequest");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"SignonRq\": {\n    \"ClientDt\": \"2020-02-25T05:21:02\",\n    \"CustLangPref\": \"ENGLISH\",\n    \"ClientApp\": {\n      \"Name\": \"CTSI INTERFACE\",\n      \"Org\": \"ABCDBANK\",\n      \"Version\": \"1\"\n    }\n  },\n  \"BankSvcRq\": [\n    {\n      \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n      \"ForExRateInqRq\": [\n        {\n          \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e50\",\n          \"CustId\": {\n            \"SPName\": \"CTSI\",\n            \"CustPermId\": \"85370001\"\n          },\n          \"DepAcctId\": {\n            \"AcctId\": \"9999999999\",\n            \"AcctType\": \"SD\",\n            \"BankInfo\": {}\n          },\n          \"RemitCurCode\": \"USD\",\n          \"IssueCurCode\": \"CAD\",\n          \"RemitAmt\": \"3.00\",\n          \"ForExRateType\": \"Indicated\",\n          \"ForExRateDealType\": \"BUY\",\n          \"ForExValDtType\": \"SPOT\",\n          \"ForExTnr\": \"BA\",\n          \"ForExValDt\": \"2020-03-15\"\n        }\n      ]\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Fx-Rate-Request-Json (application/json)
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "SignonRq": [
    "ClientDt": "2020-02-25T05:21:02",
    "CustLangPref": "ENGLISH",
    "ClientApp": [
      "Name": "CTSI INTERFACE",
      "Org": "ABCDBANK",
      "Version": "1"
    ]
  ],
  "BankSvcRq": [
    [
      "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
      "ForExRateInqRq": [
        [
          "RqUID": "99dc17a3-6bbf-4310-973a-a369e50",
          "CustId": [
            "SPName": "CTSI",
            "CustPermId": "85370001"
          ],
          "DepAcctId": [
            "AcctId": "9999999999",
            "AcctType": "SD",
            "BankInfo": []
          ],
          "RemitCurCode": "USD",
          "IssueCurCode": "CAD",
          "RemitAmt": "3.00",
          "ForExRateType": "Indicated",
          "ForExRateDealType": "BUY",
          "ForExValDtType": "SPOT",
          "ForExTnr": "BA",
          "ForExValDt": "2020-03-15"
        ]
      ]
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.example.com/v3/fx/raterequest")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Fx-Rate-Request-Xml (application/xml)

**Request**

```json
{
  "SignonRq": {
    "ClientDt": "2017-08-30T05:21:02",
    "CustLangPref": "ENGLISH",
    "ClientApp": {
      "Name": "string",
      "Org": "string",
      "Version": "string"
    }
  },
  "BankSvcRq": [
    {
      "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
      "ForExRateInqRq": [
        {
          "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
          "CustId": {
            "SPName": "string",
            "CustPermId": "string"
          },
          "DepAcctId": {
            "AcctId": "string",
            "AcctType": "string",
            "BankInfo": {}
          },
          "RemitCurCode": "string",
          "IssueCurCode": "string"
        }
      ]
    }
  ]
}
```

**Response**

```json
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n  <IFX>\n    <BankSvcRs>\n      <Status>\n        <Severity>NONE</Severity>\n        <StatusCode>PROCESSED</StatusCode>\n        <StatusDesc>000 : Rate returned</StatusDesc>\n      </Status>\n      <RqUID>696f88f1-71f1-4ba5-abe4-ff98166d7861</RqUID>\n      <ForExRateInqRs>\n        <Status>\n          <Severity>NONE</Severity>\n          <StatusCode>PROCESSED</StatusCode>\n          <StatusDesc>000 : Rate returned</StatusDesc>\n        </Status>\n        <RqUID>ec1553fe-bca8-43f9-8da1-fa324b661c0</RqUID>\n        <RemitAmt>100.00</RemitAmt>\n        <RemitCurCode>CAD</RemitCurCode>\n        <IssueCurCode>NOK</IssueCurCode>\n        <DepAcctId>\n          <AcctId>9999999999</AcctId>\n          <AcctType>KB</AcctType>\n          <BankInfo/>\n        </DepAcctId>\n        <ForExRateRec>\n          <ForExRateInfo>\n            <RemitAmt>100.000</RemitAmt>\n            <IssueAmt>723.590</IssueAmt>\n            <RemitCurCode>CAD</RemitCurCode>\n            <IssueCurCode>NOK</IssueCurCode>\n            <CurRate>0.13820000</CurRate>\n            <CurConvertRule>DIRECT</CurConvertRule>\n            <ExpDt>2023-11-01T12:00:00Z</ExpDt>\n            <SPRefId>XML56H7R</SPRefId>\n          </ForExRateInfo>\n          <ForExValDt>2026-01-09</ForExValDt>\n        </ForExRateRec>\n      </ForExRateInqRs>\n    </BankSvcRs>\n  </IFX>\n"
```

**SDK Code**

```python Fx-Rate-Request-Xml (application/xml)
import requests

url = "https://api.example.com/v3/fx/raterequest"

payload = {
    "SignonRq": {
        "ClientDt": "2017-08-30T05:21:02",
        "CustLangPref": "ENGLISH",
        "ClientApp": {
            "Name": "string",
            "Org": "string",
            "Version": "string"
        }
    },
    "BankSvcRq": [
        {
            "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
            "ForExRateInqRq": [
                {
                    "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
                    "CustId": {
                        "SPName": "string",
                        "CustPermId": "string"
                    },
                    "DepAcctId": {
                        "AcctId": "string",
                        "AcctType": "string",
                        "BankInfo": {}
                    },
                    "RemitCurCode": "string",
                    "IssueCurCode": "string"
                }
            ]
        }
    ]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Fx-Rate-Request-Xml (application/xml)
const url = 'https://api.example.com/v3/fx/raterequest';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"SignonRq":{"ClientDt":"2017-08-30T05:21:02","CustLangPref":"ENGLISH","ClientApp":{"Name":"string","Org":"string","Version":"string"}},"BankSvcRq":[{"RqUID":"99dc17a3-6bbf-4310-973a-a369e5","ForExRateInqRq":[{"RqUID":"99dc17a3-6bbf-4310-973a-a369e5","CustId":{"SPName":"string","CustPermId":"string"},"DepAcctId":{"AcctId":"string","AcctType":"string","BankInfo":{}},"RemitCurCode":"string","IssueCurCode":"string"}]}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Fx-Rate-Request-Xml (application/xml)
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.example.com/v3/fx/raterequest"

	payload := strings.NewReader("{\n  \"SignonRq\": {\n    \"ClientDt\": \"2017-08-30T05:21:02\",\n    \"CustLangPref\": \"ENGLISH\",\n    \"ClientApp\": {\n      \"Name\": \"string\",\n      \"Org\": \"string\",\n      \"Version\": \"string\"\n    }\n  },\n  \"BankSvcRq\": [\n    {\n      \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n      \"ForExRateInqRq\": [\n        {\n          \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n          \"CustId\": {\n            \"SPName\": \"string\",\n            \"CustPermId\": \"string\"\n          },\n          \"DepAcctId\": {\n            \"AcctId\": \"string\",\n            \"AcctType\": \"string\",\n            \"BankInfo\": {}\n          },\n          \"RemitCurCode\": \"string\",\n          \"IssueCurCode\": \"string\"\n        }\n      ]\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Fx-Rate-Request-Xml (application/xml)
require 'uri'
require 'net/http'

url = URI("https://api.example.com/v3/fx/raterequest")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"SignonRq\": {\n    \"ClientDt\": \"2017-08-30T05:21:02\",\n    \"CustLangPref\": \"ENGLISH\",\n    \"ClientApp\": {\n      \"Name\": \"string\",\n      \"Org\": \"string\",\n      \"Version\": \"string\"\n    }\n  },\n  \"BankSvcRq\": [\n    {\n      \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n      \"ForExRateInqRq\": [\n        {\n          \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n          \"CustId\": {\n            \"SPName\": \"string\",\n            \"CustPermId\": \"string\"\n          },\n          \"DepAcctId\": {\n            \"AcctId\": \"string\",\n            \"AcctType\": \"string\",\n            \"BankInfo\": {}\n          },\n          \"RemitCurCode\": \"string\",\n          \"IssueCurCode\": \"string\"\n        }\n      ]\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java Fx-Rate-Request-Xml (application/xml)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.example.com/v3/fx/raterequest")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"SignonRq\": {\n    \"ClientDt\": \"2017-08-30T05:21:02\",\n    \"CustLangPref\": \"ENGLISH\",\n    \"ClientApp\": {\n      \"Name\": \"string\",\n      \"Org\": \"string\",\n      \"Version\": \"string\"\n    }\n  },\n  \"BankSvcRq\": [\n    {\n      \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n      \"ForExRateInqRq\": [\n        {\n          \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n          \"CustId\": {\n            \"SPName\": \"string\",\n            \"CustPermId\": \"string\"\n          },\n          \"DepAcctId\": {\n            \"AcctId\": \"string\",\n            \"AcctType\": \"string\",\n            \"BankInfo\": {}\n          },\n          \"RemitCurCode\": \"string\",\n          \"IssueCurCode\": \"string\"\n        }\n      ]\n    }\n  ]\n}")
  .asString();
```

```php Fx-Rate-Request-Xml (application/xml)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.example.com/v3/fx/raterequest', [
  'body' => '{
  "SignonRq": {
    "ClientDt": "2017-08-30T05:21:02",
    "CustLangPref": "ENGLISH",
    "ClientApp": {
      "Name": "string",
      "Org": "string",
      "Version": "string"
    }
  },
  "BankSvcRq": [
    {
      "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
      "ForExRateInqRq": [
        {
          "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
          "CustId": {
            "SPName": "string",
            "CustPermId": "string"
          },
          "DepAcctId": {
            "AcctId": "string",
            "AcctType": "string",
            "BankInfo": {}
          },
          "RemitCurCode": "string",
          "IssueCurCode": "string"
        }
      ]
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Fx-Rate-Request-Xml (application/xml)
using RestSharp;

var client = new RestClient("https://api.example.com/v3/fx/raterequest");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"SignonRq\": {\n    \"ClientDt\": \"2017-08-30T05:21:02\",\n    \"CustLangPref\": \"ENGLISH\",\n    \"ClientApp\": {\n      \"Name\": \"string\",\n      \"Org\": \"string\",\n      \"Version\": \"string\"\n    }\n  },\n  \"BankSvcRq\": [\n    {\n      \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n      \"ForExRateInqRq\": [\n        {\n          \"RqUID\": \"99dc17a3-6bbf-4310-973a-a369e5\",\n          \"CustId\": {\n            \"SPName\": \"string\",\n            \"CustPermId\": \"string\"\n          },\n          \"DepAcctId\": {\n            \"AcctId\": \"string\",\n            \"AcctType\": \"string\",\n            \"BankInfo\": {}\n          },\n          \"RemitCurCode\": \"string\",\n          \"IssueCurCode\": \"string\"\n        }\n      ]\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Fx-Rate-Request-Xml (application/xml)
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "SignonRq": [
    "ClientDt": "2017-08-30T05:21:02",
    "CustLangPref": "ENGLISH",
    "ClientApp": [
      "Name": "string",
      "Org": "string",
      "Version": "string"
    ]
  ],
  "BankSvcRq": [
    [
      "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
      "ForExRateInqRq": [
        [
          "RqUID": "99dc17a3-6bbf-4310-973a-a369e5",
          "CustId": [
            "SPName": "string",
            "CustPermId": "string"
          ],
          "DepAcctId": [
            "AcctId": "string",
            "AcctType": "string",
            "BankInfo": []
          ],
          "RemitCurCode": "string",
          "IssueCurCode": "string"
        ]
      ]
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.example.com/v3/fx/raterequest")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```