Skip to main content

Get Mobile Money Providers

The get mobile money providers endpoint allows you to retrieve a list of all available mobile money providers for mobile money payments. This is useful for building mobile money selection interfaces in your application.

Endpoint

GET https://api.resolutpay.com/mobile-money-providers

Parameters

ParameterTypeRequiredDescription
countrystringNoCountry code (default: GH for Ghana)

Example Request

const axios = require("axios");

const getMobileMoneyProviders = async (country = "GH") => {
try {
const response = await axios.get(
`https://api.resolutpay.com/mobile-money-providers?country=${country}`,
{
headers: {
Authorization: "Bearer YOUR_SECRET_KEY",
},
}
);

const providers = response.data.data;
console.log("Available mobile money providers:", providers);
return providers;
} catch (error) {
console.error(
"Error fetching mobile money providers:",
error.response.data
);
throw error;
}
};

// Get Ghanaian mobile money providers
getMobileMoneyProviders("GH");

// Get Kenyan mobile money providers
getMobileMoneyProviders("KE");

Example Response

{
"status": true,
"message": "Mobile money providers retrieved",
"data": [
{
"id": 1,
"name": "MTN Mobile Money",
"code": "MTN",
"active": true,
"country": "Ghana",
"currency": "GHS",
"type": "mobile_money",
"logo": "https://resolutpay.com/logos/mtn-momo.png",
"createdAt": "2023-01-01T00:00:00.000Z",
"updatedAt": "2023-01-01T00:00:00.000Z"
},
{
"id": 2,
"name": "Telecel Cash",
"code": "TELECEL",
"active": true,
"country": "Ghana",
"currency": "GHS",
"type": "mobile_money",
"logo": "https://resolutpay.com/logos/telecel-cash.png",
"createdAt": "2023-01-01T00:00:00.000Z",
"updatedAt": "2023-01-01T00:00:00.000Z"
},
{
"id": 3,
"name": "Airtel Money",
"code": "AIRTEL",
"active": true,
"country": "Ghana",
"currency": "GHS",
"type": "mobile_money",
"logo": "https://resolutpay.com/logos/airtel-money.png",
"createdAt": "2023-01-01T00:00:00.000Z",
"updatedAt": "2023-01-01T00:00:00.000Z"
}
]
}

Supported Countries

CountryCodeCurrencyProviders
GhanaGHGHSMTN Mobile Money, Telecel Cash, Airtel Money
KenyaKEKESM-Pesa, Airtel Money
UgandaUGUGXMTN Mobile Money, Airtel Money
TanzaniaTZTZSM-Pesa, Airtel Money

Provider Object Properties

PropertyTypeDescription
idintegerUnique provider identifier
namestringProvider name
codestringProvider code
activebooleanWhether provider is active
countrystringCountry name
currencystringCurrency code
typestringProvider type (mobile_money)
logostringProvider logo URL
createdAtstringCreation timestamp
updatedAtstringLast update timestamp

Complete Example with React

import React, { useState, useEffect } from "react";
import axios from "axios";

const MobileMoneySelector = ({ onProviderSelect }) => {
const [providers, setProviders] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const [selectedCountry, setSelectedCountry] = useState("GH");

const countries = [
{ code: "GH", name: "Ghana (Default)" },
{ code: "KE", name: "Kenya" },
{ code: "UG", name: "Uganda" },
{ code: "TZ", name: "Tanzania" },
];

const fetchProviders = async (country) => {
try {
setLoading(true);
setError(null);

const response = await axios.get(
`https://api.resolutpay.com/mobile-money-providers?country=${country}`,
{
headers: {
Authorization: `Bearer ${process.env.REACT_APP_RESOLUTPAY_SECRET_KEY}`,
},
}
);

setProviders(response.data.data);
} catch (error) {
setError("Failed to fetch mobile money providers");
console.error("Error:", error.response?.data || error.message);
} finally {
setLoading(false);
}
};

useEffect(() => {
fetchProviders(selectedCountry);
}, [selectedCountry]);

const handleCountryChange = (event) => {
setSelectedCountry(event.target.value);
};

const handleProviderSelect = (provider) => {
onProviderSelect(provider);
};

if (loading) {
return <div>Loading mobile money providers...</div>;
}

if (error) {
return <div>Error: {error}</div>;
}

return (
<div className="mobile-money-selector">
<div className="country-selector">
<label htmlFor="country">Country:</label>
<select
id="country"
value={selectedCountry}
onChange={handleCountryChange}
>
{countries.map((country) => (
<option key={country.code} value={country.code}>
{country.name}
</option>
))}
</select>
</div>

<div className="providers-grid">
{providers.map((provider) => (
<div
key={provider.id}
className="provider-card"
onClick={() => handleProviderSelect(provider)}
>
<img
src={provider.logo}
alt={provider.name}
className="provider-logo"
/>
<h3>{provider.name}</h3>
<p>{provider.country}</p>
</div>
))}
</div>

<div className="provider-info">
{providers.length > 0 && (
<p>
Found {providers.length} mobile money providers in{" "}
{countries.find((c) => c.code === selectedCountry)?.name}
</p>
)}
</div>
</div>
);
};

