Docs/Manejo de errores

Manejo de errores

Comprenda y gestione los errores de la API de Fivo.

Formato de respuesta de error

Todos los errores de la API siguen un formato consistente:

Error Response Structure
{
  "success": false,
  "error": "Human-readable error message",
  "details": [
    {
      "field": "amount",
      "message": "Must be a positive number"
    }
  ]
}

Códigos de estado HTTP

200OK

Solicitud exitosa

201Created

Recurso creado correctamente

400Bad Request

Datos de solicitud inválidos o error de validación

401Unauthorized

Autenticación ausente o inválida

403Forbidden

No tiene autorización para acceder a este recurso

404Not Found

Recurso no encontrado

429Too Many Requests

Límite de frecuencia excedido

500Internal Error

Error del servidor. Contacte con soporte

Errores comunes

Errores de validación (400)

Datos de entrada inválidos

El cuerpo de la solicitud no coincide con el esquema esperado. Compruebe el array para errores de campos específicos.details

json
{
  "success": false,
  "error": "Invalid input data",
  "details": [
    {"path": ["amount"], "message": "Expected number, received string"},
    {"path": ["token"], "message": "Invalid enum value. Expected 'USDC' | 'EURC'"}
  ]
}
Monto inválido

El monto debe estar entre 0.01 y 1.000.000.

Dirección del comerciante inválida

La no coincide con la dirección del wallet del comerciante.toAddress

Errores de autenticación (401/403)

No se proporcionó token

El endpoint protegido requiere autenticación. Incluya el encabezado o .AuthorizationX-API-Key

Token inválido o expirado

El token JWT ha expirado (duración de 15 min) o está mal formado. Vuelva a autenticarse para obtener un nuevo token.

API key inválida

API key no encontrada o ha sido revocada. Compruebe que está usando la clave correcta.

Errores de recurso (404)

Comerciante no encontrado

No existe ningún comerciante con el ID proporcionado. Verifique su .merchantId

Pago no encontrado

No existe ningún pago con el ID proporcionado. Compruebe que el ID del pago es correcto.

El pago ya existe

Ya existe un pago con este . La API devuelve con los datos del pago existente. Esto previene ataques de doble gasto.txHash200

Códigos de error de la API

Cuando ocurre un error, la respuesta incluye un campo legible por máquina que puede usar para el manejo programático de errores:code

Error Response with Code
{
  "success": false,
  "error": "Human-readable message",
  "code": "RATE_LIMIT_EXCEEDED",
  "retryAfter": 60
}

Códigos de error generales

RATE_LIMIT_EXCEEDED429

Límite de frecuencia excedido para este endpoint

INVALID_UUID_FORMAT400

El parámetro ID no es un UUID válido

MISSING_PARAMETER400

Falta un parámetro obligatorio

2FA_REQUIRED403

La operación requiere que 2FA esté habilitado

2FA_CODE_REQUIRED400

No se proporcionó el código 2FA

2FA_INVALID401

El código 2FA es incorrecto o ha expirado

SELF_TRANSFER_NOT_ALLOWED400

No se puede retirar a su propio wallet de Fivo

INVALID_MERCHANT_ID400

El formato del Merchant ID es inválido

WEBHOOK_LIMIT_REACHED400

Número máximo de webhooks por comerciante alcanzado

REFUND_WINDOW_EXPIRED400

La ventana de reembolso (180 días) ha expirado

REFUND_EXCEEDS_REMAINING400

El monto excede el saldo reembolsable

PAYMENT_NOT_COMPLETED400

El pago no está en estado completado

NO_SOURCE_ADDRESS400

El pago no tiene dirección de origen

REFUND_NOT_CANCELABLE400

El reembolso no está en estado pendiente

Códigos de error de blockchain

Estos códigos aparecen en el campo de los pagos fallidos:failure_reason

E001

Fondos insuficientes en el wallet del remitente

E002

La transacción fue revertida en la cadena

E003

Tiempo de espera de red agotado durante la transacción

E004

Dirección de wallet inválida

E005

Error en la estimación de gas

