Escrow Safe Trade is live: protect your next high-value deal Learn more
Products Payment links & checkoutM-Pesa, cards, invoices, split payoutsEscrow Safe TradeMilestone and release-based escrowWallets & P2PPersonal and business walletsChama, Lengo & DeniGroup savings, goals and IOUsBusiness toolkitAccounting, payroll, POS, ticketingBulk payments & payrollPay many people in one uploadSubscriptions & billingRecurring plans and renewalsRent, loans & donationsCollections and campaignsAll products
Solutions MerchantsBuyersChama groupsBusiness solutionsIndustries
Pricing
Developers Developer overviewQuickstart, auth and sandboxREST APIsCheckout, invoices and requestsWebhooksSigned, real-time eventsWallet-as-a-ServiceVirtual sub-accountsDocumentationGuides and API reference
Security
Company About usCareersPartnersEvents & ticketsBlogHelp centreContact us
Log in Get started Talk to sales
Accept payments

Payment Links

Reusable links for fixed prices, open amounts or donations. They do not expire unless you set them to.

Base URLhttps://api.paysasa.com/api/v1Authx-api-keyFormatJSON

Payment links are reusable and do not expire by default. Use them for fixed charges, donations, or open-amount collection.

Authentication: Payment Links require a signed-in dashboard session. Business API key auth is implemented for checkout, invoices, checkout pay, and reconciliation integration flows.

POST/payment-links#
JavaScript
const res = await fetch("https://api.paysasa.com/api/v1/payment-links", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    business_id: "biz_xxxxxxxxxxxxxxxx",
    title: "Webinar Ticket",
    amount: 50000,       // KES 500
    currency: "KES",
    description: "Workshop ticket",
  }),
});
const { paymentLink } = await res.json();
// Share: paymentLink.url
Response · JSON
{
  "paymentLink": {
    "id": "lnk_01hx...",
    "title": "Webinar Ticket",
    "url": "https://app.paysasa.com/pay/link/lnk_01hx...",
    "amount": 50000,
    "currency": "KES",
    "status": "active"
  }
}