curl --request GET \
--url https://api.next.orenda.finance/v1/accounts/{accountId}/fx/quote \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.next.orenda.finance/v1/accounts/{accountId}/fx/quote"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.next.orenda.finance/v1/accounts/{accountId}/fx/quote', 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.next.orenda.finance/v1/accounts/{accountId}/fx/quote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.next.orenda.finance/v1/accounts/{accountId}/fx/quote"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.next.orenda.finance/v1/accounts/{accountId}/fx/quote")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/accounts/{accountId}/fx/quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"quoteId": "2a7c4e6f-8b1d-4c3e-9f0a-1b2c3d4e5f6a",
"currencyOne": "GBP",
"currencyTwo": "HKD",
"amountCurrency": "GBP",
"amount": 100,
"rate": 10.2345,
"price": 1023.45,
"tenor": "SPOT",
"valueDate": "2026-06-20T00:00:00Z",
"validUntil": "2026-06-18T10:33:00Z"
}
}Get an FX quote
Returns an exchange-rate quote for a currency pair. Pass the quoteId to Create an international transfer before validUntil; after that the quote is dead.
amountCurrency must be currencyOne or currencyTwo; it says which side of the pair amount is in. amount is a plain decimal string. tenor defaults to SPOT. price can be null; treat that as no price for this quote, not as an amount.
FX quotes come with international payments: program.payments.international in GET /v1/capabilities. On a program without them, or an account whose provider can’t quote, this returns 422 PROVIDER_ERROR. Treat that as FX being off here.
The indicative flag the underlying service knows about can’t be set on this route: a query string is text and the validator wants a boolean, so any value is a 400.
curl --request GET \
--url https://api.next.orenda.finance/v1/accounts/{accountId}/fx/quote \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.next.orenda.finance/v1/accounts/{accountId}/fx/quote"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.next.orenda.finance/v1/accounts/{accountId}/fx/quote', 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.next.orenda.finance/v1/accounts/{accountId}/fx/quote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.next.orenda.finance/v1/accounts/{accountId}/fx/quote"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.next.orenda.finance/v1/accounts/{accountId}/fx/quote")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.next.orenda.finance/v1/accounts/{accountId}/fx/quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"quoteId": "2a7c4e6f-8b1d-4c3e-9f0a-1b2c3d4e5f6a",
"currencyOne": "GBP",
"currencyTwo": "HKD",
"amountCurrency": "GBP",
"amount": 100,
"rate": 10.2345,
"price": 1023.45,
"tenor": "SPOT",
"valueDate": "2026-06-20T00:00:00Z",
"validUntil": "2026-06-18T10:33:00Z"
}
}Authorizations
The user's access_token from authentication. The program and environment come from the token.
Path Parameters
Account identifier. The account determines which optional features and limits apply.
Query Parameters
Source currency (ISO 4217)
3Target currency (ISO 4217)
3Which currency amount is denominated in; must equal currencyOne or currencyTwo.
3ON, TN, SPOT Optional valuation date.