Skip to main content
Payment links are fixed-amount checkout URLs you share with customers. The Merchant API exposes them at /api/v1/merchant/links with companion product catalog routes at /products.
  • No custom checkout code: share a URL or embed the hybrid widget
  • Per-customer links: attach customerEmail and metadata from your CRM
  • Payment tracking. paidAt, paidByWalletAddress on the link record

Flow

SDK reference

Callable pattern: list/get share one signature:
REST equivalent: 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 return links.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 emits payment_link.paid to your configured endpoints. See Webhooks.

FAQ

Yes on create/update. Duplicate slugs return links.slug.duplicate (HTTP 409).
Poll morapay.link(id) and check paidAt, use morapay.utils.isPaid(link), or listen for payment_link.paid webhooks.

Next step

Subscriptions: recurring billing on top of the same Merchant API.