Docs

Crypto Payments

USDT payments on TRON.

Create a USDT TRC20 payment intent, share the returned TRON address with your customer, and let the Paylor blockchain monitor confirm the transfer automatically.

Before you start

Crypto payments require an active settlement wallet and the correct API key scope.

Settlement wallet

Add at least one active TRON settlement wallet in Dashboard > Crypto > Wallets.

API key scope

Use an API key with the payments:create scope. Default merchant API keys include this scope.

TRC20 only

Only USDT on TRON/TRC20 is supported. Never send ERC20, BEP20, BTC, or other assets to the returned address.

Create a USDT payment

POST the amount, currency, and your reference. Paylor responds with the destination TRON address and an expiry timestamp.

POST/api/v1/merchants/payments/crypto

Create USDT payment

Create a USDT TRC20 payment intent. Paylor returns the destination TRON address; the customer sends the exact amount and confirmation happens automatically through the blockchain monitor.

Request bodyjson
1{2  "amount": 10.5,3  "currency": "USDT",4  "reference": "INV-1002",5  "description": "Subscription renewal",6  "cryptoId": "665f4c1b9a8d2e001f2a1234",7  "callbackUrl": "https://example.com/paylor/callback"8}
Responsejson
1{2  "payment_id": "6660a21f8b4d2e001f5c6789",3  "address": "TR7NHqSfy2efYv2NpHY5YshptfA3KHxvXp",4  "amount": 10.5,5  "currency": "USDT",6  "status": "INITIATED",7  "expires_at": "2026-05-23T12:30:00.000Z"8}

Code examples

POST /api/v1/merchants/payments/cryptobash
1curl -X POST https://api.paylorke.com/api/v1/api/v1/merchants/payments/crypto \2  -H "Authorization: Bearer YOUR_API_KEY" \3  -H "Content-Type: application/json" \4  -d '{5  "amount": 10.5,6  "currency": "USDT",7  "reference": "INV-1002",8  "description": "Subscription renewal",9  "cryptoId": "665f4c1b9a8d2e001f2a1234",10  "callbackUrl": "https://example.com/paylor/callback"11}'
Create USDT paymentjavascript
1const axios = require('axios');2 3const response = await axios.post(4  'https://api.paylorke.com/api/v1/merchants/payments/crypto',5  {6    amount: 10.5,7    currency: 'USDT',8    reference: 'INV-1002',9    description: 'Subscription renewal',10    callbackUrl: 'https://example.com/paylor/callback'11  },12  {13    headers: {14      'Authorization': 'Bearer YOUR_API_KEY',15      'Content-Type': 'application/json'16    }17  }18);19 20console.log(response.data.address);

Payment lifecycle

Show your customer the returned address and the exact amount. Confirmation is automatic once a matching confirmed TRC20 transfer is detected.

INITIATEDThe payment intent was created and a destination address returned. The customer must send the exact USDT amount.
CONFIRMEDThe blockchain monitor matched a confirmed TRC20 transfer to the intent. Your callback URL receives a signed webhook.
EXPIREDNo matching transfer was found before expires_at. Create a new payment intent for another attempt.
Always match on the exact amount. If a customer sends a different amount, the transfer will not be matched to the intent and support intervention is required.
GET/api/v1/merchants/payments/crypto/transactions?limit=50&offset=0

List crypto transactions

List USDT payments with limit/offset pagination. Requires the transactions:read scope.

No request body

Use the Authorization header and query string parameters shown in the endpoint path.

Responsejson
1{2  "transactions": [3    {4      "id": "6660a21f8b4d2e001f5c6789",5      "transactionId": "b4a1f0...",6      "amount": 10.5,7      "currency": "USDT",8      "reference": "INV-1002",9      "status": "CONFIRMED"10    }11  ],12  "total": 1213}

Code examples

GET /api/v1/merchants/payments/crypto/transactionsbash
1curl -X GET https://api.paylorke.com/api/v1/api/v1/merchants/payments/crypto/transactions?limit=50&offset=0 \2  -H "Authorization: Bearer YOUR_API_KEY" \3  -H "Content-Type: application/json"

Project-scoped keys and payment links

Crypto payments are also available for project-scoped API keys and hosted payment links.

POST/api/v1/merchants/payments/projects/:projectId/crypto

Project-scoped crypto payment

Use this form when your API key is scoped to a project.

Request bodyjson
1{2  "amount": 10.5,3  "currency": "USDT",4  "reference": "INV-1002"5}
Responsejson
1{2  "payment_id": "6660a21f8b4d2e001f5c6789",3  "address": "TR7NHqSfy2efYv2NpHY5YshptfA3KHxvXp",4  "status": "INITIATED"5}

Code examples

POST /api/v1/merchants/payments/projects/:projectId/cryptobash
1curl -X POST https://api.paylorke.com/api/v1/api/v1/merchants/payments/projects/:projectId/crypto \2  -H "Authorization: Bearer YOUR_API_KEY" \3  -H "Content-Type: application/json" \4  -d '{5  "amount": 10.5,6  "currency": "USDT",7  "reference": "INV-1002"8}'
POST/api/v1/public/crypto/pay/:slug/initiate

Payment link crypto payment

Hosted payment links can also initiate crypto payments when the merchant has an active crypto wallet.

Request bodyjson
1{2  "amount": 10.5,3  "currency": "USDT"4}
Responsejson
1{2  "payment_id": "6660a21f8b4d2e001f5c6789",3  "address": "TR7NHqSfy2efYv2NpHY5YshptfA3KHxvXp",4  "status": "INITIATED",5  "expires_at": "2026-05-23T12:30:00.000Z"6}

Code examples

POST /api/v1/public/crypto/pay/:slug/initiatebash
1curl -X POST https://api.paylorke.com/api/v1/api/v1/public/crypto/pay/:slug/initiate \2  -H "Authorization: Bearer YOUR_API_KEY" \3  -H "Content-Type: application/json" \4  -d '{5  "amount": 10.5,6  "currency": "USDT"7}'