Create Express Quote
curl --request POST \
--url https://api.hyperrails.io/api/v1/partners/marketplace/express/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sourceCurrency": "NGN",
"destinationCurrency": "USDT",
"amount": 50000
}
'import requests
url = "https://api.hyperrails.io/api/v1/partners/marketplace/express/quote"
payload = {
"sourceCurrency": "NGN",
"destinationCurrency": "USDT",
"amount": 50000
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({sourceCurrency: 'NGN', destinationCurrency: 'USDT', amount: 50000})
};
fetch('https://api.hyperrails.io/api/v1/partners/marketplace/express/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.hyperrails.io/api/v1/partners/marketplace/express/quote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sourceCurrency' => 'NGN',
'destinationCurrency' => 'USDT',
'amount' => 50000
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hyperrails.io/api/v1/partners/marketplace/express/quote"
payload := strings.NewReader("{\n \"sourceCurrency\": \"NGN\",\n \"destinationCurrency\": \"USDT\",\n \"amount\": 50000\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hyperrails.io/api/v1/partners/marketplace/express/quote")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sourceCurrency\": \"NGN\",\n \"destinationCurrency\": \"USDT\",\n \"amount\": 50000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperrails.io/api/v1/partners/marketplace/express/quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceCurrency\": \"NGN\",\n \"destinationCurrency\": \"USDT\",\n \"amount\": 50000\n}"
response = http.request(request)
puts response.read_body[
{
"quoteId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "pending",
"source": "NGN",
"destination": "USDT",
"chain": "BASE",
"amount": 50000,
"totalSourceAmount": 50000,
"totalDestinationAmount": 31.65,
"clientId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mode": "live",
"ttl": 300,
"allocationResult": {
"totalSourceAmount": 50000,
"weightedAverageRate": 1580.5,
"totalDestinationAmount": 31.65,
"allocations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clientId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"poolId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"poolAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"allocatedAmount": 31.65,
"sourceAmount": 50000,
"rate": 1580.5,
"reference": "REF-001",
"metadata": {}
}
]
},
"metadata": {
"bankPayIn": {
"accountName": "Spotflow Ltd",
"accountNumber": "0123456789",
"bankName": "Access Bank",
"reference": "PAY-REF-001"
},
"cryptoPayIn": {
"addressId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"address": "0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5",
"chain": "BASE",
"token": "USDT",
"addressType": "deposit",
"expectedAmount": 50000,
"externalReference": "<string>",
"status": "active",
"createdAt": "2026-04-01T10:55:46.254Z",
"expiresAt": "2026-04-01T10:55:46.256Z",
"virtualAccountId": "<string>",
"derivationIndex": 0,
"warningMessage": "<string>"
}
},
"chatMetadata": {
"conversationId": "<string>",
"chatQuoteId": "<string>",
"listingId": "<string>",
"initialListingRate": "<string>",
"negotiationStartedAt": "2023-11-07T05:31:56Z",
"quoteSentAt": "2023-11-07T05:31:56Z",
"acceptedAt": "2023-11-07T05:31:56Z"
}
}
]{
"code": "INVALID_CURRENCY",
"message": "Invalid source currency. Supported: NGN, GHS",
"details": {}
}{
"code": "INVALID_CURRENCY",
"message": "Invalid source currency. Supported: NGN, GHS",
"details": {}
}Exchange
Create Instant Trade
Create an express quote with automatic best-rate provider selection and immediate execution.
POST
/
partners
/
marketplace
/
express
/
quote
Create Express Quote
curl --request POST \
--url https://api.hyperrails.io/api/v1/partners/marketplace/express/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sourceCurrency": "NGN",
"destinationCurrency": "USDT",
"amount": 50000
}
'import requests
url = "https://api.hyperrails.io/api/v1/partners/marketplace/express/quote"
payload = {
"sourceCurrency": "NGN",
"destinationCurrency": "USDT",
"amount": 50000
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({sourceCurrency: 'NGN', destinationCurrency: 'USDT', amount: 50000})
};
fetch('https://api.hyperrails.io/api/v1/partners/marketplace/express/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.hyperrails.io/api/v1/partners/marketplace/express/quote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sourceCurrency' => 'NGN',
'destinationCurrency' => 'USDT',
'amount' => 50000
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hyperrails.io/api/v1/partners/marketplace/express/quote"
payload := strings.NewReader("{\n \"sourceCurrency\": \"NGN\",\n \"destinationCurrency\": \"USDT\",\n \"amount\": 50000\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hyperrails.io/api/v1/partners/marketplace/express/quote")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sourceCurrency\": \"NGN\",\n \"destinationCurrency\": \"USDT\",\n \"amount\": 50000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperrails.io/api/v1/partners/marketplace/express/quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceCurrency\": \"NGN\",\n \"destinationCurrency\": \"USDT\",\n \"amount\": 50000\n}"
response = http.request(request)
puts response.read_body[
{
"quoteId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "pending",
"source": "NGN",
"destination": "USDT",
"chain": "BASE",
"amount": 50000,
"totalSourceAmount": 50000,
"totalDestinationAmount": 31.65,
"clientId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mode": "live",
"ttl": 300,
"allocationResult": {
"totalSourceAmount": 50000,
"weightedAverageRate": 1580.5,
"totalDestinationAmount": 31.65,
"allocations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clientId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"poolId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"poolAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"allocatedAmount": 31.65,
"sourceAmount": 50000,
"rate": 1580.5,
"reference": "REF-001",
"metadata": {}
}
]
},
"metadata": {
"bankPayIn": {
"accountName": "Spotflow Ltd",
"accountNumber": "0123456789",
"bankName": "Access Bank",
"reference": "PAY-REF-001"
},
"cryptoPayIn": {
"addressId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"address": "0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5",
"chain": "BASE",
"token": "USDT",
"addressType": "deposit",
"expectedAmount": 50000,
"externalReference": "<string>",
"status": "active",
"createdAt": "2026-04-01T10:55:46.254Z",
"expiresAt": "2026-04-01T10:55:46.256Z",
"virtualAccountId": "<string>",
"derivationIndex": 0,
"warningMessage": "<string>"
}
},
"chatMetadata": {
"conversationId": "<string>",
"chatQuoteId": "<string>",
"listingId": "<string>",
"initialListingRate": "<string>",
"negotiationStartedAt": "2023-11-07T05:31:56Z",
"quoteSentAt": "2023-11-07T05:31:56Z",
"acceptedAt": "2023-11-07T05:31:56Z"
}
}
]{
"code": "INVALID_CURRENCY",
"message": "Invalid source currency. Supported: NGN, GHS",
"details": {}
}{
"code": "INVALID_CURRENCY",
"message": "Invalid source currency. Supported: NGN, GHS",
"details": {}
}Adding Test Funds
On test mode with your test keys, you can easily add fake funds to the jollof bank account number created for you to fulfil an order using our Funds Simulator AppSee the full guide on Funding in test mode.
Authorizations
API key authentication using Bearer token
Body
application/json
Response
Express quote created successfully
Unique quote identifier
Example:
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
Quote status
Available options:
pending, awaiting_payment, completed, expired, cancelled Example:
"pending"
Source currency
Example:
"NGN"
Destination currency
Example:
"USDT"
Blockchain network
Example:
"BASE"
Requested amount
Example:
50000
Total amount in source currency
Example:
50000
Total amount in destination currency
Example:
31.65
Client identifier
Operating mode
Available options:
live, sandbox Example:
"live"
Time to live in seconds
Example:
300
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Metadata for chat-based quote negotiation
Show child attributes
Show child attributes
Was this page helpful?
⌘I