Skip to main content

Before you call

  • The transaction must be READY.
  • Show the customer amount, fee and their sum for every bill they selected, and get their confirmation.
  • Persist your own order record first. pay moves money.

Request

POST /v3/bills/pay takes the discovery transactionId, the bill(s) to pay and a new ref. Send billId or billIds, never both.
ref must not be the discovery ref. The API keeps the discovery ref on the transaction and refuses any ref that is still in use for that partner with 403 DUPLICATED_REF. A simple convention: <discoveryRef>-pay.

Response

ref in the response is the discovery ref: the transaction keeps one reference for its whole life. 200 means the payment was accepted, not that it succeeded.

Paying several bills at once

Send billIds instead of billId. The bills are settled as one order and their fee is the sum of the selected bills’ fee. Only SEAAL settles several bills as one order: for any other partner, billIds with more than one id answers 400 ERR_VALIDATION.
On the transaction, selectedBill then holds the aggregate (amount = sum of the bills, billId = the first id) and selectedBills[] lists each bill individually. Use selectedBills for reconciliation. This applies to any biller whose discovery returned several bills. SEAAL accounts commonly do.

Follow the payment

Poll GET /v3/bills/transactions/{transactionId} every 5 seconds until status is SUCCESS, FAILED or REFUNDED. Details of every status and field: Transaction status.

Synchronous errors

A 4xx/5xx here means nothing moved. A network timeout means you do not know: look the transaction up before doing anything else.

Next: Transaction status

Every status, every field, how to poll