Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.dubupay.com/llms.txt

Use this file to discover all available pages before exploring further.

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.
Authorization: Bearer <access_token>
X-Api-Key: dubu_sk_live_...

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

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

Response

data
object
The created withdrawal.

Example

curl -X POST https://api.dubupay.com/api/v1/payments/withdrawals \
  -H "X-Api-Key: dubu_sk_live_..." \
  -H "X-Idempotency-Key: withdrawal-20240101-001" \
  -H "Content-Type: application/json" \
  -d '{
    "amount_usd": "250.00",
    "token": "USDT",
    "chain": "TRON",
    "destination_address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
  }'

List withdrawals

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

Query parameters

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

Example

curl "https://api.dubupay.com/api/v1/payments/withdrawals?status=SETTLED&limit=20" \
  -H "X-Api-Key: dubu_sk_live_..."

Get a withdrawal

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

Path parameters

id
string
required
The withdrawal ID.

Example

curl "https://api.dubupay.com/api/v1/payments/withdrawals/wdr_01HXYZ" \
  -H "X-Api-Key: dubu_sk_live_..."

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

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

Example — settle to internal balance

curl -X POST https://api.dubupay.com/api/v1/payments/offramps \
  -H "X-Api-Key: dubu_sk_live_..." \
  -H "X-Idempotency-Key: offramp-ada-001" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "PERMANENT",
    "customer": {
      "customer_id": "b2c3d4e5-f6a7-8901-bcde-f01234567890"
    },
    "chain": "TRON",
    "asset": "USDT",
    "settlement": {
      "mode": "INTERNAL_BALANCE"
    }
  }'

Example — NGN payout to bank account

curl -X POST https://api.dubupay.com/api/v1/payments/offramps \
  -H "X-Api-Key: dubu_sk_live_..." \
  -H "X-Idempotency-Key: offramp-payout-001" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "TEMPORARY",
    "customer": {
      "email": "ada.obi@example.com"
    },
    "chain": "SOLANA",
    "asset": "USDC",
    "settlement": {
      "mode": "NGN_PAYOUT",
      "rate_id": "rate_abc123",
      "destination_bank": {
        "account_name": "Ada Obi",
        "account_number": "0123456789",
        "bank_code": "058"
      }
    }
  }'

List offramps

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

Query parameters

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

Example

curl "https://api.dubupay.com/api/v1/payments/offramps?status=ACTIVE&chain=TRON" \
  -H "X-Api-Key: dubu_sk_live_..."

Get an offramp

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

Path parameters

id
string
required
The offramp ID.

Example

curl "https://api.dubupay.com/api/v1/payments/offramps/off_01HXYZ" \
  -H "X-Api-Key: dubu_sk_live_..."

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

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

Example

curl -X POST https://api.dubupay.com/api/v1/recipients \
  -H "X-Api-Key: dubu_sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "type": "BANK_ACCOUNT",
    "bank_account": {
      "account_number": "0123456789",
      "bank_code": "058",
      "account_name": "Ada Obi"
    }
  }'