Create Withdraw

Sends a payout from your Payid19 balance to your own wallet, as USDT on the Tron (TRC20) or BNB Smart Chain (BEP20) 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:

  1. 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.
  2. 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: a TRC20 address (starts with T) or, with network=BEP20, a BNB Smart Chain address (starts with 0x). 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 network fee (1 USDT on TRC20, 0.5 USDT on BEP20) — check it first with get_balance.
min0.1
coinstringoptional
Currently the only supported value — you can omit it.
valueUSDT
networkstringoptional
TRC20 (default when omitted) or BEP20. BEP20 payouts cost 0.5 USDT instead of 1 and are sent on BNB Smart Chain — make sure the receiving wallet or exchange supports USDT-BEP20. BEP20 may be temporarily unavailable when our BEP20 hot wallet is low; the request then returns an error and you can retry on TRC20.
valuesTRC20 BEP20

Response

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 — 1 USDT on TRC20, 0.5 USDT on BEP20 — 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. / Not a valid BEP20 address. — the destination address failed format validation for the selected network (a 0x address without network=BEP20 fails as TRC20); nothing was deducted.
Unsupported network, use TRC20 or BEP20. — network had another value.
BEP20 is temporarily unavailable, please use TRC20. — our BEP20 hot wallet cannot cover the request right now; nothing was deducted, retry later or use TRC20.
insufficient funds — your balance does not cover amount + the network 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')