Skip to content

Idempotencia y manejo de errores ​

Idempotencia ​

Toda operación que crea un cobro (POST /v1/payments, POST /v1/payment_links/{id}/pay) requiere el header Idempotency-Key:

Idempotency-Key: 6e4b6f0a-a5f0-4b9a-9b8b-1a2b3c4d5e6f
  • Debe tener al menos 8 caracteres. Un UUID v4 es una buena opción.
  • Usa una llave distinta por cada intento de cobro real, y la misma llave si estás reintentando la misma petición (por ejemplo, tras un timeout de red).
  • Si falta el header, la petición se rechaza con 400 idempotency_key_required antes de intentar nada.

Sin esto, un reintento por timeout de tu lado podría crear dos cobros para el mismo intento del cliente — el mecanismo de idempotencia de Paytami evita exactamente ese caso.

Formato de un error ​

Todo error de la API pública tiene la misma forma:

json
{
  "error": {
    "code": "amount_below_minimum",
    "message": "El monto mínimo es 1000"
  }
}

Usa siempre error.code para lógica de programa — error.message es texto legible para humanos y puede cambiar de redacción sin previo aviso.

Catálogo de códigos de error ​

CódigoHTTPSignificado
unauthorized401La api_key falta, es inválida, fue revocada o expiró.
validation_error400El cuerpo o los parámetros de la petición no cumplen el formato esperado.
idempotency_key_required400Falta el header Idempotency-Key, o mide menos de 8 caracteres.
idempotency_key_reused409Ya existe un cobro distinto creado con esa misma llave de idempotencia.
amount_below_minimum400El monto es menor al mínimo permitido para esa moneda o enlace.
amount_above_maximum400El monto excede el máximo permitido para esa moneda o enlace.
amount_required400El enlace de pago es de monto variable y no se indicó amount.
currency_not_supported400La moneda no está habilitada para tu comercio.
method_not_supported400El método de pago no está disponible para esa moneda o comercio.
unknown_payment404El id de pago no existe, o no pertenece al comercio autenticado.
unknown_payment_link404El enlace de pago no existe.
payment_not_payable409El pago ya no admite cobro (ya se pagó, venció, o se canceló).
payment_link_not_payable409El enlace ya no admite pago (venció, se agotó, o está inactivo).
payment_not_refundable400El pago no está en un estado que admita reembolso.
refund_amount_exceeds_remaining400El monto a reembolsar excede lo que queda disponible del cobro.
rate_limited429Demasiados intentos sobre un enlace de pago en poco tiempo.
processor_unavailable503El procesamiento no está disponible en este momento — reintenta más tarde.
internal_error500Error inesperado del lado de Paytami.

TIP

Este catálogo es cerrado y propio de Paytami. Si ves un código que no está en esta tabla, repórtalo — no es un caso que debas manejar como si fuera parte del contrato.

Estados de un pago ​

status en la respuesta de un Payment es siempre uno de estos valores:

EstadoSignificado
createdEl cobro se creó y espera que el cliente complete el pago.
processingEl cliente está completando el pago (por ejemplo, una transferencia bancaria en curso).
authorizedEl método de pago autorizó el cobro, pendiente de captura.
capturedEl dinero fue capturado del cliente.
pending_settlementPendiente de liquidación hacia Paytami.
settled_to_paytamiPaytami ya recibió los fondos.
available_to_merchantLos fondos están disponibles para tu comercio.
partially_refundedSe reembolsó parte del monto original.
refundedSe reembolsó el monto total.
chargebackEl cliente disputó el cobro ante su banco/emisor.
failedEl intento de pago falló.
canceledEl cobro se canceló antes de completarse.
expiredEl cobro venció sin que el cliente completara el pago.

Para efectos de "¿puedo redirigir al cliente a pagar esto?", solo created, processing y authorized admiten pago — cualquier otro estado significa que el cobro ya se resolvió, de una forma u otra.

Documentación oficial de Paytami