Enlaces de pago
Endpoints públicos que respaldan un enlace de pago (link_...) creado desde el panel de Paytami. Ninguno requiere api_key — los llama el navegador del cliente final, no tu backend.
Para el flujo normal (compartir el link generado por el panel) no necesitas llamar estos endpoints directamente — son para cuando quieres construir tu propia página alrededor de un link existente.
GET /v1/payment_links/{id}
Datos públicos del link, para renderizar una página de pago propia.
curl https://app.paytami.com/api/v1/payment_links/link_9a1b2c3d4e5f60718293a4b5Respuesta
{
"title": "Colegiatura mensual",
"description": "Incluye materiales del curso",
"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
}| Campo | Descripción |
|---|---|
amount_type | fixed (monto fijo) o variable (el cliente lo indica dentro de min_amount_minor/max_amount_minor). |
payable | false si el link ya no admite pago. |
not_payable_reason | expired, inactive o exhausted cuando payable es false; null en caso contrario. |
Un link que ya no admite pago sigue respondiendo 200 con payable: false — 404 es exclusivo de un link que nunca existió, para que tu página pueda distinguir "esto venció" de "esto nunca fue real".
Errores posibles: 404 unknown_payment_link.
POST /v1/payment_links/{id}/pay
Crea el cobro asociado a este link. Reutiliza exactamente la misma lógica financiera que POST /v1/payments — el resultado es el mismo objeto Payment, con su checkout_url listo para redirigir.
Headers: Idempotency-Key requerido, igual que POST /v1/payments.
Cuerpo de la petición
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
amount | string | Solo si el link es de monto variable | Entero en unidad mínima. Se valida contra min_amount_minor/max_amount_minor del link. |
method_type | string | Sí | card o bank_transfer. |
success_url | string | No | Si se omite, usa la configurada en el link o una por omisión. |
cancel_url | string | No | Igual que success_url. |
customer.email / customer.name | string | No | Datos del cliente final. |
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": "cliente@ejemplo.com" } }'Respuesta: 201 Created con el objeto Payment — ver el esquema completo.
Errores posibles: 404 unknown_payment_link, 400 idempotency_key_required, 400 validation_error, 429 rate_limited (demasiados intentos sobre el mismo link en poco tiempo), 409 payment_link_not_payable, 400 amount_required (link de monto variable sin amount), 400 amount_below_minimum, 400 amount_above_maximum.

