Create crypto payment session
curl --request POST \
--url https://api.nexapay.ng/api/v1/business/crypto/payments/create \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"businessId": "<string>",
"amount": 123,
"merchantCustomerId": "<string>",
"merchantReference": "<string>",
"currency": "usdt",
"network": "trc20",
"expiresInMinutes": 60,
"metadata": {}
}
'import requests
url = "https://api.nexapay.ng/api/v1/business/crypto/payments/create"
payload = {
"businessId": "<string>",
"amount": 123,
"merchantCustomerId": "<string>",
"merchantReference": "<string>",
"currency": "usdt",
"network": "trc20",
"expiresInMinutes": 60,
"metadata": {}
}
headers = {
"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: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
businessId: '<string>',
amount: 123,
merchantCustomerId: '<string>',
merchantReference: '<string>',
currency: 'usdt',
network: 'trc20',
expiresInMinutes: 60,
metadata: {}
})
};
fetch('https://api.nexapay.ng/api/v1/business/crypto/payments/create', 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.nexapay.ng/api/v1/business/crypto/payments/create",
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([
'businessId' => '<string>',
'amount' => 123,
'merchantCustomerId' => '<string>',
'merchantReference' => '<string>',
'currency' => 'usdt',
'network' => 'trc20',
'expiresInMinutes' => 60,
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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.nexapay.ng/api/v1/business/crypto/payments/create"
payload := strings.NewReader("{\n \"businessId\": \"<string>\",\n \"amount\": 123,\n \"merchantCustomerId\": \"<string>\",\n \"merchantReference\": \"<string>\",\n \"currency\": \"usdt\",\n \"network\": \"trc20\",\n \"expiresInMinutes\": 60,\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
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.nexapay.ng/api/v1/business/crypto/payments/create")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"businessId\": \"<string>\",\n \"amount\": 123,\n \"merchantCustomerId\": \"<string>\",\n \"merchantReference\": \"<string>\",\n \"currency\": \"usdt\",\n \"network\": \"trc20\",\n \"expiresInMinutes\": 60,\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nexapay.ng/api/v1/business/crypto/payments/create")
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["Content-Type"] = 'application/json'
request.body = "{\n \"businessId\": \"<string>\",\n \"amount\": 123,\n \"merchantCustomerId\": \"<string>\",\n \"merchantReference\": \"<string>\",\n \"currency\": \"usdt\",\n \"network\": \"trc20\",\n \"expiresInMinutes\": 60,\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_bodyCrypto Collections
Create Crypto Payment Session
Generates a new TRC20 USDT deposit address for collecting payments from clients.
POST
/
crypto
/
payments
/
create
Create crypto payment session
curl --request POST \
--url https://api.nexapay.ng/api/v1/business/crypto/payments/create \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"businessId": "<string>",
"amount": 123,
"merchantCustomerId": "<string>",
"merchantReference": "<string>",
"currency": "usdt",
"network": "trc20",
"expiresInMinutes": 60,
"metadata": {}
}
'import requests
url = "https://api.nexapay.ng/api/v1/business/crypto/payments/create"
payload = {
"businessId": "<string>",
"amount": 123,
"merchantCustomerId": "<string>",
"merchantReference": "<string>",
"currency": "usdt",
"network": "trc20",
"expiresInMinutes": 60,
"metadata": {}
}
headers = {
"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: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
businessId: '<string>',
amount: 123,
merchantCustomerId: '<string>',
merchantReference: '<string>',
currency: 'usdt',
network: 'trc20',
expiresInMinutes: 60,
metadata: {}
})
};
fetch('https://api.nexapay.ng/api/v1/business/crypto/payments/create', 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.nexapay.ng/api/v1/business/crypto/payments/create",
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([
'businessId' => '<string>',
'amount' => 123,
'merchantCustomerId' => '<string>',
'merchantReference' => '<string>',
'currency' => 'usdt',
'network' => 'trc20',
'expiresInMinutes' => 60,
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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.nexapay.ng/api/v1/business/crypto/payments/create"
payload := strings.NewReader("{\n \"businessId\": \"<string>\",\n \"amount\": 123,\n \"merchantCustomerId\": \"<string>\",\n \"merchantReference\": \"<string>\",\n \"currency\": \"usdt\",\n \"network\": \"trc20\",\n \"expiresInMinutes\": 60,\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
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.nexapay.ng/api/v1/business/crypto/payments/create")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"businessId\": \"<string>\",\n \"amount\": 123,\n \"merchantCustomerId\": \"<string>\",\n \"merchantReference\": \"<string>\",\n \"currency\": \"usdt\",\n \"network\": \"trc20\",\n \"expiresInMinutes\": 60,\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nexapay.ng/api/v1/business/crypto/payments/create")
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["Content-Type"] = 'application/json'
request.body = "{\n \"businessId\": \"<string>\",\n \"amount\": 123,\n \"merchantCustomerId\": \"<string>\",\n \"merchantReference\": \"<string>\",\n \"currency\": \"usdt\",\n \"network\": \"trc20\",\n \"expiresInMinutes\": 60,\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_bodyCreates a dedicated collection session for USDT on TRC20, provisioning a deposit address.
How It Works
- The merchant creates a crypto payment session.
- NexaPay provisions a dedicated collection session for that payment.
- NexaPay generates a
USDTTRC20deposit address. - The merchant shows that address to the customer.
- NexaPay confirms the deposit.
- NexaPay settles the session balance into its parent crypto balance flow.
- The merchant’s
USDT balanceis credited only after settlement succeeds.
Authorizations
Merchant API Key (e.g., nexa-prod-... or nexa-test-...)
Headers
Target environment selector (live production vs. simulated sandbox).
Available options:
prod, test Body
application/json
The unique ID of the business profile (required for API key authentication).
Expected USDT amount.
Identifier for the customer.
Unique reference ID for the payment.
Only 'usdt' is supported.
Only 'trc20' is supported.
Response
Payment session created successfully.