https://api.paychainly.comAPI Reference
v1REST API for integrating USDT (BEP-20) payments into your platform. Manage customers, generate deposit addresses or payment links, and query transactions — all secured with an API key. Never expose your key in client-side code.
Authentication
Create an API key in API Keys. Pass it in every request as a header — both formats are accepted:
Authorization: Bearer YOUR_API_KEYX-Api-Key: YOUR_API_KEYIntegration Patterns
reusepermanent, never changesreusesame address every timecreateForAddress()generate_newfresh per orderpaymentLinks.create()generate_newfresh per orderpaymentLinks.create()For patterns 2, 3, and 4 — all three payment options come from the same single API call. Pick whichever fits your UI:
link.payUrl → https://paychainly.com/pay/:slug // ① redirect to hosted page
link.address → 0xABC... // ② show in your own UI
link.address → 0xABC... (QR-encode it) // ③ QR code
link.amount → "49.99"
link.expiresAt → "2026-06-03T10:00:00.000Z"Customers
8/api/integration/customersCreate Customer
Creates a new customer record. The identifier is required and must be unique per account — use your internal user ID, order reference, or email. Once created, generate-address will reuse the same wallet for this customer automatically via their identifier.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequiredidentifierstringrequiredUnique key for this customer — e.g. your internal user ID, order ID, or email. Used by generate-address in reuse mode to return the same wallet every time.namestringoptionalCustomer display nameemailstringoptionalCustomer email addressnotestringoptionalInternal note visible only to youmetadataobjectoptionalAny custom JSON payload e.g. { "plan": "pro", "region": "EU" }{
"success": true,
"data": {
"id": 7,
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" },
"mode": "production",
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z"
}
}curl -X POST https://api.paychainly.com/api/integration/customers \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" }
}'/api/integration/customersList Customers
Returns a paginated list of all your customers. Search by name, email, or identifier. Useful for looking up a customer before generating a deposit address or checking payment history.
X-Api-KeyYOUR_API_KEYrequiredlimitnumberoptionalMax results per page (max 100). Default: 20offsetnumberoptionalNumber of results to skip. Default: 0searchstringoptionalFull-text search across name, email, and identifier fields.modestringoptionalproduction or sandbox{
"success": true,
"data": [
{
"id": 7,
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" },
"mode": "production",
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z"
}
],
"meta": { "total": 1, "limit": 20, "offset": 0 }
}# List all customers
curl "https://api.paychainly.com/api/integration/customers?limit=20&offset=0" \
-H "X-Api-Key: YOUR_API_KEY"
# Search by email
curl "https://api.paychainly.com/api/integration/customers?search=john@example.com" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/customers/:customerUidGet Customer
Get a customer by their customerUid (the UUID assigned at creation). Use get_customer_by_identifier for lookup by your own reference.
X-Api-KeyYOUR_API_KEYrequiredcustomerUidstring (UUID)requiredCustomer UUID assigned at creation (the customerUid field in the response, e.g. "dd8693ec-8b5f-43ef-b4e5-1d0a088df1a3"){
"success": true,
"data": {
"id": 7,
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" },
"mode": "production",
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z"
}
}# By numeric ID
curl "https://api.paychainly.com/api/integration/customers/7" \
-H "X-Api-Key: YOUR_API_KEY"
# By email
curl "https://api.paychainly.com/api/integration/customers/john@example.com" \
-H "X-Api-Key: YOUR_API_KEY"
# By custom identifier
curl "https://api.paychainly.com/api/integration/customers/user_12345" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/customers/by-email/:emailGet Customer by Email
Looks up a customer by their exact email address. Returns 404 if no customer with that email exists. URL-encode the email before embedding it in the path (e.g. john%40example.com).
X-Api-KeyYOUR_API_KEYrequiredemailstringrequiredCustomer email address. URL-encode the @ symbol as %40 (e.g. john%40example.com).{
"success": true,
"data": {
"id": 7,
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" },
"mode": "production",
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z"
}
}# URL-encode the @ as %40
curl "https://api.paychainly.com/api/integration/customers/by-email/john%40example.com" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/customers/by-identifier/:identifierGet Customer by Identifier
Looks up a customer by their exact identifier — the unique key you set when creating the customer (e.g. your internal user ID, order reference, or any string). Returns 404 if not found.
X-Api-KeyYOUR_API_KEYrequiredidentifierstringrequiredThe exact identifier value used when creating the customer (e.g. user_12345, ORD-999). URL-encode special characters if needed.{
"success": true,
"data": {
"id": 7,
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" },
"mode": "production",
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z"
}
}curl "https://api.paychainly.com/api/integration/customers/by-identifier/user_12345" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/customers/by-deposit-address/:addressGet Customer by Deposit Address
Resolves the customer who owns a given deposit wallet address. Useful when a webhook delivers a wallet address and you need to know which of your customers it belongs to. Returns the customer record alongside the matched deposit address details.
X-Api-KeyYOUR_API_KEYrequiredaddressstringrequiredFull 0x-prefixed BEP-20 wallet address (e.g. 0x1234567890abcdef...){
"success": true,
"data": {
"customer": {
"id": 7,
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" },
"mode": "production",
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z"
},
"depositAddress": {
"id": 42,
"address": "0x1234567890abcdef1234567890abcdef12345678",
"network": "BNB",
"status": "active"
}
}
}# From a webhook payload — find which customer owns this address
ADDR="0x1234567890abcdef1234567890abcdef12345678"
curl "https://api.paychainly.com/api/integration/customers/by-deposit-address/${ADDR}" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/customers/by-identifier/:identifierUpdate Customer by Identifier
Update a customer by their identifier. Pass the identifier in the path and only the fields to change in the body — omitted fields are left untouched.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequiredidentifierstringrequiredThe exact identifier of the customer to update (e.g. user_12345).namestringoptionalUpdated display name.emailstringoptionalUpdated email address.identifierstringoptionalUpdated identifier value.notestringoptionalUpdated note.metadataobjectoptionalUpdated metadata (replaces existing).{
"success": true,
"data": {
"id": 7,
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" },
"mode": "production",
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z"
}
}curl -X PUT "https://api.paychainly.com/api/integration/customers/by-identifier/user_12345" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{ "name": "John Doe Jr.", "note": "Upgraded to enterprise", "metadata": { "plan": "enterprise" } }'/api/integration/customers/by-email/:emailUpdate Customer by Email
Update a customer by their email address. URL-encode @ as %40 in the path. Only the fields included in the body are updated.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequiredemailstringrequiredCustomer email — URL-encode @ as %40 (e.g. john%40example.com).namestringoptionalUpdated display name.emailstringoptionalUpdated email address.identifierstringoptionalUpdated identifier value.notestringoptionalUpdated note.metadataobjectoptionalUpdated metadata (replaces existing).{
"success": true,
"data": {
"id": 7,
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com",
"note": "VIP customer",
"metadata": { "plan": "pro" },
"mode": "production",
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z"
}
}curl -X PUT "https://api.paychainly.com/api/integration/customers/by-email/john%40example.com" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{ "name": "John Doe Jr.", "metadata": { "plan": "enterprise" } }'Deposit Addresses
5/api/integration/addresses/generateGenerate Wallet
Generate a fresh deposit address without linking a customer. A new address is always created. Monitoring starts immediately — the address listens for incoming transfers the moment it is returned.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequirednetworkstringrequiredBlockchain network. Currently only "BNB" is supported.tokenSymbolstringrequiredToken symbol to accept (e.g. "USDT"). Case-insensitive — stored uppercase.notestringoptionalFree-form note attached to the deposit address.metadataobjectoptionalArbitrary JSON metadata stored alongside the deposit address.{
"success": true,
"data": {
"id": 42,
"address": "0x1234567890abcdef1234567890abcdef12345678",
"status": "active",
"mode": "production",
"type": "wallet",
"network": { "id": 1, "name": "BNB Smart Chain", "slug": "bnb", "chainId": 56, "nativeSymbol": "BNB" },
"token": { "id": 2, "symbol": "USDT", "decimals": 18 },
"customer": null,
"note": "Payment for order #1234",
"metadata": { "orderId": "1234" },
"createdAt": "2026-05-24T10:00:00.000Z"
}
}curl -X POST "https://api.paychainly.com/api/integration/addresses/generate" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"network": "BNB",
"tokenSymbol": "USDT",
"note": "Payment for order #1234",
"metadata": { "orderId": "1234" }
}'/api/integration/addresses/generateGenerate Wallet with Customer
Generate (or reuse) a deposit address and link it to a customer. Pass a customer object with customerUid (lookup only), identifier, or email — if the customer does not exist it is created automatically. The response includes the full customer object.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequirednetworkstringrequiredBlockchain network. Currently only "BNB" is supported.tokenSymbolstringrequiredToken symbol to accept (e.g. "USDT"). Case-insensitive.mode"reuse"|"generate_new"optional"reuse" returns the existing active address for this customer; "generate_new" always creates a fresh one. Default: reusecustomerobjectoptionalCustomer to link. Pass one of the sub-fields below.customer.customerUidstring (UUID)optionalLook up an existing customer by their customerUid. Returns 404 if not found.customer.identifierstringoptionalLook up or create a customer by identifier (e.g. user_12345).customer.emailstringoptionalLook up or create a customer by email address.notestringoptionalFree-form note attached to the deposit address.metadataobjectoptionalArbitrary JSON metadata stored alongside the deposit address.{
"success": true,
"data": {
"id": 42,
"address": "0x1234567890abcdef1234567890abcdef12345678",
"status": "active",
"mode": "production",
"type": "wallet",
"network": { "id": 1, "name": "BNB Smart Chain", "slug": "bnb", "chainId": 56, "nativeSymbol": "BNB" },
"token": { "id": 2, "symbol": "USDT", "decimals": 18 },
"customer": {
"id": 52,
"customerUid": "93c7e7b7-f6e3-4708-8881-a4e0de50ab6b",
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com"
},
"note": "Payment for order #1234",
"metadata": { "orderId": "1234" },
"createdAt": "2026-05-24T10:00:00.000Z"
}
}curl -X POST "https://api.paychainly.com/api/integration/addresses/generate" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"network": "BNB",
"tokenSymbol": "USDT",
"mode": "reuse",
"customer": { "identifier": "user_12345" }
}'/api/integration/addressesList Deposit Addresses
Returns a paginated list of all deposit addresses for your account. Filter by network, mode, or customer ID. Search matches wallet address, note, and metadata values.
X-Api-KeyYOUR_API_KEYrequiredlimitnumberoptionalMax results per page (max 100). Default: 20offsetnumberoptionalResults to skip. Default: 0networkstringoptionalFilter by network e.g. BNB.mode"production"|"sandbox"optionalFilter by deposit mode.customerIdnumberoptionalFilter addresses linked to a specific customer ID.searchstringoptionalSearch by wallet address, note, or metadata (JSON text match). Ignored when customerId is set.sort"ASC"|"DESC"optionalSort by creation date. Default: DESC{
"success": true,
"data": [
{
"id": 42,
"address": "0x1234567890abcdef1234567890abcdef12345678",
"status": "active",
"mode": "production",
"type": "wallet",
"isDefault": false,
"note": "Pro plan upgrade",
"metadata": { "orderId": "1234", "plan": "pro" },
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z",
"network": {
"id": 1,
"name": "BNB Smart Chain",
"slug": "bnb",
"chainId": 56,
"nativeSymbol": "BNB",
"explorerUrl": "https://bscscan.com"
},
"token": {
"id": 2,
"symbol": "USDT",
"displayName": "Tether USD",
"contractAddress": "0x55d398326f99059ff775485246999027b3197955",
"decimals": 18
},
"customer": {
"id": 52,
"customerUid": "93c7e7b7-f6e3-4708-8881-a4e0de50ab6b",
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com"
}
}
],
"meta": { "total": 1, "limit": 20, "offset": 0, "sort": "DESC" }
}# All addresses
curl "https://api.paychainly.com/api/integration/addresses?limit=20&offset=0" \
-H "X-Api-Key: YOUR_API_KEY"
# Filter by customer
curl "https://api.paychainly.com/api/integration/addresses?customerId=52" \
-H "X-Api-Key: YOUR_API_KEY"
# Search by note or metadata
curl "https://api.paychainly.com/api/integration/addresses?search=pro+plan" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/addresses/:idGet Deposit Address
Retrieves a single deposit address. The :id segment accepts either a numeric ID or a full 0x-prefixed wallet address string — useful when you have the address from a webhook and need to fetch its full record.
X-Api-KeyYOUR_API_KEYrequiredidinteger | stringrequiredNumeric ID (e.g. 42) or full wallet address (0x1234...){
"success": true,
"data": {
"id": 42,
"address": "0x1234567890abcdef1234567890abcdef12345678",
"status": "active",
"mode": "production",
"type": "wallet",
"isDefault": false,
"note": "Pro plan upgrade",
"metadata": { "orderId": "1234", "plan": "pro" },
"createdAt": "2026-05-24T10:00:00.000Z",
"updatedAt": "2026-05-24T10:00:00.000Z",
"network": {
"id": 1,
"name": "BNB Smart Chain",
"slug": "bnb",
"chainId": 56,
"nativeSymbol": "BNB",
"explorerUrl": "https://bscscan.com"
},
"token": {
"id": 2,
"symbol": "USDT",
"displayName": "Tether USD",
"contractAddress": "0x55d398326f99059ff775485246999027b3197955",
"decimals": 18
},
"customer": {
"id": 52,
"customerUid": "93c7e7b7-f6e3-4708-8881-a4e0de50ab6b",
"identifier": "user_12345",
"name": "John Doe",
"email": "john@example.com"
}
}
}curl "https://api.paychainly.com/api/integration/addresses/42" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/addresses/by-address/:addressGet Wallet by Address
Retrieve full details of a wallet by its 0x wallet address string, including network, token and customer information.
X-Api-KeyYOUR_API_KEYrequiredaddressstringrequiredThe 0x-prefixed wallet address (e.g. 0xabc…). URL-encode if needed.{
"success": true,
"data": {
"id": 42,
"address": "0x1234567890abcdef1234567890abcdef12345678",
"status": "active",
"mode": "production",
"type": "wallet",
"network": { "id": 1, "name": "BNB Smart Chain", "slug": "bnb", "chainId": 56, "nativeSymbol": "BNB" },
"token": { "id": 2, "symbol": "USDT", "decimals": 18 },
"customer": { "id": 52, "customerUid": "93c7e7b7-…", "identifier": "user_12345", "name": "John Doe", "email": "john@example.com" },
"createdAt": "2026-05-24T10:00:00.000Z"
}
}ADDR="0x1234567890abcdef1234567890abcdef12345678"
curl "https://api.paychainly.com/api/integration/addresses/by-address/${ADDR}" \
-H "X-Api-Key: YOUR_API_KEY"Payment Links
6/api/integration/payment-links/generateCreate Payment Link
Generates a hosted payment page with a unique deposit address and optional fixed amount. Share the returned payUrl with your customer — they open it to see a QR code, wallet address, and real-time confirmation status.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequirednetworkstringoptionalBlockchain network. Default: BNBamountstringoptionalFixed USDT amount to collect. Omit to accept any amount.memostringoptionalMessage shown to the customer on the payment page.expiresAtstring (ISO 8601)conditionalExact expiry timestamp. Use either expiresAt or expiryHours — not both.expiryHoursnumberconditionalHours until the link expires. Common: 1, 24, 168 (7d), 720 (30d).{
"success": true,
"data": {
"id": 1,
"slug": "pl_abc123xyz",
"payUrl": "https://paychainly.com/pay/pl_abc123xyz",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"network": "BNB",
"amount": "100.50",
"memo": "Order #ORD-999",
"status": "active",
"expiresAt": "2026-05-25T10:00:00.000Z",
"createdAt": "2026-05-24T10:00:00.000Z"
}
}curl -X POST https://api.paychainly.com/api/integration/payment-links/generate \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"network": "BNB",
"amount": "100.50",
"memo": "Order #ORD-999",
"expiryHours": 24
}'/api/integration/payment-linksList Payment Links
Returns a paginated list of all payment links for your account, ordered by creation date descending.
X-Api-KeyYOUR_API_KEYrequiredlimitnumberoptionalMax results per page. Default: 20offsetnumberoptionalResults to skip. Default: 0modestringoptionalproduction or sandbox{
"success": true,
"data": [
{
"id": 1,
"slug": "pl_abc123xyz",
"payUrl": "https://paychainly.com/pay/pl_abc123xyz",
"amount": "100.50",
"memo": "Order #ORD-999",
"status": "active",
"expiresAt": "2026-05-25T10:00:00.000Z",
"createdAt": "2026-05-24T10:00:00.000Z"
}
],
"meta": { "total": 1, "limit": 20, "offset": 0 }
}curl "https://api.paychainly.com/api/integration/payment-links?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/payment-links/:idGet Payment Link
Retrieves a single payment link by numeric ID. Use this to check the current status (active / expired / paid) of a link after creation.
X-Api-KeyYOUR_API_KEYrequiredidintegerrequiredNumeric ID of the payment link{
"success": true,
"data": {
"id": 1,
"slug": "pl_abc123xyz",
"payUrl": "https://paychainly.com/pay/pl_abc123xyz",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"network": "BNB",
"amount": "100.50",
"memo": "Order #ORD-999",
"status": "active",
"expiresAt": "2026-05-25T10:00:00.000Z",
"createdAt": "2026-05-24T10:00:00.000Z"
}
}curl "https://api.paychainly.com/api/integration/payment-links/1" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/payment-links/by-slug/:slugGet Payment Link by Slug
Retrieve full details of a payment link by its slug — the identifier used in the payUrl. Returns the same structure as Get Payment Link.
X-Api-KeyYOUR_API_KEYrequiredslugstringrequiredThe payment link slug (e.g. "pl_d139f11rs1d4") — found in the payUrl or generate response.{
"success": true,
"data": {
"id": 1,
"slug": "pl_abc123xyz",
"payUrl": "https://paychainly.com/pay/pl_abc123xyz",
"status": "active",
"amount": "100.50",
"memo": "Order #ORD-999",
"expiresAt": "2026-05-25T10:00:00.000Z",
"createdAt": "2026-05-24T10:00:00.000Z"
}
}curl "https://api.paychainly.com/api/integration/payment-links/by-slug/pl_abc123xyz" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/payment-links/by-address/:addressGet Payment Links by Address
Returns all payment links that are bound to a specific deposit wallet address. A single address can have multiple payment links created over time — this endpoint returns all of them ordered by creation date descending.
X-Api-KeyYOUR_API_KEYrequiredaddressstringrequiredFull 0x-prefixed deposit wallet address{
"success": true,
"data": [
{
"id": 1,
"slug": "pl_abc123xyz",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"network": "BNB",
"amount": "100.50",
"memo": "Order #ORD-999",
"status": "active",
"expiresAt": "2026-05-25T10:00:00.000Z",
"createdAt": "2026-05-24T10:00:00.000Z"
}
],
"meta": { "total": 1 }
}ADDR="0x1234567890abcdef1234567890abcdef12345678"
curl "https://api.paychainly.com/api/integration/payment-links/by-address/${ADDR}" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/payment-links/for-address/:addressCreate Payment Link for Address
Create a shareable payment link tied to an existing deposit address. The address already has token and network set — just provide optional amount and memo.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequiredaddressstringrequiredExisting deposit wallet address (0x...)amountstringoptionalFixed payment amount e.g. "50.00". Leave empty for open-amount links.memostringoptionalMemo shown on the payment pagenotestringoptionalInternal note (not shown to payer)expiresAtstringoptionalISO 8601 expiry datetime e.g. "2026-12-31T23:59:59Z"expiryHoursnumberoptionalExpiry in hours from now (alternative to expiresAt){
"success": true,
"data": {
"id": 5,
"slug": "pl_abc123",
"payUrl": "https://paychainly.com/pay/pl_abc123",
"status": "active",
"amount": "50.000000000000000000",
"memo": "Payment for order #123",
"uniqueId": "order-123",
"address": {
"id": 6,
"address": "0x6d46407fe46eb8067971feddf52e6b4288b7e075",
"network": "BNB",
"status": "active"
},
"createdAt": "2026-06-01T10:00:00.000Z"
}
}curl -X POST https://api.paychainly.com/api/integration/payment-links/for-address/0x6d46407fe46eb8067971feddf52e6b4288b7e075 \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"amount": "50.00",
"memo": "Payment for order #123"
}'Transactions
3/api/integration/transactionsList Transactions
Returns a paginated list of all USDT transfers detected for your deposit addresses. Filter by status, date range, or a specific address. Use this to reconcile payments on your side.
X-Api-KeyYOUR_API_KEYrequiredlimitnumberoptionalMax results per page. Default: 20offsetnumberoptionalResults to skip. Default: 0statusstringoptionalFilter by status: pending, confirmed, sweptmodestringoptionalproduction or sandboxaddressstringoptionalFilter by a specific deposit wallet addressdateFromstring (ISO 8601)optionalStart of date range (createdAt ≥ dateFrom)dateTostring (ISO 8601)optionalEnd of date range (createdAt ≤ dateTo){
"success": true,
"data": [
{
"id": 101,
"txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"amount": "100.500000",
"status": "confirmed",
"mode": "production",
"blockNumber": 38000000,
"webhookSent": true,
"createdAt": "2026-05-24T10:05:00.000Z"
}
],
"meta": { "total": 1, "limit": 20, "offset": 0 }
}# All transactions
curl "https://api.paychainly.com/api/integration/transactions?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"
# Filter confirmed payments in May 2026
curl "https://api.paychainly.com/api/integration/transactions?status=confirmed&dateFrom=2026-05-01&dateTo=2026-05-31" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/transactions/by-address/:addressList Transactions by Address
Returns all USDT transactions received by a specific deposit wallet address, paginated and ordered by block number descending. Supports optional status and date-range filters. Useful for showing payment history for a single customer wallet.
X-Api-KeyYOUR_API_KEYrequiredaddressstringrequiredFull 0x-prefixed deposit wallet addresslimitnumberoptionalMax results per page. Default: 20offsetnumberoptionalResults to skip. Default: 0statusstringoptionalFilter by status: pending, confirmed, sweptdateFromstring (ISO 8601)optionalStart of date range (createdAt ≥ dateFrom)dateTostring (ISO 8601)optionalEnd of date range (createdAt ≤ dateTo){
"success": true,
"data": [
{
"id": 101,
"txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"amount": "100.500000",
"status": "confirmed",
"mode": "production",
"blockNumber": 38000000,
"webhookSent": true,
"createdAt": "2026-05-24T10:05:00.000Z"
}
],
"meta": {
"total": 1,
"limit": 20,
"offset": 0,
"address": "0x1234567890abcdef1234567890abcdef12345678"
}
}ADDR="0x1234567890abcdef1234567890abcdef12345678"
# All transactions for this address
curl "https://api.paychainly.com/api/integration/transactions/by-address/${ADDR}?limit=20" \
-H "X-Api-Key: YOUR_API_KEY"
# Only confirmed, filtered by date
curl "https://api.paychainly.com/api/integration/transactions/by-address/${ADDR}?status=confirmed&dateFrom=2026-05-01" \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/transactions/:idGet Transaction
Retrieves a single transaction by numeric ID or full txHash. Useful when your webhook receives a txHash and you want to fetch the full record. Both formats are accepted.
X-Api-KeyYOUR_API_KEYrequiredidinteger | stringrequiredNumeric transaction ID (e.g. 101) or full txHash (0x...){
"success": true,
"data": {
"id": 101,
"txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"amount": "100.500000",
"status": "confirmed",
"mode": "production",
"blockNumber": 38000000,
"webhookSent": true,
"createdAt": "2026-05-24T10:05:00.000Z"
}
}# By numeric ID
curl "https://api.paychainly.com/api/integration/transactions/101" \
-H "X-Api-Key: YOUR_API_KEY"
# By txHash (from webhook payload)
curl "https://api.paychainly.com/api/integration/transactions/0xabcdef..." \
-H "X-Api-Key: YOUR_API_KEY"Invoices
3/api/integration/invoice/:txIdDownload Invoice PDF (Universal)
Download the PDF invoice for a transaction. Accepts either a numeric transaction ID or an on-chain transaction hash — the server detects which format was passed automatically. This is the recommended endpoint.
X-Api-KeyYOUR_API_KEYrequiredtxIdstring | numberrequiredEither the numeric transaction ID (e.g. "42") or the on-chain tx hash (e.g. "0xabc123...")// Returns a PDF binary stream
// Content-Type: application/pdf
// Content-Disposition: attachment; filename="INV-42.pdf"# By numeric ID:
curl https://api.paychainly.com/api/integration/invoice/42 \
-H "X-Api-Key: YOUR_API_KEY" \
--output invoice-42.pdf
# By on-chain hash:
curl https://api.paychainly.com/api/integration/invoice/0xabc123... \
-H "X-Api-Key: YOUR_API_KEY" \
--output invoice.pdf/api/integration/invoice/by-id/:idDownload Invoice PDF by ID
Generate and download a PDF invoice for a completed transaction using its numeric ID. Returns a binary PDF stream using your Invoice Settings.
X-Api-KeyYOUR_API_KEYrequiredidintegerrequiredNumeric transaction ID (e.g. 8).Content-Type: application/pdf
Content-Disposition: attachment; filename="invoice-8.pdf"
<binary PDF data>curl "https://api.paychainly.com/api/integration/invoice/by-id/8" \
-H "X-Api-Key: YOUR_API_KEY" \
--output invoice-8.pdf/api/integration/invoice/by-hash/:txHashDownload Invoice PDF by Tx Hash
Generate and download a PDF invoice for a completed transaction using the on-chain transaction hash. Returns a binary PDF stream using your Invoice Settings.
X-Api-KeyYOUR_API_KEYrequiredtxHashstringrequiredOn-chain transaction hash (e.g. "0xabc123…").Content-Type: application/pdf
Content-Disposition: attachment; filename="invoice.pdf"
<binary PDF data>HASH="0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890ab"
curl "https://api.paychainly.com/api/integration/invoice/by-hash/${HASH}" \
-H "X-Api-Key: YOUR_API_KEY" \
--output invoice.pdfWithdrawals
5/api/integration/withdrawalsCreate Withdrawal
Initiate a USDT withdrawal from your Paychainly balance to an external wallet. Always generate a unique UUID for idempotencyKey and store it before calling — submit the same key on retry to prevent duplicate withdrawals.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequiredidempotencyKeystring (UUID)requiredUnique UUID per withdrawal request. Re-submit the same key on retry — returns original result, never a duplicate.networkstringrequiredNetwork slug e.g. "BNB" for BSCtoAddressstringrequiredDestination EVM wallet address (0x...)amountstringrequiredAmount to withdraw as decimal string e.g. "100.00"feeMode"deduct" | "add"required"deduct" — fee taken from withdrawal amount. "add" — fee charged on top of withdrawal.notestringoptionalInternal note for this withdrawal — visible only to you, not shown to recipientmetadataobjectoptionalCustom JSON payload e.g. { "orderId": "123", "userId": "456" }{
"success": true,
"data": {
"id": 1,
"idempotencyKey": "550e8400-e29b-41d4-a716-446655440000",
"network": "BNB",
"toAddress": "0xRecipientAddress",
"amount": "100.00",
"feeMode": "deduct",
"status": "pending",
"txHash": null,
"createdAt": "2026-06-01T10:00:00.000Z"
}
}curl -X POST https://api.paychainly.com/api/integration/withdrawals \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"idempotencyKey": "550e8400-e29b-41d4-a716-446655440000",
"network": "BNB",
"toAddress": "0xRecipientWalletAddress",
"amount": "100.00",
"feeMode": "deduct",
"note": "Monthly payout",
"metadata": { "orderId": "order-456" }
}'/api/integration/withdrawalsList Withdrawals
List all withdrawal requests for your account with pagination.
X-Api-KeyYOUR_API_KEYrequiredlimitnumberoptionalMax records to return (default 20, max 100) Default: 20offsetnumberoptionalRecords to skip for pagination Default: 0{
"success": true,
"data": [
{
"id": 1,
"network": "BNB",
"toAddress": "0xRecipientAddress",
"amount": "100.00",
"feeMode": "deduct",
"status": "completed",
"txHash": "0xabc123...",
"createdAt": "2026-06-01T10:00:00.000Z"
}
],
"total": 1
}curl https://api.paychainly.com/api/integration/withdrawals?limit=20 \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/withdrawals/:idGet Withdrawal
Get a withdrawal request by its numeric ID.
X-Api-KeyYOUR_API_KEYrequiredidnumberrequiredWithdrawal numeric ID{
"success": true,
"data": {
"id": 1,
"idempotencyKey": "550e8400-e29b-41d4-a716-446655440000",
"network": "BNB",
"toAddress": "0xRecipientAddress",
"amount": "100.00",
"feeMode": "deduct",
"status": "completed",
"txHash": "0xabc123...",
"createdAt": "2026-06-01T10:00:00.000Z",
"updatedAt": "2026-06-01T10:01:00.000Z"
}
}curl https://api.paychainly.com/api/integration/withdrawals/1 \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/withdrawals/:id/cancelCancel Withdrawal
Cancel a pending withdrawal before it is processed. Only withdrawals with status "pending" can be cancelled.
X-Api-KeyYOUR_API_KEYrequiredidnumberrequiredWithdrawal numeric ID to cancel{
"success": true,
"data": {
"id": 1,
"status": "cancelled",
"updatedAt": "2026-06-01T10:02:00.000Z"
}
}curl -X POST https://api.paychainly.com/api/integration/withdrawals/1/cancel \
-H "X-Api-Key: YOUR_API_KEY"/api/integration/withdrawals/by-address/:addressGet Withdrawals by Address
Get all withdrawal requests that were sent to a specific destination wallet address.
X-Api-KeyYOUR_API_KEYrequiredaddressstringrequiredDestination wallet address to filter by (0x...)pagenumberoptionalPage number (default 1) Default: 1limitnumberoptionalRecords per page (default 20) Default: 20statusstringoptionalFilter by status: "pending", "processing", "completed", "failed", "cancelled"{
"success": true,
"data": [
{
"id": 1,
"toAddress": "0xRecipientAddress",
"network": "BNB",
"amount": "100.00",
"status": "completed",
"txHash": "0xabc123...",
"createdAt": "2026-06-01T10:00:00.000Z"
}
],
"total": 1,
"page": 1,
"limit": 20
}curl "https://api.paychainly.com/api/integration/withdrawals/by-address/0xRecipientAddress?page=1&limit=20" \
-H "X-Api-Key: YOUR_API_KEY"Sandbox
1/api/sandbox/creditCredit Test Funds
Credit test USDT to a sandbox deposit address to simulate a payment. Only works in sandbox mode — no real funds involved. Use this to test your integration end-to-end without sending real crypto.
Content-Typeapplication/jsonrequiredX-Api-KeyYOUR_API_KEYrequiredaddressstringrequiredSandbox deposit address to credit (0x...)amountstringrequiredAmount of test USDT to credit e.g. "100"{
"success": true,
"data": {
"address": "0xYourSandboxDepositAddress",
"amount": "100",
"txHash": "0xsimulated_tx_hash",
"status": "simulated"
}
}curl -X POST https://api.paychainly.com/api/sandbox/credit \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"address": "0xYourSandboxDepositAddress",
"amount": "100"
}'Error Codes
All error responses follow the same envelope. The code field is machine-readable and stable — use it in your error handling logic.
API_KEY_REQUIREDNo API key was provided in the requestINVALID_API_KEYThe API key is invalid, expired, or revokedFORBIDDENThe key does not have permission for this resourceNOT_FOUNDThe requested resource does not existVALIDATION_ERROROne or more request fields failed validationINTERNAL_ERRORUnexpected server-side error{
"success": false,
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid or missing API key"
}
}