Create Withdraw
Sends a payout from your Payid19 balance to your own wallet, as USDT on the Tron (TRC20) network. Withdrawals are queued and sent automatically by our payout system — ideal for sweeping your balance to cold storage on a schedule.
POSThttps://payid19.com/api/v1/create_withdraw
Before you start
Because this endpoint moves real funds, it has stricter requirements than the rest of the API:
- Register a trusted IP address. In Settings → API Settings, enter the IP of the server that will call this endpoint and confirm it with the email verification code. Requests from any other IP are rejected.
- Mind the security cooldown. Withdrawals are suspended for 24 hours after a password change or after disabling two-factor authentication — an account-takeover protection.
Request parameters
public_keystringREQUIRED
Your public API key.
private_keystringREQUIRED
Your private API key.
addressstringREQUIRED
Destination wallet address on the TRC20 network (starts with
T). The address format is validated before anything is sent, but double-check it anyway — a confirmed blockchain transfer cannot be reversed.amountnumericREQUIRED
Amount to send in USDT. Your withdrawable balance must cover the amount plus the 1 USDT network fee — check it first with get_balance.
min
0.1coinstringoptional
Currently the only supported value — you can omit it.
value
USDTnetworkstringoptional
Currently the only supported value — you can omit it.
value
TRC20Response
statusstring
success or error.balancenumeric
Your remaining balance after the withdrawal (also returned with the “insufficient funds” error, so you can see how much is actually available).
network_feenumeric
The transaction fee charged — a flat 1 USDT per withdrawal, deducted from your balance in addition to
amount.messagestring
The error message when
status is error.{"status":"success","balance":1199.75,"network_fee":1}
Possible errors
Errors return HTTP status 421. Key and validation errors come with message as an array; the business errors below are plain strings. The ones specific to this endpoint:
Not allowed withdraw with API — no trusted IP is registered yet. Add one in Settings → API Settings.Not allowed IP address. — the request came from an IP other than your registered one. You are also notified when this happens, since it can indicate leaked keys.Not a valid TRC20 address. — the destination address failed format validation; nothing was deducted.insufficient funds — your balance does not cover amount + 1 USDT fee. The response includes your current balance.The withdrawal function will be suspended for 24 hours… — the security cooldown after a password change or 2FA removal is still active.Withdrawals above your account’s daily limit are queued for a quick manual security review before being sent. You can follow the status of every withdrawal on your Wallet page, and you receive an email when the transfer completes. Rate limit: 10 requests per minute.
Example request
curl -X POST https://payid19.com/api/v1/create_withdraw \
-d public_key=YOUR_PUBLIC_KEY \
-d private_key=YOUR_PRIVATE_KEY \
-d coin=USDT \
-d network=TRC20 \
-d address=YOUR_TRC20_WALLET_ADDRESS \
-d amount=50
<?php
$post = [
'public_key' => 'YOUR_PUBLIC_KEY',
'private_key' => 'YOUR_PRIVATE_KEY',
'coin' => 'USDT',
'network' => 'TRC20',
'address' => 'YOUR_TRC20_WALLET_ADDRESS',
'amount' => 50,
];
$ch = curl_init('https://payid19.com/api/v1/create_withdraw');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$result = curl_exec($ch);
curl_close($ch);
$response = json_decode($result);
if ($response->status == 'error') {
// message can be an array (key/validation errors) or a string
echo is_array($response->message) ? $response->message[0] : $response->message;
} else {
echo 'Sent. Remaining balance: ' . $response->balance . ' USDT';
}
const axios = require('axios');
axios.post('https://payid19.com/api/v1/create_withdraw', {
public_key: 'YOUR_PUBLIC_KEY',
private_key: 'YOUR_PRIVATE_KEY',
coin: 'USDT',
network: 'TRC20',
address: 'YOUR_TRC20_WALLET_ADDRESS',
amount: 50,
})
.then(({ data }) => {
if (data.status === 'error') return console.error([].concat(data.message)[0]);
console.log('Sent. Remaining balance:', data.balance, 'USDT');
})
.catch(err => console.error(err.message));
import requests
response = requests.post('https://payid19.com/api/v1/create_withdraw', data={
'public_key': 'YOUR_PUBLIC_KEY',
'private_key': 'YOUR_PRIVATE_KEY',
'coin': 'USDT',
'network': 'TRC20',
'address': 'YOUR_TRC20_WALLET_ADDRESS',
'amount': 50,
})
result = response.json()
if result['status'] == 'error':
msg = result['message']
print(msg[0] if isinstance(msg, list) else msg)
else:
print('Sent. Remaining balance:', result['balance'], 'USDT')