Get Invoices

Lists your invoices so you can check payment status from your own systems — verify an order independently of the callback, reconcile payments, or build your own admin view. Returns your most recent invoices (up to 100 per call).

POSThttps://payid19.com/api/v1/get_invoices

Request parameters

public_keystringREQUIRED
Your public API key.
private_keystringREQUIRED
Your private API key.
order_idstringoptional
Filter by your own order reference — the one you set in create_invoice. The typical “is order #42 paid?” lookup is this parameter plus status=all.
max length100
statusstringoptional
If omitted, only waiting (unpaid) invoices are returned. If any value is sent (e.g. all), invoices of every status are returned — then check the status field of each invoice in the response.
omittedwaiting onlyany valueall invoices

Response

The message field contains a JSON-encoded array of your most recent invoices, newest first. Each invoice carries your references (order_id, merchant_id, customer_id), the amounts (price_amount, price_currency, amount, amount_currency), timestamps and a status field:

Invoice status values
nullWaiting
The invoice has not been paid yet. Unpaid invoices expire and disappear after 24 hours.
1Paid
The payment is confirmed on the blockchain and credited to your balance. This is the only value that should mark an order as paid.
2Refunded
The payment was returned to the buyer.
3Underpaid
A partial payment arrived and is waiting for the customer to complete it — or for your decision (accept / refund) on the Invoices page.
{
  "status": "success",
  "message": "[{\"id\":123456,\"order_id\":\"42\",\"price_amount\":\"100\",\"price_currency\":\"USD\",\"amount\":\"100.00\",\"amount_currency\":\"USDT\",\"status\":1,\"created_at\":\"2026-08-11T12:34:56.000000Z\", ...}]"
}
Treat an order as paid only when its invoice status is 1 (or when you receive the verified callback). Do not rely on the presence of an invoice alone — a waiting invoice just means the payment page was created.

Example request

curl -X POST https://payid19.com/api/v1/get_invoices \
  -d public_key=YOUR_PUBLIC_KEY \
  -d private_key=YOUR_PRIVATE_KEY \
  -d order_id=42 \
  -d status=all
<?php
$post = [
    'public_key'  => 'YOUR_PUBLIC_KEY',
    'private_key' => 'YOUR_PRIVATE_KEY',
    'order_id'    => 42,       // optional
    'status'      => 'all',    // optional: any value returns all invoices
];

$ch = curl_init('https://payid19.com/api/v1/get_invoices');
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 {
    $invoices = json_decode($response->message);
    foreach ($invoices as $invoice) {
        echo $invoice->id . ' status: ' . var_export($invoice->status, true) . PHP_EOL;
    }
}
const axios = require('axios');

axios.post('https://payid19.com/api/v1/get_invoices', {
    public_key:  'YOUR_PUBLIC_KEY',
    private_key: 'YOUR_PRIVATE_KEY',
    order_id:    42,      // optional
    status:      'all',   // optional: any value returns all invoices
})
.then(({ data }) => {
    if (data.status === 'error') return console.error([].concat(data.message)[0]);
    const invoices = JSON.parse(data.message);
    invoices.forEach(inv => console.log(inv.id, 'status:', inv.status));
})
.catch(err => console.error(err.message));
import json
import requests

response = requests.post('https://payid19.com/api/v1/get_invoices', data={
    'public_key':  'YOUR_PUBLIC_KEY',
    'private_key': 'YOUR_PRIVATE_KEY',
    'order_id':    42,      # optional
    'status':      'all',   # optional: any value returns all invoices
})

result = response.json()
if result['status'] == 'error':
    msg = result['message']
    print(msg[0] if isinstance(msg, list) else msg)
else:
    for invoice in json.loads(result['message']):
        print(invoice['id'], 'status:', invoice['status'])
Polling vs. callbacks: the callback is instant and should be your primary signal; use this endpoint as a safety net (e.g. a periodic job that re-checks unpaid orders) or when your platform cannot expose a public webhook URL. Rate limit: 100 requests per minute.