Request for Quote
Get firm FX quotes valid for 30 seconds
In some scenarios it is necessary to know the exchange rate ahead of executing a transaction. The Request For Quote (RFQ) workflow enables you to fetch a firm (tradable) foreign exchange quote that is valid for 30 seconds at a time for any of our supported value dates (today, tomorrow, and SPOT). In principle, this is exactly the rate that you would have executed on if you had submitted a trade in market order fashion at the same time.
The quote contains both an expiration timestamp as well as an id that can be attached as a part of an BCFX order. This will guarantee that the order will be completed at this exchange rate.
Settlement
Each transaction will be settled on your currency accounts immediately following confirmation, provided the original request was for today's value date and you are not utilizing a trading/credit line. Transactions with a value date in the future, such as tomorrow (TN) or SPOT, will not be settled until the value date arrives and the account has sufficient funding.
Just like with trades submitted as market orders, settlement with value date today is always possible during a bank holidays in either currency.
Basic RFQ Flow
Request Parameters
To request one or more quotes for trading, you only need to supply:
- A unique quote request ID
- Your customer id
- The two currencies involved or a currency pair
- The trade amount
- The desired tenor
- The currency of the amount
- The request type
Example Request - Single Quote
Below is an example POST request for retrieving a single quote to be used for trading 10,000 EUR against USD with value today (use TN for value date tomorrow, or SPOT for value date in two days' time):
[
{
"quoteRequestId" : "0016b117-2132-4670-864b-6ffd2151b5ff",
"customerId" : "000012356",
"currencyOne" : "EUR",
"currencyTwo" : "USD",
"amountCurrency": "EUR",
"amount": 10000,
"tenor" : "ON",
"requestType" : "Rfq"
}
]
The API will then respond with a firm quote featuring a quote ID and the expiry time:
[
{
"quoteRequestId" : "0016b117-2132-4670-864b-6ffd2151b5ff",
"quoteType": "Tradable",
"quoteId" : "c62cd555-2ab1-43af-be40-d623d7a4f2c9",
"currencyPair": "EURUSD",
"tenor" : "ON",
"exchangeRateBid": {
"allInRate" : 1.1702966
},
"exchangeRateAsk": {
"allInRate" : 1.1703015
},
"expiryTime": "2026-11-25T14:28:30.0010001+00:00",
"customerId" : "000012356",
}
]Example Request - Single Quote - Specify Currency Pair
You can control the exchange rate convention of each quote by specifying a currency pair instead of currency one and currency two. Below is an identical example to the above request, except it specifies the currency pair as USDEUR and as such the quote you received is in USDEUR convention instead of EURUSD as above.
[
{
"quoteRequestId" : "0016b117-2132-4670-864b-6ffd2151b5ff",
"customerId" : "000012356",
"currencyPair" : "USDEUR",
"amountCurrency": "EUR",
"amount": 10000,
"tenor" : "ON",
"requestType" : "Rfq"
}
]
Response:
[
{
"quoteRequestId" : "0016b117-2132-4670-864b-6ffd2151b5ff",
"quoteType": "Tradable",
"quoteId" : "c62cd555-2ab1-43af-be40-d623d7a4f2c9",
"currencyPair": "USDEUR",
"tenor" : "ON",
"exchangeRateBid": {
"allInRate" : 0.8544807
},
"exchangeRateAsk": {
"allInRate" : 0.8544842
},
"expiryTime": "2026-11-25T14:28:30.0010001+00:00",
"customerId" : "000012356"
}
]Example Request - Multiple Quotes
The API supports requesting multiple quotes at the same time - either for the same currency pair or for multiple different currency pairs. You must use the quoteRequestId field to match a quote in the response to each request, although the API will respond in the same order as your requests.
In this example, we are requesting one EURUSD quote without specifying the currency pair, and one GBPEUR SPOT quote specifying the inverse currency pair, and one indicative EURDKK quote (indicative quotes cannot be used for trading) for a different customer id
[
{
"quoteRequestId" : "0016b117-2132-4670-864b-6ffd2151b5ff",
"customerId" : "000012356",
"currencyOne" : "EUR",
"currencyTwo" : "USD",
"amountCurrency": "EUR",
"amount": 10000,
"tenor" : "ON",
"requestType" : "Rfq"
},
{
"quoteRequestId" : "e4c15fc8-bd69-4dc7-9fe0-c8e3c4822b77",
"customerId" : "000012356",
"currencyPair" : "GBPEUR",
"amountCurrency": "EUR",
"amount": 10000,
"tenor" : "SPOT",
"requestType" : "Rfq"
},
{
"quoteRequestId" : "327d1540-80ce-4ccb-9f2c-6e521116ec84",
"customerId" : "000012365",
"currencyPair" : "EURDKK",
"amountCurrency": "EUR",
"amount": 10000,
"tenor" : "ON",
"requestType" : "Indicative"
}
]
The API will then respond with three quotes:
[
{
"quoteRequestId" : "0016b117-2132-4670-864b-6ffd2151b5ff",
"quoteType": "Tradable",
"quoteId" : "c62cd555-2ab1-43af-be40-d623d7a4f2c9",
"currencyPair": "EURUSD",
"tenor" : "ON",
"exchangeRateBid": {
"allInRate" : 1.1702966
},
"exchangeRateAsk": {
"allInRate" : 1.1703015
},
"expiryTime": "2026-11-25T14:28:30.0010001+00:00",
"customerId" : "000012356"
},
{
"quoteRequestId" : "e4c15fc8-bd69-4dc7-9fe0-c8e3c4822b77",
"quoteType": "Tradable",
"quoteId" : "f69726e3-bfe9-47f5-8ceb-0a9078fcc2ab",
"currencyPair": "GBPEUR",
"tenor" : "SPOT",
"exchangeRateBid": {
"allInRate" : 1.1556151
},
"exchangeRateAsk": {
"allInRate" : 1.1676876
},
"expiryTime": "2026-11-25T14:28:30.0010001+00:00",
"customerId" : "000012356"
},
{
"quoteRequestId" : "327d1540-80ce-4ccb-9f2c-6e521116ec84",
"quoteType": "Indicative", // Indicative quotes have no quote id or expiry time
"currencyPair": "EURDKK",
"tenor" : "ON",
"exchangeRateBid": {
"allInRate" : 7.4653621
},
"exchangeRateAsk": {
"allInRate" : 7.4869430
},
"customerId" : "000012365"
}
]Using the Quote
Tradable quote typesOnly 'Tradable' quote types can be used for trading. Each quote can only be used once - unless the requested quote was for a held rate.
You can then use either quote to execute an FX order using a POST request - in this example we are buying 10,000 EUR (do not submit a tenor field in the RFQ workflow as it is derived from your quote):
{
"clientOrderId": "YourUniqueReference",
"buyCurrency": "EUR",
"sellCurrency": "USD",
"amount": 10000,
"amountCurrency": "EUR",
"quoteId": "c62cd555-2ab1-43af-be40-d623d7a4f2c9",
"customerId": "000012356"
}
// customerId should match with the customer id in the quote requestTrade Confirmation
The API will then respond to the trade with a confirmation:
{
"tradeStatus": "Filled",
"clientOrderId": "YourUniqueReference",
"bankingCircleRef": "2110081357029",
"customerId": "000012356",
"boughtCurrency": "EUR",
"boughtAmount": 10000,
"soldCurrency": "USD",
"soldAmount": 11703.02,
"currencyPair": "EURUSD",
"exchangeRate": 1.1703015,
"valueDate": "2026-11-25",
"tradeExecutionTime": "2026-11-25T14:28:25.7467007+00:00"
}
UseclientOrderIdorbankingCircleRefto query for or reconcile your FX transactionsThe client order id in the order as well as the BC Connect reference in the trade confirmation can be used as search criteria to retrieve further details about your transactions via our FX transactions endpoint.
BankingCircleRefis furthermore available in the account reconciliation endpoint in fieldPaymentDetails1.
Request Format
This table explains the fields used in your request in detail.
Parameter | Required | Description |
|---|---|---|
quoteRequestId | Mandatory | A unique identifier for your request. Use UUID/GUID format. |
customerId | Mandatory | Your Banking Circle customer identifier. You may have access to multiple legal entities. The customer id must always match with the legal entity that owns the sell (debit) account. |
currencyOne | Conditional | You must specify either both currencyOne and currencyTwo, or the currency pair. If you choose to specify currencies only, Banking Circle will provide the currency pair in our convention for those two currencies. |
currencyTwo | Conditional | As above. Must be different from currencyOne |
currencyPair | Conditional | If you do not specify two individual currencies, you must specify a currency pair e.g. EURUSD. The quote in the response will always be in this convention. |
tenor | Mandatory | The tenor of the request determines the settlement date of the trade. For payments, must be set to ON. |
amountCurrency | Conditional | Specify the currency of your request. The currency must match with the amount currency of your trade or payment instruction. |
requestType | Mandatory | Specify the type of request:
|
validFor | Optional | The validity period for the quote in minutes. This field should be included, if you are requesting held rates specifically. |
Response Format
The response will contain a list of quotes corresponding to each request.
Name | Required | Description |
|---|---|---|
quoteRequestId | Mandatory | Echoed back from your original request. |
customerId | Mandatory | Echoed back from your original request. |
tenor | Mandatory | Echoed back from your original request. |
quoteType | Mandatory |
|
currencyPair | Mandatory | The currency pair of the quote. If currency pair was specified in original request, it will match with the requested currency pair. Otherwise, Banking Circle convention will be used |
quoteId | Conditional | A unique identifier for tradable quotes. |
exchangeRateBid | Conditional | The bid rate of tradable or indicative quotes. |
exchangeRateAsk | Conditional | The ask rate for tradable or indicative quotes. |
expiryTime | Conditional | The expiration time for tradable quotes. |
errorCode | Conditional | In case of NotAvailable quotes, a reason is included. |
Indicative Rates
It is possible to retrieve an indicative foreign exchange quote by setting requestType to Indicative. This will give you an approximation of the exchange rate currently available if you were to initiate either a cross-border payment or an FX order at the time of the request.
Market Volatility
The Foreign Exchange market moves rapidly - volatile periods can result in thousands of microscopic price movements per second. As such, querying the endpoint multiple times for the same two currencies will not usually produce the same quote. In most payment scenarios, however, these movements are relatively insignificant.
