Developer Hub

Build with the OS.
Ship faster.

Everything you need to integrate Mobile Wallet OS — from your first API call to production deployment. SDKs, guides, and reference documentation.

$ npm install @mobilewallet/sdk
quickstart.js
1import { MobileWalletClient } from '@mobilewallet/sdk'; 2 3const client = new MobileWalletClient({ 4 apiKey: process.env.MOBILE_WALLET_API_KEY, 5 environment: 'sandbox' 6}); 7 8// Your first transfer 9const transfer = await client.transfers.create({ 10 amount: 1000, 11 currency: 'XOF', 12 destination_rail: 'orange_money', 13 destination_market: 'SN', 14 recipient: { 15 phone: '+221765432101', 16 provider: 'orange' 17 } 18});
Step-by-Step

Start building in minutes.

Follow our guides to implement common integration patterns — from your first transfer to handling webhooks and compliance.

Beginner

Quickstart Guide

Make your first API call in under 5 minutes.

Intermediate

Webhooks

Handle real-time settlement notifications.

Advanced

Compliance & KYC

Implement market-specific compliance flows.

Intermediate

Error Handling

Understand status codes and retry logic.

SDKs & Tools

Native libraries for every stack.

We provide official SDKs for the most popular programming languages. Each SDK handles authentication, retries, and webhook verification out of the box.

Integration Flow

From API call to settlement in under 55 seconds.

See how a single request flows through the OS — abstracting rails, handling compliance, and routing liquidity automatically.

Developer Integration Flow Diagram

API Request

Your app sends a single POST request with amount, currency, destination rail, and recipient details. One unified API surface — no rail-specific SDKs required.

API Request
create-transfer.js
1const { MobileWalletClient } = require('@mobilewallet/sdk'); 2 3const client = new MobileWalletClient({ 4 apiKey: 'your_api_key', 5 environment: 'sandbox' 6}); 7 8async function createTransfer() { 9 try { 10 const transfer = await client.transfers.create({ 11 amount: 50000, 12 currency: 'XAF', 13 destination_rail: 'mtn_momo', 14 destination_market: 'CM', 15 recipient: { 16 type: 'mobile_money', 17 phone: '+237612345678', 18 provider: 'mtn' 19 }, 20 reference: 'txn_' + Date.now() 21 }); 22 23 console.log('Transfer created:', transfer.id); 24 console.log('Status:', transfer.status); 25 } catch (error) { 26 console.error('Error:', error.message); 27 } 28}
Code Example

Create a transfer

Copy-paste ready code snippets to accelerate your integration. This example shows how to initiate a transfer across any rail with proper error handling.

webhook-handler.js
1// Express.js webhook handler 2const crypto = require('crypto'); 3 4app.post('/webhooks/transfer', (req, res) => { 5 const signature = req.headers['x-webhook-signature']; 6 const payload = JSON.stringify(req.body); 7 8 // Verify webhook signature 9 const expectedSignature = crypto 10 .createHmac('sha256', process.env.WEBHOOK_SECRET) 11 .update(payload) 12 .digest('hex'); 13 14 if (signature !== expectedSignature) { 15 return res.status(401).json({ error: 'Invalid signature' }); 16 } 17 18 const event = req.body; 19 20 switch (event.type) { 21 case 'transfer.settled': 22 console.log('Transfer settled:', event.data.transaction_id); 23 // Update your database 24 break; 25 case 'transfer.failed': 26 console.log('Transfer failed:', event.data.reason); 27 // Notify customer 28 break; 29 } 30 31 res.json({ received: true }); 32});
Code Example

Handle webhooks

Copy-paste ready code snippets to accelerate your integration. Learn how to verify webhook signatures and process settlement events securely.

API Reference

Every endpoint, documented.

RESTful API design with consistent request/response shapes across all rails.

REST API

Transfers

POST
/v1/transfersCreate a transfer
GET
/v1/transfers/{id}Retrieve a transfer
GET
/v1/transfersList transfers
REST API

Wallets

GET
/v1/walletsList wallets
GET
/v1/wallets/{id}/balanceGet balance
GET
/v1/wallets/{id}/transactionsList transactions
REST API

Recipients

POST
/v1/recipientsCreate recipient
GET
/v1/recipientsList recipients
GET
/v1/recipients/{id}Get recipient
REST API

Webhooks

POST
/v1/webhooksCreate webhook
GET
/v1/webhooksList webhooks
PUT
/v1/webhooks/{id}Update webhook
Resources

Everything else you need.

From API references to community support — we've got you covered.

API Reference

Complete documentation for all endpoints.

Sandbox Environment

Test with simulated rail behavior.

Release Notes

What's new in the latest versions.

Developer Support

Get help from our engineering team.

Join the Community

Build with other developers.

Connect with hundreds of developers building on Mobile Wallet OS. Share ideas, get help, and stay updated on new features.

Developer avatar 1
Developer avatar 2
Developer avatar 3
Developer avatar 4
200+ active developers
How do I handle webhook retries?
Best practices for idempotency?
New rail: Airtel Tanzania now live

FAQ

Developer questions, answered.

Everything you need to know about integrating with our API.

Need help?

Our engineers are here 24/7.

Contact support

How do I get an API key?

Sign up for a developer account in the Operator Dashboard. Sandbox keys are available immediately; production keys require a brief onboarding call.

What are the rate limits?

Sandbox: 10 requests per second. Production: 100 requests per second by default. Higher limits available on enterprise plans.

Do you have a sandbox environment?

Yes. Our sandbox simulates live rail behavior including response times, error conditions, and webhook delivery. Perfect for integration testing.

How do webhooks work?

We send HTTP POST requests to your configured endpoints for settlement confirmations, failures, and other events. Each webhook includes a signature header for verification.

What SDKs do you support?

Official SDKs for Node.js, Python, Go, Ruby, PHP, and Java. Community SDKs for other languages are listed in our documentation.