External API

Documentación para desarrolladores

Integra pagos online y POS, consulta operaciones y recibe webhooks con la API externa de Avirato Payments.

Manejo de Errores

Formato de error estandar

Todas las respuestas de error siguen este formato:

{
  "success": false,
  "error": {
    "message": "Descripcion legible del error",
    "code": 12001,
    "statusCode": 400,
    "traceId": "abc123def456..."
  }
}
CampoDescripcion
messageDescripcion del error en ingles
codeCodigo interno de error (ver tabla abajo)
statusCodeCodigo HTTP de la respuesta
traceIdIdentificador unico para soporte tecnico

Nota de seguridad: Los errores internos del servidor (5xx) devuelven un mensaje generico ("An error has occurred...") para no exponer detalles de implementacion. El traceId permite al equipo de soporte investigar el error concreto.

Nota sobre entornos: Los codigos de error, formatos y mensajes son identicos en los entornos Live y Test. No hay diferencias en el manejo de errores entre entornos.

Catalogo de codigos de error

Errores de autenticacion y autorizacion (11xxx)

CodigoHTTPDescripcionAccion recomendada
11001403API key invalida o no proporcionadaVerifica la cabecera X-API-KEY
11002403IP no permitidaConfigura tu IP en el dashboard (Integraciones > API Keys)
11008403Acceso denegado al recursoEl webcode no coincide, el pago no pertenece a la External API, o error de entorno

Errores de validacion (12xxx)

CodigoHTTPDescripcionAccion recomendada
12001400Parametro requerido faltante o formato invalidoRevisa los campos obligatorios y sus formatos
12002400Fecha en formato incorrectoUsa formato ISO 8601 (ej: 2026-07-15T14:00:00Z)
12006400Formato de pais invalidoUsa ISO 3166-1 alpha-2 (ej: ES, FR, DE)
12009400Pais no soportadoConsulta con soporte la lista de paises disponibles

Errores de recurso (10xxx)

CodigoHTTPDescripcionAccion recomendada
10404404Recurso no encontradoVerifica que el sessionId o paymentReference sea correcto

Errores de POS (13xxx)

CodigoHTTPDescripcionAccion recomendada
13001500Error del proveedor de pagosReintenta despues de unos segundos. Si persiste, contacta soporte
13004502Error de comunicacion con el terminalVerifica que el terminal esta encendido y conectado
13005409Terminal ocupadoEspera a que termine la transaccion en curso e intenta de nuevo

Conflictos de idempotencia (409)

Estos conflictos no llevan un codigo numerico interno: el mensaje permite distinguirlos del 409 de POS ocupado (13005).

CasoHTTPMensaje (literal)Accion recomendada
Misma Idempotency-Key, body distinto409Idempotency key reused with a different request body.Usa una clave nueva o reenvia el mismo body que la peticion original
Misma Idempotency-Key, otro endpoint409Idempotency key already used for a different endpoint.No reutilizar la misma clave entre endpoints distintos

Errores internos (99xxx)

CodigoHTTPDescripcionAccion recomendada
99001500Error interno del servidorAnota el traceId y contacta soporte

Ejemplo de respuesta de error

{
  "success": false,
  "error": {
    "message": "External device is busy.",
    "code": 13005,
    "statusCode": 409,
    "traceId": "b2f3d36dc305249e8d1ebaa49ef616f1"
  }
}

Buenas practicas

Reintentos

  • Errores 4xx: No reintentes (el problema esta en la peticion)
  • Errores 5xx: Reintenta con backoff exponencial (1s, 2s, 4s, 8s...)
  • 409: si es 13005 (terminal ocupado), espera 5-10 segundos y reintenta. Si el mensaje empieza por Idempotency key…, no reintentes a ciegas: corrige la clave o el body de la peticion
  • Siempre usa Idempotency-Key para que los reintentos sean seguros (pero asegurate de no reutilizarla con body distinto)

Logging

Registra el traceId de las respuestas de error para facilitar la comunicacion con soporte tecnico.

Validacion previa

Valida los datos antes de enviar la peticion para evitar errores 400:

  • amount.value debe ser un entero positivo (centimos)
  • amount.currency debe ser exactamente 3 letras mayusculas (EUR, GBP o USD)
  • webcode no puede estar vacio
  • URLs (urlOk, urlKo) deben ser URLs validas con protocolo
  • reason en reembolsos debe ser uno de los 5 valores exactos permitidos