Skip to main content

Create Payment

Create a new payment of any type.

POST /v1/payments

Required Permission: payment:create

Request Body:

FieldTypeRequiredDescription
typestringYestransfer, gift, request, merchant, or bank_confirmation
fiatAmountnumberConditionalAmount in fiat currency (required unless cryptoAmount provided)
cryptoAmountnumberConditionalCrypto amount for crypto-first mode (not valid for request)
fiatCurrencystringYesNGN, GHS, KES, ZAR
cryptostringConditionalRequired for transfer/gift/merchant/bank_confirmation; optional for request
networkstringConditionalRequired for transfer/gift/merchant/bank_confirmation; optional for request
chargeFromstringRequired for transfer"fiat" — fee from payout; "crypto" — fee added to crypto
payerobjectConditionalRequired for transfer/gift; not allowed for request
payer.chatIdstringYes (if payer)Payer identifier
payer.phonestringNoPayer phone number
receiverobjectConditionalRequired for transfer/request; not allowed for gift/bank_confirmation
receiver.bankCodestringYes (if receiver)Bank code
receiver.accountNumberstringYes (if receiver)Account number
bankRefstringNoBank's internal reference (bank_confirmation type only)
metadataobjectNoCustom data for your reference
callbackUrlstringNoURL for status callbacks

Example: Create Transfer

POST /v1/payments
{
"type": "transfer",
"fiatAmount": 10000,
"fiatCurrency": "NGN",
"crypto": "USDT",
"network": "trc20",
"chargeFrom": "fiat",
"payer": {
"chatId": "7389201648"
},
"receiver": {
"bankCode": "090405",
"accountNumber": "8012345678"
},
"metadata": {
"orderId": "ORD-001",
"description": "Product purchase"
}
}

Response:

{
"success": true,
"payment": {
"reference": "2S-7N4VFR",
"type": "transfer",
"status": "pending",
"depositAddress": "TDrhiGeJ11zNStTLhcJt4CvqSwyUVbHPZR",
"cryptoAmount": 6.6038,
"crypto": "USDT",
"network": "trc20",
"fiatAmount": 9500,
"fiatCurrency": "NGN",
"transactionUsd": 6.60,
"rate": 1439.00,
"charge": {
"fiat": 500,
"crypto": 0.3474,
"usd": 0.35
},
"expiresAt": "2024-03-03T11:00:00.000Z"
}
}

Example: Create Gift

POST /v1/payments
{
"type": "gift",
"fiatAmount": 5000,
"fiatCurrency": "NGN",
"crypto": "BTC",
"network": "bitcoin",
"payer": {
"chatId": "7389201648"
},
"metadata": {
"message": "Happy Birthday!"
}
}

Response:

{
"success": true,
"payment": {
"reference": "2S-GIFT01",
"type": "gift",
"status": "pending",
"depositAddress": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
"cryptoAmount": 0.0000328,
"crypto": "BTC",
"network": "bitcoin",
"fiatAmount": 5000,
"fiatCurrency": "NGN",
"transactionUsd": 3.09,
"rate": 1620.5,
"charge": {
"fiat": 0,
"crypto": 0.00000033,
"usd": 0.05
},
"expiresAt": "2024-03-03T14:00:00.000Z"
}
}

Example: Create Request (Deferred Crypto)

When creating a request, you can omit crypto and network. The payer will choose when fulfilling.

POST /v1/payments
{
"type": "request",
"fiatAmount": 25000,
"fiatCurrency": "NGN",
"receiver": {
"bankCode": "044",
"accountNumber": "0012345678"
},
"metadata": {
"invoiceId": "INV-2024-001"
}
}

Response:

{
"success": true,
"payment": {
"id": "pay_reqABC789",
"reference": "2S-REQ001",
"type": "request",
"status": "created",
"fiatAmount": 25000,
"fiatCurrency": "NGN"
}
}

Note: No depositAddress, crypto, or cryptoAmount yet - these are set when fulfilled.