White Label
With White Label, the entire payment flow runs under your own domain and brand — your customers never see payid19.com. You build the checkout page; Payid19 handles the blockchain side invisibly in the background.
Step 1 — Create the invoice and get the coin list
Call create_invoice with all your usual parameters plus white_label=1. Instead of a payment page URL, the response carries the invoice ID and, in the message field, a JSON list of the coins you can accept:
{
"status": "success",
"invoice_id": 123456,
"message": "[{\"name\":\"USDT\",\"long_name\":\"USD Tether\",\"network\":\"TRC20\",\"icon\":\"...\",\"decimals\":2,\"price\":100.5,\"invoice_id\":123456}, ...]"
}
USDT, USDC, BTC, ETH, BNB, TRX, LTC.banned_coins using bare coin codes (e.g. "BTC") are already filtered out of this list.Render this list on your own checkout page so the customer can pick a coin and network.
Step 2 — Get the deposit address
When the customer picks a coin, request the deposit address to display (amount and QR codes included):
Request parameters
Errors from this endpoint come with HTTP status 401 and a plain-string message (e.g. There is no invoice.).
Response
Embed a QR code like this:
<img height="100%" src="data:image/svg+xml;base64,ADDRESS_QRCODE_VALUE">
Step 3 — Get notified
Payment detection is fully automatic. When the customer’s payment is confirmed, the callback you set on the invoice fires as usual (see payment callback), and you can always poll get_invoices for the status. Show your own success screen when the payment completes.
expiration_date visible; and after the callback arrives, flip the page to your success state automatically (poll your own backend, or push over a websocket). Everything the customer sees is yours — Payid19 stays invisible.Example: getting the address
curl -X POST https://payid19.com/api/v1/get_address \
-d invoice_id=123456 \
-d [email protected] \
-d coin=USDT \
-d network=TRC20
<?php
$post = [
'invoice_id' => 123456, // from step 1
'email' => '[email protected]',
'coin' => 'USDT',
'network' => 'TRC20',
];
$ch = curl_init('https://payid19.com/api/v1/get_address');
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') {
echo $response->message;
} else {
echo 'Send ' . $response->amount . ' ' . $response->coin
. ' (' . $response->network . ') to: ' . $response->address;
// $response->address_qrcode -> base64 SVG QR code
}
const axios = require('axios');
axios.post('https://payid19.com/api/v1/get_address', {
invoice_id: 123456, // from step 1
email: '[email protected]',
coin: 'USDT',
network: 'TRC20',
})
.then(({ data }) => {
if (data.status === 'error') return console.error(data.message);
console.log(`Send ${data.amount} ${data.coin} (${data.network}) to: ${data.address}`);
// data.address_qrcode -> base64 SVG QR code
})
.catch(err => console.error(err.message));
import requests
response = requests.post('https://payid19.com/api/v1/get_address', data={
'invoice_id': 123456, # from step 1
'email': '[email protected]',
'coin': 'USDT',
'network': 'TRC20',
})
result = response.json()
if result['status'] == 'error':
print(result['message'])
else:
print('Send', result['amount'], result['coin'],
'(' + result['network'] + ') to:', result['address'])
# result['address_qrcode'] -> base64 SVG QR code