Overview

Tingg is Africa’s leading mobile money payment platform, providing comprehensive payment solutions across multiple African countries. With FundKit’s Tingg integration, you can process payments through Safaricom, MTN, Airtel, and other major mobile networks across Kenya, Uganda, Tanzania, Rwanda, Malawi, Zambia, and Zimbabwe.
Tingg specializes in cross-border payments and multi-operator support, making it ideal for businesses operating across multiple African countries with a single integration.

Coverage & Capabilities

Supported Countries

Kenya

Networks: Safaricom, MTN, Airtel Currency: KES Features: Collections, Status Check

Uganda

Networks: MTN, Airtel Currency: UGX Features: Collections, Status Check

Tanzania

Networks: Vodacom, Airtel, Tigo Currency: TZS Features: Collections, Status Check

Rwanda

Networks: MTN, Airtel Currency: RWF Features: Collections, Status Check

Malawi

Networks: Airtel, TNM Currency: MWK Features: Collections, Status Check

Zambia

Networks: MTN, Airtel Currency: ZMW Features: Collections, Status Check

Zimbabwe

Networks: Econet, NetOne Currency: ZWL Features: Collections, Status Check

Capabilities

  • Collections - Charge customers via mobile money
  • Status Checking - Real-time transaction status
  • Multi-country - 7 African countries supported
  • Multi-operator - All major mobile networks
  • Cross-border - Process payments across countries
  • OAuth Authentication - Secure token-based auth
  • High Reliability - 98% uptime guarantee
  • Payouts - Coming soon
  • Webhooks - Coming soon

Installation

npm install @fundkit/tingg

Configuration

Basic Setup

import { Tingg } from '@fundkit/tingg';

const tingg = new Tingg({
  apiKey: process.env.TINGG_API_KEY!,
  publicKey: process.env.TINGG_PUBLIC_KEY!,
  serviceCode: process.env.TINGG_SERVICE_CODE!,
  paymentOptionCode: process.env.TINGG_PAYMENT_OPTION_CODE!,
});

Configuration Options

apiKey
string
required
Your Tingg API key. This is your client secret for OAuth authentication.
publicKey
string
required
Your Tingg public key. This is your client ID for OAuth authentication.
serviceCode
string
required
The service code assigned to your merchant account on the Tingg portal. This identifies your business on Tingg’s platform.
paymentOptionCode
string
required
The payer client code for the mobile money operator you want to charge. Common codes: SAFKE (Safaricom Kenya), MTNKE (MTN Kenya), AIRKE (Airtel Kenya), etc.
timeout
number
default:"30000"
Request timeout in milliseconds.
retries
number
default:"3"
Number of retry attempts for failed requests.

Advanced Configuration

const tingg = new Tingg({
  apiKey: process.env.TINGG_API_KEY!,
  publicKey: process.env.TINGG_PUBLIC_KEY!,
  serviceCode: process.env.TINGG_SERVICE_CODE!,
  paymentOptionCode: process.env.TINGG_PAYMENT_OPTION_CODE!,

  // Advanced options
  timeout: 45000,
  retries: 5,
  retryDelay: 2000,

  // Rate limiting
  rateLimit: {
    requests: 100,
    window: 60000, // Per minute
  },

  // Custom headers
  headers: {
    'User-Agent': 'MyApp/1.0',
    'X-Source': 'mobile-app',
  },

  // Logging
  logger: customLogger,
  logLevel: 'info', // 'debug', 'info', 'warn', 'error'
});

Getting API Credentials

Sandbox Credentials

For testing, you can get sandbox credentials instantly:
1

Visit Tingg Developer Portal

Go to developer.tingg.africa and create an account
2

Create Sandbox Application

Click “Create App” and select “Sandbox Environment”
3

Get Your Keys

Copy your API Key (client secret) and Public Key (client ID) from the dashboard
4

Configure Service Code

Set up your service code in the Tingg portal - this identifies your business
5

Set Environment Variables

TINGG_API_KEY=tingg_test_your_api_key_here
TINGG_PUBLIC_KEY=tingg_test_your_public_key_here
TINGG_SERVICE_CODE=YOUR_SERVICE_CODE
TINGG_PAYMENT_OPTION_CODE=SAFKE

Production Credentials

For live payments, you need to complete Tingg’s onboarding:
  1. Business Registration - Submit business documents and details 2. Compliance Review - KYC/AML verification (3-5 business days) 3. Integration Testing - Complete test scenarios with Tingg team 4. Go-Live Approval - Final review and approval 5. Production Keys - Receive live API credentials
Production approval typically takes 5-7 business days. Plan accordingly for your launch timeline.

Usage Examples

Basic Collection

import { PaymentClient } from '@fundkit/core';
import { Tingg } from '@fundkit/tingg';

const tingg = new Tingg({
  apiKey: process.env.TINGG_API_KEY!,
  publicKey: process.env.TINGG_PUBLIC_KEY!,
  serviceCode: process.env.TINGG_SERVICE_CODE!,
  paymentOptionCode: process.env.TINGG_PAYMENT_OPTION_CODE!,
});

const client = new PaymentClient({
  apiKey: process.env.FUNDKIT_API_KEY!,
  providers: [tingg],
  environment: 'sandbox',
});

// Process payment
const transaction = {
  amount: 10000, // 100.00 KES
  currency: 'KES',
  operator: 'safaricom',
  accountNumber: '254701234567',
  externalId: 'order_12345',
  reason: 'Product purchase',
};

try {
  const result = await client.collection(transaction);
  console.log('Payment initiated:', result);
} catch (error) {
  console.error('Payment failed:', error.message);
}

Multi-Country Payment

