---
title: "Intent exitoso"
method: POST
path: "intent-succeeded-webhook"
---

# Intent exitoso

`POST intent-succeeded-webhook` (webhook)

Se emite con el formato unificado cuando cualquier método de pago se
completa. El `id` superior es el recurso unificado (`in_…`) y coincide
con el que devuelve `POST /cash_sales`; `checkout.latest_intent.id`
expone ese mismo ID unificado (`in_…`).

`tax_invoice_url` es una foto del estado del DTE al entregar el evento.
Si el DTE se emite después, consulta `GET /intents/{id}` para obtener el
valor actual; no se vuelve a emitir `intent.succeeded` por ese cambio.

## Payload

- UnifiedIntentWebhook — Recurso de intent unificado. El campo `type` discrimina el tipo de pago; `details` contiene los campos específicos de ese tipo. Su `id` siempre es el ID base `in_…`, incluido cuando aparece en `checkout.latest_intent.id`.
  - `event_type` string, required — Tipo exacto del evento enviado por Recurrente.
  - `connected` boolean, nullable — Presente como `true` cuando el evento proviene de una cuenta conectada.
  - `account_id` string, nullable — ID de la cuenta conectada que originó el evento.
  - `type` 'payment' | 'bank_transfer' | 'crypto' | 'balance' | 'cash', required — Tipo de pago subyacente
  - `id` string, required — ID del intent unificado; es la llave canónica para `GET /intents/{id}` y los eventos `intent.*`.
  - `receipt_number` integer
  - `api_version` string
  - `status` 'pending' | 'succeeded' | 'failed' | 'canceled' | 'paid', required — Estado normalizado. `paid` aplica solo al evento del pagador en pagos con balance (type balance).
  - `raw_status` string, required — Estado concreto sin normalizar (ej. `requires_capture`)
  - `created_at` string, date-time
  - `amount_in_cents` integer
  - `currency` string
  - `customer_id` string
  - `user_id` string
  - `customer` UnifiedIntentWebhookCustomer — Datos del cliente
  - `product` UnifiedIntentWebhookProduct — Producto principal
  - `tax_invoice_url` string, uri, nullable — En la API devuelve la URL actual del DTE; en un webhook refleja el valor disponible al entregar ese evento y puede ser `null` aunque una emisión posterior tenga éxito.
  - `checkout` Checkout
    - `id` string, required — ID único del checkout
    - `status` 'unpaid' | 'paid' | 'payment_in_progress' | 'expired', required — Estado del checkout
    - `bank_transfer_memo` string, nullable — Referencia normalizada propuesta por la integración. Es null cuando Recurrente generará la referencia al iniciar el pago por transferencia.
    - `total_in_cents` integer — Monto total en centavos (después de descuentos)
    - `subtotal_in_cents` integer — Monto subtotal en centavos (antes de descuentos)
    - `discount` CheckoutDiscount — Descuento aplicado al checkout (null si no hay descuento)
      - `amount_in_cents` integer — Monto del descuento en centavos
      - `coupon` Coupon
        - `id` string — ID único del cupón
        - `name` string — Nombre o código del cupón
        - `discount_mode` 'code' | 'bank' | 'custom_bins' — Tipo de descuento
        - `display_name` string, nullable — Nombre visible para el cliente (usado en modo custom_bins)
        - `amount_off_in_cents` integer, nullable — Descuento fijo en centavos
        - `percent_off` number, double, nullable — Porcentaje de descuento
        - `automatically_applies` boolean — Si el descuento se aplica automáticamente en checkouts de tienda
        - `max_redemptions` integer, nullable — Número máximo de usos
        - `times_redeemed` integer — Número de veces que se ha redimido el descuento
        - `currency` string, nullable — Moneda del descuento fijo
        - `duration` 'once' | 'forever' — Duración del descuento para suscripciones
        - `expires_at` string, date-time, nullable — Fecha de expiración
        - `status` string — Estado del cupón
    - `currency` 'GTQ' | 'USD' — Moneda del checkout
    - `payment_method_types` CheckoutPaymentMethodTypesItems[] — Métodos de pago que se le ofrecerán al comprador en este checkout, ya resueltos según la configuración del producto/cuenta, la moneda y el tipo de cobro: `card` (tarjeta, pago de contado), `bank_transfer` (transferencia bancaria), `stablecoins` (dólares digitales), `balance` (Balance Recurrente). Las cuotas se exponen por separado en `available_installments`; `card` indica pago de contado, así que un checkout puede ofrecer cuotas (`available_installments` no vacío) sin incluir `card`.
    - `available_installments` integer[] — Opciones de cuotas (en meses) disponibles en este checkout, independientes de `payment_method_types`. Vacío si no se ofrecen cuotas.
    - `live_mode` boolean — Si el checkout está en modo producción (true) o prueba (false)
    - `success_url` string — URL de redirección en caso de pago exitoso
    - `cancel_url` string — URL de redirección en caso de cancelación
    - `expires_at` string, date-time — Fecha de expiración del checkout
    - `created_at` string, date-time — Fecha de creación
    - `metadata` union
      - string
      - number, double
      - boolean
    - `items` CheckoutItem[], required — Colección completa de filas mutables del checkout. No incluye descuentos, envío, fees ni prorrateos derivados.
      - `id` string, required — ID estable de esta fila del checkout. Úsalo para modificarla o eliminarla.
      - `price_id` string, required — ID del precio asociado. Puede repetirse en varias filas.
      - `quantity` integer, required — Cantidad absoluta de esta fila.
      - `metadata` union, required
        - string
        - number, double
        - boolean
    - `custom_fields` CheckoutCustomFieldValue[] — Valores recolectados de los campos personalizados. Si el checkout tiene múltiples productos, cada producto contribuye sus propias entradas — la `key` puede repetirse entre productos. Usa `field_id` como identificador canónico al reconciliar valores.
      - `field_id` string — Identificador canónico del campo (estable y único por producto). Úsalo para reconciliar valores; en checkouts con múltiples productos, dos entradas pueden tener la misma `key` pero distinto `field_id`.
      - `key` string — Identificador legible definido por el comerciante. Puede repetirse entre productos en el mismo checkout.
      - `type` 'text' | 'numeric' | 'dropdown'
      - `value` string
    - `transfer_setups` TransferSetup[] — Configuraciones de transferencia asociadas
      - `id` string — ID de la configuración de transferencia
      - `status` 'pending' | 'completed' | 'cancelled' | 'reversed' — En pagos únicos: `pending` mientras el cobro no se completa y `completed` cuando la transferencia se ejecutó. En suscripciones la configuración queda `pending` mientras la suscripción está activa. `cancelled` si el checkout, la suscripción o un reembolso canceló el setup antes de ejecutarlo; `reversed` si un reembolso devolvió una transferencia ya completada.
      - `amount_in_cents` integer, nullable — Monto fijo en centavos a transferir (pagos únicos). No puede exceder el monto neto disponible después de fees, FEL e IVA.
      - `amount_percent` number, double, nullable — Porcentaje del total de cada factura a transferir (suscripciones).
      - `currency` string — Moneda
      - `recipient_id` string — ID de la cuenta de Recurrente que recibe los fondos (no es una cuenta bancaria).
      - `purpose` 'fund_split' | 'platform_commission' — Qué representa la transferencia. `fund_split` (el valor predeterminado) es una distribución ordinaria de fondos: enruta parte del cobro a otra cuenta, sin más consecuencias. `platform_commission` marca la transferencia como la comisión que una cuenta conectada paga a su plataforma — es lo que crean `application_fee_amount` / `application_fee_percent` — y cambia tres comportamientos: solo puede fluir de la cuenta conectada hacia su plataforma (sobre una conexión activa), es la única que un reembolso revierte con `refund_application_fee: true`, y se incluye en la facturación diaria de comisiones (DTE) cuando la conexión la tiene habilitada.
    - `application_fee_amount` integer, nullable — Comisión de plataforma en centavos (pagos únicos): la suma de las transferencias de comisión del checkout. `null` cuando no hay comisión.
    - `application_fee_percent` number, double, nullable — Comisión de plataforma como porcentaje del total de cada factura (suscripciones). `null` cuando no hay comisión.
    - `latest_intent` CheckoutLatestIntent — Último intent unificado asociado. Su `id` usa el prefijo `in_…`.
      - `id` string
      - `type` string
      - `created_at` string, date-time
      - `data` CheckoutLatestIntentData
        - `auth_code` string, nullable
    - `payment` CheckoutPayment — Información del pago (si está pagado)
      - `id` string — ID del pago
      - `paymentable` CheckoutPaymentPaymentable
        - `type` string — Tipo de elemento pagable
        - `id` string — ID del elemento pagable
        - `tax_name` string, nullable — Nombre fiscal del comprador
        - `tax_id` string, nullable — ID fiscal del comprador
        - `address` Address
          - `address_line_1` string, nullable — Línea de dirección 1
          - `address_line_2` string, nullable — Línea de dirección 2
          - `city` string, nullable — Ciudad
          - `region` string, nullable — Región o departamento
          - `country` string, nullable — País
          - `zip_code` string, nullable — Código postal
        - `phone_number` string, nullable — Número de teléfono del comprador
    - `payment_method` CheckoutPaymentMethod — Método de pago utilizado
      - `id` string — ID del método de pago
      - `type` string — Tipo de método de pago
      - `card` CheckoutPaymentMethodCard
        - `last4` string — Últimos 4 dígitos de la tarjeta
        - `expiration_month` integer — Mes de expiración
        - `expiration_year` integer — Año de expiración
        - `network` string — Red de la tarjeta
        - `issuer_name` string, nullable — Nombre del banco emisor
      - `address` Address
        - `address_line_1` string, nullable — Línea de dirección 1
        - `address_line_2` string, nullable — Línea de dirección 2
        - `city` string, nullable — Ciudad
        - `region` string, nullable — Región o departamento
        - `country` string, nullable — País
        - `zip_code` string, nullable — Código postal
      - `phone_number` string, nullable — Número de teléfono asociado al método de pago
  - `payment` UnifiedIntentWebhookPayment
  - `details` UnifiedIntentWebhookDetails — Campos específicos del tipo de pago. Para `type: payment`, incluye `failure_reason`, comisiones, cuotas, canal y productos. Para `type: bank_transfer`, incluye `bank_reference` (referencia asignada por el banco o la red de pago) y `sender_comment` (comentario libre del pagador).
    - `channel` 'POS' | 'Celular como POS' | 'Link de pago' — Origen exacto del cobro con tarjeta. Usa `POS` para una terminal física, `Celular como POS` para cobros desde un teléfono y `Link de pago` para cobros con tarjeta en línea.

## Acknowledgement `200`

Webhook received successfully

---

[API](https://skmtc.dev/recurrente/apis/referencia-api.md) · [All operations](https://skmtc.dev/recurrente/apis/referencia-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/recurrente/referencia-api/revisions/da12dce50f30/schema)
