/api/v1/merchant/links with companion product catalog routes at /products.
Why payment links
- No custom checkout code: share a URL or embed the hybrid widget
- Per-customer links: attach
customerEmailand metadata from your CRM - Payment tracking.
paidAt,paidByWalletAddresson the link record
Flow
SDK reference
Callable pattern: list/get share one signature:Products + per-customer links
Sessions and link quotes
GET /api/v1/merchant/links/:id/checkout-sessions and POST /api/v1/merchant/links/:id/quote.
Platform minimums
The API enforces minimum amounts per feature kind. Mobile money corridors may have higher regional floors such as 1.00 GHS. Below-minimum amounts returnlinks.amount.below_minimum. See error code docs.
Checkout integration
The checkout widget (
morapay-checkout.js) uses a hybrid architecture: native Shadow DOM shell on your page + secure iframe canvas for card/MoMo/KYC flows.
Webhook
When a link is paid, Morapay emitspayment_link.paid to your configured endpoints. See Webhooks.
FAQ
What is the default minimum for payment links?
What is the default minimum for payment links?
Platform default is $1 USD equivalent (
minPaymentLinkUsd in platform settings). Regional MoMo floors may be higher.Can I customize the vanity slug?
Can I customize the vanity slug?
Yes on create/update. Duplicate slugs return
links.slug.duplicate (HTTP 409).How do I know if a customer paid?
How do I know if a customer paid?
Poll
morapay.link(id) and check paidAt, use morapay.utils.isPaid(link), or listen for payment_link.paid webhooks.
