Collection accounts

Receive repeat NGN payments through permanent virtual accounts.

Collection accounts give each customer permanent NGN bank details. Use them to identify repeat payments and settle received funds to that customer's wallet.

Contact us to enable collection accounts

Pulse enables this feature for each business. Contact us to discuss your use case before you build the integration.

Create a collection account

Provide your customer reference, the account name, and the payout destination.

curl https://engine-api.pilot.pulseshiga.io/v1/collection-accounts \
  -X POST \
  -H "X-API-Key: <your key>" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "customer-ada-001",
    "name": "Ada Obi",
    "payout_destination": {
      "chain": "base",
      "address": "0x1111111111111111111111111111111111111111"
    }
  }'

Pulse returns bank details that the customer can reuse.

{
  "status": true,
  "data": {
    "id": "0199a7a4-8e83-7c16-b143-a97cff1c9162",
    "reference": "customer-ada-001",
    "name": "Ada Obi",
    "bank_account": {
      "account_name": "Ada Obi",
      "account_number": "7684806467",
      "bank_name": "Example Bank"
    },
    "payout_destination": {
      "chain": "base",
      "address": "0x1111111111111111111111111111111111111111"
    },
    "created_at": "2026-09-09T10:00:00Z"
  }
}

The reference stays unique within your business. Repeat the same request after a timeout. Pulse returns the existing account when every field matches.

A different request with the same reference returns 409 duplicate_reference.

Track incoming payments

Each transfer to a collection account creates an inflow. Pulse sends inflow.received after it records the payment.

{
  "id": "0199a7b0-17d1-76ab-a499-9a9d6bb29361",
  "type": "inflow.received",
  "environment": "live",
  "created_at": "2026-09-09T10:15:32Z",
  "data": {
    "inflow_id": "0199a7b0-17d1-76ab-a499-9a9d6bb29361",
    "collection_account_id": "0199a7a4-8e83-7c16-b143-a97cff1c9162",
    "collection_reference": "customer-ada-001",
    "amount": "15000",
    "currency": "NGN",
    "sender": {
      "name": "A. Customer",
      "account_number": "0123456789",
      "bank_code": "000",
      "bank_name": "Example Bank"
    },
    "payout_destination": {
      "chain": "base",
      "address": "0x1111111111111111111111111111111111111111"
    }
  }
}

Use the event id for deduplication. Use inflow_id or collection_reference for reconciliation. Sender fields can be absent when the sending bank omits them.

Track receipt and settlement separately

inflow.received confirms that Pulse recorded the NGN payment. It does not confirm settlement to the payout address.

See Webhooks for signature verification and delivery retries.

Retrieve accounts and inflows

Use GET /v1/collection-accounts to list accounts. The search parameter matches a name, reference, or virtual account number.

Use GET /v1/inflows to list incoming payments. Filter by collection_account_id, search, from, or to.

Both endpoints use cursor pagination. Pass meta.next_cursor as cursor on the next request.

On this page