12 de junio de 2026
¿Qué significan los status y status_detail de MercadoPago y cómo los manejo en mi backend?
Un pago en MercadoPago tiene 5 estados: approved, pending, in_process, rejected, cancelled. El campo status_detail da el motivo específico. cc_rejected_insufficient_amount viene del banco (fondos); cc_rejected_high_risk es bloqueo antifraude de MP. Cada caso requiere una acción diferente en el backend.
Mapa de estados y acciones recomendadas
| status | status_detail | Causa | Acción |
|---|---|---|---|
approved | accredited | Pago acreditado | Procesar el pedido |
pending | pending_waiting_payment | Pago en efectivo generado | Esperar webhook de actualización |
in_process | pending_review_manual | MP revisando manualmente | Esperar — puede tardar horas |
rejected | cc_rejected_insufficient_amount | Fondos insuficientes | Sugerir otro medio de pago |
rejected | cc_rejected_bad_filled_card_data | Datos de tarjeta incorrectos | Pedir revisar número/vencimiento/CVV |
rejected | cc_rejected_call_for_authorize | Banco requiere autorización | Sugerir llamar al banco |
rejected | cc_rejected_card_disabled | Tarjeta deshabilitada | Sugerir otro medio |
rejected | cc_rejected_duplicated_payment | Pago duplicado detectado | No reintentar sin cambiar params |
rejected | cc_rejected_high_risk | Bloqueo antifraude de MP | No reintentar automáticamente |
cancelled | expired | Timeout / link expirado | Generar nueva preferencia |
Regla crítica sobre reintentos
El cc_rejected_duplicated_payment se dispara cuando dos pagos consecutivos tienen los mismos parámetros. Nunca reintentes automáticamente sin cambiar algún parámetro del item o agregar un external_reference único.
Nota: la documentación oficial de MP usa formas cortas como insufficient_amount (sin prefijo cc_rejected_) en algunos contextos. Usar la API GET /v1/payments/{id} para obtener el status_detail real del pago.