E006

El usuario canceló la transacción

E007

Error en la atestación CCTP

E999

Error de blockchain desconocido

Límites de frecuencia

Cuando exceda los límites de frecuencia, recibirá una respuesta 429 con encabezados adicionales:

Rate Limit Response
HTTP/1.1 429 Too Many Requests
Retry-After: 60
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1705312800

{
  "success": false,
  "error": "Rate limit exceeded",
  "message": "Too many requests. Please retry after 1 minute.",
  "code": "RATE_LIMIT_EXCEEDED",
  "retryAfter": 60,
  "context": "general"
}

Encabezados de límite de frecuencia

EncabezadoDescripción
Retry-AfterSegundos a esperar antes de reintentar
X-RateLimit-LimitSolicitudes máximas permitidas en la ventana
X-RateLimit-RemainingSolicitudes restantes en la ventana actual
X-RateLimit-ResetMarca de tiempo Unix de cuándo se restablece el límite

Límites de frecuencia por endpoint

Endpoints de API Key

200 req / 1 minute

Per: API Key

API general

100 req / 1 minute

Per: IP

Creación de pago (widget)

20 req / 1 minute

Per: IP

Inicio de sesión

5 req / 5 minutes

Per: IP + email

Registro

3 req / 15 minutes

Per: IP

Restablecimiento de contraseña

3 req / 15 minutes

Per: IP + email

Verificación 2FA

5 req / 5 minutes

Per: IP

Retiros

10 req / 10 minutes

Per: IP

Formulario de contacto

3 req / 15 minutes

Per: IP

i

Buena práctica

Implemente retroceso exponencial cuando reciba errores 429. Comience con el valor de y aumente el tiempo de espera en reintentos sucesivos.Retry-After

Errores entre cadenas

Los pagos entre cadenas son gestionados del lado del cliente por Bridge Kit en el widget. Si la transferencia falla (por ejemplo, tiempo de espera en la atestación, error en el mint), el widget muestra el error directamente al cliente. Estos errores no llegan a la API del backend.

Si un pago entre cadenas falla después de la transacción de burn, el cliente puede contactar con soporte proporcionando su hash de transacción. Los pagos fallidos almacenan el error en el campo , accesible a través de la API de estado de pago.failure_reason

Detección de fraude

Fivo incluye detección de fraude integrada. Estos errores indican posibles ataques:

Error en la verificación del monto del pago

El monto declarado no coincide con el monto real de la transacción en blockchain. Esto podría indicar un intento de manipulación de registros de pago.

!

Seguridad

Los intentos de fraude se registran con todos los detalles (IP, dirección de wallet, transacción). Los intentos repetidos pueden resultar en bloqueo de IP.

Ejemplo de manejo de errores

Así es como debe manejar correctamente los errores de la API en su código:

JavaScript Error Handling
async function createCheckoutSession(data) {
  try {
    const response = await fetch('https://api.fivo.finance/checkout/sessions', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'X-API-Key': process.env.FIVO_API_KEY
      },
      body: JSON.stringify(data)
    });

    const result = await response.json();

    if (!response.ok) {
      // Handle specific error codes
      switch (response.status) {
        case 400:
          console.error('Validation error:', result.details);
          throw new Error('Invalid session data');

        case 401:
          console.error('Authentication failed');
          throw new Error('Please check your API key');

        case 429:
          const retryAfter = response.headers.get('Retry-After');
          console.log(`Rate limited. Retry after ${retryAfter}s`);
          throw new Error('Too many requests');

        default:
          throw new Error(result.error || 'Unknown error');
      }
    }

    return result.data;
  } catch (error) {
    console.error('Checkout session failed:', error.message);
    throw error;
  }
}

¿Sigue teniendo problemas?

Si encuentra un error no listado aquí, contacte con soporte proporcionando:

  • La respuesta de error completa
  • Detalles de la solicitud (endpoint, método, cuerpo)
  • ID de pago o hash de transacción (si aplica)
  • Marca de tiempo de cuándo ocurrió el error
Contactar con soporte