Skip to main content
The User Management API lets you register end-users on Strails using their Bank Verification Number (BVN), track the async KYC process through to completion, fetch full user profiles including wallet addresses and virtual accounts, control user account status, and route a user’s cNGN deliveries to an external default wallet. Because BVN verification is handled by an external identity provider, all onboarding requests are processed asynchronously - you receive a requestId immediately and poll or listen for the result.

Endpoints Overview


POST /onboarduser

Initiates onboarding for a new user by submitting their 11-digit BVN for identity verification. The request is processed asynchronously - use the returned requestId to poll /onboardstatus, or wait for the user.onboarded webhook event.

Request Parameters

string
required
The user’s 11-digit Bank Verification Number. Must be exactly 11 numeric digits and must not belong to an existing Strails user.
bvn is the only field this endpoint accepts. Identity details (names, phone, date of birth) are resolved from the BVN record, and the user’s identifier is issued by Strails and returned as userHash - do not supply your own userId.

Response

Store the requestId returned here - you will need it to check onboarding status via /onboardstatus.

Error Responses


POST /onboardstatus

Checks the current status of a pending user onboarding request using the requestId returned by /onboarduser. Poll this endpoint until status is "completed" or "failed", or handle the user.onboarded webhook event instead.

Request Parameters

string
required
The unique identifier returned by /onboarduser when the registration was initiated.

Response

Once status is "completed", use the userId from the response to call /getuserdetails and retrieve the user’s full profile.

Error Responses


POST /getuserdetails

Retrieves the full profile for a verified user, including their personal details pulled from BVN verification, all multi-chain wallet addresses provisioned by Strails, and any virtual accounts assigned to them.

Request Parameters

string
required
The unique identifier for the user, returned as userId in the /onboardstatus response once onboarding is complete.

Response

Error Responses


POST /manageuserstatus

Activates or deactivates a user account. When deactivating, you must supply a reason - this is recorded in the audit trail. Deactivated users cannot initiate transactions or receive deposits until reactivated.

Request Parameters

string
required
The unique identifier of the user whose status you want to change.
boolean
required
Set to true to activate the account or false to deactivate it.
string
A human-readable explanation for the status change. Required when active is false. Recorded in the audit log for compliance purposes.

Response

Error Responses


POST /listfintechusers

Returns a paginated list of all users belonging to your fintech, with summary wallet and virtual account information for each. Use limit and offset to page through large user sets, and status to filter by account state.

Request Parameters

number
Number of users to return per page. Accepts values between 1 and 100. Defaults to 20.
number
Number of users to skip before returning results. Use with limit to paginate through the full list. Defaults to 0.
string
Filter users by account state. Accepted values: "active", "inactive", "all". Defaults to "all".
string
Field to sort results by. Accepted values: "createdAt", "verifiedAt". Defaults to "verifiedAt".
string
Sort direction. Accepted values: "asc", "desc". Defaults to "desc".

Response

array
Array of user summary objects, one per verified user belonging to your fintech.
number
Total number of users matching the applied filter, regardless of limit and offset.
number
Total number of pages available at the current limit setting.
boolean
true if there are more users beyond the current page. Increment offset by limit to fetch the next page.
boolean
true if the current offset is greater than 0, meaning a previous page exists.

User Default Wallet

By default, cNGN disbursed for a user is delivered to the Strails-managed smart wallet provisioned during onboarding. Setting an external default wallet redirects those deliveries to an address you control on behalf of the user - useful when the user self-custodies or when your fintech settles into its own treasury addresses. The external default wallet applies to three delivery paths only:
  • cNGN disbursed from a deposit into the user’s permanent virtual account
  • cNGN disbursed through /cngnonramp
  • Tokens swept when sweepToOfframp is enabled
Deposit and funding webhooks fire as normal; the destination address in the payload reflects the external wallet.
An external default wallet is a delivery destination only. Strails holds no keys for it, so swaps, offramp, and escrow continue to operate against the user’s Strails-managed wallet and never against this address. Funds delivered here must be moved by whoever holds the keys.

POST /setuserdefaultwallet

Sets or replaces the external default wallet for a user. Calling this endpoint again with a different address overwrites the existing configuration. The address must be valid for the specified blockchain.

Request Parameters

string
required
The unique identifier of the user the wallet belongs to.
string
required
The external wallet address that should receive the user’s cNGN deliveries.
string
required
The blockchain network the address belongs to (e.g. base, eth, bsc).
string
A human-readable name for the wallet (e.g. User payout wallet).

Response

string
Always external for wallets registered through this endpoint.
string
Whether the wallet is currently receiving deliveries. active once set.
string
Plain-language reminder of the delivery-only behaviour of external default wallets.

Error Responses


POST /getuserdefaultwallet

Retrieves the external default wallet currently configured for a user. Returns defaultWallet: null when no external wallet is set - in that case cNGN is delivered to the user’s system smart wallet.

Request Parameters

string
required
The unique identifier of the user whose default wallet you want to retrieve.

Response

object
The configured external wallet. null if the user has no external default wallet.

Error Responses


DELETE /removeuserdefaultwallet

Clears the external default wallet for a user. Once removed, cNGN deliveries revert to the user’s Strails-managed smart wallet.

Request Parameters

string
required
The unique identifier of the user whose default wallet you want to clear.

Response

Removing a default wallet only changes where future deliveries go. Balances already sent to the external address remain there.