USDT Gate Payment API

Authentication

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
1. Create a payment

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);
2. Response
{
  "amount": "25.000000",
  "address": "TXyz9f2k...9fA",
  "unique_transaction_id": "TX-8K2JQ7RSTLMN4B1C",
  "payment_expiration_duration": 1800
}
3. Webhook payload

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.

4. Check payment status

GET /api/v1/payments/{unique_transaction_id} — useful as a fallback if a webhook delivery is missed.