Ir al contenido
KUTI

Links de pago

Un enlace permanente que pagan muchas personas: cursos, entradas, donaciones. Cada pago es un cobro normal.

Creas el link una vez (panel o API) y lo compartes: pay.kuti.pe/l/{slug}, por WhatsApp, redes o como QR impreso. Cada persona que paga deja sus datos y se crea SU cobro, con payment_link_id.

  1. 1

    Crea el link

    POST /payment-links con título, precio, métodos y preguntas (o desde el panel).

  2. 2

    Compártelo

    url (o su QR) por WhatsApp, redes o impreso. Quien paga ve tu marca y deja nombres, apellidos, correo y tus preguntas.

  3. 3

    Paga

    Se crea SU cobro (vence en 30 minutos si no paga) y paga con QR o banco.

  4. 4

    Te avisamos

    Llega payment.succeeded con payment_intent.payment_link_id. Listo.

Precio

pricingCómoEjemplo
FIXEDamount fijo.Taller S/ 120
CUSTOMER_CHOOSESQuien paga elige: min_amount (obligatorio), max_amount y hasta 4 suggested_amounts.Donación desde S/ 5
Los métodos que habilitas se cruzan con el monto: el QR admite hasta S/ 500 y el pago en banco desde S/ 50. Con monto libre, S/ 45 ofrece solo QR y S/ 55 ofrece los dos.

Preguntas a quien paga

Siempre se piden nombres, apellidos y correo. Con customer_field_ids eliges qué campos personalizados (Campos de cliente) pregunta cada link. El link guarda una copia de las preguntas: si luego editas, archivas o creas campos, los links ya creados siguen igual hasta que los edites. Las respuestas quedan en el cobro (customer.custom_fields) y en el cliente, si el campo sigue existiendo.

Texto del botón y después del pago

button_label cambia el botón ("Inscribirme · S/ 120.00"). success_message y success_button_label + success_button_url se muestran cuando el pago se completa: ideal para mandar al grupo de WhatsApp, Zoom o Drive.

URL (slug)

El slug es único en todo KUTI. Si no lo envías se genera del título. Si lo cambias, la URL anterior sigue funcionando y redirige: un QR ya impreso nunca se rompe. Revisa uno libre con GET /payment-links/slug-availability.

Cobros y resultados

  • Los cobros de un link: GET /payment-intents?payment_link_id=plink_…
  • Todos los cobros que salieron de links: GET /payment-intents?source=link (single = cobros a una persona, subscription = periodos de una suscripción).
  • Resultados en el link: views_count (visitas) → checkouts_count (llenaron sus datos) → payments_count (pagaron) y amount_collected.

Eventos

EventoCuándodata
payment_link.createdCreaste el link.payment_link
payment_link.updatedLo editaste.payment_link
payment_link.activatedLo activaste.payment_link
payment_link.deactivatedLo desactivaste.payment_link
payment.succeededAlguien pagó el link (el cobro trae payment_link_id).payment_intent

Saber quién pagó (webhook)

Un pago de un link es un cobro normal: llega payment.succeeded, igual que cualquier cobro. No hay un evento aparte. Lo que te dice de qué link vino es payment_intent.payment_link_id; las respuestas a las preguntas del link vienen en payment_intent.customer.custom_fields.

payment.succeeded de un linkjson
{
  "id": "evt_01J8Z3K4M5N6P7Q8R9S0T1U2V9",
  "type": "payment.succeeded",
  "merchant_id": "mer_01J8Z3K4M5N6P7Q8R9S0T1U2V3",
  "created_at": "2026-09-25T15:20:41.000Z",
  "data": {
    "payment_intent": {
      "id": "pi_01J8Z3K4M5N6P7Q8R9S0T1U2V5",
      "status": "SUCCEEDED",
      "amount": {
        "amount": "120.00",
        "currency": "PEN"
      },
      "description": "Taller de Excel — sábado 10am",
      "payment_link_id": "plink_01J8Z3K4M5N6P7Q8R9S0T1U2V3",
      "metadata": {
        "payment_link_id": "plink_01J8Z3K4M5N6P7Q8R9S0T1U2V3",
        "payment_link_slug": "taller-de-excel"
      },
      "customer": {
        "id": "cus_01J8Z3K4M5N6P7Q8R9S0T1U2V7",
        "first_name": "Ana",
        "last_name": "Torres",
        "name": "Ana Torres",
        "email": "ana@correo.com",
        "custom_fields": {
          "codigo_alumno": "2026-00781"
        }
      },
      "paid_with": {
        "method_type": "INTEROPERABLE_QR",
        "paid_at": "2026-09-25T15:20:40.000Z"
      },
      "send_via": [],
      "created_at": "2026-09-25T15:18:02.000Z"
    }
  }
}
Filtrar por link en tu webhookjs
if (event.type === "payment.succeeded") {
  const pi = event.data.payment_intent;
  if (pi.payment_link_id === "plink_01J8Z3K4M5N6P7Q8R9S0T1U2V3") {
    // Inscribir a pi.customer.email en el taller
    // pi.customer.custom_fields.codigo_alumno → respuesta del link
  }
}
Cada persona que llena sus datos crea un cobro que vence a los 30 minutos si no paga. Un link popular genera muchos payment.created y payment.expired: si solo te interesa quién pagó, suscríbete a payment.succeeded.
La página pública usa la marca de tu negocio (Ajustes → Marca): logo, color, fondo, tipografía y botones. Ver Personalización.

Siguiente