Skip to Content
Errors & codes

Errors & codes

Response shapes

OperationJSON shape
Create (sync or async)status, response_code, response_message, data
Statusstatus, response_code, response_message, data
Liststatus, data, pagination
Wallet balancestatus, data, total
Gift cards — catalog / quote / availabilitystatus, code, message, data
Gift cards — purchase / order statusstatus, response_code, response_message, data
eSIM — catalog / quotestatus, code, message, data
eSIM — purchase / order statusstatus, response_code, response_message, data
Bill validate (verify customer)status, code, message, data
Bill plans catalogstatus, description, data
Bill statusstatus, response_code, response_message, data

Field conventions (airtime, data, electricity, cable, betting)

These rules apply to every transaction product on the external API.

Create and status

Create and status use the same envelope: status, response_code, response_message, data.

FieldLocationValues / format
Outcome wordTop-level statussuccess, failed, or pending — not 00 / 01
Outcome codeTop-level response_code00 success, 01 failed, 02 pending
Human messageTop-level response_messagee.g. Successful, Failed, Pending
Idempotency echodata.request_idSame value you sent as client_request_id
Sync timestampdata.created_atRFC 3339 on sync create only, e.g. 2026-05-17T10:30:00Z
Status timestampdata.created_at, data.updated_atYYYY-MM-DD HH:MM:SS on status and list rows
Async createdataNo created_at on the immediate pending response

Optional data fields you may see:

  • external_reference, telco_message — common on sync airtime and data
  • plan — plan code echoed on data and bill creates
  • merchant_name, updated_at — on status and list responses
  • token, units — prepaid electricity on sync bill create (and on status)
  • kct1, kct2 — optional 20-digit Key Change Tokens when issued for the meter; omitted on most purchases
  • payment_spent_on — optional on electricity purchase and status when the payment cleared meter debt instead of issuing a token (e.g. debt); omitted otherwise. Response-only — do not send on the request

Telco data.network in responses is typically uppercase (MTN, GLO, …) even when the request used lowercase.

Bill verify (optional)

POST /v1/transactions/verify returns status, code (HTTP-style integer 200), message, and data:

FieldLocationValues / format
Outcome wordTop-level statussuccess on valid customer
CodeTop-level code200 on success
Human messageTop-level messagee.g. customer verified
Customer detailsdataproduct, network, msisdn, customer_name, plus product-specific fields (electricity: customer_address, min_amount, max_amount, meter_number, arrears, account_type, meter_type, district, business_unit, district_reference, tariff when the disco returns them)

Send merchant_code, customer_msisdn, network, product, and plan_code (recommended) or legacy service_id. No client_request_id. See Bill payments — Verify customer.

On rejected meters, smartcards, or betting IDs, HTTP is 400 with status error, integer code 400, and message set to the rejection reason. That is a customer-data problem, not a gateway failure. Verify outages are 502 with a generic message.

Bill products (ELECTRICITY, CABLE, BETTING) are always sync on create — expect response_code 00 or 01, not pending 02. Airtime and data on POST /v1/transactions without a /sync route are async (02 pending until polled).

On dedicated sync routes (/transactions/airtime/sync, /transactions/data/sync), product is set by the route.

Gift cards

Gift card routes use the same authentication and response envelopes as the rest of the Breeze API.

Catalog, quote, availability

Uses status, code (HTTP-style integer, e.g. 200), message, and data.

Purchase and order status

Uses the same envelope as transaction create: status, response_code, response_message, and data.

FieldLocationValues / format
Outcome wordTop-level statussuccess, failed, or pending
Outcome codeTop-level response_code00, 01, or 02
Idempotency echodata.request_idSame value sent on POST /giftcards/orders
Card detailsdata.cardsPresent on success; omitted while pending
Provider refdata.reference_codeUpstream order reference when available

GET /giftcards/orders/{request_id} returns the same envelope as purchase — poll until response_code is 00 or 01.

eSIM

eSIM purchase and status use the same envelope as gift cards (00 / 01 / 02). Success data includes iccid, activation_code, smdp_address, and lpa. Pending orders must not be treated as delivered. See eSIM.

Transaction codes

Inside create and status responses, response_code maps to status:

response_codestatusMeaning
00successSuccessful
01failedFailed
02pendingStill processing

Failed example (status):

{ "status": "failed", "response_code": "01", "response_message": "Failed", "data": { "request_id": "req-20260517-003", "internal_reference": "019262ab-7c4d-7000-8000-000000000001" } }

HTTP status codes

StatusWhen
200Success (sync or async create, status, list, balance)
400Invalid JSON, validation error, rejected meter/smartcard/betting ID on bill verify, or missing client_request_id / request_id / request_ref on status GET
401Missing or invalid API key / secret
403Credential cannot access this merchant or transaction
404Merchant or transaction not found
422Duplicate client_request_id or validation error
500Server error — retry with backoff
502Bill verify could not be completed — retry with backoff
503Temporary overload — retry with backoff

Health check

GET /v1/healthz

No authentication required. Use for uptime monitoring only.

Last updated on