Skip to main content

Stablecoin & Crypto

Generate on-chain wallet addresses for USDT and USDC deposits across multiple blockchains.


Get Available Currencies

GET /stable/addresses/currencies

List all supported stablecoin currencies and their available blockchain networks.

Headers

FieldValue
AuthorizationBearer PAYSCRIBE_API_KEY

Request

curl -X GET "https://sandbox.payscribe.ng/api/v1/stable/addresses/currencies" \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY"

Response

Status: 200 OK
{
"status": true,
"description": "Address currencies retrieved",
"message": {
"details": [
{
"currency": "USDT",
"networks": [
"Tron",
"Ethereum",
"BNB Smart Chain",
"Polygon",
"Arbitrum One",
"Optimism",
"Base",
"Avalanche C-Chain",
"Solana",
"The Open Network"
]
},
{
"currency": "USDC",
"networks": [
"Ethereum",
"BNB Smart Chain",
"Polygon",
"Arbitrum One",
"Optimism",
"Base",
"Solana"
]
}
]
},
"status_code": 200
}

There is no name, minimum_deposit, or confirmation_blocks field, and networks lists full chain names ("Tron", "Ethereum") — not short codes like TRC20/ERC20. Note the actual supported network list is much larger than elsewhere on this page suggests (Polygon, Arbitrum One, Optimism, Base, Avalanche C-Chain, and The Open Network/TON are all valid, in addition to Tron/Ethereum/BNB Smart Chain/Solana).


Generate Address

POST /stable/address/create

Create a deposit address for a specific stablecoin and blockchain network.

Disabled in sandbox

Tracing the routed method (SandboxApiEndpoints::createAddress()) shows sandbox address creation is deliberately turned off — the method returns a 503 ("Sandbox stablecoin address creation is not enabled.") before any request field is even read, regardless of currency, network, or chain. Per the code comment, this is intentional pending a separate CoinsBuy sandbox account and wallet mapping — not a bug — but it means the request/response below cannot be exercised in sandbox today. Get Available Currencies, Get Wallet, and Get All Wallets still work normally against your existing (live-created) addresses.

Headers

FieldValue
AuthorizationBearer PAYSCRIBE_API_KEY
Content-Typeapplication/json

Body Parameters

FieldTypeRequiredDescription
currencystringYesStablecoin to receive. One of USDT or USDC.
networkstringYesBlockchain network name (e.g., Tron, Ethereum, BNB Smart Chain, Solana).
chainstringYesBlockchain standard / chain code (e.g., TRC20, ERC20, BEP20, SOL).
customer_idstringNoAssociate the address with a customer for easy reconciliation.
labelstringNoAn internal label for the address.

Request

curl -X POST "https://sandbox.payscribe.ng/api/v1/stable/address/create" \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"currency": "USDT",
"network": "Tron",
"chain": "TRC20",
"customer_id": "cus_xyz456"
}'

Response

Status: 201 Created
{
"status": true,
"description": "Deposit address generated successfully",
"message": {
"details": {
"id": "addr_abc123",
"currency": "USDT",
"network": "Tron",
"chain": "TRC20",
"address": "TXYZabc123def456ghi789jkl012mno345pqr678",
"customer_id": "cus_xyz456",
"label": null,
"status": "active",
"created_at": "2026-07-20T10:00:00Z"
}
},
"status_code": 200
}

The live implementation does not echo label or status on this response, and is idempotent per currency/network/chain/customer_id combination — a repeat call returns the existing address ("Address already existed") rather than creating a new one.


Get Wallet

GET /stable/addresses/{id}

Retrieve details of a single deposit address by its numeric id (this response does not include a balance or deposit history — see Get All Wallets for the fields this API actually returns).

Headers

FieldValue
AuthorizationBearer PAYSCRIBE_API_KEY

Path Parameters

FieldTypeRequiredDescription
idintegerYesNumeric wallet address record ID.

Request

curl -X GET "https://sandbox.payscribe.ng/api/v1/stable/addresses/123" \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY"

Response

Status: 200 OK
{
"status": true,
"description": "Stablecoin address retrieved",
"message": {
"details": {
"id": 123,
"user_id": null,
"customer_id": "cus_xyz456",
"currency": "USDT",
"network": "Tron",
"chain": "TRC20",
"address": "TXYZabc123def456ghi789jkl012mno345pqr678",
"memo_tag": null,
"label": null,
"tracking_id": "8f3b2a5d-1e4c-7a9b-0f2e-6d4a8c1f3009",
"provider": "coinsbuy",
"is_primary": false,
"status": "active",
"created_at": "2026-07-20 10:00:00"
}
},
"status_code": 200
}

