Desde tu sistema · Errores y rechazos
Docs · Desde tu sistema Descargar .md

Errores y rechazos

Cuando la API responde con error

El cuerpo siempre trae error y, a veces, detail:

json
{ "error": "validation", "detail": { "fieldErrors": { "monto": ["Number must be greater than 0"] } } }
HTTPerrorQué pasóQué haces
400validationUn campo falta o no es válido. Al listar enlaces con un filtro que no se entiende, viene además parametro con su nombre y detail es un textoRevisa detail (y parametro)
401unauthorizedFalta la llave, está mal escrita o fue revocadaRevisa x-switch-key
403comercio_suspendidoTu comercio está suspendido: no se pueden crear enlaces ni lotes (ni de prueba ni de producción)Escríbenos para reactivarlo
403requiere_llave_liveCon una llave de prueba intentaste crear o revocar una llave de producciónUsa una sk_live_ → Llaves
404not_foundEse cobro no existe o no es de tu comercioRevisa el id
409p. ej. item_duplicadoConflicto: en un lote, una idempotency_key de ítem ya usadaRevisa detail
409limite_webhooksYa tienes 10 webhooks registradosBorra uno que no uses → Webhooks
422destino_bloqueadoLa URL del webhook apunta a una red internaUsa una URL pública → Webhooks
400 / 422 / 503split_…El pago dividido no está activo, el reparto no es válido, una cuenta no está aprobada en el portal o un control de seguridad la frena→ Pago dividido
409idempotency_key_en_usoEsa idempotency_key ya la usaste con una llave del otro modo (prueba o producción)Usa otra llave de idempotencia
409tope_diario_excedido / tope_acumulado_excedidoAl pedir la clave de pago (página de pago, WhatsApp Flow o POST /cobrar/token): ese cobro pasaría el tope de lo que tu cuenta puede recibir hoy o en total. Trae motivo (el texto para tu cliente); con tu llave, además tope y usado (en Bs) y, si tu tope está en dólares, topes_moneda, tope_usd y tasa_bcvTu cliente no paga ahora; escríbenos si necesitas más tope → Límites
429—Pasaste el límite de peticionesEspera y reintenta → Límites
503cierre_bancarioEn la página de pago, al pedir la clave entre las 11:45 p. m. y la 1:30 a. m. (hora de Venezuela): los bancos están en su cierre diario. Trae motivo (el texto para tu cliente) y reintentar_en (segundos hasta que termine)Tu cliente paga después de la 1:30 a. m. con el mismo enlace → Cierre diario
5xx—Falla nuestraReintenta con la misma idempotency_key

Cuando el banco rechaza el pago

Eso no te llega como error de la API: tu cliente lo ve en la página de pago ("El banco no aprobó el pago") y puede intentarlo otra vez con una clave nueva. El cobro sigue pendiente hasta que lo pague o venza.

Si tu comercio está suspendido

Mientras dure la suspensión:

  • Crear enlaces (POST /links) o lotes (POST /lotes) responde 403 con { "error": "comercio_suspendido" }.
  • Un enlace que estaba pendiente no se puede empezar a pagar: tu cliente ve "Este comercio no está recibiendo pagos" y no se le cobra nada.
  • Lo que ya se estaba pagando (cobrando, procesando, revision) termina normalmente, y el dinero de lo ya pagado se te sigue liquidando.
  • Consultar y listar tus enlaces sigue funcionando.

Reintentar sin duplicar

Si una creación falla por red o por un 5xx, reintenta con la misma idempotency_key: si el primer intento sí llegó, recibes el mismo enlace en vez de uno nuevo.

json
{ "monto": 150, "concepto": "Pedido #1024", "idempotency_key": "pedido-1024" }