Skip to main content
Top-up uses both SDKs on the primary path:
  1. Backend — @jazadev/node mints a client session with jaza.init (host handshake).
  2. Client — @jazadev/react-native or @jazadev/react opens MoMo checkout; the SDK mints the top-up JWT from that session.

Prerequisites

  • Dashboard setup with countries and at least one bundle
  • A Jaza customer id stored on your user (cus_…)
  • Secret key on the server; publishable key in the client
  • Handshake wired (POST /api/jaza/init)

1. Backend: client session (required)

2. Client: provider + top-up button

Checkout opens as a bottom sheet.
No onRequestToken — the SDK handles top-up minting after the session is authenticated.

What the user sees

  1. Tap Top up → SDK requests a top-up JWT with the client session.
  2. Checkout opens → bundles and current balance.
  3. User picks a pack, enters phone / country / currency, confirms quote.
  4. Payment runs; SDK polls until success or failure.
  5. Balance refreshes via GET /v1/client/wallet.
Jaza collects MoMo and settles USD to you. You do not configure an aggregator or FX yourself.

Advanced: host-minted top-up JWT

For legacy BFFs, jaza.topUp({ customerId }) still returns { token, id, … }. Prefer the session path above for new apps. Optional status polling: jaza.check({ topUpId }).

Optional: webhooks

Subscribe to jaza.webhook.topUp.completed (and related events) for server-side side effects. See Webhooks.

Next steps