id is a plain integer (not an addr_-prefixed string), and network is the full chain name (Tron) with chain carrying the short code (TRC20) separately. There is no balance, total_received, total_withdrawn, transactions_count, or last_activity_at field on this endpoint.


Get All Wallets

GET /stable/addresses

List all deposit addresses generated for your integration. Use the expand parameter to include related customer data.

Headers

FieldValue
AuthorizationBearer PAYSCRIBE_API_KEY

Query Parameters

FieldTypeRequiredDescription
expandstringNoInclude related data. Set to customer to include customer details.
currencystringNoFilter by currency (USDT or USDC).
networkstringNoFilter by full network name (e.g. Tron, Ethereum) — not the short chain code.
chainstringNoFilter by short chain code (e.g. TRC20, ERC20).
customer_idstringNoFilter by associated customer.
statusstringNoFilter by address status.
tracking_idstringNoFilter by the provider's tracking ID.
only_customerbooleanNotrue returns only addresses tied to a customer; false returns only ones that aren't.
pageintegerNoPage number to fetch. Defaults to 1.
limitintegerNoAddresses per page, max 100. Defaults to 25. There is no per_page parameter.

Request

curl -X GET "https://sandbox.payscribe.ng/api/v1/stable/addresses" \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY"
Include customer data:
curl -X GET "https://sandbox.payscribe.ng/api/v1/stable/addresses?expand=customer" \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY"

Response

Status: 200 OK
{
"status": true,
"description": "Wallet addresses retrieved",
"message": {
"details": [
[
{
"id": 123,
"user_id": null,
"customer_id": "cus_xyz456",
"currency": "USDT",
"network": "Tron",
"chain": "TRC20",
"address": "TXYZabc123def456ghi789jkl012mno345pqr678",
"memo_tag": null,
"label": "Business wallet",
"tracking_id": "8f3b2a5d-1e4c-7a9b-0f2e-6d4a8c1f3009",
"is_primary": false,
"status": "active",
"created_at": "2026-07-20 10:00:00",
"customer": {
"customer_id": "cus_xyz456",
"name": "John Doe",
"email": "john.doe@example.com",
"phone": "08012345678",
"status": "active"
}
}
],
{
"page": 1,
"limit": 25,
"count": 1
}
]
},
"status_code": 200
}

message.details is a two-element array — details[0] is the list of addresses and details[1] is the pagination info (page/limit/count), not an object with a top-level meta key. There is no total_pages, total_received, balance, or last_activity_at, and the expanded customer object uses name/email/phone/status, not first_name/last_name. This endpoint also only returns addresses created for a topup purpose — card-funding deposit addresses are excluded.


Get Wallet Deposits

List the on-chain deposits credited to one of your wallet addresses.

This is a live-only endpoint — call it against api.payscribe.ng; there is no sandbox counterpart.

Headers

FieldValue
AuthorizationBearer PAYSCRIBE_API_KEY

Parameters

FieldTypeRequiredDescription
address_idintegerOne ofNumeric wallet address record ID (returned by Get All Wallets).
addressstringOne ofLiteral deposit address string. Exactly one of address_id / address is required.
pageintegerNoPage number, starting at 1. Default 1.
limitintegerNoResults per page, 1100. Default 25.
statusstringNoComma-separated statuses to include (e.g. pending,confirmed).
currencystringNoAsset code, e.g. USDT.
networkstringNoBlockchain name, e.g. Tron.
chainstringNoChain code, e.g. TRC20.
txidstringNoExact transaction hash.
from / tostringNoCreated-at range, Y-m-d H:i:s.

Request

GET /stable/addresses/deposits?address_id=123&limit=25

curl -G https://api.payscribe.ng/api/v1/stable/addresses/deposits \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY" \
--data-urlencode "address_id=123" \
--data-urlencode "limit=25"

Response

200 OK

{
"status": true,
"description": "Wallet address deposits retrieved",
"message": {
"details": [
[
{
"id": 4567,
"address_id": 123,
"txid": "0x9a1f2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f70",
"amount_asset": 250,
"currency": "USDT",
"network": "Tron",
"chain": "TRC20",
"confirmations": 19,
"required_conf": 18,
"status": "confirmed",
"provider_commission": 0.5,
"created_at": "2026-07-21 09:15:00",
"updated_at": "2026-07-21 09:16:00"
}
],
{
"page": 1,
"limit": 25,
"count": 1
}
]
},
"status_code": 200
}

details[0] rows come straight from the deposits ledger — the credited amount is the asset-denominated amount_asset field (there is no amount key), and pagination lives in details[1] as {page, limit, count}.


