> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cobrix.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Checkout completado

> El cliente terminó el flujo de checkout

<span className="cobrix-event-name">checkout.session.completed</span>

## Qué significa

El cliente completó la interacción con una sesión de checkout y Cobrix persistió el pago relacionado. Sirve para registrar el cierre del flujo, analítica o automatizaciones posteriores al checkout.

<Warning>
  No habilites un servicio ni marques dinero como confirmado usando únicamente este evento. Espera `payment.succeeded`, que representa la confirmación financiera.
</Warning>

## Payload completo

```json theme={null}
{
  "id": "evt_53a7e421-2ed4-4a57-ae28-51ed39437db2",
  "event": "checkout.session.completed",
  "created_at": "2026-07-14T16:00:00.000Z",
  "api_version": "2025-01-21",
  "data": {
    "paymentId": "pay_842f7712",
    "checkoutSessionId": "cs_5e52b98d",
    "companyId": "7d355d52-ac74-49f5-b31c-ce29b4680752",
    "customer": {
      "companyCustomerId": "cc_8aa37fd1",
      "name": "Ana Pérez",
      "email": "ana@example.com",
      "phone": "+584120000000",
      "taxId": "V12345678",
      "externalRef": "customer-1001",
      "metadata": null,
      "customerCode": "C-1001",
      "labels": [],
      "status": "active",
      "customFieldsData": null,
      "type": "individual",
      "address": null
    },
    "amount": 20,
    "amountMinor": 2000,
    "currency": "USD",
    "method": "pago_movil",
    "payment": {
      "id": "pay_842f7712",
      "companyId": "7d355d52-ac74-49f5-b31c-ce29b4680752",
      "companyCustomerId": "cc_8aa37fd1",
      "checkoutSessionId": "cs_5e52b98d",
      "subscriptionId": null,
      "status": "submitted",
      "reconciliationStatus": "pending",
      "amount": 20,
      "amountMinor": 2000,
      "currency": "USD",
      "referenceAmountMinor": null,
      "referenceCurrency": null,
      "provider": "manual",
      "providerChargeId": null,
      "hasPaymentReference": true,
      "paymentReference": "000123456",
      "paymentReferenceMasked": "*****3456",
      "hasProof": true,
      "paidAt": null,
      "valueDate": "2026-07-14T00:00:00.000Z",
      "createdAt": "2026-07-14T15:59:40.000Z",
      "updatedAt": "2026-07-14T16:00:00.000Z",
      "exchange": null
    },
    "paymentMethod": {
      "kind": "pago_movil",
      "method": "pagoMovil",
      "label": "Pago móvil",
      "channel": "proof",
      "provider": "manual",
      "isManual": false,
      "requiresReconciliation": true,
      "receiver": null,
      "receiverCheck": null,
      "submitted": null,
      "review": {
        "requiresReview": false,
        "reasons": [],
        "ocrVerdict": null,
        "ocrConfidence": null
      }
    },
    "paymentReference": "000123456",
    "status": "succeeded",
    "subscriptionId": null,
    "paidAt": "2026-07-14T16:00:00.000Z",
    "exchange": null,
    "reconciledAt": null
  }
}
```

## Campos que debes usar

| Campo                       | Uso recomendado                                              |
| --------------------------- | ------------------------------------------------------------ |
| `data.checkoutSessionId`    | Correlacionar la sesión mostrada al cliente.                 |
| `data.paymentId`            | Vincular eventos posteriores del mismo pago.                 |
| `data.customer`             | Identificar al cliente dentro de la empresa.                 |
| `data.payment.status`       | Mostrar el estado persistido, no decidir confirmación final. |
| `data.paymentMethod.review` | Detectar si el comprobante requiere revisión.                |

Consulta todos los campos en [Modelos compartidos](/guides/webhooks/data-models).

## Respuesta

Después de verificar y guardar el evento, devuelve cualquier `2xx`, preferiblemente `200`.
