Skip to content

Payment links

Get paid with a link, no code required

Create a link, share it or print its QR code. Customers pay on a hosted checkout page by M-Pesa or card, and the money lands in your own account.

  • Fixed amounts or amounts the customer chooses, within limits
  • QR code for every link
  • M-Pesa STK push and card on one page
  • Paid count and total collected per link

Share anywhere

Send a link by SMS, WhatsApp or email, or print its QR code at the till. The checkout page works on any phone and asks only for what the payment needs.

Your amount, or theirs

Set a fixed price, or let customers enter an amount between a minimum and maximum you choose. Pick the channels each link accepts and where customers go after paying.

Safe when the network drops

Checkout keeps the customer's attempt and its idempotency key when a connection fails, so pressing pay again recovers the first payment instead of starting a second one.

See what each link earns

Every payment through a link is recorded against it. The dashboard shows the paid count, total collected and recent activity for each link, and link payments send the same signed webhooks as API payments.

In code

Create a payment link

The response carries the hosted checkout URL to share or print as a QR code.

Full API reference
Create a payment link
curl https://pay.noria.co.ke/v1/payment-links \
  -H "Authorization: Bearer $NORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Kahawa water, November",
    "currency": "KES",
    "amount_minor": 150000,
    "channels": ["mpesa", "card"],
    "reference": "KAHAWA-NOV"
  }'
const response = await fetch("https://pay.noria.co.ke/v1/payment-links", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.NORIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "title": "Kahawa water, November",
    "currency": "KES",
    "amount_minor": 150000,
    "channels": ["mpesa", "card"],
    "reference": "KAHAWA-NOV"
  }),
});
const result = await response.json();
import os
import requests

result = requests.post(
    "https://pay.noria.co.ke/v1/payment-links",
    headers={
        "Authorization": f"Bearer {os.environ['NORIA_API_KEY']}",
    },
    json={
        "title": "Kahawa water, November",
        "currency": "KES",
        "amount_minor": 150000,
        "channels": ["mpesa", "card"],
        "reference": "KAHAWA-NOV",
    },
    timeout=30,
).json()
<?php
$ch = curl_init('https://pay.noria.co.ke/v1/payment-links');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('NORIA_API_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'title' => 'Kahawa water, November',
        'currency' => 'KES',
        'amount_minor' => 150000,
        'channels' => ['mpesa', 'card'],
        'reference' => 'KAHAWA-NOV',
    ]),
]);
$result = json_decode(curl_exec($ch), true);
body, _ := json.Marshal(map[string]any{
	"title":        "Kahawa water, November",
	"currency":     "KES",
	"amount_minor": 150000,
	"channels":     []any{"mpesa", "card"},
	"reference":    "KAHAWA-NOV",
})
req, _ := http.NewRequest("POST", "https://pay.noria.co.ke/v1/payment-links", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("NORIA_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)

The response carries the hosted checkout URL to share or print as a QR code.

Payment links questions

Something else? Ask us.

Do customers need an account?

No. They open the link, enter their phone number or card details and pay.

Can I switch a link off?

Yes. Deactivate it from the dashboard or the API and it stops accepting payments immediately.

Are payment links rate limited?

Yes. Anonymous checkout is limited per IP address, link and phone number before any payment is requested, which keeps a shared link from being used to spam prompts.

Guides

All guides

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.