Skip to main content
Dubu Pay gives you two ways to move funds out of your merchant account. Withdrawals send USDT directly to an external blockchain wallet address. Offramps convert USDT to NGN and route the proceeds to a Nigerian bank account — either on-the-spot or on a recurring basis for a specific customer. For both, the operation originates from your merchant USDT balance.

Authentication

All endpoints require either a Bearer token or an API key.

Withdrawals

Create a withdrawal

POST https://api.dubupay.com/api/v1/payments/withdrawals Initiates a USDT withdrawal from your merchant balance to an external wallet address on the specified blockchain network.
This endpoint supports idempotency. Pass an X-Idempotency-Key header to safely retry without creating duplicate withdrawals.

Request body

string
required
The USD-equivalent amount to withdraw, expressed as a decimal string (e.g., "100.00").
string
required
The token to withdraw. Use USDT.
string
required
The blockchain network to send on. Supported values: APTOS, BASE, CELO, ETHEREUM, POLYGON, SOLANA, TRON.
string
required
The recipient wallet address on the specified chain.

Response

object
The created withdrawal.

Example


List withdrawals

GET https://api.dubupay.com/api/v1/payments/withdrawals Returns a paginated list of withdrawals.

Query parameters

number
Page number (1-indexed).
number
Results per page. Up to 100.
string
Filter by status. One of PROCESSING, SETTLED, FAILED.

Example


Get a withdrawal

GET https://api.dubupay.com/api/v1/payments/withdrawals/:id Retrieves a single withdrawal by ID.

Path parameters

string
required
The withdrawal ID.

Example


Offramps

Offramps convert USDT (or USDC) received from a blockchain address into NGN and pay it out to a bank account. You can create offramps as TEMPORARY (one-time, for a specific conversion) or PERMANENT (reusable for a customer’s ongoing payouts). For NGN bank payouts, you must supply a rate_id (lock a rate from the Rates endpoint) and destination bank details.

Create an offramp

POST https://api.dubupay.com/api/v1/payments/offramps Creates a new offramp. The body shape varies depending on whether you settle to your internal balance or to an NGN bank account.
This endpoint supports idempotency via the X-Idempotency-Key header.

Request body

string
required
Offramp type. One of TEMPORARY or PERMANENT.
object
required
The customer for this offramp. Provide either customer_id or email (with optional name fields).
string
required
The blockchain network the offramp listens on. One of APTOS, BASE, CELO, ETHEREUM, POLYGON, SOLANA, TRON.
string
required
The crypto asset to accept. One of USDC or USDT.
object
required
How proceeds are settled after conversion.

Example — settle to internal balance

Example — NGN payout to bank account


List offramps

GET https://api.dubupay.com/api/v1/payments/offramps Returns a paginated list of offramps with optional filters.

Query parameters

string
Filter by type: TEMPORARY or PERMANENT.
string
Filter by chain: APTOS, BASE, CELO, ETHEREUM, POLYGON, SOLANA, or TRON.
string
Filter by asset: USDC or USDT.
string
Filter by status: ACTIVE, INACTIVE, or EXPIRED.
string
Filter by settlement mode: INTERNAL_BALANCE or NGN_PAYOUT.
number
Page number (1-indexed).
number
Results per page. Up to 200.

Example


Get an offramp

GET https://api.dubupay.com/api/v1/payments/offramps/:id Retrieves a single offramp by ID.

Path parameters

string
required
The offramp ID.

Example


Recipients

A recipient is a saved payment destination — a bank account, crypto address, or wire details — that you can reference by ID when creating transfers or offramps. Managing recipients separately lets you avoid re-entering bank details on every payout.

Create a recipient

POST https://api.dubupay.com/api/v1/recipients

Request body

string
required
Recipient type. One of BANK_ACCOUNT, CRYPTO_ADDRESS, US_BANK_ACCOUNT, SWIFT_BANK_ACCOUNT.
string
UUID of an existing customer to associate with this recipient. Required for US_BANK_ACCOUNT and SWIFT_BANK_ACCOUNT types.
object
Required when type is BANK_ACCOUNT.
object
Required when type is CRYPTO_ADDRESS.

Example