Create Transaction
const form = new FormData();
form.append('transaction', '{"recipient":{"name":"Pastor Bright","type":"BUSINESS","account":{"accountNumber":"0867543789","sortCode":"044"}},"quoteId":"3f41daaa-029c-44a2-b7c6-ed922a68177b","reason":"Gift","remark":"thanks"}');
form.append('invoice', '<string>');
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
options.body = form;
fetch('https://sandboxapi.me-cash.com/v1/ramp/order', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://sandboxapi.me-cash.com/v1/ramp/order \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <api-key>' \
--form 'transaction={"recipient":{"name":"Pastor Bright","type":"BUSINESS","account":{"accountNumber":"0867543789","sortCode":"044"}},"quoteId":"3f41daaa-029c-44a2-b7c6-ed922a68177b","reason":"Gift","remark":"thanks"}' \
--form invoice='@example-file'import requests
url = "https://sandboxapi.me-cash.com/v1/ramp/order"
files = { "invoice": ("example-file", open("example-file", "rb")) }
payload = { "transaction": "{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}" }
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)import fs from 'fs';
const formData = new FormData();
formData.append('transaction', '{"recipient":{"name":"Pastor Bright","type":"BUSINESS","account":{"accountNumber":"0867543789","sortCode":"044"}},"quoteId":"3f41daaa-029c-44a2-b7c6-ed922a68177b","reason":"Gift","remark":"thanks"}');
formData.append('invoice', await new Response(fs.createReadStream('example-file')).blob());
const url = 'https://sandboxapi.me-cash.com/v1/ramp/order';
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}, body: formData};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandboxapi.me-cash.com/v1/ramp/order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://sandboxapi.me-cash.com/v1/ramp/order")
.header("x-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandboxapi.me-cash.com/v1/ramp/order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_bodyimport Foundation
let parameters = [
[
"name": "transaction",
"value": "{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}"
],
[
"name": "invoice",
"value": "<string>",
"fileName": "example-file"
]
]
let boundary = "---011000010111000001101001"
var body = ""
for param in parameters {
let paramName = param["name"]!
body += "--\(boundary)\r\n"
body += "Content-Disposition:form-data; name=\"\(paramName)\""
if let filename = param["fileName"] {
let contentType = param["contentType"]!
let fileContent = try String(contentsOfFile: filename, encoding: .utf8)
body += "; filename=\"\(filename)\"\r\n"
body += "Content-Type: \(contentType)\r\n\r\n"
body += fileContent
} else if let paramValue = param["value"] {
body += "\r\n\r\n\(paramValue)"
}
}
let postData = Data(body.utf8)
let url = URL(string: "https://sandboxapi.me-cash.com/v1/ramp/order")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["x-api-key": "<api-key>"]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))val client = OkHttpClient()
val mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001")
val body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
val request = Request.Builder()
.url("https://sandboxapi.me-cash.com/v1/ramp/order")
.post(body)
.addHeader("x-api-key", "<api-key>")
.build()
val response = client.newCall(request).execute()falsepackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandboxapi.me-cash.com/v1/ramp/order"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"status": "success",
"message": "order successfully created",
"data": {
"id": "80709a38-1e22-40f2-ad05-ac181f611531",
"type": "SEND",
"category": "OFF_RAMP",
"state": "PENDING",
"referenceNumber": "XXEYBAHUJORQB",
"quote": {
"id": "54728dcf-650d-4eb5-994f-95a060677487",
"source": {
"currency": "USDC",
"symbol": "USDC",
"type": "CRYPTOCURRENCY",
"amount": 5,
"network": {
"id": "f8fc48ff-81e6-4b5f-9a70-44fb744e3572",
"name": "Polygon Amoy",
"blockchain": "MATIC-AMOY"
}
},
"target": {
"currency": "NGN",
"country": "NG",
"type": "FIAT",
"paymentChannel": "BANK_TRANSFER",
"amount": 5537.1
},
"rate": 0.000903,
"fees": [
{
"amount": 0.025,
"gas": {
"type": "MEDIUM",
"total": 0.29237925
}
}
],
"summary": {
"total": 5.31737925
}
},
"recipient": {
"id": "95475698-61d2-46ee-b148-b882956a0eff",
"name": "Pastor Bright",
"type": "BUSINESS",
"account": {
"sortCode": "044",
"accountNumber": "0867543789"
}
},
"created": "2025-06-03T22:56:20.748484620"
}
}{
"message": "Invalid API key",
"status": "failed"
}{
"status": "error",
"message": "quote expired"
}{
"message": "Server failed to process request.",
"status": "failed"
}Create Transaction
Initiate a crypto-to-fiat (offramp) or crypto-to-crypto transaction using a quote
POST
/
v1
/
ramp
/
order
Create Transaction
const form = new FormData();
form.append('transaction', '{"recipient":{"name":"Pastor Bright","type":"BUSINESS","account":{"accountNumber":"0867543789","sortCode":"044"}},"quoteId":"3f41daaa-029c-44a2-b7c6-ed922a68177b","reason":"Gift","remark":"thanks"}');
form.append('invoice', '<string>');
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
options.body = form;
fetch('https://sandboxapi.me-cash.com/v1/ramp/order', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://sandboxapi.me-cash.com/v1/ramp/order \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <api-key>' \
--form 'transaction={"recipient":{"name":"Pastor Bright","type":"BUSINESS","account":{"accountNumber":"0867543789","sortCode":"044"}},"quoteId":"3f41daaa-029c-44a2-b7c6-ed922a68177b","reason":"Gift","remark":"thanks"}' \
--form invoice='@example-file'import requests
url = "https://sandboxapi.me-cash.com/v1/ramp/order"
files = { "invoice": ("example-file", open("example-file", "rb")) }
payload = { "transaction": "{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}" }
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)import fs from 'fs';
const formData = new FormData();
formData.append('transaction', '{"recipient":{"name":"Pastor Bright","type":"BUSINESS","account":{"accountNumber":"0867543789","sortCode":"044"}},"quoteId":"3f41daaa-029c-44a2-b7c6-ed922a68177b","reason":"Gift","remark":"thanks"}');
formData.append('invoice', await new Response(fs.createReadStream('example-file')).blob());
const url = 'https://sandboxapi.me-cash.com/v1/ramp/order';
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}, body: formData};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandboxapi.me-cash.com/v1/ramp/order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://sandboxapi.me-cash.com/v1/ramp/order")
.header("x-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandboxapi.me-cash.com/v1/ramp/order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_bodyimport Foundation
let parameters = [
[
"name": "transaction",
"value": "{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}"
],
[
"name": "invoice",
"value": "<string>",
"fileName": "example-file"
]
]
let boundary = "---011000010111000001101001"
var body = ""
for param in parameters {
let paramName = param["name"]!
body += "--\(boundary)\r\n"
body += "Content-Disposition:form-data; name=\"\(paramName)\""
if let filename = param["fileName"] {
let contentType = param["contentType"]!
let fileContent = try String(contentsOfFile: filename, encoding: .utf8)
body += "; filename=\"\(filename)\"\r\n"
body += "Content-Type: \(contentType)\r\n\r\n"
body += fileContent
} else if let paramValue = param["value"] {
body += "\r\n\r\n\(paramValue)"
}
}
let postData = Data(body.utf8)
let url = URL(string: "https://sandboxapi.me-cash.com/v1/ramp/order")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["x-api-key": "<api-key>"]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))val client = OkHttpClient()
val mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001")
val body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
val request = Request.Builder()
.url("https://sandboxapi.me-cash.com/v1/ramp/order")
.post(body)
.addHeader("x-api-key", "<api-key>")
.build()
val response = client.newCall(request).execute()falsepackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandboxapi.me-cash.com/v1/ramp/order"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"transaction\"\r\n\r\n{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"invoice\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"status": "success",
"message": "order successfully created",
"data": {
"id": "80709a38-1e22-40f2-ad05-ac181f611531",
"type": "SEND",
"category": "OFF_RAMP",
"state": "PENDING",
"referenceNumber": "XXEYBAHUJORQB",
"quote": {
"id": "54728dcf-650d-4eb5-994f-95a060677487",
"source": {
"currency": "USDC",
"symbol": "USDC",
"type": "CRYPTOCURRENCY",
"amount": 5,
"network": {
"id": "f8fc48ff-81e6-4b5f-9a70-44fb744e3572",
"name": "Polygon Amoy",
"blockchain": "MATIC-AMOY"
}
},
"target": {
"currency": "NGN",
"country": "NG",
"type": "FIAT",
"paymentChannel": "BANK_TRANSFER",
"amount": 5537.1
},
"rate": 0.000903,
"fees": [
{
"amount": 0.025,
"gas": {
"type": "MEDIUM",
"total": 0.29237925
}
}
],
"summary": {
"total": 5.31737925
}
},
"recipient": {
"id": "95475698-61d2-46ee-b148-b882956a0eff",
"name": "Pastor Bright",
"type": "BUSINESS",
"account": {
"sortCode": "044",
"accountNumber": "0867543789"
}
},
"created": "2025-06-03T22:56:20.748484620"
}
}{
"message": "Invalid API key",
"status": "failed"
}{
"status": "error",
"message": "quote expired"
}{
"message": "Server failed to process request.",
"status": "failed"
}🚧 The Ramp API is currently under construction. Endpoints and features described here are subject to change. Do not use in production until this notice is removed.
Create Transaction
This endpoint executes a transaction (either off-ramp to fiat or crypto-to-crypto transfer) using a previously generatedquoteId.
Endpoint
POST {{baseURL}}/v1/ramp/order
Headers
| Header | Value | Required | Description |
|---|---|---|---|
Content-Type | application/json | Yes | Specifies that the request body is JSON. |
x-api-key | YOUR_API_KEY | Yes | API key for authentication. |
Request Examples
1. Off-Ramp (Crypto-to-Fiat) Payout
This request sends cryptocurrency out of the wallet and initiates a bank payout to a fiat recipient.curl --location '{{baseURL}}/v1/ramp/order' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"recipient": {
"name": "Pastor Bright",
"type": "BUSINESS",
"account": {
"accountNumber": "0867543789",
"sortCode": "044"
}
},
"quoteId": "3f41daaa-029c-44a2-b7c6-ed922a68177b",
"reason": "Gift",
"remark": "thanks"
}'
const payload = {
recipient: {
name: "Pastor Bright",
type: "BUSINESS",
account: {
accountNumber: "0867543789",
sortCode: "044"
}
},
quoteId: "3f41daaa-029c-44a2-b7c6-ed922a68177b",
reason: "Gift",
remark: "thanks"
};
fetch('{{baseURL}}/v1/ramp/order', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
body: JSON.stringify(payload)
})
.then(res => res.json())
.then(console.log)
.catch(console.error);
2. Crypto-to-Crypto Transfer
This request converts or transfers assets directly to an external blockchain wallet address.curl --location '{{baseURL}}/v1/ramp/order' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"recipient": {
"symbol": "USDC",
"blockchain": "MATIC-AMOY",
"address": "0xd62acd62fdb155afaa5d12c6caf01119d413dfd9"
},
"quoteId": "59628a6c-3d05-406a-ad39-77f92b09137c",
"reason": "Test",
"remark": "Check"
}'
const payload = {
recipient: {
symbol: "USDC",
blockchain: "MATIC-AMOY",
address: "0xd62acd62fdb155afaa5d12c6caf01119d413dfd9"
},
quoteId: "59628a6c-3d05-406a-ad39-77f92b09137c",
reason: "Test",
remark: "Check"
};
fetch('{{baseURL}}/v1/ramp/order', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
body: JSON.stringify(payload)
})
.then(res => res.json())
.then(console.log)
.catch(console.error);
Request Body Breakdown
| Field | Type | Required | Description |
|---|---|---|---|
quoteId | string | Yes | The UUID of the quote returned from the /quote endpoint. |
reason | string | Yes | Purpose of the transaction (e.g. "Salary", "Gift"). |
remark | string | No | Additional comments/memo. |
recipient | object | Yes | Recipient details depending on type. |
recipient.name | string | Yes (offramp) | Full name of the beneficiary. |
recipient.type | string | Yes (offramp) | Recipient type ("INDIVIDUAL", "BUSINESS"). |
recipient.account.accountNumber | string | Yes (offramp) | Bank account number. |
recipient.account.sortCode | string | Yes (offramp) | Bank sort code. |
recipient.address | string | Yes (crypto) | Wallet address. |
recipient.blockchain | string | Yes (crypto) | Target blockchain network. |
recipient.symbol | string | Yes (crypto) | Target cryptocurrency symbol. |
Success Response (Off-Ramp) 201 Created
{
"message": "order successfully created",
"status": "success",
"data": {
"id": "80709a38-1e22-40f2-ad05-ac181f611531",
"type": "SEND",
"category": "OFF_RAMP",
"state": "PENDING",
"referenceNumber": "XXEYBAHUJORQB",
"quote": {
"id": "54728dcf-650d-4eb5-994f-95a060677487",
"source": {
"currency": "USDC",
"symbol": "USDC",
"type": "CRYPTOCURRENCY",
"amount": 5,
"network": {
"id": "f8fc48ff-81e6-4b5f-9a70-44fb744e3572",
"name": "Polygon Amoy",
"blockchain": "MATIC-AMOY"
}
},
"target": {
"currency": "NGN",
"country": "NG",
"type": "FIAT",
"paymentChannel": "BANK_TRANSFER",
"amount": 5537.1
},
"rate": 0.000903,
"fees": [
{
"amount": 0.025,
"gas": {
"type": "MEDIUM",
"total": 0.29237925
}
}
],
"summary": {
"total": 5.31737925
}
},
"recipient": {
"id": "95475698-61d2-46ee-b148-b882956a0eff",
"name": "Pastor Bright",
"type": "BUSINESS",
"account": {
"sortCode": "044",
"accountNumber": "0867543789"
}
},
"created": "2025-06-03T22:56:20.748484620"
}
}
Success Response (Crypto-to-Crypto) 201 Created
{
"message": "order successfully created",
"status": "success",
"data": {
"id": "da0ab3cd-a608-4b0a-8de5-710112e2cb06",
"type": "SEND",
"category": "CRYPTOCURRENCY",
"state": "PENDING",
"referenceNumber": "PENUHSL7PRXEF",
"quote": {
"id": "6d70f89d-bc23-45c1-8504-d805ccd22235",
"source": {
"currency": "USDC",
"symbol": "USDC",
"blockchain": "MATIC-AMOY",
"type": "CRYPTOCURRENCY",
"amount": 2
},
"target": {
"currency": "USDC",
"symbol": "USDC",
"blockchain": "MATIC-AMOY",
"type": "CRYPTOCURRENCY",
"amount": 2
},
"rate": 1,
"fees": {
"amount": 0.01,
"gas": {
"type": "LOW",
"amount": 0.01875321
}
},
"summary": {
"total": 2.02875321
}
},
"recipient": {
"id": "962aabb8-f74e-4e1f-aab1-99467b9cf3b5",
"address": "0xd62acd62fdb155afaa5d12c6caf01119d413dfd9",
"network": {
"id": "f8fc48ff-81e6-4b5f-9a70-44fb744e3572",
"name": "USDC",
"blockchain": "MATIC-AMOY"
}
},
"created": "2025-06-04T12:04:00.817316767"
}
}
Error Responses
| HTTP Status | Error Code | Message | Description |
|---|---|---|---|
| 400 | INVALID_INPUT | Invalid request payload | Required parameters are missing or formatted incorrectly. |
| 401 | UNAUTHORIZED | Missing or invalid API key | The x-api-key header is missing or incorrect. |
| 422 | QUOTE_EXPIRED | Stale quote | The quote associated with the quoteId has expired. |
| 500 | SERVER_ERROR | Internal server error | An unexpected error occurred on the server. |
Authorizations
Body
multipart/form-data
JSON string representing the transaction payload.
Example:
"{\"recipient\":{\"name\":\"Pastor Bright\",\"type\":\"BUSINESS\",\"account\":{\"accountNumber\":\"0867543789\",\"sortCode\":\"044\"}},\"quoteId\":\"3f41daaa-029c-44a2-b7c6-ed922a68177b\",\"reason\":\"Gift\",\"remark\":\"thanks\"}"
Optional invoice file (PDF).
Was this page helpful?
⌘I

