curl --request POST \
--url https://api-staging.cashweb.cash/api/v1/partner/transactions \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"crypto_currency": "usdt",
"merchant_reference": "order-4551",
"network": "bep20",
"fiat_amount": "49000.00",
"merchant_id": "mrc_001",
"quote_id": "9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1",
"seller_phone": "08031234567",
"terminal_id": "term_01"
}
'import requests
url = "https://api-staging.cashweb.cash/api/v1/partner/transactions"
payload = {
"crypto_currency": "usdt",
"merchant_reference": "order-4551",
"network": "bep20",
"fiat_amount": "49000.00",
"merchant_id": "mrc_001",
"quote_id": "9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1",
"seller_phone": "08031234567",
"terminal_id": "term_01"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-API-KEY': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
crypto_currency: 'usdt',
merchant_reference: 'order-4551',
network: 'bep20',
fiat_amount: '49000.00',
merchant_id: 'mrc_001',
quote_id: '9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1',
seller_phone: '08031234567',
terminal_id: 'term_01'
})
};
fetch('https://api-staging.cashweb.cash/api/v1/partner/transactions', 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-staging.cashweb.cash/api/v1/partner/transactions",
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([
'crypto_currency' => 'usdt',
'merchant_reference' => 'order-4551',
'network' => 'bep20',
'fiat_amount' => '49000.00',
'merchant_id' => 'mrc_001',
'quote_id' => '9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1',
'seller_phone' => '08031234567',
'terminal_id' => 'term_01'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-staging.cashweb.cash/api/v1/partner/transactions"
payload := strings.NewReader("{\n \"crypto_currency\": \"usdt\",\n \"merchant_reference\": \"order-4551\",\n \"network\": \"bep20\",\n \"fiat_amount\": \"49000.00\",\n \"merchant_id\": \"mrc_001\",\n \"quote_id\": \"9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1\",\n \"seller_phone\": \"08031234567\",\n \"terminal_id\": \"term_01\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-API-KEY", "<api-key>")
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-staging.cashweb.cash/api/v1/partner/transactions")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"crypto_currency\": \"usdt\",\n \"merchant_reference\": \"order-4551\",\n \"network\": \"bep20\",\n \"fiat_amount\": \"49000.00\",\n \"merchant_id\": \"mrc_001\",\n \"quote_id\": \"9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1\",\n \"seller_phone\": \"08031234567\",\n \"terminal_id\": \"term_01\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.cashweb.cash/api/v1/partner/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"crypto_currency\": \"usdt\",\n \"merchant_reference\": \"order-4551\",\n \"network\": \"bep20\",\n \"fiat_amount\": \"49000.00\",\n \"merchant_id\": \"mrc_001\",\n \"quote_id\": \"9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1\",\n \"seller_phone\": \"08031234567\",\n \"terminal_id\": \"term_01\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"amount": "161500.00",
"crypto_amount": "100.00",
"crypto_currency": "usdt",
"deposit_address": "0x9d8D32b6D7DfDdAb66f6a79b9dA8fA2E30A91B7a",
"expires_at": "2026-02-12T12:00:00Z",
"id": "01917f00-7b4c-7f56-8a2b-15998d58c9f3",
"merchant_id": "mrc_001",
"merchant_reference": "order-4551",
"network": "bep20",
"rate": "1615.00",
"status": "awaiting_deposit",
"terminal_id": "term_01"
},
"success": true
}{
"error": {
"code": "BAD_REQUEST",
"message": "Provide either quote_id or fiat_amount + crypto_currency",
"timestamp": "2026-02-12T12:00:00Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "CONFLICT",
"message": "merchant_reference already exists with different transaction parameters",
"timestamp": "2026-02-12T12:00:00Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Create partner transaction with canonical recovery reference
Creates a partner transaction and reserves a deposit address. Use Idempotency-Key for safe retries and provide a canonical merchant_reference for recovery lookups. Request pricing must use either quote mode (quote_id) or direct mode (fiat_amount + crypto_currency + network).
curl --request POST \
--url https://api-staging.cashweb.cash/api/v1/partner/transactions \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"crypto_currency": "usdt",
"merchant_reference": "order-4551",
"network": "bep20",
"fiat_amount": "49000.00",
"merchant_id": "mrc_001",
"quote_id": "9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1",
"seller_phone": "08031234567",
"terminal_id": "term_01"
}
'import requests
url = "https://api-staging.cashweb.cash/api/v1/partner/transactions"
payload = {
"crypto_currency": "usdt",
"merchant_reference": "order-4551",
"network": "bep20",
"fiat_amount": "49000.00",
"merchant_id": "mrc_001",
"quote_id": "9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1",
"seller_phone": "08031234567",
"terminal_id": "term_01"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-API-KEY': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
crypto_currency: 'usdt',
merchant_reference: 'order-4551',
network: 'bep20',
fiat_amount: '49000.00',
merchant_id: 'mrc_001',
quote_id: '9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1',
seller_phone: '08031234567',
terminal_id: 'term_01'
})
};
fetch('https://api-staging.cashweb.cash/api/v1/partner/transactions', 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-staging.cashweb.cash/api/v1/partner/transactions",
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([
'crypto_currency' => 'usdt',
'merchant_reference' => 'order-4551',
'network' => 'bep20',
'fiat_amount' => '49000.00',
'merchant_id' => 'mrc_001',
'quote_id' => '9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1',
'seller_phone' => '08031234567',
'terminal_id' => 'term_01'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-staging.cashweb.cash/api/v1/partner/transactions"
payload := strings.NewReader("{\n \"crypto_currency\": \"usdt\",\n \"merchant_reference\": \"order-4551\",\n \"network\": \"bep20\",\n \"fiat_amount\": \"49000.00\",\n \"merchant_id\": \"mrc_001\",\n \"quote_id\": \"9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1\",\n \"seller_phone\": \"08031234567\",\n \"terminal_id\": \"term_01\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-API-KEY", "<api-key>")
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-staging.cashweb.cash/api/v1/partner/transactions")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"crypto_currency\": \"usdt\",\n \"merchant_reference\": \"order-4551\",\n \"network\": \"bep20\",\n \"fiat_amount\": \"49000.00\",\n \"merchant_id\": \"mrc_001\",\n \"quote_id\": \"9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1\",\n \"seller_phone\": \"08031234567\",\n \"terminal_id\": \"term_01\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.cashweb.cash/api/v1/partner/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"crypto_currency\": \"usdt\",\n \"merchant_reference\": \"order-4551\",\n \"network\": \"bep20\",\n \"fiat_amount\": \"49000.00\",\n \"merchant_id\": \"mrc_001\",\n \"quote_id\": \"9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1\",\n \"seller_phone\": \"08031234567\",\n \"terminal_id\": \"term_01\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"amount": "161500.00",
"crypto_amount": "100.00",
"crypto_currency": "usdt",
"deposit_address": "0x9d8D32b6D7DfDdAb66f6a79b9dA8fA2E30A91B7a",
"expires_at": "2026-02-12T12:00:00Z",
"id": "01917f00-7b4c-7f56-8a2b-15998d58c9f3",
"merchant_id": "mrc_001",
"merchant_reference": "order-4551",
"network": "bep20",
"rate": "1615.00",
"status": "awaiting_deposit",
"terminal_id": "term_01"
},
"success": true
}{
"error": {
"code": "BAD_REQUEST",
"message": "Provide either quote_id or fiat_amount + crypto_currency",
"timestamp": "2026-02-12T12:00:00Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "CONFLICT",
"message": "merchant_reference already exists with different transaction parameters",
"timestamp": "2026-02-12T12:00:00Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
Headers
Idempotency key for safe retries
Body
Create a partner transaction. Use either quote mode (quote_id) or direct mode (fiat_amount + crypto_currency + network).
Token symbol (only for direct mode).
"usdt"
Canonical partner reference for recovery and reconciliation.
1 - 255"order-4551"
Network expected for this transaction.
"bep20"
Fiat amount in NGN (only for direct mode).
"49000.00"
Merchant identifier from partner systems.
"mrc_001"
Quote identifier previously returned from /quotes.
"9f8ad58e-f8d5-4e4f-b3f2-f44eaf8f95d1"
Seller phone for assisted flow.
"08031234567"
Terminal identifier from partner systems.
"term_01"
Response
Transaction created successfully
Standard API response wrapper for all successful responses