7. Payment links
Collect without code: every individual merchant has a permanent open-amount link and a QR code. You can also create fixed-amount links. Customers pay on Kratos Pay's hosted page by Mobile Money or card when enabled.
Permanent link
GET/payment-links/staticSession token
Returns your permanent link: public_url, qr_code_svg, qr_code_url.
Create a link for a specific purpose
POST/personal/payment-linksSession token
For a kitty, an invoice… Allow the payment methods you want in allowed_providers.
Request body
{
"title": "Cagnotte anniversaire",
"description": "Participation au cadeau",
"amount": 5000,
"currency": "XAF",
"is_amount_fixed": true,
"allowed_providers": [
"orange_money_cm",
"mtn_momo_cm"
],
"redirect_url": "https://monsite.com/merci",
"expires_at": "2026-12-31T23:59:59Z",
"max_uses": 100
}Response 201 (excerpt)
{
"success": true,
"data": {
"uuid": "b2c3d4e5-...",
"slug": "cagnotte-anniversaire-xkf72a",
"title": "Cagnotte anniversaire",
"amount": "5000.00",
"currency": "XAF",
"is_amount_fixed": true,
"status": "active",
"use_count": 0,
"max_uses": 100,
"public_url": "https://payment.kratospay.com/cagnotte-anniversaire-xkf72a",
"images": []
},
"meta": {
"request_id": "...",
"timestamp": "..."
}
}- Link states (
status): active, disabled, expired, max_uses_reached. List:GET /personal/payment-links. - Errors: 400/422 if the amount is missing for a fixed link, or if a network in
allowed_providersdoes not exist.
What the payment page does
For information, or if you build your own payment page:
| Route | Role | Responses |
|---|---|---|
GET /public/payment-links/{slug} | Shows the link. Returns 200 even if the link is unavailable (is_available: false + unavailable_reason: disabled, expired or max_uses_reached). | 200, 404 if unknown slug |
POST /public/payment-links/{slug}/transactions | Creates the customer's payment (provider, phone_number, amount, idempotency_key). amount is only required for open-amount links. | 201 (pending), 404, 422 (link unavailable, network not allowed, missing amount) |
GET /public/transactions/{uuid}/status | Waits for the result: stays open up to 20 s while the status is pending; call it again immediately. | 200: { uuid, status, amount, currency, provider } |