export default MobileMoneySelector;

Complete Example with Express.js

const express = require("express");
const axios = require("axios");
const app = express();

app.use(express.json());

// Get mobile money providers endpoint
app.get("/mobile-money-providers", async (req, res) => {
try {
const { country = "GH" } = req.query;

const response = await axios.get(
`https://api.resolutpay.com/mobile-money-providers?country=${country}`,
{
headers: {
Authorization: `Bearer ${process.env.RESOLUTPAY_SECRET_KEY}`,
},
}
);

res.json({
success: true,
data: response.data.data,
});
} catch (error) {
console.error(
"Error fetching mobile money providers:",
error.response?.data || error.message
);

res.status(500).json({
success: false,
message:
error.response?.data?.message ||
"Failed to fetch mobile money providers",
});
}
});

// Get specific provider by code
app.get("/mobile-money-providers/:code", async (req, res) => {
try {
const { code } = req.params;
const { country = "GH" } = req.query;

const response = await axios.get(
`https://api.resolutpay.com/mobile-money-providers?country=${country}`,
{
headers: {
Authorization: `Bearer ${process.env.RESOLUTPAY_SECRET_KEY}`,
},
}
);

const provider = response.data.data.find((p) => p.code === code);

if (!provider) {
return res.status(404).json({
success: false,
message: "Mobile money provider not found",
});
}

res.json({
success: true,
data: provider,
});
} catch (error) {
console.error(
"Error fetching mobile money provider:",
error.response?.data || error.message
);

res.status(500).json({
success: false,
message:
error.response?.data?.message ||
"Failed to fetch mobile money provider",
});
}
});

app.listen(3000, () => {
console.log("Server running on port 3000");
});

Mobile Money Payment Flow

When a customer selects a mobile money provider, the payment flow typically involves:

  1. Provider Selection: Customer chooses their mobile money provider
  2. Phone Number Input: Customer enters their mobile money phone number
  3. Payment Initiation: Payment is initiated with the provider
  4. USSD Prompt: Customer receives a USSD prompt to confirm payment
  5. Payment Confirmation: Payment is confirmed and processed

Example Mobile Money Payment

const initiateMobileMoneyPayment = async (
providerCode,
phoneNumber,
amount
) => {
try {
const response = await axios.post(
"https://api.resolutpay.com/charge",
{
amount: amount,
email: "customer@example.com",
phone_number: phoneNumber,
reference: "REF_" + Date.now(),
currency: "GHS",
payment_type: "mobile_money",
provider: providerCode,
callback_url: "https://yourwebsite.com/verify",
},
{
headers: {
Authorization: "Bearer YOUR_SECRET_KEY",
"Content-Type": "application/json",
},
}
);

console.log("Mobile money payment initiated:", response.data);
return response.data;
} catch (error) {
console.error(
"Error initiating mobile money payment:",
error.response.data
);
throw error;
}
};

// Usage
initiateMobileMoneyPayment("MTN", "+233201234567", 5000);

Error Responses

Common error responses:

{
"status": false,
"message": "Invalid country code",
"data": null
}
ErrorDescription
Invalid country codeCountry code is not supported
No providers foundNo mobile money providers available for country
UnauthorizedInvalid API key

Next Steps