← Slimpay.ng

Used by every "Try It" panel across these docs to call app.slimpay.ng for real. Get one from Authentication — register or log in, then paste the token here. Stored only in this browser (localStorage), never sent anywhere but the Slimpay API, and auto-cleared after 8 hours.

Payment Links

Overview

Create a shareable link in seconds and collect money with no wallet debit required from the payer's side — send it via WhatsApp, email, or social. Payers pay through a hosted checkout; funds settle directly to the link owner's approved bank account via a dedicated subaccount, not into their Slimpay wallet.

Requires an approved settlement account

Creating a payment link requires an approved settlement account first — POST /settlement-account submits a bank account for admin review. POST /payment-links returns a 422 until that's approved.

Settlement account

MethodPathPurpose
GET/settlement-accountCurrent status + whether payment links are usable
POST/settlement-account/verifyResolve an account number to a name before submitting
POST/settlement-accountSubmit (or resubmit) for admin review
GET /settlement-account
POST /settlement-account/verify
POST /settlement-account

Create a link

POST /payment-links Requires Auth

A link is either fixed (one set amount every payer pays) or variable (the payer enters an amount themselves, optionally bounded by min_amount/max_amount). Requires an approved settlement account — see the section above — or this returns a 403 with code: "SETTLEMENT_REQUIRED".

bash
# Fixed amount
curl https://app.slimpay.ng/api/v1/payment-links \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "First Term School Fees 2026",
    "description": "Demo Primary School — 2026/2027 Session",
    "pricing_type": "fixed",
    "amount": 120000,
    "collect_email": true,
    "collect_reference": true
  }'
bash
# Variable amount, bounded
curl https://app.slimpay.ng/api/v1/payment-links \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Cooperative Dues — Any Amount",
    "pricing_type": "variable",
    "min_amount": 1000,
    "max_amount": 50000,
    "collect_email": true
  }'
POST /payment-links
json
{
  "message": "Payment link created.",
  "data": {
    "link_id": 14,
    "slug": "first-term-fees-2026",
    "title": "First Term School Fees 2026",
    "pricing_type": "fixed",
    "amount": "120000.00",
    "status": "active",
    "uses_count": 0,
    "collect_email": true,
    "collect_reference": true
  },
  "payment_url": "https://app.slimpay.ng/pay/first-term-fees-2026"
}
No status boolean in this response

Unlike most Slimpay endpoints, this response has no top-level status field — check the HTTP status code (201) instead. data.status is a different thing entirely: the link's own lifecycle state (active / inactive / expired), not a request-success flag.

Manage a link

MethodPathPurpose
GET/payment-linksList your links
GET/payment-links/{linkId}Get a single link
GET/payment-links/{linkId}/paymentsList payments received on this link
PUT/payment-links/{linkId}Update title, amount, expiry, max uses
POST/payment-links/{linkId}/toggleActivate / deactivate
DELETE/payment-links/{linkId}Delete permanently
GET /payment-links
GET /payment-links/{linkId}
GET /payment-links/{linkId}/payments
POST /payment-links/{linkId}/toggle
DELETE /payment-links/{linkId}

Public payment (payer side)

These two are public — the payer doesn't need a Slimpay account or bearer token.

GET /pay/{slug} Public
GET /pay/{slug}
POST /pay/{slug}/pay Public
bash
curl https://app.slimpay.ng/api/v1/pay/first-term-fees-2026/pay \
  -H "Content-Type: application/json" \
  -d '{ "payer_name": "Amaka Okonkwo", "payer_email": "amaka@example.com" }'
POST /pay/{slug}/pay