Skip to main content
The SeerBit Pocket Payout API enables merchants to initiate single or bulk bank transfers directly from their SeerBit Pocket. This page covers all the steps required to authenticate, sign, initiate, and confirm a payout — along with error handling references and a supported bank list endpoint.
Payouts are live only. Payouts are sent from your Pocket, and Pocket has no test mode — no test keys and no sandbox. Every payout sends real money to a real bank account, so use small amounts to an account you control while you integrate.

Prerequisites — Please read before integrating

  • Request Signature Verification: All requests must include a valid X-Seerbit-Signature header. This signature is generated using an HMAC-SHA256 hash of the raw HTTP request body, signed with your API Secret Key. Your Private Key is available under Settings on your SeerBit Dashboard — store it securely and never expose it publicly.
  • Payout Authorization: Every payout must be authorized with a second factor before it is processed — an email OTP by default, or an authenticator app code or transaction PIN if your pocket requires one. See Two-factor authentication.
  • Process Flow

    Authenticate

    Get Bearer Token

    Generate Signature

    HMAC-SHA256

    Initiate Payout

    Single or Bulk

    Confirm Payout

    OTP, Authenticator or PIN

    Step 1 — Authenticate

    POST
    Generates a Bearer Token required to authenticate all subsequent API calls. Submit your merchant email and password to receive a time-limited token.

    Request Sample

    cURL

    Response Sample

    Step 2 — Generate X-Seerbit-Signature

    Before initiating a payout, generate an X-Seerbit-Signature using the exact raw request body and your SeerBit Private Key. Pass the resulting hash as a header on every payout request.
    Note: The signature is unique to each request. Always regenerate it using the exact body of each new request before sending.

    Signature Formula

    Variables Reference

    Step 3 — Initiate Payout

    POST
    Initiates a payout from your SeerBit Pocket. Supports both single and bulk transfer modes. All requests must include the Bearer Token, Public Key, and X-Seerbit-Signature headers.
    Required Headers

    Single Payout

    Request Sample

    cURL

    Response Sample

    channel tells you which code to ask the user for when you confirm the payout: EMAIL, TOTP, PIN, REQUIRED_TOTP or REQUIRED_PIN. An email is sent only on EMAIL. See How payout authorization works. Sending the same reference again while the payout is still PENDING_OTP returns the existing payoutId without creating a second payout or sending a new code.
    Request Fields

    Bulk Payout

    Bulk payouts allow multiple transfer instructions to be processed in a single request. Each transfer is validated and executed under a single batchReference.

    Request Sample

    cURL

    Response Sample

    Sending the same batchReference again while the batch is still PENDING_OTP returns the existing payoutId.
    Request Fields
    Each transfers object contains:

    Step 4 — Confirm Payout

    POST
    After a payout is initiated, authorize it by submitting a code. The initiation response’s channel field tells you which code to ask the user for — see How payout authorization works:
    • Email OTP (channel: "EMAIL", the default) — sent to the pocket owner’s email and primary signatories when you initiate the payout. It is valid for 5 minutes.
    • Authenticator code — the 6-digit code from the user’s authenticator app (channel: "TOTP" or "REQUIRED_TOTP"). No email is sent.
    • Transaction PIN — the user’s PIN (channel: "PIN" or "REQUIRED_PIN"). No email is sent.
    • Recovery code — accepted in place of an authenticator code or PIN.
    To set up an authenticator app or PIN, see Two-factor authentication.
    Required Headers

    Request Sample

    cURL

    Response Sample

    QUEUED means the payout has been authorized and handed off for processing; it moves to PROCESSING next.
    Request Fields

    Bank List

    GET
    Returns a list of supported Nigerian banks and their corresponding bank codes. Use this to look up the correct bankCode before initiating a payout. For a quick lookup while you build, see Bank codes.

    Request Sample

    cURL

    Account Name Enquiry

    POST
    Looks up the name on a bank account before you pay it. Use it to show the user who they are about to pay, so they can catch a wrong account number before the money moves.

    Request Sample

    cURL
    Request Fields
    Note: The field names here are all lowercase (bankcode, accountnumber), unlike the camelCase bankCode and accountNumber in payout requests.
    SeerBit also runs a name enquiry on every payout. If you send accountName in the payout request, it must match the enquiry result — so looking the name up first and passing it through avoids a mismatch.

    Error Scenarios

    The following error responses may occur during payout initiation or confirmation flows.
    1. Missing Signature Header
    Occurs when the X-Seerbit-Signature header is absent from the request.
    2. Invalid Signature
    Occurs when the provided signature fails HMAC validation.
    3. Missing Public Key Header
    Occurs when the Public-Key header is not included in the request.
    4. Invalid Code
    The code is wrong, or the wrong factor for the challenge (for example, a PIN on a TOTP challenge). The payout stays PENDING_OTP — ask the user to re-enter the code and confirm the same payoutId again.
    5. Too Many Failed Attempts
    Five consecutive wrong codes lock authorization for 15 minutes. A correct code resets the count.
    6. Expired Email OTP
    An email OTP is valid for 5 minutes. After that the payout can’t be confirmed — initiate a new payout.
    7. Insufficient Balance at Confirmation
    If the pocket balance is too low when you confirm, the payout fails permanently. It can’t be confirmed again; fund the pocket and initiate a new payout with a new reference.
    8. Authenticator or PIN Required but Not Set Up
    On a REQUIRED_TOTP or REQUIRED_PIN pocket, initiating a payout fails with SM_06 until the user has set up that factor.
    9. Account Name Mismatch
    The accountName you sent doesn’t match the bank name enquiry. A single payout fails at initiation; in a bulk payout, only the mismatched transfer fails, when it is processed.