Skip to content

Changelog

API changelog

Every change to the Ureh API, newest first. Breaking changes, deprecations and security updates are called out so you can tell at a glance whether a release asks anything of your integration.

Latest release v1.6

3 entries in Changed

Clear
v1.6
Changed

Purchase endpoints share one transaction pipeline #

Airtime, data, cable TV, electricity and education purchases now run through the same validation, pricing, wallet and state machine path. Behaviour that previously varied between products is now identical across all five.

Affected

  • POST /v1/airtime/purchase
  • POST /v1/data/purchase
  • POST /v1/tv/purchase
  • POST /v1/electricity/purchase
  • POST /v1/edu/purchase

Action required

No request or response change. Integrations that special cased one product to work around a difference in error shape or wallet timing can drop that handling.

Each product was originally implemented with its own request handling. The paths converged over time but never exactly, so error envelopes, idempotent replay and the point at which the wallet was debited could differ in small ways between one product and the next. Those differences were invisible until an integration handled several products and had to account for each.

All product now compose the same engines. One pricing resolution, one wallet lock, one state machine, one error envelope. The practical effect is that behaviour learned against one product holds for the rest.

v1.5
Changed

Product catalogue replaces per product variation endpoints #

Data plans, cable bouquets and education products are served from one catalogue shape under /products. The older /variations endpoints returned provider specific payloads that differed by product.

Affected

  • GET /v1/data/products
  • GET /v1/tv/products
  • GET /v1/edu/products

Action required

Move to the /products endpoints. The /variations predecessors remain reachable only under the legacy /v1 prefix and are not carried forward.

The variation endpoints exposed whichever shape the upstream provider happened to return, so a client integrating data plans and cable bouquets wrote two parsers for what is conceptually one list. Switching provider could also change the payload without the endpoint changing.

The catalogue endpoints return one provider independent shape keyed by product_code, which is the same identifier the corresponding purchase call takes. Provider differences are resolved before the response is built.

v1.4
Changed

Wallet ledger is now append only #

A refund appends a compensating credit rather than reversing the original debit in place, so the ledger records what happened rather than the current net position.

Affected

  • GET /v1/wallet/ledger

Action required

Reconcile on references rather than net balance movement. A purchase that failed and was refunded is two entries, not zero.

Funds are reserved before the provider is contacted, which is what stops concurrent purchases overdrawing a wallet. When a provider then fails, the amount is credited back.

That reversal previously edited the original entry, which left no record that the purchase had been attempted at all. It now appends its own entry. The balance is unchanged either way; the difference is that a disputed balance is answerable from the ledger rather than from inference.