Payments

Mobile Money

Collect payments via mobile money networks

Collect payments from customers using mobile money. The customer receives a USSD push notification to authorize the payment.

Supported Networks

  • Airtel Money (TZ)
  • M-Pesa / Vodacom (TZ)
  • Tigo Pesa (TZ)
  • Halotel (TZ)

Create Payment

POST /v1/payments
Authorization: Bearer <api_key>
Content-Type: application/json
Idempotency-Key: unique-request-id-123

Request

{
  "payment_type": "mobile",
  "details": {
    "amount": 50000,
    "currency": "TZS",
    "redirect_url": "https://yoursite.com/payment/success",
    "cancel_url": "https://yoursite.com/payment/cancel"
  },
  "phone_number": "+255712345678",
  "customer": {
    "firstname": "John",
    "lastname": "Doe",
    "email": "john@example.com"
  },
  "webhook_url": "https://yoursite.com/webhooks/snippe",
  "metadata": {
    "order_id": "ORD-12345",
    "product": "Premium Plan"
  }
}

Response

{
  "status": 201,
  "data": {
    "object": "payment",
    "api_version": "2026-01-25",
    "reference": "pi_a1b2c3d4e5f6",
    "status": "pending",
    "amount": {
      "value": 50000,
      "currency": "TZS"
    },
    "settlement": {
      "gross": { "value": 50000, "currency": "TZS" },
      "fees": { "value": 1000, "currency": "TZS" },
      "net": { "value": 49000, "currency": "TZS" }
    },
    "channel": {
      "type": "mobile",
      "provider": null
    },
    "customer": {
      "phone": "+255712345678",
      "name": "John Doe",
      "email": "john@example.com"
    },
    "metadata": {
      "order_id": "ORD-12345",
      "product": "Premium Plan"
    },
    "expires_at": "2026-01-24T11:00:00Z",
    "created_at": "2026-01-24T10:00:00Z"
  }
}

Request Parameters

Required Fields

FieldTypeDescription
payment_typestringMust be mobile
details.amountintegerAmount in smallest currency unit
details.currencystringCurrency code (TZS)
phone_numberstringCustomer phone number

Optional Fields

FieldTypeDescription
customerobjectCustomer information
details.redirect_urlstringURL to redirect after success
details.cancel_urlstringURL to redirect on cancel
webhook_urlstringURL for webhook notifications
metadataobjectCustom key-value data (max 50 keys)

How It Works

  1. You create a payment intent with the customer's phone number
  2. Customer receives a USSD push on their phone
  3. Customer enters their PIN to authorize
  4. Snippe sends a webhook notification with the result
  5. You can also poll the payment status endpoint

On this page