// Kenya payment
const kenyaPayment = {
  amount: 5000, // 50.00 KES
  currency: 'KES',
  operator: 'safaricom',
  accountNumber: '254701234567',
  externalId: 'kenya_order_123',
  reason: 'Service payment',
};

// Uganda payment
const ugandaPayment = {
  amount: 20000, // 200.00 UGX
  currency: 'UGX',
  operator: 'mtn',
  accountNumber: '256779280949',
  externalId: 'uganda_order_456',
  reason: 'Product delivery',
};

// Tanzania payment
const tanzaniaPayment = {
  amount: 50000, // 500.00 TZS
  currency: 'TZS',
  operator: 'vodacom',
  accountNumber: '255754123456',
  externalId: 'tz_order_789',
  reason: 'Subscription payment',
};

// Process payments
const [kenyaResult, ugandaResult, tanzaniaResult] = await Promise.allSettled([
  client.collection(kenyaPayment),
  client.collection(ugandaPayment),
  client.collection(tanzaniaPayment),
]);

Transaction Limits

Amount Limits by Currency

  • Minimum: 128 KES (~$0.80 USD)
  • Maximum: 320,000 KES (~$2,000 USD)
  • Daily limit: 1,000,000 KES per merchant
  • Monthly limit: 10,000,000 KES per merchant

Rate Limits

  • API Requests: 100 requests per minute
  • Concurrent Transactions: 50 simultaneous transactions
  • Bulk Operations: 1,000 transactions per batch

Payment Option Codes

Tingg uses specific codes to identify mobile money operators. Here are the common codes:

Kenya

  • SAFKE - Safaricom M-Pesa
  • MTNKE - MTN Mobile Money
  • AIRKE - Airtel Money

Uganda

  • SAFUG - Safaricom (if available)
  • MTNUG - MTN Mobile Money
  • AIRUG - Airtel Money

Tanzania

  • SAFTZ - Safaricom (if available)
  • MTNTZ - MTN Mobile Money
  • AIRTZ - Airtel Money

Rwanda

  • SAFRW - Safaricom (if available)
  • MTNRW - MTN Mobile Money
  • AIRRW - Airtel Money

Malawi

  • SAFMW - Safaricom (if available)
  • MTNMW - MTN Mobile Money
  • AIRMW - Airtel Money

Zambia

  • SAFZM - Safaricom (if available)
  • MTNZM - MTN Mobile Money
  • AIRZM - Airtel Money

Zimbabwe

  • SAFZW - Safaricom (if available)
  • MTNZW - MTN Mobile Money
  • AIRZW - Airtel Money

Error Handling

Common Tingg Errors

try {
  const result = await client.collection(transaction);
} catch (error) {
  switch (error.code) {
    case 'TINGG_INSUFFICIENT_FUNDS':
      showMessage('Customer has insufficient balance');
      break;

    case 'TINGG_INVALID_PHONE':
      showMessage('Invalid phone number format');
      break;

    case 'TINGG_NETWORK_UNAVAILABLE':
      showMessage('Mobile network is currently unavailable');
      break;

    case 'TINGG_CUSTOMER_CANCELLED':
      showMessage('Customer cancelled the payment');
      break;

    case 'TINGG_DUPLICATE_TRANSACTION':
      showMessage('Duplicate transaction detected');
      break;

    case 'TINGG_ACCOUNT_BLOCKED':
      showMessage('Customer account is temporarily blocked');
      break;

    case 'TINGG_SERVICE_CODE_REQUIRED':
      showMessage('Service code is required. Please configure your Tingg service code.');
      break;

    case 'TINGG_PAYMENT_OPTION_REQUIRED':
      showMessage('Payment option code is required. Please specify the mobile money operator.');
      break;

    default:
      showMessage('Payment failed. Please try again.');
      logError(error);
  }
}

Error Details

TINGG_INSUFFICIENT_FUNDS - Customer doesn’t have enough money
TINGG_CUSTOMER_CANCELLED - Customer declined payment prompt
TINGG_TIMEOUT - Customer didn’t respond to payment prompt
TINGG_INVALID_PIN - Customer entered wrong PIN
TINGG_INVALID_PHONE - Phone number format is incorrect TINGG_ACCOUNT_BLOCKED - Customer account is suspended TINGG_ACCOUNT_NOT_FOUND - Phone number not registered TINGG_ACCOUNT_LIMIT_EXCEEDED - Transaction exceeds account limits
TINGG_NETWORK_UNAVAILABLE - Mobile network is down TINGG_PROVIDER_MAINTENANCE - Tingg system maintenance TINGG_RATE_LIMITED - Too many requests TINGG_AUTHENTICATION_FAILED - Invalid API credentials
TINGG_SERVICE_CODE_REQUIRED - Service code not provided
TINGG_PAYMENT_OPTION_REQUIRED - Payment option code not provided
TINGG_INVALID_SERVICE_CODE - Service code is invalid
TINGG_INVALID_PAYMENT_OPTION - Payment option code is invalid

Sandbox Environment Features

Sandbox transactions complete immediately without actual SMS prompts
Use specific test numbers to simulate different scenarios
Test all supported countries and currencies in sandbox
Test as much as you want without hitting rate limits

Production Checklist

Before going live with Tingg:

Credentials

  • Production API keys obtained
  • Service code configured
  • Payment option codes set up
  • Environment set to ‘production’
  • Credentials stored securely

Error Handling

  • All error codes handled - [ ] Retry logic implemented - [ ] User-friendly error messages - [ ] Logging and monitoring setup

Configuration

  • Service code properly configured - [ ] Payment option codes mapped correctly - [ ] Multi-country support tested - [ ] Operator detection working

Testing

  • End-to-end testing completed
  • Cross-country payments tested
  • Error scenarios tested
  • Load testing performed

Support & Resources

Next Steps