Invoice
An invoice is a payment request: a deposit address, a token, and an expected amount. When a matching on-chain deposit is first seen, you receive deposit.invoice.pending_confirmation. After block confirmations, the invoice is marked paid and your off-chain balance is credited. All endpoints require authentication.
| Method | Path |
|---|---|
POST | /api/v1/invoices |
GET | /api/v1/invoices |
GET | /api/v1/invoices/:id |
POST | /api/v1/invoices/:id/cancel |
Balance type: Invoices do not return balance fields. Payment arrives on-chain at
recipientAddress. Usedeposit.invoice.pending_confirmationfor a realtime “seen” signal, anddeposit.invoice.paid/ Assets after confirmation whenactiveBalanceincreases.
Create Invoice
POST /api/v1/invoices
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Expected amount (> 0) |
tokenCode | string | Yes | Allowed token code from GET /api/v1/tokens (e.g. usdt-ethereum) |
reference | string | No | Your external reference |
expiresAt | string (RFC3339) | No | Defaults to the app's configured expiry |
{
"amount": 100,
"tokenCode": "usdt-ethereum",
"reference": "order-555"
}Response 201
{
"data": {
"id": "inv_abc123",
"expiresAt": "2026-01-01T01:00:00Z",
"token": {
"tokenCode": "USDT",
"network": "ethereum",
"tokenAddress": "0x...",
"symbol": "USDT",
"decimals": 6
},
"walletId": "wal_1",
"walletNetwork": "ethereum",
"recipientAddress": "0xabc...",
"recipientAddressType": "evm",
"amount": 100,
"amountInDecimals": "100000000",
"reference": "order-555",
"status": "pending",
"createdAt": "2026-01-01T00:00:00Z"
}
}Invoice object fields
| Field | Type | Description |
|---|---|---|
id | string | Invoice UUID |
expiresAt | string (RFC3339) | Payment deadline |
token | object | tokenCode, network, tokenAddress, symbol, decimals |
walletId | string | Deposit wallet UUID |
walletNetwork | string | Network code for the deposit wallet |
recipientAddress | string | On-chain address the payer must send to |
recipientAddressType | string | Address family (e.g. evm) |
amount | number | Expected payment amount in token units (must match exactly on-chain to auto-pay) |
amountInDecimals | string | amount in smallest token units (integer string) |
reference | string | null | Your external reference |
status | string | pending, paid, expired, cancelled, or failed |
createdAt | string (RFC3339) | Creation time |
| Code | Meaning |
|---|---|
| 400 | Validation error, inactive token, or invalid amount/expiry |
| 404 | Token not found |
| 409 | No available wallet |
List Invoices
GET /api/v1/invoices
Query Parameters
| Param | Type | Default | Description |
|---|---|---|---|
page | int | 1 | Page number |
limit | int | 10 | Items per page |
status | string | — | Filter by status |
startDate | string | — | RFC3339 or YYYY-MM-DD |
endDate | string | — | RFC3339 or YYYY-MM-DD |
walletId | string | — | Filter by wallet |
tokenCode | string | — | Filter by token |
Response 200
{
"data": {
"items": [ /* invoice objects */ ],
"total": 42,
"page": 1,
"limit": 10
}
}Get Invoice
GET /api/v1/invoices/:id → { "data": { /* invoice */ } }
| Code | Meaning |
|---|---|
| 404 | Invoice not found |
Cancel Invoice
POST /api/v1/invoices/:id/cancel (no body). Returns the updated invoice with status: "cancelled".
| Code | Meaning |
|---|---|
| 404 | Invoice not found |
| 409 | Only pending invoices can be cancelled |