Every integration channel provides 100% of Auriko’s routing, fallback, cost optimization, and rate limiting — these features are server-side. The channel you choose affects developer ergonomics, not platform capability.
Which integration should I use?
| If you… | Use | Tier |
|---|
| Want the full Auriko experience | Native SDK (auriko.AsyncClient) | 1 — Primary |
| Already use LangChain, LlamaIndex, CrewAI, or ADK | Framework adapter | 2 — Framework |
| Want to point existing OpenAI code at Auriko | AsyncOpenAI(base_url="https://api.auriko.ai/v1") | 3 — Migration |
| Need to pass an OpenAI client to a framework that discards routing metadata | AurikoAsyncOpenAI (experimental) | 4 — Experimental |
If you just want to point existing OpenAI code at Auriko, use AsyncOpenAI(base_url=...) directly. AurikoAsyncOpenAI is experimental and only needed when a framework discards routing metadata from responses.
Feature comparison
| Feature | Native SDK | Framework Adapters | Plain OpenAI API | AurikoAsyncOpenAI (experimental) |
|---|
| Routing options | gateway={...} or GatewayOptions(...) | Adapter-specific params | extra_body={"gateway": {...}} | extra_body={"gateway": {...}} |
| Metadata access | response.routing_metadata | Adapter-specific | parse_routing_metadata(response) or headers | client.last_routing_metadata |
| Error types | AurikoAPIError hierarchy | AurikoAPIError (automatic) | openai.APIStatusError | Dual-inheritance (both hierarchies) |
| Streaming metadata | On stream object | Adapter-specific | Response headers | Automatic via httpx hook |
| Dependencies | auriko | auriko[framework] | openai (or any HTTP client) | auriko[openai-compat] |
Error behavior by channel
| Channel | Error type | Automatic? |
|---|
| Native SDK | AurikoAPIError hierarchy | Yes |
| Framework adapters | AurikoAPIError via map_openai_error() | Yes |
| Plain OpenAI API | openai.APIStatusError | Opt-in via map_openai_error() |
AurikoAsyncOpenAI (experimental) | Dual-inheritance (both hierarchies) | HTTP-level only |
AurikoAsyncOpenAI dual-inheritance errors are catchable as both auriko.RateLimitError and openai.RateLimitError. Mid-stream SSE errors (raised after the HTTP 200 during stream=True) remain unmapped openai.APIError — the bridge covers HTTP-level status errors only.