Initiate an MVNO purchase for the current app user

Customer purchase flow. Nova reads the app user id from the JWT. recipientMsisdn selects the account that receives the product; no primary-account fallback or Totogi override is accepted on this route. Purchases fulfil synchronously except payment methods that require an external browser handoff. Clients must reconcile ambiguous request timeouts with the same Idempotency-Key and poll GET /purchases/{transactionUuid}/status for in-flight outcomes.

Access: Auth methods: JWT bearer. Allowed user types: APP_USER. Requires permissions: purchase:write.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params
string
required

Product UUID

number

Override amount for flexible-price MVNO products. Ignored for fixed-price products.

string
required

MSISDN that will receive the MVNO product. Required for every MVNO purchase; no primary-account fallback is applied.

string
enum
required
string

Account UUID to debit when paymentMethod is AIRTIME. Required for AIRTIME and rejected for other payment methods. App-user purchases require this account to be verified and linked to the app profile; standard purchases accept any ACTIVE account because caller security is handled upstream.

string

Verified Ecentric card token. Required for ECENTRIC_CARD.

string
enum

Optional Ecentric payment scenario. CIT is customer-initiated with a CVV; MIT is merchant-initiated with no CVV. Omitted scenarios are treated as CIT and therefore require cvv. An unrecognised value is rejected — it never silently becomes MIT.

Allowed:
string

3-4 digit CVV/CSC. Required only for ECENTRIC_CARD scenario=CIT. Omitted for MIT.

paymentInput
object

Ephemeral digital-wallet payment payload. Required for GOOGLE_PAY and APPLE_PAY.

Headers
string
required

Client-generated UUID v4. Reuse the same key only when retrying the exact same request.

Responses

201

Purchase initiated

400

Invalid input

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json