Initiate MOMO Collection
Use this endpoint to initiate a USSD push collection from a customer’s mobile wallet. The customer receives a USSD PIN prompt in their mobile device for authorization.
Endpoint
POST /collectionRequest
Headers
Content-Type* — Must beapplication/jsonx-account-id* — Your unique TemboPlus account identifierx-secret-key* — Your TemboPlus API secret keyx-request-id* — Unique UUID per request for tracing
Body Parameters
channel* (string) — The MNO channel to be used for the transaction. Supported values include:TZ-AIRTEL-C2B,TZ-TIGO-C2B,TZ-HALOTEL-C2B.msisdn* (string) — The customer’s mobile number in international format. Must start with255(for Tanzania) followed by the subscriber number, e.g.255712345678.amount* (number) — The amount to be collected, in Tanzanian Shillings (TZS). The value must be an integer representing the total amount in shillings (decimals are not allowed).transactionRef* (string) — Your unique transaction reference for reconciliation.narration* (string) — A short description of the payment. This will appear in your statement.transactionDate* (string) — The timestamp of the request in ISO 8601 format, e.g.2025-09-11T10:30:00Z.callbackUrl* (string) — Your HTTPS endpoint where TemboPlus will send a POST notification once the payment status changes.
Matching msisdn to channel
msisdn to channelThe msisdn must belong to the same Mobile Network Operator (MNO) specified in the channel field.
Examples:
Use
TZ-AIRTEL-C2Bfor numbers starting with Airtel prefixes (e.g. 068x, 078x).Use
TZ-TIGO-C2Bfor Tigo prefixes (e.g. 065x, 071x).Use
TZ-HALOTEL-C2Bfor Halotel prefixes (e.g. 062x).
Tanzania does not implement Mobile Number Portability (MNP), so mobile numbers remain tied to their original operator prefixes.
For precise validation, request the MNO Prefix Reference Document from TemboPlus Support for the current mapping of prefixes to channels.
Collection Limits
TemboPlus enforces transaction amount limits for all Mobile Money Collection requests.
• Minimum: TZS 1,000 • Maximum: TZS 5,000,000
Example Request Payload
{
"channel": "TZ-TIGO-C2B",
"msisdn": "255712345678",
"amount": 1000,
"transactionRef": "order-2025-001",
"narration": "Payment for Order #001",
"transactionDate": "2025-09-11T10:30:00Z",
"callbackUrl": "https://merchant.example.com/webhook"
}Responses
Webhook Notification
After the customer responds to the USSD prompt, TemboPlus sends a POST request to your configured callbackUrl with the final transaction outcome.
The webhook body contains the same identifiers returned in the initial response, along with an updated statusCode value. Possible values for statusCode include PAYMENT_ACCEPTED, PAYMENT_REJECTED, PROVIDER_FAILED, INSUFFICIENT_FUNDS, and GENERIC_FAILURE.
Example:
{
"statusCode": "PAYMENT_ACCEPTED",
"transactionId": "gm56e6CmzwyD",
"transactionRef": "order-2025-001"
}Values above are examples only; actual transactionId and transactionRef will vary per request.
Webhook Delivery Notes
TemboPlus will make a POST request to your
callbackUrlimmediately after receiving the final response from the MNO.Each webhook contains a JSON payload with
statusCode,transactionIdandtransactionRef.Webhook delivery is asynchronous; the callback may arrive a few seconds after the initial API response.
Always validate both
transactionIdandtransactionRefbefore updating your internal records.Your endpoint should return an HTTP 200 OK response upon successful receipt to acknowledge the notification.
Last updated