Payment links
Public endpoints backing a payment link (link_...) created from the Paytami dashboard. None require an api_key — they're called by the end customer's browser, never by your backend with credentials.
For the normal flow (sharing the link the dashboard generated) you don't need to call these endpoints directly — they're for when you want to build your own page around an existing link.
GET /v1/payment_links/{id}
Public link data, to render your own payment page.
curl https://app.paytami.com/api/v1/payment_links/link_9a1b2c3d4e5f60718293a4b5Response
{
"title": "Monthly tuition",
"description": "Includes course materials",
"merchant_trade_name": "Goclases",
"currency": "GTQ",
"amount_type": "fixed",
"fixed_amount_minor": "25000",
"min_amount_minor": null,
"max_amount_minor": null,
"payable": true,
"not_payable_reason": null
}| Field | Description |
|---|---|
amount_type | fixed (set amount) or variable (the customer enters it, within min_amount_minor/max_amount_minor). |
payable | false if the link no longer accepts payment. |
not_payable_reason | expired, inactive, or exhausted when payable is false; null otherwise. |
A link that no longer accepts payment still responds 200 with payable: false — 404 is reserved for a link that never existed, so your page can distinguish "this expired" from "this was never real".
Possible errors: 404 unknown_payment_link.
POST /v1/payment_links/{id}/pay
Creates the charge tied to this link. Reuses the exact same financial logic as POST /v1/payments — the result is the same Payment object, with its checkout_url ready to redirect to.
Headers: Idempotency-Key required, same as POST /v1/payments.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
amount | string | Only if the link is variable-amount | Integer in the minor unit. Validated against the link's min_amount_minor/max_amount_minor. |
method_type | string | Yes | card or bank_transfer. |
success_url | string | No | Falls back to the one configured on the link, or a default, if omitted. |
cancel_url | string | No | Same as success_url. |
customer.email / customer.name | string | No | End customer's data. |
curl https://app.paytami.com/api/v1/payment_links/link_9a1b2c3d4e5f60718293a4b5/pay \
-X POST \
-H "Idempotency-Key: 6e4b6f0a-a5f0-4b9a-9b8b-1a2b3c4d5e6f" \
-H "Content-Type: application/json" \
-d '{ "method_type": "card", "customer": { "email": "customer@example.com" } }'Response: 201 Created with the Payment object — see the full schema.
Possible errors: 404 unknown_payment_link, 400 idempotency_key_required, 400 validation_error, 429 rate_limited (too many attempts on the same link in a short time), 409 payment_link_not_payable, 400 amount_required (variable-amount link with no amount), 400 amount_below_minimum, 400 amount_above_maximum.

