Asteria API DOCs
    • Getting Started
    • Webhooks
    • Auth
      • Validate & Generate Access Token
        POST
    • Collections
      • Pay via Bank Transfer
        • Get Banks
        • Generate Dynamic VIrtual Account
        • Check Payment Status
      • Cards
        • Generate Payment Advice
        • Charge Card
      • Mpesa
        • Mpesa API
    • Payouts
      • Get Bank List
        GET
      • Validate Account
        POST
      • Initiate Transfer
        POST
      • Check Payout Status
        POST
    • Account
      • Get Wallet Balance
        GET

    Webhooks

    Webhook Configuration#

    Webhooks allow your application to receive real-time payment notifications whenever a transaction status changes.

    Configure Your Webhook URL#

    Follow the steps below to configure your webhook endpoint.

    Step 1 — Open Your Profile Menu#

    Click the profile icon/menu located at the top-right corner of the dashboard.

    Step 2 — Open API Keys & Webhook#

    From the dropdown menu, select:
    API Keys & Webhook

    Step 3 — Update Webhook URL#

    Input your webhook endpoint URL in the webhook field and click:
    Update
    Example webhook URL:

    Webhook Security#

    Every webhook request sent from Dart includes a signature header for verification.

    Signature Header#

    You must validate this signature to ensure the webhook request genuinely originated from Dart.

    How Signature Verification Works#

    The webhook signature is generated using:
    the raw webhook payload
    your API Gateway Secret
    SHA256 hashing algorithm

    Verify Webhook Signature#

    Step 1 — Receive the Raw Payload#

    Example payload:
    {
      "eventType": "BANK_TRANSFER",
      "merchantReference": "REF-Dart-8253282343276",
      "amountCredited": "100",
      "amountExpected": "200",
      "accountNumber": "9021093453",
      "accountName": "TEXTNG COMMUNICATIONS",
      "bankName": "Wema",
      "currency": "NGN",
      "narration": null,
      "status": "SUCCESS",
      "createdAt": "2026-05-17T11:59:07.568Z",
      "paidAt": "2026-05-20T19:42:21.491Z"
    }

    Step 2 — Hash the Payload Using SHA256#

    Generate a SHA256 HMAC hash using:
    the raw request payload
    your API Gateway Secret

    Node.js Example#


    Important Verification Notes#

    Always use the raw request payload for hashing.
    Do not modify or reformat the payload before verification.
    Reject webhook requests with invalid signatures.

    Webhook Response Requirement#

    Your webhook endpoint must return a successful HTTP 200 OK response after processing the webhook event.
    Example:
    Failure to return a 200 response may result in webhook retries.

    Webhook Event Types#

    Currently supported webhook events include:
    Event TypeDescription
    BANK_TRANSFERDynamic virtual account payment
    CARDCard payment transaction

    Webhook Status Types#

    Currently supported webhook events include:
    Status TypeDescription
    PENDINGTransaction is Pending
    PROCESSINGTransaction is processing
    SUCCESSTransaction is Successful
    FAILEDTransaction failed
    EXPIREDTransaction Expired

    Sample Webhook Payloads#

    Dynamic Bank Transfer Transaction#

    {
      "eventType": "BANK_TRANSFER",
      "accountType": "DYNAMIC",
      "merchantReference": "REF-Dart-8253282343276",
      "amountCredited": "100",
      "amountPaid": "100",
      "amountExpected": "200",
      "accountNumber": "9021093453",
      "accountName": "TEXTNG COMMUNICATIONS",
      "bankName": "Wema",
      "currency": "NGN",
      "narration": null,
      "status": "SUCCESS",
      "createdAt": "2026-05-17T11:59:07.568Z",
      "paidAt": "2026-05-20T19:42:21.491Z"
    }

    Static Bank Transfer Transaction#

    {
      "eventType": "BANK_TRANSFER",
      "accountType": "STATIC",
      "merchantReference": "Ref-Dart-8999000284",
      "amountCredited": "1000",
      "amountPaid": "100",
      "amountExpected": "1000",
      "accountNumber": "9021199331",
      "accountName": "TEST JESSE ",
      "bankName": "Wema",
      "sourceAccountName": "Jesse Coders",
      "currency": "NGN",
      "narration": "ACCTBT0A1003F0-3E59-4373-8C6F-9B630F321A95--090405260521102846337725581622",
      "status": "SUCCESS",
      "createdAt": "2026-05-22T18:46:01.968Z",
      "paidAt": "2026-05-22T18:46:01.968Z"
    }

    Card Transaction#

    {
      "eventType": "CARD",
      "merchantReference": "Ref-Dart-637272345382",
      "paymentAdviceRef": "3b5e216e-2a5d-4f60-89e3-595061efd3b2",
      "amountCredited": 500,
      "amountExpected": 500,
      "card": {
        "cardNumber": "445653******1096",
        "senderName": "Digital Dart",
        "cardName": "Naira.com",
        "currency": "NGN"
      },
      "narration": "test payment",
      "status": "SUCCESS",
      "createdAt": "2026-05-20T19:42:21.491Z",
      "paidAt": "2026-05-20T19:42:21.491Z"
    }

    Payout Successful Transaction#

    {
      "eventType": "PAYOUT_BANK_TRANSFER",
      "merchantReference": "Ref-Dart-892892",
      "amountCredited": "200",
      "fee": "50",
      "destinationAccountNumber": "7063581203",
      "sessionId"."090110260604101724271222665379"
      "currency": "NGN",
      "status": "SUCCESS",
      "createdAt": "2026-05-25T07:50:42.400Z",
      "paidAt": "2026-05-25T07:50:42.400Z"
    }

    Payout Failed Transaction#

    {
      "eventType": "PAYOUT_BANK_TRANSFER",
      "merchantReference": "Ref-Dart-892892",
      "amountCredited": "200",
      "destinationAccountNumber": "7063581203",
      "currency": "NGN",
      "status": "FAILED",
      "createdAt": "2026-05-25T07:50:42.400Z"
    }

    Recommended Best Practices#

    Use HTTPS webhook URLs only.
    Store your API Gateway Secret securely.
    Validate every webhook signature.
    Implement idempotency handling to avoid duplicate processing.
    Log webhook requests for troubleshooting and auditing.
    Modified at 2026-06-04 09:36:00
    Previous
    Getting Started
    Next
    Validate & Generate Access Token
    Built with