Skip to main content
A payment link (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.
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.
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.
It also accepts 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:
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” produces acm-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.