# Cómo confirmar que un cobro se pagó > La página de éxito no prueba nada. Qué confirma un pago en Pagos Express: el estado succeeded, el webhook payment.succeeded y la sincronización con Stripe. HTML: https://pagos.express/blog/como-confirmar-un-pago Texto para modelos: https://pagos.express/blog/como-confirmar-un-pago.llms.txt Artículo sobre confirmación de pagos con enlaces de cobro. ## El error común Entregar el servicio porque el cliente llegó a la página de éxito. Esa URL puede abrirse sin pagar, compartirse o cargarse tras cerrar el checkout. En Pagos Express la página de éxito consulta el estado real, pero tu sistema no debe depender de ella. ## Qué sí confirma - Estado del pago `succeeded` (GET /v1/payments/{id} o GET /v1/payments?status=succeeded). - Enlace en `paid` con `paidPaymentId` (GET /v1/payment_links/{id}). - Webhook `payment.succeeded` o `payment_link.paid`, verificado con la firma HMAC-SHA256 de `Pagos-Signature`. `pending` significa que el checkout se creó y el cliente no terminó. `failed` y `canceled` dejan el enlace pagable si sigue vigente. ## Si un webhook se perdió Un worker de conciliación revisa los pagos pendientes de forma continua. Para forzar una verificación: POST /v1/payments/{id}/sync, que consulta Stripe y devuelve `outcome` (updated, pending, retrying, needs_review). Nunca reembolsa ni cancela. ## Pagos fuera del checkout Si el cliente transfirió o pagó en efectivo, el comercio lo registra con mark_paid (dashboard, API o agente): el enlace pasa a `paid`, el pago queda como `provider: manual` en `succeeded` y se disparan los mismos webhooks. Puede adjuntar un comprobante. ## Recomendación Trata `succeeded` como la única verdad, deduplica webhooks por `id` y guarda tu `metadata` (número de pedido) en el enlace para relacionar el evento sin otra consulta. ## FAQ **¿La página de éxito confirma el pago?** No. Puede abrirse sin pagar o cargarse tarde. Confirma con el estado succeeded del pago, el enlace en paid o un webhook payment.succeeded verificado. **¿Qué hago si el pago sigue en pending?** Espera: el cliente puede no haber terminado. El worker de conciliación lo revisa solo; si necesitas certeza ahora, llama a POST /v1/payments/{id}/sync. **¿Cómo registro una transferencia SPEI?** Con mark_paid desde el dashboard, la API o el agente. El enlace queda pagado, el pago aparece como manual en succeeded y se disparan los webhooks normales.