Every request must include your API key and secret as headers. Generate a key pair from the API Keys page.
X-API-Key: ug_live_xxxxxxxxxxxxxxxx
X-API-Secret: your_secret_here
POST /api/v1/payments — request a one-time deposit address for a given amount.
curl -X POST https://your-domain.com/api/v1/payments \
-H "X-API-Key: ug_live_xxxxxxxx" \
-H "X-API-Secret: your_secret_here" \
-H "Content-Type: application/json" \
-d '{"amount": "25.00"}'
<?php
// Using Guzzle
$client = new GuzzleHttp\Client();
$response = $client->post('https://your-domain.com/api/v1/payments', [
'headers' => [
'X-API-Key' => 'ug_live_xxxxxxxx',
'X-API-Secret' => 'your_secret_here',
],
'json' => ['amount' => '25.00'],
]);
$data = json_decode($response->getBody(), true);
echo $data['address'];
// Using fetch
const response = await fetch('https://your-domain.com/api/v1/payments', {
method: 'POST',
headers: {
'X-API-Key': 'ug_live_xxxxxxxx',
'X-API-Secret': 'your_secret_here',
'Content-Type': 'application/json',
},
body: JSON.stringify({ amount: '25.00' }),
});
const data = await response.json();
console.log(data.address);
import requests
response = requests.post(
"https://your-domain.com/api/v1/payments",
headers={
"X-API-Key": "ug_live_xxxxxxxx",
"X-API-Secret": "your_secret_here",
},
json={"amount": "25.00"},
)
data = response.json()
print(data["address"])
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(
"{\"amount\":\"25.00\"}", MediaType.parse("application/json"));
Request request = new Request.Builder()
.url("https://your-domain.com/api/v1/payments")
.addHeader("X-API-Key", "ug_live_xxxxxxxx")
.addHeader("X-API-Secret", "your_secret_here")
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println(response.body().string());
}
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "ug_live_xxxxxxxx");
client.DefaultRequestHeaders.Add("X-API-Secret", "your_secret_here");
var content = new StringContent(
"{\"amount\":\"25.00\"}", Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://your-domain.com/api/v1/payments", content);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
{
"amount": "25.000000",
"address": "TXyz9f2k...9fA",
"unique_transaction_id": "TX-8K2JQ7RSTLMN4B1C",
"payment_expiration_duration": 1800
}
Sent as a POST to the webhook URL configured on your API key, signed with HMAC-SHA256 in the X-USDTGate-Signature header (computed over the raw JSON body using your API secret).
{
"unique_transactionID": "TX-8K2JQ7RSTLMN4B1C",
"transaction_hash": "a1b2c3...",
"sending_address": "TAbc...",
"receiving_address": "TCentralWallet...",
"amount": "25.000000",
"status": "success"
}
On expiration, the same shape is sent with "status": "expired" and no transaction hash.
GET /api/v1/payments/{unique_transaction_id} — useful as a fallback if a webhook delivery is missed.