Providers Overview
Nexa talks to the outside world through adapters. Every external system — a hotel GDS, a booking engine, an email provider, a PSP, an LLM — is hidden behind a thin, interface-typed adapter. As a customer, the orchestration layer never changes when you switch providers (or run two in parallel) — it's tenant configuration, not a code release.
What this gives you
- Vendor-independence — swap Amadeus for Hotelbeds without changing how cases or policies behave.
- Sandbox parity — sandbox tenants run against limited sandbox providers, so you exercise the entire pipeline with no live credentials.
- Graceful degradation — a failing provider is disabled per tenant; traffic shifts to the surviving providers without operator action.
Provider categories
| Category | Default providers | Sandbox |
|---|---|---|
| Hotel inventory | Amadeus, Hotelbeds, Direct contracts | Limited GDS (synthetic inventory) |
| Hotel booking | Amadeus, Hotelbeds, Direct contracts | Limited GDS |
| Email / vouchers | SendGrid (per-tenant sub-user) | Limited delivery channel — captures sends in audit |
| Payment | Per-tenant PSP | Limited PSP — deterministic tokens |
| Ground transport | Per-tenant transport partner | Limited transport |
| AI agents (exception agent, policy synthesizer) | Nexa Trained Models on Google | Disabled — toggle on per tenant |
| Flight disruption predictor | Nexa Trained Model on Google | Deterministic baseline used as fallback |
Enabling / disabling providers
Tenant admins toggle providers in the operations console under Settings → Providers. Each toggle picks both the search strategy and the failover order:
- merge-all — every provider runs in parallel, results are deduplicated (default).
- first-success — providers run in priority order; stop after the first non-empty result.
Booking is always single-provider per reservation (the provider that surfaced the selected offer), so there is no booking strategy flag.
Provider selection at allocation time
The allocator selects the cheapest offer per deduplicated hotel. With direct contracts in the mix, the tiebreaker prefers contracts because:
- Rate is locked (no surprise at check-in).
- Inventory update is instantaneous (Nexa decrements its own count).
- The savings-vs-market field gives finance a clean report.
Rate limits and backoff
Every provider adapter honors the vendor's rate limit and retries on transient errors:
| Provider | Rate limit handling | Retry on |
|---|---|---|
| Amadeus | 1 req/sec soft, OAuth token refresh before expiry | 401, 429, 5xx |
| Hotelbeds | HMAC-signed per request; per-minute caps | 429, 5xx |
| SendGrid | per-second/per-day quotas | 429, 5xx |
Retries are bounded (default: 3 attempts, exponential backoff 1s→4s). Permanent errors bubble up immediately.
Observability
Every provider call is logged with:
- Correlation ID (traces through the queue)
- Provider name + endpoint
- Duration + status
- Idempotency key
Per-tenant Grafana dashboards (provider call volume, latency, error rate) are available on request.
Where to go next
- Direct contracts — how to load and maintain in-house inventory
- Payments & PSP — tokenization, virtual cards, settlement
Hotel GDS, booking, and email integrations (Amadeus, Hotelbeds, SendGrid) are configured by the Nexa team during tenant onboarding. Talk to support@nexa.ai when you're ready to wire production credentials.