Get Stablecoin Order

Fetch a stablecoin-funded card order and its deposit details.

This is a live-only endpoint — call it against api.payscribe.ng; there is no sandbox counterpart.

Headers

FieldValue
AuthorizationBearer PAYSCRIBE_API_KEY

Parameters

FieldTypeRequiredDescription
order_idstringYesPublic order ID from the /coins path (path parameter).

Request

GET /coins/{order_id}

curl -X GET https://api.payscribe.ng/api/v1/coins/ord_abc123 \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY"

Response

200 OK

{
"status": true,
"description": "Order details fetched.",
"message": {
"details": {
"order_id": "ord_abc123",
"action": "create-card",
"status": "pending",
"currency": "USDT",
"network": "Tron",
"chain": "TRC20",
"amount_usd": 100,
"fee_usd": 5,
"total_usd": 105,
"amount": 105,
"deposit_address": "TXYZabc123def456ghi789jkl012mno345pqr678",
"memo_tag": null,
"ref": "btn_order_123",
"brand": "VISA",
"card_uuid": "card_abc123",
"expires_at": "2026-07-21 10:30:00",
"fulfilled_at": null,
"created_at": "2026-07-21 09:00:00",
"customer": {
"id": "cus_xyz456",
"name": "John Doe",
"email": "john.doe@example.com"
},
"business": {
"id": "biz_123",
"name": "Example Business",
"logo": "https://app.payscribe.ng/assets/img/icons/payscribe_logo.png"
},
"transactions": []
}
},
"status_code": 200
}

The amount field is the exact stablecoin amount (stablecoin_amount) the customer must send to deposit_address, and transactions lists the up to 20 latest matching deposits from the deposits ledger.


Customer Stablecoin Addresses

Generate and manage deposit addresses scoped to an individual customer, so each customer keeps a dedicated receiving address.

All four operations are live-only — call them against api.payscribe.ng.

List Customer Deposit Addresses

List the active deposit addresses assigned to a specific customer.

GET /customers/{id}/stablecoin-addresses

Query parameters: page (default 1), limit (default 25, max 100), currency, network, chain.

curl -G https://api.payscribe.ng/api/v1/customers/cus_xyz456/stablecoin-addresses \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY" \
--data-urlencode "limit=25"

200 OK returns the same shape as Get All Wallets (details = [addresses, {page, limit, count}]). Returns 404 if the customer is not found, and 422 if the customer id path segment is missing.

Create Customer Deposit Address

Generate and assign a new deposit address to a customer.

POST /customers/{id}/stablecoin-addresses

Parameters:

FieldTypeRequiredDescription
currencystringYesAsset code, e.g. USDT.
networkstringYesBlockchain name, e.g. Tron.
chainstringYesChain code, e.g. TRC20.
labelstringNoHuman-readable label, max 100 characters.
curl -X POST https://api.payscribe.ng/api/v1/customers/cus_xyz456/stablecoin-addresses \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"currency": "USDT", "network": "Tron", "chain": "TRC20", "label": "Customer payouts"}'

200 OK returns the created address — {id, currency, network, chain, address, memo_tag, label, is_primary, status, created_at}. If an active address already exists for the same owner/currency/network/chain it is returned as "Address already existed" instead of creating a new one. Notes: creating a customer address may hold a small USD creation fee on your business balance, refunded on first use; 422 when currency/network/chain is missing or the asset is unsupported, 404 when the customer is not found.

Update Customer Deposit Address

Update the label or default flag of a customer's address.

PATCH /customers/{id}/stablecoin-addresses/{addr_id}

Parameters:

FieldTypeRequiredDescription
labelstringNoNew label, max 100 characters.
is_primarybooleanNoMake this the customer's default address for the same currency and network (clears the previous default).
curl -X PATCH https://api.payscribe.ng/api/v1/customers/cus_xyz456/stablecoin-addresses/123 \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"label": "Primary payouts", "is_primary": true}'

200 OK returns the updated address as {id, address, label, is_primary, currency, network, chain, updated_at}. Returns 422 when nothing to update is provided and 404 when the address or customer is not found.

Delete Customer Deposit Address

Deactivate a customer's deposit address (soft delete — the record is kept with status: "inactive").

DELETE /customers/{id}/stablecoin-addresses/{addr_id}

curl -X DELETE https://api.payscribe.ng/api/v1/customers/cus_xyz456/stablecoin-addresses/123 \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY"

200 OK returns {id, status: "inactive"}. Returns 409 if the address is already inactive or has a pending deposit order, and 404 if the address or customer is not found.

Was this page helpful?

Report a docs issue →