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 types

Only '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 request

Trade 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" 
}
📘

Use clientOrderId or bankingCircleRef to query for or reconcile your FX transactions

The 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. BankingCircleRef is furthermore available in the account reconciliation endpoint in field PaymentDetails1.

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:

  • Indicative: Use when you do not intend to trade or instruct a payment
  • Rfq: Use when executing FX trades purposes (can also be used for payments)
  • PaymentRfq: Use when instructing payments
  • HeldRate: Use when requesting a held rate.

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

Indicative: This quote is for display purposes only.

Tradable: This is a firm quote that can be used for trading or payments

NotAvailable: Quote for this currency pair is currently not available

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.