Skip to content

Integrations

Four providers, one API

Connect the providers you already have accounts with. Pay normalises their requests, callbacks and statuses into one API, one webhook format and one ledger.

Collect by Airtel Money through SasaPay
curl https://pay.noria.co.ke/v1/charges \
  -H "Authorization: Bearer $NORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: invoice-1043" \
  -d '{
    "amount_minor": 120000,
    "currency": "KES",
    "channel": "airtel",
    "provider": "sasapay",
    "payer_phone": "254733123456",
    "reference": "INV-1043",
    "description": "BillGrid invoice INV-1043"
  }'
const response = await fetch("https://pay.noria.co.ke/v1/charges", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.NORIA_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "invoice-1043",
  },
  body: JSON.stringify({
    "amount_minor": 120000,
    "currency": "KES",
    "channel": "airtel",
    "provider": "sasapay",
    "payer_phone": "254733123456",
    "reference": "INV-1043",
    "description": "BillGrid invoice INV-1043"
  }),
});
const result = await response.json();
import os
import requests

result = requests.post(
    "https://pay.noria.co.ke/v1/charges",
    headers={
        "Authorization": f"Bearer {os.environ['NORIA_API_KEY']}",
        "Idempotency-Key": "invoice-1043",
    },
    json={
        "amount_minor": 120000,
        "currency": "KES",
        "channel": "airtel",
        "provider": "sasapay",
        "payer_phone": "254733123456",
        "reference": "INV-1043",
        "description": "BillGrid invoice INV-1043",
    },
    timeout=30,
).json()
<?php
$ch = curl_init('https://pay.noria.co.ke/v1/charges');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('NORIA_API_KEY'),
        'Content-Type: application/json',
        'Idempotency-Key: invoice-1043',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'amount_minor' => 120000,
        'currency' => 'KES',
        'channel' => 'airtel',
        'provider' => 'sasapay',
        'payer_phone' => '254733123456',
        'reference' => 'INV-1043',
        'description' => 'BillGrid invoice INV-1043',
    ]),
]);
$result = json_decode(curl_exec($ch), true);
body, _ := json.Marshal(map[string]any{
	"amount_minor": 120000,
	"currency":     "KES",
	"channel":      "airtel",
	"provider":     "sasapay",
	"payer_phone":  "254733123456",
	"reference":    "INV-1043",
	"description":  "BillGrid invoice INV-1043",
})
req, _ := http.NewRequest("POST", "https://pay.noria.co.ke/v1/charges", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("NORIA_API_KEY"))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Idempotency-Key", "invoice-1043")
res, err := http.DefaultClient.Do(req)

Name the provider and channel, or leave the provider out and let routing pick an enabled method.

M-Pesa Daraja

STK push collections on a paybill or till, STK push status queries, B2C payouts and reversals, with Safaricom's security credential built for you.

SasaPay

M-Pesa, Airtel Money and wallet collections; payouts to M-Pesa, Airtel Money, banks and wallets; balances, refunds and confirmed payment notifications.

KCB Buni

M-Pesa collections and payouts to M-Pesa and bank accounts, with signed callbacks and payment notifications.

Paystack

Card and M-Pesa collections, verified transactions, refunds and balances.

Integrations questions

Something else? Ask us.

Do I need accounts with these providers?

Yes. Pay uses your own credentials with each provider. Noria has no platform account that your money passes through.

How does Pay choose a provider?

Routing picks an enabled method in the right mode that supports the channel and currency, in the priority order you set. You can also name the provider on a request.

Can you add another bank or PSP?

Yes. Providers are adapters behind one interface, and a new one appears in the dashboard without dashboard changes. Request access and tell us which provider you need.

Related

Ready to take payments properly?

Tell us what you are building and which providers you use. We set up your workspace and help you go live.