AERYA API v1.0
OpenAPI
Arquitectura de Conectividad

Suite Aerya B2B Integrators API

Plataforma canónica para que aerolíneas comerciales, agencias y sistemas de distribución consulten disponibilidad en tiempo real, coticen tarifas homologadas, emitan PNRs directamente en sus PSS (KIU / Amadeus / Propietarios) y cobren a través de PayHub.

Producción (Live)
https://api.suite-aerya.com

Emisión directa de PNRs reales y liquidación financiera PayHub.

Staging & Sandbox
https://staging-api.suite-aerya.com

Ambiente sandbox para pruebas de homologación y simulación de pagos.

Local Dev Runners
http://localhost:8001 (client)

Puerto 8001 para Backoffice/Client y 8000 para User Service.

Autenticación por Service Account

Todas las solicitudes B2B deben enviar el token Bearer en la cabecera estándar.

Cabecera de Autorización:
Authorization: Bearer sa_live_83b2a7d4e1c2b5...
Tenant Scoping Obligatorio:
X-Organization-Id: rutaca

El valor de X-Organization-Id asegura aislamiento estricto de catálogos de vuelos, tarifas, reservas y credenciales PSS entre aerolíneas.

Estándar de Errores RFC 7807 (Problem Details)

Respuestas predecibles y estructuradas con tipo MIME application/problem+json.

RFC 7807 / 9457

Ejemplo de respuesta devuelta ante un error de validación o conflicto:

{
  "type": "https://api.suite-aerya.com/errors/validation-error",
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "El campo 'origin' debe ser un código IATA válido de 3 letras.",
  "instance": "/api/v1/integrators/flights/search",
  "code": "VALIDATION_ERROR",
  "trace_id": "9f83b2a7-d4e1-4c2b-9513-1b731ca356ed",
  "request_id": "req-05d8cfee910e",
  "timestamp": "2026-09-16T13:30:00Z",
  "invalid_params": [
    {
      "name": "origin",
      "reason": "Expected 3 uppercase letters matching airport database",
      "location": "body"
    }
  ]
}

Trazabilidad Distribuida (W3C & Request ID)

Monitoreo extremo a extremo de cada transacción a través de la infraestructura.

X-Request-Id

Identificador único correlacionado en logs estructurados JSON y respuestas de error.

X-Trace-Id

Identificador W3C Trace Context propagado hacia Google Cloud Trace / Cloud Logging.

X-API-Version

Retornado en todas las respuestas salientes como 1.0.

Idempotencia IETF en Operaciones Mutantes

Evita emisiones de PNR duplicadas o dobles cobros ante reintentos automáticos.

IETF Draft

Envíe un identificador único UUIDv4 en la cabecera Idempotency-Key para cualquier petición POST a /api/v1/integrators/reservations o /api/v1/integrators/payments/checkout.

Replay Automático

Respuestas previas cacheadas 24h con X-Cache-Lookup: HIT.

Bloqueo de Concurrencia

Llamadas concurrentes reciben 409 CONCURRENT_REQUEST.

Validación Payload

Reuso con payload alterado devuelve 422 MISMATCH.

Rate Limiting por Ventana Deslizante (RFC 429)

Protege la capacidad operativa del PSS y la infraestructura de cobro.

Cada respuesta HTTP incluye el estado de cuota en las cabeceras estándar:

Límite Total: X-RateLimit-Limit: 100
Cupo Restante: X-RateLimit-Remaining: 94
Tiempo de Reinicio: X-RateLimit-Reset: 1773719460

Webhooks con Firma HMAC-SHA256

Entrega garantizada de eventos de estado de reservas y confirmaciones de pago.

Anti-Replay 5m
Formato de Cabecera:
X-Aerya-Signature: t=1773719400,v1=5264b38d35f49ef47bc2a6f87d3a2410a8c2b7f32901c...
Código de Verificación
import hmac
import hashlib
import time

def verify_aerya_webhook(raw_body: bytes, sig_header: str, secret: str) -> bool:
    """Verifica autenticidad y previene ataques de repetición."""
    parts = dict(p.strip().split("=", 1) for p in sig_header.split(","))
    timestamp = int(parts["t"])
    signature = parts["v1"]

    # 1. Ventana de tolerancia anti-repetición de 5 minutos (300s)
    if abs(time.time() - timestamp) > 300:
        return False

    # 2. Computar HMAC sobre "{timestamp}.{body}"
    payload = f"{timestamp}.".encode("utf-8") + raw_body
    computed = hmac.new(secret.encode("utf-8"), payload, hashlib.sha256).hexdigest()

    # 3. Comparación en tiempo constante para mitigar timing attacks
    return hmac.compare_digest(computed, signature)
Simulador y Validador HMAC en Vivo
Web Crypto API

Calcula en tiempo real la firma criptográfica para probar tu implementación local sin enviar solicitudes al servidor.

Catálogo de Endpoints Canónicos

Especificación técnica interactiva con ejemplos de carga y respuesta.

POST /api/v1/integrators/flights/quote
POST /api/v1/integrators/reservations
GET /api/v1/integrators/reservations/{pnr_or_id}
POST /api/v1/integrators/reservations/cancel
POST /api/v1/integrators/payments/checkout
CRUD /api/v1/integrators/webhooks