Skip to main content

Bulk Payments with the Kuda Business API

Use bulk name enquiry, submit a bulk payment, and confirm each beneficiary payment status.

Bulk payments let you send money to multiple beneficiaries in one request. Use this for payroll, vendor batches, contractor payments, and other grouped payouts.

Recommended flow:

  1. Validate every beneficiary.

  2. Build the payment batch.

  3. Submit MAIN_ACCOUNT_BULK_PAYMENT.

  4. Check the batch with BULK_PAYMENT_TSQ.

Step 1: Validate beneficiaries

Use BULK_NAME_ENQUIRY before submitting a bulk payment.

Unlike most Kuda requests, BULK_NAME_ENQUIRY sends data as an array.

{
  "serviceType": "BULK_NAME_ENQUIRY",
  "requestRef": "BNE20260603001",
  "data": [
    {
      "accountNumber": "2000000000",
      "bankCode": "999129"
    },
    {
      "accountNumber": "2000000001",
      "bankCode": "999129"
    }
  ]
}

Check every returned beneficiary before proceeding. Do not include rows with mismatched names, inactive accounts, or failed validation.

Step 2: Build the bulk payment request

Use the validated beneficiary names and bank codes in beneficiaryPaymentData.

Amounts are in kobo.

{
  "serviceType": "MAIN_ACCOUNT_BULK_PAYMENT",
  "requestRef": "BULK20260603001",
  "data": {
    "clientAccountNumber": "2000000000",
    "totalAmount": 700000,
    "notificationEmail": "[email protected]",
    "narration": "June payroll",
    "beneficiaryPaymentData": [
      {
        "feeAmountInKobo": 1000,
        "destinationAccountName": "Sample Employee One",
        "amountInKobo": 550000,
        "bankCode": "999129",
        "narration": "June payroll",
        "accountNumber": "2000000001"
      },
      {
        "feeAmountInKobo": 1000,
        "destinationAccountName": "Sample Employee Two",
        "amountInKobo": 150000,
        "bankCode": "999129",
        "narration": "June payroll",
        "accountNumber": "2000000002"
      }
    ]
  }
}

Before submitting:

  • confirm totalAmount equals the sum of beneficiary amountInKobo values

  • confirm the source account has enough balance

  • confirm the user has reviewed the batch

  • store the full batch and requestRef

Step 3: Interpret the response

A bulk payment response can show a code such as K06. Do not interpret that using bill-payment response-code meanings.

Use BULK_PAYMENT_TSQ to confirm the status of the batch and beneficiary payments.

Step 4: Check bulk payment status

BULK_PAYMENT_TSQ is another request-envelope exception. Use the original bulk payment reference as the top-level requestRef. You can omit data.

{
  "serviceType": "BULK_PAYMENT_TSQ",
  "requestRef": "BULK20260603001"
}

The status response may include each beneficiary, amount, fee, account number, and current status.

Recommended product flow

If your application has a user interface, use a preview and confirmation model:

  1. Upload or enter payment rows.

  2. Run BULK_NAME_ENQUIRY.

  3. Show validated names, accounts, banks, fees, and total amount.

  4. Ask the user to confirm.

  5. Submit MAIN_ACCOUNT_BULK_PAYMENT.

  6. Poll or expose BULK_PAYMENT_TSQ for final status.

Operational checklist

  • Use UAT first.

  • Validate every beneficiary.

  • Preserve row order from upload to confirmation.

  • Store the original file or batch payload.

  • Store the requestRef.

  • Store the response from MAIN_ACCOUNT_BULK_PAYMENT.

  • Use BULK_PAYMENT_TSQ before retrying.

  • Provide a support export with batch reference and affected beneficiary rows when needed.

Common mistakes

  • Sending BULK_NAME_ENQUIRY.data as an object instead of an array.

  • Forgetting to check every beneficiary result.

  • Interpreting a batch-level response as final per-beneficiary success.

  • Retrying a batch before running BULK_PAYMENT_TSQ.

  • Losing the original batch requestRef.

Did this answer your question?