Skip to navigation

Initiate Bill Payment

View as Markdown

Starts a bill payment from walletId (a PERSONAL or BUSINESS wallet). The body takes one of two shapes:

  • Biller from the catalogue: billProviderId + accountNumber. The biller’s payment method decides the route: CHOICE_BILL billers are paid through Choice’s bill payment service (category UTILITY_BILL, with dueAmount/dueDate from Choice), and MPESA_PAYBILL billers go out as an M-Pesa Paybill payment to the biller’s business number. category/shortCode/referenceNumber must be absent.
  • Manual M-Pesa Paybill/Till: no billProviderId; category is MPESA_PAYBILL (requires referenceNumber) or MPESA_TILL, and shortCode is the paybill/till number.

description is only passed to M-Pesa payments. dueAmount/dueDate are null for M-Pesa payments. Next step: Confirm Bill Payment with the returned transactionId.

Headers

AuthorizationstringOptional
X-Device-IdstringOptional

Required on non-GET requests to non-public paths (DeviceSignatureFilter), skipped for GET/whitelisted/multipart requests and in the local profile.

X-SignaturestringOptional

Base64 ECDSA signature over sha256(body) + timestamp + requestId, signed with the device's registered private key.

X-TimestampstringOptional

Unix epoch seconds; must be within 5 minutes of server time.

X-Request-IdstringOptional

Unique per request - reused values are rejected as replays.

Idempotency-KeystringOptional

Request

This endpoint expects an object.
walletIdstringOptional
amountintegerOptional
billProviderIdstringOptional
accountNumberstringOptionalformat: "utc-millisec"

Response

200 OK (Catalogue Biller, Choice Bill Payment)

codeintegerOptional
messagestringOptional
dataobjectOptional

Errors

400
Bad Request Error