requestId you can use to poll for the final status or receive a webhook notification.
Endpoints Overview
User Onramp
POST /cngnonramp
Creates a temporary Smart Wallet and a bank transfer instruction so your end-user can fund their wallet by paying Naira into a virtual account. After the bank transfer is confirmed, cNGN is disbursed to the generated wallet.
Use the
/getvirtualaccount endpoint to retrieve the virtual bank account details for payment. The generated account is only active for 30 minutes after creation.The
amount field is denominated in Naira. For example, 500 means ₦500 - not 500 kobo or 500 token units.string
required
Unique identifier (hash or UUID) of the end-user initiating the onramp.
number
required
Amount to fund in Naira (e.g.
500 = ₦500). Must be greater than 0.string
The token to swap cNGN into after funding (e.g.
USDC, USDT). Only used when autoSwap is true.boolean
When
true, automatically swaps the funded cNGN into assetSwap after the bank payment is confirmed.boolean
When
true, automatically routes the funded (and optionally swapped) amount to the user’s default wallet after confirmation - their Strails-managed Smart Wallet, or their external default wallet if one is registered. When set, destinationAssetSwap is ignored.string
Destination wallet address for the swapped assets. Only used when
autoSwap is true and sweepToOfframp is false.string
Your EOA wallet address to take ownership of the generated Smart Wallet. When set, you can withdraw tokens directly using your EOA. Note that Strails cannot withdraw funds from wallets with a custom owner.
autoSwap behaviour matrix
“User’s default Smart Wallet” resolves to the user’s external default wallet when one is registered. Because Strails cannot sign for external addresses, plan subsequent swap or offramp operations against a Strails-managed wallet.
object
Response
Validation error
User not found
User Offramp
POST /cngnofframp
Converts cNGN held in a user’s Smart Wallet to Naira and initiates a bank transfer to the specified account. The call returns immediately with a requestId; the actual bank transfer completes asynchronously.
The
amount field is denominated in Naira (e.g. 5000 = ₦5,000), not in token units or kobo.string
required
Unique identifier (hash or UUID) of the user initiating the offramp.
number
required
Amount to convert and transfer in Naira (e.g.
5000 = ₦5,000). Must be greater than 0.string
required
The destination bank account number (10 digits).
string
required
The NIBSS bank identifier code (e.g.
058 for GTBank). Use /getbankscode to get a full list.string
required
The asset symbol being off-ramped (e.g.
CNGN).Response
Validation error
Insufficient balance
No funded wallet
User not found
Fintech Onramp
GET /getfintechvirtualaccount
Returns the persistent virtual bank account assigned to your fintech. Any Naira payment received on this account is automatically converted to cNGN and credited to your fintech Smart Wallet.
Use
/getfintechwallet to find your Smart Wallet address - that is where disbursed cNGN is credited after a deposit is confirmed.Response
Fintech Offramp
POST /initiateofframp
Converts cNGN from your fintech Smart Wallet to Naira and initiates a payout to a configured bank account. Returns a requestId immediately; the transfer completes asynchronously.
number
required
Amount to transfer in the lowest token unit (e.g.
1000000 = 1.00 cNGN, 1000000000 = 1,000.00 cNGN). Must be greater than 0.string
required
UUID of the destination bank account, as returned by
/addbankaccount.Response
Validation error
Bank account not found
Insufficient balance
User Token Withdrawal
POST /withdrawasset
Withdraws a token from a user’s internal Smart Wallet to an external destination wallet. Supports multi-chain transfers - set the network parameter to route the withdrawal through a bridge to a non-Base chain.
string
required
Unique identifier (hash or UUID) of the user initiating the withdrawal.
string
required
The user’s internal (source) wallet address on the platform.
string
required
The external destination address to receive the withdrawn tokens.
number
required
Amount to withdraw in human-readable token units (e.g.
100 = 100 cNGN). Must be greater than 0. Note this differs from /fintechtransfer, which takes the lowest token unit.string
required
Asset symbol to withdraw (e.g.
CNGN, USDC, USDT).string
Target network for the withdrawal. When set, Strails routes the transfer through a bridge. Supported values:
base, bsc, sol, eth, xbn, asc, arc, lisk. Defaults to base if not provided.Response
Validation error
User not found
Insufficient balance
Fintech Token Withdrawal
POST /fintechtransfer
Transfers tokens from your fintech Smart Wallet to a registered external wallet. The destination address must already be whitelisted via /addexternalwallet before you call this endpoint.
You must whitelist the destination address before calling
/fintechtransfer. Use /addexternalwallet to register the address first.string
required
Ethereum address of the destination wallet. Must be a wallet already registered via
/addexternalwallet.number
required
Amount to transfer in the lowest token unit (e.g.
5000000 = 5.0 cNGN). Note this differs from /withdrawasset, which takes human-readable token units.string
Token symbol to transfer:
CNGN (default), USDC, or USDT.string
Optional memo for internal record-keeping (max 500 characters).
Response
Destination not registered
Insufficient balance
cNGN Onramp Status
POST /cngnonrampstatus
Returns the current status of a user onramp request, including virtual account details, funding timestamps, and any active FX quote.
string
required
The Smart Wallet address returned by
/cngnonramp.Response
cNGN Offramp Status
POST /cngnofframpstatus
Returns the current status of a user offramp request, including on-chain token transfer details and the fiat payout outcome.
string
required
The
requestId returned by /cngnofframp.Response
Fintech Offramp Status
GET /getofframpstatus
Returns the current status of a fintech offramp request initiated via /initiateofframp.
string
required
The
requestId returned by /initiateofframp.Response
List Deposits
GET /deposits
Returns a paginated list of deposit transactions. Filter by type (fintech_deposit for direct fintech deposits, user_onramp for end-user onramps), status, date range, and user.
string
Transaction type filter. One of
fintech_deposit or user_onramp.string
Filter by end-user ID. Only applicable when
type is user_onramp.string
Filter by status. One of
pending, processing, completed, failed, or cancelled.string
ISO 8601 start of the date range (e.g.
2026-01-01T00:00:00Z).string
ISO 8601 end of the date range (e.g.
2026-01-31T23:59:59Z).number
Maximum number of results to return. Defaults to
20, maximum 100.number
Pagination offset. Defaults to
0.Response
List Payouts
GET /payouts
Returns a paginated list of payout transactions. Filter by type (fintech_offramp for fintech-initiated payouts, user_offramp for end-user offramps), status, date range, and user.
string
Transaction type filter. One of
fintech_offramp or user_offramp.string
Filter by end-user ID. Only applicable when
type is user_offramp.string
Filter by status. One of
pending, processing, completed, failed, or cancelled.string
ISO 8601 start of the date range.
string
ISO 8601 end of the date range.
number
Maximum number of results to return. Defaults to
20, maximum 100.number
Pagination offset. Defaults to
0.Response
List Transactions
GET /transactions
Returns a paginated list of all transactions - both deposits and payouts - with a combined summary. Use direction to separate inbound from outbound flows.
string
Filter by flow direction.
in for deposits, out for payouts.string
Filter by type. One of
fintech_deposit, user_onramp, fintech_offramp, or user_offramp.string
Filter by end-user ID.
string
Filter by status. One of
pending, processing, completed, failed, or cancelled.string
ISO 8601 start of the date range.
string
ISO 8601 end of the date range.
number
Maximum number of results to return. Defaults to
20, maximum 100.number
Pagination offset. Defaults to
0.Response
Withdraw History
GET /withdrawals
Returns a paginated list of token withdrawal transfers, including fintech self-transfers, fintech withdrawals on behalf of users, and direct user withdrawals. Filter by token ticker, status, transfer type, user, date range, and pagination.
Available query parameters
string
Token ticker, e.g.
CNGN.string
Filter by status. One of
pending, completed, or failed.string
Filter by transfer type. One of
fintech_self_transfer, fintech_user_withdrawal, or user_withdrawal.string
Filter by end-user hash/id. Only applicable when
type includes user-related withdrawals.string
ISO 8601 start of the date range.
string
ISO 8601 end of the date range.
number
Maximum number of results to return. Defaults to
20.number
Pagination offset. Defaults to
0.Response
Swap Trigger
POST /swaptrigger
Queues an asynchronous token swap for a specific wallet address. The swap is processed in the background - use /swapstatus with the returned requestId to poll for completion.
string
required
The Smart Wallet address generated during a
/cngnonramp request.string
required
The token to sell. One of
CNGN, USDC, or USDT.string
The token to buy. One of
CNGN, USDC, or USDT. Falls back to the wallet’s configured tokenBuy if not provided.number
Human-readable amount of
sellToken to swap. Falls back to the wallet’s funded amount if not provided.number
Maximum acceptable slippage percentage. Defaults to
5.Response
Validation error
Insufficient liquidity
User Swap
POST /swap
Requests a token swap on a user’s default Smart Wallet. Primarily used for USDC -> cNGN conversions. The swap is processed asynchronously - use /swapstatus with the returned requestId to track completion.
string
required
The token to sell. One of
USDC, USDT, or CNGN.string
required
The token to buy. One of
USDC, USDT, or CNGN.number
required
Human-readable amount to swap (e.g.
100.50 = 100.50 USDC).string
required
Unique identifier (hash or UUID) of the verified end-user.
number
Maximum acceptable slippage percentage. Defaults to
2.string
The user’s Smart Wallet address to execute the swap from. If not provided, the user’s default Smart Wallet is used.
string
Alternative destination wallet for the output tokens. If not provided, output tokens are sent to the user’s default Smart Wallet.
Response
Validation error
User not found
Insufficient balance
Swap Status
GET /swapstatus
Returns the current status of an asynchronous swap request. Use the requestId returned from either /swaptrigger or /swap.
string
required
The
requestId returned by /swaptrigger or /swap.Response
Request not found
Swap History
GET /swaphistory
Returns a paginated list of historical swap requests for your fintech. Use this endpoint to reconcile completed, requested, and failed swaps without polling each requestId individually.
number
Maximum number of results to return. Defaults to
20.number
Pagination offset. Defaults to
0.string
Filter by swap status. One of
requested, completed, or failed.string
ISO 8601 start of the date range (e.g.
2026-01-01T00:00:00Z).string
ISO 8601 end of the date range (e.g.
2026-01-31T23:59:59Z).Response
array
List of swap records. Each entry contains the swap’s
requestId, status, sellToken, buyToken, amountIn, amountOut, executionRate, smartWalletAddress, txHash, triggerType, and timestamps.object
Pagination metadata including
total, limit, offset, and hasMore.