curl --request GET \
--url https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangeratesimport requests
url = "https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"uuid": "83ec7885-c72b-4f70-99a5-afe1e1f787c5",
"baseCurrency": {
"numericCode": 978,
"alphaCode": "EUR",
"minorUnits": 2
},
"rate": "1.0922",
"foreignCurrency": {
"numericCode": 840,
"alphaCode": "USD",
"minorUnits": 2
},
"marginPercentage": "3",
"commissionPercentage": "0.010000",
"source": "REUTERS WHOLESALE INTERBANK",
"sourceTimestamp": "2026-09-15T08:00:00Z",
"expiry": "2026-09-16T08:00:00Z"
}{
"timestamp": "2026-09-15T10:30:30Z",
"url": "/dhsv2/acquirers/TST/merchants/11111111/exchangerates?currency=XXX",
"error": "BAD_REQUEST",
"status": 400,
"message": "Unsupported currency code"
}{
"timestamp": "2026-09-15T10:30:30Z",
"url": "/dhsv2/acquirers/TST/merchants/99999999/exchangerates",
"error": "NOT_FOUND",
"status": 404,
"message": "No such Merchant"
}{
"timestamp": "2026-09-15T10:30:30Z",
"url": "/dhsv2/acquirers/TST/merchants/11111111/exchangerates",
"error": "INTERNAL_SERVER_ERROR",
"status": 500,
"message": "An unexpected error occurred"
}Lookup exchange rate
Exchange Rate
When implementing MCP with eCommerce, it is typical to update FX rates once per day. Since customers may visit a website several times before making a purchase, it is best to keep the pricing stable by using one rate per day.
Online auction websites and those that provide cross-border products or services target a customer market that expects exchange rates to vary throughout the day. Therefore, the option to update FX rates several times per day is more suitable.
Other examples could include financial services and gambling sites where the customer anticipates the price of a product or service may vary throughout the day.
Disclaimer
The rates used here are static and are used for the purposes of executing API calls.
Note: The return could be one ExchangeRate or a List of ExchangeRate
curl --request GET \
--url https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangeratesimport requests
url = "https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/dhsv2/acquirers/{acquirerId}/merchants/{merchantId}/exchangerates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"uuid": "83ec7885-c72b-4f70-99a5-afe1e1f787c5",
"baseCurrency": {
"numericCode": 978,
"alphaCode": "EUR",
"minorUnits": 2
},
"rate": "1.0922",
"foreignCurrency": {
"numericCode": 840,
"alphaCode": "USD",
"minorUnits": 2
},
"marginPercentage": "3",
"commissionPercentage": "0.010000",
"source": "REUTERS WHOLESALE INTERBANK",
"sourceTimestamp": "2026-09-15T08:00:00Z",
"expiry": "2026-09-16T08:00:00Z"
}{
"timestamp": "2026-09-15T10:30:30Z",
"url": "/dhsv2/acquirers/TST/merchants/11111111/exchangerates?currency=XXX",
"error": "BAD_REQUEST",
"status": 400,
"message": "Unsupported currency code"
}{
"timestamp": "2026-09-15T10:30:30Z",
"url": "/dhsv2/acquirers/TST/merchants/99999999/exchangerates",
"error": "NOT_FOUND",
"status": 404,
"message": "No such Merchant"
}{
"timestamp": "2026-09-15T10:30:30Z",
"url": "/dhsv2/acquirers/TST/merchants/11111111/exchangerates",
"error": "INTERNAL_SERVER_ERROR",
"status": 500,
"message": "An unexpected error occurred"
}Headers
Path Parameters
Query Parameters
List of foreign ISO4217 currency codes. You can specify any combination of alphabetic and numeric currency codes.
Note: Please do not add spaces before or after the commas that separate the currency codes
If you want to override the Card foreigner's currency with a custom currency you can pass the foreign currency in this parameter with the bin information
Note: The base currency is GBP. Please do not use GBP in the currency field
Note: The currency field is only for an MCP Rate Call
This value is an extension of bin allowing for the next 6 digits of the card number. This value is the Card Currency Identifier (or Currency ID) which is used in conjunction with the BIN specified and provides the next 6 digits of the card number, whereby:
- bin: specifies only digits 1 to 6 of the BIN
- cid: specifies digits 7 to 12 of the card number A maximum of 6 digits is accepted while 4 is the recommended length. Note: Only 4 digits of the CID are stored
6Response
Exchange Rate.
The service can return an Entity or a List of Entities.
- object
- object[]
