Fund Wallet (Mobile Money)
Top up a wallet by charging a mobile-money account. Convenience wrapper around POST /payment/collect that targets a specific wallet.
Overview
POST /wallets/fund tops up a wallet by charging a mobile-money account. It is functionally similar to POST /payment/collect but is wallet-centric: you specify which wallet to credit by ID rather than by (country, currency).
The call returns immediately with a transaction record; the final outcome reaches you asynchronously (operator OTP / USSD may be required).
When to use it
- Top up a specific wallet from your own funds (e.g. via your treasury phone).
- Use when you already know the wallet you want to credit (rather than letting Cartevo route by country/currency).
POST /payment/collect instead.
Prerequisites
- The target wallet must belong to your company and be
is_active: true. - The mobile-money account must have sufficient balance to cover
amountplus the operator’s fee.
Request
Headers
| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <access_token> |
Content-Type | Yes | application/json |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
purpose | string | No | Free-form description that appears in the dashboard. |
Body
| Field | Type | Required | Constraints / format |
|---|---|---|---|
walletId | string | Yes | The wallet to credit (UUID). |
amount | number | Yes | Minimum 0.01. Major currency unit of the wallet’s currency. |
currency | string | Yes | Must match the target wallet’s currency. Sanity check. |
operator | string | No | Mobile-money operator (mtn, orange, moov, wave, etc.). Defaults to mtn. |
phone | string | No | Phone number to charge. Country code + local number, no + (e.g. 237670000000). |
userId | string | No | Internal user ID for audit trail (filled by the platform if omitted). |
trxId | string | No | Idempotency key. Auto-generated UUID if omitted (you lose idempotency). |
Response
200 — Funding initiated
| Field | Description |
|---|---|
transaction.id | Cartevo wallet-transaction ID. |
transaction.status | PENDING immediately. Other values: PROCESSING, SUCCESS, FAILED. Wallet balance updates only on SUCCESS. |
paymentResult.orderId | Reference at the upstream payment provider (Afribapay). |
feeInfo | Breakdown of the fee charged by the operator. |
Error responses
| Status | message example | Trigger |
|---|---|---|
400 | "Currency mismatch with target wallet" | currency doesn’t match the wallet’s currency. |
400 | "Operator not enabled for this wallet" | The operator hasn’t been enabled for this wallet’s country/currency. |
404 | "Wallet not found" | walletId is invalid or belongs to another company. |
Webhooks fired
- A status update fires when the funding settles or fails (same shape as
payment.collect).
Code examples
Related
POST /payment/collect— the more general collection endpoint.GET /wallets/{id}— verify the new balance after settlement.- Payment guidelines — supported operators per country.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
ID of the wallet to fund.
Amount to fund, in the wallet currency.
x >= 0.01Currency of the funding amount.
"XAF"
Mobile-money phone number being charged.
"237600000000"
Mobile-money operator. Defaults to mtn if omitted.
"mtn"
Optional ID of the user initiating the funding.
Optional client-supplied transaction reference. Auto-generated (UUID) if omitted.
Optional free-text reason, persisted on the transaction.
Optional categorical reason code.