Documentation menu
Accepting payments

Accept USDT, BTC and more with a dedicated address and network.

View raw

Crypto payments

List active assets

bash
1curl https://paylinky.vercel.app/api/v1/crypto/assets -H "Authorization: Bearer $PAYLINKY_KEY"
json
1[
2 { "asset_code": "USDT.TRC20", "name": "Tether (TRON)", "network": "TRC20", "symbol": "USDT" },
3 { "asset_code": "BTC", "name": "Bitcoin", "network": "BTC", "symbol": "BTC" }
4]

Use an asset_code from this list — never assume a network is active. Administrators can disable any asset (including Bitcoin) at any time.

Create a crypto payment

http
1POST https://paylinky.vercel.app/api/v1/crypto/collect
FieldRequiredDescription
amountYesAmount in USDT (string or number)
currencyNoUSDT (default)
asset_codeYesFrom /crypto/assets
customer.emailYesPayer email
customer.firstNameYesPayer first name
customer.lastNameYesPayer last name
referenceNoYour order reference (idempotent)
countryNoPayer country code
notify_urlNoWebhook URL for this payment
customer.email, customer.firstName and customer.lastName are mandatory. Never invent them — ask the payer.
bash
1curl -X POST https://paylinky.vercel.app/api/v1/crypto/collect \
2 -H "Authorization: Bearer $PAYLINKY_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "amount": "25",
6 "currency": "USDT",
7 "asset_code": "USDT.TRC20",
8 "reference": "crypto_order_12345",
9 "customer": { "email": "payer@example.com", "firstName": "Ada", "lastName": "Lovelace" }
10 }'

Response — 202 Accepted

json
1{
2 "transaction_id": "7a1f…",
3 "reference": "PLK-3QW8N5ZK2D",
4 "merchant_reference": "crypto_order_12345",
5 "status": "pending",
6 "payment_method": "crypto",
7 "amount": 25,
8 "fee_amount": 0.5,
9 "credited_amount": 24.5,
10 "currency": "USDT",
11 "asset_code": "USDT.TRC20",
12 "network": "TRC20",
13 "address": "T…",
14 "memo": null,
15 "amount_usdt": 25,
16 "credited_amount_usdt": 24.5,
17 "fee_amount_usdt": 0.5,
18 "customer": { "email": "payer@example.com", "firstName": "Ada", "lastName": "Lovelace" },
19 "sandbox": false,
20 "expires_at": "2026-01-01T10:15:00.000Z"
21}

Address, memo and QR code

Show the address (and memo when present) and render a QR code in your app. The payer must send on exactly the returned network — a wrong network can make funds unrecoverable.

Expiry and confirmation

Addresses are temporary: a crypto payment still pending after 15 minutes (expires_at) becomes expired. Never reuse an expired address. The payment is complete only after the payment.completed webhook (or status: "success").