Skip to main content
POST
/
v1
/
mpesa
/
charge
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: JSON.stringify({
    merchantTransactionId: 'invoice_48291',
    amount: 150000,
    phoneNumber: '+254712345678',
    narration: 'Invoice 48291'
  })
};

fetch('https://api.fingopay.io/v1/mpesa/charge', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
{
  "status": "success",
  "message": "Transaction initiated successfully",
  "data": {
    "merchantTransactionId": "mtx_123",
    "transactionId": "txn_01j7b6f9p5y9h"
  }
}

Authorizations

Authorization
string
header
required

Use your API key as a Bearer token. Example: Authorization: Bearer sk_live_...

Headers

Idempotency-Key
string<uuid>

Unique key to safely retry POST without duplicates. Required in live environment.

Body

application/json
merchantTransactionId
string
required

Merchant-side reference used for reconciliation. Accepts 1-64 characters (letters, numbers, dot, underscore, or hyphen).

Required string length: 1 - 64
Pattern: ^[A-Za-z0-9._-]{1,64}$
Example:

"invoice_48291"

amount
integer
required

Amount in smallest currency unit (cents). Must be whole KES (divisible by 100). Range 1,000-25,000,000 (KES 10.00-250,000.00).

Required range: 1000 <= x <= 25000000
Example:

150000

phoneNumber
string
required

Customer MSISDN in Kenyan format (+2547/2547/07 or +2541/2541/01 followed by eight digits).

Pattern: ^(?:\+254|254|0)(?:7|1)\d{8}$
Example:

"+254712345678"

narration
string

Optional customer-facing narration. Maximum 140 characters.

Maximum string length: 140
Example:

"Invoice 48291"

webhookUrl
string<uri>

Override webhook destination for this charge.

Example:

"https://merchant.example/webhooks/fingo"

metadata
object

Custom metadata key-value pairs. Up to 20 entries. Keys 1-64 characters (letters, numbers, dot, underscore, or hyphen). Values are strings, except reserved key subMerchantDetails which accepts an object.

shortcode
string

[Enterprise] Optional collections shortcode to route the charge via your dedicated shortcode.

Example:

"123456"

subMerchantId
string

[Enterprise] Optional internal sub-merchant identifier configured under your organization.

Example:

"SM-NAIROBI-001"

customDisplayName
string

Optional custom display name shown to customer (alphanumeric and spaces only, max 40 chars).

Maximum string length: 40
Pattern: ^[a-zA-Z0-9 ]+$
Example:

"ACME Store"

Response

Accepted — final result will be delivered via webhook.

status
string
required
Example:

"success"

message
string
required
Example:

"Transaction initiated successfully"

data
object
required