FX Pricing API Documentation
Overview
FX Pricing API is designed to provide you up-to-date indicative quotes reflective of the FX and Money Market rates available for trading via the FX Market Order API. An example use case could be to retrieve an indicative market price prior to executing a trade. The available products are SPOT, Forward all-in prices, Forward points, Swap points and Money Market deposit rates.
Onboarding to API
In the developer portal, no additional onboarding is needed and you can start testing your workflow right away. When you are ready to migrate your solution to production, a Nordea FX Sales onboarding process is required to map the correct company IDs and other data before live trading can begin. Additionally, it is possible to be onboarded on a pre-production system based on live market data from our UAT environment, however this requires a whitelisting of your IP ranges. In both cases, please contact e-TradingSystems@nordea.com for more information.
API Console
To test using the API Console, select No Authentication, and input your client secret to begin testing. If you cannot see the API, make sure to subscribe your App to it first.
FX Pricing API Endpoints
The API has six endpoints: one for each product type. The developer portal version is based on mocked data only and does not reflect live FX rates on the market, despite the prices appearing to move from time to time. The prices on the mock portal are simulated.
Endpoint | Supported HTTP Methods |
---|---|
/prices/spot | GET |
/prices/forwards | GET |
/prices/forwards/ndf | GET |
/prices/forwards/points | GET |
/prices/swaps | GET |
/prices/money-market | GET |
The first endpoint can be used to retrieve one or more indicative FX Spot quotes. SPOT typically refers to value date T+2 (two business days from now, although in some currencies SPOT is T+1).
The second endpoint is used for retrieving one or more indicative FX forward quotes. A forward refers to all conversions where the value date is either before the SPOT date (also known as a short-dated forward), or after the SPOT date. The value date refers to when the settlement takes place, so the actual calendar date when the money is moved between the accounts in a live trade.
The third endpoint is used for retrieving one or more indicative quotes for FX NDF (Non-Deliverable Forward). It follows the same conventions as an ordinary FX Forward product.
The fourth endpoint is intended for use cases where you are interested in the forward curve: this endpoint displays only the forward points and thus excludes the SPOT component of a normal all-in price. They move less frequently so this may be a more suitable endpoint in use cases where drawing a forward curve is necessary.
The fifth endpoint is similar to the forward curve endpoint, with the exception of showing swap all-in prices. The forward curve and swap curve are effectively the same, however the all-in price for an FX Swap is priced differently than a forward since it contains two legs. The swap points are reflecting TODAY->SPOT, TOM->SPOT or SPOT->forward tenor all-in prices.
The sixth endpoint exposes money market deposit rates, that is, Nordea’s offered interest rate on time deposits on specific currencies. Though prices are quoted in both bid/offer directions, in practice Nordea only supports deposits rather than loans on the money market.
General Information
Each FX quote is always quoted using the base currency. For example, in EUR/USD, EUR is considered the base currency. In USD/DKK, USD is the base currency. In SEK/HUF, SEK is the base currency.
This means that the buy rate of an indicative quote refers to FX rate used for buying EUR from Nordea by selling USD to Nordea.
For FX SPOT, FX forward and FX NDF quotes, it is possible to request multiple quotes in a single request. This can be more efficient than making multiple individual requests. Here, the currency-pairs parameter accepts a comma-separated list of currencies (for example: EURDKK,EURSEK,EURGBP). The same applies for value-dates parameter used in forwards.
Note that all quotes are considered indicative only, and can not be used as firm tradeable quotes in any situation. That said, requesting an indicative price and immediately afterwards trading on the same FX product using the FX Market Order API should result in nearly identical execution price. This is because the price is produced by the same pricing engine in the end.
FX markets can be highly volatile. Some currency pairs tick/update on a millisecond-basis and therefore due to network latency, the price may have moved between your requests.
Supported FX Tenors
A tenor refers to a fixed value date in the future that takes into account all banking holidays in the two currencies involved. For example during easter, a EUR/DKK TOM trade executed on Wednesday will have settlement on the following Tuesday due to the bank holidays of Thursday, Friday and Monday in Denmark.
All tenors except for TODAY will automatically roll your transaction to the next available value date (such as in the above example, TOM does not settle on Thursday rather than on the following Tuesday). TODAY is the exception to the rule, and behaves like specific YYYYMMDD value dates. Specifying a YYYYMMDD or TODAY value date that is not a valid banking day in either involved currency will result in a rejection of the market order.
Allowed tenors:
TODAY | ON | TOM | TN | SPOT |
---|---|---|---|---|
SN | 1D | 1W | 2W | 3W |
1M | 2M | 3M | 4M | 5M |
6M | 7M | 8M | 9M | 10M |
11M | 1Y | 13M | 14M | 15M |
18M | 21M | 22M | 2Y | 30M |
3Y | 4Y | 5Y | 6Y | 7Y |
8Y | 9Y | 10Y |
Alternatively, you can supply YYYYMMDD value dates to get a price on a specific value date.
Opening Hours / Daily Cut-Off Hours
It is possible to retrieve indicative FX quotes during market opening hours, which are from Monday 5am Sydney time until Friday 5pm New York Time. The exception is the daily service window which takes place between 5-5:30pm New York Time nightly, and weekends when the global FX market is closed.
There are no cut-off times for retrieving quotes, however, please note that there are no tradable rates after the cut-off time has passed. For example, it is not possible to trade CNH with value date today if the CNH settlement account is not a Nordea account. This is because additional time is needed to perform the settlement and physically move the money to the external account.
The specific trading hours for currencies and tenors are available here: e-Markets opening hours
Company ID
The company ID field can be set to any value in the sandbox environment. In production, this value must be set to the company ID provided to you by FX Sales as a part of the onboarding process.
Partial responses
It is possible to request an indicative quote for multiple currency pairs in the same request. In such a request, it is possible that a quote is available for only some of the currency pairs requested, for example during highly volatile market conditions or technical difficulties. As such, it is possible to receive a partial response from the API, and you can parse through the response by checking the quote_state field.
OK in this field indicates price is available and you can use the quote as usual. ERROR indicates we were unable to produce a quote, in which case you can see the affected currency pair and textual reason in the error_reason field.
TLS Cipher Suites
Nordea uses secure HTTPS TLS1.2 cipher suites for all endpoints. In practice, any modern platform should support the below HTTPS ciphers out-of-box, but applications running on older operating systems (for example: older than Windows 8.1) may have to use additional software to wrap your connection with.
The minimum cipher suites levels are:
- TLS1.2-ECDHE-RSA-AES256-GCM-SHA384 (TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)
- TLS1.2-ECDHE-RSA-AES128-GCM-SHA256 (LS_ECDH_RSA_WITH_AES_128_GCM_SHA256)
Migrate to Production
Once you have completed your integration to our FX Pricing API, you are ready to migrate to production. This requires an onboarding process together with Nordea FX Sales.
In order to migrate to Production, please contact e-TradingSystems@nordea.com for additional information.
Pre-Production availability
If you would like to test your integration against live market data in UAT instead of our mocked sandbox environment, this is possible in our pre-production environment. However, onboarding to pre-production requires white-listing of your IP range.
Please contact e-TradingSystems@nordea.com and request onboarding to pre-production for a specific IP range.
API Examples
Here you can find examples on how to use the FX Pricing API endpoints. All examples can also be tried in the API Console.
Note that in all of the example cURL commands you must change the x-ibm-client-id, and x-ibm-client-secret header values to the correct ones for your application.
You can find the client id, and client secret from your app console. As a part of the production onboarding you must specify the client id value to your FX sales manager who will map it to Nordea’s FX systems accordingly. Failing to do so will result in a rejection of the request.
If you need to replace your client id in production, you must contact your FX sales representative or contact e-TradingSystems@nordea.com
cURL Examples
SPOT Example: retrieve a single indicative FX SPOT quote.
GET fx-pricing-api/v1/prices/spot HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/spot?company-id=YOUR_COMPANY¤cy-pairs=EURDKK' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response for a single indicative FX spot quote.
[
{
"quote_status": "OK",
"quote_id": "11d48628-783a-4810-9264-acccaa711174",
"currency_pair": "EURDKK",
"settl_date": "SPOT",
"sell_rate": 7.4658,
"buy_rate": 7.4663,
"mid_rate": 7.4661,
"quote_timestamp": "2019-07-11T13:16:53.716Z"
}
]
In the response: quote_timestamp refers to the time the price last moved in the market.
SPOT Example: price not available for a single indicative FX SPOT quote.
GET fx-pricing-api/v1/prices/spot HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/spot?company-id=YOUR_COMPANY¤cy-pairs=EURARS' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response for a single indicative FX spot quote
[
{
"quote_state": "ERROR",
"currency_pair": "EUR/ARS",
"error_reason": "Price not available"
}
]
SPOT Example: retrieve multiple FX spot quotes in one request
In this example we are requesting indicative FX SPOT quotes for EURDKK and EURSEK in one request:
GET fx-pricing-api/v1/prices/spot HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/spot?company-id=YOUR_COMPANY¤cy-pairs=EURDKK,EURSEK' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response, note there are now two quotes available:
[
{
"quote_status": "OK",
"quote_id": "11d48628-783a-4810-9264-acccaa711174",
"currency_pair": "EURDKK",
"settl_date": "SPOT",
"sell_rate": 7.4658,
"buy_rate": 7.4663,
"mid_rate": 7.4661,
"quote_timestamp": "2019-07-11T13:17:07.001Z"
},
{
"quote_status": "OK",
"quote_id": "11d48628-783a-4810-9264-acccaa711174",
"currency_pair": "EURSEK",
"settl_date": "SPOT",
"sell_rate": 10.4836,
"buy_rate": 10.4854,
"mid_rate": 10.4845,
"quote_timestamp": "2019-07-11T13:17:07.001Z"
}
]
SPOT Example: retrieve multiple FX spot quotes in one request, partial response
In this example we are requesting indicative FX SPOT quotes for EURDKK and EURARS in one request, but EURARS rate is not available:
GET fx-pricing-api/v1/prices/spot HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/spot?company-id=YOUR_COMPANY¤cy-pairs=EURDKK,EURSEK' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response, note there are now two quotes available:
[
{
"quote_state": "OK",
"quote_id": "e424f8ce-5a0d-4aac-995a-b7e5478aacdb",
"currency_pair": "EUR/DKK",
"settl_date": "SPOT",
"sell_rate": 7.45971,
"buy_rate": 7.48682,
"mid_rate": 7.473265,
"quote_timestamp": "2020-02-06T12:30:00.558Z"
},
{
"quote_state": "ERROR",
"currency_pair": "EUR/ARS",
"error_reason": "Price not available"
}
]
Forward Example: Request a quote for EURSEK and EURDKK with value dates 1M, 2M, respectively
GET fx-pricing-api/v1/prices/forwards HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/forwards?company-id=YOUR_COMPANY¤cy-pairs=EURDKK,EURSEK&value-dates=1M,2M' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response:
[
{
"quote_status": "OK",
"quote_id": "11d48628-783a-4810-9264-acccaa711174",
"currency_pair": "EURDKK",
"settl_date": "1M",
"sell_rate": 7.4658,
"buy_rate": 7.4663,
"mid_rate": 7.4661,
"quote_timestamp": "2019-07-11T13:22:21.281Z"
},
{
"quote_status": "OK",
"quote_id": "11d48628-783a-4810-9264-acccaa711174",
"currency_pair": "EURSEK",
"settl_date": "2M",
"sell_rate": 10.4835,
"buy_rate": 10.4855,
"mid_rate": 10.4845,
"quote_timestamp": "2019-07-11T13:22:21.281Z"
}
]
The number of currencies and value dates must always be equal. In this example EURDKK matches with 1M, EURSEK matches with 2M.
Forward Example: Request a quote for EURSEK and EURDKK, for a calendar date and tenor combination
GET fx-pricing-api/v1/prices/forwards HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/forwards?company-id=YOUR_COMPANY¤cy-pairs=EURDKK,EURSEK&value-dates=1M,2M' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response:
[
{
"quote_status": "OK",
"quote_id": "11d48628-783a-4810-9264-acccaa711174",
"currency_pair": "EURDKK",
"settl_date": "1M",
"sell_rate": 7.4658,
"buy_rate": 7.4663,
"mid_rate": 7.4661,
"quote_timestamp": "2019-07-11T13:22:21.281Z"
},
{
"quote_status": "OK",
"quote_id": "11d48628-783a-4810-9264-acccaa711174",
"currency_pair": "EURSEK",
"settl_date": "2M",
"sell_rate": 10.4835,
"buy_rate": 10.4855,
"mid_rate": 10.4845,
"quote_timestamp": "2019-07-11T13:22:21.281Z"
}
]
NDF Example: Request a quote for EURBRL with value dates 1M, 2M
GET fx-pricing-api/v1/prices/forwards/ndf HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/forwards/ndf?company-id=YOUR_COMPANY¤cy-pairs=EURBRL,EURBRL&value-dates=1M,2M' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response:
[
{
"quote_state": "OK",
"quote_id": "b0d03d5b-9210-4183-a9e6-30cab3286d86",
"currency_pair": "EUR/BRL",
"settl_date": "1M",
"sell_rate": 6.250941,
"buy_rate": 6.344523,
"mid_rate": 6.297732,
"quote_timestamp": "2020-11-18T14:41:08.126Z"
},
{
"quote_state": "OK",
"quote_id": "b0d03d5b-9210-4183-a9e6-30cab3286d86",
"currency_pair": "EUR/BRL",
"settl_date": "2M",
"sell_rate": 6.262551,
"buy_rate": 6.352611,
"mid_rate": 6.307581,
"quote_timestamp": "2020-11-18T14:41:08.126Z"
}
]
Forward Points Example: Request a quote for forward points of EURGBP and EURDKK with value dates 1M, 2M, respectively
GET fx-pricing-api/v1/prices/forwards/points HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/forwards/points?company-id=YOUR_COMPANY¤cy-pairs=EURGBP,EURDKK&value-dates=1M,2M' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response:
[
{
"quote_state": "OK",
"quote_id": "6168262f-c769-4e93-b2e1-15b79e4dedfc",
"currency_pair": "EURGBP",
"settl_date": "1M",
"sell_rate": 1.89,
"buy_rate": 2.33,
"mid_rate": 2.11,
"quote_timestamp": "2020-07-31T11:24:00.429Z"
},
{
"quote_state": "OK",
"quote_id": "55263ca8-2e3d-4f71-aa2d-18df402e55a2",
"currency_pair": "EURDKK",
"settl_date": "2M",
"sell_rate": -42.5,
"buy_rate": -27.5,
"mid_rate": -35.0,
"quote_timestamp": "2020-07-31T11:24:00.429Z"
}
]
SWAP Points Example: Request a quote for swap points of EURGBP and EURDKK with value dates 1M, 2M, respectively
GET fx-pricing-api/v1/prices/swaps HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/swaps?company-id=YOUR_COMPANY¤cy-pairs=EURGBP,EURDKK&value-dates=1M,2M' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response:
[
{
"quote_state": "OK",
"quote_id": "00852ffe-8ed5-4cd8-a2d5-66ad89a1796e",
"currency_pair": "EURGBP",
"settl_date": "1M",
"sell_rate": 1.93,
"buy_rate": 2.29,
"mid_rate": 2.11,
"quote_timestamp": "2020-07-31T11:25:31.323Z"
},
{
"quote_state": "OK",
"quote_id": "c122da67-b7e0-4631-b24a-8bc6a3306472",
"currency_pair": "EURDKK",
"settl_date": "2M",
"sell_rate": -41.0,
"buy_rate": -29.0,
"mid_rate": -35.0,
"quote_timestamp": "2020-07-31T11:25:31.323Z"
}
]
Money Market Example: Request a quote for money market rates of EUR and GBP with value dates 1M, 2M, respectively
GET fx-pricing-api/v1/prices/money-market HTTP/1.1
$ curl 'https://api.nordeaopenbanking.com/fx-pricing-api/v1/prices/money-market?company-id=YOUR_COMPANY¤cies-pairs=EUR,GBP&value-dates=1M,2M' -i \
-H 'x-ibm-client-id: CLIENT_ID' \
-H 'x-ibm-client-secret: CLIENT_SECRET'
Example response:
[
{
"quote_state": "OK",
"quote_id": "5a8ba7ba-d2a3-46cb-8b6e-1fcacccf07ab",
"currency_pair": "EUR",
"settl_date": "1M",
"sell_rate": -0.5,
"buy_rate": -0.6,
"mid_rate": -0.6,
"quote_timestamp": "2020-07-31T11:26:43.66Z"
},
{
"quote_state": "OK",
"quote_id": "ff29a512-49ab-4491-955e-cc8a37a17c95",
"currency_pair": "GBP",
"settl_date": "2M",
"sell_rate": 0.05,
"buy_rate": 0.06,
"mid_rate": 0.06,
"quote_timestamp": "2020-07-31T11:26:43.66Z"
}
]