PaymentLink) is a public payment URL that you can share without knowing the debtor in advance. When someone pays, TapiPay internally generates a debt for that payment.
When to use it: charges without a debtor roster (donations, one-off sales, checkout links over WhatsApp or email), where you know the payer at the moment of payment, not before. If you already know the debtor, a debt is usually better.
Two usage modes
Single use
singleUse: true (default). Generates a debt with the first payment and is then deactivated. Ideal for a single invoice or one-off sale.Reusable
singleUse: false. Created without a debtor and accepts multiple payments while it stays active. Donations or payment gateway mode.Create a link
The minimum is the amount and a description visible on the payment page.Main fields
number
required
Amount in pesos, with up to 2 decimal places (minimum
0.01).string
required
Description visible on the payment page.
string
Natural key of the link. Optional, but if you send it, it must be unique per organization (a duplicate returns
409 RESOURCE_CONFLICT).boolean
default:"true"
true deactivates after the first payment; false accepts multiple payments.string
Your own identifier for the URL (optional). It is sanitized to a URL-safe format (lowercase, alphanumerics and hyphens, maximum 64 characters). If it ends up empty after sanitizing, it returns
400 INVALID_REQUEST.string
required
Expiration date and time (ISO 8601). Must be in the future. It is required.
string
Redirect URL when the payment is completed. If you do not send it, the Tapi page is used.
currency, productName, and metadata.
The identifierValue and the payment URL
The paymentUrl always comes in the response. How the identifierValue is built depends on whether the link has a known debtor:
- Without a known debtor
- With a known debtor
This is the typical case for a link. The
identifierValue is exposed in the response and is the final segment of the paymentUrl, so you can correlate it without parsing the URL.- If you sent an
identifierValue, your sanitized value is used. - If not, TapiPay generates a synthetic one with the format
{3letters}-{random}(the 3 letters come from your organization’s name; for example, “Acme Corp” producesacm-x3kM9pQr).
Lifecycle
A reusable link (
singleUse: false) stays ACTIVE and accumulates payments. Each payment generates an internal debt; you query them with GET /payment-links/{id}/payments.Update without invalidating the URL
PATCH /payment-links/{id} lets you change description, expiresAt, and metadata without changing the paymentUrl: the link stays accessible from the same URL. The amount, currency, and singleUse are not modifiable (trying to do so returns 400 INVALID_REQUEST).
Endpoints
Try it in the API Reference
Explore each endpoint with its interactive playground.

