Saltar al contenido principal

Errores

Todas las respuestas de error de /v1 tienen la misma forma:

{
"error": {
"code": "PAYMENT_INVALID_STATE",
"message": "El payment intent no admite esa operación en su estado actual",
"request_id": "3e29bd22-e528-4d10-8f11-f808b88d42dd",
"details": {}
}
}
  • Usa code para decidir qué hacer: es estable. message es para personas y puede cambiar.
  • request_id identifica tu llamada. Inclúyelo al pedir soporte. Toda respuesta, exitosa o no, trae el mismo valor en el header X-Correlation-Id; si tú envías ese header, se respeta tu valor, así puedes seguir la llamada con tu propio id.
  • details trae información adicional cuando aplica (por ejemplo, los campos inválidos o retry_after_seconds).
  • Nunca se exponen errores internos ni respuestas crudas del proveedor.

Códigos​

CódigoHTTPQué pasóQué hacer
AUTH_INVALID_API_KEY401falta la API key o no es válidarevisa Authorization: Bearer pay_…
AUTH_KEY_REVOKED401la API key fue revocadausa una vigente
RATE_LIMIT_EXCEEDED429tu aplicación superó el límite de solicitudesespera details.retry_after_seconds y reintenta
VALIDATION_ERROR400body, parámetros o headers inválidos (incluye Idempotency-Key faltante)corrige según details
SANDBOX_SCENARIO_NOT_ALLOWED400enviaste X-Sandbox-Scenario con una aplicación de producciónquita el header
IDEMPOTENCY_CONFLICT409la Idempotency-Key ya se usó con otro bodyusa una clave nueva por operación
PAYMENT_NOT_FOUND404el intent o payment no existe en tu organizaciónrevisa el id
PAYMENT_INVALID_STATE409la operación no aplica al estado actual (o el pago cambió mientras tanto)reobtén el intent y decide
PAYMENT_ALREADY_TERMINAL409el intent ya terminó (FAILED, CANCELLED, EXPIRED, REFUNDED)crea un intent nuevo si corresponde
CONNECTOR_NOT_CONFIGURED422el proveedor pedido no está habilitado para tu comerciousa auto o pide habilitarlo
CONNECTOR_UNAVAILABLE503no hay un proveedor disponible en este momentoreintenta más tarde
REFUND_AMOUNT_INVALID422la devolución supera lo autorizado menos lo ya devueltoajusta el monto
MERCHANT_ACCOUNT_NOT_FOUND404el comercio no existe en tu organizaciónrevisa merchant_account_id
CONNECTOR_CONFIG_NOT_FOUND404ese proveedor no está configurado para el comerciorevisa el id
CONNECTOR_CONFIG_ALREADY_EXISTS409ese proveedor ya está configurado para el comercioactualízalo con PATCH
API_CREDENTIAL_NOT_FOUND404la API key a revocar no existe en tu aplicaciónrevisa el id
WEBHOOK_ENDPOINT_URL_NOT_ALLOWED400la URL del webhook no cumple las reglas del ambientever Webhooks
WEBHOOK_ENDPOINT_NOT_FOUND404el endpoint no existe en tu aplicaciónrevisa el id
WEBHOOK_DELIVERY_NOT_FOUND404la entrega no existe para ese endpointrevisa el id
WEBHOOK_DELIVERY_ALREADY_SUCCEEDED409esa entrega ya fue exitosano hace falta reintentarla
PAYLOAD_TOO_LARGE413el body es demasiado grandeenvía solo los campos del contrato
INTERNAL_ERROR500error inesperadoreintenta; si persiste, reporta el request_id

Reintentos seguros​

  • Reintentar una operación con la misma Idempotency-Key nunca crea un segundo cobro.
  • Ante 5xx, 429, 503 o timeouts, reintenta con backoff exponencial.
  • Ante otros 4xx, no reintentes sin corregir el request. Ver Idempotencia.

Límite de solicitudes​

Cada aplicación tiene un límite de solicitudes por ventana de tiempo (por defecto, 120 por minuto). Al superarlo recibes 429 RATE_LIMIT_EXCEEDED con details.retry_after_seconds. Si tu volumen necesita más, pídelo al habilitar tu aplicación.