Qué significa
El cliente completó la interacción con una sesión de checkout y Cobrix aceptó la evidencia del pago. El evento se emite una sola vez aunque la verificación automática siga en cola, no encuentre la transacción o requiera revisión manual.No habilites un servicio ni marques dinero como confirmado usando únicamente este evento. Espera
payment.succeeded, que representa la confirmación financiera.Payload completo
{
"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": "[email protected]",
"phone": "+584120000000",
"taxId": "V12345678",
"externalRef": "customer-1001",
"metadata": null,
"customerCode": "C-1001",
"labels": [],
"status": "active",
"customFieldsData": null,
"type": "individual",
"address": null
},
"amount": 12.5,
"amountMinor": 1250,
"amountSource": "ocr",
"documentAmountDue": 25,
"documentAmountDueMinor": 2500,
"documentCurrency": "USD",
"expectedAmount": 12.5,
"expectedAmountMinor": 1250,
"isPartialPayment": false,
"appliedAmount": 0,
"appliedAmountMinor": 0,
"remainingBalance": 25,
"remainingBalanceMinor": 2500,
"verification": {
"status": "queued",
"attemptCount": 0,
"automaticApproval": false,
"provider": null,
"lastOutcome": null
},
"currency": "VES",
"method": "pagoMovil",
"payment": {
"id": "pay_842f7712",
"companyId": "7d355d52-ac74-49f5-b31c-ce29b4680752",
"companyCustomerId": "cc_8aa37fd1",
"checkoutSessionId": "cs_5e52b98d",
"subscriptionId": null,
"status": "pending",
"reconciliationStatus": "unmatched",
"amount": 12.5,
"amountMinor": 1250,
"currency": "VES",
"referenceAmountMinor": 2500,
"referenceCurrency": "USD",
"provider": null,
"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": {
"targetCurrency": "USD",
"rate": 0.5,
"rateDate": "2026-07-18T02:14:48.521Z",
"rateSource": "manual",
"convertedAmount": 25,
"convertedAmountMinor": 2500
}
},
"paymentMethod": {
"kind": "pago_movil",
"method": "pagoMovil",
"label": "Pago móvil",
"channel": "proof",
"provider": "pago_movil",
"isManual": false,
"requiresReconciliation": true,
"receiver": null,
"receiverCheck": null,
"submitted": null,
"review": {
"requiresReview": false,
"reasons": [],
"ocrVerdict": null,
"ocrConfidence": null
}
},
"documents": [
{
"invoiceId": "inv_d64d7b11",
"invoiceNumber": "DOC-1001",
"externalInvoiceId": "erp-1001",
"source": "erp_acme",
"currency": "USD",
"remainingBalanceMinor": "2500",
"metadata": {
"serviceId": "svc-1001",
"plan": "Internet 200 Mbps"
}
}
],
"paymentReference": "000123456",
"status": "pending",
"subscriptionId": null,
"paidAt": null,
"exchange": {
"targetCurrency": "USD",
"rate": 0.5,
"rateDate": "2026-07-18T02:14:48.521Z",
"rateSource": "manual",
"convertedAmount": 25,
"convertedAmountMinor": 2500
},
"reconciledAt": null,
"requiresReview": false,
"reviewReasons": []
}
}
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.amountMinor, data.currency | Registrar el dinero detectado en el comprobante. Cuando amountSource es ocr, estos campos nunca representan el total de la deuda como fallback. |
data.expectedAmountMinor | Auditar el monto que el cliente eligió y que el OCR debía confirmar exactamente. |
data.documentAmountDueMinor, data.documentCurrency | Conservar la deuda congelada al enviar el checkout, en la moneda del documento. |
data.appliedAmountMinor, data.remainingBalanceMinor | Mostrar 0 aplicado y el saldo intacto mientras el pago siga pendiente. Ambos están en documentCurrency. |
data.verification | Observar si el intento está en cola, fue ejecutado o requiere revisión; no equivale por sí solo a confirmación financiera. |
data.documents[].metadata | Recuperar la metadata pública almacenada en cada documento relacionado. |
data.paymentMethod.review | Detectar si el comprobante requiere revisión. |
Respuesta
Después de verificar y guardar el evento, devuelve cualquier2xx, preferiblemente 200.
