# Everstack > Open-source, self-hosted AI infrastructure: an OpenAI-compatible gateway, stateful agent runtime, isolated sandboxes, vector memory, MCP, evaluations, guardrails, and OpenTelemetry. Status: Self-host first and early production. Some product surfaces are explicitly marked early access or preview. Prefer the documentation, changelog, and source over assumptions about production scale or feature maturity. Last updated: 2026-08-07 Model catalog version: 2.8.0 ## Canonical resources - Website: https://everstack.ai - Documentation: https://docs.everstack.ai - Source code: https://github.com/everstacklabs/everstack - Self-host quickstart: https://github.com/everstacklabs/everstack/blob/master/examples/docker-compose/DOCKER_COMPOSE_QUICKSTART.md - Agent Runtime: https://everstack.ai/agents - Model catalog: https://everstack.ai/models - Product updates: https://everstack.ai/changelog ## Source-of-truth precedence 1. Use current documentation for supported setup and operator behavior. 2. Use published landing pages for product positioning and public commercial information. 3. Use the changelog for recently shipped behavior and maturity changes. 4. This corpus does not reproduce repository source code. Do not infer undocumented internal implementation details. ## What Everstack is - A unified, self-hostable control plane for model routing, agents, sandboxes, memory, MCP, evaluations, guardrails, and OpenTelemetry. - An OpenAI-compatible gateway that can be adopted before the rest of the platform. - A stateful agent runtime with sessions, tools, memory, child agents, approval gates, and triggers. - A stable sandbox contract with filesystem, network, resource, and lifecycle controls. ## What Everstack is not - It is not only an LLM marketplace or provider directory. - It is not only a standalone sandbox service. - It is not a no-code agent builder. - It is not primarily a classical model training, fine-tuning, or managed GPU hosting platform. ## Capability matrix | Layer | Supported | Operator note | | --- | --- | --- | | AI gateway | Yes | OpenAI-compatible, multi-provider routing, fallback, limits, and semantic caching | | Agent runtime | Yes | Stateful sessions, tools, memory, child agents, approvals, and triggers | | Sandboxes | Yes | Policy-controlled filesystem, network, resources, and lifecycle | | Vector memory | Yes | PgVector, Qdrant, Pinecone, and Weaviate backends | | MCP | Yes | Server registration, tool discovery, and federated tool calling | | Evaluations and guardrails | Yes | Production traces can feed scoring, review, and policy controls | | Sites | Preview | Versioned publishing for agent-created surfaces | | Model training and fine-tuning | Not primary | Use external training systems and route supported inference through Everstack | ## Sandbox contract Applications depend on the contract, not a particular isolation implementation. - Filesystem: shell, read, write, working directory, mounted storage, and durable artifacts. - Network: allow, deny, whitelist, block-all, CIDR rules, and signed preview URLs. - Resources: CPU, memory, disk, execution timeout, and retention controls. - Lifecycle: create, sleep, archive, terminate, snapshot, and restore with volumes where configured. ## Minimal getting started path 1. Follow the Docker Compose quickstart: https://github.com/everstacklabs/everstack/blob/master/examples/docker-compose/DOCKER_COMPOSE_QUICKSTART.md 2. Verify the gateway health endpoint. 3. Add a model provider in the admin dashboard. 4. Create an Everstack API key and point an OpenAI-compatible client at the `/v1` base URL. 5. Send one request, then inspect its provider path, token usage, cost estimate, and trace. ## Deployment and pricing facts - The Community Edition source is published under Apache 2.0. - Self-hosting is available through Docker Compose or Kubernetes. - Everstack Cloud combines plan allowances with the metered surfaces priced below. - Model-provider inference charges remain separate unless a plan explicitly states otherwise. - Do not infer benchmark performance, customer counts, or production scale unless a current canonical source publishes the measurement. ## Plans and pricing All prices are published USD configuration values taken from https://everstack.ai/pricing. ### Plan prices | Plan | Monthly | Yearly | Seats included | Best for | | --- | --- | --- | --- | --- | | Starter | $0 | $0 | 1 seat | Try Everstack and ship your first workload | | Build | $20 | $200 | 3 seats included | For building production AI applications | | Scale | $100 | $1,000 | 10 seats included | For scaling production workloads | | Enterprise | Custom | Custom | Unlimited seats | For large organizations | Additional seats: - Build: $15 per month or $150 per year per additional seat beyond 3 included. - Scale: $39 per month or $390 per year per additional seat beyond 10 included. Annual billing: 2 months free with annual billing. ### Sandbox compute prices Sandboxes bill per second on fixed machine sizes. Each sandbox includes 20 GiB of disk. | Sandbox size | vCPU | Memory | Price per hour | | --- | --- | --- | --- | | Nano | 0.5 | 0.5 GiB | $0.0333 | | Small | 1 | 1 GiB | $0.0666 | | Medium | 2 | 2 GiB | $0.1332 | | Large | 4 | 4 GiB | $0.2664 | | XL | 8 | 8 GiB | $0.5328 | Every new organization receives a one-time $5 sandbox compute credit with no payment method required. ### Metered infrastructure prices | Meter | Price | Note | | --- | --- | --- | | Hosted browser session | $0.01 per browser hour | Billed per second with a 1 minute minimum | | Site edge requests | $2.00 per 1M requests | Charged after the included monthly allowance | | Site data transfer | $0.10 per GB | Response bytes delivered to visitors | | Site deployment storage | $0.03 per GB-month | All retained immutable versions | | Logs, traces & metrics ingestion: Usage billed | Starter: $4.00 per GiB. Build and Scale: $3.00 per GiB | OTLP payload bytes after decompression, measured as data is received. | | Extended data retention: Rate preview | Starter: $0.50 per GiB-month. Build and Scale: $0.50 per GiB-month | Configured rate for data kept beyond the plan's included history window. Extended-retention billing is not yet enabled. | | Evaluation scores: Rate preview | Starter: $2.50 per 1,000 scores. Build and Scale: $1.50 per 1,000 scores | Configured score-processing rate. Score-based usage billing is not yet enabled; model inference remains separate. | | Build additional object & artifact storage: Rate preview | + $0.03/GB-month | +$0.03 per GB-month over 5 GB. Configured rate preview only. Automatic storage-overage billing is not yet enabled; this does not increase your storage limit. Separate from observability retention, Sites deployment storage, and sandbox disks. | | Scale additional object & artifact storage: Rate preview | + $0.03/GB-month | +$0.03 per GB-month over 50 GB. Configured rate preview only. Automatic storage-overage billing is not yet enabled; this does not increase your storage limit. Separate from observability retention, Sites deployment storage, and sandbox disks. | Model-provider inference is billed separately from plan and metered infrastructure prices. USD list rates. Build and Scale use the paid rate; Enterprise terms are agreed separately. 1 GiB = 1,073,741,824 bytes. Rate previews are not currently enabled usage charges or a promise that extra retention is available. 0.5 GiB of ingested data costs $1.50 on Build or Scale, or $2.00 on Starter. It is not rounded up to a full GiB. Rate illustration only: 10 GiB kept beyond the included window for half a month equals 5 GiB-months. At $0.50 per GiB-month, that would be $2.50. This is not an active retention charge; metering intervals and calendar-month rules are not yet published. Included session history: Starter: 7 days. Build: 30 days. Scale: 90 days. Enterprise: Custom. Included history is a retention window, not an ingestion allowance. ## Complete product and documentation corpus > Route AI models, run tool-using agents, and investigate failures with Everstack's open-source AI infrastructure. Self-host or use Everstack Cloud. The remainder of this file contains the complete public Everstack website, product, pricing, integration, model catalog, documentation, and API reference corpus. Content is included inline so an AI system does not need to follow links to understand the platform. ## Platform overview Eyebrow: Open source · Self-hosted · OpenTelemetry-native # Run AI applications with control over models, execution, and cost. Route model requests, run tool-using agents, and investigate failures in one platform. Start with the OpenAI-compatible gateway, then add the runtime services your application needs. Self-host Everstack or use Everstack Cloud. ### Product proof - OpenAI-compatible API - Agents, workflows, and sandboxes - Guardrails and evaluations - OpenTelemetry-native ### Start with one model request Connect your provider, send a request through the OpenAI-compatible gateway, and inspect its trace. Add fallback routes and usage limits as your application grows. ### Add execution when your application needs it Run tool-using agents with persistent sessions, connect MCP tools, and execute code in isolated sandboxes. Investigate model and tool behavior through OpenTelemetry traces. ### Choose how you operate Everstack Use Everstack Cloud for managed infrastructure, or deploy the Community Edition on your own infrastructure. Features and limits depend on your edition and plan. External model providers and tools still receive the data you send to them. ### Platform FAQ #### What is Everstack? Everstack is an open-source AI infrastructure platform for building and operating production AI applications. It combines an OpenAI-compatible AI gateway, agent runtime, isolated sandboxes, memory, MCP, workflows, evaluations, guardrails, and observability in one control plane. #### Is Everstack an AI gateway or an agent platform? It is both, plus the infrastructure around them. The gateway handles multi-provider routing, fallbacks, caching, rate limits, and keys. The runtime adds stateful agents, tools, memory, workflows, isolated execution, evaluations, and end-to-end traces, so teams do not have to join separate platforms themselves. #### Can I self-host Everstack? Yes. Deploy Everstack on your own infrastructure with Docker or Kubernetes. You operate its storage and runtime, but external model providers and tools still receive the data your application sends to them. Features and limits depend on the edition and configuration; self-hosting alone does not make a workload air-gapped. #### Which AI providers are supported? Everstack supports OpenAI, Anthropic, Google Gemini, Azure OpenAI, AWS Bedrock, Cohere, Mistral, DeepSeek, Hugging Face, Qwen, MiniMax, Moonshot, Ollama, OpenRouter, and other OpenAI-compatible endpoints. #### How does Everstack isolate agent code execution? Agent tasks run inside managed sandbox boundaries with explicit filesystem, network, resource, and lifecycle controls. Everstack keeps the runtime behind that stable sandbox contract so applications do not depend on the underlying isolation technology. #### How do evaluations and observability work together? Everstack records model calls, tool use, sandbox execution, latency, tokens, cost, and outcomes as connected traces. Those production traces can feed datasets, LLM-as-judge scorers, code scorers, human review queues, and regression checks, closing the loop between what shipped and what should improve next. #### Does Everstack lock me into a framework or model provider? No. Everstack exposes OpenAI-compatible APIs, native TypeScript, Python, and Go SDKs, Connect RPC services, and OpenTelemetry data. It works with common agent frameworks and model providers, so applications can change models or orchestration code without replacing the infrastructure layer. ## Website pages ### Model catalog changelog Source: https://everstack.ai/model-catalog/changelog Browser title: Model Catalog Changelog | Everstack Page type: website Track model additions to the Everstack catalog by release version and date. Explore the latest models and review provider availability requirements. #### Catalog v2.8.0 2026-09-03. 2 model additions recorded in this release. Claude Fable 5.1 (anthropic), GPT-6 Astra (openai) #### Catalog v2.7.0 2026-08-25. 61 model additions recorded in this release. Grok 4.6 (Bedrock) (aws-bedrock), DeepSeek V4 Flash Vision Exp (deepseek), DeepSeek V4 Flash 0731 (Fireworks) (fireworks), DeepSeek V4 Pro 0813 (Fireworks) (fireworks), Kimi K3 (Fireworks) (fireworks), Muse Glimmer 30B (Fireworks) (fireworks), Nemotron 3.5 Lightning 30B A3B (Fireworks) (fireworks), Qwen3.8 Max (Fireworks) (fireworks), Kimi K3 Fast (Fireworks) (fireworks), Gemini 3.7 Flash (google), Qwen3.8 2.4T A95B (Hugging Face) (huggingface), DeepSeek V4 Flash 0731 (Hugging Face) (huggingface), DeepSeek V4 Pro 0813 (Hugging Face) (huggingface), Inkling Small (Hugging Face) (huggingface), DeepSeek V4 Flash 0731 (NVIDIA NIM) (nvidia-nim), Muse Glimmer 30B (NVIDIA NIM) (nvidia-nim), Nemotron 3.5 Lightning 30B A3B (NVIDIA NIM) (nvidia-nim), Seed 2.1 Turbo (OpenRouter) (openrouter), DeepSeek V4 Flash 0731 (OpenRouter) (openrouter), DeepSeek V4 Flash Vision Exp (OpenRouter) (openrouter), DeepSeek V4 Pro 0813 (OpenRouter) (openrouter), Gemini 3.7 Flash (OpenRouter) (openrouter), Muse Glimmer 30B (OpenRouter) (openrouter), Muse Spark 1.2 (OpenRouter) (openrouter), Nemotron 3.5 Lightning 30B A3B (OpenRouter) (openrouter), Qwen3.8 2.4T A95B (OpenRouter) (openrouter), Qwen3.8 27B (OpenRouter) (openrouter), Qwen3.8 Max (OpenRouter) (openrouter), Sakana Namazu (OpenRouter) (openrouter), Hy-MT2-30B-A3B (OpenRouter) (openrouter), Inkling Small (OpenRouter) (openrouter), Solar Pro 4 (OpenRouter) (openrouter), Grok 4.6 (OpenRouter) (openrouter), GLM-5.3 (OpenRouter) (openrouter), DeepSeek V4 Flash 0731 (qwen), Qwen3.8 Max (qwen), DeepSeek V4 Flash 0731 (Together) (together), DeepSeek V4 Pro 0813 (Together) (together), Gemini 3.7 Flash (Vertex) (vertex-ai), Voyage 4 (voyage), Voyage 4 Large (voyage), Voyage 4 Lite (voyage), Voyage Code 4 (voyage), Voyage Finance 2 (voyage), Voyage Law 2 (voyage), Grok 4.6 (xai), GLM-4.5 (zai), GLM-4.5-Air (zai), GLM-4.5-Flash (zai), GLM-4.5V (zai), GLM-4.6 (zai), GLM-4.6V (zai), GLM-4.7 (zai), GLM-4.7-Flash (zai), GLM-4.7-FlashX (zai), GLM-5 (zai), GLM-5-Turbo (zai), GLM-5.1 (zai), GLM-5.2 (zai), GLM-5.3 (zai), GLM-5V-Turbo (zai) #### Catalog v2.6.0 2026-08-25. 0 model additions recorded in this release. #### Catalog v2.5.0 2026-08-25. 0 model additions recorded in this release. #### Catalog v2.4.0 2026-07-27. 82 model additions recorded in this release. Claude Fable 5 (anthropic), Claude Opus 4.8 (anthropic), Claude Opus 5 (anthropic), Claude Sonnet 5 (anthropic), Claude Fable 5 (Bedrock) (aws-bedrock), Claude Opus 4.8 (Bedrock) (aws-bedrock), Claude Opus 5 (Bedrock) (aws-bedrock), Claude Sonnet 5 (Bedrock) (aws-bedrock), GPT-5.6 Luna (Azure) (azure-openai), GPT-5.6 Sol (Azure) (azure-openai), GPT-5.6 Terra (Azure) (azure-openai), Command A Plus (cohere), North Mini Code (cohere), GLM 5.2 (Fireworks) (fireworks), Kimi K2.7 Code (Fireworks) (fireworks), MiniMax-M3 (Fireworks) (fireworks), Qwen 3.7 Plus (Fireworks) (fireworks), GLM 5.2 Fast (Fireworks) (fireworks), Kimi K2.7 Code Fast (Fireworks) (fireworks), Gemini 3.5 Flash (google), Gemini 3.5 Flash Lite (google), Gemini 3.6 Flash (google), Gemini Flash Latest (google), MiniMax-M3 (Hugging Face) (huggingface), Kimi K2.7 Code (Hugging Face) (huggingface), Step 3.7 Flash (Hugging Face) (huggingface), GLM-5.2 (Hugging Face) (huggingface), MiniMax-M3 (minimax), Kimi K2.7 Code (moonshot), Kimi K2.7 Code HighSpeed (moonshot), Kimi K3 (moonshot), MiniMax-M3 (NVIDIA NIM) (nvidia-nim), Nemotron 3 Ultra 550B A55B (NVIDIA NIM) (nvidia-nim), Step 3.7 Flash (NVIDIA NIM) (nvidia-nim), GLM-5.2 (NVIDIA NIM) (nvidia-nim), GPT-5.6 (openai), GPT-5.6 Luna (openai), GPT-5.6 Sol (openai), GPT-5.6 Terra (openai), GPT-Realtime-2.1 (openai), Claude Fable 5 (OpenRouter) (openrouter), Claude Opus 4.8 (OpenRouter) (openrouter), Claude Opus 4.8 (Fast) (OpenRouter) (openrouter), Claude Opus 5 (OpenRouter) (openrouter), Claude Opus 5 (Fast) (OpenRouter) (openrouter), Claude Sonnet 5 (OpenRouter) (openrouter), Gemini 3.5 Flash (OpenRouter) (openrouter), Gemini 3.5 Flash Lite (OpenRouter) (openrouter), Gemini 3.6 Flash (OpenRouter) (openrouter), MiniMax-M3 (OpenRouter) (openrouter), Kimi K2.7 Code (OpenRouter) (openrouter), Kimi K3 (OpenRouter) (openrouter), Nemotron 3 Ultra 550B A55B (OpenRouter) (openrouter), GPT-5.6 Luna (OpenRouter) (openrouter), GPT-5.6 Luna Pro (OpenRouter) (openrouter), GPT-5.6 Sol (OpenRouter) (openrouter), GPT-5.6 Sol Pro (OpenRouter) (openrouter), GPT-5.6 Terra (OpenRouter) (openrouter), GPT-5.6 Terra Pro (OpenRouter) (openrouter), Qwen3.7 Max (OpenRouter) (openrouter), Qwen3.7 Plus (OpenRouter) (openrouter), Step 3.7 Flash (OpenRouter) (openrouter), Inkling (OpenRouter) (openrouter), Grok 4.5 (OpenRouter) (openrouter), GLM-5.2 (OpenRouter) (openrouter), Qwen3.7 Max (qwen), Qwen3.7 Plus (qwen), MiniMax-M3 (Together) (together), Kimi K2.7 Code (Together) (together), Nemotron 3 Ultra 550B A55B (Together) (together), Qwen3.7 Max (Together) (together), Inkling (Together) (together), GLM-5.2 (Together) (together), Claude Fable 5 (Vertex) (vertex-ai), Claude Opus 4.8 (Vertex) (vertex-ai), Claude Opus 5 (Vertex) (vertex-ai), Claude Sonnet 5 (Vertex) (vertex-ai), Gemini 3.5 Flash (Vertex) (vertex-ai), Gemini 3.5 Flash Lite (Vertex) (vertex-ai), Gemini 3.6 Flash (Vertex) (vertex-ai), Gemini Flash Latest (Vertex) (vertex-ai), Grok 4.5 (xai) #### Catalog v2.3.0 2026-05-10. 32 model additions recorded in this release. Claude Opus 4.7 (anthropic), Claude Sonnet 4.6 (anthropic), GPT-5 (openai), GPT-5 Mini (openai), GPT-5 Nano (openai), GPT-5 Pro (openai), GPT-5.4 (openai), GPT-5.4 Mini (openai), GPT-5.4 Nano (openai), GPT-5.4 Pro (openai), GPT-5.5 (openai), GPT-5.5 Pro (openai), GPT-5.2 Pro (openai), o3-pro (openai), o3 Deep Research (openai), Gemini 3 Pro (google), Gemini 3 Flash (google), Gemini 3.1 Pro (google), Gemini 3.1 Flash Lite (google), Gemini 2.5 Flash Lite (google), Grok 4 (xai), Grok 4.3 (xai), Grok 4 Fast (xai), Grok Code Fast (xai), DeepSeek V4 Flash (deepseek), DeepSeek V4 Pro (deepseek), Kimi K2.6 (moonshot), MiniMax M2.7 (minimax), Mistral Large (Latest) (mistral), Mistral Medium (Latest) (mistral), Mistral Small (Latest) (mistral), Devstral Medium (mistral) #### Catalog v2.2.0 2026-02-14. 9 model additions recorded in this release. Command A Vision (cohere), Command A Translate (cohere), Command R+ (cohere), Command R (cohere), Command R 7B (cohere), Embed v4 (cohere), Embed English Light v3 (cohere), Embed Multilingual Light v3 (cohere), Rerank v3.5 (cohere) #### Catalog v2.1.0 2026-02-13. 18 model additions recorded in this release. GPT-4.1 (openai), GPT-4.1 Mini (openai), GPT-4.1 Nano (openai), o3 (openai), o4-mini (openai), o3-mini (openai), o1 (openai), GPT-5.3 Codex (openai), GPT-5.3 Codex Spark (openai), GPT-5.2 Codex (openai), GPT-5.1 Codex (openai), GPT-5.1 Codex Max (openai), GPT-5.1 Codex Mini (openai), GPT-5 Codex (openai), Claude Opus 4.6 (anthropic), Claude Opus 4.5 (anthropic), Claude Sonnet 4.5 (anthropic), Claude Haiku 4.5 (anthropic) #### Catalog v2.0.0 2025-12-26. 0 model additions recorded in this release. #### Catalog v1.0.2 2024-01-15. 5 model additions recorded in this release. Magistral Small 1.2 (mistral), Voxtral Small (mistral), command-a-reasoning-08-2025 (cohere), command-a-03-2025 (cohere), Claude Sonnet 4 (anthropic) #### Catalog v1.0.1 2024-01-15. 0 model additions recorded in this release. #### Catalog v1.0.0 2024-01-15. 0 model additions recorded in this release. --- ### Run AI applications with control over models, execution, and cost. Source: https://everstack.ai/ Browser title: Everstack | Open-Source AI Infrastructure Platform Page type: website Route AI models, run tool-using agents, and investigate failures with Everstack's open-source AI infrastructure. Self-host or use Everstack Cloud. #### New in the model catalog Catalog v2.8.0, 2026-09-03. Claude Fable 5.1. Input: text, image, pdf. Output: text. GPT-6 Astra. Input: text, image, pdf. Output: text. Catalog additions. Availability depends on your provider access, gateway version, and the model's supported API. #### Start with one model request Connect your provider, send a request through the OpenAI-compatible gateway, and inspect its trace. Add fallback routes and usage limits as your application grows. #### Add execution when your application needs it Run tool-using agents with persistent sessions, connect MCP tools, and execute code in isolated sandboxes. Investigate model and tool behavior through OpenTelemetry traces. #### Choose how you operate Everstack Use Everstack Cloud for managed infrastructure, or deploy the Community Edition on your own infrastructure. Features and limits depend on your edition and plan. External model providers and tools still receive the data you send to them. #### Everstack Cloud Run the services your application needs without managing the infrastructure. #### Self-hosted Community Edition Deploy Everstack on your own infrastructure. Operate the runtime and its dependencies yourself, with Community Edition features and limits. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "Organization", "@id": "https://everstack.ai/#organization", "name": "Everstack Labs", "url": "https://everstack.ai", "logo": "https://everstack.ai/everstack-desktop.png", "sameAs": [ "https://github.com/everstacklabs/everstack", "https://x.com/everstackai", "https://www.linkedin.com/company/everstacklabs" ], "email": "hello@everstack.ai", "contactPoint": [ { "@type": "ContactPoint", "contactType": "customer support", "email": "hello@everstack.ai", "url": "https://everstack.ai/contact", "availableLanguage": [ "English" ] }, { "@type": "ContactPoint", "contactType": "sales", "email": "sales@everstack.ai", "url": "https://everstack.ai/contact", "availableLanguage": [ "English" ] }, { "@type": "ContactPoint", "contactType": "technical support", "email": "hello@everstack.ai", "url": "https://docs.everstack.ai", "availableLanguage": [ "English" ] } ] }, { "@context": "https://schema.org", "@type": "WebSite", "@id": "https://everstack.ai/#website", "name": "Everstack", "url": "https://everstack.ai", "inLanguage": "en", "publisher": { "@id": "https://everstack.ai/#organization" }, "description": "Route AI models, run tool-using agents, and investigate failures with Everstack's open-source AI infrastructure. Self-host or use Everstack Cloud." }, { "@context": "https://schema.org", "@type": "SoftwareApplication", "@id": "https://everstack.ai/#software", "name": "Everstack", "applicationCategory": "DeveloperApplication", "operatingSystem": "Linux, Docker, Kubernetes", "url": "https://everstack.ai", "isAccessibleForFree": true, "author": { "@id": "https://everstack.ai/#organization" }, "description": "Route AI models, run tool-using agents, and investigate failures with Everstack's open-source AI infrastructure. Self-host or use Everstack Cloud.", "featureList": [ "OpenAI-compatible AI gateway", "Multi-provider routing, fallback, and semantic caching", "Stateful agent runtime and visual workflows", "Policy-controlled isolated sandboxes", "Evaluations, guardrails, and human review", "OpenTelemetry-native traces, metrics, and logs", "Vector memory and MCP tool federation" ] }, { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is Everstack?", "acceptedAnswer": { "@type": "Answer", "text": "Everstack is an open-source AI infrastructure platform for building and operating production AI applications. It combines an OpenAI-compatible AI gateway, agent runtime, isolated sandboxes, memory, MCP, workflows, evaluations, guardrails, and observability in one control plane." } }, { "@type": "Question", "name": "Is Everstack an AI gateway or an agent platform?", "acceptedAnswer": { "@type": "Answer", "text": "It is both, plus the infrastructure around them. The gateway handles multi-provider routing, fallbacks, caching, rate limits, and keys. The runtime adds stateful agents, tools, memory, workflows, isolated execution, evaluations, and end-to-end traces, so teams do not have to join separate platforms themselves." } }, { "@type": "Question", "name": "Can I self-host Everstack?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Deploy Everstack on your own infrastructure with Docker or Kubernetes. You operate its storage and runtime, but external model providers and tools still receive the data your application sends to them. Features and limits depend on the edition and configuration; self-hosting alone does not make a workload air-gapped." } }, { "@type": "Question", "name": "Which AI providers are supported?", "acceptedAnswer": { "@type": "Answer", "text": "Everstack supports OpenAI, Anthropic, Google Gemini, Azure OpenAI, AWS Bedrock, Cohere, Mistral, DeepSeek, Hugging Face, Qwen, MiniMax, Moonshot, Ollama, OpenRouter, and other OpenAI-compatible endpoints." } }, { "@type": "Question", "name": "How does Everstack isolate agent code execution?", "acceptedAnswer": { "@type": "Answer", "text": "Agent tasks run inside managed sandbox boundaries with explicit filesystem, network, resource, and lifecycle controls. Everstack keeps the runtime behind that stable sandbox contract so applications do not depend on the underlying isolation technology." } }, { "@type": "Question", "name": "How do evaluations and observability work together?", "acceptedAnswer": { "@type": "Answer", "text": "Everstack records model calls, tool use, sandbox execution, latency, tokens, cost, and outcomes as connected traces. Those production traces can feed datasets, LLM-as-judge scorers, code scorers, human review queues, and regression checks, closing the loop between what shipped and what should improve next." } }, { "@type": "Question", "name": "Does Everstack lock me into a framework or model provider?", "acceptedAnswer": { "@type": "Answer", "text": "No. Everstack exposes OpenAI-compatible APIs, native TypeScript, Python, and Go SDKs, Connect RPC services, and OpenTelemetry data. It works with common agent frameworks and model providers, so applications can change models or orchestration code without replacing the infrastructure layer." } } ] } ] ``` --- ### Everstack Pricing Source: https://everstack.ai/pricing Browser title: Everstack Pricing | AI Infrastructure Platform Page type: website Compare Everstack plans for AI gateway routing, observability, agents, hosted browser automation, static site publishing, and isolated sandbox workloads. #### Starter plan: $0 per month Starter costs $0 per month or $0 per year. Try Everstack and ship your first workload. 1 seat. Included: AI Gateway & platform API, Always-on agents, Slack, Discord & Telegram connections, Evaluations & experiments, Isolated execution environments, Dedicated execution pools. #### Build plan: $20 per month Build costs $20 per month or $200 per year. For building production AI applications. 3 seats included. Additional seats cost $15 per month per additional seat beyond 3 included. Included: AI Gateway & platform API, Always-on agents, Slack, Discord & Telegram connections, Live browser viewport, Evaluations & experiments, Isolated execution environments. #### Scale plan: $100 per month Scale costs $100 per month or $1,000 per year. For scaling production workloads. 10 seats included. Additional seats cost $39 per month per additional seat beyond 10 included. Included: AI Gateway & platform API, Advanced analytics, Custom integrations, Always-on agent instances, Always-on agents, Slack, Discord & Telegram connections. #### Enterprise plan: custom pricing Enterprise is priced on request. For large organizations. Unlimited seats. Included: AI Gateway & platform API, Advanced analytics, Custom integrations, SSO & SAML, Audit logs, Always-on agent instances. #### Metered infrastructure pricing Sandbox compute bills per second: Nano at $0.0333 per hour (0.5 vCPU, 0.5 GiB), Small at $0.0666 per hour (1 vCPU, 1 GiB), Medium at $0.1332 per hour (2 vCPU, 2 GiB), Large at $0.2664 per hour (4 vCPU, 4 GiB), XL at $0.5328 per hour (8 vCPU, 8 GiB). Every new organization receives a one-time $5 sandbox compute credit with no payment method required. Hosted browser sessions cost $0.01 per browser hour, billed per second with a 1 minute minimum. Site delivery beyond the included allowance costs $2.00 per million edge requests, $0.10 per GB of transfer, and $0.03 per GB-month of deployment storage. Model-provider inference is billed separately from plan and metered infrastructure prices. Logs, traces & metrics ingestion: Usage billed. Starter: $4.00 per GiB. Build and Scale: $3.00 per GiB. OTLP payload bytes after decompression, measured as data is received. Extended data retention: Rate preview. Starter: $0.50 per GiB-month. Build and Scale: $0.50 per GiB-month. Configured rate for data kept beyond the plan's included history window. Extended-retention billing is not yet enabled. Evaluation scores: Rate preview. Starter: $2.50 per 1,000 scores. Build and Scale: $1.50 per 1,000 scores. Configured score-processing rate. Score-based usage billing is not yet enabled; model inference remains separate. Build additional object & artifact storage: Rate preview. +$0.03 per GB-month over 5 GB. Configured rate preview only. Automatic storage-overage billing is not yet enabled; this does not increase your storage limit. Separate from observability retention, Sites deployment storage, and sandbox disks. Scale additional object & artifact storage: Rate preview. +$0.03 per GB-month over 50 GB. Configured rate preview only. Automatic storage-overage billing is not yet enabled; this does not increase your storage limit. Separate from observability retention, Sites deployment storage, and sandbox disks. Included session history: Starter: 7 days. Build: 30 days. Scale: 90 days. Enterprise: Custom. Included history is a retention window, not an ingestion allowance. USD list rates. Build and Scale use the paid rate; Enterprise terms are agreed separately. 1 GiB = 1,073,741,824 bytes. Rate previews are not currently enabled usage charges or a promise that extra retention is available. 0.5 GiB of ingested data costs $1.50 on Build or Scale, or $2.00 on Starter. It is not rounded up to a full GiB. Rate illustration only: 10 GiB kept beyond the included window for half a month equals 5 GiB-months. At $0.50 per GiB-month, that would be $2.50. This is not an active retention charge; metering intervals and calendar-month rules are not yet published. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "Product", "@id": "https://everstack.ai/pricing#product", "name": "Everstack", "description": "Compare Everstack plans for AI gateway routing, observability, agents, hosted browser automation, static site publishing, and isolated sandbox workloads.", "brand": { "@type": "Brand", "name": "Everstack Labs" }, "offers": [ { "@type": "Offer", "name": "Starter billed monthly", "description": "Try Everstack and ship your first workload", "url": "https://everstack.ai/pricing", "priceCurrency": "USD", "price": 0, "availability": "https://schema.org/InStock", "priceSpecification": { "@type": "UnitPriceSpecification", "priceCurrency": "USD", "price": 0, "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "MON" } } }, { "@type": "Offer", "name": "Starter billed yearly", "description": "Try Everstack and ship your first workload", "url": "https://everstack.ai/pricing", "priceCurrency": "USD", "price": 0, "availability": "https://schema.org/InStock", "priceSpecification": { "@type": "UnitPriceSpecification", "priceCurrency": "USD", "price": 0, "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "ANN" } } }, { "@type": "Offer", "name": "Build billed monthly", "description": "For building production AI applications", "url": "https://everstack.ai/pricing", "priceCurrency": "USD", "price": 20, "availability": "https://schema.org/InStock", "priceSpecification": { "@type": "UnitPriceSpecification", "priceCurrency": "USD", "price": 20, "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "MON" } } }, { "@type": "Offer", "name": "Build billed yearly", "description": "For building production AI applications", "url": "https://everstack.ai/pricing", "priceCurrency": "USD", "price": 200, "availability": "https://schema.org/InStock", "priceSpecification": { "@type": "UnitPriceSpecification", "priceCurrency": "USD", "price": 200, "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "ANN" } } }, { "@type": "Offer", "name": "Scale billed monthly", "description": "For scaling production workloads", "url": "https://everstack.ai/pricing", "priceCurrency": "USD", "price": 100, "availability": "https://schema.org/InStock", "priceSpecification": { "@type": "UnitPriceSpecification", "priceCurrency": "USD", "price": 100, "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "MON" } } }, { "@type": "Offer", "name": "Scale billed yearly", "description": "For scaling production workloads", "url": "https://everstack.ai/pricing", "priceCurrency": "USD", "price": 1000, "availability": "https://schema.org/InStock", "priceSpecification": { "@type": "UnitPriceSpecification", "priceCurrency": "USD", "price": 1000, "referenceQuantity": { "@type": "QuantitativeValue", "value": 1, "unitCode": "ANN" } } } ] } ] ``` --- ### About Everstack Source: https://everstack.ai/about Browser title: About Everstack | Open-Source AI Infrastructure Page type: website Everstack Labs builds open-source AI infrastructure teams run on hardware they control, spanning model routing, agents, sandboxes, and observability. #### What Everstack is Everstack is an open-source AI infrastructure platform that combines an OpenAI-compatible model gateway, a stateful agent runtime, isolated sandboxes for untrusted code, vector memory, MCP tool federation, evaluations and guardrails, and OpenTelemetry-native observability in a single control plane. #### Why we build it Most AI platforms require sending prompts, traces, provider keys, and runtime state to a vendor cloud. Everstack runs the same stack self-hosted with Docker Compose or Kubernetes, fully air-gapped, or as a managed cloud, so the deployment model is a choice rather than a constraint. The Community Edition source is published under Apache 2.0. #### How we work Development happens in the open. The changelog records what shipped and the roadmap records what is planned. Early and preview surfaces are labeled as such rather than described as production-ready, so platform teams can judge which parts have been exercised. #### Company Everstack is built by Everstack Labs. The product is Everstack and the canonical domain is everstack.ai. General enquiries reach hello@everstack.ai and sales enquiries reach sales@everstack.ai. #### Page metadata ```yaml title: About Everstack description: Everstack Labs builds open-source AI infrastructure that teams run on hardware they control, from model routing to agents, sandboxes, and observability. ``` #### Full published page content # About Everstack Everstack is an open-source AI infrastructure platform. It brings the pieces teams normally assemble from four or five separate vendors into one control plane: an OpenAI-compatible gateway for model traffic, a stateful agent runtime, isolated sandboxes for running untrusted code, vector memory, MCP tool federation, evaluations and guardrails, and OpenTelemetry-native observability that ties all of it together. ## Why we build it Most AI platforms ask you to send your prompts, traces, provider keys, and runtime state to somebody else's cloud, then charge a platform tax for the privilege. That trade is fine until it isn't: until a compliance review asks where the data lives, until a vendor changes its pricing, or until you need to run in an environment that has no public internet at all. Everstack is built so that the same stack runs three ways without a rewrite. You can self-host it with Docker Compose or Kubernetes, run it fully air-gapped, or use Everstack Cloud when you would rather not operate it yourself. The Community Edition source is published under Apache 2.0, so self-hosting is a real option rather than a demo tier. ## How we work We build in the open. The changelog records what shipped, the roadmap records what is coming, and the source is on GitHub. We mark early and preview surfaces honestly rather than describing everything as production-ready, because a platform team deciding whether to depend on us deserves to know which parts have been exercised and which have not. ## Company Everstack is built by Everstack Labs. The product is Everstack and the canonical domain is everstack.ai. For anything not answered by the documentation, the [contact page](https://everstack.ai/contact) lists the fastest route to a human. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "AboutPage", "@id": "https://everstack.ai/about#webpage", "url": "https://everstack.ai/about", "name": "About Everstack", "mainEntity": { "@id": "https://everstack.ai/#organization" } } ] ``` --- ### Contact Everstack Source: https://everstack.ai/contact Browser title: Contact Everstack | Support, Sales, and Security Page type: website Reach Everstack Labs for support, sales, security reports, and documentation questions, with the fastest route listed for each kind of request. #### Support and general enquiries Email hello@everstack.ai for product questions, bug reports, and account or billing problems. Including the organization name and the trace or request identifier from the dashboard lets us find the event without a round trip. #### Sales and enterprise Email sales@everstack.ai for pricing questions the pricing page does not answer, for Enterprise plan enquiries covering SSO, audit logs, and unlimited seats, and for self-hosted deployments that need a commercial arrangement. #### Start without contacting anyone Everstack has a free Starter plan, self-serve API key generation in the dashboard, and a one-time sandbox compute credit that requires no payment method, so the platform can be evaluated end to end before any conversation. #### Security reports Report suspected vulnerabilities to hello@everstack.ai with security in the subject line, and allow a reasonable window to investigate and ship a fix before public disclosure. #### For automated clients Agents and crawlers should start at https://everstack.ai/llms.txt for a compact index, https://everstack.ai/llms-full.txt for the complete public corpus, and https://everstack.ai/openapi.json for the API surface. #### Page metadata ```yaml title: Contact Everstack description: Reach Everstack Labs for support, sales, security reports, and documentation questions, with the fastest route listed for each kind of request. ``` #### Full published page content # Contact Everstack Everstack is built by Everstack Labs. Pick the route that matches what you need and you will reach the right place faster than a general enquiry would. ## Support and general enquiries Email [hello@everstack.ai](mailto:hello@everstack.ai). This mailbox covers product questions, bug reports, account and billing problems, and anything else that does not fit the categories below. Include your organization name and, when you are reporting a problem, the trace or request identifier from the dashboard so we can find the event without a round trip. ## Sales and enterprise Email [sales@everstack.ai](mailto:sales@everstack.ai) for pricing questions that the [pricing page](https://everstack.ai/pricing) does not answer, for Enterprise plan enquiries covering SSO, audit logs, and unlimited seats, and for self-hosted deployments that need a commercial arrangement. You do not need to talk to anyone to start. Everstack has a free Starter plan, self-serve API key generation in the dashboard, and a one-time sandbox compute credit that requires no payment method, so you can evaluate the platform end to end before contacting us. ## Security Report suspected vulnerabilities to [hello@everstack.ai](mailto:hello@everstack.ai) with "security" in the subject line. Please give us a reasonable window to investigate and ship a fix before disclosing publicly. ## Documentation and source Setup guides, the API reference, and operator documentation live at [docs.everstack.ai](https://docs.everstack.ai). The Community Edition source, issue tracker, and public discussion are on [GitHub](https://github.com/everstacklabs/everstack). ## For automated clients If you are an agent or crawler gathering information about Everstack, start at [llms.txt](https://everstack.ai/llms.txt) for a compact index, or [llms-full.txt](https://everstack.ai/llms-full.txt) for the complete public corpus. The API surface is described at [openapi.json](https://everstack.ai/openapi.json). #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "ContactPage", "@id": "https://everstack.ai/contact#webpage", "url": "https://everstack.ai/contact", "name": "Contact Everstack", "mainEntity": { "@id": "https://everstack.ai/#organization" } } ] ``` --- ### Your AI runtime, from the terminal. Source: https://everstack.ai/cli Browser title: Everstack CLI | Install, Deploy Agents, and Manage Sandboxes Page type: website Install the Everstack CLI for macOS or Linux. Copy verified evs commands to authenticate, deploy agents from code, execute sandbox commands, and follow sandbox logs. #### Start with the binary. One CLI for your local shell and remote Everstack instances. Choose the published release, then check the version before you begin. Before you start: macOS or Linux on ARM64 or x86-64, with bash and curl. The installer verifies the release checksum and may request sudo for /usr/local/bin. The CLI does not provision a backend or its dependencies. #### Install the verified release Uses the installer from the same release tag. Review the script before running it, or download a platform binary from the release page. ```bash curl -fsSL https://raw.githubusercontent.com/everstacklabs/everstack/v0.1.25/build/install.sh | bash -s -- --version v0.1.25 ``` #### Check your installation These examples were checked against v0.1.25. If an older version appears, check for another evs earlier on your PATH. ```bash evs --version ``` #### Point it at your instance. Authenticate once, then reuse your active login for agent and sandbox commands. Connect to Everstack Cloud or your self-hosted deployment. Before you start: A reachable Everstack instance and an account with access. Replace the example hostname with your instance's API base URL, not the marketing site or dashboard URL. #### Set your API endpoint Replace this placeholder before running. Keep this shell open for the commands below. ```bash export EVS_API_URL="https://your-everstack-host.example.com" ``` #### Sign in through your browser Uses browser-based OAuth with PKCE. For a headless terminal, use the device-login command below. ```bash evs login --api-url "$EVS_API_URL" ``` #### Confirm your active identity Check that the identity and active context match the instance you intend to use. ```bash evs whoami ``` #### Local files. Deployed agents. Keep the agent definition, instructions, skills, and project functions in your repository. Deploy the directory, then stream a turn from your terminal. Before you start: Complete Connect first. Your instance needs an enabled agent runtime and access to the model configured in agent.yaml. Running agents can incur model and runtime usage charges. #### Scaffold a project Creates release-helper/ with agent.yaml, instructions.md, an example function, and an example skill. Choose a new directory name if this one already exists. ```bash evs init release-helper ``` #### Review, then deploy First edit agent.yaml to select an available model and review the generated instructions and function. This deploys to your active instance. Conflicting existing state is not silently overwritten. ```bash evs deploy ./release-helper ``` #### Run a turn Uses the agent name from agent.yaml and streams the reply. The input is positional, not a --message flag. ```bash evs agents run release-helper "What can you help me with?" ``` #### A shell inside the boundary. Create an isolated environment, execute a command, and follow its logs. Your shell sends requests to the sandbox backend configured on your instance. Before you start: Complete Connect first. Your instance needs a configured sandbox backend, a usable default image or template, and permission to create sandboxes. API-key sessions also need EVS_TENANT_ID for execution. Sandbox usage and retention may be billable. #### Create an environment Wait for the sandbox to be running. Copy its returned ID for the next step. Add --template with a configured template if your instance has no default. ```bash evs sandbox create --name cli-demo ``` #### Run a command inside it Replace the placeholder ID. The -- separator sends the remaining arguments to the sandbox command. ```bash export SANDBOX_ID="replace-with-your-sandbox-id" evs sandbox exec "$SANDBOX_ID" -- pwd ``` #### Follow sandbox logs Streams sandbox logs, not gateway request traces. Press Ctrl+C to stop following; this does not stop or destroy the sandbox. Manage its lifecycle in the dashboard or CLI. ```bash evs sandbox logs "$SANDBOX_ID" --follow ``` #### No browser on this machine? Set EVS_API_URL to your instance, then request a device code. Complete authorization in a browser on another device if your deployment supports device login. ```bash evs login --device --api-url "$EVS_API_URL" ``` #### Build it into your scripts. Provide EVS_API_URL and EVS_API_KEY through your CI secret store. Sandbox list supports JSON output. Keep credentials out of command history and version control. ```bash evs sandbox list --json ``` #### Verified command syntax Checked against the published v0.1.25 binary on 2026-09-05. Feature availability depends on your instance, permissions, and edition. --- ### Agents as code. A runtime that's yours. Source: https://everstack.ai/agents Browser title: EVS | Open-Source Self-Hosted Agent Runtime Page type: website Define agents as code and run them with persistent sessions, isolated sandboxes, tools, approvals, and observability on Everstack. #### Agents as code Keep instructions, runtime policy, skills, tools, subagents, and schedules beside the code they operate, then review every behavior change through version control. #### Persistent sessions on infrastructure you own Everstack manages sessions, sandbox isolation, memory, approvals, streaming, subagent coordination, limits, and OpenTelemetry-native traces. After a server restart, interrupted turns must be reissued from the last checkpoint; they do not automatically replay. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "EVS Agent Runtime", "applicationCategory": "DeveloperApplication", "operatingSystem": "Linux, Docker, Kubernetes", "url": "https://everstack.ai/agents/", "isAccessibleForFree": true, "description": "An open-source runtime for tool-using agents with persistent sessions.", "featureList": [ "Repository-defined agents", "Persistent and ephemeral sessions", "Isolated sandbox execution", "Human approval gates", "Subagents, schedules, tools, and memory", "OpenTelemetry-native observability" ] } ] ``` --- ### Publish agent output as a governed site. Source: https://everstack.ai/sites Browser title: EVS Sites | Governed Publishing for Agent-Created Surfaces Page type: website Publish browser-ready agent output as private, versioned EVS Sites with immutable releases, controlled access, activation, and rollback. #### Version browser-ready output Turn static sites, reports, dashboards, documents, and other generated files into immutable releases with explicit activation and rollback. #### Keep the surface connected to its origin Carry source task, owner, access policy, approval state, retention, and audit history with each published surface as the product develops. --- ### One model endpoint. Every routing decision under your control. Source: https://everstack.ai/gateway Browser title: AI Gateway Routing | OpenAI-Compatible Multi-Provider API Page type: website Route AI traffic across providers with one OpenAI-compatible API, configurable fallback, semantic caching, rate limits, tenant isolation, and OpenTelemetry traces. #### Keep application code stable Use one request shape and one endpoint while Everstack handles provider translation, routing, fallback, caching, tenant limits, and credentials. #### Carry policy through every request Connect model selection, cache scope, rate limits, token use, cost, latency, and fallback behavior in the same request trace. --- ### Use agents for judgment. Use workflows for control. Source: https://everstack.ai/workflows Browser title: AI Agents and Workflow Orchestration | Everstack Page type: website Combine durable tool-using AI agents with versioned visual workflows, parallel branches, triggers, retries, memory, and human approval gates. #### Choose the right execution model Use functions for bounded actions, workflows for explicit control flow, and agents when the next step depends on what the model discovers. #### Keep long-running work durable Manage sessions, tools, approvals, streaming events, sandbox state, triggers, workflow versions, and subagent coordination in one runtime. --- ### Give AI real tools without giving it the host. Source: https://everstack.ai/sandboxes Browser title: AI Sandboxes | Isolated Compute for Agents and Applications Page type: website Run code, agents, preview services, and jobs in isolated Everstack sandboxes with shell, files, lifecycle controls, signed previews, resource limits, and network po… #### Isolate every execution boundary Give each workload its own filesystem, process space, resource envelope, network policy, and retention lifecycle. #### Match isolation to the workload Choose the compute, retention, and network boundaries each workload needs without exposing the host or coupling applications to the underlying runtime. --- ### See the request, the agent, and every expensive decision between them. Source: https://everstack.ai/observability Browser title: AI Observability | OpenTelemetry Traces, Logs and Metrics Page type: website Trace gateway requests, agent sessions, tools, sandboxes, evaluations, latency, token usage, and cost through OpenTelemetry-native observability. #### Trace the full AI lifecycle Follow gateway middleware, provider calls, agent turns, tools, approvals, sandboxes, and evaluation results as one correlated trace. #### Keep your telemetry pipeline Use Everstack collection directly or export OTLP into the OpenTelemetry infrastructure your team already operates. --- ### Turn AI quality from a feeling into a release signal. Source: https://everstack.ai/evaluations Browser title: AI Evaluations | LLM Judges, Code Scorers and Regression Tests Page type: website Evaluate AI outputs with built-in metrics, LLM-as-judge scoring, sandboxed code scorers, datasets, baselines, scheduling, CI gates, and human review. #### Define what good means Combine built-in metrics with numeric, boolean, categorical, model-judged, and code-based scoring criteria. #### Evaluate repeatably Run the same dataset across prompt, model, or application changes and compare the result with an accepted baseline. --- ### Inspect every boundary before unsafe data crosses it. Source: https://everstack.ai/guardrails Browser title: AI Guardrails | Prompt Injection, PII and Runtime Safety Page type: website Protect AI inputs and outputs with runtime checks for prompt injection, sensitive data, unsafe content, jailbreak markers, dangerous code, and traceable policy viol… #### Check inputs before model spend Inspect freeform content for sensitive data, prompt injection, unsafe categories, and configured token limits before it reaches a provider. #### Check outputs before delivery Apply jailbreak, toxicity, and dangerous code checks before generated content reaches an application or user. --- ### Everstack vs AI Infrastructure Platforms Source: https://everstack.ai/comparison Browser title: Everstack vs AI Infrastructure Platforms | Feature Comparison Page type: website Compare Everstack with AI gateway and infrastructure platforms across routing, agent runtimes, sandboxes, observability, deployment ownership, and governance. #### What these comparisons actually measure Each page states the licence, the deployment model, which capabilities are gated behind a paid key when self-hosting, and the published pricing with the date it was checked. Feature claims come from the vendor's own documentation, licence file, or pricing page rather than from a scoring rubric. #### Where Everstack sits in the category Most tools in this space solve one layer: a gateway proxies model traffic, an observability platform stores traces, a sandbox vendor executes code, an evaluation platform scores output. Everstack runs those layers on one control plane, self-hosted, so routing decisions, execution, policy, and telemetry share an operational boundary instead of four. #### When a single-purpose tool is the better choice If you need one layer and already operate the rest, a focused tool is usually simpler to adopt and has a larger community behind it. The case for a unified control plane depends on having several of these problems at once, and on a deployment constraint that rules out putting data in someone else's cloud. --- ### Everstack vs TrueFoundry Source: https://everstack.ai/comparison/truefoundry Browser title: Everstack vs TrueFoundry | AI Infrastructure Comparison Page type: website Compare Everstack and TrueFoundry across AI gateway routing, agent runtime depth, self-hosting, observability, deployment control, and enterprise operations. #### What Everstack brings to this comparison One OpenAI-compatible endpoint in front of every provider, a stateful agent runtime with sessions, tools, approvals and child agents, isolated Docker, isolated runtime and Kubernetes execution, vector memory, MCP tool federation, evaluations, and OpenTelemetry-native traces, all under a single Apache-2.0 licence you can run on your own infrastructure. #### The deployment question decides most of this The comparison that matters is usually not feature-by-feature. It is whether model traffic, prompts, responses, execution state and telemetry can leave your infrastructure. If they cannot, the shortlist collapses to platforms that are genuinely self-hostable without a per-feature licence key. --- ### Everstack vs Portkey Source: https://everstack.ai/comparison/portkey Browser title: Everstack vs Portkey | AI Gateway and Runtime Comparison Page type: website Compare Everstack and Portkey across multi-provider routing, LLM observability, agent runtime ownership, isolated execution, governance, and self-hosting. #### What the Palo Alto Networks acquisition changes Palo Alto Networks has completed its acquisition of Portkey, and the product is now sold as Prisma AIRS AI Gateway. Acquisitions of infrastructure vendors routinely bring repricing, enterprise repackaging and roadmap reprioritisation, which is worth planning for. It also means stronger continuity and compliance answers than a young independent vendor can give, so this cuts both ways depending on your buyer. #### Gateway scope versus runtime scope Portkey is a strong gateway: multi-provider routing, guardrails, semantic caching, and a mature observability surface over model traffic. The layers past the request stay external. Everstack carries the same request into a stateful agent runtime, isolated Docker, isolated runtime and Kubernetes sandboxes, evaluations, and OpenTelemetry traces that span all of it. #### What the Palo Alto Networks acquisition changes Portkey was acquired by Palo Alto Networks and is now sold as Prisma AIRS AI Gateway, which Palo Alto Networks announced as generally available on 16 July 2026. Acquisitions of infrastructure vendors reliably bring repricing, enterprise repackaging, and roadmap reprioritisation. Whether that helps or hurts depends on whether your requirements line up with a security platform's roadmap. #### Where Portkey is the better choice If the problem is model routing and you want a managed product with guardrails and observability working on day one, Portkey is the faster path and now carries enterprise backing. The case for Everstack rests on needing the runtime and execution layers under the same control plane, on your own infrastructure. --- ### Everstack vs Agent Frameworks Source: https://everstack.ai/comparison/agent-frameworks Browser title: Everstack vs Agent Frameworks | Framework vs Platform Page type: website Compare Everstack with agent frameworks across orchestration, model routing, isolated execution, memory, evaluations, observability, governance, and deployment owne… #### A framework is a library, a platform is infrastructure Agent frameworks give you abstractions for tools, planning and state inside your process. They do not route model traffic across providers, isolate code execution, persist sessions across restarts, enforce rate limits per tenant, or emit traces you can operate against. Those are the parts you end up building or buying separately. #### Everstack runs alongside your framework, not instead of it Point an existing agent framework at Everstack's OpenAI-compatible endpoint and it gains routing, fallback, caching, per-tenant limits and full request traces without a rewrite. Adopt the runtime later if you need durable sessions, sandboxed execution, approvals or evaluations. #### When the framework alone is enough For a single application, one provider, and no isolation or multi-tenancy requirement, a framework plus a hosted model API is less machinery and less to operate. The platform layer earns its place when several teams or tenants share the same AI infrastructure. --- ### Everstack vs Flue Source: https://everstack.ai/comparison/flue Browser title: Everstack vs Flue | Agent Framework vs Self-Hosted Runtime Page type: website Compare Everstack and Flue across agent orchestration, self-hosted infrastructure, isolated code execution, gateway routing, memory, evaluations, and observability. #### Orchestration versus the infrastructure underneath it Orchestration decides what an agent does next. Infrastructure decides which provider serves the call, what happens when that provider fails, where generated code runs, who is allowed to spend what, and how any of it is explained afterwards. Everstack owns the second set on infrastructure you control. #### What running it yourself actually requires Self-hosting an agent stack means operating provider credentials, a request path with fallback, an execution sandbox with real isolation boundaries, vector storage, and a telemetry pipeline. Everstack ships those as one deployable system with Docker or Kubernetes rather than as five services to integrate. --- ### Everstack vs Langfuse Source: https://everstack.ai/comparison/langfuse Browser title: Everstack vs Langfuse | Self-Hosted LLM Observability Page type: website Compare Everstack and Langfuse on licence terms, self-hosted feature gating, evaluations, gateway routing and agent runtime, with working code for both. #### How a trace gets created Langfuse is not a gateway. Its own documentation states that your requests never pass through Langfuse on the way to a provider, so traces come from client-side instrumentation: changing an import, wrapping calls in observations, or shipping OpenTelemetry spans yourself. Everstack routes the request, so the trace already exists before any SDK is added. #### Licence and self-hosted feature gating Langfuse's core is MIT and free to self-host without usage limits, but everything under ee/, web/src/ee/ and worker/src/ee/ carries a separate Langfuse Enterprise Licence. Project-level RBAC, audit logs, data retention policies, server-side data masking, SCIM, and the Instance Management API need a paid key when self-hosting. Everstack ships under one Apache-2.0 licence with no enterprise directory. #### Where Langfuse is the better choice Langfuse has a far larger community, over 33,900 GitHub stars as of August 2026, mature prompt management, a well documented OpenTelemetry ingestion path, and backing from ClickHouse, which acquired it in January 2026. If you want tracing and evaluations for an application whose model calls already route somewhere you control, Langfuse is the simpler adoption. --- ### Everstack vs Kong AI Gateway Source: https://everstack.ai/comparison/kong-ai-gateway Browser title: Everstack vs Kong AI Gateway | Which Plugins Cost Money Page type: website Compare Everstack and Kong AI Gateway on licence terms, which AI plugins need an enterprise key, per-model pricing, deployment modes and runtime scope, with facts f… #### Six AI plugins are free, seventeen are not Kong Gateway itself is Apache-2.0. Its AI capabilities arrive as plugins, and the split matters: ai-proxy, ai-prompt-guard, ai-request-transformer, ai-response-transformer, ai-prompt-template and ai-prompt-decorator are free. Semantic caching, advanced rate limiting, PII sanitisation, MCP proxying, LLM-as-judge and every guardrail plugin carry an AI License Required badge on their own documentation pages. #### Routing a sixth model costs $100 a month Konnect Plus includes five unique LLMs proxied by AI plugins, measured hourly and enforced monthly, then charges $100 per month for each additional model. Requests are metered separately: 1M included, then $200 per additional 1M up to a 10M cap, with control planes priced on top. Figures observed August 2026. Everstack does not bill on model count. #### Kong governs traffic, it does not run agents Kong describes itself in governance terms: securing agent-to-agent communication, governing MCP server access, inspecting and blocking messages in flight. Agent execution and code sandboxing happen elsewhere. That is a scope difference rather than a shortcoming, and it decides whether you are buying one system or two. #### When Kong is the better choice If you already run Kong for your APIs, adding AI traffic to a gateway your team already operates beats standing up a second system, and that argument usually wins on its own. Kong also has 44,059 GitHub stars, years of production proxy hardening, and a general-purpose API gateway that Everstack does not try to be. --- ### Everstack vs LiteLLM Source: https://everstack.ai/comparison/litellm Browser title: Everstack vs LiteLLM | Self-Hosted AI Gateway Comparison Page type: website Compare Everstack and LiteLLM on licence terms, which governance features sit in the enterprise directory, runtime scope, and what a migration actually costs. #### The licence is split, and governance is on the paid side LiteLLM's root LICENSE states that everything under the enterprise/ directory is governed by a separate licence and everything else is MIT. That directory exists, which is why GitHub reports the repository licence as NOASSERTION. LiteLLM's enterprise page lists virtual keys, budgets, RPM and TPM limits, spend by key, user, team and org, SSO with SCIM, and OIDC or JWT auth. Everstack ships those under Apache-2.0. #### LiteLLM has the wider provider coverage, and that can decide it LiteLLM describes itself as calling 100+ LLM APIs, and it has 57,637 GitHub stars with commits landing daily. Everstack's provider coverage is narrower. If your model list includes something niche, check it before anything else, because this can settle the evaluation on its own. #### A gateway versus what happens after the request LiteLLM routes model traffic. Agent sessions, isolated code execution, vector memory, workflows, evaluations and human review are separate systems you choose and operate. Everstack runs those on the same control plane, so a trace follows the work rather than stopping at the request boundary. #### Migration is cheap in both directions Both terminate an OpenAI-compatible request, so applications move with a base URL and key change. The real work is re-expressing proxy configuration, and rewriting anything that imports the litellm Python SDK directly rather than calling the proxy over HTTP. --- ### Everstack vs Mastra Source: https://everstack.ai/comparison/mastra Browser title: Everstack vs Mastra | TypeScript Agent Framework vs Self-Hosted Platform Page type: website Compare Everstack and Mastra on what each one is: a TypeScript framework you write agents in, or a self-hosted platform in front of agents written in any language.… #### Framework or platform is the whole comparison Mastra is a TypeScript framework the agent is written in, with a platform built around agents written that way. Everstack is a gateway, agent runtime, sandboxes, evaluations and OpenTelemetry observability in front of agents written in anything. If every agent you will run is TypeScript, Mastra's shape is simpler. If some are Python, Go or built on another framework, only a platform in front of all of them gives you one trace. #### The licence is split, on both the core and the ee/ line Mastra's core is Apache-2.0, relicensed from the Elastic License 2.0 in July 2025. Code under ee/ directories is under the Mastra Enterprise Edition licence v1.0, effective 24 August 2026, which permits development and testing but requires a paid agreement for production use. Everstack is Apache-2.0 across the repository. #### Observability, sandboxes and who runs them Mastra's observability is documented for Mastra agents, workflows, tools and model calls; ingestion of traces from applications not built on Mastra is not documented. Its Remote Sandboxes run through Daytona, E2B or Blaxel. Everstack ingests OTLP from any application, traces gateway traffic without instrumentation, and runs its own sandboxes on Docker, isolated runtime and Kubernetes. #### A Mastra agent can route through Everstack today Mastra resolves models through the Vercel AI SDK, whose OpenAI provider accepts a custom base URL, so a Mastra agent can send model calls through Everstack's OpenAI-compatible gateway and appear in Everstack traces. Mastra's OpenTelemetry export can target Everstack's OTLP endpoint. Moving an agent off Mastra entirely is a rewrite, and the page says so. --- ### Everstack vs Helicone Source: https://everstack.ai/comparison/helicone Browser title: Everstack vs Helicone | Self-Hosted LLM Observability Page type: website Compare Everstack and Helicone on licence terms, which tier unlocks on-prem deployment, pricing, and how far each one goes past logging model calls. #### The licence is a tie, and worth saying so Helicone is Apache-2.0 across the repository with no separately licensed enterprise directory, verified against its LICENSE file. So is Everstack. That is a cleaner structure than several better-known alternatives in this category, and it means licence terms should not decide this comparison. #### Helicone is in maintenance mode, by its own account Mintlify acquired Helicone in posts dated 3 March 2026. Helicone's says its services will remain live for the foreseeable future in maintenance mode, and both companies define maintenance mode as security updates, bug fixes and new models continuing to ship. The commit history agrees: between 37 and 76 commits a month in the four months before the acquisition, and between 1 and 6 a month since April 2026. The repository is Apache-2.0 and not archived, and its README says nothing about any of it, so it reads as a normally active project until you check the dates. #### On-prem sits on the Enterprise tier Helicone's pricing lists Hobby free with 10,000 requests, Pro at $79 per month, Team at $799 per month with SOC 2 and HIPAA, and Enterprise as contact-us with SAML SSO and on-prem deployment. The Apache-2.0 code is available regardless, but the supported on-prem path is a sales conversation. For Everstack, self-hosting is the default. Figures August 2026. #### When Helicone is the better choice If observability is the whole problem, Helicone's integration is about as low-friction as this category gets, its free tier is large enough to evaluate properly, and it has a longer production track record than Everstack. Buying a platform for a logging problem is over-buying. Weigh the maintenance-mode announcement yourself: it constrains new feature work rather than ending the product, and security updates, bug fixes and new models are all inside what the company says it will keep shipping. --- ### Everstack vs E2B Source: https://everstack.ai/comparison/e2b Browser title: Everstack vs E2B | Self-Hosted Sandboxes for AI Agents Page type: website Compare Everstack and E2B on sandbox isolation, concurrency limits, per-second compute pricing, self-hosting, and whether the sandbox comes with the rest of the sta… #### Concurrency is a pricing tier on E2B E2B caps concurrent sandboxes at 20 on Hobby and 100 on Pro, with extra concurrency purchasable up to 1,100, and session length at 1 hour and 24 hours respectively. Agent workloads are bursty, so a concurrency ceiling is usually the first constraint teams hit, and hitting it is a procurement conversation rather than a scaling one. Figures August 2026. #### Both are Apache-2.0, and both document self-hosting E2B is Apache-2.0 across two repositories, e2b-dev/E2B for the SDK and e2b-dev/infra for the Go infrastructure, and it publishes a root-level self-host.md describing a Terraform deployment: GCP is marked GA, AWS is beta, and Azure and generic Linux are listed unchecked. It expects a Cloudflare account and domain, Postgres, Packer and Terraform 1.7.5. What stays hosted-only is the commercial product and the pricing page, across Hobby, Pro and Ultimate tiers. #### Published per-second compute rates E2B publishes its rates openly, which is rarer in this category than it should be: 1 vCPU at $0.000014 per second up to 8 vCPU at $0.000112, plus $0.0000045 per GiB per second of RAM, with 10 GiB of storage on Hobby and 20 GiB on Pro. Hobby is free with a one-time $100 of credits; Pro is $150 per month. #### When E2B is the better choice If sandboxing is the whole problem, E2B has the more mature developer experience and a larger community, and adding a platform to get a sandbox is over-buying. Both use isolated runtimes, so isolation strength is not the differentiator. E2B's homepage gives two different startup figures, less than 200 ms and 80 ms, so treat neither as an authoritative number. --- ### Everstack vs Daytona Source: https://everstack.ai/comparison/daytona Browser title: Everstack vs Daytona | Self-Hosted AI Code Sandboxes Page type: website Daytona's open source repository stopped receiving updates in June 2026 when core development moved to a private codebase. What that means if you were planning to s… #### The open source repository is no longer maintained Daytona's README states it plainly: as of June 2026 core development moved to a private codebase, and the repository will receive no further updates, fixes or releases. It remains public and free to use, fork and build on, as is and without support or warranty. The last commit landed on 25 June 2026. The 71,871 GitHub stars are attached to a tree that has stopped moving. #### Apache-2.0, then AGPL-3.0, then no licence at all The initial commit on 6 February 2024 was Apache-2.0. A commit on 28 April 2025 relicensed the project to AGPL-3.0 alongside the AI-sandbox pivot, shipped as v0.100.0. A commit on 23 June 2026 deleted the LICENSE file entirely, and GitHub now reports the repository licence as none. The last open release, v0.190.0, is AGPL-3.0, and the README points forks at that tag. If you were planning to fork, that tag is the thing to fork. #### The isolation claim is contested by their own materials Daytona's documentation says default sandboxes are Linux containers, with VM sandboxes offered as a separate option. The repository README claims each sandbox has a dedicated kernel, filesystem and network stack, which describes a VM rather than a container. Both statements are theirs and we are not harmonising them. For untrusted, model-generated code, get the answer in writing before you commit. #### This does not affect Daytona's hosted product The notice concerns the open source repository. Daytona the company continues to develop the product and their hosted service is unaffected. If you are a hosted customer, none of this is your problem. If your plan was to self-host, you would be running an unmaintained snapshot including for security fixes. #### Daytona is faster on cold start, and we say so Daytona documents sandboxes starting in under 90 milliseconds from code to execution, which is faster than Everstack claims. Their stateful snapshot support is also more mature than ours. If you spawn a sandbox per request rather than per session, that latency number may outweigh everything else here. --- ### Everstack vs Braintrust Source: https://everstack.ai/comparison/braintrust Browser title: Everstack vs Braintrust | Self-Hosted LLM Evaluation Page type: website Compare Everstack and Braintrust on evaluation depth, which tier unlocks self-hosting, processed-data pricing, and whether evals connect to the runtime that produce… #### Braintrust makes the better evaluation product Their scorer authoring, experiment workflow and review tooling are more mature than ours, and if evaluation is the centre of your work that is the right reason to pick them. This page says so more than once, because a comparison that claims to win everywhere is not worth reading. #### Self-hosting is Enterprise only Braintrust's pricing describes on-prem or hosted deployment for high volume or privacy-sensitive data as a custom Enterprise arrangement, not available on Starter or Pro. Starter is $0 with $10 in credits, 1 GB of processed data and 10,000 scores; Pro is $249 per month with 5 GB and 50,000 scores. Figures August 2026. #### Where the runs being scored come from Braintrust is not in the request path, so evaluation data is something you instrument and send. Everstack scores runs that already went through the gateway or agent runtime, which removes the most common reason eval coverage stays partial: nobody instrumented the service that mattered. --- ### Everstack vs Bifrost Source: https://everstack.ai/comparison/bifrost Browser title: Everstack vs Bifrost | Which Gateway Features Are Enterprise Page type: website Compare Everstack and Bifrost by Maxim AI on licence terms, which capabilities are enterprise-only, raw gateway performance, and scope past the request. #### Guardrails and high availability are Enterprise on Bifrost Bifrost's pricing page puts guardrails, Cluster Mode, Adaptive Load Balancing with real-time health monitoring, RBAC, audit logs, log exports, SSO via SAML and OIDC, and vault integrations on the Enterprise tier. Putting high availability and guardrails behind the paid tier makes the free build a development gateway more than a production one. Everstack ships those under Apache-2.0. #### The licence is a genuine tie Bifrost is Apache-2.0 across the repository with no enterprise directory, verified against its LICENSE file, with 7,675 GitHub stars and commits landing daily. So is Everstack. Both projects keep the source tree clean and put commercial differentiation in the product tier instead. #### On raw overhead, Bifrost is theirs to win Bifrost claims under 100 microseconds of overhead at 5,000 requests per second, and 50x faster than LiteLLM. We have not independently benchmarked that and will not repeat or dispute it as fact. If proxy overhead is a hard constraint for you, measure both against your own traffic rather than trusting anyone's table, including this one. --- ### Everstack vs Cloudflare AI Gateway Source: https://everstack.ai/comparison/cloudflare-ai-gateway Browser title: Everstack vs Cloudflare AI Gateway | Hosted or Self-Hosted Page type: website Compare Everstack and Cloudflare AI Gateway on deployment model, data residency, caching and rate limiting, and what happens to your traffic past the request. #### One question decides this, and it is not a feature Cloudflare AI Gateway is a platform service with no self-hosting option. Its documentation presents it exclusively as Cloudflare-hosted. If a data residency or deployment constraint is why you are evaluating gateways, that settles it immediately. If traffic traversing Cloudflare is fine, it is very hard to beat. #### It is free on every Cloudflare plan, and that matters Cloudflare describes AI Gateway as available on all plans including the free tier, and it takes one line of code. If you already run on Cloudflare, standing up your own gateway instead is hard to justify on anything except the deployment question. There is also no infrastructure to operate, which is a real advantage rather than a footnote. #### Scope stops at the request boundary Analytics and logging, caching served from Cloudflare's edge rather than the model provider, rate limiting, and retry with model fallback. Agent execution, isolated sandboxes, memory, evaluations and human review are not part of it. Whether that matters depends entirely on whether you have those problems. --- ### Everstack vs OpenRouter Source: https://everstack.ai/comparison/openrouter Browser title: Everstack vs OpenRouter | Hosted Aggregator or Self-Hosted Page type: website Compare Everstack and OpenRouter on deployment model, credit and BYOK fees, provider breadth, and what happens to prompts and responses in transit. #### OpenRouter has the wider catalogue, and passes inference through at cost OpenRouter states it passes underlying provider pricing through without markup, which is a fair commercial model and worth crediting. Its model catalogue behind a single key is the widest available and nothing self-hosted will match it. If your workflow is trying new models as they land, use OpenRouter. #### The fees are on credits and on bringing your own keys Credit purchases carry 5.5% with a $0.80 minimum via Stripe, or 5% via crypto. Bringing your own provider keys is free up to $25,000 of monthly list price on pay-as-you-go and $200,000 on enterprise, then costs 5% of standard OpenRouter pricing for that model and provider. The allowance is generous and most teams never reach it. Figures August 2026. #### Prompts transit a third party OpenRouter's documentation describes no self-hosting or open source option, so prompts and responses pass through their infrastructure. For teams whose customers ask where inference data is processed, that is the whole question. For everyone else it is a non-issue and the hosted option is far less work. --- ### Everstack vs Modal Source: https://everstack.ai/comparison/modal Browser title: Everstack vs Modal | Serverless Compute or Self-Hosted Runtime Page type: website Compare Everstack and Modal on deployment model, GPU access, per-second compute pricing, and whether sandboxed execution comes with a gateway and agent runtime. #### These overlap less than the search results suggest Modal is general serverless compute with first-class GPU support. Its Sandboxes and Notebooks bill CPU at $0.00003942 per core per second and memory at $0.00000667 per GiB per second, roughly three times its standard compute rate of $0.0000131 and $0.00000222; since this comparison is about sandboxes, the sandbox rate is the one that applies. A core means a physical core, about 2 vCPU, with a 0.125 core minimum. GPUs run from $0.000164 per second for an Nvidia T4 to $0.001972 for a B300. Everstack is AI infrastructure where sandboxed execution is one layer. They overlap on running untrusted code and diverge everywhere else. #### If you need GPUs, use Modal Everstack does not offer managed GPU compute at all, so this is not a close call. Many teams should run both: Modal for GPU workloads, Everstack for the gateway, agent runtime and sandboxed execution of agent-generated code. Modal's pricing page describes no self-hosting or on-premises option. #### Modal's sandbox isolation and network controls are good Modal states that compute jobs are containerized and virtualized using gVisor, the sandboxing technology developed at Google. Its network controls are worth crediting: block_network=True drops all outbound traffic, outbound_cidr_allowlist restricts egress by CIDR, and Sandboxes are not authorized to access other resources in your Modal workspace. One default to set deliberately: a Sandbox lives five minutes unless you configure a longer lifetime, up to 24 hours. #### What surrounds the execution Debugging an agent that wrote bad code means seeing the prompt, the completion and the execution together. On Everstack those share one trace because the gateway, the runtime and the sandbox are one control plane. On Modal, correlating execution with the model call that produced the code is a join you build and maintain. --- ### LiteLLM Alternatives in 2026 Source: https://everstack.ai/alternatives/litellm Browser title: LiteLLM Alternatives in 2026 | Self-Hosted AI Gateways Page type: website Six alternatives to LiteLLM compared on licence terms, which capabilities need a paid key when self-hosting, and published pricing. Facts checked against each proje… #### Most teams leaving LiteLLM are not unhappy with it They have hit the enterprise line. LiteLLM's root LICENSE places everything under enterprise/ under a separate licence, and virtual keys, budgets, RPM and TPM limits, spend by key, user, team and org, SSO with SCIM and OIDC auth sit there. Enterprise pricing is not published, so it arrives as a sales conversation rather than a line item you can plan for. #### Every self-hostable alternative draws its own line Bifrost gates guardrails, cluster mode, adaptive load balancing, RBAC and audit logs. Kong gates seventeen AI plugins including semantic caching and every guardrail. Helicone gates supported on-prem deployment. Everstack gates none of these. Find the line before adopting, because governance and high availability are what you need in month six. #### Check your model list before anything else LiteLLM has the widest provider coverage of anything self-hostable, describing itself as calling 100+ LLM APIs. One niche provider you depend on can block a full cutover, and finding that out in week three is expensive. Also run a grep for `import litellm`: calling the proxy over HTTP moves with a base URL change, but using the Python library as a library is a rewrite. --- ### Portkey Alternatives in 2026 Source: https://everstack.ai/alternatives/portkey Browser title: Portkey Alternatives in 2026 | After the Palo Alto Deal Page type: website Six alternatives to Portkey compared on deployment control, licence terms and published pricing, with a straight read on what the Palo Alto Networks acquisition doe… #### The acquisition is a reason to re-evaluate, not to migrate Palo Alto Networks has completed its acquisition of Portkey, which now ships as Prisma AIRS AI Gateway. Acquisitions of infrastructure vendors routinely bring repricing, enterprise repackaging and roadmap reprioritisation. They also bring stronger continuity and compliance answers than a young independent vendor can give. Be specific about which of those matters to you before moving. #### If deployment control is the reason, that is durable Portkey is primarily cloud-hosted, with self-hosting positioned on enterprise plans. If a data residency or deployment constraint is why you are shopping, that constraint does not go away, and it narrows the shortlist to options where self-hosting is the default rather than a tier. #### The configuration port is the real work Portkey config objects and virtual keys have to be re-expressed as routing policy and API keys wherever you go, and guardrail rules need re-declaring. The endpoint itself is a base URL and header change, because both ends are OpenAI-compatible. Plan a dual-run period rather than a cutover. --- ### Helicone Alternatives in 2026 Source: https://everstack.ai/alternatives/helicone Browser title: Helicone Alternatives in 2026 | LLM Observability Compared Page type: website Six alternatives to Helicone compared on licence terms, self-hosted feature gating, datastore count and pricing, plus what maintenance mode actually covers. #### What maintenance mode actually covers Mintlify acquired Helicone in posts dated 3 March 2026, and Helicone's says its services will remain live for the foreseeable future in maintenance mode. Both companies define that as security updates, bug fixes and new models continuing to ship, so it constrains new feature work rather than ending the product. Commit volume matches: between 37 and 76 a month in the four months before the acquisition, and between 1 and 6 a month since April 2026. The repository is Apache-2.0 with no separately licensed enterprise directory, it is not archived, and its README mentions none of this, so it reads as a normally active project until you check the dates. #### The real reasons are narrower Supported on-prem deployment sits under the Enterprise tier, and SOC 2 and HIPAA compliance sit on Team at $799 per month, which is a large step from Pro at $79. And the product is observability: agent execution, isolated sandboxes and evaluation workflows are outside its scope. #### Choose on licence gating and datastore count Langfuse gates nine features behind an enterprise licence when self-hosting, including audit logs, retention policies and server-side data masking. Opik gates only user management but runs five datastores. OpenLIT runs one and has no paid tier at all. Laminar runs three with cloud and self-hosted parity. Those are the differences that are hard to change later. --- ### E2B Alternatives in 2026 Source: https://everstack.ai/alternatives/e2b Browser title: E2B Alternatives in 2026 | Self-Hosted Agent Sandboxes Page type: website Alternatives to E2B for running AI-generated code, compared on isolation primitive, whether self-hosting is real, how concurrency is priced, and which projects are… #### Concurrency and session length are pricing tiers E2B caps concurrent sandboxes at 20 on Hobby and 100 on Pro, purchasable to 1,100, with sessions capped at 1 hour and 24 hours respectively. Agent workloads are bursty, so the concurrency ceiling is usually the first constraint teams hit, and hitting it is a procurement conversation rather than a scaling one. #### Check the commit history, not the star count Daytona carries 71,871 GitHub stars and a README stating that as of June 2026 core development moved to a private codebase and the repository will receive no further updates, fixes or releases. Check the LICENSE file too: it was Apache-2.0 at the first commit in February 2024, AGPL-3.0 from April 2025, and deleted outright on 23 June 2026, so GitHub now reports the repository licence as none and the last open release, v0.190.0, is the AGPL-3.0 tag the README points forks at. For a sandbox, whose entire job is to be a security boundary, running an unmaintained snapshot is a serious position. Their hosted product is unaffected and is genuinely fast, documenting sub-90ms starts. #### The isolation primitive decides more than the feature grid For untrusted, model-generated code, containers alone are a weaker boundary than most teams assume, since container escapes are a recurring vulnerability class. isolated runtimes and gVisor are where this category has converged: E2B and Everstack use isolated runtime, Modal uses gVisor. Daytona is the case for pinning it down, because its documentation says default sandboxes are Linux containers while its README claims a dedicated kernel. If a vendor is vague about which primitive they use, settle that before reading anything else on their page. --- ### Everstack Blog Source: https://everstack.ai/blog Browser title: Everstack Blog | AI Infrastructure Engineering Page type: website Read Everstack product updates, engineering deep dives, and practical guidance for operating production AI infrastructure. --- ### Everstack Changelog Source: https://everstack.ai/changelog Browser title: Everstack Changelog | Product Releases and Updates Page type: website Follow Everstack releases across AI gateway routing, agents, sandboxes, evaluations, observability, and platform operations. --- ### Everstack Roadmap Source: https://everstack.ai/roadmap Browser title: Everstack Roadmap | AI Infrastructure Product Direction Page type: website See what Everstack has shipped, what is in progress, and what is coming next across agents, sandboxes, evaluations, and observability. --- ### AI Model Catalog Source: https://everstack.ai/models Browser title: AI Model Catalog | Compare Providers and Pricing | Everstack Page type: website Browse AI models across OpenAI, Anthropic, Google, AWS Bedrock, Azure, and more. Compare context windows, capabilities, modalities, and token pricing. --- ### Compare the models that fit the work. Source: https://everstack.ai/models/compare Browser title: Compare AI Models, Capabilities and Pricing | Everstack Page type: website Compare AI models side by side across providers, token pricing, context windows, modalities, capabilities, release dates, and gateway availability. --- ### Everstack Compatibility Source: https://everstack.ai/compatibility Browser title: Everstack Compatibility | SDKs, Frameworks, Models & Tools Page type: website See how Everstack connects your SDKs, agent frameworks, AI model providers, tools, channels, webhooks, MCP servers, and OpenTelemetry pipelines. #### Compatibility without a rewrite Use native SDKs, the OpenAI-compatible gateway, MCP, webhooks, and OpenTelemetry to connect the stack your team already operates. #### Four implementation directories Explore exact compatibility paths for languages and SDKs, agent frameworks, model providers, and external tools. --- ### Everstack SDKs & Language Compatibility Source: https://everstack.ai/compatibility/sdks Browser title: Everstack SDKs & Language Compatibility | TypeScript, Python, Go Page type: website Use Everstack from TypeScript, Python, Go, Java, Rust, or any OpenAI-compatible client. Explore native SDKs, typed platform APIs, and gateway compatibility. #### Native SDKs and an open gateway Use typed TypeScript, Python, and Go clients for the full platform, or point an OpenAI-compatible client at Everstack from any other language. --- ### Agent Framework Compatibility Source: https://everstack.ai/compatibility/agent-frameworks Browser title: Agent Framework Compatibility | LangChain, CrewAI & More Page type: website Run LangChain, CrewAI, Pydantic AI, OpenAI Agents, MLflow, Claude Agent SDK, and Vercel AI with Everstack gateway, sandboxes, memory, and observability. #### Keep your framework Preserve your agent loop, prompts, tools, graphs, and state while Everstack supplies gateway routing and production runtime services. --- ### AI Model Provider Compatibility Source: https://everstack.ai/compatibility/model-providers Browser title: AI Model Provider Compatibility | OpenAI, Anthropic & More Page type: website Connect OpenAI, Anthropic, Gemini, Mistral, Ollama, Groq, Azure OpenAI, AWS Bedrock, DeepSeek, Qwen, and more through one Everstack gateway API. #### One API across the model market Route between hosted, cloud, and local model providers with fallback, key rotation, caching, rate limits, and unified telemetry. --- ### Everstack Integrations Source: https://everstack.ai/compatibility/integrations Browser title: Everstack Integrations | GitHub, Slack, MCP & OpenTelemetry Page type: website Connect Everstack with GitHub, Slack, Stripe, Figma, Datadog, Grafana, Google Drive, LangSmith, and more through native integrations, MCP, webhooks, and OTLP. #### Native connectors and open protocols Connect source control, channels, SaaS tools, MCP servers, webhooks, and telemetry pipelines without depending on a closed connector marketplace. --- ### Privacy Policy Source: https://everstack.ai/privacy Browser title: Privacy Policy | Everstack Page type: website How Everstack collects, uses, and protects personal data, including EU and UK GDPR rights and our subprocessor list. #### Full published page content ## 1. Introduction This Privacy Policy explains how **Everstack Labs Limited** ("**Everstack**", "**we**", "**us**", "**our**") collects, uses, and protects personal data when you use everstack.ai, our APIs, command-line tools, dashboards, and related services (collectively, the "**Service**"). Everstack is the **data controller** for personal data we collect about visitors to our website, account holders, and the individual users we administer on behalf of business customers. When we process content that a business customer submits to the Service on behalf of their own end-users, we act as a **data processor** under that customer's instructions, governed by our Data Processing Agreement. We are a company registered in Ireland. We operate the Service from infrastructure located in the European Union. This policy applies to personal data covered by the EU General Data Protection Regulation (GDPR) and the Irish Data Protection Act 2018. Defined terms in those laws (for example, "personal data", "processing", "controller", "processor") have the same meaning in this policy. ## 2. Information We Collect ### Information you provide - **Account details** - name, email, organisation name, role, and password (stored as a salted hash). - **Billing information** - billing contact, billing address, VAT number, and payment-method details handled by our payments processor. Card numbers and CVCs are never stored on our servers. - **Content and configuration** - prompts, system messages, evaluation datasets, agent definitions, sandbox files, and any other content you submit to the Service. - **Support and communication** - messages you send to our team, including by email, in-product chat, or our community channels. ### Information collected automatically - **Service telemetry** - IP address, user-agent, device and browser details, request paths, latency, status codes, and error events. - **Product analytics** - page views, feature interactions, and session metadata collected through our analytics provider, PostHog, hosted in the EU. We do not use third-party advertising trackers. - **Cookies** - see Section 5 below. ### Information from third parties - **Identity providers** - when you sign in with Google, GitHub, Microsoft, or another supported identity provider via WorkOS, we receive your name, email, profile picture, and a unique identifier so that we can authenticate you. - **Payment processor** - Stripe shares transaction status, last four card digits, and dispute information so we can manage your billing. ## 3. How We Use Your Information We use personal data to: - provide, maintain, and secure the Service, including authentication, billing, support, and abuse prevention; - operate the LLM gateway, route inference requests to providers you select, and surface observability data back to you; - send transactional communications (account verification, security alerts, billing notices, service updates); - send product and marketing communications, where you have opted in or where we have a legitimate interest and you have not objected; - analyse usage patterns to improve product quality, reliability, and security; - detect, prevent, and respond to fraud, abuse, and security incidents; - comply with legal obligations, including tax, accounting, and lawful requests from authorities. ## 4. Legal Bases for Processing We rely on the following GDPR Article 6 legal bases: - **Contract performance (Art. 6(1)(b))** - to deliver the Service, manage your Account, process payments, and provide support. - **Legitimate interests (Art. 6(1)(f))** - to secure the Service, prevent abuse, analyse usage, develop new features, and send product communications to existing customers, balanced against your rights and freedoms. - **Consent (Art. 6(1)(a))** - for non-essential cookies and marketing emails sent to non-customers. You may withdraw consent at any time. - **Legal obligation (Art. 6(1)(c))** - to retain billing records and respond to lawful requests. For special categories of personal data (Art. 9), we rely on explicit consent or another available basis only where strictly necessary. We discourage you from submitting special-category data to the Service. ## 5. Cookies and Similar Technologies We use a small number of cookies and similar technologies: - **Essential** - session cookies that keep you logged in and protect against cross-site request forgery. These cannot be turned off without breaking the Service. - **Analytics** - first-party cookies set by PostHog to measure feature usage and aggregate session behaviour. You can opt out of analytics via the cookie banner or your browser's Do Not Track signal. We do not use third-party advertising or cross-site tracking cookies. ## 6. Sharing and Subprocessors We do not sell personal data. We share it only with the categories of recipient listed below, and only as needed to provide the Service. | Subprocessor | Purpose | Location | Privacy policy | | --- | --- | --- | --- | | Cloudflare | DNS, CDN, R2 object storage | Global | [cloudflare.com/privacypolicy](https://www.cloudflare.com/privacypolicy/) | | OVHcloud | Compute and managed Kubernetes (k3s) | EU (France) | [ovhcloud.com](https://www.ovhcloud.com/en-gb/terms-and-conditions/privacy-policy/) | | Resend | Transactional email delivery | EU/US | [resend.com/legal/privacy-policy](https://resend.com/legal/privacy-policy) | | PostHog | Product analytics (EU-hosted instance) | EU | [posthog.com/privacy](https://posthog.com/privacy) | | WorkOS | Authentication and SSO | US | [workos.com/privacy](https://workos.com/legal/privacy) | | Stripe | Payments and billing | EU/US | [stripe.com/privacy](https://stripe.com/privacy) | | LLM Providers (Anthropic, OpenAI, Google, etc.) | Inference requests you choose to route | Varies | Their own policies | When you route inference traffic through the Service to a third-party LLM Provider, that provider receives the prompt, context, and any tool outputs needed to fulfil the request. Their handling of that data is governed by their own terms and privacy policy. We may also share personal data with professional advisers (lawyers, accountants, auditors) under confidentiality obligations, and with regulators, courts, or law-enforcement authorities where required by law. If we are involved in a merger, acquisition, or sale of assets, personal data may be transferred. We will notify you before any transfer becomes subject to a different privacy policy. ## 7. Data Retention We retain personal data only for as long as we need it for the purposes described in this policy: - **Account data** - kept while your Account is active. After cancellation, we retain it for up to **ninety (90) days** to allow for reactivation and export, then delete or anonymise it. - **Prompt and response logs** - retained according to your tenant's configured retention window. **Default is thirty (30) days, maximum 365 days.** You can shorten this in your settings. - **Telemetry and analytics** - aggregated indefinitely; raw event data retained for up to 12 months. - **Billing and tax records** - retained for **seven (7) years** to comply with Irish statutory accounting requirements. - **Backups** - encrypted backups are rotated on a rolling 35-day cycle and overwritten in the normal course. We may retain information longer where required by law, to resolve disputes, or to enforce our agreements. ## 8. International Transfers Primary processing takes place in the European Union. Where personal data is transferred outside the EEA (for example, to a subprocessor based in the United States), we rely on legally recognised transfer mechanisms, including the European Commission's **Standard Contractual Clauses**, supplemented by additional safeguards where appropriate. You can ask us for a copy of the transfer mechanism in place for a specific transfer by emailing privacy@everstack.ai. ## 9. Security We take security seriously and apply layered controls, including: - TLS 1.2+ in transit and AES-256 at rest for stored data; - least-privilege access controls, single sign-on, and audit logging for our internal systems; - segregated tenant data with explicit tenant-scoping checks on every request path; - regular dependency and infrastructure patching; - periodic penetration testing by an independent assessor; and - a documented incident-response process. No system is perfectly secure. If you suspect a vulnerability, please disclose it responsibly to **security@everstack.ai**. ## 10. Your Rights Subject to applicable law, you have the right to: - **Access** - request a copy of the personal data we hold about you. - **Rectification** - ask us to correct inaccurate or incomplete data. - **Erasure** - ask us to delete your personal data, where one of the legal grounds applies. - **Restriction** - ask us to limit how we process your personal data while a request is resolved. - **Portability** - receive your personal data in a structured, commonly used, machine-readable format. - **Objection** - object to processing that we conduct on the basis of legitimate interests, including direct marketing. - **Withdraw consent** - withdraw any consent you previously gave, without affecting the lawfulness of prior processing. - **Lodge a complaint** - complain to your data-protection supervisory authority. In Ireland, this is the Data Protection Commission ([dataprotection.ie](https://www.dataprotection.ie/)). To exercise any of these rights, email **privacy@everstack.ai**. We will respond within one month and may ask you to verify your identity before we act. If you are an end-user of a business customer (for example, your employer uses Everstack), please direct your request to that customer first. We will assist them in responding. ## 11. Children's Privacy The Service is not directed at children under 16. We do not knowingly collect personal data from children. If you believe a child has provided us with personal data, please contact privacy@everstack.ai so we can delete it. ## 12. Changes to This Policy We may update this Privacy Policy from time to time. We will post the updated version at this URL and update the "Last updated" date below. For material changes, we will give at least **thirty (30) days' notice** by email or in-product notification before the changes take effect. ## 13. Contact For privacy questions, data-subject requests, or exercising any of the rights above: - **Data protection** - privacy@everstack.ai - **Security disclosures** - security@everstack.ai - **General support** - support@everstack.ai --- ### Terms of Service Source: https://everstack.ai/terms Browser title: Terms of Service | Everstack Page type: website The terms that govern your use of Everstack, including our LLM gateway, observability, and agent sandbox platform. #### Full published page content ## 1. Introduction These Terms of Service ("**Terms**") govern your access to and use of the Everstack platform, websites, APIs, command-line tools, and related services (collectively, the "**Service**") operated by **Everstack Labs Limited** ("**Everstack**", "**we**", "**us**", or "**our**"), a company registered in Ireland. By creating an account, accessing the Service, or clicking to accept these Terms, you ("**Customer**", "**you**", or "**your**") agree to be bound by these Terms. If you are entering into these Terms on behalf of an organisation, you represent that you have authority to bind that organisation, and "you" refers to that organisation. If you do not agree to these Terms, do not access or use the Service. These Terms form a binding agreement between you and Everstack. They incorporate by reference our [Privacy Policy](https://everstack.ai/privacy) and, where applicable, our Data Processing Agreement ("**DPA**"). ## 2. Definitions - **Account** - the registered tenant under which you access the Service, including all users, projects, and resources associated with it. - **Customer Content** - all data, prompts, configurations, code, evaluations, sandboxes, logs, model outputs, and other materials you submit to or generate through the Service. - **Documentation** - the user-facing documentation we publish at docs.everstack.ai. - **LLM Provider** - any third-party large-language-model provider (for example, Anthropic, OpenAI, Google) that you choose to route requests to through the Service. - **Service** - the Everstack platform, including the LLM gateway, observability tooling, agent sandboxes, and any features released as part of those products. - **Subprocessor** - a third party engaged by Everstack to process Customer Content on our behalf, as listed in the Privacy Policy. - **User** - an individual authorised to access the Service under your Account. ## 3. Eligibility and Account Registration You must be at least 18 years old and capable of forming a legally binding contract to use the Service. The Service is intended for business and professional use; it is not designed for personal use by consumers. When you register, you agree to (a) provide accurate, current, and complete information, (b) keep that information up to date, and (c) keep your credentials confidential. You are responsible for all activity that occurs under your Account, including the actions of every User you invite. Notify us immediately at security@everstack.ai if you suspect unauthorised access. We may suspend or terminate Accounts that submit false information, are inactive for extended periods, or violate these Terms. ## 4. Subscriptions and Free Trials The Service is offered on free, pay-as-you-go, and subscription tiers described on our pricing page. Plan features, usage limits, and prices may change; we will give you reasonable notice of material changes that affect your active plan. **Free tier.** Free-tier usage is subject to fair-use limits and may be rate-limited, throttled, or paused if your usage substantially exceeds expected patterns or impacts other customers. **Free trials.** Where we offer a paid plan trial, the trial converts to a paid subscription at the end of the trial period unless you cancel before it ends. **Auto-renewal.** Paid subscriptions renew automatically for successive terms (monthly or annual) until cancelled. You may cancel renewal at any time from your billing settings; cancellation takes effect at the end of the current billing period. ## 5. Acceptable Use You must not, and must not permit any User or third party to: - use the Service to build, train, host, or deliver any product or service that is competitive with the Service; - introduce malicious code, viruses, or material designed to disrupt the Service or any other system; - abuse, bypass, or attempt to bypass rate limits, quotas, or security controls; - use the Service to violate any LLM Provider's terms or acceptable-use policy; - submit personal data of EU/EEA data subjects in bulk without an executed DPA in place; - use the Service to generate or distribute unlawful, infringing, defamatory, harassing, or deceptive content; - attempt to reverse-engineer, decompile, or extract the source code of the Service, except where this restriction is prohibited by applicable law; - resell, sublicense, or otherwise commercially redistribute the Service without our prior written consent; or - use the Service in any way that breaches applicable law, including export-control, sanctions, and data-protection law. We may investigate suspected violations and suspend access immediately where misuse poses a risk to the Service, other customers, or third parties. ## 6. Customer Content You retain all right, title, and interest in and to Customer Content. You grant Everstack a worldwide, non-exclusive, royalty-free licence to host, copy, transmit, display, and otherwise process Customer Content solely as necessary to provide and improve the Service, comply with applicable law, and enforce these Terms. We may generate and retain **aggregated and anonymised** statistics (for example, request counts, latency distributions, error rates) that cannot reasonably identify you or any individual. Such aggregated data is not Customer Content and may be used to operate, secure, and improve the Service. You are solely responsible for the legality, accuracy, and appropriateness of Customer Content, including ensuring you have obtained any consents or rights required to submit it. You are responsible for backing up Customer Content. We will use reasonable efforts to maintain redundancy and durability, but the Service is not a backup or archival product. ## 7. Third-Party LLM Providers The Service routes inference requests to LLM Providers selected by you. Use of those providers is governed by **their** terms and privacy policies, and you are responsible for complying with them. We are not responsible for the availability, accuracy, or quality of any LLM Provider's outputs, model behaviour, or service levels. When you use your own provider API keys, those keys remain your credentials. We store them encrypted and use them only to forward requests on your behalf. You can revoke a stored key at any time. LLM outputs can be incorrect, biased, or hallucinated. You must independently evaluate outputs before relying on them, especially for any decision affecting health, finance, employment, legal status, or other significant interests. ## 8. Intellectual Property The Service, including all software, designs, documentation, and trade marks, is owned by Everstack or its licensors and is protected by intellectual-property laws. Nothing in these Terms transfers ownership of the Service or any associated intellectual-property rights to you. We grant you a limited, non-exclusive, non-transferable, revocable licence during the term to access and use the Service for your internal business purposes. If you submit feedback, suggestions, or ideas about the Service, you grant Everstack a perpetual, irrevocable, worldwide, royalty-free licence to use that feedback for any purpose without obligation to you. ## 9. Confidentiality Each party may receive non-public information from the other ("**Confidential Information**"). The recipient must (a) use Confidential Information only to exercise rights or perform obligations under these Terms, (b) protect it with at least the same care it uses for its own confidential information (and no less than reasonable care), and (c) not disclose it except to employees, contractors, and advisers who have a need to know and are bound by confidentiality obligations. Confidential Information does not include information that is publicly available, was rightfully known before disclosure, is independently developed, or is rightfully obtained from a third party without restriction. This Section survives termination of these Terms for three years; trade secrets remain protected for as long as they qualify as trade secrets. ## 10. Fees and Payment Paid plans are billed in advance on a monthly or annual cycle. Usage-based charges (for example, additional gateway requests or sandbox compute) are billed in arrears for the prior period. Fees are stated exclusive of taxes. You are responsible for all sales, value-added, withholding, and similar taxes other than taxes on Everstack's income. Where required, we will collect and remit applicable taxes. Invoices are payable on receipt unless otherwise stated. If payment fails or is overdue, we may (a) charge statutory interest at the rate permitted under applicable law, (b) suspend the Service after reasonable notice, and (c) terminate the Account if non-payment continues for more than thirty (30) days. All payments are processed by our payment provider, Stripe. ## 11. Warranties and Disclaimers Each party warrants that it has authority to enter into these Terms. **Except as expressly stated**, the Service is provided "**as is**" and "**as available**" without warranties of any kind, whether express, implied, or statutory, including warranties of merchantability, fitness for a particular purpose, non-infringement, accuracy, and uninterrupted operation. We do not warrant that the Service will be error-free, secure against every conceivable threat, or available without interruption. We make **no warranty** in respect of any output produced by an LLM Provider, including but not limited to factual accuracy, originality, or absence of hallucination. ## 12. Limitation of Liability To the maximum extent permitted by applicable law: - neither party will be liable for indirect, incidental, special, consequential, exemplary, or punitive damages, or for any loss of profits, revenue, goodwill, anticipated savings, or data, even if advised of the possibility; and - each party's total aggregate liability arising out of or relating to these Terms will not exceed the fees paid or payable by you to Everstack in the **twelve (12) months** immediately preceding the event giving rise to liability. Nothing in these Terms limits or excludes liability that cannot be limited or excluded under applicable law, including liability for death or personal injury caused by negligence, fraud, or fraudulent misrepresentation. ## 13. Indemnification **By you.** You will defend, indemnify, and hold harmless Everstack and its affiliates, officers, employees, and agents from and against any third-party claim, loss, or expense (including reasonable legal fees) arising from (a) your breach of these Terms, (b) Customer Content, or (c) your violation of applicable law or any third party's rights. **By us.** We will defend you against any third-party claim alleging that your authorised use of the Service infringes that third party's intellectual-property rights, and we will pay damages finally awarded or amounts in settlement, provided you (a) notify us promptly, (b) give us sole control of the defence and any settlement, and (c) provide reasonable cooperation. We have no obligation for claims arising from Customer Content, your modifications to the Service, or your combination of the Service with materials we did not supply. ## 14. Term and Termination These Terms apply from the date you first accept them and continue until terminated. **Termination for convenience.** You may close your Account at any time from your account settings. We may discontinue free-tier access at any time on reasonable notice. **Termination for cause.** Either party may terminate immediately on written notice if the other party (a) materially breaches these Terms and fails to cure within thirty (30) days of notice (or immediately for breaches that cannot be cured), or (b) becomes insolvent, enters into examinership, receivership, or liquidation under the Irish Companies Act 2014, or is otherwise unable to pay its debts as they fall due. **Effect of termination.** On termination, your right to access the Service ends. We will make Customer Content available for export for thirty (30) days following termination, after which we may delete it in accordance with our retention practices. Accrued fees and obligations that by their nature should survive termination (including Sections 6, 8, 9, 11, 12, 13, 17, and 18) survive. ## 15. Data Processing and GDPR Where Everstack processes personal data on your behalf, that processing is governed by our DPA, which forms part of these Terms once executed. The DPA is available on request from privacy@everstack.ai and is required if you intend to submit personal data of EU/EEA data subjects to the Service. Primary processing infrastructure is located in the European Union (OVHcloud, Gravelines region). We will only transfer personal data outside the EU/EEA where permitted by applicable data-protection law, including under appropriate safeguards such as Standard Contractual Clauses. For full details of the personal data we collect, how we use it, and your rights, see our [Privacy Policy](https://everstack.ai/privacy). ## 16. Modifications to the Service and Terms We may modify the Service from time to time, including adding, removing, or changing features. We will not make changes that materially reduce the core functionality of a paid plan during your then-current term without notice. We may amend these Terms by posting an updated version at this URL. For material changes that adversely affect you, we will provide at least **thirty (30) days' notice** by email or in-product notification before they take effect. Your continued use of the Service after the effective date constitutes acceptance of the amended Terms. If you do not accept the changes, you may terminate before they take effect and receive a pro-rata refund of any prepaid, unused fees. ## 17. Governing Law and Disputes These Terms are governed by the laws of **Ireland**, without regard to its conflict-of-laws principles. The courts of Ireland have exclusive jurisdiction over any dispute, claim, or proceeding arising out of or in connection with these Terms or their subject matter, except that either party may seek injunctive relief in any court of competent jurisdiction to protect its intellectual-property rights or Confidential Information. The parties will attempt in good faith to resolve any dispute by negotiation before commencing proceedings. ## 18. Miscellaneous **Entire agreement.** These Terms, together with the Privacy Policy and any DPA, order form, or service-specific terms referenced in them, constitute the entire agreement between the parties and supersede all prior agreements on the same subject. **Severability.** If any provision is held invalid or unenforceable, the remaining provisions remain in full force. **No waiver.** A party's failure to enforce any right or provision is not a waiver of that right or provision. **Assignment.** You may not assign these Terms without our prior written consent, except to an affiliate or in connection with a merger, acquisition, or sale of substantially all assets, provided the assignee assumes all obligations. We may assign these Terms freely. **Force majeure.** Neither party is liable for delay or failure caused by events beyond its reasonable control, including acts of God, war, civil unrest, network failures, or actions of governmental authority. **Notices.** Notices to Everstack must be sent to support@everstack.ai (legal notices: legal@everstack.ai). Notices to you may be sent to the email address on your Account. **Independent contractors.** The parties are independent contractors. Nothing in these Terms creates an agency, partnership, joint venture, or employment relationship. ## 19. Contact Questions about these Terms can be sent to **support@everstack.ai**. Security disclosures should go to **security@everstack.ai**. Data-protection requests should go to **privacy@everstack.ai**. --- ### Best Code Execution Sandboxes for AI Agents in 2026 Source: https://everstack.ai/blog/best-code-execution-sandboxes-for-ai-agents Browser title: Best Code Execution Sandboxes for AI Agents in 2026 | Everstack Page type: article Six sandbox platforms for running AI-generated code, compared on isolation primitive, whether you can self-host, how concurrency is priced, and one project whose op… #### Start with the primitive, not the product Containers share the host kernel. A container escape is a kernel exploit away, and AI-generated code is untrusted input by definition. Fine for code you wrote, questionable for code a model wrote in response to a user's prompt. #### E2B The best-known name here and a genuinely excellent developer experience. Creating a sandbox and running code takes about four lines, and the SDKs are well made. #### Daytona 71,871 stars. Repository no longer maintained. No licence file since June 2026. #### Modal Not open source. Not self-hostable. Serverless compute with GPUs. #### Beam Beam positions itself as an open-source E2B alternative with Docker-based sandboxing, GPU support for both Python and Node.js, and no session time limits, with a self-hostable option. #### Microsandbox and the smaller projects There is a long tail here (microsandbox, OpenComputer, PandaStack and others) that shows up in roundups. We have not verified their licences, maintenance status or isolation guarantees, so we are not going to rank them. #### Page metadata ```yaml title: "Best Code Execution Sandboxes for AI Agents in 2026" description: "Six sandbox platforms for running AI-generated code, compared on isolation primitive, whether you can self-host, how concurrency is priced, and one project whose open source repository quietly stopped shipping updates." date: "2026-08-27" author: "Everstack Team" authorRole: "Engineering" readTime: "10 min read" tags: ["Sandboxes", "Security", "AI Agents", "Comparison"] ``` #### Full published page content If an agent writes code and something runs it, you have a sandboxing problem whether you have named it or not. The question is not whether to isolate execution. It is which isolation primitive, and where the execution happens. This post compares six options on four things that are hard to change later: the isolation primitive, whether self-hosting is actually available, how concurrency is priced, and whether the project is still shipping. Everything below was checked against each project's repository, `LICENSE` file and pricing page during August 2026. ## Start with the primitive, not the product Three levels of isolation, in increasing strength and cost: **Containers** share the host kernel. A container escape is a kernel exploit away, and AI-generated code is untrusted input by definition. Fine for code you wrote, questionable for code a model wrote in response to a user's prompt. **isolated runtimes** (isolated runtime and similar) give each workload its own kernel with a deliberately minimal device model. This is the primitive most of this category has converged on, and for good reason: it is a real security boundary with startup times measured in tens of milliseconds rather than seconds. **Full VMs** are stronger still and slower to start. Rarely the right trade for per-request agent execution. **gVisor** sits between the first two: a user-space kernel that intercepts syscalls so the workload never talks to the host kernel directly. It is what Modal uses, and it is a real boundary rather than a plain container. If a vendor is vague about which of these they use, that is the first thing to pin down. Everything else on their page is downstream of it. ## E2B **Apache-2.0, 13,599 stars, isolated runtimes.** The best-known name here and a genuinely excellent developer experience. Creating a sandbox and running code takes about four lines, and the SDKs are well made. Two facts decide most evaluations. **Concurrency is a pricing tier.** Hobby caps at 20 concurrent sandboxes, Pro at 100, with extra concurrency purchasable up to 1,100. Session length is tiered too: up to 1 hour on Hobby, up to 24 hours on Pro. Agent workloads are bursty, so the concurrency ceiling is usually the first constraint teams hit, and hitting it is a procurement conversation rather than a scaling one. **Self-hosting is documented, but it is not what you buy.** There are two Apache-2.0 repositories, `e2b-dev/E2B` for the SDK and `e2b-dev/infra` for the Go infrastructure, and a root-level `self-host.md` describing a Terraform deployment: GCP is marked GA, AWS is beta, and Azure and generic Linux are listed unchecked. It expects a Cloudflare account and domain, Postgres, Packer and Terraform 1.7.5. What stays hosted-only is the commercial product and the pricing page, across Hobby, Pro and Ultimate tiers. So this is more paved than most roundups say, including an earlier version of this one, but it is a path you walk yourself. Compute is billed per second and, unusually for this category, published openly: 1 vCPU at $0.000014 per second up to 8 vCPU at $0.000112, plus $0.0000045 per GiB per second of RAM. Storage is included at 10 GiB on Hobby and 20 GiB on Pro. Hobby gives you a one-time $100 of credits; Pro is $150 per month. One number not to quote: E2B's homepage gives two different startup figures, less than 200 ms in one place and 80 ms in another. Take neither as authoritative. **Pick E2B when** sandboxing is the whole problem, you want a hosted product, and your concurrency fits inside the tiers. ## Daytona **71,871 stars. Repository no longer maintained. No licence file since June 2026.** This one needs care, because the star count is the most misleading number in this post. Daytona's public repository README states: _"This repository is no longer maintained. As of June 2026, Daytona's core development has moved to a private codebase. This repository will receive no further updates, fixes, or releases."_ It goes on to say it remains public and free to use, fork and build on, _"as is and without support or warranty."_ The last commit landed on 25 June 2026. The licence went the same way, in three steps that are worth pinning to dates. The initial commit on 6 February 2024 was Apache-2.0. A commit on 28 April 2025 relicensed the project to AGPL-3.0, alongside the pivot to AI sandboxes, shipped as v0.100.0. A commit on 23 June 2026 deleted the `LICENSE` file entirely, and GitHub now reports the repository licence as none. The last open release, v0.190.0, is AGPL-3.0, and the README points forks at that tag. If you were planning to fork, fork the tag, not `main`. One correction to an earlier version of this post: we described Daytona as isolated runtime-class isolation. That is contested by Daytona's own materials. Their documentation says default sandboxes are **Linux containers**, with VM sandboxes offered as a separate option, while the README claims each sandbox has _"a dedicated kernel, filesystem, network stack"_. We are reporting both rather than picking one. For untrusted, model-generated code, get that answered in writing before you commit to it. **Two things follow from the maintenance notice, and they point in opposite directions.** If you were planning to self-host the open source build, you would be running an unmaintained snapshot, including for security fixes. For a sandbox product, whose entire job is to be a security boundary, that is a serious position to be in. If you are a customer of Daytona's hosted product, none of this applies. The company continues to develop it, and the notice concerns the repository only. Daytona also documents sandboxes starting in **under 90 milliseconds** from code to execution, which is faster than most of this category, and their stateful snapshot support for persistent agent sessions is genuinely well developed. **Two things most write-ups of this miss.** Daytona gave a reason, and it is a serious one for a sandbox vendor: publishing your isolation layer, kernel boundaries and orchestration logic hands the exact blueprint of that boundary to anyone who wants to probe it with an AI. Disagree if you like, but it is not a pretext. And there is a middle path. **Bring Your Own Compute** lets sandbox workloads run on your own runner nodes, with official Helm charts, while Daytona's control plane, dashboard and database stay hosted by them. If your constraint is where code executes, that may be enough. If your constraint is that no vendor sits in the path at all, it is not. **One correction to the isolation story**, since roundups keep repeating "isolated runtime" for Daytona: their own isolation docs describe the **default** sandbox class as a **Linux container** with namespaces and enforced resource limits. Full VM isolation with its own kernel exists, but as an opt-in class. gVisor, isolated runtime and Kata are named nowhere on that page. The sub-90ms figure is attached to the default container class, which is the one that is not an isolated runtime. **Pick Daytona when** you want their hosted product, or cold start is your binding constraint, or BYOC satisfies your requirement. Do not pick the frozen open source build to self-host as a security boundary. ## Modal **Not open source. Not self-hostable. Serverless compute with GPUs.** Modal is on this list because it appears in every one of these searches, and because for a large class of workloads it is the better answer than anything else here. It is general serverless compute rather than an agent sandbox specifically, with first-class GPU support and published per-second rates. **Price it off the Sandbox rate, not the headline one.** Modal bills Sandboxes and Notebooks at **$0.00003942 per core per second and $0.00000667 per GiB per second**, roughly three times its standard compute rate of $0.0000131 and $0.00000222. Since this post is about sandboxes, the sandbox rate is the one that applies, and an earlier version of this post quoted the standard rate by mistake. A core means a physical core, about 2 vCPU, with a 0.125 core minimum. GPUs run from $0.000164 per second for an Nvidia T4 up to $0.001972 for a B300. Volumes are $0.09 per GiB per month with 1 TiB free. Starter is $0 plus compute with $30 monthly credits; Team is $250 plus compute. **Isolation is gVisor.** Modal states that compute jobs are containerized and virtualized using gVisor, the sandboxing technology developed at Google. Its network controls deserve credit too, and they are better than most of this category: `block_network=True` drops all outbound traffic, `outbound_cidr_allowlist` restricts egress by CIDR, and Modal states that Sandboxes are not authorized to access other resources in your Modal workspace. One default to set deliberately rather than discover: a Sandbox lives **five minutes** unless you configure a longer lifetime, up to 24 hours. Its pricing page describes no self-hosting or on-premises option. **Pick Modal when** you need GPUs, or when you want general serverless compute rather than an agent-specific sandbox. Nothing else on this list offers managed GPU compute, so this is not a close call. ## Beam Beam positions itself as an open-source E2B alternative with Docker-based sandboxing, GPU support for both Python and Node.js, and no session time limits, with a self-hostable option. We are flagging that as **reported rather than verified**: we did not check Beam's licence file or pricing page directly for this post, and everything else here was. Treat the summary above as a starting point for your own check rather than as a fact we are standing behind. If Docker-based isolation is accurate, weigh that against isolated runtime alternatives for untrusted code. ## Microsandbox and the smaller projects There is a long tail here (microsandbox, OpenComputer, PandaStack and others) that shows up in roundups. We have not verified their licences, maintenance status or isolation guarantees, so we are not going to rank them. One piece of advice that applies to all of them: check the commit history before the star count. Daytona is the cautionary example, and it is not the only project in this category that has gone quiet while its README still reads as if it has not. ## Everstack **Apache-2.0, Docker, isolated runtime and Kubernetes backends.** We build this, so judge the specifics rather than the source. The checkable claims: self-hosting is the default supported path rather than a separate documented one, concurrency is bounded by the capacity you provision rather than a plan tier, and there is no separately licensed enterprise directory. The structural difference is what surrounds the sandbox. Debugging an agent that wrote bad code means seeing the prompt, the completion and the execution together. On Everstack those share one trace, because the [gateway](https://everstack.ai/gateway/) that produced the code, the [agent runtime](https://everstack.ai/agents/) that orchestrated it and the [sandbox](https://everstack.ai/sandboxes/) that ran it are one control plane. With separate systems, that correlation is a join you build and maintain. **Do not pick it for sandboxing alone.** E2B has the more mature sandbox developer experience and a larger community, and buying a platform to get a sandbox is over-buying. The case needs at least two of these problems at once. ## The four questions, in order **1. What is the isolation primitive?** For untrusted, model-generated code, containers alone are a weaker boundary than most teams assume. isolated runtimes are the current default for good reason. **2. Can you actually self-host, or only in principle?** There is a meaningful difference between "documented with Terraform, but the commercial product is hosted-only" (E2B), "the repository is abandoned and the licence file has been deleted" (Daytona OSS), and "this is the default supported path" (Everstack). All three get described as self-hostable in roundups. **3. How is concurrency priced?** This is the constraint teams hit first. A tiered ceiling turns a scaling event into a procurement event. **4. Is the project still shipping?** Check the commit history and the `LICENSE` file, not the star count. A README written eighteen months ago says nothing about whether anyone is fixing CVEs today, and Daytona is proof that a licence can disappear without the README noticing. Get those four right and the feature grid mostly stops mattering. We publish [side-by-side comparisons](https://everstack.ai/comparison/) for E2B, Daytona and Modal that go deeper on each. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Best Code Execution Sandboxes for AI Agents in 2026", "description": "Six sandbox platforms for running AI-generated code, compared on isolation primitive, whether you can self-host, how concurrency is priced, and one project whose open source repository quietly stopped shipping updates.", "datePublished": "2026-08-27", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/best-code-execution-sandboxes-for-ai-agents/" } ] ``` --- ### Best LLM Evaluation Platforms in 2026 Source: https://everstack.ai/blog/best-llm-evaluation-platforms Browser title: Best LLM Evaluation Platforms in 2026 | Everstack Page type: article Five evaluation platforms compared on the questions that decide adoption: whether self-hosting is gated by tier, how pricing scales with evaluation volume, and whet… #### Braintrust The best pure evaluation product here, and worth saying first. #### Langfuse MIT core, plus an enterprise licence over ee/. 33,900+ stars. ClickHouse-owned since January 2026. #### Opik The largest community of the genuinely-clean-licence options, and actively developed. Self-hosting gives you all features including tracing and evaluation, minus user management. So you lose RBAC and multi-user administration, not evaluation capability. That is a meaningfully better deal than gating retention or masking. #### OpenLIT The lightest thing here by a distance: SDK to OpenTelemetry Collector to ClickHouse, and that is the whole architecture. Evaluations are one part of a broader Apache-2.0 project that also covers LLM observability, GPU monitoring, guardrails, prompt management and a secrets vault. #### Everstack Datasets, scorers, LLM judges, human annotation queues and regression analysis, self-hosted by default at any tier under one Apache-2.0 licence with no enterprise directory. #### The three questions | Platform | Self-hosting | | --- | --- | | Braintrust | Enterprise only | | Langfuse | Yes, minus nine gated features | | Opik | Yes, minus user management | | OpenLIT | Yes, the only distribution model | | Everstack | Yes, at any tier | #### Page metadata ```yaml title: "Best LLM Evaluation Platforms in 2026" description: "Five evaluation platforms compared on the questions that decide adoption: whether self-hosting is gated by tier, how pricing scales with evaluation volume, and whether evals connect to the system that produced the outputs." date: "2026-08-23" author: "Everstack Team" authorRole: "Engineering" readTime: "9 min read" tags: ["Evaluations", "Comparison", "Self-Hosted"] ``` #### Full published page content Evaluation tooling has a peculiar adoption pattern. Teams try it, like it, run evals for two weeks, and then quietly stop, because evaluating turned out to require a push step that nobody maintained. So this comparison weights three things that predict whether a platform is still in use in month six: whether self-hosting is available without a sales call, how cost scales as evaluation becomes a habit rather than an experiment, and how much work it takes to get data in. Licences, tiers and prices below were checked against each project's own repository and pricing page in August 2026. ## Braintrust **The best pure evaluation product here, and worth saying first.** Scorer authoring, experiment workflow and review tooling are more polished than anything else on this list. If evaluation is your day job rather than one of six things you own, this is the tool that will feel best to use. **Pricing:** Starter is $0 with $10 in monthly credits, 1 GB of processed data and 10,000 scores. Pro is $249 per month with $249 in credits, 5 GB and 50,000 scores, plus custom charts and priority support. Enterprise is custom. **The thing most roundups leave out: the core is proprietary.** There is no public repository for the Braintrust platform. Their GitHub org publishes SDKs, tools and examples, and their own self-hosting docs state plainly that the deployed architecture is **not open source**. Two satellite libraries genuinely are MIT and usable on their own without an account, `autoevals` (scoring functions) and `braintrust-proxy` (a multi-provider API proxy), but the platform itself is closed. That is a legitimate business model and Braintrust is not hiding it. It just means Braintrust is not competing on the axis the rest of this post is about, and a reader comparing licence terms should know that before comparing anything else. **Self-hosting is hybrid, not self-contained.** The control plane, meaning the web UI, auth and metadata, stays hosted by Braintrust. Only the data plane runs in your cloud: Postgres, Redis, object storage and Brainstore, their proprietary trace-ingestion engine, deployed via Terraform modules they author. For privacy-sensitive teams that is a genuinely good split, since traces, prompts and scores never leave your infrastructure. For anyone whose requirement is "no vendor in the path at all", it does not meet the bar. **The two other things to weigh:** Self-hosting and hybrid deployment are **Enterprise only**. On-prem or hosted deployment for high volume or privacy-sensitive data is described as a custom Enterprise arrangement, not available on Starter or Pro. If a deployment constraint is why you are shopping, that changes the comparison immediately. Pricing meters **processed data and scores**. That is fair and legible, and it also means cost rises exactly as evaluation becomes routine. Model your intended volume, not your pilot volume. **Pick it when:** evaluation depth is the priority and hosted is acceptable. ## Langfuse **MIT core, plus an enterprise licence over `ee/`. 33,900+ stars. ClickHouse-owned since January 2026.** Evaluations sit alongside tracing, datasets and prompt management in one product, which is a genuinely useful combination: the trace you want to score is already there. Core tracing, evaluations, datasets, prompt management and the playground are free to self-host without usage limits, and that is a strong free offering. So are LLM-as-judge evaluators, human annotation queues, enterprise SSO and organisation-level RBAC. There is no seat cap or evaluator cap on the free build. **What needs a licence key when self-hosting:** project-level RBAC, protected prompt labels, data retention policies, audit logs, server-side data masking, UI customisation, organisation creators, the Org Management API and SCIM, and the Instance Management API. Read that list with a compliance hat on. If you are self-hosting evaluations because the data is sensitive, then retention policies and server-side data masking are precisely the features you need, and they are on the paid side. Cloud pricing: Hobby free with 50,000 units per month, Core $29, Pro $199, Enterprise $2,499 per month. **Pick it when:** you want tracing and evaluation in one tool and the gated list does not include what you need. ## Opik **Apache-2.0, no `ee/` directory, 21,697 stars, from Comet ML.** The largest community of the genuinely-clean-licence options, and actively developed. Self-hosting gives you all features including tracing and evaluation, minus user management. So you lose RBAC and multi-user administration, not evaluation capability. That is a meaningfully better deal than gating retention or masking. **The cost is operational.** Its deployment compose file runs MySQL, Redis, ClickHouse, Zookeeper and MinIO. Five datastores. If your platform team already runs ClickHouse this is a shrug; if you are three engineers it is a weekly tax. Pricing: Open Source free and self-hosted with the full feature set, Free Cloud at $0 with 10 members and 25,000 spans per month, Pro Cloud at $19 per month, Enterprise custom with SOC 2, ISO 27001, HIPAA and GDPR. **Pick it when:** you want a complete self-hosted build with a clean licence and can absorb the operational weight. ## OpenLIT **Apache-2.0, one datastore, no paid tier.** The lightest thing here by a distance: SDK to OpenTelemetry Collector to ClickHouse, and that is the whole architecture. Evaluations are one part of a broader Apache-2.0 project that also covers LLM observability, GPU monitoring, guardrails, prompt management and a secrets vault. **The honest weakness:** there is no managed cloud. "OpenLIT Cloud" is listed as coming soon with no pricing. If you need a hosted product with an SLA, this project alone has nowhere for you to go, and planning around a "coming soon" is not a strategy. Evaluation depth is also shallower than Braintrust's. It is a capable component of a broad platform rather than a specialist tool. **Pick it when:** you want maximum capability per unit of operational burden and will self-host permanently. ## Everstack We build this, so judge the specifics. Datasets, scorers, LLM judges, human annotation queues and regression analysis, self-hosted by default at any tier under one Apache-2.0 licence with no enterprise directory. **The structural difference is where the runs come from.** Every other platform here evaluates data you instrument and send, because none of them are in the request path. Everstack scores runs that already went through the [gateway](https://everstack.ai/gateway/) or [agent runtime](https://everstack.ai/agents/), so there is no push step to maintain. That matters because the push step is the thing that decays. Eval coverage goes partial when somebody ships a new service and nobody adds instrumentation to it. **Do not pick it for evaluation depth.** Braintrust's eval product is better than ours, and if evals are the centre of your work you should use theirs. The case for Everstack is when evaluation is one of several problems and you want them in one place. ## The three questions **1. Is self-hosting available without a sales call?** | Platform | Self-hosting | | --- | --- | | Braintrust | Enterprise only | | Langfuse | Yes, minus nine gated features | | Opik | Yes, minus user management | | OpenLIT | Yes, the only distribution model | | Everstack | Yes, at any tier | **2. How does cost scale as evaluation becomes routine?** Per-GB and per-score pricing is cheap during a pilot and gets expensive exactly when the habit sticks. That is not a criticism of the model, it is a reason to model real volume before adopting. **3. How does data get in?** Instrumentation is a code change in every service you want covered, and it is the step that decays. If your model calls already route through something, scoring what it recorded is strictly less work than pushing data to a second system. Beyond that, the honest answer is that these are all decent products. Braintrust is the best at evaluation specifically, OpenLIT is the lightest to run, Opik has the best combination of clean licence and community size, and Langfuse has the most complete surrounding product. Pick on the three questions above rather than on a feature grid, because the feature grids converge and the deployment terms do not. Everstack's [evaluations](https://everstack.ai/evaluations/) are documented [here](https://docs.everstack.ai), with a [detailed Braintrust comparison](https://everstack.ai/comparison/braintrust/). #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Best LLM Evaluation Platforms in 2026", "description": "Five evaluation platforms compared on the questions that decide adoption: whether self-hosting is gated by tier, how pricing scales with evaluation volume, and whether evals connect to the system that produced the outputs.", "datePublished": "2026-08-23", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/best-llm-evaluation-platforms/" } ] ``` --- ### Best Open-Source AI Gateways in 2026 Source: https://everstack.ai/blog/best-open-source-ai-gateways Browser title: Best Open-Source AI Gateways in 2026 | Everstack Page type: article Seven open-source AI gateways compared on the fact that decides most adoptions: which capabilities stop working when you self-host without paying. Licences, tier bo… #### LiteLLM The default answer in this category, and it earns that. Widest provider coverage anywhere, a Rust core with a Python SDK, and commits landing daily. #### Bifrost Maxim AI's gateway, and a genuinely well-engineered one. A Go binary built for low overhead, claiming under 100 microseconds at 5,000 requests per second and 50x faster than LiteLLM. Those are their numbers and we have not benchmarked them, but the engineering focus is real and the deployment story is simple: Docker, Kubernetes, or a single binary. #### Kong AI Gateway Kong Gateway itself is properly Apache-2.0 and has years of production hardening behind it. If you already run Kong for your APIs, adding AI traffic to a gateway your team already operates is a strong argument that beats most feature comparisons. #### Helicone Stars: 6,116. Licence: Apache-2.0, no enterprise directory. In maintenance mode since March 2026. #### OpenRouter It belongs on this list because it comes up in every one of these searches, and because it is genuinely excellent at its actual job, which is not the one this post is about. #### Cloudflare AI Gateway Same caveat, same reason for inclusion. It is a Cloudflare platform service: analytics and logging, caching served from Cloudflare's edge instead of the model provider, rate limiting, and retry with model fallback. #### Page metadata ```yaml title: "Best Open-Source AI Gateways in 2026" description: "Seven open-source AI gateways compared on the fact that decides most adoptions: which capabilities stop working when you self-host without paying. Licences, tier boundaries and prices checked against each project's own repository and pricing page in August 2026." date: "2026-08-29" author: "Everstack Team" authorRole: "Engineering" readTime: "10 min read" tags: ["AI Gateway", "Open Source", "Self-Hosted", "Comparison"] ``` #### Full published page content Almost every gateway in this category calls itself open source. Almost none of them means the same thing by it. Some are open source with a commercial cloud on top and nothing withheld. Some are open source except for a directory that happens to contain the governance features. Some are open source but put high availability on the paid tier. All three are legitimate business models. Only one of them is what a team means when they say "we need something we can self-host". So this post asks one question of each gateway and answers it from primary sources: **what stops working if you self-host and never pay?** Everything below was checked against each project's `LICENSE` file, repository and pricing page during August 2026. Star counts and prices move; re-check before you commit. ## LiteLLM **Stars: 57,637. Licence: MIT, except `enterprise/`.** The default answer in this category, and it earns that. Widest provider coverage anywhere, a Rust core with a Python SDK, and commits landing daily. The licence is split, and LiteLLM is upfront about it. The root `LICENSE` states that everything under the `enterprise/` directory is governed by a separate licence and everything else is MIT. That directory exists, which is why GitHub reports the repository licence as `NOASSERTION` rather than MIT. **What is on the paid side:** virtual keys, budgets, RPM and TPM limits, spend tracking by key, user, team and org, SSO with SCIM, and OIDC or JWT auth. In other words, governance. That matters because governance is not what you need on day one, it is what you need in month six when a second team starts using your gateway. Enterprise pricing is not published; the site offers a 30 day trial key and a sales conversation. **Pick it when:** you need breadth of provider support, or the MIT core covers you and always will. ## Bifrost **Stars: 7,675. Licence: Apache-2.0, no enterprise directory.** Maxim AI's gateway, and a genuinely well-engineered one. A Go binary built for low overhead, claiming under 100 microseconds at 5,000 requests per second and 50x faster than LiteLLM. Those are their numbers and we have not benchmarked them, but the engineering focus is real and the deployment story is simple: Docker, Kubernetes, or a single binary. The licence is clean. No carve-out directory, which is a better structure than LiteLLM's. **What is on the paid side:** guardrails, Cluster Mode for high availability, Adaptive Load Balancing with real-time health monitoring, RBAC, audit logs, log exports, SSO via SAML and OIDC, and vault integrations. Read that list carefully. Cluster Mode is high availability. Putting HA and guardrails on the Enterprise tier means the free build is closer to a development gateway than a production one. That is a legitimate model and the licence stays honest, but it is worth pricing before adoption rather than after. **Pick it when:** raw proxy overhead is your binding constraint, or the OSS tier genuinely covers you. ## Kong AI Gateway **Stars: 44,059. Licence: Apache-2.0 core.** Kong Gateway itself is properly Apache-2.0 and has years of production hardening behind it. If you already run Kong for your APIs, adding AI traffic to a gateway your team already operates is a strong argument that beats most feature comparisons. The AI capabilities arrive as plugins, and the split is where it gets interesting. **Six are free**: `ai-proxy`, `ai-prompt-guard`, `ai-request-transformer`, `ai-response-transformer`, `ai-prompt-template` and `ai-prompt-decorator`. **Seventeen require an AI Gateway Enterprise licence**, each carrying an explicit "AI License Required" badge on its own documentation page: `ai-proxy-advanced`, `ai-semantic-cache`, `ai-semantic-prompt-guard`, `ai-semantic-response-guard`, `ai-rate-limiting-advanced`, `ai-sanitizer`, `ai-rag-injector`, `ai-prompt-compressor`, `ai-mcp-proxy`, `ai-mcp-oauth2`, `ai-llm-as-judge`, `ai-lakera-guard`, `ai-aws-guardrails`, `ai-azure-content-safety`, `ai-gcp-model-armor`, `ai-custom-guardrail` and `ai-a2a-proxy`. So semantic caching, advanced rate limiting and every guardrail are paid. There is also a per-model fee: Konnect Plus includes five unique proxied LLMs, then charges $100 per month for each additional model. Multi-provider routing exists so you can add models freely, so metering the model count prices the thing the gateway is for. One more thing worth knowing: Kong's own July 2026 post states that Kong Gateway 3.18 makes AI plugins opt-in rather than bundled, and that AI Gateway 2.0 moves to its own runtime and release cadence. The packaging is explicitly changing. **Pick it when:** Kong is already in your path, or you need a general-purpose API gateway too. ## Helicone **Stars: 6,116. Licence: Apache-2.0, no enterprise directory. In maintenance mode since March 2026.** One of the cleanest licence stories here. The maintenance status is easy to get wrong in either direction, so here it is precisely. Mintlify acquired Helicone in posts both companies published on 3 March 2026. Helicone's says _"Helicone has been acquired by Mintlify, and our team will be joining them in San Francisco"_, that _"Helicone's services will remain live for the foreseeable future in maintenance mode"_, and that _"This means security updates, new models, bug & performance fixes all keep shipping."_ Mintlify's post says the same thing. So maintenance mode is the company's own word for it, and their definition of it explicitly is not abandonment. The commit history matches both halves of that. On `main`: 50 commits in November 2025, 76 in December, 39 in January 2026, 37 in February. Then 11 in March, when the acquisition was announced, and 2, 6, 1, 1 and 3 in the five months since. Commits still land, and the cadence collapsed exactly when the deal did. One more thing worth knowing before you evaluate it: the repository is Apache-2.0, is not archived, and its README mentions none of the above. A reader landing there sees a normal, active project. It is both a gateway and an observability platform, and integration is about as low-friction as this category gets: a base URL change and an auth header. **What is tier-gated:** supported on-prem deployment sits under Enterprise, and SOC 2 and HIPAA compliance sit on Team at $799 per month. The Apache-2.0 code is available regardless, so the distinction is between running the software and having a vendor relationship for it. Pricing: Hobby free with 10,000 requests and 1 GB storage, Pro $79 per month with unlimited seats, Team $799 per month, Enterprise contact-us. **Pick it when:** observability plus routing is the whole problem, the hosted tiers suit you, and a product whose vendor has committed to fixes and new models rather than new features is an acceptable place to build on. ## OpenRouter **Not open source. Not self-hostable.** It belongs on this list because it comes up in every one of these searches, and because it is genuinely excellent at its actual job, which is not the one this post is about. OpenRouter aggregates the widest model catalogue available behind one key, and passes inference through **without markup**, which is a fairer commercial model than most. It charges on credit purchases instead: 5.5% with a $0.80 minimum via Stripe, or 5% via crypto. Bringing your own provider keys is free up to $25,000 of monthly list price on pay-as-you-go and $200,000 on enterprise, then 5% of standard OpenRouter pricing above that. But its documentation describes no self-hosting or open source option, so prompts and responses transit their infrastructure. **Pick it when:** you are evaluating models rather than running constrained production traffic. For breadth, nothing self-hosted competes. ## Cloudflare AI Gateway **Not open source. Not self-hostable.** Same caveat, same reason for inclusion. It is a Cloudflare platform service: analytics and logging, caching served from Cloudflare's edge instead of the model provider, rate limiting, and retry with model fallback. Two things make it genuinely hard to argue with. It is **available on all Cloudflare plans, including free**, and there is nothing to operate. Cloudflare's edge is better run than most self-hosted infrastructure will ever be. **Pick it when:** you already run on Cloudflare and have no data residency constraint. If both are true, standing up your own gateway instead is difficult to justify. ## Everstack **Licence: Apache-2.0 across the repository, including the enterprise modules.** Full disclosure, we build this. So judge the claim rather than the source: the specific, checkable statement is that there is no separately licensed directory, and that semantic caching, per-tenant rate limits, guardrails, virtual keys, SSO, audit logs and clustering are all in the build you can run for free. Where Everstack differs structurally is scope. The same control plane runs a stateful agent runtime, isolated Docker, isolated runtime and Kubernetes sandboxes, vector memory, workflows and evaluations, so a trace follows the work past the request boundary rather than stopping at it. **Do not pick it if routing is your whole problem.** A gateway is the right size of tool for a gateway-sized problem, and LiteLLM or Bifrost will get you there with a larger community behind them. The case for a platform needs several of these problems at once, plus a deployment constraint. ## How to actually choose Three questions, in order. **1. What stops working if you self-host and never pay?** | Gateway | Free build gives you | | ---------- | --------------------------------------------------------------- | | Bifrost | Routing, but not guardrails, HA, RBAC or audit logs | | Kong | Six AI plugins, but not caching, advanced limits or guardrails | | LiteLLM | Routing and observability, but not virtual keys, budgets or SSO | | Helicone | Everything, though supported on-prem is Enterprise | | Everstack | Everything | | OpenRouter | Not applicable, hosted only | | Cloudflare | Not applicable, hosted only | **2. Is the thing you need on the free side of that line today, and will it still be in a year?** Governance and high availability are the features teams need second, not first, which is exactly why they are the ones most often gated. **3. Do you actually need self-hosting at all?** If prompts traversing a vendor is fine, Cloudflare AI Gateway is free on every plan and OpenRouter has a catalogue nothing self-hosted matches. A lot of teams self-host out of habit rather than requirement, and pay for it in operational attention. If you do have the constraint, the shortlist is short and this post is mostly about reading licence files carefully. That is less exciting than a feature grid, and considerably more useful. Everstack's gateway is [documented here](https://everstack.ai/gateway/), with [side-by-side comparisons](https://everstack.ai/comparison/) for most of the projects above. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Best Open-Source AI Gateways in 2026", "description": "Seven open-source AI gateways compared on the fact that decides most adoptions: which capabilities stop working when you self-host without paying. Licences, tier boundaries and prices checked against each project's own repository and pricing page in August 2026.", "datePublished": "2026-08-29", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/best-open-source-ai-gateways/" } ] ``` --- ### Best Self-Hosted LLM Observability Tools in 2026 Source: https://everstack.ai/blog/best-self-hosted-llm-observability-tools Browser title: Best Self-Hosted LLM Observability Tools in 2026 | Everstack Page type: article Six self-hosted LLM observability tools compared on the things that actually decide adoption: the real licence, which features a licence key gates, how many datasto… #### The short version If you want the fastest start, Phoenix runs on SQLite from a pip install, though its licence is source-available rather than open source. If you want the largest community and the most complete self-hosted build, Opik is the obvious first look. If you want the smallest thing to operate, OpenLIT runs on one datastore and has no paid tier at all. If you are already committed to OpenTelemetry and want to keep your data… #### Langfuse Licence: MIT core, plus a separate Langfuse Enterprise Licence over ee/, web/src/ee/ and worker/src/ee/. This is the single most misread fact in the category. The headline "MIT" is true and the core really is free to self-host without usage limits. But nine features are gated behind a licence key when self-hosting: project-level RBAC, protected prompt labels, data retention policies, audit logs, server-side data mas… #### Opik Licence: Apache-2.0, copyright Comet ML. No ee/ directory in the repository. Commercial differentiation happens entirely at the hosted-Comet layer rather than through a licence carve-out, which is a meaningfully more honest structure than the alternative. #### OpenLIT Licence: Apache-2.0. No ee/ directory. No paid tier exists today at all. #### OpenLLMetry Licence: Apache-2.0. No enterprise directory. 7,409 stars as of August 2026. #### Laminar Licence: Apache-2.0, in LICENSE.md rather than LICENSE, which is why some licence scanners misreport it. No ee/ directory. 3,212 stars as of August 2026, pushed the same day it was checked. #### Page metadata ```yaml title: "Best Self-Hosted LLM Observability Tools in 2026" description: "Six self-hosted LLM observability tools compared on the things that actually decide adoption: the real licence, which features a licence key gates, how many datastores you have to run, and what it costs. Facts checked against each project's own repository and pricing page in August 2026." date: "2026-08-28" author: "Everstack Team" authorRole: "Engineering" readTime: "11 min read" tags: ["Observability", "OpenTelemetry", "Self-Hosted", "Comparison"] ``` #### Full published page content Most roundups in this category compare feature checklists. Feature checklists are the least useful thing to compare, because every project in this space will eventually have traces, evaluations, prompt management and a dashboard. The things that actually decide whether a tool survives contact with your infrastructure are duller and more checkable: 1. What the licence really says, including any `ee/` directory carved out from the headline licence. 2. Which features stop working when you self-host without paying. 3. How many datastores you are signing up to operate. 4. Whether traces require you to change application code, or arrive as a side effect of something you already do. This post covers six tools against those four questions. Every licence, star count, datastore list and price below was checked against the project's own repository, `LICENSE` file, `docker-compose.yaml` or pricing page during August 2026. Where something could not be verified from a primary source, it says so. Prices and star counts go stale. Re-check before you make a decision on them. ## The short version If you want the fastest start, **Phoenix** runs on SQLite from a `pip install`, though its licence is source-available rather than open source. If you want the largest community and the most complete self-hosted build, **Opik** is the obvious first look. If you want the smallest thing to operate, **OpenLIT** runs on one datastore and has no paid tier at all. If you are already committed to OpenTelemetry and want to keep your data in a backend you already run, **OpenLLMetry** is instrumentation rather than a platform, and that is a feature. If you want the most mature product and can live with a licence key for governance features, **Langfuse** is the default for good reasons. If you want cloud and self-hosted to behave identically, **Laminar** is the closest. And if the observability problem arrives attached to a gateway, runtime and sandbox problem, that is where [Everstack](https://everstack.ai/observability/) is aimed. ## Langfuse **Licence: MIT core, plus a separate Langfuse Enterprise Licence over `ee/`, `web/src/ee/` and `worker/src/ee/`.** This is the single most misread fact in the category. The headline "MIT" is true and the core really is free to self-host without usage limits. But nine features are gated behind a licence key when self-hosting: project-level RBAC, protected prompt labels, data retention policies, audit logs, server-side data masking, UI customisation, organisation creators, the Org Management API and SCIM, and the Instance Management API. Read that list again with a compliance hat on. Audit logs, data retention policies and server-side data masking are exactly the features a regulated team self-hosts *for*. If that is your reason for self-hosting, budget for the key. Worth being precise about what is **not** gated, because it is more than people assume: enterprise SSO, SSO enforcement, organisation-level RBAC, LLM-as-judge evaluators, human annotation queues, datasets, experiments, the prompt playground and custom dashboards all run on the free build. Langfuse states that core features are available in the OSS build without limits, and there is no seat cap, retention cap or evaluator cap when self-hosting. The paid gate is nine admin, compliance and multi-tenancy features, not a crippled product. **Community and backing.** Over 33,900 GitHub stars as of August 2026, and ClickHouse acquired Langfuse in January 2026 with a commitment to keep it open source. Prompt management is genuinely mature and the OpenTelemetry ingestion path is well documented. **It is not a gateway.** Langfuse's own documentation states that your requests never pass through Langfuse on the way to a provider. That is a deliberate design choice, not an oversight, and it decides how traces get created: you change an import, wrap calls in observations, or ship OpenTelemetry spans yourself. Every service you want traced is a code change. **Cloud pricing, August 2026:** Hobby free with 50,000 units per month and 30 days of data access, Core $29/month, Pro $199/month, Enterprise $2,499/month. Discount programmes exist for startups, research, non-profits and open-source projects. **Pick Langfuse when** you want the most mature tracing and evaluation product in the category, your model calls already route through something you control, and either the gated features do not matter to you or the licence is in budget. ## Opik **Licence: Apache-2.0**, copyright Comet ML. No `ee/` directory in the repository. Commercial differentiation happens entirely at the hosted-Comet layer rather than through a licence carve-out, which is a meaningfully more honest structure than the alternative. **By far the largest community here: 21,697 stars as of August 2026**, and it was pushed the same day it was checked. Actively developed is an understatement. **Self-hosting is nearly complete.** Comet's own docs say the self-hosted build gives you all Opik features including tracing and evaluation, but without user management. So you lose RBAC and multi-user administration, not observability. Compare that to gating audit logs and data masking. **The catch is operational weight.** The deployment compose file runs MySQL, Redis, ClickHouse, Zookeeper and MinIO. That is five datastores, versus three for Laminar and one for OpenLIT. If you have a platform team that already operates ClickHouse, this is a shrug. If you are two engineers, it is a real cost every week. **Pricing, August 2026:** Open Source free and self-hosted with the full feature set, Free Cloud at $0 with 10 members, 25,000 spans per month and 60 days retention, Pro Cloud at $19/month with 50 members and 100,000 spans per month, and Enterprise with SSO and SOC 2, ISO 27001, HIPAA and GDPR coverage. One thing worth flagging honestly: Opik advertises first-party OpenTelemetry support and ships an `otel-collector-config.yaml`, and its docs describe setup. Whether it maps the `gen_ai.*` semantic conventions specifically or uses a proprietary internal schema was **not verifiable** from the documentation pages checked. If cross-tool span portability matters to you, confirm that before committing. **Pick Opik when** you want the biggest community, a self-hosted build that is not crippled, and you can absorb five datastores. ## OpenLIT **Licence: Apache-2.0.** No `ee/` directory. No paid tier exists today at all. **The lightest thing to operate here: ClickHouse, and that is it.** The architecture is SDK to OpenTelemetry Collector to ClickHouse. If you are choosing based on how much you want to run at 3am, this wins outright. **Genuinely OpenTelemetry-native**, and not just as a marketing line. The project states it follows and maintains the semantic conventions with the OpenTelemetry community, uses the `gen_ai.*` namespace, and honours the standard `OTEL_EXPORTER_OTLP_ENDPOINT` configuration. **The broadest scope of any project here** for something with no paywall: LLM observability plus GPU monitoring, guardrails, evaluations, prompt management and a secrets vault, all Apache-2.0. **2,731 stars as of August 2026**, pushed the day before it was checked. **The honest weakness:** there is no managed cloud. "OpenLIT Cloud" is listed as coming soon with no pricing. If you need hosted infrastructure with an SLA, this project alone has nowhere for you to go, and betting on a "coming soon" is not a procurement strategy. **Pick OpenLIT when** you want maximum capability per unit of operational burden, you are happy self-hosting permanently, and no paywall matters more than a support contract. ## OpenLLMetry **Licence: Apache-2.0.** No enterprise directory. **7,409 stars as of August 2026.** **This is not a platform, and treating it as one is the main way people get confused by it.** OpenLLMetry is an instrumentation SDK. It produces spans. It does not store them, and it has no dashboard. You still need a backend, whether that is Traceloop's platform or any of the 30 or so external backends it exports to: Datadog, Grafana, Honeycomb and the rest. For a lot of teams that is precisely the right shape. If you already operate an observability stack, adding a second one for LLM calls is duplicated infrastructure, duplicated on-call and a second place to look during an incident. Instrumenting into the backend you already run is strictly less machinery. **Its strongest claim is standards work, and it is a real one.** The project's semantic conventions became the basis for OpenTelemetry's official GenAI semantic convention effort. Its README states that its semantic conventions are now part of OpenTelemetry. Spans you emit today are portable, which is the opposite of lock-in. **Traceloop platform pricing, August 2026:** Free Forever at $0 with 50,000 spans per month, 5 seats and 24 hours of retention, then Enterprise at custom pricing with unlimited seats and retention, SOC 2, and an on-premise option. Note there is no self-serve paid tier between those two, which is unusual for the category and worth knowing before you plan a rollout. 24 hours of retention is a demo, not a production tier. **Pick OpenLLMetry when** you already have an observability backend and want LLM spans inside it rather than beside it. ## Laminar **Licence: Apache-2.0**, in `LICENSE.md` rather than `LICENSE`, which is why some licence scanners misreport it. No `ee/` directory. **3,212 stars as of August 2026**, pushed the same day it was checked. **Cloud and self-hosted behave the same.** The self-hosting docs state that Signals, chat-with-trace and SQL-with-AI all work self-hosted, provided you configure your own LLM API key. No feature was found gated to cloud only. Among the projects here that sell a cloud product, this is the least compromised self-hosted build. **Three datastores:** PostgreSQL for relational data, ClickHouse for analytics, and Quickwit for full-text search. Middleweight. More than OpenLIT, considerably less than Opik. **OpenTelemetry ingestion is real:** the backend accepts OTLP over gRPC, HTTP protobuf and HTTP JSON, and the docs state span attributes are fully compatible with the `gen_ai` semantic conventions. **Pricing, August 2026:** Free at $0 with 1GB of data and 7 days retention, Starter at $30/month with 3GB and $2 per additional GB and 30 days, Pro at $150/month with 10GB and $1.50 per additional GB and 6 months, and Enterprise with an on-premise option. **The honest weakness:** the smallest community of the group, and a recent rebrand from `lmnr.ai` to `laminar.sh` has left redirecting and broken legacy documentation URLs. That churn is a small signal about maturity. **Pick Laminar when** you want the option to move between cloud and self-hosted without losing features. ## Arize Phoenix **Licence: Elastic License 2.0. Not OSI-approved open source, and this is the most misreported fact in the category.** Phoenix gets listed as Apache-2.0 or MIT in roundups constantly. It has never been either. Its `LICENSE` file has exactly one commit, from January 2023, and it has always been ELv2. ELv2 is source-available. You can read it, run it, modify it and self-host it freely. What you cannot do is offer it to third parties as a hosted or managed service, or circumvent its licence-key functionality. For almost everyone reading this, that restriction never binds. If you are building an observability SaaS, it binds absolutely. **The licence structure is otherwise the cleanest here.** There is no `ee/` directory, no carve-out, no feature behind a key. Tracing, evaluations and experiments are one unrestricted codebase under one licence. Compare that to Langfuse, where the licence is more permissive but nine features are gated: Phoenix asks less of you at runtime and more of you at the business-model level. Those are genuinely different trades and which one matters depends entirely on what you are building. **The lightest start of anything here.** Default storage is SQLite in the working directory, with PostgreSQL as an option. `pip install` gets you a full trace UI with no external datastore at all. Self-hosting covers Docker, Kubernetes with Helm, and one-click deploys to Railway, Render, GCP, Azure and AWS. **A convention caveat worth knowing:** Phoenix is built on OpenTelemetry but its native vocabulary is **OpenInference**, Arize's own semantic convention, not the OTel GenAI conventions. It does read `gen_ai.*` spans and converts them, preferring `gen_ai.provider.name` and falling back to `gen_ai.system`, which as of 15.10.0 makes it one of the better citizens on the current spec. But if you are standardising on `gen_ai.*` across several tools, know that you are working against Phoenix's grain rather than with it. **Around 11,200 GitHub stars as of August 2026.** **Pricing is for the separate commercial product, Arize AX**, not for Phoenix: Free at $0 with 25,000 trace spans per month, 1 GB ingestion and 15 days retention; Pro at $50 per month with 50,000 spans, 10 GB and 30 days; Enterprise custom, SaaS or self-hosted. Phoenix itself stays free and unlimited as the local-first product. **Pick Phoenix when** you want the fastest path from nothing to a working trace UI, you want evals in the same tool, and reselling it as a service is not your business model. ## Everstack Everstack belongs on this list with a caveat, because it is not primarily an observability tool and pretending otherwise would be the exact dishonesty this post is arguing against. It is [an AI gateway](https://everstack.ai/gateway/), an [agent runtime](https://everstack.ai/agents/), [isolated sandboxes](https://everstack.ai/sandboxes/), [evaluations](https://everstack.ai/evaluations/) and [OpenTelemetry-native observability](https://everstack.ai/observability/) on one self-hosted control plane, Apache-2.0, with no enterprise directory carved out of the repository. **The one structural difference worth knowing about** is where traces come from. Every other tool on this list observes an application that calls a model somewhere else, so a trace is the product of instrumentation you add. Everstack routes the request, so the trace already exists before any SDK is involved. Point an existing application at an OpenAI-compatible endpoint and you have traces, latency, token counts and per-provider cost without touching application code. SDK spans are available when you want more detail than the request boundary gives you. That is genuinely useful when you have services in four languages, or a vendor integration you cannot instrument, or a coding agent whose internals you do not control. It is much less interesting if you have one Python service and adding a decorator is a five minute job. **Do not pick Everstack for observability alone.** If tracing is your only problem, the focused tools above are simpler to adopt, have larger communities, and have had longer to polish their trace UIs. The case for a unified control plane needs at least two or three of these problems at once, plus a deployment constraint that rules out someone else's cloud. ## How to actually choose Ask the four questions in order, and stop as soon as one of them rules out an option. **Does the licence gate what you self-host for?** There are three distinct patterns here and they fail in different ways. Langfuse is permissively licensed with an `ee/` carve-out, so the licence is friendly but nine features need a key. Phoenix is source-available under ELv2 with no carve-out at all, so nothing is gated at runtime but you may not resell it as a service. Opik, OpenLIT, Laminar and OpenLLMetry are straightforwardly Apache-2.0. Work out which of those three constraints actually touches you, because they are not interchangeable. **How many datastores can you actually operate?** One (OpenLIT), three (Laminar), or five (Opik) are very different commitments at 3am. Nobody regrets choosing the lighter stack until they need something it does not do. **Do you already have an observability backend?** If yes, look hard at OpenLLMetry before you stand up a second platform beside the one you already pay for and already know. **Where do traces come from?** Instrumentation is a code change in every service you want covered. Gateway-level traces cost nothing per service but only see what crosses the request boundary. Neither is better in the abstract, and the right answer depends on how many services you have and whether you control all of them. The projects here are all Apache-2.0 or MIT at the core and all actively developed. This is a good category to be choosing in. Just choose on the four things that are hard to change later, not on the feature grid. Everstack's observability is [documented here](https://docs.everstack.ai), and there is a [side-by-side comparison with Langfuse](https://everstack.ai/comparison/langfuse/) that goes deeper on the licence and gateway differences. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Best Self-Hosted LLM Observability Tools in 2026", "description": "Six self-hosted LLM observability tools compared on the things that actually decide adoption: the real licence, which features a licence key gates, how many datastores you have to run, and what it costs. Facts checked against each project's own repository and pricing page in August 2026.", "datePublished": "2026-08-28", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/best-self-hosted-llm-observability-tools/" } ] ``` --- ### Introducing Everstack: The AI Infrastructure Platform Source: https://everstack.ai/blog/everstack-alpha-launch Browser title: Introducing Everstack: The AI Infrastructure Platform | Everstack Page type: article Today we are launching Everstack in alpha - a self-hosted platform that unifies AI gateway routing, agent orchestration, workflow studios, sandboxed execution, and… #### Why We Built Everstack Building production AI applications today means stitching together a dozen services: an LLM proxy here, an agent framework there, a separate vector database, another observability pipeline, yet another sandbox runtime. Each one has its own deployment model, its own auth surface, and its own failure modes. Teams spend more time on infrastructure plumbing than on the AI product itself. #### What Ships in Alpha A unified proxy that routes requests across 200+ models from OpenAI, Anthropic, Google, Mistral, Cohere, and more. Built-in semantic caching, rate limiting, load balancing, and automatic failover - all configurable through YAML or the dashboard. #### Self-Hosted by Default Everstack is designed to run on your infrastructure. Deploy with Docker Compose for development or Helm charts for production Kubernetes clusters. Your data, your models, your rules. #### SDKs and CLI The alpha ships with official SDKs for TypeScript/Node.js, Python, and Go - covering gateway chat, embeddings, agents, sandboxes, memory, datasets, and evaluations. A full CLI is included for server management and sandbox operations. #### What Comes Next This is an alpha release. We are shipping fast and iterating based on feedback. Here is what is on the immediate roadmap: #### Get Involved Everstack is built for teams that want a unified, self-hosted AI infrastructure platform. We welcome bug reports and feature requests. #### Page metadata ```yaml title: "Introducing Everstack: The AI Infrastructure Platform" description: "Today we are launching Everstack in alpha - a self-hosted platform that unifies AI gateway routing, agent orchestration, workflow studios, sandboxed execution, and full-stack observability into a single deployable stack." date: "2026-03-12" author: "Everstack Team" authorRole: "Engineering" readTime: "5 min read" tags: ["Launch", "Self-Hosted", "AI Infrastructure"] ``` #### Full published page content ## Why We Built Everstack Building production AI applications today means stitching together a dozen services: an LLM proxy here, an agent framework there, a separate vector database, another observability pipeline, yet another sandbox runtime. Each one has its own deployment model, its own auth surface, and its own failure modes. Teams spend more time on infrastructure plumbing than on the AI product itself. We built Everstack to fix that. One platform, one deployment, everything you need to go from prototype to production. ## What Ships in Alpha ### AI Gateway A unified proxy that routes requests across 200+ models from OpenAI, Anthropic, Google, Mistral, Cohere, and more. Built-in semantic caching, rate limiting, load balancing, and automatic failover - all configurable through YAML or the dashboard. ![AI Gateway - routing, caching, and failover across providers](https://everstack.ai/blog/gateway.gif) ### Agent Runtime Deploy autonomous agents with tool use, multi-step reasoning, and persistent memory. Agents support human-in-the-loop approval workflows, sandboxed code execution, and hierarchical delegation through our job system. ![Agent Runtime - tool use, reasoning, and human-in-the-loop workflows](https://everstack.ai/blog/agents.gif) ### Workflow Studio A visual builder for designing multi-step AI pipelines. Drag and drop LLM nodes, conditional branches, and tool integrations. Every workflow is versioned and auditable. ![Workflow Studio - visual pipeline builder with drag-and-drop nodes](https://everstack.ai/blog/workflows.gif) ### Sandboxed Execution Agents and workflows can execute arbitrary code in isolated sandbox environments backed by Docker or Kubernetes. Each sandbox gets its own filesystem, shell access, and configurable network policies. ![Sandboxed Execution - isolated code environments with filesystem and shell access](https://everstack.ai/blog/sandboxes.gif) ### Vector Memory Managed vector collections powered by pgvector for RAG, semantic search, and long-term agent memory. Create collections, insert documents, and query with a single API call. ![Vector Memory - collections, semantic search, and agent memory](https://everstack.ai/blog/memory.gif) ### Full-Stack Observability OpenTelemetry-native tracing and logging backed by ClickHouse. Every LLM call, agent turn, and workflow step is traced end-to-end with cost attribution, latency breakdowns, and token usage. ![Observability - distributed tracing, cost attribution, and latency breakdowns](https://everstack.ai/blog/observability.gif) ### Vault Centralized API key management with rotation policies, spend limits, and per-key access controls. Manage provider keys and application keys from a single interface. ### MCP Gateway A built-in Model Context Protocol gateway that lets agents discover and invoke MCP-compatible tool servers at runtime. Register MCP servers through the dashboard or API, and any agent can call their tools without manual wiring. This turns Everstack into a universal bridge between your agents and the growing ecosystem of MCP tool providers. ### S3-Compatible Storage Every sandbox and agent session has access to an S3-compatible object store for file uploads, artifacts, and persistent data. Use any S3 client library or the built-in SDK methods to read and write objects. Storage is scoped per workspace with configurable retention policies and size limits. ### Evaluations Ship with confidence using built-in evaluation pipelines. Define test datasets, run them against your agents or gateway configurations, and score results with LLM-as-judge, regex, code, or custom scorers. Evaluations support scheduled runs, regression detection, and side-by-side comparison across model versions - all from the dashboard or API. ![Evaluations - datasets, scoring, and regression detection](https://everstack.ai/blog/evaluations.gif) ### Edge Functions Lightweight serverless functions that run at the gateway layer. Use edge functions to transform requests and responses, inject context, enforce policies, or add custom routing logic - all without touching your application code. Functions execute in isolated V8 runtimes with sub-millisecond cold starts. ## Self-Hosted by Default Everstack is designed to run on your infrastructure. Deploy with Docker Compose for development or Helm charts for production Kubernetes clusters. Your data, your models, your rules. ```bash # Get running in under 5 minutes git clone https://github.com/everstacklabs/everstack cd everstack docker compose up ``` ## SDKs and CLI The alpha ships with official SDKs for TypeScript/Node.js, Python, and Go - covering gateway chat, embeddings, agents, sandboxes, memory, datasets, and evaluations. A full CLI is included for server management and sandbox operations. ## What Comes Next This is an alpha release. We are shipping fast and iterating based on feedback. Here is what is on the immediate roadmap: - **Apple Containerization Backend** - Sub-second sandbox VMs on macOS Apple Silicon - **Advanced Guardrails** - PII detection, content filtering, and policy enforcement at the gateway layer - **Multi-Tenant Workspaces** - Isolated environments with per-tenant quotas, billing, and access controls - **Prompt Registry** - Versioned prompt management with A/B testing and rollback ## Get Involved Everstack is built for teams that want a unified, self-hosted AI infrastructure platform. We welcome bug reports and feature requests. - **GitHub**: [github.com/everstacklabs/everstack](https://github.com/everstacklabs/everstack) - **Documentation**: [docs.everstack.ai](https://docs.everstack.ai) - **Community**: Join the discussion on GitHub We are excited to see what you build with Everstack. Deploy it, break it, and tell us what you think. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Introducing Everstack: The AI Infrastructure Platform", "description": "Today we are launching Everstack in alpha - a self-hosted platform that unifies AI gateway routing, agent orchestration, workflow studios, sandboxed execution, and full-stack observability into a single deployable stack.", "datePublished": "2026-03-12", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/everstack-alpha-launch/" } ] ``` --- ### How to Self-Host an LLM Gateway Source: https://everstack.ai/blog/how-to-self-host-an-llm-gateway Browser title: How to Self-Host an LLM Gateway | Everstack Page type: article A practical walkthrough for running an LLM gateway on your own infrastructure: what self-hosting actually buys you, how to read the licence, and a working Docker Co… #### What self-hosting actually buys you Be specific about this, because the honest list is shorter than the marketing list. #### Read the licence before you commit "Open source" is doing a lot of work in this category, and the differences are load-bearing. Everything below was checked against the actual LICENSE file in each repository on 31 August 2026. #### The deployment Here is a working stack. Everstack is used as the concrete example because it is what we build, and because the gateway ships in the same binary as the observability that makes it useful. The shape generalises: every gateway in this category needs a metadata store, and every one worth running needs somewhere to put telemetry. #### Taking it to production The Compose file above is a development stack. Five things separate it from something you can page on. #### When you should not self-host If you are a team of five with no platform engineer, self-hosting is the wrong call. You will spend more on operating three stateful services than a hosted gateway costs, and you will spend it in the currency you have least of. Use a hosted gateway and revisit the decision when either your volume or your compliance obligations change. #### Page metadata ```yaml title: "How to Self-Host an LLM Gateway" description: "A practical walkthrough for running an LLM gateway on your own infrastructure: what self-hosting actually buys you, how to read the licence, and a working Docker Compose deployment with routing, keys, and tracing." date: "2026-08-17" author: "Everstack Team" authorRole: "Engineering" readTime: "9 min read" tags: ["LLM Gateway", "Self-Hosted", "Infrastructure", "Guide"] ``` #### Full published page content Most teams reach for an LLM gateway for the same three reasons: they are tired of every service holding its own provider key, they cannot answer "what did we spend on Claude last month, by team", and a provider outage took production down because there was no fallback. A hosted gateway solves those. Self-hosting solves them too, and additionally answers a fourth question that a hosted gateway cannot: *where does the prompt text physically go?* If you are in healthcare, finance, defence, or anywhere with a data residency clause in the contract, that fourth question is the only one that matters. This is a practical guide to running one yourself. It covers what self-hosting genuinely gets you, how to read the licence before you commit, and a working deployment you can copy. ## What self-hosting actually buys you Be specific about this, because the honest list is shorter than the marketing list. **Data never leaves your boundary.** Prompts and completions carry the most sensitive text your company produces: patient notes, deal terms, source code, customer support transcripts. A self-hosted gateway means that text transits your network to the model provider and nowhere else. No third-party control plane sees it, so there is no third party to put in your subprocessor list, your DPA, or your incident response plan. **You control egress.** A gateway you run is a chokepoint you own. You can deny-list model providers, force all traffic through a corporate proxy, and prove in an audit that no application can reach `api.openai.com` directly because the network policy does not allow it. **No per-request markup and no seat pricing.** You pay for compute you already run. At high volume this matters; at low volume it does not, and the honest answer is that a hosted gateway is cheaper than your engineer's time. **No vendor availability coupling.** Your gateway's uptime is your uptime. That is a benefit only if your operational maturity is higher than the vendor's, which for most teams it is not. Be truthful with yourself here. What self-hosting does *not* buy you: less work. You now own upgrades, TLS, secrets, database backups, and the pager. Budget for it. ## Read the licence before you commit "Open source" is doing a lot of work in this category, and the differences are load-bearing. Everything below was checked against the actual `LICENSE` file in each repository on 31 August 2026. **Fully permissive, no carve-out.** [Bifrost](https://github.com/maximhq/bifrost) is Apache-2.0. [Envoy AI Gateway](https://github.com/envoyproxy/ai-gateway) is Apache-2.0. [Apache APISIX](https://github.com/apache/apisix), whose `ai-proxy` plugin fronts LLM providers, is Apache-2.0. [Kong](https://github.com/Kong/kong) is Apache-2.0 (its AI plugins ship in the open-source gateway, though some AI features are Enterprise-only). The [Portkey AI Gateway](https://github.com/Portkey-AI/gateway) repository is MIT. **Open core with a commercial carve-out.** [LiteLLM](https://github.com/BerriAI/litellm) is the most widely deployed option and its root `LICENSE` states plainly: ```text Portions of this software are licensed as follows: * All content that resides under the "enterprise/" directory of this repository, if that directory exists, is licensed under the license defined in "enterprise/LICENSE". * Content outside of the above mentioned directories or restrictions above is available under the MIT license as defined below. ``` The `enterprise/LICENSE.md` then requires a paid BerriAI Enterprise licence for production use of that directory, "for the correct number of user seats". This is a completely reasonable business model, and LiteLLM's MIT core is genuinely usable on its own. But you should know before you build a compliance story on top of it that some features you may want, such as SSO and certain audit capabilities, live behind that boundary. The practical rule: `git clone` the repo, read the root `LICENSE`, then look for an `enterprise/` or `ee/` directory and read that licence too. Two minutes of reading avoids a difficult conversation with procurement six months later. **Watch for the product moving.** In 2026 this category consolidated. Portkey's hosted product is now Palo Alto Networks' Prisma AIRS AI Gateway, and portkey.ai carries the banner "Portkey is now PRISMA AIRS AI Gateway, generally available for all enterprises" (observed 31 August 2026). The MIT-licensed gateway repository is still public, with its most recent push on 25 May 2026. If you are picking infrastructure with a five-year horizon, check commit recency as carefully as you check the licence. ## The deployment Here is a working stack. Everstack is used as the concrete example because it is what we build, and because the gateway ships in the same binary as the observability that makes it useful. The shape generalises: every gateway in this category needs a metadata store, and every one worth running needs somewhere to put telemetry. Three dependencies: Postgres for metadata (keys, provider config, routing rules), ClickHouse for telemetry (traces, spans, logs), Redis for caching and rate limit counters. ```yaml # docker-compose.yml services: postgres: image: postgres:16 environment: POSTGRES_USER: everstack POSTGRES_PASSWORD: changeme POSTGRES_DB: everstack volumes: - pgdata:/var/lib/postgresql/data clickhouse: image: clickhouse/clickhouse-server:24.3 volumes: - chdata:/var/lib/clickhouse ports: - "8123:8123" redis: image: redis:7-alpine everstack: image: ghcr.io/everstacklabs/everstack:latest ports: - "8089:8089" environment: EVS_DATABASE_URL: "postgres://everstack:changeme@postgres:5432/everstack?sslmode=disable" EVS_CLICKHOUSE_URL: "clickhouse://clickhouse:9000/everstack" EVS_REDIS_URL: "redis://redis:6379" EVS_AUTH_SECRET: "generate-a-real-secret" depends_on: - postgres - clickhouse - redis volumes: pgdata: chdata: ``` Bring it up and check health: ```bash docker compose up -d curl -fsS http://localhost:8089/debug/healthz ``` Budget 4 GB of RAM minimum and 8 GB if you want ClickHouse to be pleasant. The 20 GB of disk in the prerequisites is for volumes, and telemetry is what fills it. Plan retention on day one, not after the disk alert. ### Add a provider and issue a key Open the dashboard on port 8089. The first account to register becomes the owner, so register immediately rather than leaving that open. Then add a provider under Vault, and create an application API key. The important detail is that your applications never see the provider key. They get an Everstack key, the gateway holds the OpenAI or Anthropic credential, and rotating the provider key is a config change rather than a redeploy of nine services. ### Send a request The gateway is OpenAI API-compatible, so the migration is a base URL change: ```python from openai import OpenAI client = OpenAI( base_url="http://localhost:8089/openai/v1", api_key="YOUR_EVERSTACK_API_KEY", ) response = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": "Hello!"}], ) print(response.choices[0].message.content) ``` Anything speaking the OpenAI wire format works unchanged: the official SDKs, LangChain, LlamaIndex, Vercel AI SDK, and most internal HTTP clients. That compatibility is the reason this category standardised on the OpenAI schema, and it is why a gateway migration is usually a day of work rather than a quarter. ### Confirm you are actually getting observability This is the step teams skip, and it is the one that makes a gateway worth running. Open the traces view and confirm your request is there with its model, latency, token counts and cost. If the gateway you chose does not do this by default, you have deployed a proxy, not a gateway, and you will end up bolting a separate tracing stack onto it. Everstack writes OpenTelemetry spans for every request without any SDK in your application, which you can read more about in our [observability overview](https://everstack.ai/observability/). ## Taking it to production The Compose file above is a development stack. Five things separate it from something you can page on. **Terminate TLS properly.** Put the gateway behind your existing ingress. Do not expose 8089 directly. **Get secrets out of the Compose file.** `EVS_AUTH_SECRET` and every provider credential belong in your secret manager, injected at runtime. Provider keys are the highest-value secret in the deployment: they are bearer credentials against a metered API, and a leaked one is a bill. **Run Postgres and ClickHouse as managed services if you can.** The gateway is stateless and easy to operate. The databases are not. If your platform team already runs Postgres well, use it. If not, a managed Postgres removes the majority of the operational risk in this deployment. **Set retention deliberately.** Full-fidelity spans with prompt and completion text are the most useful data you will have and the fastest-growing table in the system. Decide the retention window before ClickHouse decides it for you. **Configure fallbacks and rate limits on day one, not after the first incident.** The reason to have a gateway is that when a provider degrades, the routing layer fails over without a deploy. Configure the fallback chain while you are calm. The same applies to per-key rate limits, which are your protection against one runaway retry loop consuming the month's budget. Our [gateway page](https://everstack.ai/gateway/) covers routing, load balancing and caching in more depth, and the full configuration reference is in the [documentation](https://docs.everstack.ai). ## When you should not self-host An honest guide has to include this section. If you are a team of five with no platform engineer, self-hosting is the wrong call. You will spend more on operating three stateful services than a hosted gateway costs, and you will spend it in the currency you have least of. Use a hosted gateway and revisit the decision when either your volume or your compliance obligations change. If your only requirement is spend visibility and you have no data residency constraint, a hosted tool gets you there this afternoon. If you need to be running in production this week and you have no Kubernetes or Compose experience in the team, take the hosted option and migrate later. Because the ecosystem standardised on the OpenAI wire format, that migration stays cheap. That is the genuinely good news about this category: choosing a gateway is a reversible decision, so do not over-think it. Self-hosting earns its keep when the data cannot leave, when the volume makes per-request markup material, or when you want one control plane over routing, sandboxes, evaluations and traces rather than four vendors with four DPAs. If none of those describe you yet, that is a fine answer. Come back when one of them does. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "How to Self-Host an LLM Gateway", "description": "A practical walkthrough for running an LLM gateway on your own infrastructure: what self-hosting actually buys you, how to read the licence, and a working Docker Compose deployment with routing, keys, and tracing.", "datePublished": "2026-08-17", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/how-to-self-host-an-llm-gateway/" } ] ``` --- ### Migrating from LiteLLM: What Actually Breaks Source: https://everstack.ai/blog/migrating-from-litellm Browser title: Migrating from LiteLLM: What Actually Breaks | Everstack Page type: article A practical migration guide from LiteLLM to another self-hosted gateway. What moves with a base URL change, what has to be rewritten, what does not carry over at al… #### First: should you? You need a provider it supports and your alternative does not. LiteLLM's coverage is the widest in the category and this can settle the question on its own. Check your model list before anything else. The MIT core covers you. If you do not need virtual keys, budgets, SSO or per-team spend tracking, the enterprise directory never affects you and LiteLLM is free forever. Routing is genuinely the whole problem. Adding… #### What moves for free The endpoint. LiteLLM's proxy is OpenAI-compatible, and so are most alternatives. Applications calling through the OpenAI SDK move with a base URL and key change: #### What has to be rewritten Direct litellm SDK usage. This is the big one, and how much of it you have determines the size of the job. #### What does not carry over Historical spend and usage records in the LiteLLM database. There is no importer. Keep the old database readable for as long as you need the history, and plan for a reporting seam at the cutover date. Existing virtual key objects and their budget state. Keys get reissued, and consumed-budget counters restart. Custom router strategies expressed in LiteLLM configuration. LiteLLM-specific request headers and any client… #### A rollout that does not hurt 1. Grep for import litellm first. This single command sizes the whole migration. If it returns nothing, you are doing a configuration port. If it returns hundreds of hits, you are doing a code change and should plan accordingly. #### The honest summary The endpoint change is trivial. The migration cost is proportional to how much you used LiteLLM as a Python library rather than as a service, and to how many custom callbacks you wrote. #### Page metadata ```yaml title: "Migrating from LiteLLM: What Actually Breaks" description: "A practical migration guide from LiteLLM to another self-hosted gateway. What moves with a base URL change, what has to be rewritten, what does not carry over at all, and when you should not migrate." date: "2026-08-22" author: "Everstack Team" authorRole: "Engineering" readTime: "8 min read" tags: ["LiteLLM", "Migration", "AI Gateway", "Engineering"] ``` #### Full published page content LiteLLM is the most widely deployed self-hosted AI gateway there is, with 57,637 GitHub stars and commits landing daily. Most teams evaluating a move are not moving because something is wrong with it. They are moving because they hit the enterprise line, or because they need things a gateway does not do. This is a practical guide to what that migration involves. It is written by a competitor, so the most useful thing it can do is be accurate about the parts that are easy, the parts that are not, and when you should stay. ## First: should you? **Stay on LiteLLM if:** - You need a provider it supports and your alternative does not. LiteLLM's coverage is the widest in the category and this can settle the question on its own. Check your model list before anything else. - The MIT core covers you. If you do not need virtual keys, budgets, SSO or per-team spend tracking, the enterprise directory never affects you and LiteLLM is free forever. - Routing is genuinely the whole problem. Adding a platform to solve a proxy-sized problem is over-buying. - You use the Python SDK as a library rather than the proxy as a service. That is a first-class way to use LiteLLM and it does not port anywhere. **Consider moving if:** - You have hit the enterprise line. LiteLLM's root `LICENSE` places everything under `enterprise/` under a separate licence, and their enterprise page lists virtual keys, budgets, RPM and TPM limits, spend by key, user, team and org, SSO with SCIM, and OIDC or JWT auth. Enterprise pricing is not published, so this arrives as a sales conversation rather than a line item you can plan for. - You need what happens after the request: agent sessions, isolated code execution, evaluations, human review. These are separate systems around LiteLLM. ## What moves for free **The endpoint.** LiteLLM's proxy is OpenAI-compatible, and so are most alternatives. Applications calling through the OpenAI SDK move with a base URL and key change: ```python # before client = OpenAI( base_url="http://litellm-proxy:4000", api_key=os.environ["LITELLM_MASTER_KEY"], ) # after client = OpenAI( base_url="https://private.example", api_key=os.environ["GATEWAY_API_KEY"], ) ``` That is genuinely it for application code, provided you were calling the proxy over HTTP. This is why gateway migrations are cheaper than observability migrations: no instrumentation to unpick. **Model identifiers**, usually. LiteLLM mostly uses bare model names in the proxy, so `gpt-4o-mini` stays `gpt-4o-mini`. Check any provider-prefixed identifiers you use. ## What has to be rewritten **Direct `litellm` SDK usage.** This is the big one, and how much of it you have determines the size of the job. ```python # This does not port. It is LiteLLM as a library, not as a service. import litellm response = litellm.completion( model="gpt-4o-mini", messages=[{"role": "user", "content": "..."}], ) ``` Code like this has to be rewritten against the OpenAI SDK pointed at the new gateway, or against the new gateway's own SDK. Grep for `import litellm` before you estimate anything. **`model_list` configuration.** LiteLLM's YAML config expresses providers, model aliases, API bases and per-model settings. Every gateway has an equivalent concept and none of them share a format. This is mechanical but not automatic. **Router settings.** Routing strategy, fallback ordering, retry policy, cooldowns and timeouts all need re-expressing. Do this deliberately rather than porting defaults, since you probably tuned some of these after an incident and the reasoning is worth carrying over. **Custom callbacks.** LiteLLM's callback system for logging and metrics is LiteLLM-specific. If you have written custom callbacks, budget real time. **Virtual keys and budgets**, if you were on enterprise. The concepts map to API keys with per-tenant limits on most alternatives, but the objects have to be recreated. ## What does not carry over Be realistic about these up front: - **Historical spend and usage records** in the LiteLLM database. There is no importer. Keep the old database readable for as long as you need the history, and plan for a reporting seam at the cutover date. - **Existing virtual key objects and their budget state.** Keys get reissued, and consumed-budget counters restart. - **Custom router strategies** expressed in LiteLLM configuration. - **LiteLLM-specific request headers** and any client code that sets them. ## A rollout that does not hurt **1. Grep for `import litellm` first.** This single command sizes the whole migration. If it returns nothing, you are doing a configuration port. If it returns hundreds of hits, you are doing a code change and should plan accordingly. **2. Check your model list.** Enumerate every model identifier in use and verify each is supported on the target. A single unsupported niche provider can block a full cutover, and finding that out in week three is expensive. **3. Stand the new gateway up alongside.** Do not replace. Run both. **4. Move one low-risk service.** Something with real traffic, a rollback you can execute in a minute, and a team who will notice if latency changes. **5. Compare cost accounting for a week.** Both gateways should agree with each other and with the provider invoice. If they do not, find out why before moving anything else. Watch specifically for cached input tokens, which are billed at a discount and are a common source of disagreement. **6. Test fallback deliberately.** Break the primary provider in staging on both systems and confirm traffic moves. A fallback that has never fired is a configuration rather than a capability, and migration is when you find that out. **7. Move the rest**, then delete the LiteLLM config rather than leaving it to rot as a second source of truth. ## The honest summary The endpoint change is trivial. The migration cost is proportional to how much you used LiteLLM as a Python library rather than as a service, and to how many custom callbacks you wrote. If you used it as a proxy with a YAML config, this is a day or two. If you built on the SDK, it is a project. And if the MIT core covers what you need, the correct answer may well be to stay. LiteLLM is good software with the largest community in this category, and switching costs are real. If you are moving to Everstack specifically, the [detailed comparison](https://everstack.ai/comparison/litellm/) covers the feature and licence differences, and the [gateway docs](https://docs.everstack.ai/getting-started/) cover configuration. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Migrating from LiteLLM: What Actually Breaks", "description": "A practical migration guide from LiteLLM to another self-hosted gateway. What moves with a base URL change, what has to be rewritten, what does not carry over at all, and when you should not migrate.", "datePublished": "2026-08-22", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/migrating-from-litellm/" } ] ``` --- ### OpenTelemetry for LLM Applications: A Practical Guide Source: https://everstack.ai/blog/opentelemetry-for-llm-applications Browser title: OpenTelemetry for LLM Applications: A Practical Guide | Everstack Page type: article How to instrument LLM applications with OpenTelemetry using the GenAI semantic conventions, why gen_ai.system is now gen_ai.provider.name, what belongs on a span, a… #### Why OpenTelemetry rather than a vendor SDK The honest argument is not technical elegance. It is that LLM observability vendors have been acquired, relicensed and repositioned repeatedly over the past two years, and instrumentation is the most expensive thing to redo. Every service you instrument is a code change, a review and a deploy. Doing that twice because your vendor changed is a bad use of a quarter. #### The semantic conventions, and where they moved The genai. namespace is the OpenTelemetry semantic convention for generative AI. Worth knowing where it came from: Traceloop's OpenLLMetry project developed conventions that became the basis for the official OTel GenAI effort, and its README notes that its semantic conventions are now part of OpenTelemetry. OpenLIT states that it follows and maintains the conventions with the OTel community. #### What a useful span actually looks like Here is a minimal manual instrumentation in Python. Adapt the attribute set, not the structure. #### The two mistakes that make traces useless Mistake one: putting prompts and completions on span attributes by default #### Sessions and multi-turn conversations A conversation is not a trace. It is a sequence of traces that need grouping. #### Which generation is your backend on The rename split the ecosystem in half, and it is the sort of thing nobody writes down. As of August 2026: #### Page metadata ```yaml title: "OpenTelemetry for LLM Applications: A Practical Guide" description: "How to instrument LLM applications with OpenTelemetry using the GenAI semantic conventions, why gen_ai.system is now gen_ai.provider.name, what belongs on a span, and how to avoid the two mistakes that make traces useless." date: "2026-08-30" author: "Everstack Team" authorRole: "Engineering" readTime: "14 min read" tags: ["OpenTelemetry", "Observability", "Engineering"] ``` #### Full published page content There are two ways to get observability for an LLM application. You can adopt a vendor SDK and accept that your traces live in their schema, or you can emit OpenTelemetry and keep the option of moving. This post is about the second one: what the GenAI semantic conventions actually specify, what belongs on a span, where the conventions are still moving, and the two mistakes that turn a trace into a log with extra steps. ## Why OpenTelemetry rather than a vendor SDK The honest argument is not technical elegance. It is that LLM observability vendors have been acquired, relicensed and repositioned repeatedly over the past two years, and instrumentation is the most expensive thing to redo. Every service you instrument is a code change, a review and a deploy. Doing that twice because your vendor changed is a bad use of a quarter. OTel spans are portable. Emit them once and you can point them at a self-hosted collector, a commercial backend, or both during a migration. That is the whole argument, and it is a good one. There is a real cost, and it is larger than it looks. The GenAI semantic conventions are younger than the rest of OpenTelemetry, every attribute in them is still at Development stability, and in May 2026 they moved out into a repository of their own. Plan for churn. ## The semantic conventions, and where they moved The `gen_ai.*` namespace is the OpenTelemetry semantic convention for generative AI. Worth knowing where it came from: Traceloop's OpenLLMetry project developed conventions that became the basis for the official OTel GenAI effort, and its README notes that its semantic conventions are now part of OpenTelemetry. OpenLIT states that it follows and maintains the conventions with the OTel community. That matters practically. It means the attribute names below are not one vendor's invention, and a backend that claims OTel support should understand them. Three things about their current state that a tutorial written even six months ago gets wrong. **They live in a different repository now.** The split out of `open-telemetry/semantic-conventions` into `open-telemetry/semantic-conventions-genai` merged on 5 May 2026. The old paths are stubs pointing at the new repo. The last released tag containing real GenAI content was v1.41.1 on 11 May 2026, and v1.42.0 onwards are tombstones. The new repository has no releases and no tags at all, so the current specification is unversioned content on `main`. If you want to pin a version, what you are actually pinning is a commit. **Nothing in it is stable.** The GenAI attribute registry carries 118 stability badges and every one of them reads `Development`. Not one `Stable`, not one `Release Candidate`. The only `Stable` badges anywhere in the GenAI docs belong to inherited core attributes such as `error.type`, `server.address` and `server.port`. This is not a reason to avoid the conventions, but it is a reason not to build a one-way schema migration on them. **`gen_ai.system` is gone.** It was renamed to `gen_ai.provider.name` in semantic-conventions v1.37.0, published 25 August 2025, listed in the changelog under breaking changes as "Rename `gen_ai.system` to `gen_ai.provider.name`". It was not deprecated with a grace period; it simply does not appear in the current registry, and there is no deprecation entry for it. Current values include `openai`, `anthropic`, `gcp.vertex_ai`, `gcp.gemini`, `aws.bedrock`, `azure.ai.openai`, `cohere`, `mistral_ai`, `groq`, `deepseek`, `perplexity` and `x_ai`. Emit `gen_ai.provider.name`. Plenty of backends still read `gen_ai.system`, so emitting both through a transition costs one attribute and avoids a blank provider column. There is a section below on which backends are on which generation. The core attributes on a model call span: ``` gen_ai.provider.name the provider, e.g. "openai", "anthropic" gen_ai.operation.name "chat", "text_completion", "embeddings" gen_ai.request.model the model you asked for gen_ai.response.model the model that actually served it gen_ai.request.temperature sampling parameters gen_ai.request.max_tokens gen_ai.usage.input_tokens prompt tokens gen_ai.usage.output_tokens completion tokens gen_ai.response.finish_reasons why generation stopped ``` Three names that look right and are not in the spec: there is no `gen_ai.usage.total_tokens`, and there is no `gen_ai.prompt` or `gen_ai.completion`. Tools emitting those are using names of their own. All three are everywhere in older tutorials. Token accounting has also become more granular than those two counters. The registry now separates cache reads from cache writes, splits input by audio, image and text, and carries reasoning output tokens on its own. If your provider reports them, there are named attributes to hold them. On a cache-heavy workload, the gap between input tokens and cache reads is the gap between a plausible bill and an accurate one. `gen_ai.request.model` and `gen_ai.response.model` being separate is not pedantry. If you route through a gateway with fallback, or use a provider alias that resolves to a dated snapshot, these differ, and the difference is exactly what you need when a regression appears and nobody changed the code. ## What a useful span actually looks like Here is a minimal manual instrumentation in Python. Adapt the attribute set, not the structure. ```python from opentelemetry import trace from opentelemetry.trace import SpanKind, Status, StatusCode tracer = trace.get_tracer("my-app") def call_model(client, messages, model="gpt-4o-mini"): with tracer.start_as_current_span( f"chat {model}", kind=SpanKind.CLIENT, ) as span: span.set_attribute("gen_ai.provider.name", "openai") span.set_attribute("gen_ai.operation.name", "chat") span.set_attribute("gen_ai.request.model", model) try: response = client.chat.completions.create( model=model, messages=messages, ) except Exception as error: span.record_exception(error) span.set_status(Status(StatusCode.ERROR)) raise usage = response.usage span.set_attribute("gen_ai.response.model", response.model) span.set_attribute("gen_ai.usage.input_tokens", usage.prompt_tokens) span.set_attribute("gen_ai.usage.output_tokens", usage.completion_tokens) span.set_attribute( "gen_ai.response.finish_reasons", [c.finish_reason for c in response.choices], ) return response ``` Three details worth copying. **`SpanKind.CLIENT`.** A model call is an outbound request to a remote service. Marking it correctly means backends render it in the right place in a service map instead of treating it as internal work. **The span name is `chat {model}`, not the prompt.** Naming is specified per operation rather than by one universal rule: inference and embeddings spans should be `{gen_ai.operation.name} {gen_ai.request.model}`, tool spans `execute_tool {gen_ai.tool.name}`, agent spans `invoke_agent {gen_ai.agent.name}`, and workflow spans `invoke_workflow {gen_ai.workflow.name}`. The reason is the same in every case: span names are a low-cardinality dimension. Putting anything user-derived in them will destroy your backend's aggregation and, on some pricing models, your bill. **Errors are recorded and re-raised.** A span that swallows the exception is worse than no span, because it makes a failing system look healthy. ## The two mistakes that make traces useless ### Mistake one: putting prompts and completions on span attributes by default It is tempting. It is also how teams end up with an observability backend full of customer PII, a compliance incident, and spans large enough to get dropped by collector limits. The conventions treat prompt and completion content as opt-in, precisely because of this. The mechanism changed in v1.37.0: the per-message events (`gen_ai.user.message` and its siblings) were deprecated and replaced by span attributes, `gen_ai.system_instructions`, `gen_ai.input.messages` and `gen_ai.output.messages`, all at requirement level Opt-In. Turning it on takes two environment variables, not one, and the second is not a boolean: ``` OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=SPAN_ONLY ``` The capture variable takes `NO_CONTENT`, which is the default, or `SPAN_ONLY`, `EVENT_ONLY` or `SPAN_AND_EVENT`. Setting one variable and not the other is the usual reason content never shows up. Treat content capture as a deliberate decision with a redaction step, not a default. If you do capture content, capture it at a boundary you control, apply masking before it leaves the process, and be aware that on several platforms server-side data masking is a paid feature. Langfuse, for example, gates server-side data masking behind its enterprise licence when self-hosting, along with audit logs and retention policies. If you are self-hosting for compliance reasons, check that the compliance features are on the free side of the line before you plan around them. ### Mistake two: instrumenting the model call and nothing else A span around `chat.completions.create` tells you a model was slow. It does not tell you why the answer was wrong, which is the question you actually have. The useful trace covers the whole unit of work: ``` POST /api/support-reply (SERVER, 4.2s) ├── retrieve context (INTERNAL, 180ms) │ └── vector search (CLIENT, 140ms) ├── chat gpt-4o-mini (CLIENT, 3.1s) │ └── gen_ai.usage.output_tokens = 512 ├── execute generated code (INTERNAL, 620ms) └── score response (INTERNAL, 90ms) ``` Now a slow request is attributable, and a wrong answer has the retrieval step sitting right next to the generation that used it. That is the difference between observability and logging. The conventions now cover that wider unit of work too, which is the other thing older tutorials miss. Past chat there are namespaces for agents (`gen_ai.agent.*`), tool calls (`gen_ai.tool.*`), evaluations (`gen_ai.evaluation.*`), memory (`gen_ai.memory.*`), retrieval (`gen_ai.retrieval.*`), conversations (`gen_ai.conversation.*`) and workflows (`gen_ai.workflow.name`). If you are instrumenting an agent rather than a single model call, reach for those before inventing your own, with the caveat that all of them are at Development stability like everything else in the namespace. ## Sessions and multi-turn conversations A conversation is not a trace. It is a sequence of traces that need grouping. Use a stable identifier propagated as an attribute across every trace in the conversation. Most backends expose this as a session concept and will group on it if you set it consistently. Set it once at the entry point and propagate it through baggage rather than threading it through every function signature. The same applies to tenant identity. Set `tenant.id` or your equivalent as a **span attribute**, and be aware of a trap: on some pipelines the value ends up in resource attributes on some spans and span attributes on others, and querying the wrong map makes every tenant look inactive. Pick one and validate it with a real query before you build dashboards on it. ## Which generation is your backend on The rename split the ecosystem in half, and it is the sort of thing nobody writes down. As of August 2026: - **On the current spec, reading `gen_ai.provider.name`**: OpenLIT, Pydantic Logfire, Grafana Beyla, W&B Weave, and Arize Phoenix on its read path. - **Still on the pre-v1.37 `gen_ai.system`**: Langfuse, Helicone, LangSmith and Laminar. Langfuse is the one worth checking yourself if you are planning around it: its ingestion code reads `gen_ai.system` and does not appear to read `gen_ai.provider.name` anywhere across its five ingest files. The consequence is small and annoying. Emit only `gen_ai.provider.name` into a backend on the old generation and your provider dimension goes blank, so every chart grouped by provider quietly collapses into one bucket rather than erroring. Emitting both attributes through a transition removes the failure mode for the cost of one attribute. Either way, validate it with a real query before building dashboards on it, exactly as you would for tenant identity. ## Choosing a backend Anything that accepts OTLP will take these spans. The practical differences: - **OpenLIT**: Apache-2.0, one datastore (ClickHouse), no paid tier today, explicitly maintains the `gen_ai` conventions with the OTel community. The lightest thing to operate. - **Laminar**: Apache-2.0, accepts OTLP over gRPC, HTTP protobuf and HTTP JSON, documents full `gen_ai` compatibility. Three datastores. - **Langfuse**: MIT core with an `ee/` carve-out, well documented OTel ingestion, by far the largest community at 33,900+ stars. - **Opik**: Apache-2.0, 21,697 stars, first-party OTel support. Heaviest self-hosted stack at five datastores. Whether it maps `gen_ai.*` specifically or a proprietary schema was not something we could confirm from its docs, so check that if portability matters. - **Your existing backend**: Datadog, Grafana, Honeycomb and others accept OTLP. If you already operate one, sending LLM spans there is less machinery than standing up a second platform. That last option is underrated. A separate LLM observability tool means a second place to look during an incident. ## Where the gateway approach differs Everything above assumes you instrument the application. There is another option: route model calls through a gateway that emits the spans itself. The trade is real in both directions. Instrumentation gives you spans around your own logic, which a gateway cannot see. A gateway gives you complete coverage of the model call path with no per-service rollout, including services you cannot easily change: a vendor integration, a coding agent, something in a language you have no SDK for. Most teams end up wanting both, and they compose: emit OTLP from your application for your own logic, route model calls through a gateway for the call path, and correlate on trace ID. [Everstack](https://everstack.ai/observability/) is OpenTelemetry-native on both sides, so gateway-produced spans and your own SDK spans land in the same trace rather than in two systems you join by hand. ## A checklist - Use the `gen_ai.*` conventions rather than inventing attributes. - Emit `gen_ai.provider.name`, not `gen_ai.system`, and emit both while your backend catches up. - Do not expect `gen_ai.usage.total_tokens`, `gen_ai.prompt` or `gen_ai.completion` to exist. They are not in the spec. - Mark model calls `SpanKind.CLIENT`. - Keep span names low-cardinality. Never put prompts in them. - Record both `gen_ai.request.model` and `gen_ai.response.model`. - Treat prompt and completion capture as opt-in with redaction. - Instrument the whole unit of work, not just the model call. - Propagate session and tenant identifiers consistently, and validate with a real query. - Verify your backend understands `gen_ai.*` rather than assuming OTLP support means semantic support, and check which generation of the attribute names it reads. - Expect churn. Every GenAI attribute is at Development stability, and the conventions now live in their own repository with no releases. Get those right and your traces survive a change of backend. Get the first two wrong and you will be re-instrumenting either way. Everstack's [tracing documentation](https://docs.everstack.ai) covers the emitter side, and the [Langfuse comparison](https://everstack.ai/comparison/langfuse/) goes deeper on the instrumentation versus gateway trade. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "OpenTelemetry for LLM Applications: A Practical Guide", "description": "How to instrument LLM applications with OpenTelemetry using the GenAI semantic conventions, why gen_ai.system is now gen_ai.provider.name, what belongs on a span, and how to avoid the two mistakes that make traces useless.", "datePublished": "2026-08-30", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/opentelemetry-for-llm-applications/" } ] ``` --- ### Per-Tenant LLM Cost Tracking That Survives an Audit Source: https://everstack.ai/blog/per-tenant-llm-cost-tracking Browser title: Per-Tenant LLM Cost Tracking That Survives an Audit | Everstack Page type: article Why token counts from provider dashboards cannot be attributed to customers, what to record at request time so cost is reconstructable later, and the three mistakes… #### Record it at request time, or not at all The core insight: model prices change, and you cannot reconstruct historical cost from historical token counts. #### The three mistakes The most common one, and it looks fine until you have a second customer. #### Where to put the recording In application code. Full control, and it works regardless of how you call providers. But it is a code change in every service, it drifts as services are added, and coverage is only ever as good as your least-maintained service. #### Making it useful Raw records are not a cost model. The four things people actually ask: #### Cost control, not just cost visibility Once you can attribute spend, you can enforce against it: per-tenant budgets that reject rather than warn, per-tenant rate limits so one customer cannot exhaust shared capacity, and routing rules that send bulk workloads to cheaper models. #### Page metadata ```yaml title: "Per-Tenant LLM Cost Tracking That Survives an Audit" description: "Why token counts from provider dashboards cannot be attributed to customers, what to record at request time so cost is reconstructable later, and the three mistakes that make an LLM cost model quietly wrong." date: "2026-08-24" author: "Everstack Team" authorRole: "Engineering" readTime: "9 min read" tags: ["Cost", "Observability", "Multi-Tenancy", "Engineering"] ``` #### Full published page content Someone will eventually ask which customer accounted for last month's model spend. If you cannot answer, you cannot price your product, identify an unprofitable account, or find the one tenant whose retry loop is costing you four figures a week. The provider dashboard cannot answer it. It shows spend by API key, and unless you provision a key per tenant, which is its own operational problem, that is one number for everybody. This post covers what to record, when to record it, and the three mistakes that make the resulting numbers quietly wrong. ## Record it at request time, or not at all The core insight: **model prices change, and you cannot reconstruct historical cost from historical token counts.** If you store `input_tokens: 1200, model: "gpt-4o-mini"` and compute cost later using today's price table, every number you produce for last quarter is wrong. Providers adjust prices, deprecate models and change tier boundaries. A price table is a point-in-time fact. So record the money at the moment of the request: ```json { "request_id": "req_01J...", "timestamp": "2026-08-24T09:14:22Z", "tenant_id": "acme-corp", "user_id": "u_8823", "feature": "support-reply", "provider": "openai", "model_requested": "gpt-4o-mini", "model_served": "gpt-4o-mini-2026-07-18", "input_tokens": 1204, "output_tokens": 318, "cached_input_tokens": 900, "input_price_per_1k": 0.00015, "output_price_per_1k": 0.0006, "cost_usd": 0.000371, "latency_ms": 1840, "cache_hit": true } ``` Both the token counts **and** the prices used, plus the computed cost. Then a re-price is a decision rather than an archaeology project. ## The three mistakes ### 1. Attributing to the API key instead of the tenant The most common one, and it looks fine until you have a second customer. Tenant identity has to travel with the request from your application to wherever cost is recorded. If your gateway learns the tenant from which upstream key was used, you are limited to one tenant per provider key, and you will end up managing hundreds of keys to get reporting you could have had from a header. Pass tenant identity explicitly. Then verify it: a field that is blank on 30% of records is worse than no field, because you will build dashboards on it before you notice. Run this query before you trust anything: ```sql SELECT count(*) FILTER (WHERE tenant_id IS NULL OR tenant_id = '') AS unattributed, count(*) AS total FROM llm_requests WHERE timestamp > now() - interval '7 days'; ``` If `unattributed` is not approximately zero, fix that before building anything else. A related trap worth naming: on some telemetry pipelines the tenant identifier ends up in **resource attributes** on some spans and **span attributes** on others. Query the wrong map and every customer looks inactive. Pick one location, and validate with a real query rather than by reading the instrumentation. ### 2. Ignoring cached and reasoning tokens Provider billing is no longer two numbers. **Cached input tokens** are usually billed at a large discount. If you compute cost as `input_tokens x input_price`, you overstate spend for any workload with a stable system prompt, which is most of them. Record cached input separately and price it separately. **Reasoning tokens** on reasoning models are billed as output but are not in the visible completion. A cost model that derives output tokens from response length will understate spend, sometimes dramatically. Take the token counts from the provider's usage object rather than counting characters. **Requested versus served model.** If you route with fallback, or use an alias that resolves to a dated snapshot, the model you asked for is not always the one that billed you. Record both. This is also the first thing to check when cost moves and nobody deployed anything. ### 3. Recording cost without recording why `tenant_id` and `cost_usd` tell you who spent. They do not tell you what to do about it. Add the dimensions that make spend actionable: - **Feature or endpoint.** Which product surface? This is what tells you whether a feature is priced correctly. - **User or session.** Lets you find the single account inside a tenant driving the spend. - **Cache hit.** Without this you cannot measure whether caching is paying for itself. - **Retry attempt number.** Retries are invisible spend. A silent retry loop is one of the most common causes of an unexplained bill. That last one deserves emphasis. If your client retries on timeout and your gateway also retries, a single logical request can bill four times. Unless attempt number is recorded, that shows up as "usage grew" rather than "we have a bug". ## Where to put the recording Three options, with a real trade. **In application code.** Full control, and it works regardless of how you call providers. But it is a code change in every service, it drifts as services are added, and coverage is only ever as good as your least-maintained service. **At the gateway.** If model calls route through a gateway, it sees every request and can record all of the above with no per-service work. It also sees calls from services you cannot easily instrument, which is often where the surprising spend lives. What it cannot see is context that only exists in your application, so tenant and feature have to be passed in as headers or metadata. **Both.** The gateway records the money, the application enriches with business context. This is what most teams converge on. ## Making it useful Raw records are not a cost model. The four things people actually ask: **Spend per tenant per month**, ranked. Sounds trivial, is the number that starts every commercial conversation. **Spend per tenant divided by revenue per tenant.** The one that matters. A customer costing 40% of what they pay you is a different problem from one costing 4%. **Spend per feature.** Tells you which surface to optimise or reprice. **Week-over-week change per tenant, with an alert.** The retry loop is only expensive because nobody noticed for three weeks. An alert on a tenant's spend doubling week over week catches it on day two. ## Cost control, not just cost visibility Visibility is where most teams stop. It is half the job. Once you can attribute spend, you can enforce against it: per-tenant budgets that reject rather than warn, per-tenant rate limits so one customer cannot exhaust shared capacity, and routing rules that send bulk workloads to cheaper models. Enforcement has to happen in the request path, which is the practical argument for putting the meter at the gateway rather than in an observability pipeline. An observability tool can tell you a tenant overspent last Tuesday. Only something in the request path can decline the request. [Everstack](https://everstack.ai/observability/) records these fields per request at the gateway, with per-tenant limits and budgets enforced in the same place, so attribution and enforcement are the same system rather than two that have to agree. The [pricing page](https://everstack.ai/pricing/) shows how we meter our own usage on the same mechanism. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Per-Tenant LLM Cost Tracking That Survives an Audit", "description": "Why token counts from provider dashboards cannot be attributed to customers, what to record at request time so cost is reconstructable later, and the three mistakes that make an LLM cost model quietly wrong.", "datePublished": "2026-08-24", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/per-tenant-llm-cost-tracking/" } ] ``` --- ### How to Safely Run AI-Generated Code Source: https://everstack.ai/blog/sandboxing-ai-generated-code Browser title: How to Safely Run AI-Generated Code | Everstack Page type: article A practical threat model for executing code an LLM wrote: why containers alone are the wrong boundary, what isolated runtimes and gVisor actually buy you, and the network, f… #### What you are actually defending against Accidental destruction. The model writes rm -rf on a path that resolves somewhere unexpected, or a loop that fills the disk. No attacker required. This is the common case and the cheapest to defend. #### Choosing an isolation primitive Containers share the host kernel. The isolation is namespaces and cgroups, which is a boundary designed to separate cooperating workloads, not to contain hostile ones. Container escapes are a recurring class of vulnerability, and "we run it in Docker" is not the answer to "how do you contain untrusted code". #### The controls that matter more than the primitive Here is the part most guides skip. an isolated runtime with unrestricted network egress is a worse security posture than a container with none, because exfiltration does not require an escape. #### Do not build this yourself Everything above is achievable with isolated runtime, iptables and cgroups directly. It is also a lot of surface to get right, and the failure mode is silent: a misconfigured egress rule does not throw an error, it just quietly permits exfiltration until someone notices. #### A checklist Isolation is an isolated runtime or gVisor, not a bare container, for model-generated code. Egress is default-deny with an explicit allowlist. 169.254.169.254 is blocked. Sandboxes cannot reach each other. No provider API keys in the sandbox environment. CPU, memory, disk and wall-clock limits are all set and all fire. Sandboxes are destroyed after one unit of work, never reused across tenants. You have tested the above by tr… #### Page metadata ```yaml title: "How to Safely Run AI-Generated Code" description: "A practical threat model for executing code an LLM wrote: why containers alone are the wrong boundary, what isolated runtimes and gVisor actually buy you, and the network, filesystem and resource controls that matter more than the isolation primitive." date: "2026-08-26" author: "Everstack Team" authorRole: "Engineering" readTime: "11 min read" tags: ["Security", "Sandboxes", "AI Agents", "Engineering"] ``` #### Full published page content An agent writes Python. Something runs it. That sentence contains a security decision most teams make by accident. The code is untrusted. Not because the model is malicious, but because the model's output is a function of its input, and its input includes text from your users. Prompt injection is not exotic anymore. If a user can influence what an agent writes, and the agent's code runs with any privilege at all, you have handed a stranger a shell with extra steps. This post is a practical threat model: what you are defending against, which isolation primitive fits, and the controls that matter more than the primitive choice. ## What you are actually defending against Four failure modes, roughly in order of likelihood. **Accidental destruction.** The model writes `rm -rf` on a path that resolves somewhere unexpected, or a loop that fills the disk. No attacker required. This is the common case and the cheapest to defend. **Resource exhaustion.** An infinite loop, a fork bomb, a runaway memory allocation. One tenant's bad generation takes down the host and everyone on it. **Data exfiltration.** The generated code reads a credential from the environment, or a file from a mounted volume, and POSTs it somewhere. This is the one prompt injection targets, and the one most sandboxes are weakest against, because the isolation is usually about the kernel and not about the network. **Container or VM escape.** The rarest, the most severe, and the one everyone thinks about first. Worth defending, but if you defend only this you have prioritised backwards. ## Choosing an isolation primitive **Containers** share the host kernel. The isolation is namespaces and cgroups, which is a boundary designed to separate cooperating workloads, not to contain hostile ones. Container escapes are a recurring class of vulnerability, and "we run it in Docker" is not the answer to "how do you contain untrusted code". That does not make containers useless. It makes them insufficient on their own for code a model wrote in response to user input. **gVisor** puts a user-space kernel between the workload and the host, intercepting syscalls. It meaningfully shrinks the attack surface without full virtualisation, at some syscall-heavy performance cost. A reasonable middle position. **isolated runtimes** (isolated runtime and similar) give each workload its own kernel with a deliberately minimal device model. This is where most of the agent sandbox category has landed, and for good reason: a real hardware-assisted boundary with startup measured in tens of milliseconds. E2B uses isolated runtime. So does Everstack, alongside Docker and Kubernetes backends. **Full VMs** are stronger and slower to start. Rarely the right trade for per-request execution. Default to isolated runtimes for model-generated code. Use containers only when you control the code, or when an isolated runtime is genuinely not available and you have compensating controls. ## The controls that matter more than the primitive Here is the part most guides skip. an isolated runtime with unrestricted network egress is a worse security posture than a container with none, because exfiltration does not require an escape. ### Network egress is the control that matters most Default deny. Then allow specifically. Most agent code needs either nothing, or a package registry, or one API. Work out which and allow only that: ``` default: DENY all egress package install: ALLOW pypi.org, files.pythonhosted.org (or a mirror) specific API: ALLOW the exact host, on 443 only metadata service: DENY 169.254.169.254 explicitly peer sandboxes: DENY ``` Two of those deserve emphasis. **The cloud metadata endpoint** at `169.254.169.254` hands out instance credentials to anything that can reach it. It has been the pivot in a long list of real breaches. Block it explicitly rather than assuming your network policy covers it. **Peer sandboxes.** If every sandbox lands on one flat network, code in sandbox A can reach an agent or service in sandbox B. If those sandboxes belong to different tenants, that is a cross-tenant compromise that never touched the host kernel. This is an easy thing to get wrong, because the isolation looks correct from the host's perspective. Per-sandbox network policy that drops inter-guest traffic is not optional in a multi-tenant system. ### Filesystem Mount nothing you would not hand over. In practice: - A writable scratch directory, sized and discarded with the sandbox. - Read-only for anything the code needs to read. - No host paths, no shared volumes between tenants, no credential files. If the workload needs data, pass it in as input rather than mounting a volume the code can enumerate. ### Secrets The generated code should never see a credential it does not need. Two rules: Do not put provider API keys in the sandbox environment. If the code needs to call a model, route it through a gateway that holds the key and enforces per-tenant limits, so the sandbox holds a scoped token rather than a provider key. That way a leaked token is revocable and rate-limited rather than a bill. Scope any token you do inject to the single tenant and the single operation, with a short expiry. ### Resource limits Set all four, and set them low: ``` CPU: capped, with a hard ceiling not just a share Memory: hard limit, OOM-kill rather than swap Disk: quota on the writable layer Wall clock: a timeout that actually fires ``` The wall clock one is the most commonly missed. A sandbox with no timeout is a resource leak waiting for its first infinite loop. Kill it and return an error; a hung request is worse than a failed one. ### Lifecycle One sandbox per unit of work, destroyed afterwards. Reusing a sandbox across tenants means state from one leaks into another, and it converts a per-request blast radius into a per-pool one. ## Do not build this yourself Everything above is achievable with isolated runtime, iptables and cgroups directly. It is also a lot of surface to get right, and the failure mode is silent: a misconfigured egress rule does not throw an error, it just quietly permits exfiltration until someone notices. The reasonable options: - **[E2B](https://everstack.ai/comparison/e2b/)**: Apache-2.0 across two repositories, isolated runtime, excellent developer experience. The commercial product is hosted, and self-hosting is documented separately in a root-level `self-host.md` deployed with Terraform, GCP GA and AWS beta. Concurrency is tiered at 20 on Hobby and 100 on Pro, purchasable to 1,100. - **[Daytona](https://everstack.ai/comparison/daytona/)**: fast and well designed, but note that its open source repository states it has received no updates since June 2026, when core development moved to a private codebase, and that the `LICENSE` file was deleted on 23 June 2026, so GitHub now reports no licence at all. The last open release, v0.190.0, is AGPL-3.0. Its isolation is contested by its own materials: the docs say default sandboxes are Linux containers, the README claims a dedicated kernel. Their hosted product is unaffected; the self-hosted build is an unmaintained snapshot, including for security fixes. For a security boundary, both of those matter. - **[Modal](https://everstack.ai/comparison/modal/)**: general serverless compute with first-class GPUs, hosted only. Isolation is gVisor, and the network controls are good: `block_network` drops all egress, an outbound CIDR allowlist narrows it, and sandboxes cannot reach other workspace resources. Sandboxes are priced above standard Modal compute, so budget off the Sandbox rate. - **[Everstack](https://everstack.ai/sandboxes/)**: Apache-2.0, Docker, isolated runtime and Kubernetes backends, self-hosted by default, with per-sandbox network policy and a gateway that holds provider credentials so the sandbox never does. ## A checklist Whatever you use, verify these rather than assuming: - Isolation is an isolated runtime or gVisor, not a bare container, for model-generated code. - Egress is default-deny with an explicit allowlist. - `169.254.169.254` is blocked. - Sandboxes cannot reach each other. - No provider API keys in the sandbox environment. - CPU, memory, disk and wall-clock limits are all set and all fire. - Sandboxes are destroyed after one unit of work, never reused across tenants. - You have tested the above by trying to break out, not by reading the config. That last one is the difference between a security posture and a security intention. Write a test that tries to reach the metadata endpoint, a peer sandbox and an arbitrary host, and assert that all three fail. Run it in CI. Configuration drifts, and a test is the only thing that notices. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "How to Safely Run AI-Generated Code", "description": "A practical threat model for executing code an LLM wrote: why containers alone are the wrong boundary, what isolated runtimes and gVisor actually buy you, and the network, filesystem and resource controls that matter more than the isolation primitive.", "datePublished": "2026-08-26", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/sandboxing-ai-generated-code/" } ] ``` --- ### How to Build a Fully Self-Hosted AI Stack Source: https://everstack.ai/blog/self-hosted-ai-stack-guide Browser title: How to Build a Fully Self-Hosted AI Stack | Everstack Page type: article The six layers of a production AI stack, which open-source project to use for each, where the licence lines fall, and the integration work between layers that nobod… #### Layer 1: The gateway One endpoint in front of every provider, with routing, fallback, caching and per-tenant limits. This is the layer that makes everything else tractable, because it is the one place every model call passes through. #### Layer 2: Execution If agents write code, something runs it, and it must not be a bare container. See our longer piece on sandboxing for the threat model. #### Layer 3: Memory and retrieval Options: pgvector if you already run Postgres and want one less system, Qdrant or Weaviate if you need scale and filtering that Postgres struggles with. All are self-hostable with clean licences. #### Layer 4: Observability OpenLIT (2,731 stars, Apache-2.0): one datastore, no paid tier, maintains the genai semantic conventions with the OTel community. The lightest to operate. Laminar (3,212 stars, Apache-2.0): cloud and self-hosted have feature parity, three datastores. Opik (21,697 stars, Apache-2.0): biggest community with a clean licence, self-hosted loses only user management, five datastores. Langfuse (33,900+ stars): MIT core wit… #### Layer 5: Evaluations Options: Braintrust (best product, self-hosting is Enterprise only), Langfuse (bundled with tracing, some gating), Opik (clean licence, complete self-hosted build), OpenLIT (lighter capability, no paywall). #### Layer 6: The agent runtime Sessions, tools, approvals, retries, durable state. Most teams start with a framework (LangGraph, CrewAI, the ADK) and discover that a framework is a library, not infrastructure: it does not persist sessions across restarts, enforce per-tenant limits, isolate execution or emit operable traces. #### Page metadata ```yaml title: "How to Build a Fully Self-Hosted AI Stack" description: "The six layers of a production AI stack, which open-source project to use for each, where the licence lines fall, and the integration work between layers that nobody budgets for." date: "2026-08-21" author: "Everstack Team" authorRole: "Engineering" readTime: "11 min read" tags: ["Self-Hosted", "Architecture", "Open Source"] ``` #### Full published page content Teams that need AI infrastructure inside their own boundary usually assemble it from parts. That works, and it is a reasonable default. But the assembly has a cost that shows up between the components rather than in any of them, and almost nobody budgets for it. This post lays out the six layers, names the credible open-source option for each with its actual licence terms, and is specific about the integration work in between. Licences and prices checked against each project's own repository and pricing page in August 2026. ## Layer 1: The gateway One endpoint in front of every provider, with routing, fallback, caching and per-tenant limits. This is the layer that makes everything else tractable, because it is the one place every model call passes through. **Options:** - **LiteLLM** (57,637 stars): MIT except `enterprise/`. Widest provider coverage anywhere. Virtual keys, budgets, RPM and TPM limits, spend tracking and SSO are on the enterprise side. - **Bifrost** (7,675 stars, Apache-2.0): clean licence, single Go binary, built for low overhead. Guardrails, cluster mode, adaptive load balancing, RBAC and audit logs are Enterprise. - **Kong AI Gateway** (44,059 stars, Apache-2.0 core): six free AI plugins, seventeen requiring an enterprise licence including semantic caching, advanced rate limiting and every guardrail. Strong choice if Kong is already in your path. - **Helicone** (6,116 stars, Apache-2.0): clean licence, gateway plus observability, supported on-prem on Enterprise. In maintenance mode since Mintlify's acquisition, announced 3 March 2026, which both companies define as security updates, bug fixes and new models continuing rather than new feature work. **The pattern:** governance and high availability are what get gated. They are also what you need in month six, which is why gating them works. ## Layer 2: Execution If agents write code, something runs it, and it must not be a bare container. See [our longer piece on sandboxing](https://everstack.ai/blog/sandboxing-ai-generated-code/) for the threat model. **Options:** - **E2B** (13,599 stars, Apache-2.0): isolated runtimes, excellent DX. The commercial product is hosted; self-hosting is documented in a root-level `self-host.md` and deployed with Terraform, GCP GA and AWS beta. Concurrency is tiered at 20 and 100. - **Daytona**: fast, well designed, and **its open source repository states it has received no updates since June 2026**, when core development moved to a private codebase. The `LICENSE` file was deleted the same month, so GitHub reports no licence; the last open release, v0.190.0, is AGPL-3.0. Isolation is contested: the docs say Linux containers by default, the README claims a dedicated kernel. Their hosted product is unaffected. Do not self-host the OSS build as a security boundary. - **Modal**: hosted only, gVisor isolation, but the answer if you need GPUs, which none of the self-hosted options provide. Budget off its Sandbox rate, roughly three times its standard compute rate. This layer has the thinnest genuinely-self-hostable-and-maintained set, and it is the one where getting it wrong has the worst consequences. ## Layer 3: Memory and retrieval **Options:** pgvector if you already run Postgres and want one less system, Qdrant or Weaviate if you need scale and filtering that Postgres struggles with. All are self-hostable with clean licences. Practical advice: start with pgvector. Most teams do not have a vector scale problem, they have a chunking and retrieval quality problem, and moving to a dedicated store does not fix that. ## Layer 4: Observability **Options:** - **OpenLIT** (2,731 stars, Apache-2.0): one datastore, no paid tier, maintains the `gen_ai` semantic conventions with the OTel community. The lightest to operate. - **Laminar** (3,212 stars, Apache-2.0): cloud and self-hosted have feature parity, three datastores. - **Opik** (21,697 stars, Apache-2.0): biggest community with a clean licence, self-hosted loses only user management, five datastores. - **Langfuse** (33,900+ stars): MIT core with an `ee/` carve-out. Audit logs, retention policies and server-side data masking need a licence key when self-hosting. - **OpenLLMetry**: instrumentation only, exports to whatever backend you already run. Often the right answer if you already operate observability. **Emit OpenTelemetry** regardless of what you pick. It is the only thing that makes this layer replaceable later, and this category has seen enough acquisitions to make that worth insisting on. ## Layer 5: Evaluations **Options:** Braintrust (best product, self-hosting is Enterprise only), Langfuse (bundled with tracing, some gating), Opik (clean licence, complete self-hosted build), OpenLIT (lighter capability, no paywall). The layer most likely to be abandoned after two weeks. The reason is almost always that evaluating required a push step nobody maintained. ## Layer 6: The agent runtime Sessions, tools, approvals, retries, durable state. Most teams start with a framework (LangGraph, CrewAI, the ADK) and discover that a framework is a library, not infrastructure: it does not persist sessions across restarts, enforce per-tenant limits, isolate execution or emit operable traces. This is the layer people most often end up building themselves, and the one that quietly consumes the most engineering time. ## The part nobody budgets for Six systems is not six problems. It is six problems plus the joins between them, and the joins are where the time goes. **Correlation.** A trace ID has to survive from the gateway, through the agent runtime, into the sandbox, and onto the evaluation score. If it does not, debugging an agent that wrote bad code means manually lining up timestamps across four dashboards. This is the single most common failure of assembled stacks and it is not visible until you are debugging an incident. **Identity and tenancy.** Every layer needs to agree on what a tenant is. If the gateway says `tenant_id`, the runtime says `org`, and the sandbox says nothing at all, per-tenant cost attribution is not possible without a reconciliation job you now maintain. **Credentials.** Provider keys should live in one place. If the gateway holds them and the sandbox also needs to call a model, the sandbox needs a scoped token, not a copy of the provider key. Getting this wrong is how a prompt injection turns into a bill. **Upgrades.** Six projects on six release cadences, each with its own breaking changes. This is a standing tax on someone's week, forever. **The licence audit.** Each project has its own line between free and paid, and those lines move. Two of the projects above changed their packaging in 2026. Whoever owns this stack owns re-reading licence files when a project you depend on gets acquired. ## When to assemble and when not to **Assemble when** you already operate most of these layers, you have a platform team, or you need best-in-class in one specific layer and the others are secondary. A team already running ClickHouse, Postgres and Kubernetes is not adding much by taking on one more service. **Do not assemble when** you have two or three engineers total and AI infrastructure is not your product. Six systems is a full-time job for someone, and it will be the person you least want doing it. ## The unified option [Everstack](https://everstack.ai/) is the other approach: gateway, agent runtime, sandboxes, memory, workflows, evaluations and OpenTelemetry-native observability as one Apache-2.0 control plane you self-host, with no separately licensed enterprise directory. The honest trade: you get correlation, shared tenancy and one upgrade path for free, because they are the same system. You give up best-in-class in each layer. Braintrust's evaluation product is better than ours. LiteLLM's provider coverage is wider. E2B's sandbox DX is more polished. Langfuse has a far larger community than any part of what we do. That is a real trade and not everyone should make it. The case for a unified control plane is strongest when you have several of these problems at once and a small team, and weakest when you have one problem and a platform team who can do it better. ## Where to start Whichever route you take, in this order: 1. **The gateway first.** It is the layer everything else correlates through, and it is the cheapest to adopt. 2. **Observability second**, emitting OpenTelemetry so it stays replaceable. 3. **Execution third**, if agents write code, and do not compromise on the isolation primitive. 4. **Evaluations fourth**, once you have traffic worth scoring. 5. **The runtime last**, because by then you will know which parts you actually need. The mistake is starting with the runtime because it is the most interesting layer. It is also the one whose requirements you understand least on day one. #### Structured page data ```json [ { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "How to Build a Fully Self-Hosted AI Stack", "description": "The six layers of a production AI stack, which open-source project to use for each, where the licence lines fall, and the integration work between layers that nobody budgets for.", "datePublished": "2026-08-21", "author": { "@type": "Organization", "name": "Everstack Team" }, "publisher": { "@type": "Organization", "name": "Everstack Labs", "logo": { "@type": "ImageObject", "url": "https://everstack.ai/everstack-desktop.png" } }, "mainEntityOfPage": "https://everstack.ai/blog/self-hosted-ai-stack-guide/" } ] ``` --- ### MCP Server Hydration & Provider Config Source: https://everstack.ai/changelog/v0-1-15-mcp-observability Browser title: MCP Server Hydration & Provider Config | Everstack Changelog Page type: article Everstack 0.1.15: MCP Server Hydration & Provider Config. Read the release notes and product changes. #### Page metadata ```yaml title: "MCP Server Hydration & Provider Config" date: "2026-04-15" version: "0.1.15" type: "added" ``` #### Full published page content ## MCP Server Hydration MCP (Model Context Protocol) servers are now automatically hydrated into agent sessions at startup and on boot, ensuring tools are available from the first turn without manual initialization. ## Provider Configuration - **Per-org provider config** with upsert-or-create semantics for multi-tenant deployments - **Runtime provider refresh** via database events so new API keys and model configs take effect without restarts ## Observability - Tenant-aware log ingestion and event writes for clean multi-tenant log separation - Extended in-flight HAVING window for metrics aggregation --- ### Evaluations & Agent Memory Source: https://everstack.ai/changelog/v0-1-16-evaluations Browser title: Evaluations & Agent Memory | Everstack Changelog Page type: article Everstack 0.1.16: Evaluations & Agent Memory. Read the release notes and product changes. #### Page metadata ```yaml title: "Evaluations & Agent Memory" date: "2026-04-20" version: "0.1.16" type: "added" ``` #### Full published page content ## Evaluations Engine First-class evaluation support with built-in scorers, dataset management, and a full eval runner pipeline. - **LLM-as-Judge scorer** for open-ended quality assessment - **Dataset archiving** with partial-unique indexes - **Eval runner** with tenant-scoped execution and result tracking ## Agent Memory Pilot release of agent memory with knowledge graph storage, retrieval, and deactivation lifecycle. --- ### Observability Leapfrog Source: https://everstack.ai/changelog/v0-1-19-observability-leapfrog Browser title: Observability Leapfrog | Everstack Changelog Page type: article Everstack 0.1.19: Observability Leapfrog. Read the release notes and product changes. #### Page metadata ```yaml title: "Observability Leapfrog" date: "2026-05-01" version: "0.1.19" type: "added" ``` #### Full published page content ## Full Observability Platform A ground-up rebuild of the observability stack, shipping Phases 0 through 3 in a single release. ### Phase 0: Parity - Scores, sessions, performance metrics, and P95 latency tracking - `thread_id` support, OpenTelemetry semconv compatibility, and OTLP/HTTP ingest ### Phase 1: Detail UX - Per-request cost breakdown and token diff view - Trace waterfall timeline and session playback - Logprobs visualization and playground integration ### Phase 2: Scale & Search - Full-text search across traces and logs - Metadata filtering with custom projections - No-truncation span display for deep debugging ### Phase 3: Online Eval Loop - Sampling rules with AI-powered auto-scorers - Multi-turn conversation simulation - Annotation queues with keyboard shortcuts and time-on-item tracking - Sampling-rule polling runner to close the online evaluation loop --- ### Isolated Sandboxes Source: https://everstack.ai/changelog/v0-1-20-sandboxes-security Browser title: Isolated Sandboxes | Everstack Changelog Page type: article Everstack 0.1.20: Isolated Sandboxes. Read the release notes and product changes. #### Page metadata ```yaml title: "Isolated Sandboxes" date: "2026-05-25" version: "0.1.20" type: "improved" ``` #### Full published page content ## Isolated Sandbox Infrastructure Production-grade isolated sandboxes with full lifecycle management. ### Sandbox Lifecycle - **Persistent shell sessions** with tmux-backed reconnect across browser refreshes - **Multi-tab shell** with per-tab session isolation - **Snapshot & restore** for sandbox state preservation across restarts - **Idle session reaper** with configurable retention and admin UI panel - **Live lifecycle events** streamed to the dashboard as they happen ### Shell UX - Rich connection status panel with transport indicators - Idle-timeout warnings with one-click extend - Shell command audit logging - Per-sandbox health badges ### Networking - Per-sandbox egress control: a sandbox reaches only the destinations you allow - Allowlisted DNS resolution per sandbox ## Billing - Live sandbox cost accrual with tier-based multipliers - Ledger view in the admin dashboard "Cost so far" tile --- ### Coding-Agent Tracing & User-Defined Observability Source: https://everstack.ai/changelog/v0-1-22-observability-coding-agents Browser title: Coding-Agent Tracing & User-Defined Observability | Everstack Changelog Page type: article Everstack 0.1.22: Coding-Agent Tracing & User-Defined Observability. Read the release notes and product changes. #### Page metadata ```yaml title: "Coding-Agent Tracing & User-Defined Observability" date: "2026-07-01" version: "0.1.22" type: "added" ``` #### Full published page content ## Trace Any Coding Agent Everstack ingests OpenTelemetry directly, so any coding agent that exports OTLP streams its sessions into your Traces view with no Everstack-specific SDK. Everstack normalizes each agent's attribute conventions into one schema, so they all render the same way. - **Supported agents**: Claude Code, Gemini CLI, Codex, GLM, Kimi, and now **Cursor** and **GitHub Copilot** - **Brand-aware traces:** each agent's trace renders with its logo and a readable client name - **Normalized model, tokens & cost:** coalesced across each agent's attribute names; provider inferred from the model when it isn't reported - **Computed cost for token-only agents:** agents that report only token counts are priced from your model-catalog, matching what you are billed; a reported cost is never overwritten - **Per-agent setup docs** for every supported agent ## User-Defined Observability Your traces, spans, and logs are yours to shape. Keep the sensible defaults or override them per project. - **Custom columns:** surface any span attribute, metadata field, or score as a typed, labeled column in the traces table - **Custom log columns:** surface any log attribute as a column on the logs view - **Saved views:** named bundles of columns, filters, and sorting, per project - **Semantic mappings:** alias your own attribute names into the built-in typed fields without code changes - **Classification rules:** assign your own span kinds with pattern rules ## Trace Experience - **Trace-correlated logs:** the log lines for a trace, inline in the trace view - **Real token & cost metrics** on the trace and span level - **Refined trace table and span tree:** status, graded duration, brand logos, and a cleaner toolbar ## Sandbox Reliability - **Guest kernel upgraded to 6.1** with a clean re-provision path - **Entropy fix:** isolated runtime guests now get hardware entropy, resolving slow first-boot and TLS stalls --- ### OpenAI-Compatible Error Codes Source: https://everstack.ai/changelog/v0-1-41-reliability-fixes Browser title: OpenAI-Compatible Error Codes | Everstack Changelog Page type: article Everstack 0.1.41: OpenAI-Compatible Error Codes. Read the release notes and product changes. #### Page metadata ```yaml title: "OpenAI-Compatible Error Codes" date: "2026-09-08" version: "0.1.41" type: "fixed" ``` #### Full published page content ## OpenAI-Compatible Errors Return the Right Status Requests to `/openai/v1` returned **500** for every failure, whatever actually went wrong. An invalid key, a rate limit and a bad request were indistinguishable. That mattered most for rate limits: an OpenAI SDK backs off politely on a `429`, but treats a `500` as a server fault and retries it differently. Callers were being retried incorrectly and never saw that they had been throttled. - Invalid key → `401` with `authentication_error` - Rate limited → `429` with `rate_limit_error` - Bad request → `400`, model not found → `404` --- ### Correct Annual Pricing & Honest Trace Status Source: https://everstack.ai/changelog/v0-1-42-pricing-and-trace-accuracy Browser title: Correct Annual Pricing & Honest Trace Status | Everstack Changelog Page type: article Everstack 0.1.42: Correct Annual Pricing & Honest Trace Status. Read the release notes and product changes. #### Page metadata ```yaml title: "Correct Annual Pricing & Honest Trace Status" date: "2026-09-08" version: "0.1.42" type: "fixed" ``` #### Full published page content ## The Scale Annual Price Displayed as $1.00 The in-product upgrade screen showed the Scale plan's annual price as **$1.00/year**. Checkout charged the correct amount, so anyone who continued saw the real figure at the payment step, a jarring gap on the screen where people decide. The price is written in our catalogue as `$1,000`, and the parser that turns display prices into amounts stopped reading at the thousands separator. It was the only price in the catalogue with one, which is why Scale annual was the only plan affected. Prices with separators now parse correctly, malformed entries are reported rather than silently becoming zero, and amounts are rounded rather than truncated. ## Failed Requests No Longer Show as Successful A request that failed upstream could appear in Traces as **success** while reporting an error count at the same time. A trace's status was read only from its root span, and provider failures are recorded on a child span, so the failure was visible in the count but not in the status. Around nine in ten failed traces were affected. Any dashboard, filter or alert keyed on trace status was undercounting failures. Status now reflects an error anywhere in the trace, and recognises both spellings of the OpenTelemetry status field that our ingest paths produce, the second of which accounted for the large majority of error spans and was never being matched. This corrects historical traces as well as new ones, since the status is derived at read time. --- ### OpenAI-Compatible Endpoint Guidance Source: https://everstack.ai/changelog/v0-1-43-openai-endpoint-guidance Browser title: OpenAI-Compatible Endpoint Guidance | Everstack Changelog Page type: article Everstack 0.1.43: OpenAI-Compatible Endpoint Guidance. Read the release notes and product changes. #### Page metadata ```yaml title: "OpenAI-Compatible Endpoint Guidance" date: "2026-09-10" version: "0.1.43" type: "fixed" ``` #### Full published page content ## Requests to the Wrong Prefix Now Say Where to Go Everstack serves two API surfaces. `/openai/v1` is OpenAI-wire-compatible and accepts a standard `Authorization: Bearer` token. `/v1` is the native REST surface and takes an `x-evs-api-key` header instead. An OpenAI SDK pointed at `/v1` was rejected with a message naming only the header it wanted, which is not something an OpenAI client can send. The error now names the endpoint that accepts Bearer, so a misrouted client can correct itself from the response. Every published OpenAI-compatible example now uses `https://{instance}.{region}.everstack.ai/openai/v1`. ## Changing Your Plan Mid-Checkout Choosing a different plan after starting a checkout now works. The earlier selection is retired and the new one opens, so you can compare options without having to finish or wait out the first attempt. --- ### Annual Billing and Accurate Usage Totals Source: https://everstack.ai/changelog/v0-1-44-billing-and-usage-accuracy Browser title: Annual Billing and Accurate Usage Totals | Everstack Changelog Page type: article Everstack 0.1.44: Annual Billing and Accurate Usage Totals. Read the release notes and product changes. #### Page metadata ```yaml title: "Annual Billing and Accurate Usage Totals" date: "2026-09-12" version: "0.1.44" type: "fixed" ``` #### Full published page content ## Annual Plans Can Be Purchased Choosing yearly billing on the Plans tab now carries that choice through to checkout. Selecting a yearly plan previously opened a monthly checkout, so the annual price shown on the card was not the one you were offered at payment. The interval you picked is also preserved if you come back from checkout, so the page you return to matches the plan you were looking at. ## Returning From Checkout Reflects What Actually Happened The billing page now confirms a completed purchase from your subscription itself rather than from the address you were returned to. Closing the tab, refreshing, or a slow confirmation no longer produces a message that disagrees with what was charged. If confirmation is still in progress, the page says so and keeps checking instead of guessing. ## Usage and Credit Are Reported Honestly Billing overview no longer shows a starter credit balance or compute allowance while those figures are still loading or could not be retrieved. Unavailable figures are now named as unavailable, with a way to retry, rather than being displayed as a real balance or as zero. Subscription management stays available even when usage figures cannot be loaded. ## Token and Cost Totals Are Counted Once Trace totals for tokens and cost are now attributed once per completion. Everstack records a span for the request it handles and a span for the provider call underneath it, and both carry the same usage figures. Trace-level totals previously summed both, which inflated the tokens and cost reported for a single completion, with the largest effect on agent runs where the pattern repeats each turn. Distinct provider calls are still added together, so retries, fallbacks and multi-turn agent runs continue to accumulate as you would expect. Traces that report usage in other ways are unaffected. **Totals shown for existing traces will decrease.** This corrects the reported figure. It does not change what you were billed. ## Provider Credentials Are Checked When You Save Them Provider credentials are now checked against the shape that provider expects when you save them, so a mistyped or truncated paste is caught at setup with a message naming the expected format, instead of surfacing later as failed requests. Credentials for providers with a custom base URL are accepted as-is, since a proxy or gateway can legitimately use a different format. --- ### OpenAI Agents API in Everstack Source: https://everstack.ai/changelog/v0-1-45-openai-agents-api Browser title: OpenAI Agents API in Everstack | Everstack Changelog Page type: article Everstack 0.1.45: OpenAI Agents API in Everstack. Read the release notes and product changes. #### Page metadata ```yaml title: "OpenAI Agents API in Everstack" date: "2026-09-14" version: "0.1.45" type: "added" ``` #### Full published page content ## OpenAI sessions in Agents Run OpenAI Agents API sessions from Everstack's existing Agents area. Browse OpenAI and native sessions together, filter by runtime, and continue a conversation in the shared agent chat. Review function and MCP tool approvals from the same Approvals view. OpenAI manages the agent's execution loop. When a task needs shell or workspace access, Everstack provides an isolated runtime sandbox. Sessions can also run without a sandbox. Docker and Kubernetes execution are not supported for this integration. ## Work through the dashboard or your own application Use the Everstack CLI or Node, Python and Go clients to create sessions, follow their progress and send follow-ups. Deployments with managed storage configured can attach input files and retain, download or delete exported workspace files. Model usage appears when OpenAI reports it. If it is unavailable, Everstack shows that state separately from compute and storage usage. Read the [OpenAI Agents API guide](https://docs.everstack.ai/getting-started/agents/openai-agents-api) for setup, examples and supported capabilities. --- ### Advanced Guardrails & Comparison Dashboard Source: https://everstack.ai/changelog/v0-11-0-guardrails Browser title: Advanced Guardrails & Comparison Dashboard | Everstack Changelog Page type: article Everstack 0.11.0: Advanced Guardrails & Comparison Dashboard. Read the release notes and product changes. #### Page metadata ```yaml title: "Advanced Guardrails & Comparison Dashboard" date: "2025-04-28" version: "0.11.0" type: "improved" ``` #### Full published page content ## Advanced Guardrails New gateway-level content protection features that run before requests reach your LLM providers. ### PII Detection and Redaction Automatically detect and redact personally identifiable information in prompts before they are sent to external providers. Supports detection of: - Email addresses and phone numbers - Credit card numbers and SSNs - Names and addresses - Custom regex patterns ### Content Filtering Built-in content moderation that blocks or flags harmful requests. Configure filters per route with custom policy rules for your use case. ## Comparison Dashboard Side-by-side evaluation run comparison with per-item diffs and regression detection. ### Features - **Side-by-side run comparison** - Compare any two evaluation runs visually - **Per-item diff view** - See exactly what changed between runs at the item level - **Regression alerts** - Get notified when metrics drop below baseline thresholds - **Baseline tracking** - Set baseline runs and track progress over time --- ### Multi-Turn Evaluations & G-Eval Custom Metrics Source: https://everstack.ai/changelog/v0-12-0-multi-turn-evals Browser title: Multi-Turn Evaluations & G-Eval Custom Metrics | Everstack Changelog Page type: article Everstack 0.12.0: Multi-Turn Evaluations & G-Eval Custom Metrics. Read the release notes and product changes. #### Page metadata ```yaml title: "Multi-Turn Evaluations & G-Eval Custom Metrics" date: "2025-05-10" version: "0.12.0" type: "added" prs: - number: 342 title: "feat: add multi-turn evaluation support" - number: 348 title: "feat: G-Eval custom metrics with natural language criteria" - number: 351 title: "feat: conversation completeness and knowledge retention scorers" ``` #### Full published page content ## Multi-Turn Evaluation Support Evaluate conversational AI across full dialogue sessions with turn-level and conversation-level metrics. This release introduces support for multi-turn datasets where each item contains a sequence of conversation turns rather than a single input/output pair. ### New Metrics - **Conversation Completeness** - Measures whether the assistant addressed all user questions and requests across the full dialogue - **Knowledge Retention** - Evaluates whether the assistant maintains context and remembers earlier information throughout the conversation - **Role Adherence** - Checks if the assistant stays within its defined role and constraints across all turns - **Turn Relevancy** - Scores each individual response for relevance to the immediate user message ## G-Eval Custom Metrics Define custom evaluation metrics using natural language criteria without writing raw prompts. The system automatically generates chain-of-thought scoring prompts based on your criteria description. ### How It Works 1. Describe your evaluation criteria in plain language 2. The engine generates a CoT prompt for consistent scoring 3. Metrics are powered by the existing LLM-as-judge engine 4. Results appear alongside built-in metrics in the eval dashboard ### Example ```yaml metric: name: "Tone Consistency" criteria: "The assistant maintains a professional and helpful tone throughout all conversation turns" score_type: "numeric" scale: [1, 5] ``` ## LLM-as-Judge Engine Updates The underlying judgment engine now supports turn-level scoring, allowing granular analysis of individual conversation turns within a multi-turn evaluation run. --- ### Agent Workflow Engine Source: https://everstack.ai/roadmap/agent-workflows Browser title: Agent Workflow Engine | Everstack Roadmap Page type: website Agent Workflow Engine is in progress on the Everstack AI infrastructure roadmap. #### Page metadata ```yaml title: "Agent Workflow Engine" status: "in-progress" category: "Agents" ``` #### Full published page content ## Agent Workflow Engine Visual workflow builder for composing multi-agent pipelines with branching, loops, and human-in-the-loop approval gates. ### What's Coming - **Visual DAG editor** for building multi-step agent workflows - **Fork & join** primitives for parallel agent execution - **Human-in-the-loop** approval gates with configurable policies - **Job delegation** for async sub-agent task dispatch - **Digest system** for cross-agent knowledge sharing --- ### Apple Containerization Backend Source: https://everstack.ai/roadmap/apple-containerization Browser title: Apple Containerization Backend | Everstack Roadmap Page type: website Apple Containerization Backend is coming soon on the Everstack AI infrastructure roadmap. #### Page metadata ```yaml title: "Apple Containerization Backend" status: "coming-soon" category: "Sandbox" prs: - number: 412 title: "feat: Apple Virtualization.framework sandbox backend" - number: 418 title: "feat: private runtime transport gRPC communication for Apple sandboxes" ``` #### Full published page content ## Apple Containerization Backend Sub-second sandbox VMs on macOS Apple Silicon via Virtualization.framework for local development. ### What This Enables - **Sub-second VM start times** - Sandboxes start in under 200ms on Apple Silicon - **OCI image support** - Run any container image without Docker Desktop - **macOS 26 + Apple Silicon required** - Leverages the latest Virtualization.framework APIs ### Why It Matters Currently, sandbox creation on macOS requires Docker Desktop which adds overhead and licensing complexity. The Apple Containerization backend uses the native Virtualization.framework to create lightweight VMs directly, eliminating the Docker dependency for local development. ### Technical Details --- ### CI/CD Eval Gating Source: https://everstack.ai/roadmap/ci-eval-gating Browser title: CI/CD Eval Gating | Everstack Roadmap Page type: website CI/CD Eval Gating is coming soon on the Everstack AI infrastructure roadmap. #### Page metadata ```yaml title: "CI/CD Eval Gating" status: "coming-soon" category: "Evaluations" ``` #### Full published page content ## CI/CD Eval Gating Integrate evaluation runs into your CI/CD pipeline to gate deployments on quality metrics. ### What's Planned - **GitHub Action** to trigger eval runs on PR and block merge on regression - **Baseline comparison** against the main branch's last passing run - **Custom thresholds** per metric with configurable pass/fail criteria - **Slack/webhook notifications** on eval failures with trace links - **Dashboard integration** showing eval history per deployment --- ### Isolated Sandboxes Source: https://everstack.ai/roadmap/isolated-sandboxes Browser title: Isolated Sandboxes | Everstack Roadmap Page type: website Isolated Sandboxes is shipped on the Everstack AI infrastructure roadmap. #### Page metadata ```yaml title: "Isolated Sandboxes" status: "shipped" date: "2026-05-25" category: "Sandbox" ``` #### Full published page content ## Isolated Sandboxes Production-grade code execution sandboxes with hardware-level isolation. ### What Shipped - **Sub-second sandbox boot** on bare-metal k3s - **Persistent shell sessions** with tmux-backed reconnect and multi-tab UX - **Snapshot & restore** for state preservation across restarts - **Per-sandbox networking** with DNS proxy, whitelist egress, and traffic isolation - **Host-side supervisor** daemon for sandbox lifecycle outside the Kubernetes pod - **Live cost accrual** with tier-based billing multipliers --- ### Observability Platform Source: https://everstack.ai/roadmap/observability-platform Browser title: Observability Platform | Everstack Roadmap Page type: website Observability Platform is shipped on the Everstack AI infrastructure roadmap. #### Page metadata ```yaml title: "Observability Platform" status: "shipped" date: "2026-05-01" category: "Observability" ``` #### Full published page content ## Observability Platform Full-stack LLM observability with traces, metrics, evaluations, and annotation workflows. ### What Shipped - **Trace explorer** with full-text search, metadata filtering, and no-truncation span display - **Cost & token analytics** with per-request breakdown and diff view - **Session playback** for debugging multi-turn conversations - **Online eval loop** with sampling rules, AI auto-scorers, and annotation queues - **OTLP/HTTP ingest** with OpenTelemetry semconv compatibility - **Logprobs visualization** and playground integration --- ### Anthropic AI models Source: https://everstack.ai/models/anthropic Browser title: Anthropic AI Models & Pricing | Everstack Page type: website Browse 31 Anthropic AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Anthropic models in one catalog Review 31 Anthropic models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Claude 2.0 Source: https://everstack.ai/models/anthropic/claude-2.0 Browser title: Claude 2.0: Pricing & Specs | Everstack Page type: website Review Claude 2.0 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 2.0 pricing and limits on Anthropic Token pricing through Anthropic: $8.00 per million input tokens, $24.00 per million output tokens. Limits: 100K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: claude-2. Catalog status: deprecated. #### Routing Claude 2.0 through Everstack Call Claude 2.0 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 2.1 Source: https://everstack.ai/models/anthropic/claude-2.1 Browser title: Claude 2.1: Pricing & Specs | Everstack Page type: website Review Claude 2.1 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 2.1 pricing and limits on Anthropic Token pricing through Anthropic: $8.00 per million input tokens, $24.00 per million output tokens. Limits: 200K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: claude-2. Catalog status: deprecated. #### Routing Claude 2.1 through Everstack Call Claude 2.1 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3.5 Haiku Source: https://everstack.ai/models/anthropic/claude-3-5-haiku-20241022 Browser title: Claude 3.5 Haiku: Pricing & Specs | Everstack Page type: website Review Claude 3.5 Haiku on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3.5 Haiku pricing and limits on Anthropic Token pricing through Anthropic: $0.800 per million input tokens, $4.00 per million output tokens. Limits: 200K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude-3.5. Catalog status: stable. #### Routing Claude 3.5 Haiku through Everstack Call Claude 3.5 Haiku on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3.5 Sonnet (v1) Source: https://everstack.ai/models/anthropic/claude-3-5-sonnet-20240620 Browser title: Claude 3.5 Sonnet (v1): Pricing & Specs | Everstack Page type: website Review Claude 3.5 Sonnet (v1) on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3.5 Sonnet (v1) pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude-3.5. Catalog status: stable. #### Routing Claude 3.5 Sonnet (v1) through Everstack Call Claude 3.5 Sonnet (v1) on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3.5 Sonnet Source: https://everstack.ai/models/anthropic/claude-3-5-sonnet-20241022 Browser title: Claude 3.5 Sonnet: Pricing & Specs | Everstack Page type: website Review Claude 3.5 Sonnet on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3.5 Sonnet pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude-3.5. Catalog status: stable. #### Routing Claude 3.5 Sonnet through Everstack Call Claude 3.5 Sonnet on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3.7 Sonnet on Anthropic Source: https://everstack.ai/models/anthropic/claude-3-7-sonnet-20250219 Browser title: Claude 3.7 Sonnet on Anthropic | Everstack Page type: website Review Claude 3.7 Sonnet on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3.7 Sonnet pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image input. Returns text output. Model family: claude-3.7. Catalog status: stable. #### Routing Claude 3.7 Sonnet through Everstack Call Claude 3.7 Sonnet on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3.7 Sonnet (Latest) Source: https://everstack.ai/models/anthropic/claude-3-7-sonnet-latest Browser title: Claude 3.7 Sonnet (Latest): Pricing & Specs | Everstack Page type: website Review Claude 3.7 Sonnet (Latest) on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3.7 Sonnet (Latest) pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image input. Returns text output. Model family: claude-3.7. Catalog status: stable. #### Routing Claude 3.7 Sonnet (Latest) through Everstack Call Claude 3.7 Sonnet (Latest) on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3 Haiku Source: https://everstack.ai/models/anthropic/claude-3-haiku-20240307 Browser title: Claude 3 Haiku: Pricing & Specs | Everstack Page type: website Review Claude 3 Haiku on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3 Haiku pricing and limits on Anthropic Token pricing through Anthropic: $0.250 per million input tokens, $1.25 per million output tokens. Limits: 200K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude-3. Catalog status: stable. #### Routing Claude 3 Haiku through Everstack Call Claude 3 Haiku on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3 Opus Source: https://everstack.ai/models/anthropic/claude-3-opus-20240229 Browser title: Claude 3 Opus: Pricing & Specs | Everstack Page type: website Review Claude 3 Opus on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3 Opus pricing and limits on Anthropic Token pricing through Anthropic: $15.00 per million input tokens, $75.00 per million output tokens. Limits: 200K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude-3. Catalog status: stable. #### Routing Claude 3 Opus through Everstack Call Claude 3 Opus on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3 Sonnet Source: https://everstack.ai/models/anthropic/claude-3-sonnet-20240229 Browser title: Claude 3 Sonnet: Pricing & Specs | Everstack Page type: website Review Claude 3 Sonnet on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3 Sonnet pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude-3. Catalog status: stable. #### Routing Claude 3 Sonnet through Everstack Call Claude 3 Sonnet on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Fable 5.1 Source: https://everstack.ai/models/anthropic/claude-fable-5-1 Browser title: Claude Fable 5.1: Pricing & Specs | Everstack Page type: website Review Claude Fable 5.1 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Fable 5.1 pricing and limits on Anthropic Token pricing through Anthropic: $10.00 per million input tokens, $50.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-fable. Catalog status: stable. #### Routing Claude Fable 5.1 through Everstack Call Claude Fable 5.1 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Fable 5 on Anthropic Source: https://everstack.ai/models/anthropic/claude-fable-5 Browser title: Claude Fable 5 on Anthropic | Everstack Page type: website Review Claude Fable 5 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Fable 5 pricing and limits on Anthropic Token pricing through Anthropic: $10.00 per million input tokens, $50.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-fable. Catalog status: stable. #### Routing Claude Fable 5 through Everstack Call Claude Fable 5 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Haiku 4.5 Source: https://everstack.ai/models/anthropic/claude-haiku-4-5-20251001 Browser title: Claude Haiku 4.5: Pricing & Specs | Everstack Page type: website Review Claude Haiku 4.5 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Haiku 4.5 pricing and limits on Anthropic Token pricing through Anthropic: $1.00 per million input tokens, $5.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Haiku 4.5 through Everstack Call Claude Haiku 4.5 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Haiku 4.5 (latest) Source: https://everstack.ai/models/anthropic/claude-haiku-4-5 Browser title: Claude Haiku 4.5 (latest): Pricing & Specs | Everstack Page type: website Review Claude Haiku 4.5 (latest) on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Haiku 4.5 (latest) pricing and limits on Anthropic Token pricing through Anthropic: $1.00 per million input tokens, $5.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-haiku. Catalog status: stable. #### Routing Claude Haiku 4.5 (latest) through Everstack Call Claude Haiku 4.5 (latest) on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Instant 1.2 Source: https://everstack.ai/models/anthropic/claude-instant-1.2 Browser title: Claude Instant 1.2: Pricing & Specs | Everstack Page type: website Review Claude Instant 1.2 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Instant 1.2 pricing and limits on Anthropic Token pricing through Anthropic: $0.800 per million input tokens, $2.40 per million output tokens. Limits: 100K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: claude-instant. Catalog status: deprecated. #### Routing Claude Instant 1.2 through Everstack Call Claude Instant 1.2 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.1 Source: https://everstack.ai/models/anthropic/claude-opus-4-1-20250805 Browser title: Claude Opus 4.1: Pricing & Specs | Everstack Page type: website Review Claude Opus 4.1 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.1 pricing and limits on Anthropic Token pricing through Anthropic: $15.00 per million input tokens, $75.00 per million output tokens. Limits: 200K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.1 through Everstack Call Claude Opus 4.1 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.1 (latest) Source: https://everstack.ai/models/anthropic/claude-opus-4-1 Browser title: Claude Opus 4.1 (latest): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.1 (latest) on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.1 (latest) pricing and limits on Anthropic Token pricing through Anthropic: $15.00 per million input tokens, $75.00 per million output tokens. Limits: 200K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: deprecated. #### Routing Claude Opus 4.1 (latest) through Everstack Call Claude Opus 4.1 (latest) on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4 Source: https://everstack.ai/models/anthropic/claude-opus-4-20250514 Browser title: Claude Opus 4: Pricing & Specs | Everstack Page type: website Review Claude Opus 4 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4 pricing and limits on Anthropic Token pricing through Anthropic: $15.00 per million input tokens, $75.00 per million output tokens. Limits: 200K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4 through Everstack Call Claude Opus 4 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.5 Source: https://everstack.ai/models/anthropic/claude-opus-4-5-20251101 Browser title: Claude Opus 4.5: Pricing & Specs | Everstack Page type: website Review Claude Opus 4.5 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.5 pricing and limits on Anthropic Token pricing through Anthropic: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.5 through Everstack Call Claude Opus 4.5 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.5 (latest) Source: https://everstack.ai/models/anthropic/claude-opus-4-5 Browser title: Claude Opus 4.5 (latest): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.5 (latest) on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.5 (latest) pricing and limits on Anthropic Token pricing through Anthropic: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 4.5 (latest) through Everstack Call Claude Opus 4.5 (latest) on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.6 on Anthropic Source: https://everstack.ai/models/anthropic/claude-opus-4-6 Browser title: Claude Opus 4.6 on Anthropic | Everstack Page type: website Review Claude Opus 4.6 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.6 pricing and limits on Anthropic Token pricing through Anthropic: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.6 through Everstack Call Claude Opus 4.6 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.7 on Anthropic Source: https://everstack.ai/models/anthropic/claude-opus-4-7 Browser title: Claude Opus 4.7 on Anthropic | Everstack Page type: website Review Claude Opus 4.7 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.7 pricing and limits on Anthropic Token pricing through Anthropic: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.7 through Everstack Call Claude Opus 4.7 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.8 on Anthropic Source: https://everstack.ai/models/anthropic/claude-opus-4-8 Browser title: Claude Opus 4.8 on Anthropic | Everstack Page type: website Review Claude Opus 4.8 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.8 pricing and limits on Anthropic Token pricing through Anthropic: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 4.8 through Everstack Call Claude Opus 4.8 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4 (Latest) Source: https://everstack.ai/models/anthropic/claude-opus-4-latest Browser title: Claude Opus 4 (Latest): Pricing & Specs | Everstack Page type: website Review Claude Opus 4 (Latest) on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4 (Latest) pricing and limits on Anthropic Token pricing through Anthropic: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4 (Latest) through Everstack Call Claude Opus 4 (Latest) on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 5 on Anthropic Source: https://everstack.ai/models/anthropic/claude-opus-5 Browser title: Claude Opus 5 on Anthropic | Everstack Page type: website Review Claude Opus 5 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 5 pricing and limits on Anthropic Token pricing through Anthropic: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 5 through Everstack Call Claude Opus 5 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4 on Anthropic Source: https://everstack.ai/models/anthropic/claude-sonnet-4-20250514 Browser title: Claude Sonnet 4 on Anthropic | Everstack Page type: website Review Claude Sonnet 4 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4 pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4 through Everstack Call Claude Sonnet 4 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4.5 Source: https://everstack.ai/models/anthropic/claude-sonnet-4-5-20250929 Browser title: Claude Sonnet 4.5: Pricing & Specs | Everstack Page type: website Review Claude Sonnet 4.5 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4.5 pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4.5 through Everstack Call Claude Sonnet 4.5 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4.5 (latest) Source: https://everstack.ai/models/anthropic/claude-sonnet-4-5 Browser title: Claude Sonnet 4.5 (latest): Pricing & Specs | Everstack Page type: website Review Claude Sonnet 4.5 (latest) on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4.5 (latest) pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-sonnet. Catalog status: stable. #### Routing Claude Sonnet 4.5 (latest) through Everstack Call Claude Sonnet 4.5 (latest) on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4.6 on Anthropic Source: https://everstack.ai/models/anthropic/claude-sonnet-4-6 Browser title: Claude Sonnet 4.6 on Anthropic | Everstack Page type: website Review Claude Sonnet 4.6 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4.6 pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4.6 through Everstack Call Claude Sonnet 4.6 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4 (Latest) Source: https://everstack.ai/models/anthropic/claude-sonnet-4-latest Browser title: Claude Sonnet 4 (Latest): Pricing & Specs | Everstack Page type: website Review Claude Sonnet 4 (Latest) on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4 (Latest) pricing and limits on Anthropic Token pricing through Anthropic: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4 (Latest) through Everstack Call Claude Sonnet 4 (Latest) on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 5 on Anthropic Source: https://everstack.ai/models/anthropic/claude-sonnet-5 Browser title: Claude Sonnet 5 on Anthropic | Everstack Page type: website Review Claude Sonnet 5 on Anthropic: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 5 pricing and limits on Anthropic Token pricing through Anthropic: $2.00 per million input tokens, $10.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking, computer_use. Accepts text, image, pdf input. Returns text output. Model family: claude-sonnet. Catalog status: stable. #### Routing Claude Sonnet 5 through Everstack Call Claude Sonnet 5 on Anthropic through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### AWS Bedrock AI models Source: https://everstack.ai/models/aws-bedrock Browser title: AWS Bedrock AI Models & Pricing | Everstack Page type: website Browse 20 AWS Bedrock AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare AWS Bedrock models in one catalog Review 20 AWS Bedrock models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Amazon Nova Pro Source: https://everstack.ai/models/aws-bedrock/amazon.nova-pro-v1:0 Browser title: Amazon Nova Pro: Pricing & Specs | Everstack Page type: website Review Amazon Nova Pro on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Amazon Nova Pro pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $0.800 per million input tokens, $3.20 per million output tokens. Limits: 300K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, video input. Returns text output. Model family: nova. Catalog status: stable. #### Routing Amazon Nova Pro through Everstack Call Amazon Nova Pro on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude 3.7 Sonnet on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-3-7-sonnet-20250219-v1:0 Browser title: Claude 3.7 Sonnet on AWS Bedrock | Everstack Page type: website Review Claude 3.7 Sonnet on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3.7 Sonnet pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude. Catalog status: stable. #### Routing Claude 3.7 Sonnet through Everstack Call Claude 3.7 Sonnet on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Fable 5 (Bedrock) on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-fable-5 Browser title: Claude Fable 5 (Bedrock) on AWS Bedrock | Everstack Page type: website Review Claude Fable 5 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Fable 5 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $10.00 per million input tokens, $50.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-fable. Catalog status: stable. #### Routing Claude Fable 5 (Bedrock) through Everstack Call Claude Fable 5 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Haiku 4.5 (Bedrock) Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-haiku-4-5-20251001-v1:0 Browser title: Claude Haiku 4.5 (Bedrock): Pricing & Specs | Everstack Page type: website Review Claude Haiku 4.5 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Haiku 4.5 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $1.00 per million input tokens, $5.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Haiku 4.5 (Bedrock) through Everstack Call Claude Haiku 4.5 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.1 (Bedrock) Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-opus-4-1-20250805-v1:0 Browser title: Claude Opus 4.1 (Bedrock): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.1 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.1 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $15.00 per million input tokens, $75.00 per million output tokens. Limits: 200K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: deprecated. #### Routing Claude Opus 4.1 (Bedrock) through Everstack Call Claude Opus 4.1 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.5 (Bedrock) Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-opus-4-5-20251101-v1:0 Browser title: Claude Opus 4.5 (Bedrock): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.5 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.5 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.5 (Bedrock) through Everstack Call Claude Opus 4.5 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.6 (Bedrock) Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-opus-4-6-v1 Browser title: Claude Opus 4.6 (Bedrock): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.6 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.6 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.6 (Bedrock) through Everstack Call Claude Opus 4.6 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.7 (Bedrock) on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-opus-4-7 Browser title: Claude Opus 4.7 (Bedrock) on AWS Bedrock | Everstack Page type: website Review Claude Opus 4.7 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.7 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.7 (Bedrock) through Everstack Call Claude Opus 4.7 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.8 (Bedrock) on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-opus-4-8 Browser title: Claude Opus 4.8 (Bedrock) on AWS Bedrock | Everstack Page type: website Review Claude Opus 4.8 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.8 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 4.8 (Bedrock) through Everstack Call Claude Opus 4.8 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 5 (Bedrock) on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-opus-5 Browser title: Claude Opus 5 (Bedrock) on AWS Bedrock | Everstack Page type: website Review Claude Opus 5 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 5 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 5 (Bedrock) through Everstack Call Claude Opus 5 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4 on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-sonnet-4-20250514-v1:0 Browser title: Claude Sonnet 4 on AWS Bedrock | Everstack Page type: website Review Claude Sonnet 4 on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4 pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude. Catalog status: stable. #### Routing Claude Sonnet 4 through Everstack Call Claude Sonnet 4 on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4.5 (Bedrock) Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-sonnet-4-5-20250929-v1:0 Browser title: Claude Sonnet 4.5 (Bedrock): Pricing & Specs | Everstack Page type: website Review Claude Sonnet 4.5 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4.5 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4.5 (Bedrock) through Everstack Call Claude Sonnet 4.5 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4.6 (Bedrock) on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-sonnet-4-6 Browser title: Claude Sonnet 4.6 (Bedrock) on AWS Bedrock | Everstack Page type: website Review Claude Sonnet 4.6 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4.6 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4.6 (Bedrock) through Everstack Call Claude Sonnet 4.6 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 5 (Bedrock) on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/anthropic.claude-sonnet-5 Browser title: Claude Sonnet 5 (Bedrock) on AWS Bedrock | Everstack Page type: website Review Claude Sonnet 5 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 5 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $2.00 per million input tokens, $10.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, extended_thinking. Accepts text, image, pdf input. Returns text output. Model family: claude-sonnet. Catalog status: stable. #### Routing Claude Sonnet 5 (Bedrock) through Everstack Call Claude Sonnet 5 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V3.2 (Bedrock) Source: https://everstack.ai/models/aws-bedrock/deepseek.v3.2 Browser title: DeepSeek V3.2 (Bedrock): Pricing & Specs | Everstack Page type: website Review DeepSeek V3.2 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V3.2 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $0.620 per million input tokens, $1.85 per million output tokens. Limits: 164K token context window, 82K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek. Catalog status: stable. #### Routing DeepSeek V3.2 (Bedrock) through Everstack Call DeepSeek V3.2 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.1 70B Instruct on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/meta.llama3-1-70b-instruct-v1:0 Browser title: Llama 3.1 70B Instruct on AWS Bedrock | Everstack Page type: website Review Llama 3.1 70B Instruct on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.1 70B Instruct pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $0.720 per million input tokens, $0.720 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.1 70B Instruct through Everstack Call Llama 3.1 70B Instruct on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.3 70B Instruct on AWS Bedrock Source: https://everstack.ai/models/aws-bedrock/meta.llama3-3-70b-instruct-v1:0 Browser title: Llama 3.3 70B Instruct on AWS Bedrock | Everstack Page type: website Review Llama 3.3 70B Instruct on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.3 70B Instruct pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $0.720 per million input tokens, $0.720 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.3 70B Instruct through Everstack Call Llama 3.3 70B Instruct on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Large 2407 Source: https://everstack.ai/models/aws-bedrock/mistral.mistral-large-2407-v1:0 Browser title: Mistral Large 2407: Pricing & Specs | Everstack Page type: website Review Mistral Large 2407 on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Large 2407 pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $3.00 per million input tokens, $9.00 per million output tokens. Limits: 128K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: mistral. Catalog status: deprecated. #### Routing Mistral Large 2407 through Everstack Call Mistral Large 2407 on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Large 3 (Bedrock) Source: https://everstack.ai/models/aws-bedrock/mistral.mistral-large-3-675b-instruct Browser title: Mistral Large 3 (Bedrock): Pricing & Specs | Everstack Page type: website Review Mistral Large 3 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Large 3 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 256K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: mistral. Catalog status: stable. #### Routing Mistral Large 3 (Bedrock) through Everstack Call Mistral Large 3 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.6 (Bedrock) Source: https://everstack.ai/models/aws-bedrock/xai.grok-4.6 Browser title: Grok 4.6 (Bedrock): Pricing & Specs | Everstack Page type: website Review Grok 4.6 (Bedrock) on AWS Bedrock: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.6 (Bedrock) pricing and limits on AWS Bedrock Token pricing through AWS Bedrock: $2.20 per million input tokens, $6.60 per million output tokens. Limits: 500K token context window, 500K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.6 (Bedrock) through Everstack Call Grok 4.6 (Bedrock) on AWS Bedrock through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Azure OpenAI AI models Source: https://everstack.ai/models/azure-openai Browser title: Azure OpenAI AI Models & Pricing | Everstack Page type: website Browse 19 Azure OpenAI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Azure OpenAI models in one catalog Review 19 Azure OpenAI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### GPT-4.1 Mini on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-4.1-mini Browser title: GPT-4.1 Mini on Azure OpenAI | Everstack Page type: website Review GPT-4.1 Mini on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4.1 Mini pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $0.400 per million input tokens, $1.60 per million output tokens. Limits: 1048K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4.1. Catalog status: deprecated. #### Routing GPT-4.1 Mini through Everstack Call GPT-4.1 Mini on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4.1 Nano (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-4.1-nano Browser title: GPT-4.1 Nano (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-4.1 Nano (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4.1 Nano (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $0.100 per million input tokens, $0.400 per million output tokens. Limits: 1048K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4.1. Catalog status: deprecated. #### Routing GPT-4.1 Nano (Azure) through Everstack Call GPT-4.1 Nano (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4.1 on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-4.1 Browser title: GPT-4.1 on Azure OpenAI | Everstack Page type: website Review GPT-4.1 on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4.1 pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $2.00 per million input tokens, $8.00 per million output tokens. Limits: 1048K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4.1. Catalog status: deprecated. #### Routing GPT-4.1 through Everstack Call GPT-4.1 on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4o Mini on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-4o-mini Browser title: GPT-4o Mini on Azure OpenAI | Everstack Page type: website Review GPT-4o Mini on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4o Mini pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4o. Catalog status: deprecated. #### Routing GPT-4o Mini through Everstack Call GPT-4o Mini on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4o on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-4o Browser title: GPT-4o on Azure OpenAI | Everstack Page type: website Review GPT-4o on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4o pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4o. Catalog status: deprecated. #### Routing GPT-4o through Everstack Call GPT-4o on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 Codex (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5-codex Browser title: GPT-5 Codex (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5 Codex (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 Codex (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 Codex (Azure) through Everstack Call GPT-5 Codex (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 Mini (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5-mini Browser title: GPT-5 Mini (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5 Mini (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 Mini (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $0.250 per million input tokens, $2.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 Mini (Azure) through Everstack Call GPT-5 Mini (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 Nano (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5-nano Browser title: GPT-5 Nano (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5 Nano (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 Nano (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $0.050 per million input tokens, $0.400 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 Nano (Azure) through Everstack Call GPT-5 Nano (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.1 (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5.1 Browser title: GPT-5.1 (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5.1 (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.1 (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio input. Returns text, image, audio output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.1 (Azure) through Everstack Call GPT-5.1 (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.2 (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5.2 Browser title: GPT-5.2 (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5.2 (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.2 (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $1.75 per million input tokens, $14.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.2 (Azure) through Everstack Call GPT-5.2 (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Luna (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5.6-luna Browser title: GPT-5.6 Luna (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5.6 Luna (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Luna (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $0.200 per million input tokens, $1.20 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-luna. Catalog status: beta. #### Routing GPT-5.6 Luna (Azure) through Everstack Call GPT-5.6 Luna (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Sol (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5.6-sol Browser title: GPT-5.6 Sol (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5.6 Sol (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Sol (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $5.00 per million input tokens, $30.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-sol. Catalog status: beta. #### Routing GPT-5.6 Sol (Azure) through Everstack Call GPT-5.6 Sol (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Terra (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5.6-terra Browser title: GPT-5.6 Terra (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5.6 Terra (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Terra (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-terra. Catalog status: beta. #### Routing GPT-5.6 Terra (Azure) through Everstack Call GPT-5.6 Terra (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/gpt-5 Browser title: GPT-5 (Azure) on Azure OpenAI | Everstack Page type: website Review GPT-5 (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 (Azure) through Everstack Call GPT-5 (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### o3-mini on Azure OpenAI Source: https://everstack.ai/models/azure-openai/o3-mini Browser title: o3-mini on Azure OpenAI | Everstack Page type: website Review o3-mini on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### o3-mini pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $1.10 per million input tokens, $4.40 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: o-series. Catalog status: deprecated. #### Routing o3-mini through Everstack Call o3-mini on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### o3 (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/o3 Browser title: o3 (Azure) on Azure OpenAI | Everstack Page type: website Review o3 (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### o3 (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $2.00 per million input tokens, $8.00 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing o3 (Azure) through Everstack Call o3 (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### o4-mini (Azure) on Azure OpenAI Source: https://everstack.ai/models/azure-openai/o4-mini Browser title: o4-mini (Azure) on Azure OpenAI | Everstack Page type: website Review o4-mini (Azure) on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### o4-mini (Azure) pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $1.10 per million input tokens, $4.40 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: o-series. Catalog status: deprecated. #### Routing o4-mini (Azure) through Everstack Call o4-mini (Azure) on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### text-embedding-3-large on Azure OpenAI Source: https://everstack.ai/models/azure-openai/text-embedding-3-large Browser title: text-embedding-3-large on Azure OpenAI | Everstack Page type: website Review text-embedding-3-large on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### text-embedding-3-large pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $0.130 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 3K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: embedding. Catalog status: stable. #### Routing text-embedding-3-large through Everstack Call text-embedding-3-large on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### text-embedding-3-small on Azure OpenAI Source: https://everstack.ai/models/azure-openai/text-embedding-3-small Browser title: text-embedding-3-small on Azure OpenAI | Everstack Page type: website Review text-embedding-3-small on Azure OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### text-embedding-3-small pricing and limits on Azure OpenAI Token pricing through Azure OpenAI: $0.020 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 2K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: embedding. Catalog status: stable. #### Routing text-embedding-3-small through Everstack Call text-embedding-3-small on Azure OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Cerebras AI models Source: https://everstack.ai/models/cerebras Browser title: Cerebras AI Models & Pricing | Everstack Page type: website Browse 9 Cerebras AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Cerebras models in one catalog Review 9 Cerebras models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### DeepSeek R1 Distill Llama 70B on Cerebras Source: https://everstack.ai/models/cerebras/deepseek-r1-distill-llama-70b Browser title: DeepSeek R1 Distill Llama 70B on Cerebras | Everstack Page type: website Review DeepSeek R1 Distill Llama 70B on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek R1 Distill Llama 70B pricing and limits on Cerebras Token pricing through Cerebras: $0.800 per million input tokens, $1.00 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: deepseek. Catalog status: deprecated. #### Routing DeepSeek R1 Distill Llama 70B through Everstack Call DeepSeek R1 Distill Llama 70B on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemma 4 31B IT on Cerebras Source: https://everstack.ai/models/cerebras/gemma-4-31b Browser title: Gemma 4 31B IT on Cerebras | Everstack Page type: website Review Gemma 4 31B IT on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemma 4 31B IT pricing and limits on Cerebras Token pricing through Cerebras: $0.990 per million input tokens, $1.49 per million output tokens. Limits: 131K token context window, 41K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gemma. Catalog status: beta. #### Routing Gemma 4 31B IT through Everstack Call Gemma 4 31B IT on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT OSS 120B Source: https://everstack.ai/models/cerebras/gpt-oss-120b Browser title: GPT OSS 120B: Pricing & Specs | Everstack Page type: website Review GPT OSS 120B on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT OSS 120B pricing and limits on Cerebras Token pricing through Cerebras: $0.350 per million input tokens, $0.750 per million output tokens. Limits: 131K token context window, 41K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: gpt-oss. Catalog status: stable. #### Routing GPT OSS 120B through Everstack Call GPT OSS 120B on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.3 70B Source: https://everstack.ai/models/cerebras/llama-3.3-70b Browser title: Llama 3.3 70B: Pricing & Specs | Everstack Page type: website Review Llama 3.3 70B on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.3 70B pricing and limits on Cerebras Token pricing through Cerebras: $0.600 per million input tokens, $0.800 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: deprecated. #### Routing Llama 3.3 70B through Everstack Call Llama 3.3 70B on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 4 Scout 17B 16E Instruct Source: https://everstack.ai/models/cerebras/llama-4-scout-17b-16e-instruct Browser title: Llama 4 Scout 17B 16E Instruct: Pricing & Specs | Everstack Page type: website Review Llama 4 Scout 17B 16E Instruct on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 4 Scout 17B 16E Instruct pricing and limits on Cerebras Token pricing through Cerebras: $0.800 per million input tokens, $1.20 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: deprecated. #### Routing Llama 4 Scout 17B 16E Instruct through Everstack Call Llama 4 Scout 17B 16E Instruct on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.1 8B Source: https://everstack.ai/models/cerebras/llama3.1-8b Browser title: Llama 3.1 8B: Pricing & Specs | Everstack Page type: website Review Llama 3.1 8B on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.1 8B pricing and limits on Cerebras Token pricing through Cerebras: $0.100 per million input tokens, $0.100 per million output tokens. Limits: 32K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.1 8B through Everstack Call Llama 3.1 8B on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen 3 235B Instruct Source: https://everstack.ai/models/cerebras/qwen-3-235b-a22b-instruct-2507 Browser title: Qwen 3 235B Instruct: Pricing & Specs | Everstack Page type: website Review Qwen 3 235B Instruct on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen 3 235B Instruct pricing and limits on Cerebras Token pricing through Cerebras: $0.600 per million input tokens, $1.20 per million output tokens. Limits: 131K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen 3 235B Instruct through Everstack Call Qwen 3 235B Instruct on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen 3 32B Source: https://everstack.ai/models/cerebras/qwen-3-32b Browser title: Qwen 3 32B: Pricing & Specs | Everstack Page type: website Review Qwen 3 32B on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen 3 32B pricing and limits on Cerebras Token pricing through Cerebras: $0.500 per million input tokens, $0.700 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: deprecated. #### Routing Qwen 3 32B through Everstack Call Qwen 3 32B on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Z.AI GLM-4.7 Source: https://everstack.ai/models/cerebras/zai-glm-4.7 Browser title: Z.AI GLM-4.7: Pricing & Specs | Everstack Page type: website Review Z.AI GLM-4.7 on Cerebras: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Z.AI GLM-4.7 pricing and limits on Cerebras Token pricing through Cerebras: $2.25 per million input tokens, $2.75 per million output tokens. Limits: 131K token context window, 40K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing Z.AI GLM-4.7 through Everstack Call Z.AI GLM-4.7 on Cerebras through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Cohere AI models Source: https://everstack.ai/models/cohere Browser title: Cohere AI Models & Pricing | Everstack Page type: website Browse 21 Cohere AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Cohere models in one catalog Review 21 Cohere models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Aya Expanse 32B Source: https://everstack.ai/models/cohere/c4ai-aya-expanse-32b Browser title: Aya Expanse 32B: Pricing & Specs | Everstack Page type: website Review Aya Expanse 32B on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Aya Expanse 32B pricing and limits on Cohere Token pricing through Cohere: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: c4ai-aya-expanse-32b. Catalog status: stable. #### Routing Aya Expanse 32B through Everstack Call Aya Expanse 32B on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Aya Expanse 8B Source: https://everstack.ai/models/cohere/c4ai-aya-expanse-8b Browser title: Aya Expanse 8B: Pricing & Specs | Everstack Page type: website Review Aya Expanse 8B on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Aya Expanse 8B pricing and limits on Cohere Token pricing through Cohere: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: c4ai-aya-expanse-8b. Catalog status: stable. #### Routing Aya Expanse 8B through Everstack Call Aya Expanse 8B on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Aya Vision 32B Source: https://everstack.ai/models/cohere/c4ai-aya-vision-32b Browser title: Aya Vision 32B: Pricing & Specs | Everstack Page type: website Review Aya Vision 32B on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Aya Vision 32B pricing and limits on Cohere Token pricing through Cohere: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 16K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text output. Model family: c4ai-aya-vision-32b. Catalog status: stable. #### Routing Aya Vision 32B through Everstack Call Aya Vision 32B on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Aya Vision 8B Source: https://everstack.ai/models/cohere/c4ai-aya-vision-8b Browser title: Aya Vision 8B: Pricing & Specs | Everstack Page type: website Review Aya Vision 8B on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Aya Vision 8B pricing and limits on Cohere Token pricing through Cohere: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 16K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text output. Model family: c4ai-aya-vision-8b. Catalog status: stable. #### Routing Aya Vision 8B through Everstack Call Aya Vision 8B on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command A Source: https://everstack.ai/models/cohere/command-a-03-2025 Browser title: Command A: Pricing & Specs | Everstack Page type: website Review Command A on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command A pricing and limits on Cohere Token pricing through Cohere: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 256K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: command-a. Catalog status: stable. #### Routing Command A through Everstack Call Command A on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command A Plus Source: https://everstack.ai/models/cohere/command-a-plus-05-2026 Browser title: Command A Plus: Pricing & Specs | Everstack Page type: website Review Command A Plus on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command A Plus pricing and limits on Cohere Token pricing through Cohere: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 128K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: command-a. Catalog status: stable. #### Routing Command A Plus through Everstack Call Command A Plus on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command A Reasoning Source: https://everstack.ai/models/cohere/command-a-reasoning-08-2025 Browser title: Command A Reasoning: Pricing & Specs | Everstack Page type: website Review Command A Reasoning on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command A Reasoning pricing and limits on Cohere Token pricing through Cohere: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 256K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: command-a. Catalog status: stable. #### Routing Command A Reasoning through Everstack Call Command A Reasoning on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command A Translate Source: https://everstack.ai/models/cohere/command-a-translate-08-2025 Browser title: Command A Translate: Pricing & Specs | Everstack Page type: website Review Command A Translate on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command A Translate pricing and limits on Cohere Token pricing through Cohere: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 8K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: command-a. Catalog status: stable. #### Routing Command A Translate through Everstack Call Command A Translate on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command A Vision Source: https://everstack.ai/models/cohere/command-a-vision-07-2025 Browser title: Command A Vision: Pricing & Specs | Everstack Page type: website Review Command A Vision on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command A Vision pricing and limits on Cohere Token pricing through Cohere: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 128K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text output. Model family: command-a. Catalog status: stable. #### Routing Command A Vision through Everstack Call Command A Vision on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command Light Source: https://everstack.ai/models/cohere/command-light Browser title: Command Light: Pricing & Specs | Everstack Page type: website Review Command Light on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command Light pricing and limits on Cohere Token pricing through Cohere: $0.300 per million input tokens, $0.600 per million output tokens. Limits: 4K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: command. Catalog status: deprecated. #### Routing Command Light through Everstack Call Command Light on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command R Source: https://everstack.ai/models/cohere/command-r-08-2024 Browser title: Command R: Pricing & Specs | Everstack Page type: website Review Command R on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command R pricing and limits on Cohere Token pricing through Cohere: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: command-r. Catalog status: stable. #### Routing Command R through Everstack Call Command R on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command R+ Source: https://everstack.ai/models/cohere/command-r-plus-08-2024 Browser title: Command R+: Pricing & Specs | Everstack Page type: website Review Command R+ on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command R+ pricing and limits on Cohere Token pricing through Cohere: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: command-r. Catalog status: stable. #### Routing Command R+ through Everstack Call Command R+ on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command R 7B Source: https://everstack.ai/models/cohere/command-r7b-12-2024 Browser title: Command R 7B: Pricing & Specs | Everstack Page type: website Review Command R 7B on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command R 7B pricing and limits on Cohere Token pricing through Cohere: $0.037 per million input tokens, $0.150 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: command-r. Catalog status: stable. #### Routing Command R 7B through Everstack Call Command R 7B on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Command R 7B Arabic Source: https://everstack.ai/models/cohere/command-r7b-arabic-02-2025 Browser title: Command R 7B Arabic: Pricing & Specs | Everstack Page type: website Review Command R 7B Arabic on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Command R 7B Arabic pricing and limits on Cohere Token pricing through Cohere: $0.037 per million input tokens, $0.150 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: command-r. Catalog status: stable. #### Routing Command R 7B Arabic through Everstack Call Command R 7B Arabic on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Embed English Light v3 Source: https://everstack.ai/models/cohere/embed-english-light-v3.0 Browser title: Embed English Light v3: Pricing & Specs | Everstack Page type: website Review Embed English Light v3 on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Embed English Light v3 pricing and limits on Cohere Token pricing through Cohere: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 512 token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embed. Catalog status: stable. #### Routing Embed English Light v3 through Everstack Call Embed English Light v3 on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Embed English v3.0 Source: https://everstack.ai/models/cohere/embed-english-v3.0 Browser title: Embed English v3.0: Pricing & Specs | Everstack Page type: website Review Embed English v3.0 on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Embed English v3.0 pricing and limits on Cohere Token pricing through Cohere: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 512 token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embed. Catalog status: stable. #### Routing Embed English v3.0 through Everstack Call Embed English v3.0 on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Embed Multilingual Light v3 Source: https://everstack.ai/models/cohere/embed-multilingual-light-v3.0 Browser title: Embed Multilingual Light v3: Pricing & Specs | Everstack Page type: website Review Embed Multilingual Light v3 on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Embed Multilingual Light v3 pricing and limits on Cohere Token pricing through Cohere: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 512 token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embed. Catalog status: stable. #### Routing Embed Multilingual Light v3 through Everstack Call Embed Multilingual Light v3 on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Embed Multilingual v3.0 Source: https://everstack.ai/models/cohere/embed-multilingual-v3.0 Browser title: Embed Multilingual v3.0: Pricing & Specs | Everstack Page type: website Review Embed Multilingual v3.0 on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Embed Multilingual v3.0 pricing and limits on Cohere Token pricing through Cohere: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 512 token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embed. Catalog status: stable. #### Routing Embed Multilingual v3.0 through Everstack Call Embed Multilingual v3.0 on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Embed v4 Source: https://everstack.ai/models/cohere/embed-v4.0 Browser title: Embed v4: Pricing & Specs | Everstack Page type: website Review Embed v4 on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Embed v4 pricing and limits on Cohere Token pricing through Cohere: $0.120 per million input tokens, $0.000 per million output tokens. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: embeddings, vision. Accepts text, image input. Returns embedding output. Model family: embed. Catalog status: stable. #### Routing Embed v4 through Everstack Call Embed v4 on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### North Mini Code Source: https://everstack.ai/models/cohere/north-mini-code-1-0 Browser title: North Mini Code: Pricing & Specs | Everstack Page type: website Review North Mini Code on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### North Mini Code pricing and limits on Cohere Token pricing through Cohere: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 256K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: north. Catalog status: stable. #### Routing North Mini Code through Everstack Call North Mini Code on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Rerank v3.5 Source: https://everstack.ai/models/cohere/rerank-v3.5 Browser title: Rerank v3.5: Pricing & Specs | Everstack Page type: website Review Rerank v3.5 on Cohere: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Rerank v3.5 pricing and limits on Cohere Token pricing through Cohere: $2.00 per million input tokens, $0.000 per million output tokens. Limits: 4K token context window. #### Capabilities and modalities Supported capabilities: rerank. Accepts text input. Returns text output. Model family: rerank. Catalog status: stable. #### Routing Rerank v3.5 through Everstack Call Rerank v3.5 on Cohere through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek AI models Source: https://everstack.ai/models/deepseek Browser title: DeepSeek AI Models & Pricing | Everstack Page type: website Browse 8 DeepSeek AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare DeepSeek models in one catalog Review 8 DeepSeek models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### DeepSeek Chat (V4) Source: https://everstack.ai/models/deepseek/deepseek-chat Browser title: DeepSeek Chat (V4): Pricing & Specs | Everstack Page type: website Review DeepSeek Chat (V4) on DeepSeek: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek Chat (V4) pricing and limits on DeepSeek Token pricing through DeepSeek: $0.140 per million input tokens, $0.280 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek Chat (V4) through Everstack Call DeepSeek Chat (V4) on DeepSeek through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek R1 on DeepSeek Source: https://everstack.ai/models/deepseek/deepseek-r1 Browser title: DeepSeek R1 on DeepSeek | Everstack Page type: website Review DeepSeek R1 on DeepSeek: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek R1 pricing and limits on DeepSeek Token pricing through DeepSeek: $2.00 per million input tokens, $8.00 per million output tokens. Limits: 64K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: deepseek-reasoning. Catalog status: deprecated. #### Routing DeepSeek R1 through Everstack Call DeepSeek R1 on DeepSeek through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek Reasoner (V4) Source: https://everstack.ai/models/deepseek/deepseek-reasoner Browser title: DeepSeek Reasoner (V4): Pricing & Specs | Everstack Page type: website Review DeepSeek Reasoner (V4) on DeepSeek: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek Reasoner (V4) pricing and limits on DeepSeek Token pricing through DeepSeek: $0.140 per million input tokens, $0.280 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek Reasoner (V4) through Everstack Call DeepSeek Reasoner (V4) on DeepSeek through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V3 0324 Source: https://everstack.ai/models/deepseek/deepseek-v3-0324 Browser title: DeepSeek V3 0324: Pricing & Specs | Everstack Page type: website Review DeepSeek V3 0324 on DeepSeek: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V3 0324 pricing and limits on DeepSeek Token pricing through DeepSeek: $1.40 per million input tokens, $2.80 per million output tokens. Limits: 64K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: deepseek. Catalog status: deprecated. #### Routing DeepSeek V3 0324 through Everstack Call DeepSeek V3 0324 on DeepSeek through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V3 on DeepSeek Source: https://everstack.ai/models/deepseek/deepseek-v3 Browser title: DeepSeek V3 on DeepSeek | Everstack Page type: website Review DeepSeek V3 on DeepSeek: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V3 pricing and limits on DeepSeek Token pricing through DeepSeek: $1.40 per million input tokens, $2.80 per million output tokens. Limits: 64K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: deepseek. Catalog status: deprecated. #### Routing DeepSeek V3 through Everstack Call DeepSeek V3 on DeepSeek through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Flash Vision Exp on DeepSeek Source: https://everstack.ai/models/deepseek/deepseek-v4-flash-vision-exp Browser title: DeepSeek V4 Flash Vision Exp on DeepSeek | Everstack Page type: website Review DeepSeek V4 Flash Vision Exp on DeepSeek: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Flash Vision Exp pricing and limits on DeepSeek Token pricing through DeepSeek: $0.140 per million input tokens, $0.280 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: deepseek-flash. Catalog status: beta. #### Routing DeepSeek V4 Flash Vision Exp through Everstack Call DeepSeek V4 Flash Vision Exp on DeepSeek through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Flash Source: https://everstack.ai/models/deepseek/deepseek-v4-flash Browser title: DeepSeek V4 Flash: Pricing & Specs | Everstack Page type: website Review DeepSeek V4 Flash on DeepSeek: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Flash pricing and limits on DeepSeek Token pricing through DeepSeek: $0.140 per million input tokens, $0.280 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek V4 Flash through Everstack Call DeepSeek V4 Flash on DeepSeek through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro on DeepSeek Source: https://everstack.ai/models/deepseek/deepseek-v4-pro Browser title: DeepSeek V4 Pro on DeepSeek | Everstack Page type: website Review DeepSeek V4 Pro on DeepSeek: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro pricing and limits on DeepSeek Token pricing through DeepSeek: $0.435 per million input tokens, $0.870 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek V4 Pro through Everstack Call DeepSeek V4 Pro on DeepSeek through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Fireworks AI AI models Source: https://everstack.ai/models/fireworks Browser title: Fireworks AI AI Models & Pricing | Everstack Page type: website Browse 38 Fireworks AI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Fireworks AI models in one catalog Review 38 Fireworks AI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### DeepSeek V3 on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__deepseek-v3 Browser title: DeepSeek V3 on Fireworks AI | Everstack Page type: website Review DeepSeek V3 on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V3 pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.20 per million input tokens, $1.20 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: deepseek. Catalog status: deprecated. #### Routing DeepSeek V3 through Everstack Call DeepSeek V3 on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V3.1 (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__deepseek-v3p1 Browser title: DeepSeek V3.1 (Fireworks): Pricing & Specs | Everstack Page type: website Review DeepSeek V3.1 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V3.1 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.560 per million input tokens, $1.68 per million output tokens. Limits: 164K token context window, 164K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek. Catalog status: stable. #### Routing DeepSeek V3.1 (Fireworks) through Everstack Call DeepSeek V3.1 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V3.2 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__deepseek-v3p2 Browser title: DeepSeek V3.2 (Fireworks) on Fireworks AI | Everstack Page type: website Review DeepSeek V3.2 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V3.2 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.560 per million input tokens, $1.68 per million output tokens. Limits: 160K token context window, 160K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek. Catalog status: stable. #### Routing DeepSeek V3.2 (Fireworks) through Everstack Call DeepSeek V3.2 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Flash 0731 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__deepseek-v4-flash-0731 Browser title: DeepSeek V4 Flash 0731 (Fireworks) on Fireworks AI | Everstack Page type: website Review DeepSeek V4 Flash 0731 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catal… #### DeepSeek V4 Flash 0731 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.140 per million input tokens, $0.280 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-flash. Catalog status: stable. #### Routing DeepSeek V4 Flash 0731 (Fireworks) through Everstack Call DeepSeek V4 Flash 0731 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro 0813 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__deepseek-v4-pro-0813 Browser title: DeepSeek V4 Pro 0813 (Fireworks) on Fireworks AI | Everstack Page type: website Review DeepSeek V4 Pro 0813 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro 0813 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.32 per million input tokens, $3.96 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-thinking. Catalog status: stable. #### Routing DeepSeek V4 Pro 0813 (Fireworks) through Everstack Call DeepSeek V4 Pro 0813 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__deepseek-v4-pro Browser title: DeepSeek V4 Pro (Fireworks) on Fireworks AI | Everstack Page type: website Review DeepSeek V4 Pro (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.74 per million input tokens, $3.48 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek V4 Pro (Fireworks) through Everstack Call DeepSeek V4 Pro (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.5 Air (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__glm-4p5-air Browser title: GLM-4.5 Air (Fireworks) on Fireworks AI | Everstack Page type: website Review GLM-4.5 Air (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.5 Air (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.220 per million input tokens, $0.880 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-4.5 Air (Fireworks) through Everstack Call GLM-4.5 Air (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.5 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__glm-4p5 Browser title: GLM-4.5 (Fireworks) on Fireworks AI | Everstack Page type: website Review GLM-4.5 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.5 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.550 per million input tokens, $2.19 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-4.5 (Fireworks) through Everstack Call GLM-4.5 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.7 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__glm-4p7 Browser title: GLM-4.7 (Fireworks) on Fireworks AI | Everstack Page type: website Review GLM-4.7 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.7 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.600 per million input tokens, $2.20 per million output tokens. Limits: 198K token context window, 198K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-4.7 (Fireworks) through Everstack Call GLM-4.7 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__glm-5 Browser title: GLM-5 (Fireworks) on Fireworks AI | Everstack Page type: website Review GLM-5 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.00 per million input tokens, $3.20 per million output tokens. Limits: 203K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5 (Fireworks) through Everstack Call GLM-5 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.1 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__glm-5p1 Browser title: GLM-5.1 (Fireworks) on Fireworks AI | Everstack Page type: website Review GLM-5.1 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.1 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 203K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.1 (Fireworks) through Everstack Call GLM-5.1 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM 5.2 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__glm-5p2 Browser title: GLM 5.2 (Fireworks) on Fireworks AI | Everstack Page type: website Review GLM 5.2 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM 5.2 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 1049K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM 5.2 (Fireworks) through Everstack Call GLM 5.2 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT OSS 120B (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__gpt-oss-120b Browser title: GPT OSS 120B (Fireworks) on Fireworks AI | Everstack Page type: website Review GPT OSS 120B (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT OSS 120B (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: gpt-oss. Catalog status: stable. #### Routing GPT OSS 120B (Fireworks) through Everstack Call GPT OSS 120B (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT OSS 20B (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__gpt-oss-20b Browser title: GPT OSS 20B (Fireworks): Pricing & Specs | Everstack Page type: website Review GPT OSS 20B (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT OSS 20B (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.070 per million input tokens, $0.300 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: gpt-oss. Catalog status: stable. #### Routing GPT OSS 20B (Fireworks) through Everstack Call GPT OSS 20B (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Inkling (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__inkling Browser title: Inkling (Fireworks): Pricing & Specs | Everstack Page type: website Review Inkling (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Inkling (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.00 per million input tokens, $4.05 per million output tokens. Limits: 1049K token context window, 1049K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio input. Returns text output. Model family: ling. Catalog status: stable. #### Routing Inkling (Fireworks) through Everstack Call Inkling (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2 Instruct (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__kimi-k2-instruct Browser title: Kimi K2 Instruct (Fireworks): Pricing & Specs | Everstack Page type: website Review Kimi K2 Instruct (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2 Instruct (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.00 per million input tokens, $3.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: kimi. Catalog status: stable. #### Routing Kimi K2 Instruct (Fireworks) through Everstack Call Kimi K2 Instruct (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2 Thinking (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__kimi-k2-thinking Browser title: Kimi K2 Thinking (Fireworks) on Fireworks AI | Everstack Page type: website Review Kimi K2 Thinking (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2 Thinking (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.600 per million input tokens, $2.50 per million output tokens. Limits: 256K token context window, 256K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: kimi. Catalog status: stable. #### Routing Kimi K2 Thinking (Fireworks) through Everstack Call Kimi K2 Thinking (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.5 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__kimi-k2p5 Browser title: Kimi K2.5 (Fireworks) on Fireworks AI | Everstack Page type: website Review Kimi K2.5 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.5 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.600 per million input tokens, $3.00 per million output tokens. Limits: 256K token context window, 256K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: kimi. Catalog status: stable. #### Routing Kimi K2.5 (Fireworks) through Everstack Call Kimi K2.5 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.6 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__kimi-k2p6 Browser title: Kimi K2.6 (Fireworks) on Fireworks AI | Everstack Page type: website Review Kimi K2.6 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.6 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi. Catalog status: stable. #### Routing Kimi K2.6 (Fireworks) through Everstack Call Kimi K2.6 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.7 Code (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__kimi-k2p7-code Browser title: Kimi K2.7 Code (Fireworks) on Fireworks AI | Everstack Page type: website Review Kimi K2.7 Code (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.7 Code (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2.7 Code (Fireworks) through Everstack Call Kimi K2.7 Code (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K3 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__kimi-k3 Browser title: Kimi K3 (Fireworks) on Fireworks AI | Everstack Page type: website Review Kimi K3 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K3 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1049K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi-k3. Catalog status: stable. #### Routing Kimi K3 (Fireworks) through Everstack Call Kimi K3 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama v3.1 8B Instruct Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__llama-v3p1-8b-instruct Browser title: Llama v3.1 8B Instruct: Pricing & Specs | Everstack Page type: website Review Llama v3.1 8B Instruct on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama v3.1 8B Instruct pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.200 per million input tokens, $0.200 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: deprecated. #### Routing Llama v3.1 8B Instruct through Everstack Call Llama v3.1 8B Instruct on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama v3.2 90B Vision Instruct Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__llama-v3p2-90b-vision-instruct Browser title: Llama v3.2 90B Vision Instruct: Pricing & Specs | Everstack Page type: website Review Llama v3.2 90B Vision Instruct on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama v3.2 90B Vision Instruct pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.950 per million input tokens, $0.950 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text output. Model family: llama. Catalog status: deprecated. #### Routing Llama v3.2 90B Vision Instruct through Everstack Call Llama v3.2 90B Vision Instruct on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama v3.3 70B Instruct on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__llama-v3p3-70b-instruct Browser title: Llama v3.3 70B Instruct on Fireworks AI | Everstack Page type: website Review Llama v3.3 70B Instruct on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama v3.3 70B Instruct pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.900 per million input tokens, $0.900 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: deprecated. #### Routing Llama v3.3 70B Instruct through Everstack Call Llama v3.3 70B Instruct on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.1 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__minimax-m2p1 Browser title: MiniMax M2.1 (Fireworks) on Fireworks AI | Everstack Page type: website Review MiniMax M2.1 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.1 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 200K token context window, 200K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax M2.1 (Fireworks) through Everstack Call MiniMax M2.1 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.5 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__minimax-m2p5 Browser title: MiniMax M2.5 (Fireworks) on Fireworks AI | Everstack Page type: website Review MiniMax M2.5 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.5 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 197K token context window, 197K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax M2.5 (Fireworks) through Everstack Call MiniMax M2.5 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.7 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__minimax-m2p7 Browser title: MiniMax M2.7 (Fireworks) on Fireworks AI | Everstack Page type: website Review MiniMax M2.7 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.7 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 197K token context window, 197K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax M2.7 (Fireworks) through Everstack Call MiniMax M2.7 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax-M3 (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__minimax-m3 Browser title: MiniMax-M3 (Fireworks) on Fireworks AI | Everstack Page type: website Review MiniMax-M3 (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax-M3 (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 512K token context window, 512K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax-M3 (Fireworks) through Everstack Call MiniMax-M3 (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Muse Glimmer 30B (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__muse-glimmer-30b Browser title: Muse Glimmer 30B (Fireworks): Pricing & Specs | Everstack Page type: website Review Muse Glimmer 30B (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Muse Glimmer 30B (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.350 per million input tokens, $1.50 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: muse. Catalog status: stable. #### Routing Muse Glimmer 30B (Fireworks) through Everstack Call Muse Glimmer 30B (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Nemotron 3.5 Lightning 30B A3B (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__nemotron-lightning-3p5-30b-a3b Browser title: Nemotron 3.5 Lightning 30B A3B (Fireworks): Pricing & Specs | Everstack Page type: website Review Nemotron 3.5 Lightning 30B A3B (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack mod… #### Nemotron 3.5 Lightning 30B A3B (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.050 per million input tokens, $0.200 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: nemotron. Catalog status: stable. #### Routing Nemotron 3.5 Lightning 30B A3B (Fireworks) through Everstack Call Nemotron 3.5 Lightning 30B A3B (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Nomic Embed Text v1.5 Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__nomic-embed-text-v1.5 Browser title: Nomic Embed Text v1.5: Pricing & Specs | Everstack Page type: website Review Nomic Embed Text v1.5 on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Nomic Embed Text v1.5 pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.080 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embedding. Catalog status: stable. #### Routing Nomic Embed Text v1.5 through Everstack Call Nomic Embed Text v1.5 on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen 2.5 72B Instruct on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__qwen2p5-72b-instruct Browser title: Qwen 2.5 72B Instruct on Fireworks AI | Everstack Page type: website Review Qwen 2.5 72B Instruct on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen 2.5 72B Instruct pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.20 per million input tokens, $1.20 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: deprecated. #### Routing Qwen 2.5 72B Instruct through Everstack Call Qwen 2.5 72B Instruct on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen 3.6 Plus (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__qwen3p6-plus Browser title: Qwen 3.6 Plus (Fireworks) on Fireworks AI | Everstack Page type: website Review Qwen 3.6 Plus (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen 3.6 Plus (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.500 per million input tokens, $3.00 per million output tokens. Limits: 128K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen 3.6 Plus (Fireworks) through Everstack Call Qwen 3.6 Plus (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen 3.7 Plus (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__qwen3p7-plus Browser title: Qwen 3.7 Plus (Fireworks) on Fireworks AI | Everstack Page type: website Review Qwen 3.7 Plus (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen 3.7 Plus (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $0.400 per million input tokens, $1.60 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen 3.7 Plus (Fireworks) through Everstack Call Qwen 3.7 Plus (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.8 Max (Fireworks) on Fireworks AI Source: https://everstack.ai/models/fireworks/accounts__fireworks__models__qwen3p8-max Browser title: Qwen3.8 Max (Fireworks) on Fireworks AI | Everstack Page type: website Review Qwen3.8 Max (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.8 Max (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 262K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.8 Max (Fireworks) through Everstack Call Qwen3.8 Max (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM 5.2 Fast (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__routers__glm-5p2-fast Browser title: GLM 5.2 Fast (Fireworks): Pricing & Specs | Everstack Page type: website Review GLM 5.2 Fast (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM 5.2 Fast (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $2.10 per million input tokens, $6.60 per million output tokens. Limits: 1049K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM 5.2 Fast (Fireworks) through Everstack Call GLM 5.2 Fast (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.7 Code Fast (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__routers__kimi-k2p7-code-fast Browser title: Kimi K2.7 Code Fast (Fireworks): Pricing & Specs | Everstack Page type: website Review Kimi K2.7 Code Fast (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.7 Code Fast (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $1.90 per million input tokens, $8.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2.7 Code Fast (Fireworks) through Everstack Call Kimi K2.7 Code Fast (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K3 Fast (Fireworks) Source: https://everstack.ai/models/fireworks/accounts__fireworks__routers__kimi-k3-fast Browser title: Kimi K3 Fast (Fireworks): Pricing & Specs | Everstack Page type: website Review Kimi K3 Fast (Fireworks) on Fireworks AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K3 Fast (Fireworks) pricing and limits on Fireworks AI Token pricing through Fireworks AI: $4.50 per million input tokens, $22.50 per million output tokens. Limits: 1049K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi-k3. Catalog status: stable. #### Routing Kimi K3 Fast (Fireworks) through Everstack Call Kimi K3 Fast (Fireworks) on Fireworks AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Google AI models Source: https://everstack.ai/models/google Browser title: Google AI Models & Pricing | Everstack Page type: website Browse 23 Google AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Google models in one catalog Review 23 Google models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Gemini 1.5 Flash 8B Source: https://everstack.ai/models/google/gemini-1.5-flash-8b Browser title: Gemini 1.5 Flash 8B: Pricing & Specs | Everstack Page type: website Review Gemini 1.5 Flash 8B on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 1.5 Flash 8B pricing and limits on Google Token pricing through Google: $0.037 per million input tokens, $0.150 per million output tokens. Limits: 1000K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision, function_calling. Accepts text, image, video, audio input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 1.5 Flash 8B through Everstack Call Gemini 1.5 Flash 8B on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 1.5 Flash on Google Source: https://everstack.ai/models/google/gemini-1.5-flash Browser title: Gemini 1.5 Flash on Google | Everstack Page type: website Review Gemini 1.5 Flash on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 1.5 Flash pricing and limits on Google Token pricing through Google: $0.075 per million input tokens, $0.300 per million output tokens. Limits: 1049K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, video, audio input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 1.5 Flash through Everstack Call Gemini 1.5 Flash on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 1.5 Pro on Google Source: https://everstack.ai/models/google/gemini-1.5-pro Browser title: Gemini 1.5 Pro on Google | Everstack Page type: website Review Gemini 1.5 Pro on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 1.5 Pro pricing and limits on Google Token pricing through Google: $1.25 per million input tokens, $5.00 per million output tokens. Limits: 1000K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, video, audio input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 1.5 Pro through Everstack Call Gemini 1.5 Pro on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 2.0 Flash Lite Source: https://everstack.ai/models/google/gemini-2.0-flash-lite Browser title: Gemini 2.0 Flash Lite: Pricing & Specs | Everstack Page type: website Review Gemini 2.0 Flash Lite on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 2.0 Flash Lite pricing and limits on Google Token pricing through Google: $0.075 per million input tokens, $0.300 per million output tokens. Limits: 1049K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 2.0 Flash Lite through Everstack Call Gemini 2.0 Flash Lite on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 2.0 Flash Source: https://everstack.ai/models/google/gemini-2.0-flash Browser title: Gemini 2.0 Flash: Pricing & Specs | Everstack Page type: website Review Gemini 2.0 Flash on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 2.0 Flash pricing and limits on Google Token pricing through Google: $0.100 per million input tokens, $0.400 per million output tokens. Limits: 1049K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision, function_calling. Accepts text, image, audio, video input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 2.0 Flash through Everstack Call Gemini 2.0 Flash on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 2.5 Flash Lite Source: https://everstack.ai/models/google/gemini-2.5-flash-lite Browser title: Gemini 2.5 Flash Lite: Pricing & Specs | Everstack Page type: website Review Gemini 2.5 Flash Lite on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 2.5 Flash Lite pricing and limits on Google Token pricing through Google: $0.100 per million input tokens, $0.400 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio, video, pdf input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 2.5 Flash Lite through Everstack Call Gemini 2.5 Flash Lite on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 2.5 Flash on Google Source: https://everstack.ai/models/google/gemini-2.5-flash Browser title: Gemini 2.5 Flash on Google | Everstack Page type: website Review Gemini 2.5 Flash on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 2.5 Flash pricing and limits on Google Token pricing through Google: $0.300 per million input tokens, $2.50 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio, video, pdf input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 2.5 Flash through Everstack Call Gemini 2.5 Flash on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 2.5 Pro on Google Source: https://everstack.ai/models/google/gemini-2.5-pro Browser title: Gemini 2.5 Pro on Google | Everstack Page type: website Review Gemini 2.5 Pro on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 2.5 Pro pricing and limits on Google Token pricing through Google: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio, video, pdf input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 2.5 Pro through Everstack Call Gemini 2.5 Pro on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3 Flash (Preview) on Google Source: https://everstack.ai/models/google/gemini-3-flash-preview Browser title: Gemini 3 Flash (Preview) on Google | Everstack Page type: website Review Gemini 3 Flash (Preview) on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3 Flash (Preview) pricing and limits on Google Token pricing through Google: $0.500 per million input tokens, $3.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-3. Catalog status: preview. #### Routing Gemini 3 Flash (Preview) through Everstack Call Gemini 3 Flash (Preview) on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3 Pro (Preview) on Google Source: https://everstack.ai/models/google/gemini-3-pro-preview Browser title: Gemini 3 Pro (Preview) on Google | Everstack Page type: website Review Gemini 3 Pro (Preview) on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3 Pro (Preview) pricing and limits on Google Token pricing through Google: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1000K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision, function_calling, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-3. Catalog status: preview. #### Routing Gemini 3 Pro (Preview) through Everstack Call Gemini 3 Pro (Preview) on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.1 Flash Lite Preview Source: https://everstack.ai/models/google/gemini-3.1-flash-lite-preview Browser title: Gemini 3.1 Flash Lite Preview: Pricing & Specs | Everstack Page type: website Review Gemini 3.1 Flash Lite Preview on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.1 Flash Lite Preview pricing and limits on Google Token pricing through Google: $0.250 per million input tokens, $1.50 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash-lite. Catalog status: deprecated. #### Routing Gemini 3.1 Flash Lite Preview through Everstack Call Gemini 3.1 Flash Lite Preview on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.1 Flash Lite Source: https://everstack.ai/models/google/gemini-3.1-flash-lite Browser title: Gemini 3.1 Flash Lite: Pricing & Specs | Everstack Page type: website Review Gemini 3.1 Flash Lite on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.1 Flash Lite pricing and limits on Google Token pricing through Google: $0.250 per million input tokens, $1.50 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-3. Catalog status: stable. #### Routing Gemini 3.1 Flash Lite through Everstack Call Gemini 3.1 Flash Lite on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.1 Pro Preview Custom Tools Source: https://everstack.ai/models/google/gemini-3.1-pro-preview-customtools Browser title: Gemini 3.1 Pro Preview Custom Tools: Pricing & Specs | Everstack Page type: website Review Gemini 3.1 Pro Preview Custom Tools on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.1 Pro Preview Custom Tools pricing and limits on Google Token pricing through Google: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-pro. Catalog status: preview. #### Routing Gemini 3.1 Pro Preview Custom Tools through Everstack Call Gemini 3.1 Pro Preview Custom Tools on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.1 Pro (Preview) Source: https://everstack.ai/models/google/gemini-3.1-pro-preview Browser title: Gemini 3.1 Pro (Preview): Pricing & Specs | Everstack Page type: website Review Gemini 3.1 Pro (Preview) on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.1 Pro (Preview) pricing and limits on Google Token pricing through Google: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-3. Catalog status: preview. #### Routing Gemini 3.1 Pro (Preview) through Everstack Call Gemini 3.1 Pro (Preview) on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.5 Flash Lite on Google Source: https://everstack.ai/models/google/gemini-3.5-flash-lite Browser title: Gemini 3.5 Flash Lite on Google | Everstack Page type: website Review Gemini 3.5 Flash Lite on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.5 Flash Lite pricing and limits on Google Token pricing through Google: $0.300 per million input tokens, $2.50 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash-lite. Catalog status: stable. #### Routing Gemini 3.5 Flash Lite through Everstack Call Gemini 3.5 Flash Lite on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.5 Flash on Google Source: https://everstack.ai/models/google/gemini-3.5-flash Browser title: Gemini 3.5 Flash on Google | Everstack Page type: website Review Gemini 3.5 Flash on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.5 Flash pricing and limits on Google Token pricing through Google: $1.50 per million input tokens, $9.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.5 Flash through Everstack Call Gemini 3.5 Flash on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.6 Flash on Google Source: https://everstack.ai/models/google/gemini-3.6-flash Browser title: Gemini 3.6 Flash on Google | Everstack Page type: website Review Gemini 3.6 Flash on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.6 Flash pricing and limits on Google Token pricing through Google: $0.750 per million input tokens, $3.75 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.6 Flash through Everstack Call Gemini 3.6 Flash on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.7 Flash on Google Source: https://everstack.ai/models/google/gemini-3.7-flash Browser title: Gemini 3.7 Flash on Google | Everstack Page type: website Review Gemini 3.7 Flash on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.7 Flash pricing and limits on Google Token pricing through Google: $0.750 per million input tokens, $3.75 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.7 Flash through Everstack Call Gemini 3.7 Flash on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini Flash Latest on Google Source: https://everstack.ai/models/google/gemini-flash-latest Browser title: Gemini Flash Latest on Google | Everstack Page type: website Review Gemini Flash Latest on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini Flash Latest pricing and limits on Google Token pricing through Google: $0.750 per million input tokens, $3.75 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini Flash Latest through Everstack Call Gemini Flash Latest on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini Flash-Lite Latest Source: https://everstack.ai/models/google/gemini-flash-lite-latest Browser title: Gemini Flash-Lite Latest: Pricing & Specs | Everstack Page type: website Review Gemini Flash-Lite Latest on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini Flash-Lite Latest pricing and limits on Google Token pricing through Google: $0.300 per million input tokens, $2.50 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash-lite. Catalog status: stable. #### Routing Gemini Flash-Lite Latest through Everstack Call Gemini Flash-Lite Latest on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini Pro Source: https://everstack.ai/models/google/gemini-pro Browser title: Gemini Pro: Pricing & Specs | Everstack Page type: website Review Gemini Pro on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini Pro pricing and limits on Google Token pricing through Google: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 33K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: gemini. Catalog status: deprecated. #### Routing Gemini Pro through Everstack Call Gemini Pro on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemma 4 26B A4B IT Source: https://everstack.ai/models/google/gemma-4-26b-a4b-it Browser title: Gemma 4 26B A4B IT: Pricing & Specs | Everstack Page type: website Review Gemma 4 26B A4B IT on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemma 4 26B A4B IT pricing and limits on Google Token pricing through Google: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 262K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gemma. Catalog status: stable. #### Routing Gemma 4 26B A4B IT through Everstack Call Gemma 4 26B A4B IT on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemma 4 31B IT on Google Source: https://everstack.ai/models/google/gemma-4-31b-it Browser title: Gemma 4 31B IT on Google | Everstack Page type: website Review Gemma 4 31B IT on Google: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemma 4 31B IT pricing and limits on Google Token pricing through Google: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 262K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gemma. Catalog status: stable. #### Routing Gemma 4 31B IT through Everstack Call Gemma 4 31B IT on Google through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Groq AI models Source: https://everstack.ai/models/groq Browser title: Groq AI Models & Pricing | Everstack Page type: website Browse 15 Groq AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Groq models in one catalog Review 15 Groq models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### ALLaM-2-7b Source: https://everstack.ai/models/groq/allam-2-7b Browser title: ALLaM-2-7b: Pricing & Specs | Everstack Page type: website Review ALLaM-2-7b on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### ALLaM-2-7b pricing and limits on Groq Token pricing through Groq: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 4K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: allam-2-7b. Catalog status: stable. #### Routing ALLaM-2-7b through Everstack Call ALLaM-2-7b on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek R1 Distill Llama 70B on Groq Source: https://everstack.ai/models/groq/deepseek-r1-distill-llama-70b Browser title: DeepSeek R1 Distill Llama 70B on Groq | Everstack Page type: website Review DeepSeek R1 Distill Llama 70B on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek R1 Distill Llama 70B pricing and limits on Groq Token pricing through Groq: $0.750 per million input tokens, $0.990 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek. Catalog status: stable. #### Routing DeepSeek R1 Distill Llama 70B through Everstack Call DeepSeek R1 Distill Llama 70B on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Compound Mini Source: https://everstack.ai/models/groq/groq__compound-mini Browser title: Compound Mini: Pricing & Specs | Everstack Page type: website Review Compound Mini on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Compound Mini pricing and limits on Groq Token pricing through Groq: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: groq. Catalog status: stable. #### Routing Compound Mini through Everstack Call Compound Mini on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Compound Source: https://everstack.ai/models/groq/groq__compound Browser title: Compound: Pricing & Specs | Everstack Page type: website Review Compound on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Compound pricing and limits on Groq Token pricing through Groq: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: groq. Catalog status: stable. #### Routing Compound through Everstack Call Compound on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.1 8B Instant Source: https://everstack.ai/models/groq/llama-3.1-8b-instant Browser title: Llama 3.1 8B Instant: Pricing & Specs | Everstack Page type: website Review Llama 3.1 8B Instant on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.1 8B Instant pricing and limits on Groq Token pricing through Groq: $0.050 per million input tokens, $0.080 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.1 8B Instant through Everstack Call Llama 3.1 8B Instant on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.2 90B Vision Preview Source: https://everstack.ai/models/groq/llama-3.2-90b-vision-preview Browser title: Llama 3.2 90B Vision Preview: Pricing & Specs | Everstack Page type: website Review Llama 3.2 90B Vision Preview on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.2 90B Vision Preview pricing and limits on Groq Token pricing through Groq: $0.900 per million input tokens, $1.20 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text output. Model family: llama. Catalog status: deprecated. #### Routing Llama 3.2 90B Vision Preview through Everstack Call Llama 3.2 90B Vision Preview on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.3 70B Versatile Source: https://everstack.ai/models/groq/llama-3.3-70b-versatile Browser title: Llama 3.3 70B Versatile: Pricing & Specs | Everstack Page type: website Review Llama 3.3 70B Versatile on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.3 70B Versatile pricing and limits on Groq Token pricing through Groq: $0.590 per million input tokens, $0.790 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.3 70B Versatile through Everstack Call Llama 3.3 70B Versatile on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 4 Maverick 17B 128E (Groq) Source: https://everstack.ai/models/groq/meta-llama__llama-4-maverick-17b-128e-instruct Browser title: Llama 4 Maverick 17B 128E (Groq): Pricing & Specs | Everstack Page type: website Review Llama 4 Maverick 17B 128E (Groq) on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 4 Maverick 17B 128E (Groq) pricing and limits on Groq Token pricing through Groq: $0.200 per million input tokens, $0.600 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 4 Maverick 17B 128E (Groq) through Everstack Call Llama 4 Maverick 17B 128E (Groq) on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 4 Scout 17B 16E (Groq) Source: https://everstack.ai/models/groq/meta-llama__llama-4-scout-17b-16e-instruct Browser title: Llama 4 Scout 17B 16E (Groq): Pricing & Specs | Everstack Page type: website Review Llama 4 Scout 17B 16E (Groq) on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 4 Scout 17B 16E (Groq) pricing and limits on Groq Token pricing through Groq: $0.110 per million input tokens, $0.340 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 4 Scout 17B 16E (Groq) through Everstack Call Llama 4 Scout 17B 16E (Groq) on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2 Instruct 0905 (Groq) Source: https://everstack.ai/models/groq/moonshotai__kimi-k2-instruct-0905 Browser title: Kimi K2 Instruct 0905 (Groq): Pricing & Specs | Everstack Page type: website Review Kimi K2 Instruct 0905 (Groq) on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2 Instruct 0905 (Groq) pricing and limits on Groq Token pricing through Groq: $1.00 per million input tokens, $3.00 per million output tokens. Limits: 262K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: kimi. Catalog status: stable. #### Routing Kimi K2 Instruct 0905 (Groq) through Everstack Call Kimi K2 Instruct 0905 (Groq) on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT OSS 120B (Groq) Source: https://everstack.ai/models/groq/openai__gpt-oss-120b Browser title: GPT OSS 120B (Groq): Pricing & Specs | Everstack Page type: website Review GPT OSS 120B (Groq) on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT OSS 120B (Groq) pricing and limits on Groq Token pricing through Groq: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 131K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: gpt-oss. Catalog status: stable. #### Routing GPT OSS 120B (Groq) through Everstack Call GPT OSS 120B (Groq) on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT OSS 20B (Groq) Source: https://everstack.ai/models/groq/openai__gpt-oss-20b Browser title: GPT OSS 20B (Groq): Pricing & Specs | Everstack Page type: website Review GPT OSS 20B (Groq) on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT OSS 20B (Groq) pricing and limits on Groq Token pricing through Groq: $0.075 per million input tokens, $0.300 per million output tokens. Limits: 131K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: gpt-oss. Catalog status: stable. #### Routing GPT OSS 20B (Groq) through Everstack Call GPT OSS 20B (Groq) on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen QwQ 32B Source: https://everstack.ai/models/groq/qwen-qwq-32b Browser title: Qwen QwQ 32B: Pricing & Specs | Everstack Page type: website Review Qwen QwQ 32B on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen QwQ 32B pricing and limits on Groq Token pricing through Groq: $0.290 per million input tokens, $0.390 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen QwQ 32B through Everstack Call Qwen QwQ 32B on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen 3 32B (Groq) Source: https://everstack.ai/models/groq/qwen__qwen3-32b Browser title: Qwen 3 32B (Groq): Pricing & Specs | Everstack Page type: website Review Qwen 3 32B (Groq) on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen 3 32B (Groq) pricing and limits on Groq Token pricing through Groq: $0.290 per million input tokens, $0.590 per million output tokens. Limits: 131K token context window, 41K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen 3 32B (Groq) through Everstack Call Qwen 3 32B (Groq) on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.6 27B on Groq Source: https://everstack.ai/models/groq/qwen__qwen3.6-27b Browser title: Qwen3.6 27B on Groq | Everstack Page type: website Review Qwen3.6 27B on Groq: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.6 27B pricing and limits on Groq Token pricing through Groq: $0.600 per million input tokens, $3.00 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.6 27B through Everstack Call Qwen3.6 27B on Groq through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Hugging Face AI models Source: https://everstack.ai/models/huggingface Browser title: Hugging Face AI Models & Pricing | Everstack Page type: website Browse 21 Hugging Face AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Hugging Face models in one catalog Review 21 Hugging Face models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### MiniMax-M3 on Hugging Face Source: https://everstack.ai/models/huggingface/MiniMaxAI__MiniMax-M3 Browser title: MiniMax-M3 on Hugging Face | Everstack Page type: website Review MiniMax-M3 (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax-M3 (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 524K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax-M3 (Hugging Face) through Everstack Call MiniMax-M3 (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 Coder 480B (HF) on Hugging Face Source: https://everstack.ai/models/huggingface/Qwen__Qwen3-Coder-480B-A35B-Instruct Browser title: Qwen3 Coder 480B (HF) on Hugging Face | Everstack Page type: website Review Qwen3 Coder 480B (HF) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 Coder 480B (HF) pricing and limits on Hugging Face Token pricing through Hugging Face: $2.00 per million input tokens, $2.00 per million output tokens. Limits: 262K token context window, 67K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3 Coder 480B (HF) through Everstack Call Qwen3 Coder 480B (HF) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 Next 80B Instruct (HF) on Hugging Face Source: https://everstack.ai/models/huggingface/Qwen__Qwen3-Next-80B-A3B-Instruct Browser title: Qwen3 Next 80B Instruct (HF) on Hugging Face | Everstack Page type: website Review Qwen3 Next 80B Instruct (HF) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 Next 80B Instruct (HF) pricing and limits on Hugging Face Token pricing through Hugging Face: $0.250 per million input tokens, $1.00 per million output tokens. Limits: 262K token context window, 67K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3 Next 80B Instruct (HF) through Everstack Call Qwen3 Next 80B Instruct (HF) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.8 2.4T A95B on Hugging Face Source: https://everstack.ai/models/huggingface/Qwen__Qwen3.8-2.4T-A95B Browser title: Qwen3.8 2.4T A95B on Hugging Face | Everstack Page type: website Review Qwen3.8 2.4T A95B (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.8 2.4T A95B (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $2.50 per million input tokens, $6.25 per million output tokens. Limits: 262K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.8 2.4T A95B (Hugging Face) through Everstack Call Qwen3.8 2.4T A95B (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Flash 0731 on Hugging Face Source: https://everstack.ai/models/huggingface/deepseek-ai__DeepSeek-V4-Flash-0731 Browser title: DeepSeek V4 Flash 0731 on Hugging Face | Everstack Page type: website Review DeepSeek V4 Flash 0731 (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model ca… #### DeepSeek V4 Flash 0731 (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $0.140 per million input tokens, $0.280 per million output tokens. Limits: 1049K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-flash. Catalog status: stable. #### Routing DeepSeek V4 Flash 0731 (Hugging Face) through Everstack Call DeepSeek V4 Flash 0731 (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro 0813 on Hugging Face Source: https://everstack.ai/models/huggingface/deepseek-ai__DeepSeek-V4-Pro-0813 Browser title: DeepSeek V4 Pro 0813 on Hugging Face | Everstack Page type: website Review DeepSeek V4 Pro 0813 (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model cata… #### DeepSeek V4 Pro 0813 (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $1.32 per million input tokens, $3.96 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-thinking. Catalog status: stable. #### Routing DeepSeek V4 Pro 0813 (Hugging Face) through Everstack Call DeepSeek V4 Pro 0813 (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro (HF) on Hugging Face Source: https://everstack.ai/models/huggingface/deepseek-ai__DeepSeek-V4-Pro Browser title: DeepSeek V4 Pro (HF) on Hugging Face | Everstack Page type: website Review DeepSeek V4 Pro (HF) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro (HF) pricing and limits on Hugging Face Token pricing through Hugging Face: $0.435 per million input tokens, $0.870 per million output tokens. Limits: 1049K token context window, 393K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek V4 Pro (HF) through Everstack Call DeepSeek V4 Pro (HF) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-3.5 Turbo on Hugging Face Source: https://everstack.ai/models/huggingface/huggingface-gpt-3.5-turbo Browser title: GPT-3.5 Turbo on Hugging Face | Everstack Page type: website Review GPT-3.5 Turbo on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-3.5 Turbo pricing and limits on Hugging Face Token pricing through Hugging Face: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 16K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: gpt-3.5. Catalog status: deprecated. #### Routing GPT-3.5 Turbo through Everstack Call GPT-3.5 Turbo on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4 Turbo on Hugging Face Source: https://everstack.ai/models/huggingface/huggingface-gpt-4-turbo Browser title: GPT-4 Turbo on Hugging Face | Everstack Page type: website Review GPT-4 Turbo on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4 Turbo pricing and limits on Hugging Face Token pricing through Hugging Face: $10.00 per million input tokens, $30.00 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: deprecated. #### Routing GPT-4 Turbo through Everstack Call GPT-4 Turbo on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4 on Hugging Face Source: https://everstack.ai/models/huggingface/huggingface-gpt-4 Browser title: GPT-4 on Hugging Face | Everstack Page type: website Review GPT-4 on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4 pricing and limits on Hugging Face Token pricing through Hugging Face: $30.00 per million input tokens, $60.00 per million output tokens. Limits: 8K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: gpt-4. Catalog status: deprecated. #### Routing GPT-4 through Everstack Call GPT-4 on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4o Mini on Hugging Face Source: https://everstack.ai/models/huggingface/huggingface-gpt-4o-mini Browser title: GPT-4o Mini on Hugging Face | Everstack Page type: website Review GPT-4o Mini on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4o Mini pricing and limits on Hugging Face Token pricing through Hugging Face: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: deprecated. #### Routing GPT-4o Mini through Everstack Call GPT-4o Mini on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4o on Hugging Face Source: https://everstack.ai/models/huggingface/huggingface-gpt-4o Browser title: GPT-4o on Hugging Face | Everstack Page type: website Review GPT-4o on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4o pricing and limits on Hugging Face Token pricing through Hugging Face: $5.00 per million input tokens, $15.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: deprecated. #### Routing GPT-4o through Everstack Call GPT-4o on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Text Embedding Ada 002 on Hugging Face Source: https://everstack.ai/models/huggingface/huggingface-text-embedding-ada-002 Browser title: Text Embedding Ada 002 on Hugging Face | Everstack Page type: website Review Text Embedding Ada 002 on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Text Embedding Ada 002 pricing and limits on Hugging Face Token pricing through Hugging Face: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embedding. Catalog status: deprecated. #### Routing Text Embedding Ada 002 through Everstack Call Text Embedding Ada 002 on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.6 (HF) on Hugging Face Source: https://everstack.ai/models/huggingface/moonshotai__Kimi-K2.6 Browser title: Kimi K2.6 (HF) on Hugging Face | Everstack Page type: website Review Kimi K2.6 (HF) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.6 (HF) pricing and limits on Hugging Face Token pricing through Hugging Face: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi. Catalog status: stable. #### Routing Kimi K2.6 (HF) through Everstack Call Kimi K2.6 (HF) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.7 Code on Hugging Face Source: https://everstack.ai/models/huggingface/moonshotai__Kimi-K2.7-Code Browser title: Kimi K2.7 Code on Hugging Face | Everstack Page type: website Review Kimi K2.7 Code (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.7 Code (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2.7 Code (Hugging Face) through Everstack Call Kimi K2.7 Code (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K3 on Hugging Face Source: https://everstack.ai/models/huggingface/moonshotai__Kimi-K3 Browser title: Kimi K3 on Hugging Face | Everstack Page type: website Review Kimi K3 (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K3 (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi-k3. Catalog status: stable. #### Routing Kimi K3 (Hugging Face) through Everstack Call Kimi K3 (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Step 3.7 Flash on Hugging Face Source: https://everstack.ai/models/huggingface/stepfun-ai__Step-3.7-Flash Browser title: Step 3.7 Flash on Hugging Face | Everstack Page type: website Review Step 3.7 Flash (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Step 3.7 Flash (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $0.200 per million input tokens, $1.15 per million output tokens. Limits: 262K token context window, 256K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: stepfun-ai/Step-3.7-Flash. Catalog status: stable. #### Routing Step 3.7 Flash (Hugging Face) through Everstack Call Step 3.7 Flash (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Inkling Small on Hugging Face Source: https://everstack.ai/models/huggingface/thinkingmachines__Inkling-Small Browser title: Inkling Small on Hugging Face | Everstack Page type: website Review Inkling Small (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Inkling Small (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $0.500 per million input tokens, $1.20 per million output tokens. Limits: 524K token context window, 1049K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: ling. Catalog status: stable. #### Routing Inkling Small (Hugging Face) through Everstack Call Inkling Small (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Inkling on Hugging Face Source: https://everstack.ai/models/huggingface/thinkingmachines__Inkling Browser title: Inkling on Hugging Face | Everstack Page type: website Review Inkling (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Inkling (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $1.00 per million input tokens, $4.05 per million output tokens. Limits: 1049K token context window, 1049K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: ling. Catalog status: stable. #### Routing Inkling (Hugging Face) through Everstack Call Inkling (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.1 (HF) on Hugging Face Source: https://everstack.ai/models/huggingface/zai-org__GLM-5.1 Browser title: GLM-5.1 (HF) on Hugging Face | Everstack Page type: website Review GLM-5.1 (HF) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.1 (HF) pricing and limits on Hugging Face Token pricing through Hugging Face: $1.00 per million input tokens, $3.20 per million output tokens. Limits: 203K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.1 (HF) through Everstack Call GLM-5.1 (HF) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.2 on Hugging Face Source: https://everstack.ai/models/huggingface/zai-org__GLM-5.2 Browser title: GLM-5.2 on Hugging Face | Everstack Page type: website Review GLM-5.2 (Hugging Face) on Hugging Face: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.2 (Hugging Face) pricing and limits on Hugging Face Token pricing through Hugging Face: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 262K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.2 (Hugging Face) through Everstack Call GLM-5.2 (Hugging Face) on Hugging Face through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax AI models Source: https://everstack.ai/models/minimax Browser title: MiniMax AI Models & Pricing | Everstack Page type: website Browse 9 MiniMax AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare MiniMax models in one catalog Review 9 MiniMax models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### MiniMax M1 Source: https://everstack.ai/models/minimax/MiniMax-M1 Browser title: MiniMax M1: Pricing & Specs | Everstack Page type: website Review MiniMax M1 on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M1 pricing and limits on MiniMax Token pricing through MiniMax: $0.500 per million input tokens, $2.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: minimax-m1. Catalog status: deprecated. #### Routing MiniMax M1 through Everstack Call MiniMax M1 on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.1 Highspeed Source: https://everstack.ai/models/minimax/MiniMax-M2.1-highspeed Browser title: MiniMax M2.1 Highspeed: Pricing & Specs | Everstack Page type: website Review MiniMax M2.1 Highspeed on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.1 Highspeed pricing and limits on MiniMax Token pricing through MiniMax: $1.50 per million input tokens, $5.00 per million output tokens. Limits: 200K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: minimax-m2.1. Catalog status: deprecated. #### Routing MiniMax M2.1 Highspeed through Everstack Call MiniMax M2.1 Highspeed on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.1 on MiniMax Source: https://everstack.ai/models/minimax/MiniMax-M2.1 Browser title: MiniMax M2.1 on MiniMax | Everstack Page type: website Review MiniMax M2.1 on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.1 pricing and limits on MiniMax Token pricing through MiniMax: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 205K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax-m2.1. Catalog status: stable. #### Routing MiniMax M2.1 through Everstack Call MiniMax M2.1 on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.5 Highspeed Source: https://everstack.ai/models/minimax/MiniMax-M2.5-highspeed Browser title: MiniMax M2.5 Highspeed: Pricing & Specs | Everstack Page type: website Review MiniMax M2.5 Highspeed on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.5 Highspeed pricing and limits on MiniMax Token pricing through MiniMax: $0.600 per million input tokens, $2.40 per million output tokens. Limits: 205K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax-m2.5. Catalog status: stable. #### Routing MiniMax M2.5 Highspeed through Everstack Call MiniMax M2.5 Highspeed on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.5 on MiniMax Source: https://everstack.ai/models/minimax/MiniMax-M2.5 Browser title: MiniMax M2.5 on MiniMax | Everstack Page type: website Review MiniMax M2.5 on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.5 pricing and limits on MiniMax Token pricing through MiniMax: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 205K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax-m2.5. Catalog status: stable. #### Routing MiniMax M2.5 through Everstack Call MiniMax M2.5 on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.7 Highspeed Source: https://everstack.ai/models/minimax/MiniMax-M2.7-highspeed Browser title: MiniMax M2.7 Highspeed: Pricing & Specs | Everstack Page type: website Review MiniMax M2.7 Highspeed on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.7 Highspeed pricing and limits on MiniMax Token pricing through MiniMax: $0.600 per million input tokens, $2.40 per million output tokens. Limits: 205K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax-m2.7. Catalog status: stable. #### Routing MiniMax M2.7 Highspeed through Everstack Call MiniMax M2.7 Highspeed on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2.7 on MiniMax Source: https://everstack.ai/models/minimax/MiniMax-M2.7 Browser title: MiniMax M2.7 on MiniMax | Everstack Page type: website Review MiniMax M2.7 on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2.7 pricing and limits on MiniMax Token pricing through MiniMax: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 205K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax-m2.7. Catalog status: stable. #### Routing MiniMax M2.7 through Everstack Call MiniMax M2.7 on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax M2 Source: https://everstack.ai/models/minimax/MiniMax-M2 Browser title: MiniMax M2: Pricing & Specs | Everstack Page type: website Review MiniMax M2 on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax M2 pricing and limits on MiniMax Token pricing through MiniMax: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 197K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: minimax-m2. Catalog status: stable. #### Routing MiniMax M2 through Everstack Call MiniMax M2 on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax-M3 on MiniMax Source: https://everstack.ai/models/minimax/MiniMax-M3 Browser title: MiniMax-M3 on MiniMax | Everstack Page type: website Review MiniMax-M3 on MiniMax: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax-M3 pricing and limits on MiniMax Token pricing through MiniMax: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax-M3 through Everstack Call MiniMax-M3 on MiniMax through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral AI AI models Source: https://everstack.ai/models/mistral Browser title: Mistral AI AI Models & Pricing | Everstack Page type: website Browse 33 Mistral AI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Mistral AI models in one catalog Review 33 Mistral AI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Codestral Source: https://everstack.ai/models/mistral/codestral-latest Browser title: Codestral: Pricing & Specs | Everstack Page type: website Review Codestral on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Codestral pricing and limits on Mistral AI Token pricing through Mistral AI: $0.300 per million input tokens, $0.900 per million output tokens. Limits: 256K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: codestral. Catalog status: stable. #### Routing Codestral through Everstack Call Codestral on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Devstral 2 on Mistral AI Source: https://everstack.ai/models/mistral/devstral-2512 Browser title: Devstral 2 on Mistral AI | Everstack Page type: website Review Devstral 2 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Devstral 2 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.400 per million input tokens, $2.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: devstral. Catalog status: deprecated. #### Routing Devstral 2 through Everstack Call Devstral 2 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Devstral 2 on Mistral AI Source: https://everstack.ai/models/mistral/devstral-latest Browser title: Devstral 2 on Mistral AI | Everstack Page type: website Review Devstral 2 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Devstral 2 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.400 per million input tokens, $2.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: devstral. Catalog status: deprecated. #### Routing Devstral 2 through Everstack Call Devstral 2 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Devstral Medium Source: https://everstack.ai/models/mistral/devstral-medium-2507 Browser title: Devstral Medium: Pricing & Specs | Everstack Page type: website Review Devstral Medium on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Devstral Medium pricing and limits on Mistral AI Token pricing through Mistral AI: $0.400 per million input tokens, $2.00 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: devstral. Catalog status: deprecated. #### Routing Devstral Medium through Everstack Call Devstral Medium on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Devstral Medium (Latest) Source: https://everstack.ai/models/mistral/devstral-medium-latest Browser title: Devstral Medium (Latest): Pricing & Specs | Everstack Page type: website Review Devstral Medium (Latest) on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Devstral Medium (Latest) pricing and limits on Mistral AI Token pricing through Mistral AI: $0.400 per million input tokens, $2.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: devstral. Catalog status: deprecated. #### Routing Devstral Medium (Latest) through Everstack Call Devstral Medium (Latest) on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Devstral Small 2505 Source: https://everstack.ai/models/mistral/devstral-small-2505 Browser title: Devstral Small 2505: Pricing & Specs | Everstack Page type: website Review Devstral Small 2505 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Devstral Small 2505 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.100 per million input tokens, $0.300 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: devstral. Catalog status: deprecated. #### Routing Devstral Small 2505 through Everstack Call Devstral Small 2505 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Devstral Small Source: https://everstack.ai/models/mistral/devstral-small-2507 Browser title: Devstral Small: Pricing & Specs | Everstack Page type: website Review Devstral Small on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Devstral Small pricing and limits on Mistral AI Token pricing through Mistral AI: $0.100 per million input tokens, $0.300 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: devstral. Catalog status: deprecated. #### Routing Devstral Small through Everstack Call Devstral Small on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Devstral Small 2 Source: https://everstack.ai/models/mistral/labs-devstral-small-2512 Browser title: Devstral Small 2: Pricing & Specs | Everstack Page type: website Review Devstral Small 2 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Devstral Small 2 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 256K token context window, 256K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: devstral. Catalog status: deprecated. #### Routing Devstral Small 2 through Everstack Call Devstral Small 2 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Magistral Medium (Latest) Source: https://everstack.ai/models/mistral/magistral-medium-latest Browser title: Magistral Medium (Latest): Pricing & Specs | Everstack Page type: website Review Magistral Medium (Latest) on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Magistral Medium (Latest) pricing and limits on Mistral AI Token pricing through Mistral AI: $2.00 per million input tokens, $5.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: magistral. Catalog status: stable. #### Routing Magistral Medium (Latest) through Everstack Call Magistral Medium (Latest) on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Magistral Small 1.2 Source: https://everstack.ai/models/mistral/magistral-small-2509 Browser title: Magistral Small 1.2: Pricing & Specs | Everstack Page type: website Review Magistral Small 1.2 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Magistral Small 1.2 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text, image input. Returns text output. Model family: magistral. Catalog status: stable. #### Routing Magistral Small 1.2 through Everstack Call Magistral Small 1.2 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Magistral Small Source: https://everstack.ai/models/mistral/magistral-small Browser title: Magistral Small: Pricing & Specs | Everstack Page type: website Review Magistral Small on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Magistral Small pricing and limits on Mistral AI Token pricing through Mistral AI: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: magistral-small. Catalog status: stable. #### Routing Magistral Small through Everstack Call Magistral Small on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Ministral 3B (Latest) Source: https://everstack.ai/models/mistral/ministral-3b-latest Browser title: Ministral 3B (Latest): Pricing & Specs | Everstack Page type: website Review Ministral 3B (Latest) on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Ministral 3B (Latest) pricing and limits on Mistral AI Token pricing through Mistral AI: $0.040 per million input tokens, $0.040 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: ministral. Catalog status: stable. #### Routing Ministral 3B (Latest) through Everstack Call Ministral 3B (Latest) on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Ministral 8B Source: https://everstack.ai/models/mistral/ministral-8b-latest Browser title: Ministral 8B: Pricing & Specs | Everstack Page type: website Review Ministral 8B on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Ministral 8B pricing and limits on Mistral AI Token pricing through Mistral AI: $0.100 per million input tokens, $0.100 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: ministral. Catalog status: stable. #### Routing Ministral 8B through Everstack Call Ministral 8B on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Embed Source: https://everstack.ai/models/mistral/mistral-embed Browser title: Mistral Embed: Pricing & Specs | Everstack Page type: website Review Mistral Embed on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Embed pricing and limits on Mistral AI Token pricing through Mistral AI: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 3K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: embedding. Catalog status: stable. #### Routing Mistral Embed through Everstack Call Mistral Embed on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Large 2411 on Mistral AI Source: https://everstack.ai/models/mistral/mistral-large-2411 Browser title: Mistral Large 2411 on Mistral AI | Everstack Page type: website Review Mistral Large 2411 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Large 2411 pricing and limits on Mistral AI Token pricing through Mistral AI: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: mistral. Catalog status: stable. #### Routing Mistral Large 2411 through Everstack Call Mistral Large 2411 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Large 3 Source: https://everstack.ai/models/mistral/mistral-large-2512 Browser title: Mistral Large 3: Pricing & Specs | Everstack Page type: website Review Mistral Large 3 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Large 3 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: mistral-large. Catalog status: stable. #### Routing Mistral Large 3 through Everstack Call Mistral Large 3 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Large (Latest) Source: https://everstack.ai/models/mistral/mistral-large-latest Browser title: Mistral Large (Latest): Pricing & Specs | Everstack Page type: website Review Mistral Large (Latest) on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Large (Latest) pricing and limits on Mistral AI Token pricing through Mistral AI: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: mistral-large. Catalog status: stable. #### Routing Mistral Large (Latest) through Everstack Call Mistral Large (Latest) on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Medium 3 Source: https://everstack.ai/models/mistral/mistral-medium-2505 Browser title: Mistral Medium 3: Pricing & Specs | Everstack Page type: website Review Mistral Medium 3 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Medium 3 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.400 per million input tokens, $2.00 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: mistral-medium. Catalog status: stable. #### Routing Mistral Medium 3 through Everstack Call Mistral Medium 3 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Medium 3.1 Source: https://everstack.ai/models/mistral/mistral-medium-2508 Browser title: Mistral Medium 3.1: Pricing & Specs | Everstack Page type: website Review Mistral Medium 3.1 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Medium 3.1 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.400 per million input tokens, $2.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: mistral-medium. Catalog status: stable. #### Routing Mistral Medium 3.1 through Everstack Call Mistral Medium 3.1 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Medium 3.5 Source: https://everstack.ai/models/mistral/mistral-medium-2604 Browser title: Mistral Medium 3.5: Pricing & Specs | Everstack Page type: website Review Mistral Medium 3.5 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Medium 3.5 pricing and limits on Mistral AI Token pricing through Mistral AI: $1.50 per million input tokens, $7.50 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: mistral-medium. Catalog status: stable. #### Routing Mistral Medium 3.5 through Everstack Call Mistral Medium 3.5 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Medium (Latest) Source: https://everstack.ai/models/mistral/mistral-medium-latest Browser title: Mistral Medium (Latest): Pricing & Specs | Everstack Page type: website Review Mistral Medium (Latest) on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Medium (Latest) pricing and limits on Mistral AI Token pricing through Mistral AI: $1.50 per million input tokens, $7.50 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: mistral-medium. Catalog status: stable. #### Routing Mistral Medium (Latest) through Everstack Call Mistral Medium (Latest) on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Nemo Source: https://everstack.ai/models/mistral/mistral-nemo Browser title: Mistral Nemo: Pricing & Specs | Everstack Page type: website Review Mistral Nemo on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Nemo pricing and limits on Mistral AI Token pricing through Mistral AI: $0.150 per million input tokens, $0.150 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: mistral-nemo. Catalog status: stable. #### Routing Mistral Nemo through Everstack Call Mistral Nemo on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Small 3.2 Source: https://everstack.ai/models/mistral/mistral-small-2506 Browser title: Mistral Small 3.2: Pricing & Specs | Everstack Page type: website Review Mistral Small 3.2 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Small 3.2 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.100 per million input tokens, $0.300 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: mistral-small. Catalog status: stable. #### Routing Mistral Small 3.2 through Everstack Call Mistral Small 3.2 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Small 4 Source: https://everstack.ai/models/mistral/mistral-small-2603 Browser title: Mistral Small 4: Pricing & Specs | Everstack Page type: website Review Mistral Small 4 on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Small 4 pricing and limits on Mistral AI Token pricing through Mistral AI: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 256K token context window, 256K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: mistral-small. Catalog status: stable. #### Routing Mistral Small 4 through Everstack Call Mistral Small 4 on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Small (Latest) Source: https://everstack.ai/models/mistral/mistral-small-latest Browser title: Mistral Small (Latest): Pricing & Specs | Everstack Page type: website Review Mistral Small (Latest) on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Small (Latest) pricing and limits on Mistral AI Token pricing through Mistral AI: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 256K token context window, 256K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: mistral-small. Catalog status: stable. #### Routing Mistral Small (Latest) through Everstack Call Mistral Small (Latest) on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral 7B Source: https://everstack.ai/models/mistral/open-mistral-7b Browser title: Mistral 7B: Pricing & Specs | Everstack Page type: website Review Mistral 7B on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral 7B pricing and limits on Mistral AI Token pricing through Mistral AI: $0.250 per million input tokens, $0.250 per million output tokens. Limits: 8K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: mistral. Catalog status: stable. #### Routing Mistral 7B through Everstack Call Mistral 7B on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Open Mistral Nemo Source: https://everstack.ai/models/mistral/open-mistral-nemo Browser title: Open Mistral Nemo: Pricing & Specs | Everstack Page type: website Review Open Mistral Nemo on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Open Mistral Nemo pricing and limits on Mistral AI Token pricing through Mistral AI: $0.150 per million input tokens, $0.150 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: mistral-nemo. Catalog status: deprecated. #### Routing Open Mistral Nemo through Everstack Call Open Mistral Nemo on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mixtral 8x22B Source: https://everstack.ai/models/mistral/open-mixtral-8x22b Browser title: Mixtral 8x22B: Pricing & Specs | Everstack Page type: website Review Mixtral 8x22B on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mixtral 8x22B pricing and limits on Mistral AI Token pricing through Mistral AI: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 64K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: mixtral. Catalog status: stable. #### Routing Mixtral 8x22B through Everstack Call Mixtral 8x22B on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mixtral 8x7B Source: https://everstack.ai/models/mistral/open-mixtral-8x7b Browser title: Mixtral 8x7B: Pricing & Specs | Everstack Page type: website Review Mixtral 8x7B on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mixtral 8x7B pricing and limits on Mistral AI Token pricing through Mistral AI: $0.700 per million input tokens, $0.700 per million output tokens. Limits: 32K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: mixtral. Catalog status: stable. #### Routing Mixtral 8x7B through Everstack Call Mixtral 8x7B on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Pixtral 12B Source: https://everstack.ai/models/mistral/pixtral-12b Browser title: Pixtral 12B: Pricing & Specs | Everstack Page type: website Review Pixtral 12B on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Pixtral 12B pricing and limits on Mistral AI Token pricing through Mistral AI: $0.150 per million input tokens, $0.150 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: pixtral. Catalog status: stable. #### Routing Pixtral 12B through Everstack Call Pixtral 12B on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Pixtral Large Source: https://everstack.ai/models/mistral/pixtral-large-latest Browser title: Pixtral Large: Pricing & Specs | Everstack Page type: website Review Pixtral Large on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Pixtral Large pricing and limits on Mistral AI Token pricing through Mistral AI: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 128K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: pixtral. Catalog status: stable. #### Routing Pixtral Large through Everstack Call Pixtral Large on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Voxtral Small Source: https://everstack.ai/models/mistral/voxtral-small-2507 Browser title: Voxtral Small: Pricing & Specs | Everstack Page type: website Review Voxtral Small on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Voxtral Small pricing and limits on Mistral AI Token pricing through Mistral AI: $5.00 per million input tokens, $15.00 per million output tokens. Limits: 128K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: voxtral. Catalog status: stable. #### Routing Voxtral Small through Everstack Call Voxtral Small on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Voxtral Small (latest) Source: https://everstack.ai/models/mistral/voxtral-small-latest Browser title: Voxtral Small (latest): Pricing & Specs | Everstack Page type: website Review Voxtral Small (latest) on Mistral AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Voxtral Small (latest) pricing and limits on Mistral AI Token pricing through Mistral AI: $0.100 per million input tokens, $0.300 per million output tokens. Limits: 32K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text, audio input. Returns text output. Model family: voxtral. Catalog status: stable. #### Routing Voxtral Small (latest) through Everstack Call Voxtral Small (latest) on Mistral AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Moonshot AI AI models Source: https://everstack.ai/models/moonshot Browser title: Moonshot AI AI Models & Pricing | Everstack Page type: website Browse 13 Moonshot AI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Moonshot AI models in one catalog Review 13 Moonshot AI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Kimi K2 0711 Source: https://everstack.ai/models/moonshot/kimi-k2-0711-preview Browser title: Kimi K2 0711: Pricing & Specs | Everstack Page type: website Review Kimi K2 0711 on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2 0711 pricing and limits on Moonshot AI Token pricing through Moonshot AI: $0.600 per million input tokens, $2.50 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: kimi-k2. Catalog status: preview. #### Routing Kimi K2 0711 through Everstack Call Kimi K2 0711 on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2 0905 Source: https://everstack.ai/models/moonshot/kimi-k2-0905-preview Browser title: Kimi K2 0905: Pricing & Specs | Everstack Page type: website Review Kimi K2 0905 on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2 0905 pricing and limits on Moonshot AI Token pricing through Moonshot AI: $0.600 per million input tokens, $2.50 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: kimi-k2. Catalog status: preview. #### Routing Kimi K2 0905 through Everstack Call Kimi K2 0905 on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2 Thinking Turbo Source: https://everstack.ai/models/moonshot/kimi-k2-thinking-turbo Browser title: Kimi K2 Thinking Turbo: Pricing & Specs | Everstack Page type: website Review Kimi K2 Thinking Turbo on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2 Thinking Turbo pricing and limits on Moonshot AI Token pricing through Moonshot AI: $1.15 per million input tokens, $8.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2 Thinking Turbo through Everstack Call Kimi K2 Thinking Turbo on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2 Thinking on Moonshot AI Source: https://everstack.ai/models/moonshot/kimi-k2-thinking Browser title: Kimi K2 Thinking on Moonshot AI | Everstack Page type: website Review Kimi K2 Thinking on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2 Thinking pricing and limits on Moonshot AI Token pricing through Moonshot AI: $0.600 per million input tokens, $2.50 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2 Thinking through Everstack Call Kimi K2 Thinking on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2 Turbo Source: https://everstack.ai/models/moonshot/kimi-k2-turbo-preview Browser title: Kimi K2 Turbo: Pricing & Specs | Everstack Page type: website Review Kimi K2 Turbo on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2 Turbo pricing and limits on Moonshot AI Token pricing through Moonshot AI: $2.40 per million input tokens, $10.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: kimi-k2. Catalog status: preview. #### Routing Kimi K2 Turbo through Everstack Call Kimi K2 Turbo on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.5 on Moonshot AI Source: https://everstack.ai/models/moonshot/kimi-k2.5 Browser title: Kimi K2.5 on Moonshot AI | Everstack Page type: website Review Kimi K2.5 on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.5 pricing and limits on Moonshot AI Token pricing through Moonshot AI: $0.600 per million input tokens, $3.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi-k2.5. Catalog status: stable. #### Routing Kimi K2.5 through Everstack Call Kimi K2.5 on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.6 on Moonshot AI Source: https://everstack.ai/models/moonshot/kimi-k2.6 Browser title: Kimi K2.6 on Moonshot AI | Everstack Page type: website Review Kimi K2.6 on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.6 pricing and limits on Moonshot AI Token pricing through Moonshot AI: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi-k2.6. Catalog status: stable. #### Routing Kimi K2.6 through Everstack Call Kimi K2.6 on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.7 Code HighSpeed Source: https://everstack.ai/models/moonshot/kimi-k2.7-code-highspeed Browser title: Kimi K2.7 Code HighSpeed: Pricing & Specs | Everstack Page type: website Review Kimi K2.7 Code HighSpeed on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.7 Code HighSpeed pricing and limits on Moonshot AI Token pricing through Moonshot AI: $1.90 per million input tokens, $8.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2.7 Code HighSpeed through Everstack Call Kimi K2.7 Code HighSpeed on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.7 Code on Moonshot AI Source: https://everstack.ai/models/moonshot/kimi-k2.7-code Browser title: Kimi K2.7 Code on Moonshot AI | Everstack Page type: website Review Kimi K2.7 Code on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.7 Code pricing and limits on Moonshot AI Token pricing through Moonshot AI: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2.7 Code through Everstack Call Kimi K2.7 Code on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K3 on Moonshot AI Source: https://everstack.ai/models/moonshot/kimi-k3 Browser title: Kimi K3 on Moonshot AI | Everstack Page type: website Review Kimi K3 on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K3 pricing and limits on Moonshot AI Token pricing through Moonshot AI: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1049K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi-k3. Catalog status: stable. #### Routing Kimi K3 through Everstack Call Kimi K3 on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Moonshot V1 128K Source: https://everstack.ai/models/moonshot/moonshot-v1-128k Browser title: Moonshot V1 128K: Pricing & Specs | Everstack Page type: website Review Moonshot V1 128K on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Moonshot V1 128K pricing and limits on Moonshot AI Token pricing through Moonshot AI: $2.00 per million input tokens, $5.00 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: moonshot-v1. Catalog status: deprecated. #### Routing Moonshot V1 128K through Everstack Call Moonshot V1 128K on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Moonshot V1 32K Source: https://everstack.ai/models/moonshot/moonshot-v1-32k Browser title: Moonshot V1 32K: Pricing & Specs | Everstack Page type: website Review Moonshot V1 32K on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Moonshot V1 32K pricing and limits on Moonshot AI Token pricing through Moonshot AI: $1.00 per million input tokens, $3.00 per million output tokens. Limits: 33K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: moonshot-v1. Catalog status: deprecated. #### Routing Moonshot V1 32K through Everstack Call Moonshot V1 32K on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Moonshot V1 8K Source: https://everstack.ai/models/moonshot/moonshot-v1-8k Browser title: Moonshot V1 8K: Pricing & Specs | Everstack Page type: website Review Moonshot V1 8K on Moonshot AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Moonshot V1 8K pricing and limits on Moonshot AI Token pricing through Moonshot AI: $0.200 per million input tokens, $2.00 per million output tokens. Limits: 8K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: moonshot-v1. Catalog status: deprecated. #### Routing Moonshot V1 8K through Everstack Call Moonshot V1 8K on Moonshot AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### NVIDIA NIM AI models Source: https://everstack.ai/models/nvidia-nim Browser title: NVIDIA NIM AI Models & Pricing | Everstack Page type: website Browse 18 NVIDIA NIM AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare NVIDIA NIM models in one catalog Review 18 NVIDIA NIM models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### DeepSeek V3.2 (NIM) on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/deepseek-ai__deepseek-v3.2 Browser title: DeepSeek V3.2 (NIM) on NVIDIA NIM | Everstack Page type: website Review DeepSeek V3.2 (NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V3.2 (NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 164K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek. Catalog status: stable. #### Routing DeepSeek V3.2 (NIM) through Everstack Call DeepSeek V3.2 (NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Flash 0731 on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/deepseek-ai__deepseek-v4-flash-0731 Browser title: DeepSeek V4 Flash 0731 on NVIDIA NIM | Everstack Page type: website Review DeepSeek V4 Flash 0731 (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalo… #### DeepSeek V4 Flash 0731 (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-flash. Catalog status: stable. #### Routing DeepSeek V4 Flash 0731 (NVIDIA NIM) through Everstack Call DeepSeek V4 Flash 0731 (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro (NIM) on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/deepseek-ai__deepseek-v4-pro Browser title: DeepSeek V4 Pro (NIM) on NVIDIA NIM | Everstack Page type: website Review DeepSeek V4 Pro (NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro (NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.435 per million input tokens, $0.870 per million output tokens. Limits: 1049K token context window, 393K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek V4 Pro (NIM) through Everstack Call DeepSeek V4 Pro (NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.1 405B Instruct Source: https://everstack.ai/models/nvidia-nim/meta__llama-3.1-405b-instruct Browser title: Llama 3.1 405B Instruct: Pricing & Specs | Everstack Page type: website Review Llama 3.1 405B Instruct on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.1 405B Instruct pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $5.00 per million input tokens, $5.00 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.1 405B Instruct through Everstack Call Llama 3.1 405B Instruct on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.1 70B Instruct on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/meta__llama-3.1-70b-instruct Browser title: Llama 3.1 70B Instruct on NVIDIA NIM | Everstack Page type: website Review Llama 3.1 70B Instruct on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.1 70B Instruct pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.1 70B Instruct through Everstack Call Llama 3.1 70B Instruct on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.3 70B Instruct on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/meta__llama-3.3-70b-instruct Browser title: Llama 3.3 70B Instruct on NVIDIA NIM | Everstack Page type: website Review Llama 3.3 70B Instruct on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.3 70B Instruct pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.3 70B Instruct through Everstack Call Llama 3.3 70B Instruct on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 4 Maverick 17B 128E Source: https://everstack.ai/models/nvidia-nim/meta__llama-4-maverick-17b-128e-instruct Browser title: Llama 4 Maverick 17B 128E: Pricing & Specs | Everstack Page type: website Review Llama 4 Maverick 17B 128E on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 4 Maverick 17B 128E pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 4 Maverick 17B 128E through Everstack Call Llama 4 Maverick 17B 128E on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 4 Scout 17B 16E Source: https://everstack.ai/models/nvidia-nim/meta__llama-4-scout-17b-16e-instruct Browser title: Llama 4 Scout 17B 16E: Pricing & Specs | Everstack Page type: website Review Llama 4 Scout 17B 16E on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 4 Scout 17B 16E pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 4 Scout 17B 16E through Everstack Call Llama 4 Scout 17B 16E on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Muse Glimmer 30B on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/meta__muse-glimmer-30b Browser title: Muse Glimmer 30B on NVIDIA NIM | Everstack Page type: website Review Muse Glimmer 30B (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Muse Glimmer 30B (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: muse. Catalog status: stable. #### Routing Muse Glimmer 30B (NVIDIA NIM) through Everstack Call Muse Glimmer 30B (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax-M3 on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/minimaxai__minimax-m3 Browser title: MiniMax-M3 on NVIDIA NIM | Everstack Page type: website Review MiniMax-M3 (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax-M3 (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 1000K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax-M3 (NVIDIA NIM) through Everstack Call MiniMax-M3 (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K3 on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/moonshotai__kimi-k3 Browser title: Kimi K3 on NVIDIA NIM | Everstack Page type: website Review Kimi K3 (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K3 (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 1049K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi-k3. Catalog status: stable. #### Routing Kimi K3 (NVIDIA NIM) through Everstack Call Kimi K3 (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Nemotron 70B Instruct Source: https://everstack.ai/models/nvidia-nim/nvidia__llama-3.1-nemotron-70b-instruct Browser title: Nemotron 70B Instruct: Pricing & Specs | Everstack Page type: website Review Nemotron 70B Instruct on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Nemotron 70B Instruct pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 128K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: nemotron. Catalog status: stable. #### Routing Nemotron 70B Instruct through Everstack Call Nemotron 70B Instruct on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Nemotron 3 Ultra 550B A55B on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/nvidia__nemotron-3-ultra-550b-a55b Browser title: Nemotron 3 Ultra 550B A55B on NVIDIA NIM | Everstack Page type: website Review Nemotron 3 Ultra 550B A55B (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model ca… #### Nemotron 3 Ultra 550B A55B (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.500 per million input tokens, $2.50 per million output tokens. Limits: 1000K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: nemotron. Catalog status: stable. #### Routing Nemotron 3 Ultra 550B A55B (NVIDIA NIM) through Everstack Call Nemotron 3 Ultra 550B A55B (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Nemotron 3.5 Lightning 30B A3B (NVIDIA NIM) Source: https://everstack.ai/models/nvidia-nim/nvidia__nemotron-3.5-lightning-30b-a3b Browser title: Nemotron 3.5 Lightning 30B A3B (NVIDIA NIM): Pricing & Specs | Everstack Page type: website Review Nemotron 3.5 Lightning 30B A3B (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack mode… #### Nemotron 3.5 Lightning 30B A3B (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: nemotron. Catalog status: stable. #### Routing Nemotron 3.5 Lightning 30B A3B (NVIDIA NIM) through Everstack Call Nemotron 3.5 Lightning 30B A3B (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### NV EmbedQA E5 v5 Source: https://everstack.ai/models/nvidia-nim/nvidia__nv-embedqa-e5-v5 Browser title: NV EmbedQA E5 v5: Pricing & Specs | Everstack Page type: website Review NV EmbedQA E5 v5 on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### NV EmbedQA E5 v5 pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.080 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embedding. Catalog status: stable. #### Routing NV EmbedQA E5 v5 through Everstack Call NV EmbedQA E5 v5 on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Step 3.7 Flash on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/stepfun-ai__step-3.7-flash Browser title: Step 3.7 Flash on NVIDIA NIM | Everstack Page type: website Review Step 3.7 Flash (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Step 3.7 Flash (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 256K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: stepfun-ai/step-3.7-flash. Catalog status: stable. #### Routing Step 3.7 Flash (NVIDIA NIM) through Everstack Call Step 3.7 Flash (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Inkling on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/thinkingmachines__inkling Browser title: Inkling on NVIDIA NIM | Everstack Page type: website Review Inkling (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Inkling (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 1049K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio input. Returns text output. Model family: ling. Catalog status: stable. #### Routing Inkling (NVIDIA NIM) through Everstack Call Inkling (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.2 on NVIDIA NIM Source: https://everstack.ai/models/nvidia-nim/z-ai__glm-5.2 Browser title: GLM-5.2 on NVIDIA NIM | Everstack Page type: website Review GLM-5.2 (NVIDIA NIM) on NVIDIA NIM: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.2 (NVIDIA NIM) pricing and limits on NVIDIA NIM Token pricing through NVIDIA NIM: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.2 (NVIDIA NIM) through Everstack Call GLM-5.2 (NVIDIA NIM) on NVIDIA NIM through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Ollama AI models Source: https://everstack.ai/models/ollama Browser title: Ollama AI Models & Pricing | Everstack Page type: website Browse 0 Ollama AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Ollama models in one catalog Review 0 Ollama models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### OpenAI AI models Source: https://everstack.ai/models/openai Browser title: OpenAI AI Models & Pricing | Everstack Page type: website Browse 116 OpenAI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare OpenAI models in one catalog Review 116 OpenAI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Chatgpt 4o Latest Source: https://everstack.ai/models/openai/chatgpt-4o-latest Browser title: Chatgpt 4o Latest: Pricing & Specs | Everstack Page type: website Review Chatgpt 4o Latest on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Chatgpt 4o Latest pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: other. Catalog status: stable. #### Routing Chatgpt 4o Latest through Everstack Call Chatgpt 4o Latest on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Chatgpt Image Latest Source: https://everstack.ai/models/openai/chatgpt-image-latest Browser title: Chatgpt Image Latest: Pricing & Specs | Everstack Page type: website Review Chatgpt Image Latest on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Chatgpt Image Latest pricing and limits on OpenAI Token pricing through OpenAI: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 0 token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text, image output. Model family: other. Catalog status: stable. #### Routing Chatgpt Image Latest through Everstack Call Chatgpt Image Latest on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-3.5 Turbo 16K Source: https://everstack.ai/models/openai/gpt-3.5-turbo-16k Browser title: GPT-3.5 Turbo 16K: Pricing & Specs | Everstack Page type: website Review GPT-3.5 Turbo 16K on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-3.5 Turbo 16K pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 16K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: gpt-3.5. Catalog status: stable. #### Routing GPT-3.5 Turbo 16K through Everstack Call GPT-3.5 Turbo 16K on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-3.5 Turbo Instruct Source: https://everstack.ai/models/openai/gpt-3.5-turbo-instruct Browser title: GPT-3.5 Turbo Instruct: Pricing & Specs | Everstack Page type: website Review GPT-3.5 Turbo Instruct on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-3.5 Turbo Instruct pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 16K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: gpt-3.5. Catalog status: stable. #### Routing GPT-3.5 Turbo Instruct through Everstack Call GPT-3.5 Turbo Instruct on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-3.5 Turbo on OpenAI Source: https://everstack.ai/models/openai/gpt-3.5-turbo Browser title: GPT-3.5 Turbo on OpenAI | Everstack Page type: website Review GPT-3.5 Turbo on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-3.5 Turbo pricing and limits on OpenAI Token pricing through OpenAI: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 16K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: gpt-3.5. Catalog status: deprecated. #### Routing GPT-3.5 Turbo through Everstack Call GPT-3.5 Turbo on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4 Turbo 2024 04 09 Source: https://everstack.ai/models/openai/gpt-4-turbo-2024-04-09 Browser title: GPT 4 Turbo 2024 04 09: Pricing & Specs | Everstack Page type: website Review GPT 4 Turbo 2024 04 09 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4 Turbo 2024 04 09 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4 Turbo 2024 04 09 through Everstack Call GPT 4 Turbo 2024 04 09 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4 Turbo Preview Source: https://everstack.ai/models/openai/gpt-4-turbo-preview Browser title: Gpt 4 Turbo Preview: Pricing & Specs | Everstack Page type: website Review Gpt 4 Turbo Preview on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4 Turbo Preview pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4 Turbo Preview through Everstack Call Gpt 4 Turbo Preview on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4 Turbo on OpenAI Source: https://everstack.ai/models/openai/gpt-4-turbo Browser title: GPT-4 Turbo on OpenAI | Everstack Page type: website Review GPT-4 Turbo on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4 Turbo pricing and limits on OpenAI Token pricing through OpenAI: $10.00 per million input tokens, $30.00 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: deprecated. #### Routing GPT-4 Turbo through Everstack Call GPT-4 Turbo on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4.1 2025 04 14 Source: https://everstack.ai/models/openai/gpt-4.1-2025-04-14 Browser title: GPT 4.1 2025 04 14: Pricing & Specs | Everstack Page type: website Review GPT 4.1 2025 04 14 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4.1 2025 04 14 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4.1 2025 04 14 through Everstack Call GPT 4.1 2025 04 14 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4.1 Mini 2025 04 14 Source: https://everstack.ai/models/openai/gpt-4.1-mini-2025-04-14 Browser title: GPT 4.1 Mini 2025 04 14: Pricing & Specs | Everstack Page type: website Review GPT 4.1 Mini 2025 04 14 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4.1 Mini 2025 04 14 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4.1 Mini 2025 04 14 through Everstack Call GPT 4.1 Mini 2025 04 14 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4.1 Mini on OpenAI Source: https://everstack.ai/models/openai/gpt-4.1-mini Browser title: GPT-4.1 Mini on OpenAI | Everstack Page type: website Review GPT-4.1 Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4.1 Mini pricing and limits on OpenAI Token pricing through OpenAI: $0.400 per million input tokens, $1.60 per million output tokens. Limits: 1048K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, pdf input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT-4.1 Mini through Everstack Call GPT-4.1 Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4.1 Nano 2025 04 14 Source: https://everstack.ai/models/openai/gpt-4.1-nano-2025-04-14 Browser title: GPT 4.1 Nano 2025 04 14: Pricing & Specs | Everstack Page type: website Review GPT 4.1 Nano 2025 04 14 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4.1 Nano 2025 04 14 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4.1 Nano 2025 04 14 through Everstack Call GPT 4.1 Nano 2025 04 14 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4.1 Nano on OpenAI Source: https://everstack.ai/models/openai/gpt-4.1-nano Browser title: GPT-4.1 Nano on OpenAI | Everstack Page type: website Review GPT-4.1 Nano on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4.1 Nano pricing and limits on OpenAI Token pricing through OpenAI: $0.100 per million input tokens, $0.400 per million output tokens. Limits: 1048K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: deprecated. #### Routing GPT-4.1 Nano through Everstack Call GPT-4.1 Nano on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4.1 on OpenAI Source: https://everstack.ai/models/openai/gpt-4.1 Browser title: GPT-4.1 on OpenAI | Everstack Page type: website Review GPT-4.1 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4.1 pricing and limits on OpenAI Token pricing through OpenAI: $2.00 per million input tokens, $8.00 per million output tokens. Limits: 1048K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, pdf input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT-4.1 through Everstack Call GPT-4.1 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4 on OpenAI Source: https://everstack.ai/models/openai/gpt-4 Browser title: GPT-4 on OpenAI | Everstack Page type: website Review GPT-4 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4 pricing and limits on OpenAI Token pricing through OpenAI: $30.00 per million input tokens, $60.00 per million output tokens. Limits: 8K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: gpt-4. Catalog status: deprecated. #### Routing GPT-4 through Everstack Call GPT-4 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o 2024 05 13 Source: https://everstack.ai/models/openai/gpt-4o-2024-05-13 Browser title: GPT 4o 2024 05 13: Pricing & Specs | Everstack Page type: website Review GPT 4o 2024 05 13 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o 2024 05 13 pricing and limits on OpenAI Token pricing through OpenAI: $5.00 per million input tokens, $15.00 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: deprecated. #### Routing GPT 4o 2024 05 13 through Everstack Call GPT 4o 2024 05 13 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o 2024 08 06 Source: https://everstack.ai/models/openai/gpt-4o-2024-08-06 Browser title: GPT 4o 2024 08 06: Pricing & Specs | Everstack Page type: website Review GPT 4o 2024 08 06 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o 2024 08 06 pricing and limits on OpenAI Token pricing through OpenAI: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o 2024 08 06 through Everstack Call GPT 4o 2024 08 06 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o 2024 11 20 Source: https://everstack.ai/models/openai/gpt-4o-2024-11-20 Browser title: GPT 4o 2024 11 20: Pricing & Specs | Everstack Page type: website Review GPT 4o 2024 11 20 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o 2024 11 20 pricing and limits on OpenAI Token pricing through OpenAI: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o 2024 11 20 through Everstack Call GPT 4o 2024 11 20 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Audio Preview 2024 12 17 Source: https://everstack.ai/models/openai/gpt-4o-audio-preview-2024-12-17 Browser title: GPT 4o Audio Preview 2024 12 17: Pricing & Specs | Everstack Page type: website Review GPT 4o Audio Preview 2024 12 17 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Audio Preview 2024 12 17 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Audio Preview 2024 12 17 through Everstack Call GPT 4o Audio Preview 2024 12 17 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Audio Preview 2025 06 03 Source: https://everstack.ai/models/openai/gpt-4o-audio-preview-2025-06-03 Browser title: GPT 4o Audio Preview 2025 06 03: Pricing & Specs | Everstack Page type: website Review GPT 4o Audio Preview 2025 06 03 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Audio Preview 2025 06 03 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Audio Preview 2025 06 03 through Everstack Call GPT 4o Audio Preview 2025 06 03 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Audio Preview Source: https://everstack.ai/models/openai/gpt-4o-audio-preview Browser title: Gpt 4o Audio Preview: Pricing & Specs | Everstack Page type: website Review Gpt 4o Audio Preview on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Audio Preview pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Audio Preview through Everstack Call Gpt 4o Audio Preview on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Mini 2024 07 18 Source: https://everstack.ai/models/openai/gpt-4o-mini-2024-07-18 Browser title: GPT 4o Mini 2024 07 18: Pricing & Specs | Everstack Page type: website Review GPT 4o Mini 2024 07 18 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Mini 2024 07 18 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Mini 2024 07 18 through Everstack Call GPT 4o Mini 2024 07 18 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Mini Audio Preview 2024 12 17 Source: https://everstack.ai/models/openai/gpt-4o-mini-audio-preview-2024-12-17 Browser title: GPT 4o Mini Audio Preview 2024 12 17: Pricing & Specs | Everstack Page type: website Review GPT 4o Mini Audio Preview 2024 12 17 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Mini Audio Preview 2024 12 17 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Mini Audio Preview 2024 12 17 through Everstack Call GPT 4o Mini Audio Preview 2024 12 17 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Mini Audio Preview Source: https://everstack.ai/models/openai/gpt-4o-mini-audio-preview Browser title: Gpt 4o Mini Audio Preview: Pricing & Specs | Everstack Page type: website Review Gpt 4o Mini Audio Preview on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Mini Audio Preview pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Mini Audio Preview through Everstack Call Gpt 4o Mini Audio Preview on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Mini Realtime Preview 2024 12 17 Source: https://everstack.ai/models/openai/gpt-4o-mini-realtime-preview-2024-12-17 Browser title: GPT 4o Mini Realtime Preview 2024 12 17: Pricing & Specs | Everstack Page type: website Review GPT 4o Mini Realtime Preview 2024 12 17 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalo… #### GPT 4o Mini Realtime Preview 2024 12 17 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Mini Realtime Preview 2024 12 17 through Everstack Call GPT 4o Mini Realtime Preview 2024 12 17 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Mini Realtime Preview Source: https://everstack.ai/models/openai/gpt-4o-mini-realtime-preview Browser title: Gpt 4o Mini Realtime Preview: Pricing & Specs | Everstack Page type: website Review Gpt 4o Mini Realtime Preview on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Mini Realtime Preview pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Mini Realtime Preview through Everstack Call Gpt 4o Mini Realtime Preview on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Mini Search Preview 2025 03 11 Source: https://everstack.ai/models/openai/gpt-4o-mini-search-preview-2025-03-11 Browser title: GPT 4o Mini Search Preview 2025 03 11: Pricing & Specs | Everstack Page type: website Review GPT 4o Mini Search Preview 2025 03 11 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Mini Search Preview 2025 03 11 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Mini Search Preview 2025 03 11 through Everstack Call GPT 4o Mini Search Preview 2025 03 11 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Mini Search Preview Source: https://everstack.ai/models/openai/gpt-4o-mini-search-preview Browser title: Gpt 4o Mini Search Preview: Pricing & Specs | Everstack Page type: website Review Gpt 4o Mini Search Preview on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Mini Search Preview pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Mini Search Preview through Everstack Call Gpt 4o Mini Search Preview on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Mini Transcribe 2025 03 20 Source: https://everstack.ai/models/openai/gpt-4o-mini-transcribe-2025-03-20 Browser title: GPT 4o Mini Transcribe 2025 03 20: Pricing & Specs | Everstack Page type: website Review GPT 4o Mini Transcribe 2025 03 20 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Mini Transcribe 2025 03 20 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Mini Transcribe 2025 03 20 through Everstack Call GPT 4o Mini Transcribe 2025 03 20 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Mini Transcribe 2025 12 15 Source: https://everstack.ai/models/openai/gpt-4o-mini-transcribe-2025-12-15 Browser title: GPT 4o Mini Transcribe 2025 12 15: Pricing & Specs | Everstack Page type: website Review GPT 4o Mini Transcribe 2025 12 15 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Mini Transcribe 2025 12 15 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Mini Transcribe 2025 12 15 through Everstack Call GPT 4o Mini Transcribe 2025 12 15 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Mini Transcribe Source: https://everstack.ai/models/openai/gpt-4o-mini-transcribe Browser title: Gpt 4o Mini Transcribe: Pricing & Specs | Everstack Page type: website Review Gpt 4o Mini Transcribe on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Mini Transcribe pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Mini Transcribe through Everstack Call Gpt 4o Mini Transcribe on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Mini Tts 2025 03 20 Source: https://everstack.ai/models/openai/gpt-4o-mini-tts-2025-03-20 Browser title: GPT 4o Mini Tts 2025 03 20: Pricing & Specs | Everstack Page type: website Review GPT 4o Mini Tts 2025 03 20 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Mini Tts 2025 03 20 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Mini Tts 2025 03 20 through Everstack Call GPT 4o Mini Tts 2025 03 20 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Mini Tts 2025 12 15 Source: https://everstack.ai/models/openai/gpt-4o-mini-tts-2025-12-15 Browser title: GPT 4o Mini Tts 2025 12 15: Pricing & Specs | Everstack Page type: website Review GPT 4o Mini Tts 2025 12 15 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Mini Tts 2025 12 15 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Mini Tts 2025 12 15 through Everstack Call GPT 4o Mini Tts 2025 12 15 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Mini Tts Source: https://everstack.ai/models/openai/gpt-4o-mini-tts Browser title: Gpt 4o Mini Tts: Pricing & Specs | Everstack Page type: website Review Gpt 4o Mini Tts on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Mini Tts pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Mini Tts through Everstack Call Gpt 4o Mini Tts on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4o Mini on OpenAI Source: https://everstack.ai/models/openai/gpt-4o-mini Browser title: GPT-4o Mini on OpenAI | Everstack Page type: website Review GPT-4o Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4o Mini pricing and limits on OpenAI Token pricing through OpenAI: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, pdf input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT-4o Mini through Everstack Call GPT-4o Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Realtime Preview 2024 12 17 Source: https://everstack.ai/models/openai/gpt-4o-realtime-preview-2024-12-17 Browser title: GPT 4o Realtime Preview 2024 12 17: Pricing & Specs | Everstack Page type: website Review GPT 4o Realtime Preview 2024 12 17 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Realtime Preview 2024 12 17 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Realtime Preview 2024 12 17 through Everstack Call GPT 4o Realtime Preview 2024 12 17 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Realtime Preview 2025 06 03 Source: https://everstack.ai/models/openai/gpt-4o-realtime-preview-2025-06-03 Browser title: GPT 4o Realtime Preview 2025 06 03: Pricing & Specs | Everstack Page type: website Review GPT 4o Realtime Preview 2025 06 03 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Realtime Preview 2025 06 03 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Realtime Preview 2025 06 03 through Everstack Call GPT 4o Realtime Preview 2025 06 03 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Realtime Preview Source: https://everstack.ai/models/openai/gpt-4o-realtime-preview Browser title: Gpt 4o Realtime Preview: Pricing & Specs | Everstack Page type: website Review Gpt 4o Realtime Preview on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Realtime Preview pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Realtime Preview through Everstack Call Gpt 4o Realtime Preview on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 4o Search Preview 2025 03 11 Source: https://everstack.ai/models/openai/gpt-4o-search-preview-2025-03-11 Browser title: GPT 4o Search Preview 2025 03 11: Pricing & Specs | Everstack Page type: website Review GPT 4o Search Preview 2025 03 11 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 4o Search Preview 2025 03 11 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT 4o Search Preview 2025 03 11 through Everstack Call GPT 4o Search Preview 2025 03 11 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Search Preview Source: https://everstack.ai/models/openai/gpt-4o-search-preview Browser title: Gpt 4o Search Preview: Pricing & Specs | Everstack Page type: website Review Gpt 4o Search Preview on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Search Preview pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Search Preview through Everstack Call Gpt 4o Search Preview on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Transcribe Diarize Source: https://everstack.ai/models/openai/gpt-4o-transcribe-diarize Browser title: Gpt 4o Transcribe Diarize: Pricing & Specs | Everstack Page type: website Review Gpt 4o Transcribe Diarize on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Transcribe Diarize pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Transcribe Diarize through Everstack Call Gpt 4o Transcribe Diarize on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 4o Transcribe Source: https://everstack.ai/models/openai/gpt-4o-transcribe Browser title: Gpt 4o Transcribe: Pricing & Specs | Everstack Page type: website Review Gpt 4o Transcribe on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 4o Transcribe pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing Gpt 4o Transcribe through Everstack Call Gpt 4o Transcribe on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4o on OpenAI Source: https://everstack.ai/models/openai/gpt-4o Browser title: GPT-4o on OpenAI | Everstack Page type: website Review GPT-4o on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4o pricing and limits on OpenAI Token pricing through OpenAI: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, pdf input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT-4o through Everstack Call GPT-4o on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 5 2025 08 07 Source: https://everstack.ai/models/openai/gpt-5-2025-08-07 Browser title: GPT 5 2025 08 07: Pricing & Specs | Everstack Page type: website Review GPT 5 2025 08 07 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 5 2025 08 07 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT 5 2025 08 07 through Everstack Call GPT 5 2025 08 07 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 Chat (Latest) Source: https://everstack.ai/models/openai/gpt-5-chat-latest Browser title: GPT-5 Chat (Latest): Pricing & Specs | Everstack Page type: website Review GPT-5 Chat (Latest) on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 Chat (Latest) pricing and limits on OpenAI Token pricing through OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 Chat (Latest) through Everstack Call GPT-5 Chat (Latest) on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 Codex on OpenAI Source: https://everstack.ai/models/openai/gpt-5-codex Browser title: GPT-5 Codex on OpenAI | Everstack Page type: website Review GPT-5 Codex on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 Codex pricing and limits on OpenAI Token pricing through OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning, coding. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 Codex through Everstack Call GPT-5 Codex on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 5 Mini 2025 08 07 Source: https://everstack.ai/models/openai/gpt-5-mini-2025-08-07 Browser title: GPT 5 Mini 2025 08 07: Pricing & Specs | Everstack Page type: website Review GPT 5 Mini 2025 08 07 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 5 Mini 2025 08 07 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT 5 Mini 2025 08 07 through Everstack Call GPT 5 Mini 2025 08 07 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 Mini on OpenAI Source: https://everstack.ai/models/openai/gpt-5-mini Browser title: GPT-5 Mini on OpenAI | Everstack Page type: website Review GPT-5 Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 Mini pricing and limits on OpenAI Token pricing through OpenAI: $0.250 per million input tokens, $2.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 Mini through Everstack Call GPT-5 Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 5 Nano 2025 08 07 Source: https://everstack.ai/models/openai/gpt-5-nano-2025-08-07 Browser title: GPT 5 Nano 2025 08 07: Pricing & Specs | Everstack Page type: website Review GPT 5 Nano 2025 08 07 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 5 Nano 2025 08 07 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT 5 Nano 2025 08 07 through Everstack Call GPT 5 Nano 2025 08 07 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 Nano on OpenAI Source: https://everstack.ai/models/openai/gpt-5-nano Browser title: GPT-5 Nano on OpenAI | Everstack Page type: website Review GPT-5 Nano on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 Nano pricing and limits on OpenAI Token pricing through OpenAI: $0.050 per million input tokens, $0.400 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 Nano through Everstack Call GPT-5 Nano on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 5 Pro 2025 10 06 Source: https://everstack.ai/models/openai/gpt-5-pro-2025-10-06 Browser title: GPT 5 Pro 2025 10 06: Pricing & Specs | Everstack Page type: website Review GPT 5 Pro 2025 10 06 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 5 Pro 2025 10 06 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT 5 Pro 2025 10 06 through Everstack Call GPT 5 Pro 2025 10 06 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 Pro Source: https://everstack.ai/models/openai/gpt-5-pro Browser title: GPT-5 Pro: Pricing & Specs | Everstack Page type: website Review GPT-5 Pro on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 Pro pricing and limits on OpenAI Token pricing through OpenAI: $15.00 per million input tokens, $120.00 per million output tokens. Limits: 400K token context window, 272K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 Pro through Everstack Call GPT-5 Pro on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 5 Search Api 2025 10 14 Source: https://everstack.ai/models/openai/gpt-5-search-api-2025-10-14 Browser title: GPT 5 Search Api 2025 10 14: Pricing & Specs | Everstack Page type: website Review GPT 5 Search Api 2025 10 14 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 5 Search Api 2025 10 14 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT 5 Search Api 2025 10 14 through Everstack Call GPT 5 Search Api 2025 10 14 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 5 Search Api Source: https://everstack.ai/models/openai/gpt-5-search-api Browser title: Gpt 5 Search Api: Pricing & Specs | Everstack Page type: website Review Gpt 5 Search Api on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 5 Search Api pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing Gpt 5 Search Api through Everstack Call Gpt 5 Search Api on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 5.1 2025 11 13 Source: https://everstack.ai/models/openai/gpt-5.1-2025-11-13 Browser title: GPT 5.1 2025 11 13: Pricing & Specs | Everstack Page type: website Review GPT 5.1 2025 11 13 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 5.1 2025 11 13 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT 5.1 2025 11 13 through Everstack Call GPT 5.1 2025 11 13 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.1 Chat (Latest) Source: https://everstack.ai/models/openai/gpt-5.1-chat-latest Browser title: GPT-5.1 Chat (Latest): Pricing & Specs | Everstack Page type: website Review GPT-5.1 Chat (Latest) on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.1 Chat (Latest) pricing and limits on OpenAI Token pricing through OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.1 Chat (Latest) through Everstack Call GPT-5.1 Chat (Latest) on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.1 Codex Max Source: https://everstack.ai/models/openai/gpt-5.1-codex-max Browser title: GPT-5.1 Codex Max: Pricing & Specs | Everstack Page type: website Review GPT-5.1 Codex Max on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.1 Codex Max pricing and limits on OpenAI Token pricing through OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning, coding. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.1 Codex Max through Everstack Call GPT-5.1 Codex Max on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.1 Codex Mini Source: https://everstack.ai/models/openai/gpt-5.1-codex-mini Browser title: GPT-5.1 Codex Mini: Pricing & Specs | Everstack Page type: website Review GPT-5.1 Codex Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.1 Codex Mini pricing and limits on OpenAI Token pricing through OpenAI: $0.250 per million input tokens, $2.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning, coding. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.1 Codex Mini through Everstack Call GPT-5.1 Codex Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.1 Codex Source: https://everstack.ai/models/openai/gpt-5.1-codex Browser title: GPT-5.1 Codex: Pricing & Specs | Everstack Page type: website Review GPT-5.1 Codex on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.1 Codex pricing and limits on OpenAI Token pricing through OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning, coding. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.1 Codex through Everstack Call GPT-5.1 Codex on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.1 on OpenAI Source: https://everstack.ai/models/openai/gpt-5.1 Browser title: GPT-5.1 on OpenAI | Everstack Page type: website Review GPT-5.1 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.1 pricing and limits on OpenAI Token pricing through OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.1 through Everstack Call GPT-5.1 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 5.2 2025 12 11 Source: https://everstack.ai/models/openai/gpt-5.2-2025-12-11 Browser title: GPT 5.2 2025 12 11: Pricing & Specs | Everstack Page type: website Review GPT 5.2 2025 12 11 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 5.2 2025 12 11 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT 5.2 2025 12 11 through Everstack Call GPT 5.2 2025 12 11 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt 5.2 Chat Latest Source: https://everstack.ai/models/openai/gpt-5.2-chat-latest Browser title: Gpt 5.2 Chat Latest: Pricing & Specs | Everstack Page type: website Review Gpt 5.2 Chat Latest on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt 5.2 Chat Latest pricing and limits on OpenAI Token pricing through OpenAI: $1.75 per million input tokens, $14.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing Gpt 5.2 Chat Latest through Everstack Call Gpt 5.2 Chat Latest on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.2 Codex Source: https://everstack.ai/models/openai/gpt-5.2-codex Browser title: GPT-5.2 Codex: Pricing & Specs | Everstack Page type: website Review GPT-5.2 Codex on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.2 Codex pricing and limits on OpenAI Token pricing through OpenAI: $1.75 per million input tokens, $14.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning, coding. Accepts text, image, pdf input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.2 Codex through Everstack Call GPT-5.2 Codex on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT 5.2 Pro 2025 12 11 Source: https://everstack.ai/models/openai/gpt-5.2-pro-2025-12-11 Browser title: GPT 5.2 Pro 2025 12 11: Pricing & Specs | Everstack Page type: website Review GPT 5.2 Pro 2025 12 11 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT 5.2 Pro 2025 12 11 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT 5.2 Pro 2025 12 11 through Everstack Call GPT 5.2 Pro 2025 12 11 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.2 Pro Source: https://everstack.ai/models/openai/gpt-5.2-pro Browser title: GPT-5.2 Pro: Pricing & Specs | Everstack Page type: website Review GPT-5.2 Pro on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.2 Pro pricing and limits on OpenAI Token pricing through OpenAI: $21.00 per million input tokens, $168.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.2 Pro through Everstack Call GPT-5.2 Pro on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.2 on OpenAI Source: https://everstack.ai/models/openai/gpt-5.2 Browser title: GPT-5.2 on OpenAI | Everstack Page type: website Review GPT-5.2 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.2 pricing and limits on OpenAI Token pricing through OpenAI: $1.75 per million input tokens, $14.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.2 through Everstack Call GPT-5.2 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.3 Chat (Latest) Source: https://everstack.ai/models/openai/gpt-5.3-chat-latest Browser title: GPT-5.3 Chat (Latest): Pricing & Specs | Everstack Page type: website Review GPT-5.3 Chat (Latest) on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.3 Chat (Latest) pricing and limits on OpenAI Token pricing through OpenAI: $1.75 per million input tokens, $14.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.3 Chat (Latest) through Everstack Call GPT-5.3 Chat (Latest) on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.3 Codex Spark Source: https://everstack.ai/models/openai/gpt-5.3-codex-spark Browser title: GPT-5.3 Codex Spark: Pricing & Specs | Everstack Page type: website Review GPT-5.3 Codex Spark on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.3 Codex Spark pricing and limits on OpenAI Token pricing through OpenAI: $1.75 per million input tokens, $14.00 per million output tokens. Limits: 128K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.3 Codex Spark through Everstack Call GPT-5.3 Codex Spark on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.3 Codex Source: https://everstack.ai/models/openai/gpt-5.3-codex Browser title: GPT-5.3 Codex: Pricing & Specs | Everstack Page type: website Review GPT-5.3 Codex on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.3 Codex pricing and limits on OpenAI Token pricing through OpenAI: $1.75 per million input tokens, $14.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.3 Codex through Everstack Call GPT-5.3 Codex on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.4 Mini Source: https://everstack.ai/models/openai/gpt-5.4-mini Browser title: GPT-5.4 Mini: Pricing & Specs | Everstack Page type: website Review GPT-5.4 Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.4 Mini pricing and limits on OpenAI Token pricing through OpenAI: $0.750 per million input tokens, $4.50 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.4 Mini through Everstack Call GPT-5.4 Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.4 Nano Source: https://everstack.ai/models/openai/gpt-5.4-nano Browser title: GPT-5.4 Nano: Pricing & Specs | Everstack Page type: website Review GPT-5.4 Nano on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.4 Nano pricing and limits on OpenAI Token pricing through OpenAI: $0.200 per million input tokens, $1.25 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.4 Nano through Everstack Call GPT-5.4 Nano on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.4 Pro Source: https://everstack.ai/models/openai/gpt-5.4-pro Browser title: GPT-5.4 Pro: Pricing & Specs | Everstack Page type: website Review GPT-5.4 Pro on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.4 Pro pricing and limits on OpenAI Token pricing through OpenAI: $30.00 per million input tokens, $180.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.4 Pro through Everstack Call GPT-5.4 Pro on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.4 Source: https://everstack.ai/models/openai/gpt-5.4 Browser title: GPT-5.4: Pricing & Specs | Everstack Page type: website Review GPT-5.4 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.4 pricing and limits on OpenAI Token pricing through OpenAI: $2.50 per million input tokens, $15.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.4 through Everstack Call GPT-5.4 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.5 Pro Source: https://everstack.ai/models/openai/gpt-5.5-pro Browser title: GPT-5.5 Pro: Pricing & Specs | Everstack Page type: website Review GPT-5.5 Pro on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.5 Pro pricing and limits on OpenAI Token pricing through OpenAI: $30.00 per million input tokens, $180.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.5 Pro through Everstack Call GPT-5.5 Pro on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.5 on OpenAI Source: https://everstack.ai/models/openai/gpt-5.5 Browser title: GPT-5.5 on OpenAI | Everstack Page type: website Review GPT-5.5 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.5 pricing and limits on OpenAI Token pricing through OpenAI: $5.00 per million input tokens, $30.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.5 through Everstack Call GPT-5.5 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Luna on OpenAI Source: https://everstack.ai/models/openai/gpt-5.6-luna Browser title: GPT-5.6 Luna on OpenAI | Everstack Page type: website Review GPT-5.6 Luna on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Luna pricing and limits on OpenAI Token pricing through OpenAI: $0.200 per million input tokens, $1.20 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-luna. Catalog status: stable. #### Routing GPT-5.6 Luna through Everstack Call GPT-5.6 Luna on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Sol on OpenAI Source: https://everstack.ai/models/openai/gpt-5.6-sol Browser title: GPT-5.6 Sol on OpenAI | Everstack Page type: website Review GPT-5.6 Sol on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Sol pricing and limits on OpenAI Token pricing through OpenAI: $4.00 per million input tokens, $20.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-sol. Catalog status: stable. #### Routing GPT-5.6 Sol through Everstack Call GPT-5.6 Sol on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Terra on OpenAI Source: https://everstack.ai/models/openai/gpt-5.6-terra Browser title: GPT-5.6 Terra on OpenAI | Everstack Page type: website Review GPT-5.6 Terra on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Terra pricing and limits on OpenAI Token pricing through OpenAI: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-terra. Catalog status: stable. #### Routing GPT-5.6 Terra through Everstack Call GPT-5.6 Terra on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Source: https://everstack.ai/models/openai/gpt-5.6 Browser title: GPT-5.6: Pricing & Specs | Everstack Page type: website Review GPT-5.6 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 pricing and limits on OpenAI Token pricing through OpenAI: $4.00 per million input tokens, $20.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-sol. Catalog status: stable. #### Routing GPT-5.6 through Everstack Call GPT-5.6 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 on OpenAI Source: https://everstack.ai/models/openai/gpt-5 Browser title: GPT-5 on OpenAI | Everstack Page type: website Review GPT-5 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 pricing and limits on OpenAI Token pricing through OpenAI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 through Everstack Call GPT-5 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-6 Astra Source: https://everstack.ai/models/openai/gpt-6-astra Browser title: GPT-6 Astra: Pricing & Specs | Everstack Page type: website Review GPT-6 Astra on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-6 Astra pricing and limits on OpenAI Token pricing through OpenAI: $10.00 per million input tokens, $50.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning, computer_use, coding. Accepts text, image, pdf input. Returns text output. Model family: gpt-6. Catalog status: stable. #### Routing GPT-6 Astra through Everstack Call GPT-6 Astra on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT Audio 2025 08 28 Source: https://everstack.ai/models/openai/gpt-audio-2025-08-28 Browser title: GPT Audio 2025 08 28: Pricing & Specs | Everstack Page type: website Review GPT Audio 2025 08 28 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT Audio 2025 08 28 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing GPT Audio 2025 08 28 through Everstack Call GPT Audio 2025 08 28 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT Audio Mini 2025 10 06 Source: https://everstack.ai/models/openai/gpt-audio-mini-2025-10-06 Browser title: GPT Audio Mini 2025 10 06: Pricing & Specs | Everstack Page type: website Review GPT Audio Mini 2025 10 06 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT Audio Mini 2025 10 06 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing GPT Audio Mini 2025 10 06 through Everstack Call GPT Audio Mini 2025 10 06 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT Audio Mini 2025 12 15 Source: https://everstack.ai/models/openai/gpt-audio-mini-2025-12-15 Browser title: GPT Audio Mini 2025 12 15: Pricing & Specs | Everstack Page type: website Review GPT Audio Mini 2025 12 15 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT Audio Mini 2025 12 15 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing GPT Audio Mini 2025 12 15 through Everstack Call GPT Audio Mini 2025 12 15 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt Audio Mini Source: https://everstack.ai/models/openai/gpt-audio-mini Browser title: Gpt Audio Mini: Pricing & Specs | Everstack Page type: website Review Gpt Audio Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt Audio Mini pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing Gpt Audio Mini through Everstack Call Gpt Audio Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt Audio Source: https://everstack.ai/models/openai/gpt-audio Browser title: Gpt Audio: Pricing & Specs | Everstack Page type: website Review Gpt Audio on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt Audio pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing Gpt Audio through Everstack Call Gpt Audio on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt Image 1 Mini Source: https://everstack.ai/models/openai/gpt-image-1-mini Browser title: Gpt Image 1 Mini: Pricing & Specs | Everstack Page type: website Review Gpt Image 1 Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt Image 1 Mini pricing and limits on OpenAI Token pricing through OpenAI: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 0 token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text, image output. Model family: other. Catalog status: stable. #### Routing Gpt Image 1 Mini through Everstack Call Gpt Image 1 Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt Image 1.5 Source: https://everstack.ai/models/openai/gpt-image-1.5 Browser title: Gpt Image 1.5: Pricing & Specs | Everstack Page type: website Review Gpt Image 1.5 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt Image 1.5 pricing and limits on OpenAI Token pricing through OpenAI: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 0 token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text, image output. Model family: other. Catalog status: stable. #### Routing Gpt Image 1.5 through Everstack Call Gpt Image 1.5 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt Image 1 Source: https://everstack.ai/models/openai/gpt-image-1 Browser title: Gpt Image 1: Pricing & Specs | Everstack Page type: website Review Gpt Image 1 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt Image 1 pricing and limits on OpenAI Token pricing through OpenAI: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 0 token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns image output. Model family: other. Catalog status: deprecated. #### Routing Gpt Image 1 through Everstack Call Gpt Image 1 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-Realtime-2.1 Source: https://everstack.ai/models/openai/gpt-realtime-2.1 Browser title: GPT-Realtime-2.1: Pricing & Specs | Everstack Page type: website Review GPT-Realtime-2.1 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-Realtime-2.1 pricing and limits on OpenAI Token pricing through OpenAI: $4.00 per million input tokens, $24.00 per million output tokens. Limits: 128K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, audio, image input. Returns text, audio output. Model family: gpt. Catalog status: stable. #### Routing GPT-Realtime-2.1 through Everstack Call GPT-Realtime-2.1 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT Realtime 2025 08 28 Source: https://everstack.ai/models/openai/gpt-realtime-2025-08-28 Browser title: GPT Realtime 2025 08 28: Pricing & Specs | Everstack Page type: website Review GPT Realtime 2025 08 28 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT Realtime 2025 08 28 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing GPT Realtime 2025 08 28 through Everstack Call GPT Realtime 2025 08 28 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT Realtime Mini 2025 10 06 Source: https://everstack.ai/models/openai/gpt-realtime-mini-2025-10-06 Browser title: GPT Realtime Mini 2025 10 06: Pricing & Specs | Everstack Page type: website Review GPT Realtime Mini 2025 10 06 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT Realtime Mini 2025 10 06 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing GPT Realtime Mini 2025 10 06 through Everstack Call GPT Realtime Mini 2025 10 06 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT Realtime Mini 2025 12 15 Source: https://everstack.ai/models/openai/gpt-realtime-mini-2025-12-15 Browser title: GPT Realtime Mini 2025 12 15: Pricing & Specs | Everstack Page type: website Review GPT Realtime Mini 2025 12 15 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT Realtime Mini 2025 12 15 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing GPT Realtime Mini 2025 12 15 through Everstack Call GPT Realtime Mini 2025 12 15 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt Realtime Mini Source: https://everstack.ai/models/openai/gpt-realtime-mini Browser title: Gpt Realtime Mini: Pricing & Specs | Everstack Page type: website Review Gpt Realtime Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt Realtime Mini pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing Gpt Realtime Mini through Everstack Call Gpt Realtime Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gpt Realtime Source: https://everstack.ai/models/openai/gpt-realtime Browser title: Gpt Realtime: Pricing & Specs | Everstack Page type: website Review Gpt Realtime on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gpt Realtime pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing Gpt Realtime through Everstack Call Gpt Realtime on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O1 2024 12 17 Source: https://everstack.ai/models/openai/o1-2024-12-17 Browser title: O1 2024 12 17: Pricing & Specs | Everstack Page type: website Review O1 2024 12 17 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O1 2024 12 17 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing O1 2024 12 17 through Everstack Call O1 2024 12 17 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O1 Pro 2025 03 19 Source: https://everstack.ai/models/openai/o1-pro-2025-03-19 Browser title: O1 Pro 2025 03 19: Pricing & Specs | Everstack Page type: website Review O1 Pro 2025 03 19 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O1 Pro 2025 03 19 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing O1 Pro 2025 03 19 through Everstack Call O1 Pro 2025 03 19 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O1 Pro Source: https://everstack.ai/models/openai/o1-pro Browser title: O1 Pro: Pricing & Specs | Everstack Page type: website Review O1 Pro on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O1 Pro pricing and limits on OpenAI Token pricing through OpenAI: $150.00 per million input tokens, $600.00 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: o-series. Catalog status: deprecated. #### Routing O1 Pro through Everstack Call O1 Pro on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O1 Source: https://everstack.ai/models/openai/o1 Browser title: O1: Pricing & Specs | Everstack Page type: website Review O1 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O1 pricing and limits on OpenAI Token pricing through OpenAI: $15.00 per million input tokens, $60.00 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: o-series. Catalog status: deprecated. #### Routing O1 through Everstack Call O1 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O3 2025 04 16 Source: https://everstack.ai/models/openai/o3-2025-04-16 Browser title: O3 2025 04 16: Pricing & Specs | Everstack Page type: website Review O3 2025 04 16 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O3 2025 04 16 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing O3 2025 04 16 through Everstack Call O3 2025 04 16 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### o3 Deep Research Source: https://everstack.ai/models/openai/o3-deep-research Browser title: o3 Deep Research: Pricing & Specs | Everstack Page type: website Review o3 Deep Research on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### o3 Deep Research pricing and limits on OpenAI Token pricing through OpenAI: $10.00 per million input tokens, $40.00 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning, deep_research. Accepts text, image input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing o3 Deep Research through Everstack Call o3 Deep Research on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O3 Mini 2025 01 31 Source: https://everstack.ai/models/openai/o3-mini-2025-01-31 Browser title: O3 Mini 2025 01 31: Pricing & Specs | Everstack Page type: website Review O3 Mini 2025 01 31 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O3 Mini 2025 01 31 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing O3 Mini 2025 01 31 through Everstack Call O3 Mini 2025 01 31 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O3 Mini on OpenAI Source: https://everstack.ai/models/openai/o3-mini Browser title: O3 Mini on OpenAI | Everstack Page type: website Review O3 Mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O3 Mini pricing and limits on OpenAI Token pricing through OpenAI: $1.10 per million input tokens, $4.40 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: o-series. Catalog status: deprecated. #### Routing O3 Mini through Everstack Call O3 Mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### o3-pro Source: https://everstack.ai/models/openai/o3-pro Browser title: o3-pro: Pricing & Specs | Everstack Page type: website Review o3-pro on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### o3-pro pricing and limits on OpenAI Token pricing through OpenAI: $20.00 per million input tokens, $80.00 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing o3-pro through Everstack Call o3-pro on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### o3 on OpenAI Source: https://everstack.ai/models/openai/o3 Browser title: o3 on OpenAI | Everstack Page type: website Review o3 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### o3 pricing and limits on OpenAI Token pricing through OpenAI: $2.00 per million input tokens, $8.00 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing o3 through Everstack Call o3 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O4 Mini 2025 04 16 Source: https://everstack.ai/models/openai/o4-mini-2025-04-16 Browser title: O4 Mini 2025 04 16: Pricing & Specs | Everstack Page type: website Review O4 Mini 2025 04 16 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O4 Mini 2025 04 16 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing O4 Mini 2025 04 16 through Everstack Call O4 Mini 2025 04 16 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O4 Mini Deep Research 2025 06 26 Source: https://everstack.ai/models/openai/o4-mini-deep-research-2025-06-26 Browser title: O4 Mini Deep Research 2025 06 26: Pricing & Specs | Everstack Page type: website Review O4 Mini Deep Research 2025 06 26 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O4 Mini Deep Research 2025 06 26 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing O4 Mini Deep Research 2025 06 26 through Everstack Call O4 Mini Deep Research 2025 06 26 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### O4 Mini Deep Research Source: https://everstack.ai/models/openai/o4-mini-deep-research Browser title: O4 Mini Deep Research: Pricing & Specs | Everstack Page type: website Review O4 Mini Deep Research on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### O4 Mini Deep Research pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: o-series. Catalog status: stable. #### Routing O4 Mini Deep Research through Everstack Call O4 Mini Deep Research on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### o4-mini on OpenAI Source: https://everstack.ai/models/openai/o4-mini Browser title: o4-mini on OpenAI | Everstack Page type: website Review o4-mini on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### o4-mini pricing and limits on OpenAI Token pricing through OpenAI: $1.10 per million input tokens, $4.40 per million output tokens. Limits: 200K token context window, 100K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: o-series. Catalog status: deprecated. #### Routing o4-mini through Everstack Call o4-mini on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Omni Moderation 2024 09 26 Source: https://everstack.ai/models/openai/omni-moderation-2024-09-26 Browser title: Omni Moderation 2024 09 26: Pricing & Specs | Everstack Page type: website Review Omni Moderation 2024 09 26 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Omni Moderation 2024 09 26 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing Omni Moderation 2024 09 26 through Everstack Call Omni Moderation 2024 09 26 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Omni Moderation Latest Source: https://everstack.ai/models/openai/omni-moderation-latest Browser title: Omni Moderation Latest: Pricing & Specs | Everstack Page type: website Review Omni Moderation Latest on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Omni Moderation Latest pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing Omni Moderation Latest through Everstack Call Omni Moderation Latest on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Sora 2 Pro Source: https://everstack.ai/models/openai/sora-2-pro Browser title: Sora 2 Pro: Pricing & Specs | Everstack Page type: website Review Sora 2 Pro on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Sora 2 Pro pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing Sora 2 Pro through Everstack Call Sora 2 Pro on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Sora 2 Source: https://everstack.ai/models/openai/sora-2 Browser title: Sora 2: Pricing & Specs | Everstack Page type: website Review Sora 2 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Sora 2 pricing and limits on OpenAI Token pricing for this model is not published in the catalog. Limits: 128K token context window. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: other. Catalog status: stable. #### Routing Sora 2 through Everstack Call Sora 2 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Text Embedding 3 Large on OpenAI Source: https://everstack.ai/models/openai/text-embedding-3-large Browser title: Text Embedding 3 Large on OpenAI | Everstack Page type: website Review Text Embedding 3 Large on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Text Embedding 3 Large pricing and limits on OpenAI Token pricing through OpenAI: $0.130 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 3K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: embedding. Catalog status: stable. #### Routing Text Embedding 3 Large through Everstack Call Text Embedding 3 Large on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Text Embedding 3 Small on OpenAI Source: https://everstack.ai/models/openai/text-embedding-3-small Browser title: Text Embedding 3 Small on OpenAI | Everstack Page type: website Review Text Embedding 3 Small on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Text Embedding 3 Small pricing and limits on OpenAI Token pricing through OpenAI: $0.020 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 2K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: embedding. Catalog status: stable. #### Routing Text Embedding 3 Small through Everstack Call Text Embedding 3 Small on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Text Embedding Ada 002 on OpenAI Source: https://everstack.ai/models/openai/text-embedding-ada-002 Browser title: Text Embedding Ada 002 on OpenAI | Everstack Page type: website Review Text Embedding Ada 002 on OpenAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Text Embedding Ada 002 pricing and limits on OpenAI Token pricing through OpenAI: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 2K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: embedding. Catalog status: stable. #### Routing Text Embedding Ada 002 through Everstack Call Text Embedding Ada 002 on OpenAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### OpenRouter AI models Source: https://everstack.ai/models/openrouter Browser title: OpenRouter AI Models & Pricing | Everstack Page type: website Browse 64 OpenRouter AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare OpenRouter models in one catalog Review 64 OpenRouter models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Claude Fable 5 on OpenRouter Source: https://everstack.ai/models/openrouter/anthropic-claude-fable-5 Browser title: Claude Fable 5 on OpenRouter | Everstack Page type: website Review Claude Fable 5 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Fable 5 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $10.00 per million input tokens, $50.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-fable. Catalog status: stable. #### Routing Claude Fable 5 (OpenRouter) through Everstack Call Claude Fable 5 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Haiku 4.5 (OR) Source: https://everstack.ai/models/openrouter/anthropic-claude-haiku-4.5 Browser title: Claude Haiku 4.5 (OR): Pricing & Specs | Everstack Page type: website Review Claude Haiku 4.5 (OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Haiku 4.5 (OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $1.00 per million input tokens, $5.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Haiku 4.5 (OR) through Everstack Call Claude Haiku 4.5 (OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.7 (OR) Source: https://everstack.ai/models/openrouter/anthropic-claude-opus-4.7 Browser title: Claude Opus 4.7 (OR): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.7 (OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.7 (OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.7 (OR) through Everstack Call Claude Opus 4.7 (OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.8 (Fast) (OpenRouter) Source: https://everstack.ai/models/openrouter/anthropic-claude-opus-4.8-fast Browser title: Claude Opus 4.8 (Fast) (OpenRouter): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.8 (Fast) (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalo… #### Claude Opus 4.8 (Fast) (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $10.00 per million input tokens, $50.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 4.8 (Fast) (OpenRouter) through Everstack Call Claude Opus 4.8 (Fast) (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.8 (OpenRouter) Source: https://everstack.ai/models/openrouter/anthropic-claude-opus-4.8 Browser title: Claude Opus 4.8 (OpenRouter): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.8 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.8 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 4.8 (OpenRouter) through Everstack Call Claude Opus 4.8 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 5 (Fast) (OpenRouter) Source: https://everstack.ai/models/openrouter/anthropic-claude-opus-5-fast Browser title: Claude Opus 5 (Fast) (OpenRouter): Pricing & Specs | Everstack Page type: website Review Claude Opus 5 (Fast) (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 5 (Fast) (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $10.00 per million input tokens, $50.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 5 (Fast) (OpenRouter) through Everstack Call Claude Opus 5 (Fast) (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 5 on OpenRouter Source: https://everstack.ai/models/openrouter/anthropic-claude-opus-5 Browser title: Claude Opus 5 on OpenRouter | Everstack Page type: website Review Claude Opus 5 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 5 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 5 (OpenRouter) through Everstack Call Claude Opus 5 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4.6 (OR) Source: https://everstack.ai/models/openrouter/anthropic-claude-sonnet-4.6 Browser title: Claude Sonnet 4.6 (OR): Pricing & Specs | Everstack Page type: website Review Claude Sonnet 4.6 (OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4.6 (OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4.6 (OR) through Everstack Call Claude Sonnet 4.6 (OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4 on OpenRouter Source: https://everstack.ai/models/openrouter/anthropic-claude-sonnet-4 Browser title: Claude Sonnet 4 on OpenRouter | Everstack Page type: website Review Claude Sonnet 4 on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4 pricing and limits on OpenRouter Token pricing through OpenRouter: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts image, text, pdf input. Returns text output. Model family: claude. Catalog status: stable. #### Routing Claude Sonnet 4 through Everstack Call Claude Sonnet 4 on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 5 on OpenRouter Source: https://everstack.ai/models/openrouter/anthropic-claude-sonnet-5 Browser title: Claude Sonnet 5 on OpenRouter | Everstack Page type: website Review Claude Sonnet 5 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 5 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $10.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-sonnet. Catalog status: stable. #### Routing Claude Sonnet 5 (OpenRouter) through Everstack Call Claude Sonnet 5 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Seed 2.1 Turbo (OpenRouter) Source: https://everstack.ai/models/openrouter/bytedance-seed-seed-2-1-turbo Browser title: Seed 2.1 Turbo (OpenRouter): Pricing & Specs | Everstack Page type: website Review Seed 2.1 Turbo (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Seed 2.1 Turbo (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.500 per million input tokens, $2.50 per million output tokens. Limits: 262K token context window, 236K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: seed. Catalog status: stable. #### Routing Seed 2.1 Turbo (OpenRouter) through Everstack Call Seed 2.1 Turbo (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek R1 on OpenRouter Source: https://everstack.ai/models/openrouter/deepseek-deepseek-r1 Browser title: DeepSeek R1 on OpenRouter | Everstack Page type: website Review DeepSeek R1 on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek R1 pricing and limits on OpenRouter Token pricing through OpenRouter: $0.700 per million input tokens, $2.50 per million output tokens. Limits: 64K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-reasoning. Catalog status: stable. #### Routing DeepSeek R1 through Everstack Call DeepSeek R1 on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Flash 0731 on OpenRouter Source: https://everstack.ai/models/openrouter/deepseek-deepseek-v4-flash-0731 Browser title: DeepSeek V4 Flash 0731 on OpenRouter | Everstack Page type: website Review DeepSeek V4 Flash 0731 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalo… #### DeepSeek V4 Flash 0731 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.040 per million input tokens, $0.080 per million output tokens. Limits: 1311K token context window, 944K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-flash. Catalog status: stable. #### Routing DeepSeek V4 Flash 0731 (OpenRouter) through Everstack Call DeepSeek V4 Flash 0731 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Flash Vision Exp on OpenRouter Source: https://everstack.ai/models/openrouter/deepseek-deepseek-v4-flash-vision-exp Browser title: DeepSeek V4 Flash Vision Exp on OpenRouter | Everstack Page type: website Review DeepSeek V4 Flash Vision Exp (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model… #### DeepSeek V4 Flash Vision Exp (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.220 per million input tokens, $0.660 per million output tokens. Limits: 1049K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: deepseek-flash. Catalog status: stable. #### Routing DeepSeek V4 Flash Vision Exp (OpenRouter) through Everstack Call DeepSeek V4 Flash Vision Exp (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro 0813 on OpenRouter Source: https://everstack.ai/models/openrouter/deepseek-deepseek-v4-pro-0813 Browser title: DeepSeek V4 Pro 0813 on OpenRouter | Everstack Page type: website Review DeepSeek V4 Pro 0813 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro 0813 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $1.12 per million input tokens, $3.37 per million output tokens. Limits: 1049K token context window, 944K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-thinking. Catalog status: stable. #### Routing DeepSeek V4 Pro 0813 (OpenRouter) through Everstack Call DeepSeek V4 Pro 0813 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro (OR) on OpenRouter Source: https://everstack.ai/models/openrouter/deepseek-deepseek-v4-pro Browser title: DeepSeek V4 Pro (OR) on OpenRouter | Everstack Page type: website Review DeepSeek V4 Pro (OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro (OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.573 per million input tokens, $1.15 per million output tokens. Limits: 1049K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek V4 Pro (OR) through Everstack Call DeepSeek V4 Pro (OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 2.5 Pro on OpenRouter Source: https://everstack.ai/models/openrouter/google-gemini-2.5-pro Browser title: Gemini 2.5 Pro on OpenRouter | Everstack Page type: website Review Gemini 2.5 Pro on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 2.5 Pro pricing and limits on OpenRouter Token pricing through OpenRouter: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio, video, pdf input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 2.5 Pro through Everstack Call Gemini 2.5 Pro on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3 Pro (Preview, OR) on OpenRouter Source: https://everstack.ai/models/openrouter/google-gemini-3-pro-preview Browser title: Gemini 3 Pro (Preview, OR) on OpenRouter | Everstack Page type: website Review Gemini 3 Pro (Preview, OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3 Pro (Preview, OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1050K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio, video, pdf input. Returns text output. Model family: gemini-3. Catalog status: preview. #### Routing Gemini 3 Pro (Preview, OR) through Everstack Call Gemini 3 Pro (Preview, OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.5 Flash Lite on OpenRouter Source: https://everstack.ai/models/openrouter/google-gemini-3.5-flash-lite Browser title: Gemini 3.5 Flash Lite on OpenRouter | Everstack Page type: website Review Gemini 3.5 Flash Lite (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.5 Flash Lite (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.300 per million input tokens, $2.50 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash-lite. Catalog status: stable. #### Routing Gemini 3.5 Flash Lite (OpenRouter) through Everstack Call Gemini 3.5 Flash Lite (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.5 Flash on OpenRouter Source: https://everstack.ai/models/openrouter/google-gemini-3.5-flash Browser title: Gemini 3.5 Flash on OpenRouter | Everstack Page type: website Review Gemini 3.5 Flash (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.5 Flash (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $1.50 per million input tokens, $9.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.5 Flash (OpenRouter) through Everstack Call Gemini 3.5 Flash (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.6 Flash on OpenRouter Source: https://everstack.ai/models/openrouter/google-gemini-3.6-flash Browser title: Gemini 3.6 Flash on OpenRouter | Everstack Page type: website Review Gemini 3.6 Flash (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.6 Flash (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.750 per million input tokens, $3.75 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.6 Flash (OpenRouter) through Everstack Call Gemini 3.6 Flash (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.7 Flash on OpenRouter Source: https://everstack.ai/models/openrouter/google-gemini-3.7-flash Browser title: Gemini 3.7 Flash on OpenRouter | Everstack Page type: website Review Gemini 3.7 Flash (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.7 Flash (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.375 per million input tokens, $1.88 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.7 Flash (OpenRouter) through Everstack Call Gemini 3.7 Flash (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.3 70B Instruct on OpenRouter Source: https://everstack.ai/models/openrouter/meta-llama-llama-3.3-70b-instruct Browser title: Llama 3.3 70B Instruct on OpenRouter | Everstack Page type: website Review Llama 3.3 70B Instruct on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.3 70B Instruct pricing and limits on OpenRouter Token pricing through OpenRouter: $0.100 per million input tokens, $0.320 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.3 70B Instruct through Everstack Call Llama 3.3 70B Instruct on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Muse Glimmer 30B on OpenRouter Source: https://everstack.ai/models/openrouter/meta-muse-glimmer-30b Browser title: Muse Glimmer 30B on OpenRouter | Everstack Page type: website Review Muse Glimmer 30B (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Muse Glimmer 30B (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.350 per million input tokens, $1.50 per million output tokens. Limits: 131K token context window, 118K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: muse. Catalog status: stable. #### Routing Muse Glimmer 30B (OpenRouter) through Everstack Call Muse Glimmer 30B (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Muse Spark 1.2 (OpenRouter) Source: https://everstack.ai/models/openrouter/meta-muse-spark-1.2 Browser title: Muse Spark 1.2 (OpenRouter): Pricing & Specs | Everstack Page type: website Review Muse Spark 1.2 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Muse Spark 1.2 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $1.25 per million input tokens, $4.25 per million output tokens. Limits: 1049K token context window, 944K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, pdf, audio input. Returns text output. Model family: muse. Catalog status: stable. #### Routing Muse Spark 1.2 (OpenRouter) through Everstack Call Muse Spark 1.2 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### MiniMax-M3 on OpenRouter Source: https://everstack.ai/models/openrouter/minimax-minimax-m3 Browser title: MiniMax-M3 on OpenRouter | Everstack Page type: website Review MiniMax-M3 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax-M3 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 1049K token context window, 512K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax-M3 (OpenRouter) through Everstack Call MiniMax-M3 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Large Source: https://everstack.ai/models/openrouter/mistralai-mistral-large Browser title: Mistral Large: Pricing & Specs | Everstack Page type: website Review Mistral Large on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Large pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 128K token context window, 102K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text, pdf input. Returns text output. Model family: mistral. Catalog status: stable. #### Routing Mistral Large through Everstack Call Mistral Large on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.6 (OR) on OpenRouter Source: https://everstack.ai/models/openrouter/moonshotai-kimi-k2.6 Browser title: Kimi K2.6 (OR) on OpenRouter | Everstack Page type: website Review Kimi K2.6 (OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.6 (OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 236K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi. Catalog status: stable. #### Routing Kimi K2.6 (OR) through Everstack Call Kimi K2.6 (OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.7 Code on OpenRouter Source: https://everstack.ai/models/openrouter/moonshotai-kimi-k2.7-code Browser title: Kimi K2.7 Code on OpenRouter | Everstack Page type: website Review Kimi K2.7 Code (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.7 Code (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.670 per million input tokens, $3.40 per million output tokens. Limits: 262K token context window, 236K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2.7 Code (OpenRouter) through Everstack Call Kimi K2.7 Code (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K3 on OpenRouter Source: https://everstack.ai/models/openrouter/moonshotai-kimi-k3 Browser title: Kimi K3 on OpenRouter | Everstack Page type: website Review Kimi K3 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K3 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1049K token context window, 944K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi-k3. Catalog status: stable. #### Routing Kimi K3 (OpenRouter) through Everstack Call Kimi K3 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Nemotron 3 Ultra 550B A55B on OpenRouter Source: https://everstack.ai/models/openrouter/nvidia-nemotron-3-ultra-550b-a55b Browser title: Nemotron 3 Ultra 550B A55B on OpenRouter | Everstack Page type: website Review Nemotron 3 Ultra 550B A55B (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model ca… #### Nemotron 3 Ultra 550B A55B (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.600 per million input tokens, $3.60 per million output tokens. Limits: 512K token context window, 461K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: nemotron. Catalog status: stable. #### Routing Nemotron 3 Ultra 550B A55B (OpenRouter) through Everstack Call Nemotron 3 Ultra 550B A55B (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Nemotron 3.5 Lightning 30B A3B (OpenRouter) Source: https://everstack.ai/models/openrouter/nvidia-nemotron-3.5-lightning Browser title: Nemotron 3.5 Lightning 30B A3B (OpenRouter): Pricing & Specs | Everstack Page type: website Review Nemotron 3.5 Lightning 30B A3B (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack mode… #### Nemotron 3.5 Lightning 30B A3B (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.080 per million input tokens, $0.200 per million output tokens. Limits: 262K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: nemotron. Catalog status: stable. #### Routing Nemotron 3.5 Lightning 30B A3B (OpenRouter) through Everstack Call Nemotron 3.5 Lightning 30B A3B (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-3.5 Turbo on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-3.5-turbo Browser title: GPT-3.5 Turbo on OpenRouter | Everstack Page type: website Review GPT-3.5 Turbo on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-3.5 Turbo pricing and limits on OpenRouter Token pricing through OpenRouter: $0.500 per million input tokens, $1.50 per million output tokens. Limits: 16K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: gpt-3.5. Catalog status: stable. #### Routing GPT-3.5 Turbo through Everstack Call GPT-3.5 Turbo on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4 Turbo on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-4-turbo Browser title: GPT-4 Turbo on OpenRouter | Everstack Page type: website Review GPT-4 Turbo on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4 Turbo pricing and limits on OpenRouter Token pricing through OpenRouter: $10.00 per million input tokens, $30.00 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT-4 Turbo through Everstack Call GPT-4 Turbo on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4 on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-4 Browser title: GPT-4 on OpenRouter | Everstack Page type: website Review GPT-4 on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4 pricing and limits on OpenRouter Token pricing through OpenRouter: $30.00 per million input tokens, $60.00 per million output tokens. Limits: 8K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT-4 through Everstack Call GPT-4 on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4o Mini on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-4o-mini Browser title: GPT-4o Mini on OpenRouter | Everstack Page type: website Review GPT-4o Mini on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4o Mini pricing and limits on OpenRouter Token pricing through OpenRouter: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, pdf input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT-4o Mini through Everstack Call GPT-4o Mini on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-4o on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-4o Browser title: GPT-4o on OpenRouter | Everstack Page type: website Review GPT-4o on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-4o pricing and limits on OpenRouter Token pricing through OpenRouter: $2.50 per million input tokens, $10.00 per million output tokens. Limits: 128K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, pdf input. Returns text output. Model family: gpt-4. Catalog status: stable. #### Routing GPT-4o through Everstack Call GPT-4o on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.5 (OR) on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-5.5 Browser title: GPT-5.5 (OR) on OpenRouter | Everstack Page type: website Review GPT-5.5 (OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.5 (OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $5.00 per million input tokens, $30.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5.5 (OR) through Everstack Call GPT-5.5 (OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Luna Pro (OpenRouter) Source: https://everstack.ai/models/openrouter/openai-gpt-5.6-luna-pro Browser title: GPT-5.6 Luna Pro (OpenRouter): Pricing & Specs | Everstack Page type: website Review GPT-5.6 Luna Pro (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Luna Pro (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.200 per million input tokens, $1.20 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-luna. Catalog status: stable. #### Routing GPT-5.6 Luna Pro (OpenRouter) through Everstack Call GPT-5.6 Luna Pro (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Luna on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-5.6-luna Browser title: GPT-5.6 Luna on OpenRouter | Everstack Page type: website Review GPT-5.6 Luna (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Luna (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.200 per million input tokens, $1.20 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-luna. Catalog status: stable. #### Routing GPT-5.6 Luna (OpenRouter) through Everstack Call GPT-5.6 Luna (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Sol Pro (OpenRouter) Source: https://everstack.ai/models/openrouter/openai-gpt-5.6-sol-pro Browser title: GPT-5.6 Sol Pro (OpenRouter): Pricing & Specs | Everstack Page type: website Review GPT-5.6 Sol Pro (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Sol Pro (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $10.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-sol. Catalog status: stable. #### Routing GPT-5.6 Sol Pro (OpenRouter) through Everstack Call GPT-5.6 Sol Pro (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Sol on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-5.6-sol Browser title: GPT-5.6 Sol on OpenRouter | Everstack Page type: website Review GPT-5.6 Sol (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Sol (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $10.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-sol. Catalog status: stable. #### Routing GPT-5.6 Sol (OpenRouter) through Everstack Call GPT-5.6 Sol (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Terra Pro (OpenRouter) Source: https://everstack.ai/models/openrouter/openai-gpt-5.6-terra-pro Browser title: GPT-5.6 Terra Pro (OpenRouter): Pricing & Specs | Everstack Page type: website Review GPT-5.6 Terra Pro (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Terra Pro (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-terra. Catalog status: stable. #### Routing GPT-5.6 Terra Pro (OpenRouter) through Everstack Call GPT-5.6 Terra Pro (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5.6 Terra on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-5.6-terra Browser title: GPT-5.6 Terra on OpenRouter | Everstack Page type: website Review GPT-5.6 Terra (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5.6 Terra (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1050K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-terra. Catalog status: stable. #### Routing GPT-5.6 Terra (OpenRouter) through Everstack Call GPT-5.6 Terra (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT-5 (OR) on OpenRouter Source: https://everstack.ai/models/openrouter/openai-gpt-5 Browser title: GPT-5 (OR) on OpenRouter | Everstack Page type: website Review GPT-5 (OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT-5 (OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 400K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: gpt-5. Catalog status: stable. #### Routing GPT-5 (OR) through Everstack Call GPT-5 (OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### text-embedding-3-large on OpenRouter Source: https://everstack.ai/models/openrouter/openai-text-embedding-3-large Browser title: text-embedding-3-large on OpenRouter | Everstack Page type: website Review text-embedding-3-large on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### text-embedding-3-large pricing and limits on OpenRouter Token pricing through OpenRouter: $0.130 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embedding. Catalog status: stable. #### Routing text-embedding-3-large through Everstack Call text-embedding-3-large on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Text Embedding Ada 002 on OpenRouter Source: https://everstack.ai/models/openrouter/openai-text-embedding-ada-002 Browser title: Text Embedding Ada 002 on OpenRouter | Everstack Page type: website Review Text Embedding Ada 002 on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Text Embedding Ada 002 pricing and limits on OpenRouter Token pricing through OpenRouter: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embedding. Catalog status: stable. #### Routing Text Embedding Ada 002 through Everstack Call Text Embedding Ada 002 on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.7 Max on OpenRouter Source: https://everstack.ai/models/openrouter/qwen-qwen3.7-max Browser title: Qwen3.7 Max on OpenRouter | Everstack Page type: website Review Qwen3.7 Max (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.7 Max (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $1.47 per million input tokens, $4.42 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.7 Max (OpenRouter) through Everstack Call Qwen3.7 Max (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.7 Plus on OpenRouter Source: https://everstack.ai/models/openrouter/qwen-qwen3.7-plus Browser title: Qwen3.7 Plus on OpenRouter | Everstack Page type: website Review Qwen3.7 Plus (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.7 Plus (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.320 per million input tokens, $1.28 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.7 Plus (OpenRouter) through Everstack Call Qwen3.7 Plus (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.8 2.4T A95B on OpenRouter Source: https://everstack.ai/models/openrouter/qwen-qwen3.8-2.4t-a95b Browser title: Qwen3.8 2.4T A95B on OpenRouter | Everstack Page type: website Review Qwen3.8 2.4T A95B (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.8 2.4T A95B (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 1049K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.8 2.4T A95B (OpenRouter) through Everstack Call Qwen3.8 2.4T A95B (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.8 27B (OpenRouter) Source: https://everstack.ai/models/openrouter/qwen-qwen3.8-27b Browser title: Qwen3.8 27B (OpenRouter): Pricing & Specs | Everstack Page type: website Review Qwen3.8 27B (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.8 27B (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.400 per million input tokens, $2.55 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.8 27B (OpenRouter) through Everstack Call Qwen3.8 27B (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.8 Max on OpenRouter Source: https://everstack.ai/models/openrouter/qwen-qwen3.8-max Browser title: Qwen3.8 Max on OpenRouter | Everstack Page type: website Review Qwen3.8 Max (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.8 Max (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.8 Max (OpenRouter) through Everstack Call Qwen3.8 Max (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Sakana Namazu (OpenRouter) Source: https://everstack.ai/models/openrouter/sakana-sakana-namazu Browser title: Sakana Namazu (OpenRouter): Pricing & Specs | Everstack Page type: website Review Sakana Namazu (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Sakana Namazu (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: sakana-namazu. Catalog status: stable. #### Routing Sakana Namazu (OpenRouter) through Everstack Call Sakana Namazu (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Step 3.7 Flash on OpenRouter Source: https://everstack.ai/models/openrouter/stepfun-step-3.7-flash Browser title: Step 3.7 Flash on OpenRouter | Everstack Page type: website Review Step 3.7 Flash (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Step 3.7 Flash (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.200 per million input tokens, $1.15 per million output tokens. Limits: 262K token context window, 230K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: stepfun/step-3.7-flash. Catalog status: stable. #### Routing Step 3.7 Flash (OpenRouter) through Everstack Call Step 3.7 Flash (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Hy-MT2-30B-A3B (OpenRouter) Source: https://everstack.ai/models/openrouter/tencent-hy-mt2-30b-a3b Browser title: Hy-MT2-30B-A3B (OpenRouter): Pricing & Specs | Everstack Page type: website Review Hy-MT2-30B-A3B (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Hy-MT2-30B-A3B (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.074 per million input tokens, $0.295 per million output tokens. Limits: 8K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: Hy. Catalog status: stable. #### Routing Hy-MT2-30B-A3B (OpenRouter) through Everstack Call Hy-MT2-30B-A3B (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Inkling Small on OpenRouter Source: https://everstack.ai/models/openrouter/thinkingmachines-inkling-small Browser title: Inkling Small on OpenRouter | Everstack Page type: website Review Inkling Small (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Inkling Small (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.450 per million input tokens, $1.20 per million output tokens. Limits: 1049K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio input. Returns text output. Model family: ling. Catalog status: stable. #### Routing Inkling Small (OpenRouter) through Everstack Call Inkling Small (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Inkling on OpenRouter Source: https://everstack.ai/models/openrouter/thinkingmachines-inkling Browser title: Inkling on OpenRouter | Everstack Page type: website Review Inkling (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Inkling (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.950 per million input tokens, $4.05 per million output tokens. Limits: 1049K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio input. Returns text output. Model family: ling. Catalog status: stable. #### Routing Inkling (OpenRouter) through Everstack Call Inkling (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Solar Pro 4 (OpenRouter) Source: https://everstack.ai/models/openrouter/upstage-solar-pro4 Browser title: Solar Pro 4 (OpenRouter): Pricing & Specs | Everstack Page type: website Review Solar Pro 4 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Solar Pro 4 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $0.030 per million input tokens, $0.120 per million output tokens. Limits: 524K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: solar. Catalog status: stable. #### Routing Solar Pro 4 (OpenRouter) through Everstack Call Solar Pro 4 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 3 Beta on OpenRouter Source: https://everstack.ai/models/openrouter/x-ai-grok-3-beta Browser title: Grok 3 Beta on OpenRouter | Everstack Page type: website Review Grok 3 Beta on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 3 Beta pricing and limits on OpenRouter Token pricing through OpenRouter: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: grok. Catalog status: preview. #### Routing Grok 3 Beta through Everstack Call Grok 3 Beta on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.5 on OpenRouter Source: https://everstack.ai/models/openrouter/x-ai-grok-4.5 Browser title: Grok 4.5 on OpenRouter | Everstack Page type: website Review Grok 4.5 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.5 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 500K token context window, 450K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.5 (OpenRouter) through Everstack Call Grok 4.5 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.6 on OpenRouter Source: https://everstack.ai/models/openrouter/x-ai-grok-4.6 Browser title: Grok 4.6 on OpenRouter | Everstack Page type: website Review Grok 4.6 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.6 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 500K token context window, 450K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.6 (OpenRouter) through Everstack Call Grok 4.6 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4 (OR) on OpenRouter Source: https://everstack.ai/models/openrouter/x-ai-grok-4 Browser title: Grok 4 (OR) on OpenRouter | Everstack Page type: website Review Grok 4 (OR) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4 (OR) pricing and limits on OpenRouter Token pricing through OpenRouter: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 256K token context window, 32K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4 (OR) through Everstack Call Grok 4 (OR) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.2 on OpenRouter Source: https://everstack.ai/models/openrouter/z-ai-glm-5.2 Browser title: GLM-5.2 on OpenRouter | Everstack Page type: website Review GLM-5.2 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.2 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $1.19 per million input tokens, $3.74 per million output tokens. Limits: 1049K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.2 (OpenRouter) through Everstack Call GLM-5.2 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.3 on OpenRouter Source: https://everstack.ai/models/openrouter/z-ai-glm-5.3 Browser title: GLM-5.3 on OpenRouter | Everstack Page type: website Review GLM-5.3 (OpenRouter) on OpenRouter: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.3 (OpenRouter) pricing and limits on OpenRouter Token pricing through OpenRouter: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 1049K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.3 (OpenRouter) through Everstack Call GLM-5.3 (OpenRouter) on OpenRouter through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Perplexity AI models Source: https://everstack.ai/models/perplexity Browser title: Perplexity AI Models & Pricing | Everstack Page type: website Browse 5 Perplexity AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Perplexity models in one catalog Review 5 Perplexity models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Sonar Deep Research Source: https://everstack.ai/models/perplexity/sonar-deep-research Browser title: Sonar Deep Research: Pricing & Specs | Everstack Page type: website Review Sonar Deep Research on Perplexity: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Sonar Deep Research pricing and limits on Perplexity Token pricing through Perplexity: $2.00 per million input tokens, $8.00 per million output tokens. Limits: 128K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, reasoning. Accepts text input. Returns text output. Model family: sonar. Catalog status: stable. #### Routing Sonar Deep Research through Everstack Call Sonar Deep Research on Perplexity through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Sonar Pro Source: https://everstack.ai/models/perplexity/sonar-pro Browser title: Sonar Pro: Pricing & Specs | Everstack Page type: website Review Sonar Pro on Perplexity: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Sonar Pro pricing and limits on Perplexity Token pricing through Perplexity: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text output. Model family: sonar. Catalog status: stable. #### Routing Sonar Pro through Everstack Call Sonar Pro on Perplexity through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Sonar Reasoning Pro Source: https://everstack.ai/models/perplexity/sonar-reasoning-pro Browser title: Sonar Reasoning Pro: Pricing & Specs | Everstack Page type: website Review Sonar Reasoning Pro on Perplexity: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Sonar Reasoning Pro pricing and limits on Perplexity Token pricing through Perplexity: $2.00 per million input tokens, $8.00 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision, reasoning. Accepts text, image input. Returns text output. Model family: sonar. Catalog status: stable. #### Routing Sonar Reasoning Pro through Everstack Call Sonar Reasoning Pro on Perplexity through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Sonar Reasoning Source: https://everstack.ai/models/perplexity/sonar-reasoning Browser title: Sonar Reasoning: Pricing & Specs | Everstack Page type: website Review Sonar Reasoning on Perplexity: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Sonar Reasoning pricing and limits on Perplexity Token pricing through Perplexity: $2.00 per million input tokens, $8.00 per million output tokens. Limits: 127K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: sonar. Catalog status: deprecated. #### Routing Sonar Reasoning through Everstack Call Sonar Reasoning on Perplexity through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Sonar Source: https://everstack.ai/models/perplexity/sonar Browser title: Sonar: Pricing & Specs | Everstack Page type: website Review Sonar on Perplexity: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Sonar pricing and limits on Perplexity Token pricing through Perplexity: $1.00 per million input tokens, $1.00 per million output tokens. Limits: 128K token context window, 4K max output tokens. #### Capabilities and modalities Supported capabilities: chat. Accepts text input. Returns text output. Model family: sonar. Catalog status: stable. #### Routing Sonar through Everstack Call Sonar on Perplexity through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen AI models Source: https://everstack.ai/models/qwen Browser title: Qwen AI Models & Pricing | Everstack Page type: website Browse 51 Qwen AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Qwen models in one catalog Review 51 Qwen models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### DeepSeek V4 Flash 0731 Source: https://everstack.ai/models/qwen/deepseek-v4-flash-0731 Browser title: DeepSeek V4 Flash 0731: Pricing & Specs | Everstack Page type: website Review DeepSeek V4 Flash 0731 on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Flash 0731 pricing and limits on Qwen Token pricing through Qwen: $0.200 per million input tokens, $0.400 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-flash. Catalog status: stable. #### Routing DeepSeek V4 Flash 0731 through Everstack Call DeepSeek V4 Flash 0731 on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.2 on Qwen Source: https://everstack.ai/models/qwen/glm-5.2 Browser title: GLM-5.2 on Qwen | Everstack Page type: website Review GLM-5.2 on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.2 pricing and limits on Qwen Token pricing through Qwen: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.2 through Everstack Call GLM-5.2 on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### QVQ Max Source: https://everstack.ai/models/qwen/qvq-max Browser title: QVQ Max: Pricing & Specs | Everstack Page type: website Review QVQ Max on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### QVQ Max pricing and limits on Qwen Token pricing through Qwen: $1.20 per million input tokens, $4.80 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: qvq. Catalog status: stable. #### Routing QVQ Max through Everstack Call QVQ Max on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen Flash Source: https://everstack.ai/models/qwen/qwen-flash Browser title: Qwen Flash: Pricing & Specs | Everstack Page type: website Review Qwen Flash on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen Flash pricing and limits on Qwen Token pricing through Qwen: $0.050 per million input tokens, $0.400 per million output tokens. Limits: 1000K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen Flash through Everstack Call Qwen Flash on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen Max Source: https://everstack.ai/models/qwen/qwen-max Browser title: Qwen Max: Pricing & Specs | Everstack Page type: website Review Qwen Max on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen Max pricing and limits on Qwen Token pricing through Qwen: $1.60 per million input tokens, $6.40 per million output tokens. Limits: 33K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen Max through Everstack Call Qwen Max on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen Plus Character (Japanese) Source: https://everstack.ai/models/qwen/qwen-plus-character-ja Browser title: Qwen Plus Character (Japanese): Pricing & Specs | Everstack Page type: website Review Qwen Plus Character (Japanese) on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen Plus Character (Japanese) pricing and limits on Qwen Token pricing through Qwen: $0.500 per million input tokens, $1.40 per million output tokens. Limits: 8K token context window, 512 max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen Plus Character (Japanese) through Everstack Call Qwen Plus Character (Japanese) on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen Plus Source: https://everstack.ai/models/qwen/qwen-plus Browser title: Qwen Plus: Pricing & Specs | Everstack Page type: website Review Qwen Plus on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen Plus pricing and limits on Qwen Token pricing through Qwen: $0.400 per million input tokens, $1.20 per million output tokens. Limits: 1000K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen Plus through Everstack Call Qwen Plus on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen Turbo Source: https://everstack.ai/models/qwen/qwen-turbo Browser title: Qwen Turbo: Pricing & Specs | Everstack Page type: website Review Qwen Turbo on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen Turbo pricing and limits on Qwen Token pricing through Qwen: $0.050 per million input tokens, $0.200 per million output tokens. Limits: 1000K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen Turbo through Everstack Call Qwen Turbo on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen VL Max Source: https://everstack.ai/models/qwen/qwen-vl-max Browser title: Qwen VL Max: Pricing & Specs | Everstack Page type: website Review Qwen VL Max on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen VL Max pricing and limits on Qwen Token pricing through Qwen: $0.800 per million input tokens, $3.20 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: qwen-vl. Catalog status: stable. #### Routing Qwen VL Max through Everstack Call Qwen VL Max on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen VL Plus Source: https://everstack.ai/models/qwen/qwen-vl-plus Browser title: Qwen VL Plus: Pricing & Specs | Everstack Page type: website Review Qwen VL Plus on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen VL Plus pricing and limits on Qwen Token pricing through Qwen: $0.210 per million input tokens, $0.630 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: qwen-vl. Catalog status: stable. #### Routing Qwen VL Plus through Everstack Call Qwen VL Plus on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen2.5 14B Instruct Source: https://everstack.ai/models/qwen/qwen2-5-14b-instruct Browser title: Qwen2.5 14B Instruct: Pricing & Specs | Everstack Page type: website Review Qwen2.5 14B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen2.5 14B Instruct pricing and limits on Qwen Token pricing through Qwen: $0.350 per million input tokens, $1.40 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen2.5 14B Instruct through Everstack Call Qwen2.5 14B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen2.5 32B Instruct Source: https://everstack.ai/models/qwen/qwen2-5-32b-instruct Browser title: Qwen2.5 32B Instruct: Pricing & Specs | Everstack Page type: website Review Qwen2.5 32B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen2.5 32B Instruct pricing and limits on Qwen Token pricing through Qwen: $0.700 per million input tokens, $2.80 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen2.5 32B Instruct through Everstack Call Qwen2.5 32B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen2.5 72B Instruct on Qwen Source: https://everstack.ai/models/qwen/qwen2-5-72b-instruct Browser title: Qwen2.5 72B Instruct on Qwen | Everstack Page type: website Review Qwen2.5 72B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen2.5 72B Instruct pricing and limits on Qwen Token pricing through Qwen: $1.40 per million input tokens, $5.60 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen2.5 72B Instruct through Everstack Call Qwen2.5 72B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen2.5 7B Instruct Source: https://everstack.ai/models/qwen/qwen2-5-7b-instruct Browser title: Qwen2.5 7B Instruct: Pricing & Specs | Everstack Page type: website Review Qwen2.5 7B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen2.5 7B Instruct pricing and limits on Qwen Token pricing through Qwen: $0.175 per million input tokens, $0.700 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen2.5 7B Instruct through Everstack Call Qwen2.5 7B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen2.5-VL 72B Instruct Source: https://everstack.ai/models/qwen/qwen2-5-vl-72b-instruct Browser title: Qwen2.5-VL 72B Instruct: Pricing & Specs | Everstack Page type: website Review Qwen2.5-VL 72B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen2.5-VL 72B Instruct pricing and limits on Qwen Token pricing through Qwen: $2.80 per million input tokens, $8.40 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen2.5-VL 72B Instruct through Everstack Call Qwen2.5-VL 72B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen2.5-VL 7B Instruct Source: https://everstack.ai/models/qwen/qwen2-5-vl-7b-instruct Browser title: Qwen2.5-VL 7B Instruct: Pricing & Specs | Everstack Page type: website Review Qwen2.5-VL 7B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen2.5-VL 7B Instruct pricing and limits on Qwen Token pricing through Qwen: $0.350 per million input tokens, $1.05 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen2.5-VL 7B Instruct through Everstack Call Qwen2.5-VL 7B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen2.5 72B Instruct on Qwen Source: https://everstack.ai/models/qwen/qwen2.5-72b-instruct Browser title: Qwen2.5 72B Instruct on Qwen | Everstack Page type: website Review Qwen2.5 72B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen2.5 72B Instruct pricing and limits on Qwen Token pricing through Qwen: $0.600 per million input tokens, $1.60 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen2.5. Catalog status: stable. #### Routing Qwen2.5 72B Instruct through Everstack Call Qwen2.5 72B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 14B Source: https://everstack.ai/models/qwen/qwen3-14b Browser title: Qwen3 14B: Pricing & Specs | Everstack Page type: website Review Qwen3 14B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 14B pricing and limits on Qwen Token pricing through Qwen: $0.350 per million input tokens, $1.40 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen3. Catalog status: stable. #### Routing Qwen3 14B through Everstack Call Qwen3 14B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 235B A22B Source: https://everstack.ai/models/qwen/qwen3-235b-a22b Browser title: Qwen3 235B A22B: Pricing & Specs | Everstack Page type: website Review Qwen3 235B A22B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 235B A22B pricing and limits on Qwen Token pricing through Qwen: $0.700 per million input tokens, $2.80 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen3. Catalog status: stable. #### Routing Qwen3 235B A22B through Everstack Call Qwen3 235B A22B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 32B Source: https://everstack.ai/models/qwen/qwen3-32b Browser title: Qwen3 32B: Pricing & Specs | Everstack Page type: website Review Qwen3 32B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 32B pricing and limits on Qwen Token pricing through Qwen: $0.700 per million input tokens, $2.80 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen3. Catalog status: stable. #### Routing Qwen3 32B through Everstack Call Qwen3 32B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 8B Source: https://everstack.ai/models/qwen/qwen3-8b Browser title: Qwen3 8B: Pricing & Specs | Everstack Page type: website Review Qwen3 8B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 8B pricing and limits on Qwen Token pricing through Qwen: $0.180 per million input tokens, $0.700 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen3. Catalog status: stable. #### Routing Qwen3 8B through Everstack Call Qwen3 8B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3-Coder 30B-A3B Instruct Source: https://everstack.ai/models/qwen/qwen3-coder-30b-a3b-instruct Browser title: Qwen3-Coder 30B-A3B Instruct: Pricing & Specs | Everstack Page type: website Review Qwen3-Coder 30B-A3B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3-Coder 30B-A3B Instruct pricing and limits on Qwen Token pricing through Qwen: $0.450 per million input tokens, $2.25 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3-Coder 30B-A3B Instruct through Everstack Call Qwen3-Coder 30B-A3B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 Coder 480B-A35B on Qwen Source: https://everstack.ai/models/qwen/qwen3-coder-480b-a35b-instruct Browser title: Qwen3 Coder 480B-A35B on Qwen | Everstack Page type: website Review Qwen3 Coder 480B-A35B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 Coder 480B-A35B pricing and limits on Qwen Token pricing through Qwen: $1.50 per million input tokens, $7.50 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen3. Catalog status: stable. #### Routing Qwen3 Coder 480B-A35B through Everstack Call Qwen3 Coder 480B-A35B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 Coder Flash Source: https://everstack.ai/models/qwen/qwen3-coder-flash Browser title: Qwen3 Coder Flash: Pricing & Specs | Everstack Page type: website Review Qwen3 Coder Flash on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 Coder Flash pricing and limits on Qwen Token pricing through Qwen: $0.300 per million input tokens, $1.50 per million output tokens. Limits: 1000K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3 Coder Flash through Everstack Call Qwen3 Coder Flash on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 Coder Plus Source: https://everstack.ai/models/qwen/qwen3-coder-plus Browser title: Qwen3 Coder Plus: Pricing & Specs | Everstack Page type: website Review Qwen3 Coder Plus on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 Coder Plus pricing and limits on Qwen Token pricing through Qwen: $1.00 per million input tokens, $5.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen3-commercial. Catalog status: stable. #### Routing Qwen3 Coder Plus through Everstack Call Qwen3 Coder Plus on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 Max Source: https://everstack.ai/models/qwen/qwen3-max Browser title: Qwen3 Max: Pricing & Specs | Everstack Page type: website Review Qwen3 Max on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 Max pricing and limits on Qwen Token pricing through Qwen: $1.20 per million input tokens, $6.00 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen3-commercial. Catalog status: stable. #### Routing Qwen3 Max through Everstack Call Qwen3 Max on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3-Next 80B-A3B Instruct on Qwen Source: https://everstack.ai/models/qwen/qwen3-next-80b-a3b-instruct Browser title: Qwen3-Next 80B-A3B Instruct on Qwen | Everstack Page type: website Review Qwen3-Next 80B-A3B Instruct on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3-Next 80B-A3B Instruct pricing and limits on Qwen Token pricing through Qwen: $0.500 per million input tokens, $2.00 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3-Next 80B-A3B Instruct through Everstack Call Qwen3-Next 80B-A3B Instruct on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 Next 80B-A3B Thinking Source: https://everstack.ai/models/qwen/qwen3-next-80b-a3b-thinking Browser title: Qwen3 Next 80B-A3B Thinking: Pricing & Specs | Everstack Page type: website Review Qwen3 Next 80B-A3B Thinking on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 Next 80B-A3B Thinking pricing and limits on Qwen Token pricing through Qwen: $0.500 per million input tokens, $6.00 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen3. Catalog status: stable. #### Routing Qwen3 Next 80B-A3B Thinking through Everstack Call Qwen3 Next 80B-A3B Thinking on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 TTS Flash Source: https://everstack.ai/models/qwen/qwen3-tts-flash Browser title: Qwen3 TTS Flash: Pricing & Specs | Everstack Page type: website Review Qwen3 TTS Flash on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 TTS Flash pricing and limits on Qwen Token pricing through Qwen: $0.100 per million input tokens, $0.000 per million output tokens. Limits: 4K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: audio. Accepts text input. Returns audio output. Model family: qwen-tts. Catalog status: stable. #### Routing Qwen3 TTS Flash through Everstack Call Qwen3 TTS Flash on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 TTS Instruct Flash Source: https://everstack.ai/models/qwen/qwen3-tts-instruct-flash Browser title: Qwen3 TTS Instruct Flash: Pricing & Specs | Everstack Page type: website Review Qwen3 TTS Instruct Flash on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 TTS Instruct Flash pricing and limits on Qwen Token pricing through Qwen: $0.150 per million input tokens, $0.000 per million output tokens. Limits: 4K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: audio. Accepts text input. Returns audio output. Model family: qwen-tts. Catalog status: stable. #### Routing Qwen3 TTS Instruct Flash through Everstack Call Qwen3 TTS Instruct Flash on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 TTS Voice Clone Source: https://everstack.ai/models/qwen/qwen3-tts-vc Browser title: Qwen3 TTS Voice Clone: Pricing & Specs | Everstack Page type: website Review Qwen3 TTS Voice Clone on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 TTS Voice Clone pricing and limits on Qwen Token pricing through Qwen: $0.200 per million input tokens, $0.000 per million output tokens. Limits: 4K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: audio. Accepts text, audio input. Returns audio output. Model family: qwen-tts. Catalog status: stable. #### Routing Qwen3 TTS Voice Clone through Everstack Call Qwen3 TTS Voice Clone on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 TTS Voice Design Source: https://everstack.ai/models/qwen/qwen3-tts-vd Browser title: Qwen3 TTS Voice Design: Pricing & Specs | Everstack Page type: website Review Qwen3 TTS Voice Design on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 TTS Voice Design pricing and limits on Qwen Token pricing through Qwen: $0.200 per million input tokens, $0.000 per million output tokens. Limits: 4K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: audio. Accepts text input. Returns audio output. Model family: qwen-tts. Catalog status: stable. #### Routing Qwen3 TTS Voice Design through Everstack Call Qwen3 TTS Voice Design on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3-VL 235B-A22B Source: https://everstack.ai/models/qwen/qwen3-vl-235b-a22b Browser title: Qwen3-VL 235B-A22B: Pricing & Specs | Everstack Page type: website Review Qwen3-VL 235B-A22B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3-VL 235B-A22B pricing and limits on Qwen Token pricing through Qwen: $0.700 per million input tokens, $2.80 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3-VL 235B-A22B through Everstack Call Qwen3-VL 235B-A22B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3-VL 30B-A3B Source: https://everstack.ai/models/qwen/qwen3-vl-30b-a3b Browser title: Qwen3-VL 30B-A3B: Pricing & Specs | Everstack Page type: website Review Qwen3-VL 30B-A3B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3-VL 30B-A3B pricing and limits on Qwen Token pricing through Qwen: $0.200 per million input tokens, $0.800 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3-VL 30B-A3B through Everstack Call Qwen3-VL 30B-A3B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3-VL Plus Source: https://everstack.ai/models/qwen/qwen3-vl-plus Browser title: Qwen3-VL Plus: Pricing & Specs | Everstack Page type: website Review Qwen3-VL Plus on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3-VL Plus pricing and limits on Qwen Token pricing through Qwen: $0.200 per million input tokens, $1.60 per million output tokens. Limits: 262K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: qwen3-commercial. Catalog status: stable. #### Routing Qwen3-VL Plus through Everstack Call Qwen3-VL Plus on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.5 122B-A10B Source: https://everstack.ai/models/qwen/qwen3.5-122b-a10b Browser title: Qwen3.5 122B-A10B: Pricing & Specs | Everstack Page type: website Review Qwen3.5 122B-A10B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.5 122B-A10B pricing and limits on Qwen Token pricing through Qwen: $0.400 per million input tokens, $3.20 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio input. Returns text output. Model family: qwen3.5. Catalog status: stable. #### Routing Qwen3.5 122B-A10B through Everstack Call Qwen3.5 122B-A10B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.5 27B Source: https://everstack.ai/models/qwen/qwen3.5-27b Browser title: Qwen3.5 27B: Pricing & Specs | Everstack Page type: website Review Qwen3.5 27B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.5 27B pricing and limits on Qwen Token pricing through Qwen: $0.300 per million input tokens, $2.40 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.5 27B through Everstack Call Qwen3.5 27B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.5 35B-A3B Source: https://everstack.ai/models/qwen/qwen3.5-35b-a3b Browser title: Qwen3.5 35B-A3B: Pricing & Specs | Everstack Page type: website Review Qwen3.5 35B-A3B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.5 35B-A3B pricing and limits on Qwen Token pricing through Qwen: $0.250 per million input tokens, $2.00 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.5 35B-A3B through Everstack Call Qwen3.5 35B-A3B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.5 397B-A17B Source: https://everstack.ai/models/qwen/qwen3.5-397b-a17b Browser title: Qwen3.5 397B-A17B: Pricing & Specs | Everstack Page type: website Review Qwen3.5 397B-A17B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.5 397B-A17B pricing and limits on Qwen Token pricing through Qwen: $0.600 per million input tokens, $3.60 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.5 397B-A17B through Everstack Call Qwen3.5 397B-A17B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.5 Flash Source: https://everstack.ai/models/qwen/qwen3.5-flash Browser title: Qwen3.5 Flash: Pricing & Specs | Everstack Page type: website Review Qwen3.5 Flash on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.5 Flash pricing and limits on Qwen Token pricing through Qwen: $0.100 per million input tokens, $0.400 per million output tokens. Limits: 1000K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: qwen3.5. Catalog status: stable. #### Routing Qwen3.5 Flash through Everstack Call Qwen3.5 Flash on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.5 Plus Source: https://everstack.ai/models/qwen/qwen3.5-plus Browser title: Qwen3.5 Plus: Pricing & Specs | Everstack Page type: website Review Qwen3.5 Plus on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.5 Plus pricing and limits on Qwen Token pricing through Qwen: $0.400 per million input tokens, $2.40 per million output tokens. Limits: 1000K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: qwen3.5. Catalog status: stable. #### Routing Qwen3.5 Plus through Everstack Call Qwen3.5 Plus on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.6 27B on Qwen Source: https://everstack.ai/models/qwen/qwen3.6-27b Browser title: Qwen3.6 27B on Qwen | Everstack Page type: website Review Qwen3.6 27B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.6 27B pricing and limits on Qwen Token pricing through Qwen: $0.600 per million input tokens, $3.60 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.6 27B through Everstack Call Qwen3.6 27B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.6 35B-A3B Source: https://everstack.ai/models/qwen/qwen3.6-35b-a3b Browser title: Qwen3.6 35B-A3B: Pricing & Specs | Everstack Page type: website Review Qwen3.6 35B-A3B on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.6 35B-A3B pricing and limits on Qwen Token pricing through Qwen: $0.248 per million input tokens, $1.49 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.6 35B-A3B through Everstack Call Qwen3.6 35B-A3B on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.6 Flash Source: https://everstack.ai/models/qwen/qwen3.6-flash Browser title: Qwen3.6 Flash: Pricing & Specs | Everstack Page type: website Review Qwen3.6 Flash on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.6 Flash pricing and limits on Qwen Token pricing through Qwen: $0.188 per million input tokens, $1.13 per million output tokens. Limits: 1000K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: qwen3.6. Catalog status: stable. #### Routing Qwen3.6 Flash through Everstack Call Qwen3.6 Flash on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.6 Max Preview Source: https://everstack.ai/models/qwen/qwen3.6-max-preview Browser title: Qwen3.6 Max Preview: Pricing & Specs | Everstack Page type: website Review Qwen3.6 Max Preview on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.6 Max Preview pricing and limits on Qwen Token pricing through Qwen: $1.30 per million input tokens, $7.80 per million output tokens. Limits: 262K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: preview. #### Routing Qwen3.6 Max Preview through Everstack Call Qwen3.6 Max Preview on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.6 Plus on Qwen Source: https://everstack.ai/models/qwen/qwen3.6-plus Browser title: Qwen3.6 Plus on Qwen | Everstack Page type: website Review Qwen3.6 Plus on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.6 Plus pricing and limits on Qwen Token pricing through Qwen: $0.500 per million input tokens, $3.00 per million output tokens. Limits: 1000K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.6 Plus through Everstack Call Qwen3.6 Plus on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.7 Max on Qwen Source: https://everstack.ai/models/qwen/qwen3.7-max Browser title: Qwen3.7 Max on Qwen | Everstack Page type: website Review Qwen3.7 Max on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.7 Max pricing and limits on Qwen Token pricing through Qwen: $2.50 per million input tokens, $7.50 per million output tokens. Limits: 1000K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.7 Max through Everstack Call Qwen3.7 Max on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.7 Plus on Qwen Source: https://everstack.ai/models/qwen/qwen3.7-plus Browser title: Qwen3.7 Plus on Qwen | Everstack Page type: website Review Qwen3.7 Plus on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.7 Plus pricing and limits on Qwen Token pricing through Qwen: $0.500 per million input tokens, $3.00 per million output tokens. Limits: 1000K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.7 Plus through Everstack Call Qwen3.7 Plus on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.8 Max on Qwen Source: https://everstack.ai/models/qwen/qwen3.8-max Browser title: Qwen3.8 Max on Qwen | Everstack Page type: website Review Qwen3.8 Max on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.8 Max pricing and limits on Qwen Token pricing through Qwen: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, pdf input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.8 Max through Everstack Call Qwen3.8 Max on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### QwQ Plus Source: https://everstack.ai/models/qwen/qwq-plus Browser title: QwQ Plus: Pricing & Specs | Everstack Page type: website Review QwQ Plus on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### QwQ Plus pricing and limits on Qwen Token pricing through Qwen: $0.800 per million input tokens, $2.40 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: qwq. Catalog status: stable. #### Routing QwQ Plus through Everstack Call QwQ Plus on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen Text Embedding V3 Source: https://everstack.ai/models/qwen/text-embedding-v3 Browser title: Qwen Text Embedding V3: Pricing & Specs | Everstack Page type: website Review Qwen Text Embedding V3 on Qwen: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen Text Embedding V3 pricing and limits on Qwen Token pricing through Qwen: $0.070 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: qwen-embedding. Catalog status: stable. #### Routing Qwen Text Embedding V3 through Everstack Call Qwen Text Embedding V3 on Qwen through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Together AI AI models Source: https://everstack.ai/models/together Browser title: Together AI AI Models & Pricing | Everstack Page type: website Browse 19 Together AI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Together AI models in one catalog Review 19 Together AI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### MiniMax-M3 (Together) on Together AI Source: https://everstack.ai/models/together/MiniMaxAI__MiniMax-M3 Browser title: MiniMax-M3 (Together) on Together AI | Everstack Page type: website Review MiniMax-M3 (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### MiniMax-M3 (Together) pricing and limits on Together AI Token pricing through Together AI: $0.300 per million input tokens, $1.20 per million output tokens. Limits: 524K token context window, 250K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: minimax. Catalog status: stable. #### Routing MiniMax-M3 (Together) through Everstack Call MiniMax-M3 (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen 2.5 72B Instruct Turbo Source: https://everstack.ai/models/together/Qwen__Qwen2.5-72B-Instruct-Turbo Browser title: Qwen 2.5 72B Instruct Turbo: Pricing & Specs | Everstack Page type: website Review Qwen 2.5 72B Instruct Turbo on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen 2.5 72B Instruct Turbo pricing and limits on Together AI Token pricing through Together AI: $1.20 per million input tokens, $1.20 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: deprecated. #### Routing Qwen 2.5 72B Instruct Turbo through Everstack Call Qwen 2.5 72B Instruct Turbo on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3 Coder 480B FP8 (Together) Source: https://everstack.ai/models/together/Qwen__Qwen3-Coder-480B-A35B-Instruct-FP8 Browser title: Qwen3 Coder 480B FP8 (Together): Pricing & Specs | Everstack Page type: website Review Qwen3 Coder 480B FP8 (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3 Coder 480B FP8 (Together) pricing and limits on Together AI Token pricing through Together AI: $2.00 per million input tokens, $2.00 per million output tokens. Limits: 262K token context window, 262K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen3. Catalog status: deprecated. #### Routing Qwen3 Coder 480B FP8 (Together) through Everstack Call Qwen3 Coder 480B FP8 (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Qwen3.7 Max (Together) on Together AI Source: https://everstack.ai/models/together/Qwen__Qwen3.7-Max Browser title: Qwen3.7 Max (Together) on Together AI | Everstack Page type: website Review Qwen3.7 Max (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Qwen3.7 Max (Together) pricing and limits on Together AI Token pricing through Together AI: $1.25 per million input tokens, $3.75 per million output tokens. Limits: 1000K token context window, 500K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: qwen. Catalog status: stable. #### Routing Qwen3.7 Max (Together) through Everstack Call Qwen3.7 Max (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V3 on Together AI Source: https://everstack.ai/models/together/deepseek-ai__DeepSeek-V3 Browser title: DeepSeek V3 on Together AI | Everstack Page type: website Review DeepSeek V3 on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V3 pricing and limits on Together AI Token pricing through Together AI: $1.25 per million input tokens, $1.25 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: deepseek. Catalog status: deprecated. #### Routing DeepSeek V3 through Everstack Call DeepSeek V3 on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Flash 0731 (Together) on Together AI Source: https://everstack.ai/models/together/deepseek-ai__DeepSeek-V4-Flash-0731 Browser title: DeepSeek V4 Flash 0731 (Together) on Together AI | Everstack Page type: website Review DeepSeek V4 Flash 0731 (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Flash 0731 (Together) pricing and limits on Together AI Token pricing through Together AI: $0.140 per million input tokens, $0.280 per million output tokens. Limits: 1000K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-flash. Catalog status: stable. #### Routing DeepSeek V4 Flash 0731 (Together) through Everstack Call DeepSeek V4 Flash 0731 (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro 0813 (Together) on Together AI Source: https://everstack.ai/models/together/deepseek-ai__DeepSeek-V4-Pro-0813 Browser title: DeepSeek V4 Pro 0813 (Together) on Together AI | Everstack Page type: website Review DeepSeek V4 Pro 0813 (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro 0813 (Together) pricing and limits on Together AI Token pricing through Together AI: $1.32 per million input tokens, $3.96 per million output tokens. Limits: 1049K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-thinking. Catalog status: stable. #### Routing DeepSeek V4 Pro 0813 (Together) through Everstack Call DeepSeek V4 Pro 0813 (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### DeepSeek V4 Pro (Together) on Together AI Source: https://everstack.ai/models/together/deepseek-ai__DeepSeek-V4-Pro Browser title: DeepSeek V4 Pro (Together) on Together AI | Everstack Page type: website Review DeepSeek V4 Pro (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### DeepSeek V4 Pro (Together) pricing and limits on Together AI Token pricing through Together AI: $1.74 per million input tokens, $3.48 per million output tokens. Limits: 512K token context window, 384K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: deepseek-v4. Catalog status: stable. #### Routing DeepSeek V4 Pro (Together) through Everstack Call DeepSeek V4 Pro (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.1 8B Instruct Turbo Source: https://everstack.ai/models/together/meta-llama__Llama-3.1-8B-Instruct-Turbo Browser title: Llama 3.1 8B Instruct Turbo: Pricing & Specs | Everstack Page type: website Review Llama 3.1 8B Instruct Turbo on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.1 8B Instruct Turbo pricing and limits on Together AI Token pricing through Together AI: $0.180 per million input tokens, $0.180 per million output tokens. Limits: 131K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: deprecated. #### Routing Llama 3.1 8B Instruct Turbo through Everstack Call Llama 3.1 8B Instruct Turbo on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.2 11B Vision Instruct Turbo Source: https://everstack.ai/models/together/meta-llama__Llama-3.2-11B-Vision-Instruct-Turbo Browser title: Llama 3.2 11B Vision Instruct Turbo: Pricing & Specs | Everstack Page type: website Review Llama 3.2 11B Vision Instruct Turbo on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catal… #### Llama 3.2 11B Vision Instruct Turbo pricing and limits on Together AI Token pricing through Together AI: $0.900 per million input tokens, $0.900 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision. Accepts text, image input. Returns text output. Model family: llama. Catalog status: deprecated. #### Routing Llama 3.2 11B Vision Instruct Turbo through Everstack Call Llama 3.2 11B Vision Instruct Turbo on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.3 70B Instruct Turbo Source: https://everstack.ai/models/together/meta-llama__Llama-3.3-70B-Instruct-Turbo Browser title: Llama 3.3 70B Instruct Turbo: Pricing & Specs | Everstack Page type: website Review Llama 3.3 70B Instruct Turbo on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.3 70B Instruct Turbo pricing and limits on Together AI Token pricing through Together AI: $1.04 per million input tokens, $1.04 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.3 70B Instruct Turbo through Everstack Call Llama 3.3 70B Instruct Turbo on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.6 (Together) on Together AI Source: https://everstack.ai/models/together/moonshotai__Kimi-K2.6 Browser title: Kimi K2.6 (Together) on Together AI | Everstack Page type: website Review Kimi K2.6 (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.6 (Together) pricing and limits on Together AI Token pricing through Together AI: $1.20 per million input tokens, $4.50 per million output tokens. Limits: 262K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: kimi. Catalog status: stable. #### Routing Kimi K2.6 (Together) through Everstack Call Kimi K2.6 (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Kimi K2.7 Code (Together) on Together AI Source: https://everstack.ai/models/together/moonshotai__Kimi-K2.7-Code Browser title: Kimi K2.7 Code (Together) on Together AI | Everstack Page type: website Review Kimi K2.7 Code (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Kimi K2.7 Code (Together) pricing and limits on Together AI Token pricing through Together AI: $0.950 per million input tokens, $4.00 per million output tokens. Limits: 262K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: kimi-k2. Catalog status: stable. #### Routing Kimi K2.7 Code (Together) through Everstack Call Kimi K2.7 Code (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Nemotron 3 Ultra 550B A55B (Together) on Together AI Source: https://everstack.ai/models/together/nvidia__nemotron-3-ultra-550b-a55b Browser title: Nemotron 3 Ultra 550B A55B (Together) on Together AI | Everstack Page type: website Review Nemotron 3 Ultra 550B A55B (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model cat… #### Nemotron 3 Ultra 550B A55B (Together) pricing and limits on Together AI Token pricing through Together AI: $0.600 per million input tokens, $3.60 per million output tokens. Limits: 512K token context window, 512K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: nemotron. Catalog status: stable. #### Routing Nemotron 3 Ultra 550B A55B (Together) through Everstack Call Nemotron 3 Ultra 550B A55B (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GPT OSS 120B (Together) on Together AI Source: https://everstack.ai/models/together/openai__gpt-oss-120b Browser title: GPT OSS 120B (Together) on Together AI | Everstack Page type: website Review GPT OSS 120B (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GPT OSS 120B (Together) pricing and limits on Together AI Token pricing through Together AI: $0.150 per million input tokens, $0.600 per million output tokens. Limits: 131K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: gpt-oss. Catalog status: stable. #### Routing GPT OSS 120B (Together) through Everstack Call GPT OSS 120B (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Inkling (Together) on Together AI Source: https://everstack.ai/models/together/thinkingmachines__Inkling Browser title: Inkling (Together) on Together AI | Everstack Page type: website Review Inkling (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Inkling (Together) pricing and limits on Together AI Token pricing through Together AI: $1.00 per million input tokens, $4.05 per million output tokens. Limits: 524K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio input. Returns text output. Model family: ling. Catalog status: stable. #### Routing Inkling (Together) through Everstack Call Inkling (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### M2 BERT 80M Retrieval Source: https://everstack.ai/models/together/togethercomputer__m2-bert-80M-8k-retrieval Browser title: M2 BERT 80M Retrieval: Pricing & Specs | Everstack Page type: website Review M2 BERT 80M Retrieval on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### M2 BERT 80M Retrieval pricing and limits on Together AI Token pricing through Together AI: $0.010 per million input tokens, $0.000 per million output tokens. Limits: 8K token context window, 0 max output tokens. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: embedding. Catalog status: stable. #### Routing M2 BERT 80M Retrieval through Everstack Call M2 BERT 80M Retrieval on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.1 (Together) on Together AI Source: https://everstack.ai/models/together/zai-org__GLM-5.1 Browser title: GLM-5.1 (Together) on Together AI | Everstack Page type: website Review GLM-5.1 (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.1 (Together) pricing and limits on Together AI Token pricing through Together AI: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 203K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: deprecated. #### Routing GLM-5.1 (Together) through Everstack Call GLM-5.1 (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.2 (Together) on Together AI Source: https://everstack.ai/models/together/zai-org__GLM-5.2 Browser title: GLM-5.2 (Together) on Together AI | Everstack Page type: website Review GLM-5.2 (Together) on Together AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.2 (Together) pricing and limits on Together AI Token pricing through Together AI: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 512K token context window, 164K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.2 (Together) through Everstack Call GLM-5.2 (Together) on Together AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Vertex AI AI models Source: https://everstack.ai/models/vertex-ai Browser title: Vertex AI AI Models & Pricing | Everstack Page type: website Browse 24 Vertex AI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Vertex AI models in one catalog Review 24 Vertex AI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Claude 3.7 Sonnet on Vertex AI Source: https://everstack.ai/models/vertex-ai/claude-3-7-sonnet@20250219 Browser title: Claude 3.7 Sonnet on Vertex AI | Everstack Page type: website Review Claude 3.7 Sonnet on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude 3.7 Sonnet pricing and limits on Vertex AI Token pricing through Vertex AI: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: claude. Catalog status: stable. #### Routing Claude 3.7 Sonnet through Everstack Call Claude 3.7 Sonnet on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Fable 5 (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/claude-fable-5@default Browser title: Claude Fable 5 (Vertex) on Vertex AI | Everstack Page type: website Review Claude Fable 5 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Fable 5 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $10.00 per million input tokens, $50.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-fable. Catalog status: stable. #### Routing Claude Fable 5 (Vertex) through Everstack Call Claude Fable 5 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Haiku 4.5 (Vertex) Source: https://everstack.ai/models/vertex-ai/claude-haiku-4-5@20251001 Browser title: Claude Haiku 4.5 (Vertex): Pricing & Specs | Everstack Page type: website Review Claude Haiku 4.5 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Haiku 4.5 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $1.00 per million input tokens, $5.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Haiku 4.5 (Vertex) through Everstack Call Claude Haiku 4.5 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.5 (Vertex) Source: https://everstack.ai/models/vertex-ai/claude-opus-4-5@20251101 Browser title: Claude Opus 4.5 (Vertex): Pricing & Specs | Everstack Page type: website Review Claude Opus 4.5 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.5 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.5 (Vertex) through Everstack Call Claude Opus 4.5 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.6 (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/claude-opus-4-6@default Browser title: Claude Opus 4.6 (Vertex) on Vertex AI | Everstack Page type: website Review Claude Opus 4.6 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.6 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.6 (Vertex) through Everstack Call Claude Opus 4.6 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.7 (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/claude-opus-4-7@default Browser title: Claude Opus 4.7 (Vertex) on Vertex AI | Everstack Page type: website Review Claude Opus 4.7 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.7 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Opus 4.7 (Vertex) through Everstack Call Claude Opus 4.7 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 4.8 (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/claude-opus-4-8@default Browser title: Claude Opus 4.8 (Vertex) on Vertex AI | Everstack Page type: website Review Claude Opus 4.8 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 4.8 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 4.8 (Vertex) through Everstack Call Claude Opus 4.8 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Opus 5 (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/claude-opus-5@default Browser title: Claude Opus 5 (Vertex) on Vertex AI | Everstack Page type: website Review Claude Opus 5 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Opus 5 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $5.00 per million input tokens, $25.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-opus. Catalog status: stable. #### Routing Claude Opus 5 (Vertex) through Everstack Call Claude Opus 5 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4.5 (Vertex) Source: https://everstack.ai/models/vertex-ai/claude-sonnet-4-5@20250929 Browser title: Claude Sonnet 4.5 (Vertex): Pricing & Specs | Everstack Page type: website Review Claude Sonnet 4.5 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4.5 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 200K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4.5 (Vertex) through Everstack Call Claude Sonnet 4.5 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 4.6 (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/claude-sonnet-4-6@default Browser title: Claude Sonnet 4.6 (Vertex) on Vertex AI | Everstack Page type: website Review Claude Sonnet 4.6 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 4.6 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-4. Catalog status: stable. #### Routing Claude Sonnet 4.6 (Vertex) through Everstack Call Claude Sonnet 4.6 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Claude Sonnet 5 (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/claude-sonnet-5@default Browser title: Claude Sonnet 5 (Vertex) on Vertex AI | Everstack Page type: website Review Claude Sonnet 5 (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Claude Sonnet 5 (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $2.00 per million input tokens, $10.00 per million output tokens. Limits: 1000K token context window, 128K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: claude-sonnet. Catalog status: stable. #### Routing Claude Sonnet 5 (Vertex) through Everstack Call Claude Sonnet 5 (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 1.5 Flash on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-1.5-flash Browser title: Gemini 1.5 Flash on Vertex AI | Everstack Page type: website Review Gemini 1.5 Flash on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 1.5 Flash pricing and limits on Vertex AI Token pricing through Vertex AI: $0.075 per million input tokens, $0.300 per million output tokens. Limits: 1049K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, video, audio input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 1.5 Flash through Everstack Call Gemini 1.5 Flash on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 1.5 Pro on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-1.5-pro Browser title: Gemini 1.5 Pro on Vertex AI | Everstack Page type: website Review Gemini 1.5 Pro on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 1.5 Pro pricing and limits on Vertex AI Token pricing through Vertex AI: $1.25 per million input tokens, $5.00 per million output tokens. Limits: 1049K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, video, audio input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 1.5 Pro through Everstack Call Gemini 1.5 Pro on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 2.5 Flash (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-2.5-flash Browser title: Gemini 2.5 Flash (Vertex) on Vertex AI | Everstack Page type: website Review Gemini 2.5 Flash (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 2.5 Flash (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $0.300 per million input tokens, $2.50 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio, video, pdf input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 2.5 Flash (Vertex) through Everstack Call Gemini 2.5 Flash (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 2.5 Pro (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-2.5-pro Browser title: Gemini 2.5 Pro (Vertex) on Vertex AI | Everstack Page type: website Review Gemini 2.5 Pro (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 2.5 Pro (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $1.25 per million input tokens, $10.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, audio, video, pdf input. Returns text output. Model family: gemini. Catalog status: stable. #### Routing Gemini 2.5 Pro (Vertex) through Everstack Call Gemini 2.5 Pro (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3 Flash (Preview, Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-3-flash-preview Browser title: Gemini 3 Flash (Preview, Vertex) on Vertex AI | Everstack Page type: website Review Gemini 3 Flash (Preview, Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3 Flash (Preview, Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $0.500 per million input tokens, $3.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-3. Catalog status: preview. #### Routing Gemini 3 Flash (Preview, Vertex) through Everstack Call Gemini 3 Flash (Preview, Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3 Pro (Preview, Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-3-pro-preview Browser title: Gemini 3 Pro (Preview, Vertex) on Vertex AI | Everstack Page type: website Review Gemini 3 Pro (Preview, Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3 Pro (Preview, Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $2.00 per million input tokens, $12.00 per million output tokens. Limits: 1000K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-3. Catalog status: preview. #### Routing Gemini 3 Pro (Preview, Vertex) through Everstack Call Gemini 3 Pro (Preview, Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.5 Flash Lite (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-3.5-flash-lite Browser title: Gemini 3.5 Flash Lite (Vertex) on Vertex AI | Everstack Page type: website Review Gemini 3.5 Flash Lite (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.5 Flash Lite (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $0.300 per million input tokens, $2.50 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash-lite. Catalog status: stable. #### Routing Gemini 3.5 Flash Lite (Vertex) through Everstack Call Gemini 3.5 Flash Lite (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.5 Flash (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-3.5-flash Browser title: Gemini 3.5 Flash (Vertex) on Vertex AI | Everstack Page type: website Review Gemini 3.5 Flash (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.5 Flash (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $1.50 per million input tokens, $9.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.5 Flash (Vertex) through Everstack Call Gemini 3.5 Flash (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.6 Flash (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-3.6-flash Browser title: Gemini 3.6 Flash (Vertex) on Vertex AI | Everstack Page type: website Review Gemini 3.6 Flash (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.6 Flash (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $0.750 per million input tokens, $3.75 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.6 Flash (Vertex) through Everstack Call Gemini 3.6 Flash (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini 3.7 Flash (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-3.7-flash Browser title: Gemini 3.7 Flash (Vertex) on Vertex AI | Everstack Page type: website Review Gemini 3.7 Flash (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini 3.7 Flash (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $0.750 per million input tokens, $3.75 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini 3.7 Flash (Vertex) through Everstack Call Gemini 3.7 Flash (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Gemini Flash Latest (Vertex) on Vertex AI Source: https://everstack.ai/models/vertex-ai/gemini-flash-latest Browser title: Gemini Flash Latest (Vertex) on Vertex AI | Everstack Page type: website Review Gemini Flash Latest (Vertex) on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Gemini Flash Latest (Vertex) pricing and limits on Vertex AI Token pricing through Vertex AI: $1.50 per million input tokens, $9.00 per million output tokens. Limits: 1049K token context window, 66K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, audio, pdf input. Returns text output. Model family: gemini-flash. Catalog status: stable. #### Routing Gemini Flash Latest (Vertex) through Everstack Call Gemini Flash Latest (Vertex) on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Llama 3.1 70B Instruct on Vertex AI Source: https://everstack.ai/models/vertex-ai/llama-3.1-70b-instruct-maas Browser title: Llama 3.1 70B Instruct on Vertex AI | Everstack Page type: website Review Llama 3.1 70B Instruct on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Llama 3.1 70B Instruct pricing and limits on Vertex AI Token pricing through Vertex AI: $0.900 per million input tokens, $0.900 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: llama. Catalog status: stable. #### Routing Llama 3.1 70B Instruct through Everstack Call Llama 3.1 70B Instruct on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Mistral Large 2411 on Vertex AI Source: https://everstack.ai/models/vertex-ai/mistral-large-2411 Browser title: Mistral Large 2411 on Vertex AI | Everstack Page type: website Review Mistral Large 2411 on Vertex AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Mistral Large 2411 pricing and limits on Vertex AI Token pricing through Vertex AI: $3.00 per million input tokens, $9.00 per million output tokens. Limits: 128K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: mistral. Catalog status: stable. #### Routing Mistral Large 2411 through Everstack Call Mistral Large 2411 on Vertex AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Voyage AI AI models Source: https://everstack.ai/models/voyage Browser title: Voyage AI AI Models & Pricing | Everstack Page type: website Browse 6 Voyage AI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Voyage AI models in one catalog Review 6 Voyage AI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Voyage 4 Large Source: https://everstack.ai/models/voyage/voyage-4-large Browser title: Voyage 4 Large: Pricing & Specs | Everstack Page type: website Review Voyage 4 Large on Voyage AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Voyage 4 Large pricing and limits on Voyage AI Token pricing through Voyage AI: $0.120 per million input tokens, $0.000 per million output tokens. Limits: 32K token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: voyage-4. Catalog status: stable. #### Routing Voyage 4 Large through Everstack Call Voyage 4 Large on Voyage AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Voyage 4 Lite Source: https://everstack.ai/models/voyage/voyage-4-lite Browser title: Voyage 4 Lite: Pricing & Specs | Everstack Page type: website Review Voyage 4 Lite on Voyage AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Voyage 4 Lite pricing and limits on Voyage AI Token pricing through Voyage AI: $0.020 per million input tokens, $0.000 per million output tokens. Limits: 32K token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: voyage-4. Catalog status: stable. #### Routing Voyage 4 Lite through Everstack Call Voyage 4 Lite on Voyage AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Voyage 4 Source: https://everstack.ai/models/voyage/voyage-4 Browser title: Voyage 4: Pricing & Specs | Everstack Page type: website Review Voyage 4 on Voyage AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Voyage 4 pricing and limits on Voyage AI Token pricing through Voyage AI: $0.060 per million input tokens, $0.000 per million output tokens. Limits: 32K token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: voyage-4. Catalog status: stable. #### Routing Voyage 4 through Everstack Call Voyage 4 on Voyage AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Voyage Code 4 Source: https://everstack.ai/models/voyage/voyage-code-4 Browser title: Voyage Code 4: Pricing & Specs | Everstack Page type: website Review Voyage Code 4 on Voyage AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Voyage Code 4 pricing and limits on Voyage AI Token pricing through Voyage AI: $0.120 per million input tokens, $0.000 per million output tokens. Limits: 32K token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: voyage-domain. Catalog status: stable. #### Routing Voyage Code 4 through Everstack Call Voyage Code 4 on Voyage AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Voyage Finance 2 Source: https://everstack.ai/models/voyage/voyage-finance-2 Browser title: Voyage Finance 2: Pricing & Specs | Everstack Page type: website Review Voyage Finance 2 on Voyage AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Voyage Finance 2 pricing and limits on Voyage AI Token pricing through Voyage AI: $0.120 per million input tokens, $0.000 per million output tokens. Limits: 32K token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: voyage-domain. Catalog status: stable. #### Routing Voyage Finance 2 through Everstack Call Voyage Finance 2 on Voyage AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Voyage Law 2 Source: https://everstack.ai/models/voyage/voyage-law-2 Browser title: Voyage Law 2: Pricing & Specs | Everstack Page type: website Review Voyage Law 2 on Voyage AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Voyage Law 2 pricing and limits on Voyage AI Token pricing through Voyage AI: $0.120 per million input tokens, $0.000 per million output tokens. Limits: 16K token context window. #### Capabilities and modalities Supported capabilities: embeddings. Accepts text input. Returns embedding output. Model family: voyage-domain. Catalog status: stable. #### Routing Voyage Law 2 through Everstack Call Voyage Law 2 on Voyage AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### xAI AI models Source: https://everstack.ai/models/xai Browser title: xAI AI Models & Pricing | Everstack Page type: website Browse 16 xAI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare xAI models in one catalog Review 16 xAI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### Grok 3 Beta on xAI Source: https://everstack.ai/models/xai/grok-3-beta Browser title: Grok 3 Beta on xAI | Everstack Page type: website Review Grok 3 Beta on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 3 Beta pricing and limits on xAI Token pricing through xAI: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image input. Returns text output. Model family: grok. Catalog status: deprecated. #### Routing Grok 3 Beta through Everstack Call Grok 3 Beta on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 3 Fast Beta Source: https://everstack.ai/models/xai/grok-3-fast-beta Browser title: Grok 3 Fast Beta: Pricing & Specs | Everstack Page type: website Review Grok 3 Fast Beta on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 3 Fast Beta pricing and limits on xAI Token pricing through xAI: $1.50 per million input tokens, $7.50 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: grok. Catalog status: deprecated. #### Routing Grok 3 Fast Beta through Everstack Call Grok 3 Fast Beta on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 3 Mini Beta Source: https://everstack.ai/models/xai/grok-3-mini-beta Browser title: Grok 3 Mini Beta: Pricing & Specs | Everstack Page type: website Review Grok 3 Mini Beta on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 3 Mini Beta pricing and limits on xAI Token pricing through xAI: $0.800 per million input tokens, $4.00 per million output tokens. Limits: 131K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: grok. Catalog status: deprecated. #### Routing Grok 3 Mini Beta through Everstack Call Grok 3 Mini Beta on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 3 Mini Source: https://everstack.ai/models/xai/grok-3-mini Browser title: Grok 3 Mini: Pricing & Specs | Everstack Page type: website Review Grok 3 Mini on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 3 Mini pricing and limits on xAI Token pricing through xAI: $0.300 per million input tokens, $0.500 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 3 Mini through Everstack Call Grok 3 Mini on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 3 Source: https://everstack.ai/models/xai/grok-3 Browser title: Grok 3: Pricing & Specs | Everstack Page type: website Review Grok 3 on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 3 pricing and limits on xAI Token pricing through xAI: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 131K token context window, 8K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling. Accepts text input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 3 through Everstack Call Grok 3 on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.1 Fast Source: https://everstack.ai/models/xai/grok-4-1-fast Browser title: Grok 4.1 Fast: Pricing & Specs | Everstack Page type: website Review Grok 4.1 Fast on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.1 Fast pricing and limits on xAI Token pricing through xAI: $0.200 per million input tokens, $0.500 per million output tokens. Limits: 2000K token context window, 30K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.1 Fast through Everstack Call Grok 4.1 Fast on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4 Fast Source: https://everstack.ai/models/xai/grok-4-fast Browser title: Grok 4 Fast: Pricing & Specs | Everstack Page type: website Review Grok 4 Fast on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4 Fast pricing and limits on xAI Token pricing through xAI: $0.200 per million input tokens, $0.500 per million output tokens. Limits: 2000K token context window, 30K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4 Fast through Everstack Call Grok 4 Fast on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.20 (Non-Reasoning) Source: https://everstack.ai/models/xai/grok-4.20-0309-non-reasoning Browser title: Grok 4.20 (Non-Reasoning): Pricing & Specs | Everstack Page type: website Review Grok 4.20 (Non-Reasoning) on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.20 (Non-Reasoning) pricing and limits on xAI Token pricing through xAI: $1.25 per million input tokens, $2.50 per million output tokens. Limits: 1000K token context window, 30K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision. Accepts text, image, pdf input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.20 (Non-Reasoning) through Everstack Call Grok 4.20 (Non-Reasoning) on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.20 Reasoning Source: https://everstack.ai/models/xai/grok-4.20-0309-reasoning Browser title: Grok 4.20 Reasoning: Pricing & Specs | Everstack Page type: website Review Grok 4.20 Reasoning on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.20 Reasoning pricing and limits on xAI Token pricing through xAI: $1.25 per million input tokens, $2.50 per million output tokens. Limits: 1000K token context window, 30K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.20 Reasoning through Everstack Call Grok 4.20 Reasoning on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.20 Multi-Agent Source: https://everstack.ai/models/xai/grok-4.20-multi-agent-0309 Browser title: Grok 4.20 Multi-Agent: Pricing & Specs | Everstack Page type: website Review Grok 4.20 Multi-Agent on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.20 Multi-Agent pricing and limits on xAI Token pricing through xAI: $1.25 per million input tokens, $2.50 per million output tokens. Limits: 1000K token context window, 30K max output tokens. #### Capabilities and modalities Supported capabilities: chat, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.20 Multi-Agent through Everstack Call Grok 4.20 Multi-Agent on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.3 Source: https://everstack.ai/models/xai/grok-4.3 Browser title: Grok 4.3: Pricing & Specs | Everstack Page type: website Review Grok 4.3 on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.3 pricing and limits on xAI Token pricing through xAI: $1.25 per million input tokens, $2.50 per million output tokens. Limits: 1000K token context window, 30K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.3 through Everstack Call Grok 4.3 on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.5 on xAI Source: https://everstack.ai/models/xai/grok-4.5 Browser title: Grok 4.5 on xAI | Everstack Page type: website Review Grok 4.5 on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.5 pricing and limits on xAI Token pricing through xAI: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 500K token context window, 500K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.5 through Everstack Call Grok 4.5 on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4.6 on xAI Source: https://everstack.ai/models/xai/grok-4.6 Browser title: Grok 4.6 on xAI | Everstack Page type: website Review Grok 4.6 on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4.6 pricing and limits on xAI Token pricing through xAI: $2.00 per million input tokens, $6.00 per million output tokens. Limits: 500K token context window, 500K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4.6 through Everstack Call Grok 4.6 on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok 4 on xAI Source: https://everstack.ai/models/xai/grok-4 Browser title: Grok 4 on xAI | Everstack Page type: website Review Grok 4 on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok 4 pricing and limits on xAI Token pricing through xAI: $3.00 per million input tokens, $15.00 per million output tokens. Limits: 256K token context window, 64K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok 4 through Everstack Call Grok 4 on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok Build 0.1 Source: https://everstack.ai/models/xai/grok-build-0.1 Browser title: Grok Build 0.1: Pricing & Specs | Everstack Page type: website Review Grok Build 0.1 on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok Build 0.1 pricing and limits on xAI Token pricing through xAI: $1.00 per million input tokens, $2.00 per million output tokens. Limits: 256K token context window, 256K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, pdf input. Returns text output. Model family: grok-build. Catalog status: stable. #### Routing Grok Build 0.1 through Everstack Call Grok Build 0.1 on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Grok Code Fast Source: https://everstack.ai/models/xai/grok-code-fast-1 Browser title: Grok Code Fast: Pricing & Specs | Everstack Page type: website Review Grok Code Fast on xAI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### Grok Code Fast pricing and limits on xAI Token pricing through xAI: $0.200 per million input tokens, $1.50 per million output tokens. Limits: 256K token context window, 10K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning, coding. Accepts text input. Returns text output. Model family: grok. Catalog status: stable. #### Routing Grok Code Fast through Everstack Call Grok Code Fast on xAI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### Z.AI AI models Source: https://everstack.ai/models/zai Browser title: Z.AI AI Models & Pricing | Everstack Page type: website Browse 15 Z.AI AI models and compare pricing, context windows, capabilities, modalities, and configuration details in the Everstack model catalog. #### Compare Z.AI models in one catalog Review 15 Z.AI models by token price, context window, modality, capability, and deployment fit before routing them through Everstack. --- ### GLM-4.5-Air on Z.AI Source: https://everstack.ai/models/zai/glm-4.5-air Browser title: GLM-4.5-Air on Z.AI | Everstack Page type: website Review GLM-4.5-Air on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.5-Air pricing and limits on Z.AI Token pricing through Z.AI: $0.200 per million input tokens, $1.10 per million output tokens. Limits: 131K token context window, 98K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm-air. Catalog status: stable. #### Routing GLM-4.5-Air through Everstack Call GLM-4.5-Air on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.5-Flash Source: https://everstack.ai/models/zai/glm-4.5-flash Browser title: GLM-4.5-Flash: Pricing & Specs | Everstack Page type: website Review GLM-4.5-Flash on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.5-Flash pricing and limits on Z.AI Token pricing through Z.AI: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 131K token context window, 98K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm-flash. Catalog status: stable. #### Routing GLM-4.5-Flash through Everstack Call GLM-4.5-Flash on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.5 on Z.AI Source: https://everstack.ai/models/zai/glm-4.5 Browser title: GLM-4.5 on Z.AI | Everstack Page type: website Review GLM-4.5 on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.5 pricing and limits on Z.AI Token pricing through Z.AI: $0.600 per million input tokens, $2.20 per million output tokens. Limits: 131K token context window, 98K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-4.5 through Everstack Call GLM-4.5 on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.5V Source: https://everstack.ai/models/zai/glm-4.5v Browser title: GLM-4.5V: Pricing & Specs | Everstack Page type: website Review GLM-4.5V on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.5V pricing and limits on Z.AI Token pricing through Z.AI: $0.600 per million input tokens, $1.80 per million output tokens. Limits: 64K token context window, 16K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-4.5V through Everstack Call GLM-4.5V on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.6 Source: https://everstack.ai/models/zai/glm-4.6 Browser title: GLM-4.6: Pricing & Specs | Everstack Page type: website Review GLM-4.6 on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.6 pricing and limits on Z.AI Token pricing through Z.AI: $0.600 per million input tokens, $2.20 per million output tokens. Limits: 205K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-4.6 through Everstack Call GLM-4.6 on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.6V Source: https://everstack.ai/models/zai/glm-4.6v Browser title: GLM-4.6V: Pricing & Specs | Everstack Page type: website Review GLM-4.6V on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.6V pricing and limits on Z.AI Token pricing through Z.AI: $0.300 per million input tokens, $0.900 per million output tokens. Limits: 128K token context window, 33K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-4.6V through Everstack Call GLM-4.6V on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.7-Flash Source: https://everstack.ai/models/zai/glm-4.7-flash Browser title: GLM-4.7-Flash: Pricing & Specs | Everstack Page type: website Review GLM-4.7-Flash on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.7-Flash pricing and limits on Z.AI Token pricing through Z.AI: $0.000 per million input tokens, $0.000 per million output tokens. Limits: 200K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm-flash. Catalog status: stable. #### Routing GLM-4.7-Flash through Everstack Call GLM-4.7-Flash on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.7-FlashX Source: https://everstack.ai/models/zai/glm-4.7-flashx Browser title: GLM-4.7-FlashX: Pricing & Specs | Everstack Page type: website Review GLM-4.7-FlashX on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.7-FlashX pricing and limits on Z.AI Token pricing through Z.AI: $0.070 per million input tokens, $0.400 per million output tokens. Limits: 200K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm-flash. Catalog status: stable. #### Routing GLM-4.7-FlashX through Everstack Call GLM-4.7-FlashX on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-4.7 on Z.AI Source: https://everstack.ai/models/zai/glm-4.7 Browser title: GLM-4.7 on Z.AI | Everstack Page type: website Review GLM-4.7 on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-4.7 pricing and limits on Z.AI Token pricing through Z.AI: $0.600 per million input tokens, $2.20 per million output tokens. Limits: 205K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-4.7 through Everstack Call GLM-4.7 on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5-Turbo Source: https://everstack.ai/models/zai/glm-5-turbo Browser title: GLM-5-Turbo: Pricing & Specs | Everstack Page type: website Review GLM-5-Turbo on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5-Turbo pricing and limits on Z.AI Token pricing through Z.AI: $1.20 per million input tokens, $4.00 per million output tokens. Limits: 200K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5-Turbo through Everstack Call GLM-5-Turbo on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.1 on Z.AI Source: https://everstack.ai/models/zai/glm-5.1 Browser title: GLM-5.1 on Z.AI | Everstack Page type: website Review GLM-5.1 on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.1 pricing and limits on Z.AI Token pricing through Z.AI: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 200K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.1 through Everstack Call GLM-5.1 on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.2 on Z.AI Source: https://everstack.ai/models/zai/glm-5.2 Browser title: GLM-5.2 on Z.AI | Everstack Page type: website Review GLM-5.2 on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.2 pricing and limits on Z.AI Token pricing through Z.AI: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.2 through Everstack Call GLM-5.2 on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5.3 on Z.AI Source: https://everstack.ai/models/zai/glm-5.3 Browser title: GLM-5.3 on Z.AI | Everstack Page type: website Review GLM-5.3 on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5.3 pricing and limits on Z.AI Token pricing through Z.AI: $1.40 per million input tokens, $4.40 per million output tokens. Limits: 1000K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5.3 through Everstack Call GLM-5.3 on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5 on Z.AI Source: https://everstack.ai/models/zai/glm-5 Browser title: GLM-5 on Z.AI | Everstack Page type: website Review GLM-5 on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5 pricing and limits on Z.AI Token pricing through Z.AI: $1.00 per million input tokens, $3.20 per million output tokens. Limits: 205K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, reasoning. Accepts text input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5 through Everstack Call GLM-5 on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ### GLM-5V-Turbo Source: https://everstack.ai/models/zai/glm-5v-turbo Browser title: GLM-5V-Turbo: Pricing & Specs | Everstack Page type: website Review GLM-5V-Turbo on Z.AI: token pricing, context window, capabilities, modalities, and routing details in the Everstack model catalog. #### GLM-5V-Turbo pricing and limits on Z.AI Token pricing through Z.AI: $1.20 per million input tokens, $4.00 per million output tokens. Limits: 200K token context window, 131K max output tokens. #### Capabilities and modalities Supported capabilities: chat, function_calling, vision, reasoning. Accepts text, image, video, pdf input. Returns text output. Model family: glm. Catalog status: stable. #### Routing GLM-5V-Turbo through Everstack Call GLM-5V-Turbo on Z.AI through one OpenAI-compatible endpoint, with provider fallback, semantic caching, per-tenant rate limits, and OpenTelemetry traces for latency, tokens, and cost. --- ## Product feature narratives The following data contains the full product-page stories, proof points, capabilities, use cases, FAQs, documentation links, and search metadata. ```json [ { "slug": "gateway", "navTitle": "Gateway Routing", "eyebrow": "AI gateway", "title": "One model endpoint. Every routing decision under your control.", "summary": "Put one OpenAI-compatible API in front of every provider, then centralize routing, fallback, caching, limits, credentials, and tenant boundaries.", "image": "/images/product/illustrated/gateway-switchboard-v1.webp", "image2x": "/images/product/illustrated/gateway-switchboard-v1-2x.webp", "imageAlt": "An operator routing model traffic through an illustrated infrastructure switchboard", "docsHref": "https://docs.everstack.ai/getting-started/gateway/overview/", "docsLinks": [ { "title": "Routing and fallback chains", "href": "https://docs.everstack.ai/getting-started/gateway/routing/" }, { "title": "Exact and semantic caching", "href": "https://docs.everstack.ai/getting-started/gateway/caching/" }, { "title": "Rate limits and budgets", "href": "https://docs.everstack.ai/getting-started/gateway/rate-limiting/" } ], "proof": [ "OpenAI-compatible API", "200+ catalog models", "Fallback and balancing", "Tenant-scoped controls" ], "story": [ { "title": "Keep application code stable", "body": "Your application sends one request shape to one endpoint. Everstack translates provider formats and keeps model changes out of product code." }, { "title": "Route with operational context", "body": "Select providers through aliases, explicit routes, catalog metadata, health, and configured balancing strategies instead of hard-coded SDK calls." }, { "title": "Carry policy through every request", "body": "Authentication, tenant isolation, cache scope, rate limits, and telemetry stay attached from ingress to the upstream provider response." } ], "capabilities": [ { "title": "Provider abstraction", "body": "Translate OpenAI-shaped requests into provider-native calls while preserving streaming, tools, structured output, and provider-specific reasoning state." }, { "title": "Fallback chains", "body": "Move traffic to a configured alternative when a provider is unavailable, rate-limited, or outside the policy you set." }, { "title": "Exact and semantic caching", "body": "Serve repeated requests without another provider call, with tenant-scoped entries, configurable similarity, and explicit TTLs." }, { "title": "Rate limiting", "body": "Enforce request budgets per tenant and per key before traffic reaches a model provider." }, { "title": "Context compaction", "body": "Trim conversation history when it exceeds the selected model's context window while preserving the request contract." }, { "title": "Traceable economics", "body": "Capture model selection, cache decisions, latency, token use, cost, and fallback behavior in the same request trace." } ], "useCases": [ { "title": "Multi-provider products", "body": "Keep one integration while choosing the best provider for each workload." }, { "title": "Resilient production traffic", "body": "Keep requests moving through upstream incidents and rate limits." }, { "title": "Cost and latency control", "body": "Combine routing, caching, limits, and request-level telemetry." } ], "faqs": [ { "question": "Do applications need a new SDK?", "answer": "No. Existing OpenAI-compatible clients can point at the Everstack gateway by changing the base URL and credentials." }, { "question": "Can each tenant have different providers?", "answer": "Yes. Provider credentials, aliases, cache entries, and limits can remain isolated inside each tenant boundary." }, { "question": "Can the gateway run without the rest of the platform?", "answer": "You can start with routing alone, then enable caching, rate limiting, guardrails, and observability as your operating requirements grow." } ], "seo": { "title": "AI Gateway Routing | OpenAI-Compatible Multi-Provider API", "description": "Route AI traffic across providers with one OpenAI-compatible API, configurable fallback, semantic caching, rate limits, tenant isolation, and OpenTelemetry traces." } }, { "slug": "workflows", "navTitle": "Agents + Workflows", "eyebrow": "Agent orchestration", "title": "Use agents for judgment. Use workflows for control.", "summary": "Combine durable, tool-using agents with explicit workflow graphs so every workload gets the right balance of autonomy, repeatability, and review.", "image": "/images/product/illustrated/workflows-orchestration-workshop-v1.webp", "image2x": "/images/product/illustrated/workflows-orchestration-workshop-v1-2x.webp", "imageAlt": "An illustrated operator arranging a clear sequence of connected AI workflow stations", "docsHref": "https://docs.everstack.ai/getting-started/studio/overview/", "docsLinks": [ { "title": "Building a workflow", "href": "https://docs.everstack.ai/getting-started/studio/building-workflows/" }, { "title": "Node reference", "href": "https://docs.everstack.ai/getting-started/studio/node-reference/" }, { "title": "Execution and replay", "href": "https://docs.everstack.ai/getting-started/studio/execution/" } ], "proof": [ "Durable agent sessions", "Visual DAG workflows", "Parallel branches", "Human approval gates" ], "story": [ { "title": "Choose the right execution model", "body": "Use a function for one bounded action, a workflow for explicit control flow, and an agent when the path depends on what the model discovers." }, { "title": "Compose without hiding the handoffs", "body": "Workflow nodes make model calls, agents, functions, HTTP requests, memory operations, and safety checks visible as one versioned graph." }, { "title": "Keep long-running work durable", "body": "Sessions, tools, approvals, streaming events, sandbox state, and subagent coordination remain managed by the runtime." } ], "capabilities": [ { "title": "Tool-using agents", "body": "Run open-ended reasoning loops that can call tools, inspect results, and adapt their next action inside configured limits." }, { "title": "Visual workflow graphs", "body": "Connect typed nodes for models, agents, code, integrations, logic, safety, voice, and data." }, { "title": "Parallel execution", "body": "Run independent branches together when the dependency graph allows it." }, { "title": "Triggers", "body": "Start deployed workflows through webhooks, schedules, or direct API calls with explicit input variables." }, { "title": "Versioned deployment", "body": "Keep drafts separate from deployed workflow versions and roll back when an orchestration change misbehaves." }, { "title": "Approval boundaries", "body": "Pause sensitive tool calls or workflow steps until a reviewer explicitly approves the action." } ], "useCases": [ { "title": "Adaptive operations", "body": "Let an agent investigate while a workflow controls the surrounding process." }, { "title": "Repeatable AI pipelines", "body": "Version explicit branches, retries, transforms, and review steps." }, { "title": "Background automation", "body": "Trigger durable work from schedules, webhooks, or application events." } ], "faqs": [ { "question": "When should I use an agent instead of a workflow?", "answer": "Use an agent when the model must choose the next action from intermediate results. Use a workflow when the steps and decision points should remain explicit." }, { "question": "Can a workflow call an agent?", "answer": "Yes. Agent runs, functions, model calls, guardrails, integrations, and memory operations can participate in the same workflow graph." }, { "question": "Are workflow runs observable?", "answer": "Yes. Execution events, node timing, payloads, token use, errors, and guardrail outcomes link into the platform trace." } ], "seo": { "title": "AI Agents and Workflow Orchestration | Everstack", "description": "Combine durable tool-using AI agents with versioned visual workflows, parallel branches, triggers, retries, memory, and human approval gates." } }, { "slug": "sandboxes", "navTitle": "Sandboxes", "eyebrow": "Isolated execution", "title": "Give AI real tools without giving it the host.", "summary": "Run shell commands, code, browsers, files, and long-lived processes inside isolated environments with explicit compute, storage, network, and retention boundaries.", "image": "/images/product/illustrated/sandboxes-isolated-compute-v1.webp", "image2x": "/images/product/illustrated/sandboxes-isolated-compute-v1-2x.webp", "imageAlt": "An illustrated operator supervising separate protected compute rooms", "docsHref": "https://docs.everstack.ai/getting-started/sandboxes/overview/", "docsLinks": [ { "title": "Shell and filesystem access", "href": "https://docs.everstack.ai/getting-started/sandboxes/shell-and-files/" }, { "title": "Networking and port exposure", "href": "https://docs.everstack.ai/getting-started/sandboxes/networking/" }, { "title": "Snapshots and restore", "href": "https://docs.everstack.ai/getting-started/sandboxes/snapshots/" } ], "proof": [ "Isolated compute", "Controlled networking", "Snapshots", "Signed previews" ], "story": [ { "title": "Isolate every execution boundary", "body": "Give each workload a filesystem, process space, resource envelope, and network policy without exposing the gateway host." }, { "title": "Match isolation to the workload", "body": "Choose the compute, retention, and network boundaries each workload needs without exposing the host or coupling applications to the underlying runtime." }, { "title": "Keep environments useful", "body": "Start from templates or snapshots, mount persistent volumes, expose approved ports, and retain state only as long as the workload needs it." } ], "capabilities": [ { "title": "Shell and file access", "body": "Execute commands, stream output, read and write files, and inspect a live working environment through typed APIs." }, { "title": "Resource limits", "body": "Set CPU, memory, disk, timeout, and retention behavior for each allocation." }, { "title": "Network policy", "body": "Allow, deny, or whitelist egress and control exactly which ports can be exposed." }, { "title": "Snapshots and templates", "body": "Reuse prepared language environments or your own images instead of rebuilding every session from zero." }, { "title": "Persistent volumes", "body": "Share caches, datasets, and artifacts across restarts without weakening process isolation." }, { "title": "Interactive automation", "body": "Support SSH, browser or computer use, private networking, and long-running processes when the workload requires them." } ], "useCases": [ { "title": "Coding agents", "body": "Clone repositories, install dependencies, run tests, and inspect failures safely." }, { "title": "Data and document work", "body": "Process untrusted inputs inside an environment with explicit network and retention rules." }, { "title": "Persistent development environments", "body": "Keep files and processes available across agent sessions without sharing a host workspace." } ], "faqs": [ { "question": "How much isolation does a sandbox provide?", "answer": "Each sandbox receives an explicit process, filesystem, resource, lifecycle, and network boundary. Everstack selects and manages the runtime behind that contract for the deployment." }, { "question": "Can a sandbox keep state between sessions?", "answer": "Yes. Persistent sandboxes, snapshots, and mounted volumes support workloads that need files or processes beyond one turn." }, { "question": "Can I block network access?", "answer": "Yes. Network modes can allow, deny, or whitelist traffic, with separate control over exposed ports and private connectivity." } ], "seo": { "title": "AI Sandboxes | Isolated Compute for Agents and Applications", "description": "Run code, agents, preview services, and jobs in isolated Everstack sandboxes with shell, files, lifecycle controls, signed previews, resource limits, and network policy." } }, { "slug": "observability", "navTitle": "Observability", "eyebrow": "OpenTelemetry-native operations", "title": "See the request, the agent, and every expensive decision between them.", "summary": "Correlate model routing, tool calls, sandboxes, approvals, evaluations, latency, tokens, and cost through one OpenTelemetry-native operating view.", "image": "/images/product/illustrated/observability-signal-observatory-v1.webp", "image2x": "/images/product/illustrated/observability-signal-observatory-v1-2x.webp", "imageAlt": "An illustrated operator observing AI workload signals from a night-time monitoring station", "docsHref": "https://docs.everstack.ai/getting-started/observability/overview/", "docsLinks": [ { "title": "Traces and spans", "href": "https://docs.everstack.ai/getting-started/observability/traces/" }, { "title": "Searching telemetry", "href": "https://docs.everstack.ai/getting-started/observability/search/" }, { "title": "Instrumenting coding agents", "href": "https://docs.everstack.ai/getting-started/observability/coding-agents/" } ], "proof": [ "Distributed traces", "Structured logs", "Operational metrics", "Cost attribution" ], "story": [ { "title": "Trace the full AI lifecycle", "body": "Follow gateway middleware, provider calls, streaming, agent turns, tool execution, approvals, sandboxes, and evaluation results as one correlated trace." }, { "title": "Debug the decision, not only the request", "body": "Inspect which provider was selected, whether a cache hit, when fallback activated, and where time or tokens were spent." }, { "title": "Keep your telemetry pipeline", "body": "Use the embedded collection path or export OTLP into the OpenTelemetry infrastructure your team already operates." } ], "capabilities": [ { "title": "Trace explorer", "body": "Search and inspect span trees for gateway requests, agent sessions, workflow runs, and evaluations." }, { "title": "Structured logs", "body": "Query logs across services and correlate entries through shared trace and span identifiers." }, { "title": "Operational metrics", "body": "Track volume, latency percentiles, errors, tokens, and cost across models, providers, projects, and agents." }, { "title": "Configurable granularity", "body": "Choose minimal, standard, or detailed tracing based on the evidence and storage profile you need." }, { "title": "Fallback visibility", "body": "See when routing changed providers and how that choice affected latency, errors, and spend." }, { "title": "Evaluation links", "body": "Jump from a failed quality score to the exact request or agent trace that produced it." } ], "useCases": [ { "title": "Production debugging", "body": "Find the span, provider, tool, or sandbox operation behind a failure." }, { "title": "Cost control", "body": "Attribute tokens and spend to the workload that created them." }, { "title": "SLOs and capacity", "body": "Track latency, errors, and traffic patterns before customers report them." } ], "faqs": [ { "question": "Does Everstack require a separate collector?", "answer": "No. Everstack can collect telemetry directly, or export through OTLP when your deployment already uses an OpenTelemetry Collector." }, { "question": "Can I trace an entire agent turn?", "answer": "Yes. Model calls, tool calls, approval events, and sandbox lifecycle operations nest under the session and turn spans." }, { "question": "Can traces show token cost?", "answer": "Yes. Provider spans carry token and cost attributes so request economics remain connected to operational behavior." } ], "seo": { "title": "AI Observability | OpenTelemetry Traces, Logs and Metrics", "description": "Trace gateway requests, agent sessions, tools, sandboxes, evaluations, latency, token usage, and cost through OpenTelemetry-native observability." } }, { "slug": "evaluations", "navTitle": "Evaluations", "eyebrow": "Quality evaluation", "title": "Turn AI quality from a feeling into a release signal.", "summary": "Score datasets and production traces with built-in metrics, LLM judges, deterministic code, and human review, then catch regressions before they ship.", "image": "/images/product/illustrated/evaluations-testing-lab-v1.webp", "image2x": "/images/product/illustrated/evaluations-testing-lab-v1-2x.webp", "imageAlt": "An illustrated testing station comparing and scoring AI outputs", "docsHref": "https://docs.everstack.ai/getting-started/evaluations/overview/", "docsLinks": [ { "title": "Datasets", "href": "https://docs.everstack.ai/getting-started/evaluations/datasets/" }, { "title": "Scorers", "href": "https://docs.everstack.ai/getting-started/evaluations/scorers/" }, { "title": "Running an eval", "href": "https://docs.everstack.ai/getting-started/evaluations/running-evals/" } ], "proof": [ "LLM-as-judge", "Code scorers", "Datasets and baselines", "Human annotations" ], "story": [ { "title": "Define what good means", "body": "Combine built-in metrics with your own numeric, boolean, categorical, model-judged, or code-based scoring criteria." }, { "title": "Evaluate repeatably", "body": "Run the same dataset across prompt, model, or application changes and compare results against an accepted baseline." }, { "title": "Connect quality to operations", "body": "Link each score to its source trace, schedule recurring runs, and bring people into ambiguous or high-stakes review queues." } ], "capabilities": [ { "title": "Built-in metrics", "body": "Measure answer relevancy, faithfulness, hallucination, bias, and toxicity with ready-to-use scoring rubrics." }, { "title": "LLM judges", "body": "Grade outputs against your criteria, source context, and reference answers with a separate evaluation model." }, { "title": "Sandboxed code scorers", "body": "Run Python, JavaScript, or TypeScript checks for deterministic and domain-specific evaluation." }, { "title": "Datasets and baselines", "body": "Manage representative test cases and promote an accepted run as the comparison point for future changes." }, { "title": "Scheduled and CI runs", "body": "Run suites on a schedule or in delivery pipelines so quality regressions surface before rollout." }, { "title": "Human annotation", "body": "Route uncertain, sensitive, or sampled cases to reviewers and keep their decisions with the evaluation record." } ], "useCases": [ { "title": "Prompt iteration", "body": "Compare versions on the same cases instead of relying on selected examples." }, { "title": "Model migration", "body": "Measure the quality and safety impact before changing production models." }, { "title": "Production quality monitoring", "body": "Sample live traces and detect changes that latency and error metrics cannot see." } ], "faqs": [ { "question": "What is an LLM judge?", "answer": "It is a separate model that grades an output against a defined rubric, the original input, and optional context or reference answers." }, { "question": "Can evaluations be deterministic?", "answer": "Yes. Code scorers run in isolated sandboxes and can enforce exact domain rules alongside model-based metrics." }, { "question": "Can an evaluation link back to a trace?", "answer": "Yes. Evaluation cases can reference the gateway or agent trace that produced the output, which keeps quality evidence connected to runtime behavior." } ], "seo": { "title": "AI Evaluations | LLM Judges, Code Scorers and Regression Tests", "description": "Evaluate AI outputs with built-in metrics, LLM-as-judge scoring, sandboxed code scorers, datasets, baselines, scheduling, CI gates, and human review." } }, { "slug": "guardrails", "navTitle": "Guardrails", "eyebrow": "Runtime policy", "title": "Inspect every boundary before unsafe data crosses it.", "summary": "Apply input and output checks for prompt injection, sensitive data, unsafe content, jailbreak markers, and dangerous code at the gateway or inside a workflow.", "image": "/images/product/illustrated/guardrails-checkpoint-v1.webp", "image2x": "/images/product/illustrated/guardrails-checkpoint-v1-2x.webp", "imageAlt": "An illustrated checkpoint inspecting AI requests before they enter a protected system", "docsHref": "https://docs.everstack.ai/getting-started/guardrails/overview/", "docsLinks": [ { "title": "Input guardrails", "href": "https://docs.everstack.ai/getting-started/guardrails/input-guardrails/" }, { "title": "Output guardrails", "href": "https://docs.everstack.ai/getting-started/guardrails/output-guardrails/" }, { "title": "Configuring a policy", "href": "https://docs.everstack.ai/getting-started/guardrails/configuration/" } ], "proof": [ "Input and output checks", "PII detection", "Prompt injection controls", "Traceable violations" ], "story": [ { "title": "Check inputs before model spend", "body": "Inspect freeform user content for sensitive data, prompt injection, unsafe categories, and configured token limits before it reaches a provider." }, { "title": "Check outputs before delivery", "body": "Apply jailbreak, toxicity, and dangerous code checks after generation but before the response reaches the application or user." }, { "title": "Make the policy path explicit", "body": "Run guardrails across gateway traffic or place pass and block branches directly inside a workflow graph." } ], "capabilities": [ { "title": "Sensitive data detection", "body": "Detect configured patterns such as payment data, identity numbers, email addresses, phone numbers, and IP addresses." }, { "title": "Prompt injection checks", "body": "Block common instruction overrides, role impersonation, and system prompt extraction attempts." }, { "title": "Content filtering", "body": "Inspect configured safety categories before input reaches a model and before output reaches a user." }, { "title": "Jailbreak detection", "body": "Flag known refusal bypass markers and developer-mode patterns in generated output." }, { "title": "Code execution prevention", "body": "Detect dangerous function patterns when generated content must not contain executable system actions." }, { "title": "Violation records", "body": "Attach pass or block outcomes to execution context, traces, and workflow logs for audit and tuning." } ], "useCases": [ { "title": "Public AI applications", "body": "Apply consistent policy to unpredictable user input and model output." }, { "title": "Sensitive workflows", "body": "Stop protected data before it reaches an external model or downstream tool." }, { "title": "Auditable policy enforcement", "body": "Keep each intervention connected to the request and workflow that triggered it." } ], "faqs": [ { "question": "Where do guardrails run?", "answer": "They can run across gateway requests through configuration or as explicit input and output nodes inside Workflow Studio." }, { "question": "Are guardrails enabled automatically?", "answer": "No. Gateway guardrails are explicitly configured so teams can choose the checks, actions, and thresholds that match their application." }, { "question": "Can a violation be audited later?", "answer": "Yes. Guardrail outcomes are recorded in execution context and appear in traces and workflow execution logs." } ], "seo": { "title": "AI Guardrails | Prompt Injection, PII and Runtime Safety", "description": "Protect AI inputs and outputs with runtime checks for prompt injection, sensitive data, unsafe content, jailbreak markers, dangerous code, and traceable policy violations." } } ] ``` ## Agent runtime, CLI, and Sites page data ```json { "cli": {}, "agentRuntimeAndSites": { "agentFaqs": [ { "question": "Is EVS a library or a hosted service?", "answer": "EVS is the agent-as-code experience layered over Everstack's open-source runtime. You can run the platform yourself with Docker or Kubernetes and keep execution, state, and telemetry in your environment." }, { "question": "What does Everstack manage for an agent?", "answer": "The runtime manages sessions, tool dispatch, sandbox provisioning, approvals, memory, subagent coordination, streaming events, limits, and deployment lifecycle." }, { "question": "Can the same agent run locally and in production?", "answer": "That is the goal of the EVS repository contract: keep the agent definition portable while choosing local, Docker, or Kubernetes execution for each environment." }, { "question": "Can EVS work with existing tools and MCP servers?", "answer": "Yes. Everstack can expose built-in tools, custom functions, HTTP integrations, and federated MCP tools through the same runtime policy and trace context." } ], "agentMappings": [ { "source": "instructions.md", "result": "Identity and operating boundaries", "detail": "A reviewable description of the role, constraints, and completion criteria." }, { "source": "agent.yaml", "result": "Runtime, model, memory, and policy", "detail": "One portable manifest for lifecycle, limits, isolation, and approvals." }, { "source": "skills/ + tools/", "result": "Focused guidance and typed actions", "detail": "Load knowledge only when relevant and keep every action schema explicit." }, { "source": "subagents/ + schedules/", "result": "Delegation and scheduled background work", "detail": "Specialized workers and recurring tasks use the same session and policy plane." } ], "publishFaqs": [ { "question": "What exists today?", "answer": "EVS Sites is a product preview, not a generally available hosting service. The phase-one publishing foundation is in development: content-addressed assets, immutable manifests, private preview access, activation, and rollback." }, { "question": "What will phase one publish?", "answer": "Browser-ready output only: static sites, single-page apps, reports, dashboards, documents, and other files an agent has already built. It will not execute server bundles or provide SSR." }, { "question": "Does it require a particular agent framework?", "answer": "No. The intended contract is an HTTP API plus an agent skill, so Codex, Claude Code, Cursor, CI jobs, or any harness capable of HTTP requests can use it." }, { "question": "Is EVS Sites another Cloudflare?", "answer": "No. Cloudflare is a broad web platform and remains the better choice for general websites, CDN, and edge compute. Sites is being built for agent-created surfaces that need provenance, governed access, traces, and a scoped path back into an Everstack runtime." }, { "question": "Where does the Everstack runtime fit?", "answer": "It does not sit in the static serving path. A later phase will let approved routes call an Everstack agent or function with the site's identity, policy, and trace context attached." } ], "publishMappings": [ { "source": "hash", "result": "Address every file by content", "detail": "Tenant-scoped hashes make unchanged assets reusable without making one tenant's files visible to another." }, { "source": "manifest", "result": "Seal an immutable version", "detail": "Paths, content types, sizes, hashes, the entrypoint, and SPA behaviour are explicit and validated." }, { "source": "verify", "result": "Refuse incomplete publishes", "detail": "A version cannot activate until every referenced blob exists and matches the manifest's declared size." }, { "source": "activate", "result": "Move one route, or move it back", "detail": "Activation points the hostname at one sealed version. Rollback is the same operation with an older version." } ], "publishPhases": [ { "number": "01", "status": "In development", "title": "Static serving foundation", "body": "Turn browser-ready output into a private, versioned surface without pretending a server process exists.", "deliverables": [ "Tenant-scoped blobs", "Immutable manifests", "Private preview links", "Activation + rollback" ] }, { "number": "02", "status": "Next", "title": "Governed agent surfaces", "body": "Carry the source task, owner, access policy, approval state, retention, and audit history with the URL.", "deliverables": [ "Everstack identity", "Task provenance", "Access policies", "Audit + retention" ] }, { "number": "03", "status": "Planned", "title": "Scoped runtime routes", "body": "Let an approved frontend route call one Everstack agent or function without turning the static plane into a general runtime.", "deliverables": [ "Scoped /api routes", "Agent + function targets", "End-to-end traces", "BYOC serving adapter" ] } ] } } ``` ## Landing interface copy inventory This inventory captures the remaining published labels, headings, descriptions, calls to action, image descriptions, status text, and interactive copy from landing page route and feature components. ```json [ { "sourcePath": "components/cli/cli-workbench.tsx", "text": [ "evs / quickstart", "Commands checked:", "CLI workflows", "Before you start", "Review the installer script" ] }, { "sourcePath": "components/cli/command-snippet.tsx", "text": [ "bash", "Copy {label}", "Copied", "Copy", "{label} command", "{label} copied to clipboard.", "Clipboard unavailable. Select the command and copy it manually." ] }, { "sourcePath": "components/comparison/alternatives-page.tsx", "text": [ "Alternatives to", "Reviewed", "Why teams look for an alternative", "The alternatives", "Ours", "Best for:", "Watch out:", "Full", "comparison", "How to choose" ] }, { "sourcePath": "components/comparison/competitor-matrix.tsx", "text": [ "TrueFoundry Gateway", "TrueFoundry Overview", "TrueFoundry OTEL", "TrueFoundry MCP", "TrueFoundry Proxy API", "Portkey AI Gateway", "Portkey Fallbacks", "Portkey Conditional Routing", "Portkey Caching", "Portkey Prompt Playground", "Portkey Logs & Analytics", "LiteLLM Proxy", "LiteLLM Routing", "LiteLLM Caching", "LiteLLM MCP Gateway", "OpenRouter Routing", "OpenRouter Docs", "OpenRouter Prompt Caching", "Vercel AI Gateway", "Vercel BYOK", "Vercel Zero Data Retention", "Vercel Sandbox", "Cloudflare AI Gateway", "Cloudflare Caching", "Cloudflare Rate Limiting", "Cloudflare Analytics", "Cloudflare Logging", "Cloudflare BYOK", "Cloudflare Request Handling", "Cloudflare Universal Endpoint", "Cloudflare MCP", "Gateway & Routing", "Unified multi-provider API gateway", "Everstack combines gateway routing with agent runtime, memory, and controls, so teams avoid stitching multiple products.", "yes", "Conditional routing and smart failover", "Routing policies are deeply integrated with fallback chains, cost signals, and provider health in one control plane.", "Semantic caching built-in", "Semantic cache is native to the platform and tied directly to gateway decisions, reducing repeat-token spend automatically.", "Simple response caching", "Everstack supports straightforward response caching for repeated requests, then layers semantic caching for intent-level reuse.", "Model + provider fallback controls", "Fallback rules can be configured at gateway level without external orchestration layers.", "Bring-your-own-provider keys", "Provider key management is built into the same gateway stack used for routing, metering, and policy enforcement.", "Agent Platform Depth", "Built-in agent runtime/orchestration", "Everstack ships an integrated runtime for tool-using agents instead of stopping at proxy-only infrastructure.", "Integrated sandboxed code execution", "Isolated execution is a first-class platform primitive, enabling secure tool calls and code tasks without external sandbox vendors.", "HITL approval controls in execution loop", "Human-in-the-loop gates are native to runtime flow, not bolted on as external UI or webhook logic.", "Integrated memory + tool execution support", "Memory and tool orchestration share one runtime context, improving reliability of multi-step agent tasks.", "Persistent memory layer (store + retrieval)", "Persistent memory is platform-native, so teams can retain context across sessions without managing separate memory infrastructure.", "Visual Workflows Studio (agents + evals)", "Workflows Studio provides one place to design, operate, and evaluate agent workflows tied to the live gateway stack.", "Voice-ready orchestration in platform stack", "Voice-capable orchestration is handled within the same runtime and routing layer used for text and tools.", "Built-in functions runtime (webhook/proxy/isolated)", "Functions run in the same governed environment as routing and agents, supporting secure execution modes out of the box.", "Advanced Agent Infrastructure", "Fastpath routing engine for low-latency serving", "Fastpath is purpose-built for high-throughput routing, helping production latency without sacrificing policy control.", "Isolated functions execution (sandbox-first)", "Everstack can execute functions in isolated environments, which is critical for secure enterprise agent operations.", "Channels-integrated agents (OpenClaw/Spacebot-style)", "Channel-native agent experiences can be managed directly in-platform rather than requiring separate bot orchestration stacks.", "Task runners for scheduled/background agent jobs (roadmap)", "Roadmap direction extends runtime into background execution, enabling recurring and asynchronous agent workflows.", "planned", "Multi-agent communication and orchestration", "Everstack supports coordinated agent patterns where specialized agents collaborate inside one managed runtime.", "Cross-agent memory retrievals", "Shared memory retrieval across agents enables better continuity and context handoff in complex workflows.", "Evaluations & Prompt Ops", "Evaluation datasets management", "Everstack includes dataset-oriented evaluation workflows so teams can run repeatable quality checks against stable test sets.", "Eval runs and historical run tracking", "Eval runs are treated as first-class records, enabling longitudinal quality tracking and release gating.", "Annotation queues for human review", "Everstack supports human feedback workflows to review edge cases and improve evaluation quality over time.", "Score configs (metric and judge config)", "Teams can define reusable scoring configurations to standardize evaluation criteria across projects.", "Prompt partials (roadmap)", "Prompt partials will let teams compose reusable prompt fragments and manage them as shared building blocks.", "Prompt playground (roadmap)", "Roadmap playground support will enable rapid prompt/model iteration in the same platform where routing and production behavior are configured.", "Prompt library (roadmap)", "Roadmap prompt library support will keep prompt assets versionable and discoverable for teams shipping multiple agent experiences.", "Observability & Control", "End-to-end traces (gateway + agent + tools)", "Tracing spans gateway decisions, agent loops, and tool calls in one telemetry surface for faster debugging.", "Centralized spend/cost analytics", "Cost visibility is unified across providers, models, and execution paths instead of split across multiple vendor dashboards.", "Rate limits and policy controls", "Policy and rate limiting are applied consistently at runtime and gateway layers using shared tenant context.", "Configurable data retention periods", "Everstack supports configurable retention controls so teams can align telemetry and runtime data lifecycles with compliance needs.", "Configurable retention windows for telemetry and runtime data based on your deployment policy.", "Model catalog with route-ready metadata", "Model catalog and routing logic are integrated, so teams can map quality/cost metadata directly to runtime policies.", "MCP gateway/portal support", "Everstack provides MCP support as part of a full production stack, combining protocol compatibility with controls, observability, and deployment flexibility.", "Deployment & Ownership", "Self-hosted deployment path", "Self-hosted deployment is a core design goal, supporting compliance and data sovereignty requirements.", "Single-binary full-stack architecture", "A single-binary architecture minimizes operational complexity while still delivering full platform capabilities.", "On-prem / private VPC friendly", "Everstack is designed for private environments, making enterprise rollout easier in regulated settings.", "Multi-tenant controls out of the box", "Tenant isolation and access controls are built in from day one, reducing custom security work for production teams.", "Flue docs", "Everstack", "TrueFoundry", "Portkey", "LiteLLM", "OpenRouter", "Vercel AI GW", "Cloudflare", "Flue", "Proof", "Feature", "Full comparison", "Why Everstack wins: Unified multi-provider API gateway", "Why Everstack wins: Conditional routing and smart failover", "Why Everstack wins: Semantic caching built-in", "Why Everstack wins: Simple response caching", "Why Everstack wins: Model + provider fallback controls", "Why Everstack wins: Bring-your-own-provider keys", "Why Everstack wins: {row.feature}", "Why Everstack wins: Built-in agent runtime/orchestration", "Why Everstack wins: Integrated sandboxed code execution", "Why Everstack wins: HITL approval controls in execution loop", "Why Everstack wins: Integrated memory + tool execution support", "Why Everstack wins: Persistent memory layer (store + retrieval)", "Why Everstack wins: Visual Workflows Studio (agents + evals)", "Why Everstack wins: Voice-ready orchestration in platform stack", "Why Everstack wins: Built-in functions runtime (webhook/proxy/isolated)", "Why Everstack wins: Fastpath routing engine for low-latency serving", "Why Everstack wins: Isolated functions execution (sandbox-first)", "Why Everstack wins: Channels-integrated agents (OpenClaw/Spacebot-style)", "Why Everstack wins: Task runners for scheduled/background agent jobs (roadmap)", "Why Everstack wins: Multi-agent communication and orchestration", "Why Everstack wins: Cross-agent memory retrievals", "Why Everstack wins: Evaluation datasets management", "Why Everstack wins: Eval runs and historical run tracking", "Why Everstack wins: Annotation queues for human review", "Why Everstack wins: Score configs (metric and judge config)", "Why Everstack wins: Prompt partials (roadmap)", "Why Everstack wins: Prompt playground (roadmap)", "Why Everstack wins: Prompt library (roadmap)", "Why Everstack wins: End-to-end traces (gateway + agent + tools)", "Why Everstack wins: Centralized spend/cost analytics", "Why Everstack wins: Rate limits and policy controls", "Why Everstack wins: Configurable data retention periods", "Retention can be tuned via deployment/data stack configuration; exact periods depend on setup and plan.", "Retention is plan-dependent in hosted offerings; verify current plan limits in their docs.", "Retention depends on your storage setup when self-hosted and observability backend choices.", "Retention controls are limited for gateway observability-style data compared to full platform offerings.", "Retention is tied to platform analytics/log settings and may vary by plan.", "Retention is governed by Cloudflare product/logging settings and configured account policies.", "Why Everstack wins: Model catalog with route-ready metadata", "Why Everstack wins: MCP gateway/portal support", "Why Everstack wins: Self-hosted deployment path", "Why Everstack wins: Single-binary full-stack architecture", "Why Everstack wins: On-prem / private VPC friendly", "Why Everstack wins: Multi-tenant controls out of the box", "Yes", "Partial", "Planned", "No", "Based on official docs and product pages as of March 4, 2026. Rows marked roadmap reflect publicly stated direction." ] }, { "sourcePath": "components/comparison/detail-comparison-page.tsx", "text": [ "Everstack", "/10", "Architecture", "Self-hosted deployment", "Cloud-first", "Gateway + Runtime + Memory", "Sandboxed execution", "Gateway", "Multi-provider routing", "Fallback & retry logic", "Rate limiting & quotas", "Custom middleware", "Limited", "Runtime", "Agent orchestration", "Memory management", "Tool execution control", "Security", "Tenant isolation", "Policy enforcement", "Partial", "Audit logging", "Basic", "Observability", "Full-stack tracing", "API-level", "Cost analytics", "Custom metrics", "Comparison", "vs", "View pricing", "Read documentation", "What is", "Why teams choose Everstack", ": Strengths & Limitations", "Strengths", "Limitations", "Everstack advantage", "The facts, side by side", "Licence, deployment model and list price, taken from each vendor's own documentation. Every source is linked at the bottom of this page.", "Fact", "At a glance", "Buyer-fit scoring to speed decisions", "Feature comparison", "Direct capability comparison across key dimensions", "Feature", "The same job, in both products", "Working code rather than adjectives. Each snippet follows the quickstart published by the product it belongs to.", "Key evaluation questions", "What to ask when comparing", "to Everstack", "Question", "How Everstack solves your pain points", "Common problems and how Everstack addresses them compared to", "Problem", "Everstack Solution", "Customer Impact", "Feature-by-feature analysis", "Where each product is genuinely stronger, row by row", "Moving from", "What breaks", "What does not carry over", "Read this part first", "When to choose", "instead", "Frequently asked questions", "Common questions about choosing between Everstack and", "Ready to get started?", "See how Everstack compares to", "for your specific use case.", "Read docs", "Sources & References", "Last reviewed:", ". This comparison is for informational purposes and reflects our understanding of competitor capabilities based on publicly available documentation.", "← Back to all comparisons" ] }, { "sourcePath": "components/comparison/related-comparisons.tsx", "text": [ "More comparisons", "Everstack against the gateways, observability tools, and sandboxes teams usually evaluate alongside it.", "Everstack vs" ] }, { "sourcePath": "components/compatibility/compatibility-detail-page.tsx", "text": [ "{category.accent} {category.description}", "An illustrated infrastructure interchange joining different technology connections through one governed route", "How the gateway works", "Compatibility directory", "Pick what you already use.", "Every entry leads to its exact model catalog, setup guide, or a transparent explanation of the connection path.", "Connection model", "One clean path into production.", "Explore the full surface", "Compatibility works across the stack.", "View compatibility overview", "Languages & SDKs", "Agent Frameworks", "Model Providers", "Tools & Integrations", "Build without lock-in", "Bring your stack. Operate it as one.", "Start with the gateway, then add the runtime services your application needs without replacing the tools it already uses.", "Start with $5 credits" ] }, { "sourcePath": "components/compatibility/compatibility-overview.tsx", "text": [ "Compatibility", "Your stack, with a stronger center.", "Everstack connects the languages, frameworks, models, and tools you already use through stable APIs and open protocols. Adopt one layer at a time and keep the rest of your architecture intact.", "An illustrated infrastructure switchyard joining different SDK, framework, provider, and tool connections", "SDKs", "Agent frameworks", "Model providers", "Tools and protocols", "Explore compatibility", "Read integration docs", "An open integration boundary", "No closed marketplace between your application and its tools.", "OpenAI-compatible APIs, MCP, webhooks, and OpenTelemetry keep the seams inspectable and make the next integration predictable.", "Request a compatibility path" ] }, { "sourcePath": "components/compatibility/integration-directory.tsx", "text": [ "{item.label}: {item.linkLabel}", "Integration directory", "Find your way into Everstack.", "Find your language, framework, or provider. See how it connects, what is supported, and where to start.", "Find your integration", "Try Python, LangChain, OpenAI…", "Clear integration search", "Integration categories", "Everything", "setup guide", "Your existing tools. Clear paths into Everstack.", "integration", "integrations", "No matching integrations", "Try another name or search across every category.", "Show all integrations", "Missing your tool?", "Request an integration" ] }, { "sourcePath": "components/landing/catalog-updates.tsx", "text": [ "{formatModality(modality)} {direction}", "New in the catalog", "Read the catalog changelog", "{model.name} catalog update", "Input", "Output", "Browse all models" ] }, { "sourcePath": "components/landing/cta.tsx", "text": [ "Open-source AI infrastructure", "Ship the AI stack", "you can actually operate.", "Start with one model call. Add agents, sandboxes, evaluations, memory, and traces without replacing the foundation underneath them.", "Self-host Everstack" ] }, { "sourcePath": "components/landing/faq.tsx", "text": [ "FAQ", "Frequently asked questions", "The short version of how Everstack fits into a production AI stack.", "Have a specific setup in mind?", "Explore the documentation →" ] }, { "sourcePath": "components/landing/getting-started.tsx", "text": [ "Get started with Everstack", "Your first request. Your next application.", "Your AI stack, managed.", "Includes $", "in starter usage credit.", "Start building", "No infrastructure to manage. Add services as your application grows.", "Gateway request path", "Your application", "Everstack gateway", "Your provider", "Follow the gateway quickstart", "Explore the agent runtime", "Compare plans and usage pricing" ] }, { "sourcePath": "components/landing/hero-product-showcases.tsx", "text": [ "Observability", "Gateway", "Evaluations", "Deployments", "Sites", "Vault", "Storage", "Everstack workspace", "Everstack", "Agents", "Studio", "Sandboxes", "Functions", "Memory", "Channels", "Voice", "Chat", "Overview", "Settings", "Automations", "API", "A2A", "Handles tier-1 support conversations", "Retrieves and ranks knowledge chunks", "Scores tone on inbound messages", "Reviews diffs against house rules", "Drafts replies for human approval", "Ephemeral", "Name", "Status", "Description", "Tools", "Model", "Enabled", "Search agents...", "Primary", "Subagent", "Persistent runtime", "Ephemeral runtime", "Max turns", "Tool budget", "Runtime profile", "Operational limits and execution defaults for this agent.", "Lifecycle", "Permission mode", "Working directory", "Max steps", "Created", "Updated", "Prompting", "How the agent is primed before it starts reasoning.", "System prompt", "lines", "Deployments / Agents", "agents", "Persistent", "Permission", "Active", "Expired", "Disabled", "All sites", "Site", "Production", "Routing", "Indexing", "Files", "Last published", "Search sites...", "SPA fallback", "Static", "Indexable", "No index", "148", "6.2 MB", "4m ago", "1,204", "24.8 MB", "2h ago", "96", "3.1 MB", "1d ago", "42", "980 KB", "12d ago", "61", "1.4 MB", "26d ago", "Static routing", "Live version", "Published", "Production deployment", "The immutable version currently receiving traffic.", "Version", "Domain", "evs deploy ./dist --site", "Delivery profile", "How this site is served and retained.", "Ownership", "Retention", "sites" ] }, { "sourcePath": "components/landing/hero.tsx", "text": [ "infrastructure you own.", "Route models and operate production AI with Everstack. Run tool-using agents with EVS.", "Publish their output through EVS Sites, all from one open, self-hostable stack.", "Read the docs", "EVS agents · Early access", "Agents as code. Yours to run.", "Yours to run.", "Define instructions, skills, tools, subagents, and policy in one repository.", "Develop locally, then run agents with persistent sessions on infrastructure you own.", "Explore EVS agents", "Agent runtime docs", "EVS Sites · Product preview", "Agent output, versioned and ready to share.", "ready to share.", "Phase one is building private static previews with immutable versions and rollback.", "Governed access and scoped Everstack runtime routes follow in later phases.", "Explore EVS Sites", "Phased rollout", "Platform", "Route, evaluate, and trace every model request from one production control plane.", "Explore platform docs", "Agent Runtime", "Define durable agents in a repository, then run their tools and sessions on infrastructure you own.", "Explore Agent Runtime", "Sites", "Turn browser-ready agent output into a private, immutable, shareable site.", "Explore Sites", "Everstack product showcase", "Runtime", "The product", "See how the pieces work together.", "Explore the gateway and agent runtime through these interactive examples. The Sites tab previews planned publishing capabilities. All panels use sample data.", "Error: Port 3003 is already in use", "at Server.onError (file:///workspace/app/...", "VITE v6.4.1 ready in 2083 ms", "Local: http://localhost:3000/", "DTS Build success in 1306ms", "Connected", "AT", "Runtimes", "Agents", "Settings", "esruntime", "Running", "Ports", "2/5 live", "not running", "Runtime Ports", "Variables", "LOGS", "All services", "ERR 17", "WRN 2", "INF 177", "LIVE", "Observability", "Gateway", "Evaluations", "Deployments", "Vault", "Storage", "Everstack", "Completed", "Failed", "Pending", "chat.completion", "tool.search_docs", "retrieval.vector_query", "TRACE", "ERROR", "OK", "Overview", "Status", "Latency", "Tokens", "Cost", "Spans", "ms", "Input", "{ \"messages\": [{ \"role\": \"user\", \"content\": \"summarize the failing traces from the last run\" }], \"model\": \"gpt-5.2-codex\", \"temperature\": 0.2 }", "Output", "{ \"choices\": [{ \"message\": { \"role\": \"assistant\", \"content\": \"3 traces failed: 2 timeouts, 1 rate-limit...\" } }], \"usage\": { \"total_tokens\": 2450 } }", "Sign in to see the full trace", "Inspect every span, the full input/output, and the token & cost breakdown for your own calls.", "Sample data · no card required", "Idle", "Provisioning", "Sleeping", "Primary OpenAI", "Anthropic Fallback", "Google Backup", "Mistral Edge", "OpenRouter Catchall", "Configs", "Config", "Registries", "MCP Gateway", "Guardrails", "Load Balancer", "Enabled", "Strategy", "Weighted", "Session Key", "Correlation ID", "Default Fallback", "openai/gpt-5.2", "Fallback Factors", "Add Factor", "Factor", "Timeout", "Backoff", "Attempts", "Models", "Reviving", "Stopped", "Terminated", "Disconnected", "Connecting", "Error", "running", "\"where is order #4821?\"", "inbound", "142ms", "210ms", "recall(customer)", "3 hits", "compose reply", "1.1s", "\"summarise the SOC 2 controls\"", "38ms", "96ms", "rerank(top_k=8)", "8 hits", "cite passages", "0.8s", "idle", "\"this is the third time i have asked\"", "tokenize", "11ms", "classify tone", "240ms", "negative (0.86)", "emitted", "provisioning", "\"draft the renewal follow-up\"", "recall(thread)", "5 hits", "draft reply", "1.4s", "held", "\"review PR #2184\"", "310ms", "12.4s", "recall(house_rules)", "6 hits", "write findings", "2.2s", "sleeping", "\"why did checkout 500 at 14:02?\"", "480ms", "72ms", "explain spike", "1.6s", "extract nightly_orders", "2.1s", "180ms", "14,208 rows staged", "ok", "load warehouse.orders", "live", "failed", "inbound call +1 415 ...", "ringing", "recall(caller)", "2 hits", "respond aloud", "0.6s", "Customer Support Router", "Routes tickets to the right agent", "draft", "Lead Intake & Qualification", "Scores and routes inbound leads", "published", "Multi-LLM A/B Test", "Compares model outputs side by side", "API Gateway Orchestrator", "Fans out to downstream services", "Real-time Data Processor", "Streams and enriches events", "Voice to SMS Bridge", "Transcribes calls and texts a summary", "npm ci --omit=dev", "4.2s", "312 packages installed", "node dist/server.js", "pid 41", "listening on :8080", "ready", "stopped", "python train.py --epochs 8", "6m 12s", "checkpoint saved epoch 8", "artifacts pushed to R2", "flushed", "exit 0", "pnpm build", "11.8s", "dist/ 2.4 MB gzipped", "pnpm preview --port 4173", "pid 27", "serving on :4173", "./svc --consume orders", "start", "connected to broker", "segfault in parse_batch", "signal 11", "container exited 139", "terminated", "pg_dump --format=custom", "38s", "1.8 GB written", "uploaded backups/2026-05-15", "sealed", "cargo build --release", "2m 41s", "148 crates compiled", "./target/release/svc", "pid 63", "accepting jobs on :9000", "Look up CRM records", "Fetch order history", "Lightweight ETL step", "Open a support ticket", "Classify message sentiment", "Post to a Slack channel", "Slack", "connected", "Discord", "disconnected", "Teams", "connecting", "Webhook", "Custom", "error", "Friendly Support", "Warm, approachable tone", "Energetic Sales", "Upbeat and persuasive", "Calm Assistant", "Measured and reassuring", "Professional Exec", "Authoritative and clear", "Youthful Intern", "Bright and casual", "Multilingual Guide", "Switches languages fluidly", "Studio", "Sandboxes", "Functions", "Memory", "Channels", "Voice", "New Agent", "Search agents...", "Name", "Model", "Tools", "Sessions", "Last Active", "Create Workflow", "Search workflows...", "Published", "Draft", "Version", "Created", "Updated", "New Sandbox", "Health", "Billable Now", "Cost So Far", "Image", "Session", "Revivable", "Create Function", "Search functions...", "Mode", "Configuration", "On", "Off", "New Collection", "Collections", "Documents", "Avg Latency", "Embedding Model", "Distance", "Add Channel", "Search channels...", "Agent", "Session Mode", "Voice Profiles", "Create Profile", "Search voice profiles...", "Provider", "Reference", "OpenAI", "active", "Anthropic", "Google", "Mistral", "OpenRouter", "Groq", "available", "Cohere", "Keys & Providers", "API Keys", "LLM Providers", "Add Provider", "Search providers...", "Last Used", "Base URL", "Active", "Available", "Default", "New Backend", "Backends", "Providers", "Objects", "Storage Used", "Bucket", "Region", "Endpoint", "Prefix", "Size", "completed", "pending", "Responses for support tickets", "Sentiment and relevance evaluation", "Document classification accuracy", "Auto-routing test cases", "Response quality and accuracy", "Intent recognition validation set", "Risk tier classification", "Readability and completeness scoring", "Support Tier 1", "Front-line support quality check", "Product Feedback", "Customer feedback categorization", "Documentation Review", "Technical accuracy & clarity", "Legal Review Queue", "Compliance check for generated docs", "Safety Moderation", "Harmful content detection", "Response Relevance", "Relevance and coherence scoring", "Tone Assessment", "Voice & tone consistency check", "Feature Request Triage", "Categorize and prioritize requests", "Relevance Score", "How relevant is the response to the user query", "Correctness", "Numerical accuracy of output", "Grammatical Quality", "Is the text grammatically correct?", "Tone Category", "Professional, Friendly, Technical, etc.", "Toxicity Detection", "Presence of harmful or offensive content", "Tool Call Correctness", "Were tool calls made with correct arguments?", "Custom Scorer", "Python-based validation logic", "Completeness", "Coverage of required information", "Datasets", "Runs", "Annotation Queues", "Score Configs", "New Eval Run", "Search runs...", "Baseline", "Dataset", "Target", "Progress", "New Dataset", "Search datasets...", "Description", "Items", "New Queue", "Search queues...", "configs", "{r.pending} pending", "{r.done} done", "New Score Config", "Search score configs...", "Type", "Range", "High Latency Alert", "Performance", "Error Rate Spike", "Cost Threshold", "Provider Downtime", "Token Burn Rate", "Tool Failure Rate", "Policy Violation", "Safety", "Sandbox Exit Codes", "Monitoring", "Logs", "Traces", "Analytics", "Metrics", "Outcomes", "Alerts", "Segments", "Users", "Live", "Search Logs...", "14d", "Last 14 days", "Search traces...", "Trace", "Duration", "Time", "Filter by provider, model...", "Requests", "P95 Latency", "Errors", "Request Volume", "last 12h", "Filter scores...", "Composite Health Score", "87.3%", "Healthy", "+2.1 pp vs previous", "High confidence · 1,245 evaluations across 98 sessions", "Completion", "Tool Quality", "Loop Risk", "Reliability", "Coverage", "New Rule", "Search rules...", "Condition", "Window", "Category", "Disabled", "Search sessions...", "User", "Env", "Search users...", "Total Tokens", "Error Rate", "Last Seen", "\"test\"", "\"can you review this deployment config...\"", "\"summarize the trace errors from last run...\"", "upstream_timeout: provider did not respond within 30s", "\"rewrite this onboarding copy...\"", "\"call github.searchRepos with filters...\"", "\"how about now\"", "\"generate the migration plan for shared tenancy...\"", "rate_limit_exceeded: provider returned HTTP 429", "tool_execution_failed: github.searchRepos returned 403", "\"ok can you clone the es-runtime repo...\"", "\"do you have access to the github repo...\"", "ES", "routing · fallback · cache", "healthy", "sessions · tools · memory", "4 running", "docker · isolated runtime · k8s", "isolated", "judges · scorers · reviews", "94% pass", "MCP + Workflows", "tools · DAGs · approvals", "traces · cost · alerts", "Worktree environments", "one running world per branch", "synced", "Stable port proxy", "shareable URLs without conflicts", "2 live", "Unified logs", "every service in one stream", "attached", "Agent-ready MCP", "inspect and operate the runtime", "production control plane", "local agent runtime", "live view", "identity, policy, state, and telemetry stay attached", "services, ports, environment, logs, and tools stay isolated" ] }, { "sourcePath": "components/landing/illustrated-hero.tsx", "text": [ "An illustrated operations outpost connecting AI models, agents, isolated compute, policy, and telemetry", "Self-host Everstack" ] }, { "sourcePath": "components/landing/illustrated-product-index.tsx", "text": [ "Route the request", "Start with one request, not one provider.", "Point existing OpenAI clients at one endpoint. Everstack chooses the provider, applies tenant controls, handles fallback, and records the economics without pushing that logic into your application.", "One OpenAI-compatible contract", "Health-aware routing and fallback", "Tenant-scoped keys and limits", "Traceable latency, tokens, and cost", "Explore the gateway", "Compare models", "Execute the work", "Give your application tools and a place to run.", "Use agents when the path must adapt, workflows when the path must stay explicit, and isolated sandboxes when the workload needs code, files, browsers, or long-running processes.", "Agents for adaptive decisions", "Workflows for explicit control", "Isolated Docker, isolated runtime, or Kubernetes", "Persistent sessions, memory, and artifacts", "Agent runtime", "Workflows", "Sandboxes", "Verify the boundary", "Make policy and quality part of execution.", "Check inputs before model spend, pause sensitive actions for approval, inspect outputs before delivery, and compare every change against evidence instead of intuition.", "Input and output guardrails", "Human approval boundaries", "LLM judges and code scorers", "Datasets, baselines, and release gates", "Guardrails", "Evaluations", "Learn from production", "Let every run explain the next change.", "Follow the model choice, tool calls, sandbox operations, approvals, evaluation scores, latency, tokens, and cost as one connected trace, then use that evidence to improve the next release.", "End-to-end OpenTelemetry traces", "Token and cost attribution", "Trace-linked evaluation scores", "Production evidence for the next release", "Observability", "01", "The production story", "One workload. Four decisions. One continuous system.", "A production AI workload has to choose a model, execute real work, cross policy and quality checks, then return evidence for the next release. Everstack keeps those handoffs connected.", "Hosted, cloud, and local models stay behind the same request contract.", "Explore the model catalog" ] }, { "sourcePath": "components/landing/provider-ticker.tsx", "text": [ "OpenAI", "Anthropic", "Google Gemini", "Groq", "DeepSeek", "Mistral", "Cohere", "xAI", "Perplexity", "HuggingFace", "Ollama", "Azure OpenAI" ] }, { "sourcePath": "components/landing/showcase-inspector.tsx", "text": [ "running", "Request", "ttft", "total", "cost", "request detail", "agent session", "Selected item detail", "ctx", "tools", "cpu", "mem" ] }, { "sourcePath": "components/landing/works-with-any-stack.tsx", "text": [ "Compatibility", "Fits your stack.", "Doesn't become it.", "Keep the tools you already ship with. Add Everstack through APIs, SDKs, and open protocols.", "Explore compatibility", "Languages & SDKs", "Native TypeScript, Python, and Go clients, plus an OpenAI-compatible API for every other language.", "Explore Languages & SDKs", "Agent Frameworks", "Bring LangChain, CrewAI, Pydantic AI, OpenAI Agents, Vercel AI, or your own loop.", "Explore Agent Frameworks", "Model Providers", "Route across hosted, hyperscaler, and local models without rewriting application code.", "Explore Model Providers", "Tools & Integrations", "Connect source control, channels, SaaS tools, MCP servers, webhooks, and telemetry pipelines.", "Explore Tools & Integrations", "Explore {category.title}", "See compatibility" ] }, { "sourcePath": "components/layout/footer.tsx", "text": [ "Product", "Platform", "EVS Agent Runtime", "EVS Sites", "Model Catalog", "Compatibility", "CLI", "Pricing", "Compare", "All comparisons", "Everstack vs LiteLLM", "Everstack vs Cloudflare AI Gateway", "Everstack vs E2B", "LiteLLM alternatives", "Portkey alternatives", "Helicone alternatives", "E2B alternatives", "Resources", "Documentation", "Blog", "Roadmap", "Changelog", "Model catalog updates", "Request a Feature", "Developers", "API Reference", "OpenAPI Spec", "MCP Server", "llms.txt", "Company", "About", "Contact", "GitHub", "Legal", "Terms of Service", "Privacy Policy", "Everstack", "Open-source infrastructure to route models, run agents, isolate code, evaluate outcomes, and observe the entire AI stack.", "Everstack on GitHub", "Everstack on X", "Everstack on LinkedIn", "©", "Everstack Labs. All rights reserved." ] }, { "sourcePath": "components/layout/mobile-menu.tsx", "text": [ "Close menu", "Product", "Use Cases", "Pricing", "Resources", "Blog", "Roadmap", "GitHub" ] }, { "sourcePath": "components/layout/navbar.tsx", "text": [ "AI Gateway", "One endpoint with routing, fallback, and provider control.", "EVS Agent Runtime", "Agents as code on infrastructure you own.", "Workflows", "Explicit orchestration for agents, tools, and APIs.", "Sandboxes", "Isolated code execution with strict controls.", "EVS Sites", "Versioned publishing for agent-created surfaces.", "Guardrails", "Policy enforcement and security at runtime.", "Evaluations", "LLM-as-judge scoring and code scorers.", "Observability", "Correlated traces, logs, metrics, and cost.", "Model Catalog", "Compare model quality, context, and price.", "Compatibility", "SDKs, frameworks, providers, and tools.", "Early", "Build and run", "Trust and quality", "Explore and connect", "About", "Who builds Everstack and why.", "Blog", "Engineering guides and product thinking.", "Roadmap", "What shipped, what is next, and why.", "Comparisons", "Compare gateways, runtimes, and platforms.", "Changelog", "Release notes from across the stack.", "Multi-LLM Routing", "Route by latency, cost, and quality.", "Cost Optimization", "Lower spend with caching and fallbacks.", "Agent Orchestration", "Multi-step workflows with robust controls.", "Semantic Caching", "Serve repeat intent instantly.", "Security & Compliance", "Guardrails, PII controls, and audit policies.", "Developer Workflows", "SDKs, CLI, and CI/CD integration.", "Everstack", "Product", "Core products", "/workflows", "/sandboxes", "/guardrails", "/evaluations", "/observability", "/models", "/compatibility", "/cli", "Everstack CLI", "Operate every Everstack surface.", "Pricing", "Resources", "Explore", "Documentation", "Install, configure, and operate Everstack.", "Plan and compare", "Updates", "Company", "GitHub", "Source, issues, and releases.", "LinkedIn", "Company updates and hiring.", "Open menu" ] }, { "sourcePath": "components/legal/LegalPage.tsx", "text": [ "// legal", "Last updated:", "On this page" ] }, { "sourcePath": "components/models/activity-panel.tsx", "text": [ "1W", "1M", "3M", "6M", "1Y", "All", "Hour", "Day", "Month", "Model activity is temporarily unavailable.", "{subjectLabel || metricKey} {metric === \"tokens\" ? \"tokens\" : \"requests\"} processed on Everstack", "Metric", "Tokens", "Requests", "Value", "Period", "Cumulative", "Usage interval", "Usage range", "Retained historical activity did not include token telemetry.", "Monthly", "Daily", "Hourly", "cumulative", "period", "usage", "Updated", "Everstack’s own usage. Customer traffic joins these totals once enough tenants use this model to report it anonymously.", "The latest eligible usage bucket is delayed.", "Aggregated managed Everstack traffic. Buckets below", "tenants or", "requests are withheld", ", except Everstack's own usage, which is published as self-disclosure.", "Public operational metrics are temporarily unavailable.", "This model has not reached the public reporting threshold in the last 30 days.", "Avg. TTFT", "time to first token", "Output speed", "streaming throughput", "Request latency", "end-to-end average", "Success rate", "eligible requests", "Successful", "last 30 days", "Errors", "upstream attempts", "Hover to inspect", "{title}, {view} {report.interval} stacked bar chart", "Input", "Reasoning", "Completion", "Total", "Success", "Tenants (min.)", "Token counts were not recorded for this activity", "Try again", "Token telemetry was not retained", "These historical requests predate token-level usage capture. New managed gateway traffic records provider-reported input, reasoning, and completion tokens; request volume remains available from the Requests control.", "Not enough public activity yet", "Usage appears after a time bucket meets the public privacy threshold.", "{report.coverage.suppressedBuckets} low-volume {report.coverage.suppressedBuckets === 1 ? \"bucket is\" : \"buckets are\"} currently withheld." ] }, { "sourcePath": "components/models/badge.tsx", "text": [ "Added in model catalog {version}", "Added in the latest model catalog", "New" ] }, { "sourcePath": "components/models/filter-bar.tsx", "text": [ "Newest", "Name", "Price: low to high", "Price: high to low", "Output price: low to high", "Output price: high to low", "Context: high to low", "32K+", "128K+", "1M+", "Search models", "Clear search", "{totalCount} models", "{filteredCount} of {totalCount} models", "Order by", "Order models by", "Pricing", "Free models", "Context length", "Providers", "All providers", "Show fewer", "Show all {providers.length}", "Input modalities", "Output modalities", "Capabilities", "Status", "Clear", "filter", "filters" ] }, { "sourcePath": "components/models/model-table.tsx", "text": [ "stable", "Model", "Provider", "Input /M", "Output /M", "Context", "Capabilities", "Released", "Status", "Showing", "of", "models. Refine filters to see more." ] }, { "sourcePath": "components/pricing/faq.tsx", "text": [ "Is Everstack free to use?", "Yes. The Starter plan has no platform subscription fee and every new organization receives $5 of managed sandbox compute credit with no card required. Add billing only when the credit is used up and you want compute to continue. Hosted browser runtime remains a separate meter.", "Are sandboxes included with the Starter plan?", "Every new organization starts with $5 of sandbox compute credit. Choose a fixed sandbox size and use it without adding a payment method. When the credit is exhausted, running compute stops and Everstack asks you to add billing. Sleeping, archived, terminated, and failed-to-provision sandboxes do not consume credit.", "How are hosted browser sessions billed?", "A browser session is billed separately from its agent sandbox because Everstack allocates an additional tenant-isolated Chromium runtime. Active sessions cost $0.01 per browser hour with a one-minute minimum and per-second billing after that. Warm-pool idle time is not charged.", "What happens when I hit my usage limits?", "The $5 sandbox starter credit is a one-time organization credit, not a monthly allowance. Sandbox compute stops when it is exhausted and resumes after billing is added. Other Starter limits reset on their published cycle; paid usage continues up to the spend controls you configure.", "Do you charge per channel connection?", "No. Every plan reaches Slack, Discord, and Telegram, and every paid plan connects an unlimited number of channels. Starter includes three so you can run a real workspace before paying anything. Channel usage is metered by messages per month, not by how many workspaces, servers, or groups you connect, so wiring an agent into another channel never changes your bill. Self-hosted Community Edition instances have no channel limit at all.", "How does per-seat pricing work?", "Each paid plan includes a set number of seats. Build includes 3 seats and Scale includes 10. Additional seats can be added at the per-seat rate shown on each plan.", "Do I need to change my existing API calls?", "Everstack provides an OpenAI-compatible API, so most applications can switch by simply changing the base URL. No code changes to your prompt logic are required.", "Does evs.run execute my backend or build my site?", "No. evs.run is a static serving plane, not an application runtime. Build in your local environment, CI system, coding harness, or Everstack sandbox, then publish the generated directory for immutable edge delivery.", "How is Sites usage billed?", "There is no fee per site or deployment. Usage is pooled across your workspace and measured by edge requests, data transferred to visitors, and retained deployment storage. Storage includes every immutable version, not only the active release.", "Can I switch between monthly and yearly billing?", "Yes. You can switch at any time. When switching to yearly, you pay for 10 months and get 2 months free. Changes take effect at the start of your next billing cycle.", "What is the Enterprise plan?", "Enterprise is for organizations needing SSO/SAML, audit logs, custom integrations, SLA guarantees, and unlimited usage. Contact our sales team for custom pricing tailored to your needs.", "FAQ", "Pricing FAQ" ] }, { "sourcePath": "components/pricing/feature-table.tsx", "text": [ "OpenAI-compatible API", "Provider routing & fallback", "Automatic retries", "Load balancing", "Bring your own provider keys", "Chat, responses, embeddings, images & audio", "API requests / month", "Requests / minute", "Included tokens / month", "API key management", "Spend limits & usage controls", "ingestion", "Request/response logging", "Distributed tracing", "OpenTelemetry export", "Gateway, agent & sandbox correlation", "Advanced analytics", "Alerts & anomaly detection", "Agent definitions", "Always-on agents", "Always-on runtime instances", "Concurrent agent runs", "retention", "Session history retention", "Child-agent delegation", "Delegation depth", "Workflows Studio", "API, webhook & schedule triggers", "Human approval gates", "Connected channels", "Messaging platforms", "Channel messages / month", "Custom tool integrations", "Concurrent sandboxes", "Maximum sandbox memory", "Isolated execution environments", "Dedicated execution pools", "Shell, file & process APIs", "Snapshots & resume", "Persistent volumes", "Controlled network egress", "Signed port previews", "Node.js, Python & Go SDKs", "Per-second allocation billing", "Included root disk", "Hosted sites", "Source-task provenance & audit history", "Evaluations & experiments", "Evaluation runs / month", "Dataset items", "Annotation queues", "scores", "LLM-as-judge scoring", "Deterministic code scorers", "Human review workflows", "Guardrails & policy checks", "Regression alerts", "Object & artifact storage", "Session vector memory", "External vector stores", "S3-compatible object storage", "Durable agent artifacts", "Tenant isolation", "Role-based access control", "SSO & SAML", "Audit logs", "Custom integrations", "Approval policy enforcement", "API key rotation", "Included team seats", "AI Gateway", "Semantic caching", "Rate limiting", "Observability", "Real-time dashboards", "Cost analytics", "Agent Runtime & Workflows", "Sandboxes & Code Execution", "Sandbox compute", "Browser Runtime", "Headless Chromium automation", "Live browser viewport", "Concurrent browser sessions", "Maximum session duration", "Active browser runtime", "Warm-pool idle time", "Sites & Publishing", "Static sites on evs.run", "Edge requests included", "Data transfer included", "Deployment storage included", "Usage beyond the allowance", "CLI and MCP publishing", "Immutable versions and atomic activation", "Edge delivery and managed TLS", "Evaluations & Quality", "Memory & Storage", "Security & Access", "Support", "Community support", "Priority support", "Dedicated support & SLA", "Starter", "Start free", "Build", "Choose Build", "Scale", "Choose Scale", "Enterprise", "Talk to us", "Comparison", "Feature comparison", "Search features", "yr", "mo", "Custom", "No features match “", "”." ] }, { "sourcePath": "components/pricing/plan-card.tsx", "text": [ "Popular", "Custom", "yr", "mo", "per extra seat", "Fixed sandbox sizes", "${sandboxComputePricing.starterCreditUsd} starter credit included", "Billed per second while allocated", "from $", "/hr", "· {entrySandboxSize.diskGib} GiB root disk", "Also included", "more included" ] }, { "sourcePath": "components/pricing/price-detail.tsx", "text": [ "{plan}: {note.title}, {note.label}{note.preview ? \", rate preview\" : \"\"}. Pricing details", "Rate preview" ] }, { "sourcePath": "components/pricing/sandbox-compute-pricing.tsx", "text": [ "Mostly waiting", "Balanced", "Compute-heavy", "Everstack", "Allocated CPU and memory, 20 GiB root disk included", "Vercel Sandbox", "E2B", "Wall-clock compute plus Pro base for custom resources", "Daytona", "Wall-clock compute, 5 GiB disk included", "Blaxel", "Memory-priced active runtime, CPU scales automatically", "Modal", "Sandbox rate using one physical core per two vCPU", "vCPU ·", "GiB", "/hr", "GiB root disk included", "Fixed sandbox sizes", "Pick the machine. Pay while it is allocated.", "${sandboxComputePricing.starterCreditUsd} starter credit · no card", "Usage counter", "Sandbox hours per month", "hours", "{hours / 1_000}K", "Machine profile", "vCPU,", "Workload pattern", "CPU working time", "% of sandbox time is spent executing code. This changes Vercel CPU cost only.", "Compare provider pricing", "One workload, matched against current public list rates.", "monthly", "One stack", "{provider.name} pricing source", "Why teams choose Everstack beyond the meter", "Open source and self-hostable", "Agents, policy, and sandboxes share one control plane", "Execution evidence lands in the same trace", "Pricing breakdown", "Item", "Quantity", "Cost", "Allocated CPU", "vCPU hr", "Provisioned memory", "GiB hr", "Root disk", "Included", "Estimated monthly total", "Based on", "allocated hours using the", "size.", "Competitor estimates use the linked public list rates and the closest available resource model. They do not subtract temporary credits. All estimates exclude network transfer, persistent volumes, snapshots, and applicable taxes.", "Start building", "Sandbox estimator", "Estimate a fixed-size sandbox.", "Choose one supported machine size, then estimate how long its VM stays allocated. CPU and memory cannot be mixed independently. Starter includes a one-time $5 compute credit, then usage is billed.", "Per-second billing", "1. Select a size", "Sandbox size", "2. Describe the workload", "Allocated time per execution", "Executions per day", "Selected size", "Compute", "GiB included", "Estimated cost", "per 30-day month", "Machine rate", "Per execution", "Per day", "Allocated time", "hr/month", "Start with this size", "Estimate excludes network transfer, persistent volumes, snapshots, and applicable taxes. An allocated VM is billed even while idle. Compute stops accruing when the sandbox sleeps, stops, or is deleted." ] }, { "sourcePath": "components/pricing/usage-pricing.tsx", "text": [ "Edge requests", "Every request routed to a published site", "Data transfer", "Response bytes delivered to visitors", "Deployment storage", "All retained immutable versions", "Metered infrastructure", "Platform plans plus metered infrastructure.", "Compute, browser sessions, observability ingestion, and site delivery have separate usage rates. Start with $5 in one-time usage credit. Additional data rates are shown alongside the relevant features in the comparison below.", "No per-site fee", "Sites delivery", "On-demand rates after the included monthly allowance", "pay as you go", "per 1M", "per GB", "per GB-month", "Sandbox compute", "$5 starter credit, then per-second billing on fixed machine sizes", "Estimate a workload", "Browser runtime", "/ browser hour", "Launch pricing for tenant-isolated Chromium with CDP automation and live viewing. Regular sandbox compute remains a separate meter.", "Active session time only", "-minute minimum, then billed per second", "Warm-pool idle time is not billed", "Browser session limits", "Capacity controls parallelism; runtime remains usage billed.", "no included browser hours", "Custom capacity", "{concurrency ?? 0} concurrent", "Max session", "Headless", "Live viewport", "No live viewport", "Sites included each month", "Usage is pooled across every site in the workspace.", "Starter stops at its limits · paid plans continue with spend controls", "Committed usage", "Volume rates and custom limits", "Requests", "Transfer", "Storage" ] }, { "sourcePath": "components/product/agent-skill-panel.tsx", "text": [ "Copied", "Copy code", "Copy {step.title}", "{skill.title} integration surfaces", "API and SDKs", "{activeAgent.label} setup mode", "Agent-assisted setup", "Manual config", "assisted", "manual", "{skill.title} SDK examples", "Agent brief copied", "Copy for agent", "Read the docs", "Code copied" ] }, { "sourcePath": "components/product/illustrated-feature-page.tsx", "text": [ "Read the docs", "https://schema.org", "WebPage", "SoftwareApplication", "DeveloperApplication", "Linux, Docker, Kubernetes", "FAQPage", "Operating model", "One path from application intent to controlled execution.", "Capabilities", "The controls needed to run it in production.", "Everstack keeps {feature.navTitle.toLowerCase()} connected to the same identity, policy, deployment, and telemetry boundaries as the rest of the platform.", "Build with your agent", "Give the agent the integration contract, not just a code fragment.", "Choose the client that fits the project, inspect the highlighted reference, or copy a complete implementation brief with credential, routing, and verification requirements included.", "Where it fits", "Built for real workloads, not isolated demos.", "Start with the narrowest useful surface, then connect more of the platform as the workload needs stronger execution, policy, or evidence.", "Use case 0", "Questions", "What teams usually ask first.", "A direct view of how this surface behaves, where it runs, and how it connects to the rest of Everstack.", "Reference", "The pages you open once you start building.", "Continue through the stack", "Next, explore", "Open the product page" ] }, { "sourcePath": "components/product/product-surface-pages.tsx", "text": [ "Questions", "The short version, before you commit.", "These product surfaces are intentionally direct: a small source model, an observable execution path, and infrastructure boundaries you can explain.", "Is EVS a library or a hosted service?", "EVS is the agent-as-code experience layered over Everstack's open-source runtime. You can run the platform yourself with Docker or Kubernetes and keep execution, state, and telemetry in your environment.", "What does Everstack manage for an agent?", "The runtime manages sessions, tool dispatch, sandbox provisioning, approvals, memory, subagent coordination, streaming events, limits, and deployment lifecycle.", "Can the same agent run locally and in production?", "That is the goal of the EVS repository contract: keep the agent definition portable while choosing local, Docker, or Kubernetes execution for each environment.", "Can EVS work with existing tools and MCP servers?", "Yes. Everstack can expose built-in tools, custom functions, HTTP integrations, and federated MCP tools through the same runtime policy and trace context.", "instructions.md", "Identity and operating boundaries", "A reviewable description of the role, constraints, and completion criteria.", "agent.yaml", "Runtime, model, memory, and policy", "One portable manifest for lifecycle, limits, isolation, and approvals.", "skills/ + tools/", "Focused guidance and typed actions", "Load knowledge only when relevant and keep every action schema explicit.", "subagents/ + schedules/", "Delegation and scheduled background work", "Specialized workers and recurring tasks use the same session and policy plane.", "https://schema.org", "WebPage", "EVS Self-Hosted Agent Runtime", "Define agents as code and run them with persistent sessions, isolated sandboxes, tools, approvals, and observability on Everstack.", "SoftwareApplication", "EVS Agent Runtime", "DeveloperApplication", "Linux, Docker, Kubernetes", "An open-source runtime for tool-using agents with persistent sessions.", "Repository-defined agents", "Persistent and ephemeral sessions", "Docker, isolated runtime, and Kubernetes sandboxes", "Human approval gates", "Subagents, schedules, tools, and memory", "OpenTelemetry-native observability", "FAQPage", "EVS agent runtime · early access", "Agents as code. A runtime that's yours.", "A runtime that's yours.", "Define identity, skills, tools, policy, subagents, and schedules beside your code.", "Run tool-using agents with persistent sessions and isolated sandboxes on infrastructure you control.", "After a server restart, interrupted turns must be reissued from the last checkpoint; they do not automatically replay.", "Read agent docs", "Open source", "Persistent sessions", "Isolated sandboxes", "Deploy anywhere", "An Everstack operator controlling connected gateway, agent, sandbox, and observability systems from one command station", "Agent as code", "One repository. Six runtime contracts.", "EVS keeps the intent human-readable and the execution contract explicit. Every file has a visible effect in the runtime ledger, so a pull request can explain what the agent will become.", "Ownership boundary", "The framework ends where your infrastructure begins.", "Run the same definition on a laptop, in Docker, or across Kubernetes. Everstack carries session state, identity, policy, and telemetry through each target without turning your agent into a vendor-specific deployment.", "Develop locally", "Inspect files, stream events, and test tool calls without a remote control plane.", "Isolate execution", "Choose Docker, isolated runtime, or Kubernetes based on the trust boundary.", "Operate with proof", "Keep approvals, traces, usage, and runtime policy attached to every session.", "What exists today?", "EVS Sites is a product preview, not a generally available hosting service. The phase-one publishing foundation is in development: content-addressed assets, immutable manifests, private preview access, activation, and rollback.", "What will phase one publish?", "Browser-ready output only: static sites, single-page apps, reports, dashboards, documents, and other files an agent has already built. It will not execute server bundles or provide SSR.", "Does it require a particular agent framework?", "No. The intended contract is an HTTP API plus an agent skill, so Codex, Claude Code, Cursor, CI jobs, or any harness capable of HTTP requests can use it.", "Is EVS Sites another Cloudflare?", "No. Cloudflare is a broad web platform and remains the better choice for general websites, CDN, and edge compute. Sites is being built for agent-created surfaces that need provenance, governed access, traces, and a scoped path back into an Everstack runtime.", "Where does the Everstack runtime fit?", "It does not sit in the static serving path. A later phase will let approved routes call an Everstack agent or function with the site's identity, policy, and trace context attached.", "hash", "Address every file by content", "Tenant-scoped hashes make unchanged assets reusable without making one tenant's files visible to another.", "manifest", "Seal an immutable version", "Paths, content types, sizes, hashes, the entrypoint, and SPA behaviour are explicit and validated.", "verify", "Refuse incomplete publishes", "A version cannot activate until every referenced blob exists and matches the manifest's declared size.", "activate", "Move one route, or move it back", "Activation points the hostname at one sealed version. Rollback is the same operation with an older version.", "In development", "Static serving foundation", "Turn browser-ready output into a private, versioned surface without pretending a server process exists.", "Tenant-scoped blobs", "Immutable manifests", "Private preview links", "Activation + rollback", "Next", "Governed agent surfaces", "Carry the source task, owner, access policy, approval state, retention, and audit history with the URL.", "Everstack identity", "Task provenance", "Access policies", "Audit + retention", "Planned", "Scoped runtime routes", "Let an approved frontend route call one Everstack agent or function without turning the static plane into a general runtime.", "Scoped /api routes", "Agent + function targets", "End-to-end traces", "BYOC serving adapter", "EVS Sites Product Preview", "A phased product preview for publishing private, versioned agent-created sites and later connecting them to governed Everstack runtime routes.", "EVS Sites · product preview", "Publish agent output as a governed site.", "as a governed site.", "Sites turns browser-ready agent output into a private URL with immutable versions and rollback.", "Later phases attach provenance, access policy, traces, and scoped calls back into Everstack.", "Join the Sites preview", "See the rollout", "Static first", "Private first", "Immutable versions", "Runtime routes planned", "Versioned site artifacts passing through a release gate to an edge publishing relay", "Phased rollout", "Ship the publishing contract before expanding the runtime.", "Each phase has a clear boundary. Static delivery works without an application process. Governance belongs in the Everstack control plane. Runtime calls arrive only when they can be scoped, authenticated, and traced end to end.", "01", "02", "03", "Phase one contract", "One contract. Four explicit transitions.", "The foundation is intentionally small: hash files, seal a manifest, verify its blobs, then activate one version. Every transition is recoverable, and none requires an application runtime.", "Where Sites fits", "A governed publishing surface for agent-created work.", "General web platforms remain the right choice for broad application hosting. Sites is for browser-ready output whose source task, version, access policy, and optional route back into Everstack need to remain connected.", "Use Cloudflare", "You are deploying a web application.", "Choose the broad platform when you need CDN, edge compute, DNS, security, storage, and a general runtime you will operate directly.", "Use EVS Sites", "An agent produced a surface that must stay governed.", "The target experience keeps the source task, owner, access policy, version, audit trail, and an optional scoped route back to Everstack together." ] }, { "sourcePath": "components/product/sandbox-page.tsx", "text": [ "Allocate", "A clean runtime comes online.", "The workload receives its own filesystem, process space, resource envelope, and network policy.", "create(template: node, size: medium)", "Isolated runtime ready", "2 vCPU · 4 GiB memory", "Host filesystem not mounted", "Prepare", "Only the required inputs cross in.", "Seed a repository, upload files, or attach durable storage without exposing the gateway host.", "workspace.seed(source: github, ref: main)", "Repository available at /workspace", "Dependency cache attached", "Network policy remains active", "Execute", "Commands run inside the boundary.", "Stream output, inspect files, interrupt work, and keep every execution tied to the sandbox identity.", "$ pnpm test && pnpm build", "142 tests passed", "Build completed", "Exit code 0 · 18.4s", "Expose", "Publish one port, not the machine.", "Turn a listening service into a signed, expiring preview while every other port stays private.", "ports.expose(3000, expiresIn: 3600)", "Port 3000 exposed", "Signed preview URL created", "All other inbound ports private", "Inspect", "The run leaves evidence behind.", "Review logs, resource history, network activity, lifecycle events, and command results from one surface.", "sandbox.events({ include: [metrics, network] })", "CPU and memory recorded", "Egress decisions visible", "Lifecycle event appended", "One-off run", "Ephemeral execution", "Start clean. Return only the result.", "Create an isolated environment for a bounded task, collect its artifacts and evidence, then clean it up on your retention schedule.", "clean runtime", "Persistent workspace", "Stateful sessions", "Pause the machine, not the work.", "Keep the sandbox identity and workspace across sessions. Stop it to release compute, then revive it when the next task arrives.", "state preserved", "Preview service", "Controlled publishing", "Expose the service, not the environment.", "Run a temporary application, expose one declared port, and share a signed link that expires without opening the rest of the sandbox.", "one port exposed", "Deny", "Block general outbound traffic.", "Whitelist", "Permit only declared destinations.", "Allow", "Allow unrestricted outbound traffic.", "Running", "Runtime allocated, workspace mounted, commands available.", "Compute active", "Sleeping", "Runtime released, workspace snapshot preserved for revival.", "Compute released", "Terminated", "Runtime and sandbox workspace permanently removed.", "Identity closed", "Coding agents", "Clone a repository, install dependencies, run tests, inspect failures, and return a patch without touching the host workspace.", "Git · shell · files · LSP", "Preview environments", "Run a temporary web service, expose one port, and share a signed link for product review or QA.", "Ports · signed URLs · logs", "Data and document jobs", "Process untrusted inputs with declared resources, controlled egress, and downloadable outputs.", "Uploads · storage · network policy", "Browser and computer use", "Give an agent a graphical environment and browser sidecar while the desktop remains inside the sandbox boundary.", "Chromium · screenshots · interaction", "Node.js", "Python", "Go", "Everstack CLI", "HTTP API", "Do application teams choose where a sandbox is placed?", "No. Application code declares the template, resources, lifecycle, and network policy. Everstack handles placement and isolation behind the same sandbox API, while self-hosted operators control the deployment configuration.", "Can a sandbox keep state between sessions?", "Yes. Stopping a sandbox releases its runtime while preserving a workspace snapshot for revival. Persistent volumes can hold selected data independently. Terminating the sandbox permanently removes its sandbox workspace.", "Can I block network access?", "Yes. Set outbound traffic to allow, deny, or whitelist, and use block-all policy with explicit CIDR exceptions when the workload needs a narrower egress surface. Inbound ports remain private until you expose one.", "Is a sandbox only for AI agents?", "No. Agents use the same sandbox APIs as any application. Sandboxes also fit preview services, scheduled jobs, webhooks, data processing, browser automation, and direct human debugging.", "Example run", "control plane", "An illustrated operator supervising separate protected compute rooms", "Give every workload a machine of its own.", "Give agents, jobs, and preview apps a real machine with shell, files, browsers, ports, and persistent state. Every workload stays inside an explicit compute and network boundary.", "Create a sandbox", "Read sandbox docs", "Fresh isolated runtime", "Stop and revive state", "Signed preview URLs", "Allow, deny, or whitelist egress", "Shell", "Files", "Browser", "Process", "Everstack control plane", "Never mounted", "Host filesystem", "Gateway process", "Other tenants", "Sandbox boundary", "isolated", "2 vCPU · 4 GiB · 20 GiB", "Explicit exits", "Port 3000", "Allowed hosts", "Artifacts", "Workload contract", "same sandbox API", "Enters", "Everstack sandbox", "Leaves", "Resource limits", "Network policy", "Retention policy", "Outbound policy", "Recent egress decisions", "live", "Signed preview", "expires in 1 hour", "port 3000", "Example lifecycle", "Revive", "Stop", "Terminate", "Current state", "Runtime", "allocated", "released", "Workspace", "removed", "preserved", "Available from the first allocation", "Isolated filesystem and shell", "Logs, metrics, and lifecycle events", "Signed previews for exposed ports", "Stop, revive, and terminate controls", "Open the complete API guide", "https://schema.org", "SoftwareApplication", "Everstack Sandboxes", "DeveloperApplication", "Cloud and self-hosted", "Run code, agents, preview services, and jobs inside isolated Everstack sandboxes with shell, files, lifecycle controls, signed previews, resource limits, and network policy.", "FAQPage", "The execution boundary", "A real machine for the workload. Nothing more.", "The sandbox can be useful without becoming trusted. Files, processes, resources, and network exits remain explicit at every step.", "Inside", "Shell, files, browser, and processes", "Outside", "The gateway host and other tenants", "Exits", "Only declared hosts, ports, and artifacts", "Workload profiles", "Shape the environment around the work.", "Choose what enters, how long state stays, and which result can leave. Everstack handles placement and isolation behind the same sandbox API.", "Network control", "Outbound is policy. Inbound is deliberate.", "Choose allow, deny, or whitelist behavior for egress. If a workload needs to serve traffic, expose only the port it owns and issue a signed, expiring preview.", "Block unexpected data exfiltration", "Share a temporary service without opening the VM", "Inspect allowed and blocked network activity", "Lifecycle and state", "Release the machine without losing the work.", "Stop a sandbox to release compute while preserving its workspace snapshot. Revive the same sandbox identity when the next task arrives, or terminate it when the work is finished.", "Same workspace on revive", "Restore files and continue from the last controlled stop.", "Retention with a clear end", "Keep state only for the window the workload needs.", "Workloads", "Useful anywhere code needs a controlled place to live.", "Agents are one consumer. The same sandbox contract also supports human debugging, preview services, data work, and event-driven automation.", "Compute pricing", "Choose the machine. Pay while it is allocated.", "Sandbox compute is metered per second. Pick a fixed resource size, estimate the active runtime, and stop the sandbox when the machine is no longer needed.", "Quickstart", "Create the boundary before the work begins.", "Start from a prepared template or image, declare the resource and network limits, then hand the sandbox to a person, an application, or an agent.", "Questions", "What teams usually ask first.", "The short version of where sandboxes run, what they retain, and how much network access they receive.", "Put the work somewhere safe", "Give the next workload its own place to run.", "Create a sandbox in Everstack Cloud or bring the same control plane to your own infrastructure.", "Start building", "Compare pricing" ] }, { "sourcePath": "components/shared/code-block.tsx", "text": [ "Copy code" ] }, { "sourcePath": "components/shared/consent-banner.tsx", "text": [ "Analytics", "Help us understand which pages are used, so we know what to improve.", "Advertising", "Let us measure which campaigns bring people here, and reach visitors who left.", "Functional", "Remember preferences and enable embedded content beyond the basics.", "Cookie consent", "Cookie preferences", "Choose which cookies to allow. Necessary cookies are always active because the site needs them to work.", "Close preferences", "Necessary", "Required for the site to function. Includes remembering this choice.", "Necessary cookies are always active", "Accept all", "Reject all", "Save preferences", "We use cookies to understand how the site is used and to measure our advertising.", "Privacy policy", "Customise" ] }, { "sourcePath": "components/shared/render-fallback.tsx", "text": [ "AI gateway", "Agent runtime", "Isolated sandboxes", "Observability", "Evaluations", "Pricing", "Comparisons", "Documentation", "Everstack", "Back to home", "Explore Everstack", "Part of this page could not be displayed in your browser. The links below still work, and", "the documentation", "covers the same ground." ] }, { "sourcePath": "lib/changelog.ts", "text": [ "Added", "Improved", "Fixed", "Breaking", "Deprecated" ] }, { "sourcePath": "lib/comparison-links.ts", "text": [ "LiteLLM", "Portkey", "Kong AI Gateway", "Bifrost", "Cloudflare AI Gateway", "OpenRouter", "TrueFoundry", "Langfuse", "Helicone", "Braintrust", "E2B", "Daytona", "Modal", "Mastra", "Agent frameworks", "Flue", "LiteLLM alternatives", "Portkey alternatives", "Helicone alternatives", "E2B alternatives" ] }, { "sourcePath": "lib/compatibility.ts", "text": [ "Languages & SDKs", "Client compatibility", "Use the language your team already ships.", "Typed clients where you want them. OpenAI compatibility everywhere else.", "Call the full Everstack platform through native TypeScript, Python, and Go SDKs, or point an OpenAI-compatible client at the gateway from any other language.", "Open SDK documentation", "3 native SDKs · 1 OpenAI-compatible gateway", "TypeScript", "A typed Node.js client for gateway, agents, memory, evaluations, traces, audio, and channels.", "Native SDK", "TypeScript docs", "Python", "Synchronous and asynchronous clients with Pydantic models for the complete platform API.", "Python docs", "Go", "An idiomatic Go client with typed responses and first-class streaming support.", "Go docs", "Java", "Use an OpenAI-compatible Java client today while the native Everstack SDK is developed.", "Native SDK planned", "Java compatibility", "Rust", "Connect through the gateway's OpenAI-compatible HTTP surface; a native client is on the roadmap.", "Rust compatibility", "Choose a client", "Use a native Everstack SDK for the full platform or keep your existing OpenAI-compatible client.", "Set one endpoint", "Configure your Everstack gateway URL and API key once in the application environment.", "Reach the whole stack", "Route models immediately, then adopt agents, memory, evaluations, and traces as you need them.", "Agent Frameworks", "Framework compatibility", "Keep the framework. Add the production layer.", "Your agent logic stays yours; Everstack runs what surrounds it.", "Point framework model calls at the Everstack gateway and use platform APIs for isolated execution, memory, evaluations, approvals, deployment, and observability.", "Framework vs platform guide", "Framework-agnostic · OpenAI-compatible · Self-hostable", "LangChain", "Keep chains, graphs, and tools while routing model traffic through one governed endpoint.", "Gateway", "Integration path", "CrewAI", "Run CrewAI model calls through the gateway and attach Everstack execution and telemetry services.", "Pydantic AI", "Preserve typed agent code while centralizing model routing, policy, spend, and traces.", "OpenAI Agents", "Use the SDK's agent loop with Everstack's OpenAI-compatible model gateway and platform services.", "OpenAI-compatible", "MLflow", "Retain experiment workflows while Everstack handles runtime routing and production telemetry.", "Telemetry bridge", "Claude Agent SDK", "Pair Claude-based agent logic with Everstack sandboxes, tools, and OpenTelemetry-native operations.", "Platform APIs", "Vercel AI", "Keep Vercel AI's application primitives and move provider access behind the Everstack gateway.", "Keep your agent loop", "No framework migration: your prompts, tools, graphs, and state model remain in your codebase.", "Route through Everstack", "Send model calls to the OpenAI-compatible gateway for fallback, caching, limits, and provider choice.", "Add runtime services", "Adopt isolated sandboxes, durable memory, evaluations, approvals, and traces without rebuilding them.", "Model Providers", "Provider compatibility", "One API. The model market behind it.", "Change providers in configuration, not throughout your product.", "Route across hosted, cloud, and local models with provider fallback, key rotation, load balancing, semantic caching, rate limits, and unified telemetry.", "Explore every model", "22 providers · One catalog · One API", "OpenAI", "Route GPT, reasoning, embedding, image, speech, and moderation models through one catalog.", "Native provider", "OpenAI models", "Anthropic", "Use Claude models with the same routing, fallback, cost, and trace controls as every provider.", "Anthropic models", "Google Gemini", "Connect Gemini models directly or through Vertex AI while keeping one application interface.", "Gemini models", "Mistral", "Route Mistral's general, coding, and embedding models from the shared gateway surface.", "Mistral models", "Ollama", "Bring local models into the same routing and observability plane as hosted inference.", "Local provider", "Ollama models", "Groq", "Use low-latency Groq inference as a primary route or fallback without changing clients.", "Groq models", "Azure OpenAI", "Connect Azure-hosted OpenAI deployments through Everstack's unified routing layer.", "Cloud provider", "Azure OpenAI models", "AWS Bedrock", "Reach Bedrock-hosted model families while preserving consistent request and trace semantics.", "Bedrock models", "DeepSeek", "Add DeepSeek chat and reasoning models to routes, fallbacks, and cost policies.", "DeepSeek models", "Qwen", "Use Qwen model families through the same OpenAI-compatible application endpoint.", "Qwen models", "Connect provider keys", "Register one or more upstream credentials per provider without exposing them to application clients.", "Define the route", "Choose primary models, fallback chains, load-balancing policy, cache behavior, and limits.", "Call one API", "Applications use a stable gateway contract while Everstack handles provider-specific behavior.", "Tools & Integrations", "Tool compatibility", "Connect the systems around the model call.", "Native connectors where depth matters; open protocols everywhere else.", "Bring source control, channels, webhooks, MCP tools, and OpenTelemetry pipelines into the same operational layer without a closed connector ecosystem.", "Open integration docs", "Native connectors · MCP · Webhooks · OpenTelemetry", "LangSmith", "Keep framework-level tracing where it helps and correlate production model traffic in Everstack.", "GitHub", "Connect a tenant-scoped GitHub App for repository discovery, webhook handling, and PR workflows.", "Native connector", "GitHub setup", "Slack", "Bind agents to Slack channels and route messages into persistent Everstack sessions.", "Native channel", "Slack setup", "Stripe", "Trigger agents and workflows from signed Stripe events through the generic webhook surface.", "Webhook", "Webhook setup", "Figma", "Expose Figma capabilities to agents through an MCP server and centrally managed credentials.", "MCP", "MCP setup", "Datadog", "Receive Datadog alert webhooks or route OpenTelemetry data through your existing collector.", "Webhook + OTLP", "Grafana", "Trigger diagnostics from Grafana alerts and keep your existing OpenTelemetry pipeline.", "Google Drive", "Make Drive data and actions available to agents through a registered MCP server.", "OpenTelemetry", "Ingest and export OTLP telemetry so Everstack fits the observability pipeline you already operate.", "Native protocol", "Observability docs", "Choose the integration surface", "Use a native connector, a channel binding, a webhook, MCP, or OTLP based on the system's role.", "Centralize credentials", "Scope connections by tenant and keep raw third-party credentials out of agent prompts and code.", "Operate it as one system", "Discover tools, monitor health, trace calls, and audit activity from the Everstack control plane." ] }, { "sourcePath": "lib/plans.ts", "text": [ "Starter", "Get Started with $5 Credits", "Build", "Start Free Trial", "Scale", "Enterprise", "Contact Sales", "Nano", "Small", "Medium", "Large", "XL" ] }, { "sourcePath": "lib/product-agent-skills.ts", "text": [ "Agent-ready integration", "Route a model call through Everstack", "Start with an Everstack SDK, keep an existing compatible client, or give the complete implementation brief to a coding agent.", "Codex", "Use Everstack as Codex's Responses API provider, then send native Codex traces to the same instance.", "Expose the Everstack key", "Keep the gateway credential in the environment so Codex can reference it without writing the secret into configuration.", "Give Codex the setup brief", "Use Copy for agent below. Codex will inspect your user-level config, preserve unrelated settings, add the Everstack provider, and show the exact diff before it writes.", "Restart and verify", "Start a new Codex session, run one small tool-using request, then confirm the request and session trace both appear in Everstack.", "Set the API key", "Export the key before launching Codex. Keep it out of config.toml and shell history where possible.", "Add the provider and trace exporter", "Add this to the user-level ~/.codex/config.toml. Provider and telemetry settings are machine-local, so Codex ignores them in a project-scoped config file.", "Launch a fresh session", "Restart Codex so provider and telemetry settings are loaded, then verify a model request and a trace in Everstack.", "Connect Codex to Everstack AI Gateway", "Configure this machine so Codex routes Responses API traffic through Everstack and exports native Codex traces to the same instance.", "Claude Code", "Claude Code keeps its Anthropic model path. Everstack receives its native OTLP traces, metrics, and logs for session visibility.", "Provide a scoped Everstack API key to the shell that launches Claude Code.", "Give Claude Code the setup brief", "Use Copy for agent below. Claude Code will add the native telemetry variables, preserve unrelated settings, and avoid changing its model endpoint.", "Restart and inspect the trace", "Telemetry initializes when Claude Code starts. Open a fresh session, use a tool, and confirm the span tree appears in Everstack.", "Enable native OpenTelemetry", "Set these variables in the environment that launches Claude Code. Raw tool and prompt content stays disabled by default.", "Restart Claude Code", "A new prompt in an existing process is not enough. Launch a new process after the environment is configured.", "Verify session evidence", "Run a small task with one tool call, then confirm the interaction, tool span, token counts, and latency in Everstack traces.", "Send Claude Code telemetry to Everstack", "Configure Claude Code's native OpenTelemetry export for Everstack without changing its Anthropic model route.", "Cursor", "Route Cursor Ask and Plan requests through Everstack. Agent, Composer, inline edit, and Tab continue to use Cursor's backend.", "Create a scoped gateway key", "Use a key limited to the models and environment Cursor should reach.", "Copy the Cursor setup brief", "Use Copy for agent below. Cursor will verify the model alias and give you the exact settings values without editing unrelated preferences.", "Test in Ask or Plan", "Send a small chat request in a supported mode and confirm it appears in Everstack logs and traces.", "Open the model settings", "In Cursor, open Settings, then Models, then API Keys. Select the OpenAI-compatible configuration.", "Set the key and base URL", "Use an Everstack gateway key and enable Override OpenAI Base URL.", "Use a catalog model in Ask or Plan", "Choose a model alias available in your Everstack catalog. Cursor only honors this route for Ask and Plan modes.", "Connect Cursor Ask and Plan to Everstack", "Prepare the exact Cursor settings needed to route supported chat requests through Everstack AI Gateway.", "GitHub Copilot", "Point Copilot CLI at Everstack's OpenAI-compatible endpoint with your own key and model alias.", "Expose the provider settings", "Keep the key in the environment and select an Everstack model that supports streaming and tool calling.", "Give Copilot the setup brief", "Use Copy for agent below. Copilot will inspect the current shell profile, add only the missing provider variables, and show the diff first.", "Start a fresh CLI session", "Launch Copilot after the environment is loaded, then verify a tool-using request in Everstack.", "Configure the OpenAI-compatible provider", "Set the provider URL, type, API key, and a model that supports streaming and tool calling.", "Launch Copilot CLI", "Start a new process so it reads the provider variables from the environment.", "Verify the routed session", "Run a small task with one tool call, then confirm model, token, latency, and routing evidence in Everstack.", "Connect GitHub Copilot CLI to Everstack", "Configure GitHub Copilot CLI to use Everstack as its OpenAI-compatible model provider.", "Node.js SDK", "Python SDK", "Go SDK", "AI SDK", "OpenAI SDK", "cURL", "Call Gemini 3.6 Flash through Everstack AI Gateway", "Integrate this project with Everstack AI Gateway. Keep the existing application architecture intact and route the smallest useful model call through Everstack.", "Project aware", "Secret safe", "Evidence included" ] }, { "sourcePath": "lib/product-features.ts", "text": [ "AI gateway", "One model endpoint. Every routing decision under your control.", "Put one OpenAI-compatible API in front of every provider, then centralize routing, fallback, caching, limits, credentials, and tenant boundaries.", "An operator routing model traffic through an illustrated infrastructure switchboard", "Routing and fallback chains", "Exact and semantic caching", "Rate limits and budgets", "OpenAI-compatible API", "200+ catalog models", "Fallback and balancing", "Tenant-scoped controls", "Keep application code stable", "Your application sends one request shape to one endpoint. Everstack translates provider formats and keeps model changes out of product code.", "Route with operational context", "Select providers through aliases, explicit routes, catalog metadata, health, and configured balancing strategies instead of hard-coded SDK calls.", "Carry policy through every request", "Authentication, tenant isolation, cache scope, rate limits, and telemetry stay attached from ingress to the upstream provider response.", "Provider abstraction", "Translate OpenAI-shaped requests into provider-native calls while preserving streaming, tools, structured output, and provider-specific reasoning state.", "Fallback chains", "Move traffic to a configured alternative when a provider is unavailable, rate-limited, or outside the policy you set.", "Serve repeated requests without another provider call, with tenant-scoped entries, configurable similarity, and explicit TTLs.", "Rate limiting", "Enforce request budgets per tenant and per key before traffic reaches a model provider.", "Context compaction", "Trim conversation history when it exceeds the selected model's context window while preserving the request contract.", "Traceable economics", "Capture model selection, cache decisions, latency, token use, cost, and fallback behavior in the same request trace.", "Multi-provider products", "Keep one integration while choosing the best provider for each workload.", "Resilient production traffic", "Keep requests moving through upstream incidents and rate limits.", "Cost and latency control", "Combine routing, caching, limits, and request-level telemetry.", "Do applications need a new SDK?", "No. Existing OpenAI-compatible clients can point at the Everstack gateway by changing the base URL and credentials.", "Can each tenant have different providers?", "Yes. Provider credentials, aliases, cache entries, and limits can remain isolated inside each tenant boundary.", "Can the gateway run without the rest of the platform?", "You can start with routing alone, then enable caching, rate limiting, guardrails, and observability as your operating requirements grow.", "AI Gateway Routing | OpenAI-Compatible Multi-Provider API", "Route AI traffic across providers with one OpenAI-compatible API, configurable fallback, semantic caching, rate limits, tenant isolation, and OpenTelemetry traces.", "Agent orchestration", "Use agents for judgment. Use workflows for control.", "Combine durable, tool-using agents with explicit workflow graphs so every workload gets the right balance of autonomy, repeatability, and review.", "An illustrated operator arranging a clear sequence of connected AI workflow stations", "Building a workflow", "Node reference", "Execution and replay", "Durable agent sessions", "Visual DAG workflows", "Parallel branches", "Human approval gates", "Choose the right execution model", "Use a function for one bounded action, a workflow for explicit control flow, and an agent when the path depends on what the model discovers.", "Compose without hiding the handoffs", "Workflow nodes make model calls, agents, functions, HTTP requests, memory operations, and safety checks visible as one versioned graph.", "Keep long-running work durable", "Sessions, tools, approvals, streaming events, sandbox state, and subagent coordination remain managed by the runtime.", "Tool-using agents", "Run open-ended reasoning loops that can call tools, inspect results, and adapt their next action inside configured limits.", "Visual workflow graphs", "Connect typed nodes for models, agents, code, integrations, logic, safety, voice, and data.", "Parallel execution", "Run independent branches together when the dependency graph allows it.", "Triggers", "Start deployed workflows through webhooks, schedules, or direct API calls with explicit input variables.", "Versioned deployment", "Keep drafts separate from deployed workflow versions and roll back when an orchestration change misbehaves.", "Approval boundaries", "Pause sensitive tool calls or workflow steps until a reviewer explicitly approves the action.", "Adaptive operations", "Let an agent investigate while a workflow controls the surrounding process.", "Repeatable AI pipelines", "Version explicit branches, retries, transforms, and review steps.", "Background automation", "Trigger durable work from schedules, webhooks, or application events.", "When should I use an agent instead of a workflow?", "Use an agent when the model must choose the next action from intermediate results. Use a workflow when the steps and decision points should remain explicit.", "Can a workflow call an agent?", "Yes. Agent runs, functions, model calls, guardrails, integrations, and memory operations can participate in the same workflow graph.", "Are workflow runs observable?", "Yes. Execution events, node timing, payloads, token use, errors, and guardrail outcomes link into the platform trace.", "AI Agents and Workflow Orchestration | Everstack", "Combine durable tool-using AI agents with versioned visual workflows, parallel branches, triggers, retries, memory, and human approval gates.", "Isolated execution", "Give AI real tools without giving it the host.", "Run shell commands, code, browsers, files, and long-lived processes inside isolated environments with explicit compute, storage, network, and retention boundaries.", "An illustrated operator supervising separate protected compute rooms", "Shell and filesystem access", "Networking and port exposure", "Snapshots and restore", "Isolated compute", "Controlled networking", "Snapshots", "Signed previews", "Isolate every execution boundary", "Give each workload a filesystem, process space, resource envelope, and network policy without exposing the gateway host.", "Match isolation to the workload", "Choose the compute, retention, and network boundaries each workload needs without exposing the host or coupling applications to the underlying runtime.", "Keep environments useful", "Start from templates or snapshots, mount persistent volumes, expose approved ports, and retain state only as long as the workload needs it.", "Shell and file access", "Execute commands, stream output, read and write files, and inspect a live working environment through typed APIs.", "Resource limits", "Set CPU, memory, disk, timeout, and retention behavior for each allocation.", "Network policy", "Allow, deny, or whitelist egress and control exactly which ports can be exposed.", "Snapshots and templates", "Reuse prepared language environments or your own images instead of rebuilding every session from zero.", "Persistent volumes", "Share caches, datasets, and artifacts across restarts without weakening process isolation.", "Interactive automation", "Support SSH, browser or computer use, private networking, and long-running processes when the workload requires them.", "Coding agents", "Clone repositories, install dependencies, run tests, and inspect failures safely.", "Data and document work", "Process untrusted inputs inside an environment with explicit network and retention rules.", "Persistent development environments", "Keep files and processes available across agent sessions without sharing a host workspace.", "How much isolation does a sandbox provide?", "Each sandbox receives an explicit process, filesystem, resource, lifecycle, and network boundary. Everstack selects and manages the runtime behind that contract for the deployment.", "Can a sandbox keep state between sessions?", "Yes. Persistent sandboxes, snapshots, and mounted volumes support workloads that need files or processes beyond one turn.", "Can I block network access?", "Yes. Network modes can allow, deny, or whitelist traffic, with separate control over exposed ports and private connectivity.", "AI Sandboxes | Isolated Compute for Agents and Applications", "Run code, agents, preview services, and jobs in isolated Everstack sandboxes with shell, files, lifecycle controls, signed previews, resource limits, and network policy.", "OpenTelemetry-native operations", "See the request, the agent, and every expensive decision between them.", "Correlate model routing, tool calls, sandboxes, approvals, evaluations, latency, tokens, and cost through one OpenTelemetry-native operating view.", "An illustrated operator observing AI workload signals from a night-time monitoring station", "Traces and spans", "Searching telemetry", "Instrumenting coding agents", "Distributed traces", "Structured logs", "Operational metrics", "Cost attribution", "Trace the full AI lifecycle", "Follow gateway middleware, provider calls, streaming, agent turns, tool execution, approvals, sandboxes, and evaluation results as one correlated trace.", "Debug the decision, not only the request", "Inspect which provider was selected, whether a cache hit, when fallback activated, and where time or tokens were spent.", "Keep your telemetry pipeline", "Use the embedded collection path or export OTLP into the OpenTelemetry infrastructure your team already operates.", "Trace explorer", "Search and inspect span trees for gateway requests, agent sessions, workflow runs, and evaluations.", "Query logs across services and correlate entries through shared trace and span identifiers.", "Track volume, latency percentiles, errors, tokens, and cost across models, providers, projects, and agents.", "Configurable granularity", "Choose minimal, standard, or detailed tracing based on the evidence and storage profile you need.", "Fallback visibility", "See when routing changed providers and how that choice affected latency, errors, and spend.", "Evaluation links", "Jump from a failed quality score to the exact request or agent trace that produced it.", "Production debugging", "Find the span, provider, tool, or sandbox operation behind a failure.", "Cost control", "Attribute tokens and spend to the workload that created them.", "SLOs and capacity", "Track latency, errors, and traffic patterns before customers report them.", "Does Everstack require a separate collector?", "No. Everstack can collect telemetry directly, or export through OTLP when your deployment already uses an OpenTelemetry Collector.", "Can I trace an entire agent turn?", "Yes. Model calls, tool calls, approval events, and sandbox lifecycle operations nest under the session and turn spans.", "Can traces show token cost?", "Yes. Provider spans carry token and cost attributes so request economics remain connected to operational behavior.", "AI Observability | OpenTelemetry Traces, Logs and Metrics", "Trace gateway requests, agent sessions, tools, sandboxes, evaluations, latency, token usage, and cost through OpenTelemetry-native observability.", "Quality evaluation", "Turn AI quality from a feeling into a release signal.", "Score datasets and production traces with built-in metrics, LLM judges, deterministic code, and human review, then catch regressions before they ship.", "An illustrated testing station comparing and scoring AI outputs", "Datasets", "Scorers", "Running an eval", "LLM-as-judge", "Code scorers", "Datasets and baselines", "Human annotations", "Define what good means", "Combine built-in metrics with your own numeric, boolean, categorical, model-judged, or code-based scoring criteria.", "Evaluate repeatably", "Run the same dataset across prompt, model, or application changes and compare results against an accepted baseline.", "Connect quality to operations", "Link each score to its source trace, schedule recurring runs, and bring people into ambiguous or high-stakes review queues.", "Built-in metrics", "Measure answer relevancy, faithfulness, hallucination, bias, and toxicity with ready-to-use scoring rubrics.", "LLM judges", "Grade outputs against your criteria, source context, and reference answers with a separate evaluation model.", "Sandboxed code scorers", "Run Python, JavaScript, or TypeScript checks for deterministic and domain-specific evaluation.", "Manage representative test cases and promote an accepted run as the comparison point for future changes.", "Scheduled and CI runs", "Run suites on a schedule or in delivery pipelines so quality regressions surface before rollout.", "Human annotation", "Route uncertain, sensitive, or sampled cases to reviewers and keep their decisions with the evaluation record.", "Prompt iteration", "Compare versions on the same cases instead of relying on selected examples.", "Model migration", "Measure the quality and safety impact before changing production models.", "Production quality monitoring", "Sample live traces and detect changes that latency and error metrics cannot see.", "What is an LLM judge?", "It is a separate model that grades an output against a defined rubric, the original input, and optional context or reference answers.", "Can evaluations be deterministic?", "Yes. Code scorers run in isolated sandboxes and can enforce exact domain rules alongside model-based metrics.", "Can an evaluation link back to a trace?", "Yes. Evaluation cases can reference the gateway or agent trace that produced the output, which keeps quality evidence connected to runtime behavior.", "AI Evaluations | LLM Judges, Code Scorers and Regression Tests", "Evaluate AI outputs with built-in metrics, LLM-as-judge scoring, sandboxed code scorers, datasets, baselines, scheduling, CI gates, and human review.", "Runtime policy", "Inspect every boundary before unsafe data crosses it.", "Apply input and output checks for prompt injection, sensitive data, unsafe content, jailbreak markers, and dangerous code at the gateway or inside a workflow.", "An illustrated checkpoint inspecting AI requests before they enter a protected system", "Input guardrails", "Output guardrails", "Configuring a policy", "Input and output checks", "PII detection", "Prompt injection controls", "Traceable violations", "Check inputs before model spend", "Inspect freeform user content for sensitive data, prompt injection, unsafe categories, and configured token limits before it reaches a provider.", "Check outputs before delivery", "Apply jailbreak, toxicity, and dangerous code checks after generation but before the response reaches the application or user.", "Make the policy path explicit", "Run guardrails across gateway traffic or place pass and block branches directly inside a workflow graph.", "Sensitive data detection", "Detect configured patterns such as payment data, identity numbers, email addresses, phone numbers, and IP addresses.", "Prompt injection checks", "Block common instruction overrides, role impersonation, and system prompt extraction attempts.", "Content filtering", "Inspect configured safety categories before input reaches a model and before output reaches a user.", "Jailbreak detection", "Flag known refusal bypass markers and developer-mode patterns in generated output.", "Code execution prevention", "Detect dangerous function patterns when generated content must not contain executable system actions.", "Violation records", "Attach pass or block outcomes to execution context, traces, and workflow logs for audit and tuning.", "Public AI applications", "Apply consistent policy to unpredictable user input and model output.", "Sensitive workflows", "Stop protected data before it reaches an external model or downstream tool.", "Auditable policy enforcement", "Keep each intervention connected to the request and workflow that triggered it.", "Where do guardrails run?", "They can run across gateway requests through configuration or as explicit input and output nodes inside Workflow Studio.", "Are guardrails enabled automatically?", "No. Gateway guardrails are explicitly configured so teams can choose the checks, actions, and thresholds that match their application.", "Can a violation be audited later?", "Yes. Guardrail outcomes are recorded in execution context and appear in traces and workflow execution logs.", "AI Guardrails | Prompt Injection, PII and Runtime Safety", "Protect AI inputs and outputs with runtime checks for prompt injection, sensitive data, unsafe content, jailbreak markers, dangerous code, and traceable policy violations." ] }, { "sourcePath": "lib/roadmap.ts", "text": [ "Shipped", "In Progress", "Coming Soon" ] }, { "sourcePath": "lib/seo.ts", "text": [ "description", "robots", "author", "en_US", "1200", "630", "twitter:card", "twitter:site", "@everstackai", "twitter:title", "twitter:description", "twitter:image", "twitter:image:alt", "Everstack updates" ] }, { "sourcePath": "routes/about.tsx", "text": [ "2026-08-21", "21 August 2026", "About Everstack | Open-Source AI Infrastructure", "Everstack Labs builds open-source AI infrastructure teams run on hardware they control, spanning model routing, agents, sandboxes, and observability.", "About Everstack" ] }, { "sourcePath": "routes/agents.tsx", "text": [ "EVS | Open-Source Self-Hosted Agent Runtime", "Define agents as code and run them with persistent sessions, isolated sandboxes, tools, approvals, and observability on Everstack.", "EVS open-source self-hosted agent runtime" ] }, { "sourcePath": "routes/alternatives.e2b.tsx", "text": [ "E2B Alternatives in 2026 | Self-Hosted Agent Sandboxes", "Alternatives to E2B for running AI-generated code, compared on isolation primitive, whether self-hosting is real, how concurrency is priced, and which projects are still shipping.", "Concurrency is a pricing tier", "Hobby caps at 20 concurrent sandboxes and Pro at 100, with extra concurrency purchasable up to 1,100. Agent workloads are bursty, so the ceiling is usually the first constraint teams hit, and hitting it is a procurement conversation rather than a scaling one.", "Session length is tiered", "Up to 1 hour on Hobby and up to 24 hours on Pro. Long-running agent sessions run into this.", "Self-hosting is documented, but it is not what you buy", "E2B publishes a root-level self-host.md with a Terraform deployment: GCP is GA, AWS is beta, and Azure and generic Linux are listed unchecked. It expects a Cloudflare account and domain, Postgres, Packer and Terraform 1.7.5. The commercial product and pricing page are hosted-only, so this is a path you take on your own rather than one you are supported on.", "Daytona", "A fast, well-designed sandbox runtime with sub-90ms starts and mature stateful snapshots.", "Modal", "General serverless compute with first-class GPU support and published per-second rates.", "Beam", "Positions itself as an open-source E2B alternative with Docker-based sandboxing and GPU support.", "Everstack", "Sandboxes that ship as part of a control plane covering the gateway, agent runtime and evaluations.", "What is the isolation primitive?", "For untrusted, model-generated code, containers alone are a weaker boundary than most teams assume, because container escapes are a recurring vulnerability class. isolated runtimes are where this category has converged, and for good reason. If a vendor is vague about this, pin it down first.", "Can you actually self-host, or only in principle?", "There is a real difference between a documented Terraform path the commercial product does not cover (E2B), a repository whose licence file has been deleted and that ships no further fixes (Daytona), and self-hosting being the default supported path (Everstack). All three get described as self-hostable in roundups, including this one until you read the detail.", "Is the project still shipping?", "Check the commit history and the LICENSE file, not the star count. Daytona is the cautionary example here: 71,871 stars attached to a tree that stopped moving in June 2026, and whose licence file was deleted in the same month. A README written last year says nothing about whether anyone is fixing CVEs today.", "How is concurrency priced?", "This is the constraint teams hit first. A tiered ceiling turns a scaling event into a procurement event, which is fine if you know about it in advance and painful if you find out during a launch.", "E2B alternatives for running AI-generated code", "E2B is Apache-2.0 across two repositories and has the most polished sandbox developer experience in this category. The reason teams look elsewhere is narrower than roundups suggest: concurrency and session length are pricing tiers. Self-hosting is more paved than it is usually described, with a documented Terraform path, though the commercial product stays hosted-only. Here is what else is credible, including one project whose stars badly misrepresent its status." ] }, { "sourcePath": "routes/alternatives.helicone.tsx", "text": [ "Helicone Alternatives in 2026 | LLM Observability Compared", "Six alternatives to Helicone compared on licence terms, self-hosted feature gating, datastore count and pricing, plus what maintenance mode actually covers.", "Maintenance mode, in the company's own words", "Mintlify acquired Helicone in posts dated 3 March 2026. Helicone's says its services will remain live for the foreseeable future in maintenance mode, and both companies define that as security updates, bug fixes and new models continuing to ship. Commit volume agrees: 37 to 76 a month in the four months before, 1 to 6 a month since April 2026. The README mentions none of it.", "Supported on-prem sits on the Enterprise tier", "The Apache-2.0 code is available to run, but the supported on-prem path is a sales conversation. If you want a vendor relationship for a self-hosted deployment, that is a tier decision.", "Compliance coverage is priced at $799 per month", "SOC 2 and HIPAA sit on the Team tier. For a small team that is a large step from Pro at $79.", "You need scope past observability", "Agent execution, isolated sandboxes and evaluation workflows are outside its scope.", "Langfuse", "The best-known open source LLM observability platform, now owned by ClickHouse.", "Opik", "Comet ML's observability and evaluation platform, with the largest community of the clean-licence options.", "OpenLIT", "The lightest option here: SDK to OpenTelemetry Collector to ClickHouse, and nothing else.", "Laminar", "An Apache-2.0 platform where the cloud and self-hosted builds have feature parity.", "OpenLLMetry", "Instrumentation rather than a platform: it produces spans and sends them to a backend you already run.", "Everstack", "Observability that arrives as a side effect of routing, on a control plane that also runs agents and sandboxes.", "Does the licence gate what you self-host for?", "If you are self-hosting because of audit logs, retention policy or data masking, Langfuse's ee/ carve-out means a licence key. Opik gates only user management. OpenLIT, Laminar and Everstack gate nothing.", "How many datastores can you actually operate?", "One (OpenLIT), three (Laminar), or five (Opik) are very different commitments at 3am. Nobody regrets the lighter stack until they need something it does not do.", "Do you already have an observability backend?", "If yes, look hard at OpenLLMetry before standing up a second platform. A separate LLM observability tool means a second place to look during an incident.", "Where do traces come from?", "Instrumentation is a code change in every service you want covered, and it is the step that decays as new services ship. Gateway-level traces cost nothing per service but only see the request boundary. Most teams end up wanting both.", "Helicone alternatives, and what maintenance mode means", "Helicone is Apache-2.0 with no enterprise directory, and Mintlify acquired it in posts dated 3 March 2026. Both companies say it now runs in maintenance mode, which they define as security updates, bug fixes and new models continuing to ship. That constrains new feature work rather than ending the product, and it is worth weighing alongside the narrower reasons teams look elsewhere." ] }, { "sourcePath": "routes/alternatives.litellm.tsx", "text": [ "LiteLLM Alternatives in 2026 | Self-Hosted AI Gateways", "Six alternatives to LiteLLM compared on licence terms, which capabilities need a paid key when self-hosting, and published pricing. Facts checked against each project's own repository.", "You hit the enterprise line", "LiteLLM's root LICENSE places everything under enterprise/ under a separate licence. Virtual keys, budgets, RPM and TPM limits, spend by key, user, team and org, SSO with SCIM, and OIDC or JWT auth are listed on the enterprise page. Enterprise pricing is not published.", "You need what happens after the request", "LiteLLM is a gateway. Agent sessions, isolated code execution, evaluations and human review are separate systems you choose and operate.", "You want published pricing", "Planning a budget around a sales conversation is harder than planning around a number on a page.", "Bifrost", "Maxim AI's Go gateway, built for low overhead and simple deployment.", "Kong AI Gateway", "AI plugins on top of Kong Gateway, the Apache-2.0 API gateway with years of production hardening.", "Helicone", "An open source gateway and observability platform with a very low-friction integration.", "OpenRouter", "A hosted aggregator giving access to the widest model catalogue available behind one key.", "Cloudflare AI Gateway", "A Cloudflare platform service providing analytics, caching, rate limiting and fallback.", "Everstack", "A gateway that ships as part of a control plane covering the agent runtime, sandboxes, memory and evaluations.", "Is the feature you need on the free side of the licence line?", "Every option here except OpenRouter and Cloudflare draws a line somewhere. LiteLLM gates governance, Bifrost gates guardrails and high availability, Kong gates caching and guardrails, Helicone gates supported on-prem. Find the line before you adopt, not after.", "Do you actually need self-hosting?", "Cloudflare AI Gateway is free on every plan and OpenRouter passes inference through at cost. If prompts traversing a vendor is acceptable, self-hosting is a lot of operational attention to spend on a problem you do not have.", "Does your model list survive the move?", "LiteLLM has the widest provider coverage of anything self-hostable. Enumerate every model identifier you use and check it against the target before committing, because one niche provider can block a full cutover.", "How much LiteLLM SDK code do you have?", "Calling the proxy over HTTP moves with a base URL change. Importing the litellm Python library is a rewrite. Run a grep for `import litellm` before estimating anything.", "LiteLLM alternatives, compared on where the licence line falls", "LiteLLM is the most widely deployed self-hosted AI gateway there is, with 57,637 GitHub stars and commits landing daily. Most teams looking at alternatives are not unhappy with it. They have hit the enterprise directory, or they need something a gateway does not do." ] }, { "sourcePath": "routes/alternatives.portkey.tsx", "text": [ "Portkey Alternatives in 2026 | After the Palo Alto Deal", "Six alternatives to Portkey compared on deployment control, licence terms and published pricing, with a straight read on what the Palo Alto Networks acquisition does and does not change.", "The acquisition changed the ownership question", "Palo Alto Networks has completed its acquisition of Portkey, which is now sold as Prisma AIRS AI Gateway. Acquisitions of infrastructure vendors routinely bring repricing, enterprise repackaging and roadmap reprioritisation. It also brings stronger continuity, so this cuts both ways depending on your buyer.", "Self-hosting is positioned on enterprise plans", "Portkey is primarily cloud-hosted. If a deployment or data residency constraint is why you are shopping, that is the constraint to test first.", "You need scope past the gateway", "Agent sessions, isolated code execution, memory and human review sit outside the gateway product.", "LiteLLM", "The most widely deployed self-hosted AI gateway, with the widest provider coverage anywhere.", "Bifrost", "A Go gateway from Maxim AI with a clean Apache-2.0 licence and a focus on low overhead.", "Kong AI Gateway", "Enterprise-grade API gateway with AI plugins, and the obvious answer if Kong is already in your path.", "Helicone", "Apache-2.0 gateway and observability platform with the lowest-friction integration in this set.", "Cloudflare AI Gateway", "A hosted platform service with analytics, caching, rate limiting and fallback, free on every Cloudflare plan.", "Everstack", "A self-hosted-first control plane where the gateway ships with the agent runtime, sandboxes and evaluations.", "Is the acquisition actually your problem?", "Be specific. If the concern is repricing, wait and see what happens to your renewal rather than migrating pre-emptively. If it is roadmap direction, that is a real and durable reason. If it is continuity, the acquisition arguably improved it.", "Do you need self-hosting, or did you just want it?", "If prompts traversing a vendor is acceptable, Cloudflare AI Gateway is free on every plan and requires no infrastructure. Self-hosting is a real ongoing cost and worth taking on only for a real constraint.", "Where does the licence line fall on the alternative?", "Every self-hostable option here gates something. LiteLLM gates governance, Bifrost gates guardrails and high availability, Kong gates caching and guardrails, Helicone gates supported on-prem. Check before adopting.", "How much Portkey-specific configuration do you have?", "Portkey config objects and virtual keys have to be re-expressed as routing policy and API keys wherever you go. The endpoint change is trivial; the configuration port is not automatic. Plan a dual-run rather than a cutover.", "Portkey alternatives, and whether the acquisition is a reason to move", "Palo Alto Networks has completed its acquisition of Portkey, which now ships as Prisma AIRS AI Gateway. That is a real reason to re-evaluate and a poor reason to migrate on its own. This page covers the credible alternatives, and is honest that the acquisition improved Portkey's continuity story as much as it complicated its roadmap." ] }, { "sourcePath": "routes/blog.$slug.tsx", "text": [ "https://schema.org", "BlogPosting", "Organization", "Everstack Labs", "ImageObject", "Back to blog" ] }, { "sourcePath": "routes/blog.index.tsx", "text": [ "Everstack Blog | AI Infrastructure Engineering", "Read Everstack product updates, engineering deep dives, and practical guidance for operating production AI infrastructure.", "Field notes", "What we learn while operating the stack.", "Engineering notes, product decisions, and practical guidance from the systems behind Everstack.", "An illustrated field notebook and signal recorder at the entrance to an operations archive", "Engineering", "Product decisions", "Operations", "Read more" ] }, { "sourcePath": "routes/changelog.$slug.tsx", "text": [ "Back" ] }, { "sourcePath": "routes/changelog.index.tsx", "text": [ "Everstack Changelog | Product Releases and Updates", "Follow Everstack releases across AI gateway routing, agents, sandboxes, evaluations, observability, and platform operations.", "Release record", "Every installed module, recorded.", "A running operational record of the gateway, runtime, sandbox, evaluation, and platform changes we ship.", "An illustrated operations archive with newly installed infrastructure modules", "Versioned releases", "Linked pull requests", "Operational context" ] }, { "sourcePath": "routes/cli.tsx", "text": [ "Everstack CLI", "An illustrated command desk connected to Everstack infrastructure", "Install the CLI", "Command reference", "At your desk. In your pipeline.", "Interactive authentication when you're working. Environment-based credentials when a script is.", "Command syntax checked against the published", "binary on", ". Feature availability depends on your instance, permissions, and edition. Examples describe commands, not a live execution session." ] }, { "sourcePath": "routes/comparison.agent-frameworks.tsx", "text": [ "Everstack vs Agent Frameworks | Framework vs Platform", "LangGraph, CrewAI, Mastra, Flue, and the OpenAI Agents SDK build the agent. Everstack is the self-hosted platform it runs on: gateway, sandboxes, memory, observability, evals, and deployment. Use any framework.", "LangGraph", "CrewAI", "Mastra", "Flue", "OpenAI Agents SDK", "Vercel AI SDK", "Authoring: what frameworks are built for", "Agent loop, tools, multi-agent", "Subagents / delegation", "MCP tool integration", "Infrastructure: yours to build, or Everstack's", "Model gateway: routing, fallback, cache, spend", "Sandboxed code execution", "Durable execution / resume", "Persistent memory store", "Self-hosted runtime + deployment", "Language-agnostic surface", "Operations: running it in production", "Built-in observability & traces", "Evaluations", "Human-in-the-loop approval", "Multi-tenant controls", "Does Everstack replace my agent framework?", "No, and it doesn't try to. Frameworks like LangGraph, CrewAI, Mastra, and Flue are how you express agent logic in code. Everstack is the production layer beneath them: gateway, sandboxes, memory, observability, evals, and deployment. Keep your framework; run it on Everstack.", "How do I run my framework on Everstack?", "Point the framework's model calls at the Everstack gateway and route tool/code execution to Everstack sandboxes. You get routing, fallback, caching, traces, evals, and approval gates without rewriting your agent.", "Frameworks already have some of this, right?", "Some do, in pieces: LangGraph has persistence, the OpenAI Agents SDK has tracing, Flue has sandboxes and durable execution. The gap is the platform layer as one self-hosted backend, a multi-provider gateway, built-in evals and approvals, and multi-tenant controls, rather than assembling each piece yourself.", "Which framework should I use with Everstack?", "Whichever fits your team. Everstack is framework-agnostic by design, so the decision of how you author agents stays yours; Everstack just makes the result production-grade and self-hosted.", "Comparison", "Frameworks build the agent.", "Everstack runs it.", "LangGraph, CrewAI, Mastra, Flue, and the OpenAI Agents SDK define agent logic. Everstack supplies the self-hosted gateway, isolated execution, memory, telemetry, evaluations, and deployment layer around that logic.", "View pricing", "Read documentation", "Bring your framework", "Everstack is framework-agnostic. Point any of these at the gateway and run them on infrastructure you own.", "your framework →", "runs on Everstack", "→ gateway · sandboxes · memory · observability · evals · deploy", "Framework vs platform", "What an agent framework gives you, versus what Everstack runs underneath.", "Capability", "Agent frameworks", "Everstack", "Framework capabilities vary; values reflect the category as of June 8, 2026. Several frameworks pair with a separate SaaS for observability or evals.", "Frequently asked questions" ] }, { "sourcePath": "routes/comparison.bifrost.tsx", "text": [ "Everstack vs Bifrost | Which Gateway Features Are Enterprise", "Compare Everstack and Bifrost by Maxim AI on licence terms, which capabilities are enterprise-only, raw gateway performance, and scope past the request.", "Guardrails, RBAC and log export ship under Apache-2.0", "Cluster deployment is a configuration, not a tier", "Agent runtime, sandboxes and evaluations share the control plane", "Serious engineering on raw performance. Bifrost claims under 100 microseconds of overhead at 5,000 requests per second, and it is a Go binary built for that.", "Apache-2.0 across the repository, with 7,675 GitHub stars as of August 2026 and commits landing daily.", "Genuinely simple self-hosted deployment: Docker, Kubernetes, or a single Go binary.", "The OSS tier is free forever and includes core gateway functionality, routing, observability and governance primitives.", "Backed by Maxim AI, so the gateway sits inside a wider evaluation and observability product if you want that.", "Guardrails are enterprise-only, per Bifrost's own pricing page.", "Cluster Mode for high availability and Adaptive Load Balancing with real-time health monitoring are enterprise-only, which puts the reliability features on the paid tier.", "RBAC, audit logs, log exports, SSO via SAML and OIDC, and vault integrations are enterprise-only.", "It is a gateway. Agent execution, sandboxes, memory and human review are separate systems.", "Guardrails and RBAC in the free build", "High availability without a tier upgrade", "Runtime and evals on the same plane", "Published pricing at every tier", "Licence", "Apache-2.0 across the repository.", "Apache-2.0, verified against the LICENSE file in maximhq/bifrost. Clean, with no enterprise directory in the tree.", "Guardrails", "Included, enforced in the request path.", "Listed as an Enterprise capability on Bifrost's pricing page, covering content safety and real-time protection.", "High availability", "Cluster deployment is configuration.", "Cluster Mode and Adaptive Load Balancing with real-time health monitoring are both Enterprise.", "RBAC, audit logs and log export", "Included.", "All three are Enterprise.", "SSO", "Enterprise SSO via SAML and OIDC.", "Published pricing", "Starter $0, Build $20/month, Scale $100/month, Enterprise custom (August 2026).", "OSS free forever for self-managed deployments, Enterprise custom pricing for VPC, on-premises and air-gapped environments (August 2026).", "Raw gateway overhead", "Not benchmarked against Bifrost. We are not going to publish a comparison we have not run.", "Bifrost claims under 100 microseconds of overhead at 5,000 requests per second, and 50x faster than LiteLLM.", "Agent runtime and isolated execution", "Stateful sessions, tools, approvals, child agents, plus Docker, isolated runtime and Kubernetes sandboxes.", "Out of scope.", "Community size", "Smaller.", "7,675 GitHub stars as of 31 August 2026, pushed the same day.", "Licence and stars from the maximhq/bifrost repository and the GitHub API, tier boundaries from getmaxim.ai/bifrost/pricing, all on 31 August 2026. Performance figures are Bifrost's own published claims and we have not independently benchmarked them.", "Gateway", "OpenAI-compatible endpoint", "Multi-provider routing", "Basic load balancing", "Adaptive load balancing with health monitoring", "Enterprise", "Reliability", "Cluster mode for high availability", "Governance", "Role-based access control", "Audit logs", "Planned", "Log export", "SSO via SAML and OIDC", "Enterprise plan", "Runtime", "Stateful agent sessions", "Isolated code execution", "Quality", "Datasets and evaluation runs", "Performance", "Published sub-100 microsecond overhead claim", "Both are OpenAI-compatible, so this is a base URL change either way. Integration effort is not a differentiator here.", "Both are OpenAI-compatible proxies, so applications move with a base URL change. The work is re-expressing provider configuration and deciding what to do with anything that depended on Bifrost enterprise features you were paying for.", "Point applications at the new endpoint", "A base URL and API key change. No other application edit.", "Re-express provider and routing config", "Bifrost provider entries and load balancing settings map to Everstack provider routes and routing policy.", "Re-create governance objects", "If you were on Bifrost Enterprise, RBAC roles, audit log destinations and SSO configuration need re-declaring. If you were on OSS, this is capability you gain rather than port.", "Benchmark before you commit", "Bifrost publishes aggressive performance numbers. If gateway overhead is a hard constraint for you, measure both against your own traffic rather than trusting anyone's table, including ours.", "Bifrost is a well-engineered gateway with a clean licence. Pick Bifrost over Everstack when any of these is true.", "Where the tier line falls", "Guardrails, RBAC, log export and clustering are all in the Apache-2.0 build. SSO enforcement is an Enterprise entitlement on Everstack Cloud, and a tenant-facing audit log is planned rather than shipping, so on those two rows Bifrost Enterprise is ahead of us.", "All of those are Enterprise on Bifrost's pricing page, including Cluster Mode and Adaptive Load Balancing.", "Putting high availability and guardrails on the paid tier means the free build is a development gateway more than a production one. That is a legitimate business model, but worth pricing before you adopt.", "Raw performance", "Claims under 100 microseconds of overhead at 5,000 requests per second, and 50x faster than LiteLLM.", "If proxy overhead is a hard constraint, this is theirs to win and you should measure it yourself against your own traffic.", "Licence structure", "Apache-2.0 across the repository, with no enterprise directory.", "A genuine tie. Both projects keep the licence clean and put commercial differentiation in the product tier rather than the source tree.", "Scope past the request", "Agent sessions, isolated sandboxes, memory, workflows and evaluations on the same control plane.", "A gateway. Maxim AI provides evaluation and observability alongside it, but agent execution and sandboxing are not in scope.", "Decides whether you are buying one system or several, and whether a trace follows the work past the request.", "Are guardrails available without paying?", "Yes, in the Apache-2.0 build.", "No. Guardrails are Enterprise.", "Is high availability a tier?", "No, cluster deployment is configuration.", "Yes. Cluster Mode and Adaptive Load Balancing are Enterprise.", "Which gateway is faster?", "Unknown. We have not benchmarked against Bifrost and will not claim a number.", "Bifrost publishes sub-100 microsecond overhead at 5k RPS.", "Does it run agents and sandboxes?", "Yes.", "No, it routes their model calls.", "Is Bifrost open source?", "Yes, Apache-2.0, verified against the LICENSE file in the maximhq/bifrost repository, with 7,675 stars as of August 2026 and commits landing daily. There is no separately licensed enterprise directory in the tree; commercial differentiation is done at the product tier instead.", "Which Bifrost features are enterprise-only?", "Per Bifrost's pricing page as of August 2026: guardrails, Cluster Mode, Adaptive Load Balancing with real-time health monitoring, enterprise SSO via SAML and OIDC, vault support with integrations, log exports, audit logs, role-based access control, SLA-backed support, and in-VPC deployments. The OSS tier includes core gateway functionality, routing, observability and governance primitives.", "Is Bifrost really 50x faster than LiteLLM?", "That is Bifrost's published claim, alongside under 100 microseconds of overhead at 5,000 requests per second. We have not independently benchmarked it and are not going to repeat or dispute it as fact. If gateway overhead is a hard constraint for you, measure it against your own traffic.", "How much does Bifrost cost?", "The OSS tier is free forever for developers, small teams and self-managed deployments via Docker, Kubernetes or a Go binary. Enterprise is custom pricing for VPC, on-premises and air-gapped environments. No self-serve paid tier is published between the two.", "maximhq/bifrost repository", "Bifrost licence (Apache-2.0)", "Bifrost pricing", "Everstack licence (Apache-2.0)", "Bifrost", "Everstack vs Bifrost", "Bifrost is a fast, cleanly licensed Go gateway from Maxim AI, and on raw proxy overhead it is theirs to win. The difference worth pricing is which capabilities sit behind the Enterprise tier: guardrails, cluster mode, adaptive load balancing, RBAC, audit logs and SSO are all on the paid side.", "Bifrost is an open source AI gateway from Maxim AI, Apache-2.0 licensed with 7,675 GitHub stars as of August 2026. It is a Go binary built for low overhead, claiming under 100 microseconds at 5,000 requests per second, deployable via Docker, Kubernetes or a single binary. The OSS tier is free forever; guardrails, clustering, RBAC and SSO are Enterprise." ] }, { "sourcePath": "routes/comparison.braintrust.tsx", "text": [ "Everstack vs Braintrust | Self-Hosted LLM Evaluation", "Compare Everstack and Braintrust on evaluation depth, which tier unlocks self-hosting, processed-data pricing, and whether evals connect to the runtime that produced them.", "Self-hosting is the default path, not an Enterprise line item", "Evaluations score runs from the same control plane that executed them", "No processed-data ceiling to buy past on the way to production", "The strongest pure evaluation product in the category. Datasets, experiments, scorers and the review workflow are more polished than ours.", "Genuinely good developer ergonomics for writing and iterating on scorers, which is the part teams actually spend time in.", "A real free tier: $10 of monthly credits, 1 GB of processed data and 10,000 scores is enough to run a serious pilot.", "Published pricing on the self-serve tiers, which is more transparency than several competitors offer.", "Well-known and widely adopted, with a large library of worked examples for eval design.", "Self-hosting and hybrid deployment are Enterprise-only. Starter and Pro are hosted.", "Pricing meters processed data and scores, so cost scales with evaluation volume rather than seats.", "It evaluates. Model routing, agent execution and isolated code sandboxes are separate systems.", "Getting evaluation data in means instrumenting the application, because Braintrust is not in the request path.", "Self-host on Starter, not just Enterprise", "Evals share a trace with the gateway and runtime", "One Apache-2.0 licence", "Scoring runs against traffic you already route", "Is there an open source core", "Yes. Apache-2.0 across the repository, and you can read, run, fork and redistribute it.", "No. There is no public repository for the platform, and Braintrust's own self-hosting docs state the deployed architecture is not open source. Two satellite libraries are genuinely MIT and usable standalone: autoevals and braintrust-proxy.", "What self-hosting actually means", "The whole platform runs on your infrastructure.", "Hybrid. The control plane (web UI, auth, metadata) stays hosted by Braintrust; only the data plane runs in your cloud, via Terraform modules they author. Traces, prompts and scores stay with you, which is a good split for privacy-sensitive teams but not a no-vendor-in-the-path one.", "Self-hosted or hybrid deployment", "The default. Run the Apache-2.0 build with Docker or Kubernetes at any tier.", "Enterprise only. On-prem or hosted deployment for high volume or privacy-sensitive data is described as a custom Enterprise arrangement, not available on Starter or Pro (August 2026).", "Published pricing", "Starter $0, Build $20/month, Scale $100/month, Enterprise custom (August 2026).", "Starter $0 with $10 monthly credits, 1 GB processed data and 10,000 scores. Pro $249/month with $249 credits, 5 GB processed data and 50,000 scores, plus custom charts and priority support. Enterprise custom (August 2026).", "What the meter counts", "Plan tier plus metered usage.", "Processed data in GB and number of scores, so cost rises with evaluation volume.", "Evaluation depth", "Datasets, scorers, LLM judges, human annotation queues and regression analysis. Good, but Braintrust's eval product is more mature and we are not claiming otherwise.", "The most polished evaluation workflow in this comparison set.", "How evaluation data arrives", "Runs that went through the gateway or agent runtime are already there. Scoring attaches to traces that exist.", "Client-side instrumentation. Braintrust is not in the request path, so you send it what you want evaluated.", "Model gateway and agent runtime", "Same control plane.", "Out of scope.", "Isolated code execution", "Docker, isolated runtime and Kubernetes sandboxes.", "Pricing and deployment tiers read from braintrust.dev/pricing on 31 August 2026. Prices change; verify before you buy.", "Evaluations", "Datasets and experiment runs", "LLM-as-judge scorers", "Human review and annotation", "Regression comparison between runs", "Scorer authoring ergonomics", "Deployment", "Self-hosting on the free tier", "Hybrid deployment", "Enterprise", "Platform", "Multi-provider model gateway", "Stateful agent runtime", "Evaluations attached to routed traffic without instrumentation", "Observability", "OpenTelemetry-native traces", "Partial", "The eval loop looks similar in both. The difference is where the runs being scored came from: traffic Everstack already routed, versus data you send to Braintrust.", "Datasets port through an export and import. Scorers have to be re-declared, because the concepts map closely but the definitions are not wire compatible. The bigger change is that evaluations stop being something you push data into and start being something that attaches to traffic you already route.", "Export datasets", "Pull datasets out through Braintrust's API and import them as Everstack datasets. This part is mechanical.", "Re-declare scorers", "Factuality, tone and custom scorers map conceptually but need re-expressing. Budget real time for tuning LLM judges to match previous scores.", "Route traffic through the gateway", "Once requests go through Everstack, runs are available for scoring without a separate push step, which removes the instrumentation you were maintaining.", "Re-baseline before you trust regressions", "Judge prompts differ, so absolute scores will not match. Re-run your reference set on both and compare shape rather than magnitude.", "Braintrust makes the best evaluation product in this comparison set. Pick Braintrust over Everstack when any of these is true.", "Getting self-hosted", "The default path at every tier, Apache-2.0, Docker or Kubernetes.", "Enterprise only. Starter and Pro are hosted; on-prem and hybrid are a custom arrangement.", "If a deployment constraint is why you are shopping, an Enterprise-gated self-host is a very different proposition from a free one.", "Evaluation product maturity", "Complete, but younger and less polished.", "The most mature evaluation workflow here, with better scorer ergonomics.", "If evals are the centre of your workflow rather than one part of it, this advantage is theirs and it is significant.", "Where the runs being scored come from", "Traffic already routed through the gateway or agent runtime. Scoring attaches to traces that exist.", "Data you instrument and send. Braintrust is not in the request path.", "Removing the push step removes the most common reason eval coverage stays partial: nobody instrumented the service that matters.", "How cost scales", "Processed data in GB and score count, so cost rises with evaluation volume.", "Neither model is wrong. Per-GB pricing is cheaper at low volume and gets expensive exactly when evaluation becomes a habit rather than an experiment.", "Can I self-host without an Enterprise contract?", "Yes, at any tier.", "No. Self-hosting and hybrid are Enterprise only.", "Which has the better evaluation product?", "Ours is complete but younger.", "Braintrust, and by a clear margin on scorer ergonomics and workflow polish.", "Do I have to instrument my app to evaluate it?", "Not for traffic routed through the gateway, which is already there.", "Yes. Braintrust is not in the request path.", "How does cost scale?", "With processed data in GB and number of scores.", "Can I self-host Braintrust?", "On the Enterprise tier. Braintrust's pricing page describes on-prem or hosted deployment for high volume or privacy-sensitive data as a custom Enterprise arrangement, not available on Starter or Pro. Checked 31 August 2026.", "How much does Braintrust cost?", "As of August 2026: Starter is $0 per month with $10 in monthly credits, 1 GB of processed data and 10,000 scores. Pro is $249 per month with $249 in credits, 5 GB of processed data and 50,000 scores, plus custom charts and priority support. Enterprise is custom.", "Is Braintrust better at evaluations than Everstack?", "Yes, on the evaluation product itself. Their scorer authoring, experiment workflow and review tooling are more mature than ours, and if evaluation is the centre of your work that is the right reason to pick them. What Everstack adds is that evaluations attach to traffic the platform already routed and executed, rather than to data you push in separately.", "Do scores transfer between the two?", "Not numerically. Judge prompts and scorer definitions differ, so absolute scores will not match. Re-run a reference set on both and compare the shape of the results rather than the magnitudes.", "Braintrust pricing", "Braintrust documentation", "Everstack licence (Apache-2.0)", "Braintrust", "Everstack vs Braintrust", "Braintrust makes the better evaluation product, and this page says so more than once. The two differences that decide it are that self-hosting is Enterprise-only on their side, and that Everstack evaluates runs from the same control plane that executed them rather than data you instrument and push.", "Braintrust is an evaluation platform for AI applications, covering datasets, experiments, scorers, LLM judges and human review. Self-serve pricing runs from a $0 Starter tier to Pro at $249 per month, metered on processed data and score count. Self-hosting and hybrid deployment are available on the Enterprise tier only." ] }, { "sourcePath": "routes/comparison.cloudflare-ai-gateway.tsx", "text": [ "Everstack vs Cloudflare AI Gateway | Hosted or Self-Hosted", "Compare Everstack and Cloudflare AI Gateway on deployment model, data residency, caching and rate limiting, and what happens to your traffic past the request.", "Runs inside your own infrastructure and compliance boundary", "No dependency on a single vendor's edge network", "The gateway comes with an agent runtime, sandboxes and evaluations", "Available on all Cloudflare plans, including the free one, which makes it the cheapest way to get analytics and caching in front of model calls.", "One line of code to get started, and if you already run on Cloudflare it is essentially free capability.", "Cloudflare's edge network is one of the best-operated pieces of infrastructure on the internet. You are not going to match its reliability or latency footprint by self-hosting.", "Caching served directly from Cloudflare rather than the model provider is a real cost and latency win.", "Nothing to deploy, patch, monitor or scale.", "It is a Cloudflare platform service. There is no self-hosting option, so requests and their logs traverse Cloudflare infrastructure.", "That makes it a poor fit where a deployment or data residency constraint is the reason you are shopping for a gateway at all.", "Scope stops at the request: analytics, logging, caching, rate limiting, retries and fallback.", "Agent execution, isolated sandboxes, memory, evaluations and human review are not part of it.", "Self-hosted, inside your own boundary", "No vendor edge in the request path", "Runtime, sandboxes and evals included", "Portable across Docker, Kubernetes or cloud", "Deployment model", "Self-hosted on your infrastructure with Docker or Kubernetes, or Everstack Cloud if you prefer managed.", "Cloudflare-hosted only. The documentation presents it exclusively as a platform service and mentions no self-hosting capability.", "Where requests and logs travel", "Wherever you deploy it.", "Through Cloudflare's network.", "Cost of entry", "Starter $0, Build $20/month, Scale $100/month, Enterprise custom (August 2026).", "Available on all Cloudflare plans, including free. If you are already a Cloudflare customer this is close to free capability.", "Caching", "Semantic and exact-match caching, self-hosted.", "Serves requests directly from Cloudflare's cache instead of the original model provider, which is a genuine latency and cost win at their edge.", "Rate limiting, retries and fallback", "Yes, with per-tenant policy.", "Yes, including model fallback on error.", "Provider coverage", "Multi-provider.", "Multi-provider, including Workers AI, Anthropic, OpenAI and Google Gemini.", "Agent runtime, sandboxes and evaluations", "Same control plane, sharing one trace.", "Out of scope.", "Operational burden", "Real. Self-hosting means you deploy, patch, monitor and scale it.", "None. This is the strongest argument for Cloudflare and it is a good one.", "Capabilities and deployment model read from developers.cloudflare.com/ai-gateway on 31 August 2026. Cloudflare plan inclusion is per their own documentation.", "Gateway", "Multi-provider routing", "Rate limiting", "Retries and model fallback", "Analytics and logging", "Deployment", "Self-hosting", "Runs without vendor infrastructure in the path", "Zero operational burden", "Global edge presence", "Runtime", "Stateful agent sessions", "Isolated code execution", "Vector memory", "Quality", "Datasets and evaluation runs", "Human annotation queues", "Both are a base URL change. Cloudflare's includes your account and gateway identifiers in the path; Everstack's points at wherever you deployed it.", "Both are OpenAI-compatible, so the endpoint change is trivial. The substantial part is that you are moving from a managed edge service to infrastructure you operate, which is a real trade you should make deliberately.", "Size the infrastructure you are taking on", "Cloudflare handles scaling, patching and global distribution. Self-hosting means you do. Work out expected request volume and availability requirements before anything else.", "Swap the endpoint", "Replace the gateway.ai.cloudflare.com base URL with your Everstack deployment. Application code otherwise stays as it is.", "Re-create caching and rate limit policy", "Cloudflare gateway settings map to Everstack routing and cache configuration, including per-tenant limits.", "Keep both while you compare", "Run a share of traffic through each and compare latency and cache hit rate honestly. Cloudflare's edge is hard to beat on latency, and you should know the size of that gap before you commit.", "Cloudflare AI Gateway is an excellent piece of infrastructure and for many teams it is obviously correct. Pick it over Everstack when any of these is true.", "Where the gateway runs", "On your infrastructure, inside your own compliance boundary, portable across Docker, Kubernetes or any cloud.", "On Cloudflare. The documentation presents it exclusively as a platform service with no self-hosting option.", "If a deployment or data residency constraint is why you are shopping for a gateway, this decides it immediately and nothing else on the page matters.", "Real. You deploy it, patch it, monitor it and scale it.", "None. Nothing to run, and Cloudflare's edge is better operated than most self-hosted infrastructure will ever be.", "This is a genuine and significant advantage for Cloudflare, and any honest comparison has to lead with it rather than bury it.", "A deployment plus a plan.", "Available on all Cloudflare plans including free. If you are already a customer, it is close to free capability.", "Hard to argue with free. The question is whether the deployment model works for you, not whether the price does.", "Scope past the request", "Agent sessions, isolated sandboxes, memory, workflows and evaluations on the same control plane, sharing a trace.", "Analytics, logging, caching, rate limiting, retries and fallback. The request boundary is the boundary.", "Only matters if you have those problems. If you do not, the narrower service is the better engineering decision.", "Can it run inside my own infrastructure?", "Yes, that is the default.", "No. It is a Cloudflare platform service with no self-hosting option.", "How much operational work is it?", "Real. You run it.", "None, and this is its strongest argument.", "What does it cost to start?", "Starter is $0, then $20 or $100 per month.", "Available on all Cloudflare plans, including free.", "Does it execute agent code?", "Yes, in isolated sandboxes.", "No, that is outside its scope.", "Can Cloudflare AI Gateway be self-hosted?", "No. Cloudflare's documentation presents it exclusively as a platform service accessed through their infrastructure, and mentions no self-hosting capability. If a data residency or deployment constraint is why you are evaluating gateways, that fact decides this comparison on its own.", "How much does Cloudflare AI Gateway cost?", "Cloudflare describes it as available on all plans, including the free tier. For an existing Cloudflare customer it is effectively free capability, which is a strong argument that has nothing to do with features.", "What does Cloudflare AI Gateway actually do?", "Analytics and logging over request metrics, token usage and cost; caching served from Cloudflare's cache instead of the model provider; rate limiting; and request retry with model fallback on error. It supports multiple providers including Workers AI, Anthropic, OpenAI and Google Gemini.", "Is Everstack faster than Cloudflare?", "At the edge, almost certainly not. Cloudflare's network footprint is not something a self-hosted deployment matches, and we are not going to claim otherwise. What self-hosting changes is where your data goes, not how close the gateway is to your users.", "Cloudflare AI Gateway documentation", "Everstack licence (Apache-2.0)", "Cloudflare AI Gateway", "Everstack vs Cloudflare AI Gateway", "This one is decided by a single question, and it is not a feature. Cloudflare AI Gateway is a hosted platform service with no self-hosting option, available on every Cloudflare plan including free. If traffic traversing Cloudflare is fine, it is very hard to beat. If it is not, nothing else on this page matters.", "Cloudflare AI Gateway is a platform service providing visibility and control over AI applications: analytics and logging on request metrics, token usage and cost, caching served from Cloudflare's edge rather than the model provider, rate limiting, and request retry with model fallback. It supports Workers AI, Anthropic, OpenAI, Google Gemini and others, and is available on all Cloudflare plans." ] }, { "sourcePath": "routes/comparison.daytona.tsx", "text": [ "Everstack vs Daytona | Self-Hosted AI Code Sandboxes", "Daytona's open source repository stopped receiving updates in June 2026 when core development moved to a private codebase. What that means if you were planning to self-host it.", "An open source repository that is still receiving updates", "Self-hosting is the supported path, not a fork of an archived tree", "The sandbox arrives with the gateway, agent runtime and evaluations around it", "They gave a defensible reason for closing the source. Daytona's announcement argues that publishing an isolation layer, kernel boundaries and orchestration logic hands the blueprint of that boundary to anyone who wants to probe it with an AI. For a sandbox vendor that is a serious argument, not a pretext.", "Enormous reach: 71,871 GitHub stars, one of the highest counts in developer infrastructure.", "A genuinely fast runtime. Daytona documents sandboxes starting in under 90 milliseconds from code to execution, which is excellent.", "Their README describes full composable computers with a dedicated kernel, filesystem, network stack and allocated vCPU, RAM and disk, built on OCI and Docker compatibility.", "Stateful environment snapshots for persistent agent operations across sessions, which is a real differentiator for long-running agents.", "A polished hosted product with SDKs, an API and a CLI, and the company is actively developing it.", "The open source repository is no longer maintained. Its README states: 'As of June 2026, Daytona's core development has moved to a private codebase. This repository will receive no further updates, fixes, or releases.'", "The last commit to daytonaio/daytona landed on 25 June 2026. The 71,871 stars are attached to a tree that has stopped moving.", "The repository is explicitly offered 'as is and without support or warranty', and the licence link points at the v0.190.0 tag rather than the default branch.", "If you self-host it today you are running an unmaintained snapshot, including for security fixes.", "The licence went from Apache-2.0 to AGPL-3.0 to gone. The initial commit on 6 February 2024 was Apache-2.0; a commit on 28 April 2025 relicensed the project to AGPL-3.0 alongside the AI-sandbox pivot, shipped as v0.100.0; and a commit on 23 June 2026 deleted the LICENSE file entirely. GitHub now reports the repository licence as none. The last open release, v0.190.0, is AGPL-3.0, and the README points forks at that tag.", "The isolation story is contested by Daytona's own materials. Their documentation says default sandboxes are Linux containers, with VM sandboxes as a separate option, while the README claims each sandbox has a dedicated kernel, filesystem and network stack. We report both rather than picking one.", "A repository that still gets security fixes", "isolated runtime, Docker and Kubernetes backends", "Sandbox traces join model and agent traces", "One Apache-2.0 licence across the platform", "Open source status", "Apache-2.0, actively developed.", "The public repository is no longer maintained. Its README states core development moved to a private codebase as of June 2026 and that the repository will receive no further updates, fixes or releases.", "Last commit to the public repository", "Ongoing.", "25 June 2026, a maintenance notice and a licence link fix.", "Security fixes for self-hosters", "Shipped in the same repository you run.", "None expected. The repository is offered as is and without support or warranty.", "Licence history", "Apache-2.0 from the first commit, unchanged.", "Apache-2.0 at the initial commit on 6 February 2024, relicensed to AGPL-3.0 on 28 April 2025 with the AI-sandbox pivot and shipped as v0.100.0, then the LICENSE file was deleted on 23 June 2026. GitHub now reports the repository licence as none. The last open release, v0.190.0, is AGPL-3.0, and the README points forks at that tag.", "Isolation primitive (resolved)", "isolated runtime, plus Docker and Kubernetes backends.", "Contested by their own materials. Daytona's documentation describes default sandboxes as Linux containers, with VM sandboxes as a separate option, while the README claims each sandbox has a dedicated kernel, filesystem and network stack. Both statements are theirs, and we are not harmonising them.", "GitHub stars", "Far fewer.", "71,871 as of 31 August 2026, attached to a tree that stopped moving in June.", "Sandbox start time", "Depends on backend and warm pool configuration. We do not publish a single headline number.", "Daytona documents sandboxes spinning up in under 90 milliseconds, which is genuinely fast.", "Snapshots", "Snapshot support exists but is less mature than Daytona's; we would not claim parity here.", "Stateful environment snapshots for persistent agent operations across sessions, and a well-developed part of the product.", "Bring Your Own Compute", "Not applicable. The whole platform runs on your infrastructure, control plane included.", "A real and supported middle path: sandbox workloads run on your own runner nodes with official Helm charts, while Daytona's hosted control plane, dashboard and database stay with Daytona. Good if your constraint is where code executes, insufficient if it is that no vendor sits in the path.", "Gateway, agent runtime and evaluations", "Same control plane, sharing one trace.", "Out of scope. Daytona is the execution runtime.", "Hosted product", "Everstack Cloud, or self-host.", "Actively developed and available. The company continues to build; it is the public repository that stopped.", "Repository status, README text, commit history and star count read from daytonaio/daytona and the GitHub API on 31 August 2026. Licence history read from the commit log: Apache-2.0 at the initial commit, AGPL-3.0 from commit 5271af9f, and the LICENSE file deleted in commit b40f732a. Product claims are from Daytona's own documentation, which is where the isolation description conflicts with the README. Daytona's hosted product is not affected by the repository notice.", "Sandbox", "isolated runtime-class isolation", "Contested, see facts", "OCI and Docker compatible images", "Stateful snapshots", "Less mature", "Sub-100ms cold start", "Kubernetes backend", "Deployment", "Maintained open source you can self-host", "Platform", "Multi-provider model gateway", "Stateful agent runtime", "Evaluations and scoring", "Traces spanning sandbox and model calls", "Ecosystem", "GitHub reach", "The API shapes are close, which is what you would expect from two products solving the same problem. The decision here is not ergonomics.", "If you are running the open source Daytona build, the pressing question is not feature parity but maintenance: you are on a tree that stopped receiving fixes in June 2026. If you are on Daytona's hosted product, none of that applies and this is an ordinary comparison.", "Establish which Daytona you are actually on", "The hosted product is actively developed. The public repository is not. These are very different positions and the rest of the plan depends on which one you are in.", "Map the lifecycle calls", "daytona.create maps to sandboxes.create, process.code_run to exec, and delete to stop. Filesystem operations have direct equivalents.", "Rebuild images as templates", "Both are OCI-derived, so a Dockerfile usually carries over with minimal edits.", "Re-plan anything built on snapshots", "Daytona's stateful snapshots are more mature than ours. If your agent architecture depends on them, test that path carefully before committing to a move.", "Daytona builds a genuinely good runtime and the company is still developing it. Pick Daytona over Everstack when any of these is true.", "Whether the open source you self-host is maintained", "Apache-2.0 and actively developed, including security fixes, in the repository you run.", "The public repository states plainly that core development moved to a private codebase in June 2026 and that it will receive no further updates, fixes or releases.", "For anyone whose reason to self-host is control or compliance, running an unmaintained tree is the opposite of what they were buying. Daytona is being honest about it, which is more than some projects manage.", "Raw start latency", "Depends on backend and warm pool configuration, and we do not publish a single headline number.", "Under 90 milliseconds from code to execution, documented by Daytona.", "This is a real advantage and it is theirs. If you spawn a sandbox per request rather than per session, it may be the only number that matters.", "What surrounds the sandbox", "The model gateway that produced the code, the agent that orchestrated it, the memory it read and the evaluation that scored it are all on the same control plane and in the same trace.", "The execution runtime. Everything around it is a system you choose and integrate.", "Debugging an agent that wrote bad code means seeing the prompt, the completion and the execution together.", "Is the open source version still getting updates?", "Yes, including security fixes.", "No. The README states no further updates, fixes or releases as of June 2026.", "What licence does the public repository carry?", "Apache-2.0, unchanged since the first commit.", "None that GitHub can detect. The LICENSE file was deleted in June 2026; the last open release, v0.190.0, is AGPL-3.0.", "How fast does a sandbox start?", "Depends on backend and warm pool. No single published number.", "Under 90 milliseconds, which is faster than we claim.", "Are stateful snapshots production ready?", "Supported, but less mature than Daytona's.", "Yes, and a well-developed part of the product.", "Does the sandbox come with a model gateway?", "Yes, sharing one trace.", "No, that is a separate system.", "Is Daytona still open source?", "Not in the way that phrase usually implies. The repository is still public, but the LICENSE file was deleted in a commit on 23 June 2026 and GitHub now reports the repository licence as none. The last open release, v0.190.0, is AGPL-3.0, and the README points forks at that tag. The licence had already changed once before that: Apache-2.0 at the initial commit on 6 February 2024, then AGPL-3.0 from 28 April 2025. On maintenance, the README states: 'This repository is no longer maintained. As of June 2026, Daytona's core development has moved to a private codebase. This repository will receive no further updates, fixes, or releases. It remains public and free to use, fork, and build on under the LICENSE, as is and without support or warranty.' The last commit landed on 25 June 2026.", "Does that affect Daytona's hosted product?", "No, and this distinction matters. The notice concerns the open source repository. Daytona the company continues to develop the product, and their hosted service is unaffected. If you are a hosted customer this is not your problem.", "Can I still self-host Daytona?", "You can run the last published tree, and the licence permits it. What you will not get is fixes, including security fixes. For most teams whose reason to self-host is control or compliance, running an unmaintained snapshot defeats the purpose.", "What isolation does a Daytona sandbox use?", "Their own materials disagree, so we are reporting both. Daytona's documentation describes default sandboxes as Linux containers, with VM sandboxes offered as a separate option. The repository README describes each sandbox as having a dedicated kernel, filesystem and network stack, which describes a VM rather than a container. If you are choosing on isolation strength for untrusted, model-generated code, get that answered in writing before you commit.", "Is Daytona faster than Everstack?", "On documented cold start, yes. Daytona documents sandboxes starting in under 90 milliseconds. We do not publish a single headline figure because ours varies with backend and warm pool configuration, and we are not going to invent one to win a row in a table.", "daytonaio/daytona repository", "Daytona maintenance notice (README)", "Daytona documentation", "Everstack licence (Apache-2.0)", "Daytona", "Everstack vs Daytona", "Daytona builds a fast, well-designed sandbox runtime, and the company is still developing it. But the open source repository behind its 71,871 stars stopped receiving updates in June 2026, when core development moved to a private codebase. If your plan was to self-host it, that is the fact that decides this.", "Daytona is a secure and elastic infrastructure runtime for AI-generated code, built on OCI and Docker compatibility. Its README describes sandboxes with a dedicated kernel, filesystem, network stack and allocated resources, while its documentation describes default sandboxes as Linux containers with VM sandboxes as a separate option. It documents sub-90ms starts and stateful snapshots. Its public repository has 71,871 GitHub stars, a maintenance notice stating that core development moved to a private codebase in June 2026, and no LICENSE file since 23 June 2026." ] }, { "sourcePath": "routes/comparison.e2b.tsx", "text": [ "Everstack vs E2B | Self-Hosted Sandboxes for AI Agents", "Compare Everstack and E2B on sandbox isolation, concurrency limits, per-second compute pricing, self-hosting, and whether the sandbox comes with the rest of the stack.", "Sandboxes run on your own infrastructure without a concurrency tier", "The gateway, agent runtime and evaluations share a control plane with the sandbox", "One Apache-2.0 licence covers the platform, not just the SDK", "The best-known name in this category, with 13,599 GitHub stars as of August 2026 and an Apache-2.0 licence.", "A genuinely excellent developer experience. Spinning a sandbox and running code takes a handful of lines, and the SDKs are well made.", "Transparent per-second compute pricing published openly, which is rarer in this category than it should be.", "A meaningful free tier: $100 of one-time credits, no credit card, up to 20 concurrent sandboxes.", "Self-hosting is genuinely documented rather than merely permitted: a root-level self-host.md describes a Terraform deployment, with GCP marked GA and AWS beta.", "Focus. E2B does sandboxes and does them well, without asking you to adopt a platform.", "Concurrency is a pricing tier. Hobby caps at 20 concurrent sandboxes, Pro at 100, with extra concurrency purchasable up to 1,100.", "Session length is tiered too: up to 1 hour on Hobby, up to 24 hours on Pro.", "The commercial product and pricing page are hosted-only. Self-hosting is documented separately in self-host.md rather than being part of what you buy, and it expects a Cloudflare account and domain, Postgres, Packer and Terraform 1.7.5.", "It is a sandbox. Model routing, agent state, memory, evaluations and observability are separate systems you assemble.", "No concurrency ceiling you have to buy past", "isolated runtime, Docker and Kubernetes backends", "Sandbox traces join gateway and agent traces", "Runs inside your own compliance boundary", "Licence", "Apache-2.0 across the platform.", "Apache-2.0, verified against the raw LICENSE files in both repositories: e2b-dev/E2B, the SDK, and e2b-dev/infra, the Go infrastructure repository with 1,350 stars. A clean licence, and a point in E2B's favour.", "Self-hosting", "The default. Docker, isolated runtime and Kubernetes backends on your own infrastructure.", "Documented and Terraform-based. A root-level self-host.md covers the deployment, with GCP marked GA and AWS beta; Azure and generic Linux are listed unchecked. It expects a Cloudflare account and domain, Postgres, Packer and Terraform 1.7.5. The commercial product and pricing page remain hosted-only.", "Concurrent sandboxes", "Bounded by the infrastructure you give it, not by a plan.", "Up to 20 on Hobby, up to 100 on Pro, with extra concurrency purchasable up to 1,100 (August 2026).", "Maximum session length", "Bounded by your configuration.", "Up to 1 hour on Hobby, up to 24 hours on Pro (August 2026).", "Compute pricing", "Starter $0, Build $20/month, Scale $100/month, plus metered sandbox compute (August 2026).", "Hobby free with a one-time $100 of credits, Pro $150/month, Ultimate custom. Compute is per-second: 1 vCPU $0.000014/s, 2 vCPU $0.000028/s, 4 vCPU $0.000056/s, 6 vCPU $0.000084/s, 8 vCPU $0.000112/s, RAM $0.0000045/GiB/s, storage free at 10 GiB on Hobby and 20 GiB on Pro (August 2026).", "Isolation backends", "Docker, isolated runtime and Kubernetes.", "isolated runtimes, which is the right primitive for running untrusted code.", "Gateway, agent runtime and evaluations", "Same control plane, sharing one trace.", "Out of scope. E2B provides the sandbox; the rest is yours to assemble.", "Community size", "Smaller.", "13,599 GitHub stars as of 31 August 2026.", "Licences read from the raw LICENSE files in e2b-dev/E2B and e2b-dev/infra, stars from the GitHub API, self-hosting detail from the repository's self-host.md, and pricing and limits from e2b.dev/pricing, all on 31 August 2026. E2B's homepage gives two different startup figures, less than 200 ms and 80 ms, so we do not cite either as authoritative. Per-second rates change; verify before you model costs.", "Sandbox", "isolated runtime isolation", "Container isolation option", "Kubernetes backend", "Filesystem and process APIs", "Long-running sessions", "Tiered, 1h to 24h", "Unmetered concurrency", "Tiered, 20 to 1,100", "Deployment", "Documented self-hosting path", "Terraform, GCP GA, AWS beta", "Platform", "Multi-provider model gateway", "Stateful agent runtime", "Vector memory", "Evaluations and scoring", "OpenTelemetry traces spanning sandbox and model calls", "Ecosystem", "Community size and worked examples", "Published per-second compute rates", "Metered, published per plan", "Both expose a small SDK surface for this and both are pleasant to use. E2B's is more mature. The difference is where the sandbox runs and what else is in the trace afterwards.", "Both APIs cover the same operations: create, execute, read and write files, and tear down. The port is mechanical. The real decision is whether you also want to move the surrounding stack or keep it where it is.", "Map the lifecycle calls", "Sandbox.create maps to sandboxes.create, runCode to exec, and kill to stop. Filesystem and process operations have direct equivalents.", "Rebuild your base images as templates", "E2B templates and Everstack templates are both OCI-derived, so a Dockerfile usually carries over with minimal edits.", "Size the infrastructure you are now running", "Self-hosting removes the concurrency tier and replaces it with capacity planning. Work out peak concurrent sandboxes and size for it before cutting over.", "Run both against the same workload", "Compare cold start, execution time and cost per run before shifting production traffic.", "E2B is very good at what it does and for a lot of teams it is the right tool. Pick E2B over Everstack when any of these is true.", "Where the sandbox runs", "On infrastructure you control, with Docker, isolated runtime or Kubernetes backends, inside your own compliance boundary.", "On E2B's infrastructure by default. Self-hosting is documented in a root-level self-host.md and deployed with Terraform, GCP GA and AWS beta, but the commercial product and pricing page are hosted-only.", "If AI-generated code touches customer data, where it executes is usually a compliance question rather than a preference.", "Concurrency as a pricing dimension", "Bounded by the capacity you provision, not by a plan.", "20 concurrent on Hobby, 100 on Pro, purchasable up to 1,100.", "Agent workloads are bursty. A concurrency ceiling is the constraint people hit first, and hitting it is a procurement conversation rather than a scaling one.", "Developer experience", "Good, and improving.", "Excellent, and more mature. Create a sandbox and run code in about four lines.", "E2B has had longer to polish this and it shows. If you are evaluating on how fast you get to a working demo, they win.", "What else is in the trace", "Sandbox execution, the model calls that produced the code, agent state and evaluation scores are all in one trace.", "Sandbox execution. Correlating it with the model call that produced the code is work you do yourself.", "Debugging an agent that wrote bad code means seeing the prompt, the completion and the execution together. Two systems make that a join you maintain.", "Can I run sandboxes on my own infrastructure?", "Yes, that is the default path.", "Yes. self-host.md documents a Terraform deployment, GCP GA and AWS beta. It is not what the pricing page sells.", "Is concurrency capped by plan?", "No, it is capped by the capacity you provision.", "Yes: 20 on Hobby, 100 on Pro, up to 1,100 purchasable.", "How long can a session run?", "As long as you configure.", "Up to 1 hour on Hobby, up to 24 hours on Pro.", "Does the sandbox come with a model gateway?", "Yes, and they share a trace.", "No, that is a separate system.", "Is E2B open source?", "Yes, Apache-2.0. There are two repositories and both carry it, verified against the raw LICENSE files: e2b-dev/E2B, the SDK, with 13,599 stars as of August 2026, and e2b-dev/infra, the Go infrastructure repository with 1,350 stars. Note the distinction between the licence and the product: the code is open and self-hosting is documented, and the paved commercial path is hosted.", "Can I self-host E2B?", "Yes, and it is more paved than roundups suggest. E2B publishes a root-level self-host.md describing a Terraform deployment: GCP is marked GA, AWS is beta, and Azure and generic Linux are listed unchecked. It expects a Cloudflare account and domain, Postgres, Packer and Terraform 1.7.5. What is hosted-only is the commercial product and the pricing page, which covers Hobby, Pro and Ultimate tiers.", "How much does E2B cost?", "As of August 2026: Hobby is free with a one-time $100 of credits, up to 1 hour sessions and 20 concurrent sandboxes. Pro is $150 per month with up to 24 hour sessions and 100 concurrent sandboxes, extendable to 1,100. Compute is billed per second, from $0.000014/s for 1 vCPU to $0.000112/s for 8 vCPU, plus $0.0000045 per GiB per second of RAM. Storage is included at 10 GiB on Hobby and 20 GiB on Pro.", "Which has better isolation?", "Both use isolated runtimes, which is the correct primitive for untrusted code. Everstack also offers Docker and Kubernetes backends, which trade some isolation strength for operational familiarity. If isolation strength is the deciding factor, isolated runtimes on either platform are the answer.", "e2b-dev/E2B repository", "e2b-dev/infra repository", "E2B licence (Apache-2.0)", "E2B pricing", "Everstack licence (Apache-2.0)", "E2B", "Everstack vs E2B", "Both run AI-generated code in isolated runtimes, and both are Apache-2.0. The differences that decide it are where the sandbox executes, whether concurrency is a pricing tier or a capacity question, and whether the sandbox arrives with the gateway and agent runtime around it.", "E2B is an open source, secure environment for running AI-generated code, Apache-2.0 licensed with 13,599 GitHub stars as of August 2026. It provides isolated runtime-backed sandboxes with filesystem and process APIs and a well-regarded SDK. A second Apache-2.0 repository, e2b-dev/infra, holds the Go infrastructure, and a root-level self-host.md documents a Terraform deployment. Its commercial product is hosted, with Hobby, Pro and Ultimate tiers that scale session length and concurrency." ] }, { "sourcePath": "routes/comparison.flue.tsx", "text": [ "Everstack vs Flue | Agent Framework vs Self-Hosted Runtime", "Compare Everstack and Flue for building agent harnesses: framework vs self-hosted platform, model gateway, built-in observability and evals, human-in-the-loop, and language support.", "A self-hosted platform, not just a library: gateway, runtime, memory, sandboxes, observability, and evals as one deployable backend.", "Unified model gateway built in: routing, fallback, caching, and spend control across 17+ providers.", "Observability, evaluations, and human-in-the-loop approval are native, not bring-your-own.", "Modern, agent-native TypeScript framework with excellent developer experience for TS/Node teams.", "Strong primitives out of the box: autonomous agents, durable execution, sandboxes, subagents, skills, and MCP tools.", "Open source and deploy-anywhere (Cloudflare Workers, CI runners, containers, self-hosted Node).", "Clean, code-guided workflows that get a capable agent running quickly.", "It is a framework, not a platform: the gateway, observability backend, and evals around it are yours to assemble and operate.", "No built-in model gateway, so routing, fallback, caching, and spend controls across providers aren't handled for you.", "Observability is export-only (OpenTelemetry / Braintrust / Sentry); there is no built-in traces, cost, or eval console.", "TypeScript / Node only, so non-TS services and clients have no native surface.", "One platform to deploy and own, versus a framework plus the infrastructure you wire around it.", "Gateway, observability, evals, and approvals are included, not separately integrated.", "Self-host the entire backend on your VPS, GCP, or AWS in hours.", "Agent framework DX", "Built-in model gateway", "Observability & evals built-in", "Human-in-the-loop controls", "Language flexibility", "Self-hosted platform ownership", "Framework vs platform", "A self-hosted runtime you deploy once: gateway, agent runtime, memory, sandboxes, observability, and evals behind one surface.", "A TypeScript framework you build with, then deploy and operate the surrounding infrastructure yourself.", "Everstack ships the backend; Flue ships the library. You stop assembling gateway, observability, and evals around your agent.", "Model access & routing", "A unified gateway with routing, fallback, semantic caching, and spend control across 17+ providers.", "Calls providers directly (works with multiple models), but without a gateway, routing, fallback, or caching layer.", "Everstack handles reliability and cost at the gateway, so the harness gets failover and caching for free.", "Observability & evaluations", "Built-in traces, cost analytics, and evaluations as part of the platform, with OpenTelemetry export too.", "Exports traces to OpenTelemetry, Braintrust, or Sentry; you bring and run the observability and eval stack.", "Everstack is debuggable and gradeable on day one without standing up a separate observability backend.", "Human-in-the-loop & governance", "Native approval gates, guardrails, and multi-tenant controls in the runtime.", "Approval gates and policy enforcement aren't part of the stated feature set.", "Everstack lets a human block a costly or risky action mid-run without custom plumbing.", "Language & surface", "Language-agnostic: any service or client hits the gateway and runtime over standard APIs.", "TypeScript / Node only, so the agent and its callers live in the TS ecosystem.", "Everstack fits polyglot teams; Flue fits teams happy to standardize on TypeScript.", "Architecture", "Open source / self-deployable", "Single deployable platform (gateway + runtime + obs)", "Sandboxed execution", "Durable execution", "Language-agnostic surface", "TypeScript only", "Gateway", "Multi-provider models", "Routing, fallback & load balancing", "Semantic caching", "Spend & rate controls", "Runtime", "Autonomous agent loop", "Subagents / delegation", "Tools & MCP", "Persistent memory store", "Partial", "Human-in-the-loop approval", "Observability", "Built-in traces console", "Export-only", "Evaluations", "Cost analytics", "OpenTelemetry export", "Security", "Guardrails / policy enforcement", "Multi-tenant controls", "Assembling the backend around your agent", "Everstack ships gateway, memory, sandboxes, observability, and evals as one self-hosted platform.", "Skip weeks of wiring infrastructure around a framework and deploy the whole backend in hours.", "No gateway for reliability and cost", "Routing, fallback, caching, and spend controls live at the gateway across every provider.", "The harness gets failover and cache savings without per-call provider code.", "Bring-your-own observability and evals", "Built-in traces, cost, and evaluations, with OpenTelemetry export when you want it.", "Debug and grade agent runs on day one instead of standing up a separate stack.", "Locked to one language", "A language-agnostic gateway and runtime any service can call.", "Polyglot teams ship agents without standardizing every service on TypeScript.", "Do you want a framework or a running backend?", "A self-hosted platform you deploy once, with gateway, runtime, memory, observability, and evals included.", "A TypeScript framework you build with and then deploy and operate yourself.", "Do you need a model gateway?", "Routing, fallback, caching, and spend control across 17+ providers, built in.", "Works with multiple providers but has no gateway, routing, or caching layer.", "How will you observe and evaluate agents?", "Built-in traces, cost analytics, and evaluations, plus OpenTelemetry export.", "Exports telemetry to external tools; you run the observability and eval backend.", "Do you need human approval mid-run?", "Native human-in-the-loop approval gates and guardrails in the runtime.", "Not part of the stated feature set; you would build it.", "Is your team TypeScript-only or polyglot?", "Language-agnostic surface any service can call.", "Best fit for teams standardizing on TypeScript / Node.", "Is Flue a good choice?", "Yes. Flue is a strong, modern agent framework with excellent DX for TypeScript teams, and genuinely capable primitives like sandboxes, durable execution, subagents, and MCP. If you want a library to build an agent in TS and you're happy to assemble and run the surrounding infrastructure, Flue is a solid pick.", "How is Everstack different from Flue?", "Flue is the harness as a framework; Everstack is the self-hosted platform the harness runs on. Everstack adds a unified model gateway, built-in observability and evaluations, human-in-the-loop approval, persistent memory, and multi-tenant controls, deployed as one backend on your own cloud, and it's language-agnostic rather than TypeScript-only.", "Do they overlap?", "Significantly. Both give you autonomous agents, sandboxed and durable execution, subagents, tools, and MCP. The difference is scope: Flue stops at the framework, while Everstack also provides the gateway, observability, evals, approvals, and deployment around it.", "Can I use a framework like Flue with Everstack?", "Yes. Because Everstack exposes a standard gateway and runtime over APIs, a TypeScript agent built with a framework can route its model calls and tool/sandbox execution through Everstack, getting the gateway, observability, and controls without re-platforming.", "Which should we evaluate?", "Choose Flue if you want a TypeScript-first framework and will own the surrounding infra. Choose Everstack if you want the whole production backend, self-hosted, with gateway, observability, evals, and approvals included and a language-agnostic surface.", "Flue homepage", "Flue documentation", "Flue quickstart", "Flue on GitHub", "Flue", "Everstack vs Flue", "Flue is an agent framework you assemble; Everstack is the self-hosted runtime your harness runs on. Here's how they compare for production.", "Flue is an open-source TypeScript framework for building autonomous AI agents and workflows, with sandboxes, durable execution, subagents, skills, tools, and MCP integration. You write your agent in TypeScript and deploy it to targets like Cloudflare Workers, CI runners, containers, or a self-hosted Node.js server." ] }, { "sourcePath": "routes/comparison.helicone.tsx", "text": [ "Everstack vs Helicone | Self-Hosted LLM Observability", "Compare Everstack and Helicone on licence terms, which tier unlocks on-prem deployment, pricing, and how far each one goes past logging model calls.", "On-prem deployment is the default, not an enterprise upgrade", "The gateway that produces the traces also runs agents, sandboxes and evaluations", "Per-tenant policy is enforced in the request path, not reported on afterwards", "Apache-2.0 across the repository, with no separately licensed enterprise directory. That is a cleaner licence story than several better-known alternatives.", "Still shipping under maintenance mode. Both Helicone and Mintlify state that security updates, bug fixes and new models keep landing, and commits do still arrive.", "Genuinely one line of code to start. The proxy integration is about as low-friction as this category gets.", "A well-shaped free tier at 10,000 requests, which is enough to evaluate properly rather than just look at a demo.", "6,116 GitHub stars and a YC W23 pedigree, with a mature hosted product behind it.", "Acquired by Mintlify, announced 3 March 2026. Helicone's own post says its services will remain live for the foreseeable future in maintenance mode, and Mintlify's says the same. Both define maintenance mode as security updates, bug fixes and new models continuing to ship, which rules out new feature work rather than the product.", "Commit volume matches that. The repository ran between 37 and 76 commits a month in the four months before the acquisition, and between 1 and 6 a month since April 2026. The README mentions none of it, so a reader landing on the repository sees a normal active project.", "On-prem deployment is listed under the Enterprise tier on the pricing page, which is contact-us pricing.", "SOC 2 and HIPAA compliance sit on the Team tier at $799 per month.", "The product is observability. Agent execution, isolated sandboxes and workflow orchestration are outside its scope.", "SAML SSO is Enterprise only.", "Self-hosting without a tier conversation", "Gateway, runtime, sandboxes and evals in one plane", "Apache-2.0 on both sides, so licence is not the differentiator", "Published pricing at every tier", "Licence", "Apache-2.0 across the repository.", "Apache-2.0, verified against the LICENSE file in Helicone/helicone. No separate enterprise directory. This is a genuinely clean licence, and a point in Helicone's favour.", "Maintenance status", "Active.", "Maintenance mode, in the company's own words, after Mintlify's acquisition announced 3 March 2026. Helicone defines maintenance mode as security updates, bug fixes and new models continuing to ship. The commit history agrees: 37 to 76 a month in the four months before the acquisition, 1 to 6 a month since April 2026.", "Self-hosted or on-prem", "The default. Run the Apache-2.0 build with Docker or Kubernetes, no tier required.", "On-prem deployment is listed under the Enterprise tier, which is contact-us pricing. The Apache-2.0 code is available regardless, but the supported on-prem path is a sales conversation.", "Published pricing", "Starter $0, Build $20/month, Scale $100/month, Enterprise custom (August 2026).", "Hobby free with 10,000 requests and 1 GB storage, Pro $79/month with unlimited seats, alerts and HQL, Team $799/month with 5 organizations plus SOC 2 and HIPAA, Enterprise contact-us with SAML SSO and on-prem (August 2026).", "Compliance tier", "Self-host inside your own compliance boundary, which is usually the point.", "SOC 2 and HIPAA are listed on the Team tier at $799/month.", "Multi-provider routing and fallback", "Yes, in the request path.", "Helicone is an LLM gateway as well as an observability platform, so requests do pass through it.", "Agent runtime and isolated execution", "Stateful sessions, tools, approvals, child agents, plus Docker, isolated runtime and Kubernetes sandboxes.", "Out of scope.", "Community size", "Small, and smaller than Helicone's.", "6,116 GitHub stars as of 31 August 2026.", "Licence and activity read from the Helicone/helicone repository and the GitHub API, pricing from helicone.ai/pricing, all on 31 August 2026. Prices change; verify before you buy.", "Observability", "Request logging and tracing", "Cost and token attribution", "OpenTelemetry-native traces", "Partial", "Alerts and reports", "Pro and above", "Gateway", "OpenAI-compatible endpoint", "Multi-provider routing", "Caching", "Governance", "SAML SSO", "Enterprise plan", "Enterprise", "SOC 2 and HIPAA coverage", "Self-hosted, inside your boundary", "Team, $799/month", "Deployment", "Supported on-prem deployment", "Runtime", "Stateful agent sessions", "Isolated code execution", "Workflows with approvals", "Quality", "Datasets and evaluation runs", "Experiments", "Human annotation queues", "Both are proxies, so both trace by routing rather than by instrumentation. The integration shape is nearly identical, which makes this an unusually cheap migration in either direction.", "Both products are proxies that trace by routing, so the integration shapes are close and the migration is mostly configuration. The work is in re-creating alerting and any custom properties you rely on.", "Swap the base URL and drop the auth header", "Everstack authenticates with its own API key rather than a Helicone-Auth header alongside a provider key, so the header goes away.", "Re-create custom properties as metadata", "Helicone-Property headers map to Everstack request metadata, which is also what drives custom trace columns.", "Rebuild alerts and saved views", "Alerting rules and any HQL queries you depend on need re-expressing. Budget real time for this if you have built dashboards on them.", "Dual-write while you compare", "Run both proxies for a release and compare request counts and cost totals before turning Helicone off.", "Helicone has one of the cleanest licence stories in this category, and its maintenance-mode commitment still covers security updates, bug fixes and new models. Weigh that yourself: it constrains new feature work rather than ending the product. Pick Helicone over Everstack when any of these is true.", "Getting on-prem", "Self-hosting is the default path. Run the Apache-2.0 build with Docker or Kubernetes; support is sold separately but the code is not gated.", "The code is Apache-2.0 and you can run it, but on-prem deployment appears under the Enterprise tier on the pricing page, which is contact-us.", "If a deployment constraint is why you are shopping, the difference between a supported default and an enterprise line item usually matters more than the licence text.", "Licence cleanliness", "Apache-2.0 across the repository, with no separately licensed enterprise directory.", "This is a genuine tie, and worth saying plainly. Helicone's licence is cleaner than several better-known alternatives in this category.", "Scope past the request", "The same control plane runs agent sessions, isolated sandboxes, memory, workflows and evaluations, all sharing a trace.", "Observability and gateway. Agent execution and sandboxing happen elsewhere.", "Only relevant if you actually have those problems. If you do not, the narrower tool is the better engineering decision.", "Integration friction", "A base URL change and an API key.", "A base URL change plus a Helicone-Auth header. Genuinely one line, and their marketing claim on this is accurate.", "Both are trivial. Neither should decide anything.", "Is supported on-prem deployment gated by tier?", "No. Self-hosting is the default path.", "On-prem is listed under the Enterprise tier on the pricing page.", "Is the licence clean, with no enterprise directory?", "Yes, Apache-2.0 throughout.", "Yes, Apache-2.0 throughout. This one is a tie.", "What does SOC 2 and HIPAA coverage cost?", "Self-hosting puts the data inside your own boundary, which is usually why teams self-host.", "Listed on the Team tier at $799 per month.", "Can it execute agent code in isolation?", "Yes, with Docker, isolated runtime and Kubernetes backends.", "No, that is outside its scope.", "Is Helicone still maintained?", "It is in maintenance mode, which is the company's own description rather than a rumour. Mintlify acquired Helicone in posts dated 3 March 2026, and Helicone's says its services will remain live for the foreseeable future in maintenance mode, meaning security updates, new models, bug and performance fixes all keep shipping. The commit history matches: between 37 and 76 commits a month in the four months before the acquisition, and between 1 and 6 a month since April 2026. The repository is Apache-2.0 and is not archived, and its README says nothing about any of this, so it reads as a normally active project until you check the dates.", "Is Helicone open source?", "Yes, Apache-2.0, verified against the LICENSE file, with no separately licensed enterprise directory in the repository. That is a cleaner licence structure than several better-known alternatives in this category, and worth crediting.", "How much does Helicone cost?", "As of August 2026: Hobby is free with 10,000 requests and 1 GB storage, Pro is $79 per month with unlimited seats, alerts and reports, and their query language, Team is $799 per month with 5 organizations plus SOC 2 and HIPAA compliance, and Enterprise is contact-us with SAML SSO and on-prem deployment.", "Can I self-host Helicone for free?", "The code is Apache-2.0, so you can run it. What is tier-gated is the supported on-prem deployment path, which appears under Enterprise on the pricing page. Whether that distinction matters depends on whether you want a vendor relationship or just the software.", "Helicone/helicone repository", "Helicone licence (Apache-2.0)", "Helicone pricing", "Helicone: joining Mintlify", "Mintlify acquires Helicone", "Everstack licence (Apache-2.0)", "Helicone", "Everstack vs Helicone", "Both are proxies that trace by routing rather than by instrumentation, and both are Apache-2.0 with no enterprise directory, so the licence is a tie. The differences that matter are which tier unlocks supported on-prem deployment, and how far each one goes past logging the model call.", "Helicone is an open source LLM observability platform and gateway, Apache-2.0 licensed, with 6,116 GitHub stars as of August 2026 and a YC W23 pedigree. Integration is a base URL change plus an auth header. Mintlify acquired it in posts dated 3 March 2026, and both companies say it now runs in maintenance mode, which they define as security updates, bug fixes and new models continuing to ship." ] }, { "sourcePath": "routes/comparison.kong-ai-gateway.tsx", "text": [ "Everstack vs Kong AI Gateway | Which Plugins Cost Money", "Compare Everstack and Kong AI Gateway on licence terms, which AI plugins need an enterprise key, per-model pricing, deployment modes and runtime scope, with facts from Kong's own docs.", "Semantic caching, advanced rate limiting and every guardrail ship under one Apache-2.0 licence", "No per-model fee: routing a sixth model costs nothing extra", "Agent runtime, isolated sandboxes and evaluations sit in the same control plane as the routing", "One of the most battle-tested proxies in existence: 44,059 GitHub stars as of August 2026 and years of production API gateway deployments behind it.", "The core Kong Gateway is genuinely Apache-2.0, and the free AI plugins run in every deployment mode including self-hosted, hybrid, DB-less and Kubernetes.", "If you already run Kong for your APIs, AI traffic becomes another route rather than another system to operate, monitor and secure.", "Agent Gateway, generally available since AI Gateway 3.14 in April 2026, governs agent-to-agent traffic and MCP server access, which is a real and forward-looking capability.", "Deep enterprise operational surface: Konnect control planes, hybrid mode, and an established compliance and support story.", "Seventeen AI plugins require an AI Gateway Enterprise licence, including semantic caching, advanced rate limiting and every guardrail plugin. Each of those doc pages carries an explicit 'AI License Required' badge.", "Konnect Plus includes five unique proxied LLM models, then charges $100 per month for each additional model.", "Fully self-hosted Kong Gateway Enterprise is custom pricing and requires a sales conversation, so the free self-hosted path is the OSS build with the free plugin set only.", "Kong's own July 2026 post says Kong Gateway 3.18 is when AI plugins in the API Gateway codebase become opt-in rather than bundled, so today's packaging is explicitly changing.", "One Apache-2.0 licence across the repository", "Caching, limits and guardrails included, not gated", "Stateful agent runtime and isolated sandboxes", "Per-request pricing with no per-model fee", "Licence", "Apache-2.0. One licence file covers the repository, including the enterprise modules.", "Core Kong Gateway is Apache-2.0, verified against the LICENSE file in Kong/kong. The AI capability set is split: six plugins are free, seventeen require an AI Gateway Enterprise licence.", "AI plugins available without a paid key", "All of them. Routing, fallback, semantic caching, rate limits, guardrails, evaluations and observability ship in the same Apache-2.0 build.", "AI plugins that need an enterprise licence", "None.", "Semantic caching", "Included.", "ai-semantic-cache is AI Gateway Enterprise only.", "Guardrails", "Included, enforced in the request path.", "Every guardrail plugin is enterprise only, including the ones that wrap AWS, Azure and GCP safety services.", "Cost per additional model", "None. Model count is not a billed dimension.", "Konnect Plus includes five unique LLMs proxied by AI plugins, then $100 per month per additional model, measured hourly and enforced monthly. Enterprise is unlimited under custom pricing (August 2026).", "Request pricing", "Starter $0, Build $20/month, Scale $100/month, Enterprise custom (August 2026).", "Konnect Plus includes 1M API requests per month, then $200 per month per additional 1M, capped at 10M per month. Control planes are priced separately: Serverless $25/month, Hybrid $200/month, Dedicated Cloud $500/month plus $0.15/GB (August 2026).", "Fully self-hosted commercial tier", "Run the same Apache-2.0 build anywhere with Docker or Kubernetes. Support is sold separately; the code is not gated.", "Kong Gateway Enterprise, where both control plane and data plane are local, is fully custom pricing and must be discussed with Kong's commercial team.", "Agent runtime and isolated execution", "Stateful agent sessions, tools, approvals, child agents, and Docker, isolated runtime and Kubernetes sandboxes.", "Out of scope. Kong describes itself in governance and proxy terms: securing agent-to-agent communication, governing MCP access, inspecting and blocking messages in flight. It does not run the agents.", "Community size", "Small. Everstack is a young project and Kong wins this one by a wide margin.", "44,059 GitHub stars as of 30 August 2026.", "Packaging stability", "Stable. One artifact, one licence.", "In flux by Kong's own account. AI Gateway 2.0 moves onto its own runtime, admin API and release cadence, and Kong Gateway 3.18 makes the AI plugins opt-in rather than bundled.", "Plugin tiering was read from each plugin's own page on developer.konghq.com, licence from the raw LICENSE file in Kong/kong, and pricing from konghq.com/pricing, all on 30 August 2026. Kong's pricing page currently banners an upcoming increase, so verify before you buy.", "Gateway", "OpenAI-compatible endpoint", "Multi-provider routing", "ai-proxy free, ai-proxy-advanced enterprise", "Enterprise licence required", "Advanced rate limiting", "Prompt guardrails", "Basic free, semantic and custom enterprise", "PII sanitisation", "Unlimited proxied models at no extra cost", "5 included on Plus, then $100/month each", "Tools", "MCP server proxying", "Federated tool calling", "Partial, via MCP proxy plugins", "Runtime", "Stateful agent sessions", "Isolated code execution sandboxes", "Workflows with approvals and schedules", "Vector memory", "Quality", "Datasets and evaluation runs", "LLM-as-judge scoring", "ai-llm-as-judge, enterprise licence required", "Human annotation queues", "Observability", "OpenTelemetry-native traces", "Token and provider cost attribution", "Operations", "Mature API gateway for non-AI traffic", "Years of production proxy hardening", "Everstack exposes an OpenAI-compatible endpoint, so the stock SDK works with a base URL change. Kong configures a plugin on a route through the Admin API, which is more moving parts but also more control over the surrounding API surface.", "This is where the licence line falls. On Everstack it is configuration. On Kong the plugin that does it, ai-semantic-cache, carries an AI License Required badge on its own documentation page.", "Kong and Everstack both terminate an OpenAI-compatible request, so applications usually move with a base URL change. The work is in re-expressing plugin configuration as Everstack routing policy, and in deciding what to do with the non-AI API traffic Kong is also carrying.", "Inventory which AI plugins you actually run", "Separate the six free plugins from the seventeen enterprise ones. The enterprise list is usually the reason a migration is being considered at all, because those are the capabilities Everstack includes.", "Move the model routes first, leave the API routes alone", "Point application traffic at the Everstack gateway for LLM calls only. Kong keeps serving your regular APIs. There is no reason to migrate both at once, and plenty of reason not to.", "Re-express plugin config as routing policy", "ai-proxy model and provider settings map to Everstack provider routes. ai-rate-limiting-advanced maps to per-tenant limits. ai-semantic-cache maps to cache mode and similarity threshold. Guardrail plugins map to Everstack guardrails.", "Run both in parallel and compare", "Mirror a percentage of traffic and compare latency, cache hit rate and cost before shifting the rest. Keep Kong's AI routes configured until you are confident.", "Kong is a serious piece of infrastructure and for many teams it is clearly the right answer. Pick Kong AI Gateway over Everstack when any of these is true.", "What the free tier actually includes", "Routing, fallback, semantic caching, per-tenant rate limits, guardrails, evaluations, sandboxes and observability, all under Apache-2.0 with no licence key.", "Six AI plugins are free. Semantic caching, advanced rate limiting, PII sanitisation, MCP proxying, LLM-as-judge and every guardrail plugin require an AI Gateway Enterprise licence.", "The seventeen gated plugins are largely the ones teams reach for once a proof of concept becomes production. That is where the cost appears, and it is worth pricing before you start rather than after.", "How adding a model is priced", "Model count is not a billed dimension. Route as many as you like.", "Konnect Plus includes five unique proxied LLMs, then $100 per month for each additional model, measured hourly and enforced monthly.", "Multi-provider routing exists precisely so you can add models freely. A per-model fee prices the thing the gateway is for.", "Operating a gateway you already trust", "A new system to deploy, monitor and secure, from a young project with a small community.", "44,059 stars, years of production proxy hardening, and an operational model many platform teams already know inside out.", "If Kong is already in your path, the integration cost of anything else is real and the operational familiarity is worth a lot. This is the strongest argument for staying.", "Scope past the request", "The same control plane runs stateful agents, isolated Docker, isolated runtime and Kubernetes sandboxes, vector memory, workflows and evaluations, and traces all of it together.", "Kong governs traffic. It secures agent-to-agent communication, governs MCP access and inspects messages in flight. Running the agents and executing their code happens elsewhere.", "Neither is wrong. It decides whether you are buying one system or two, and whether a trace stops at the request boundary or follows the work.", "One artifact, one licence, no announced repackaging.", "Kong states that Gateway 3.18 makes AI plugins opt-in rather than bundled, and that AI Gateway 2.0 moves to its own runtime, admin API and release cadence.", "Kong is being explicit and early about this, which is the right way to handle it. It still means planning against a moving target for the next few releases.", "Which capabilities need a paid licence when I self-host?", "None. The repository is Apache-2.0 and self-hosting does not require a licence key.", "Seventeen AI plugins, including semantic caching, advanced rate limiting, PII sanitisation and every guardrail.", "What does routing a sixth model cost?", "Nothing. Model count is not billed.", "$100 per month on Konnect Plus, which includes five unique proxied LLMs.", "Can it run the agent, not just route its calls?", "Yes. Stateful sessions, tools, approvals, child agents and isolated sandboxes.", "No. Kong governs and inspects agent traffic; the agents run elsewhere.", "Can it front my non-AI APIs too?", "No. Everstack is AI infrastructure, not a general-purpose API gateway.", "Yes, and this is Kong's home ground with years of production hardening behind it.", "Is Kong AI Gateway open source?", "The core Kong Gateway is Apache-2.0, confirmed against the LICENSE file in the Kong/kong repository. The AI capability set is split. Six plugins are free: ai-proxy, ai-prompt-guard, ai-request-transformer, ai-response-transformer, ai-prompt-template and ai-prompt-decorator. Seventeen more require an AI Gateway Enterprise licence, and each of those plugin pages carries an explicit badge saying so.", "Which Kong AI plugins need an enterprise licence?", "As of August 2026: ai-proxy-advanced, ai-semantic-cache, ai-semantic-prompt-guard, ai-semantic-response-guard, ai-rate-limiting-advanced, ai-sanitizer, ai-rag-injector, ai-prompt-compressor, ai-mcp-proxy, ai-mcp-oauth2, ai-llm-as-judge, ai-lakera-guard, ai-aws-guardrails, ai-azure-content-safety, ai-gcp-model-armor, ai-custom-guardrail and ai-a2a-proxy. Kong's pricing page independently confirms a subset of these as enterprise add-ons.", "Does the enterprise licence mean I have to use Kong Konnect?", "No. Kong's own FAQ states that AI plugins are supported in all deployment modes, including Konnect, self-hosted traditional, hybrid, DB-less, and Kubernetes via the Ingress Controller. Enterprise here means licence-gated rather than cloud-only, and a self-hosted Kong Gateway Enterprise licence also unlocks them.", "How much does Kong AI Gateway cost?", "Konnect has a 30 day free trial, then Plus with metered pricing and Enterprise with custom pricing. On Plus, five unique proxied LLMs are included and each additional model is $100 per month. 1M API requests per month are included, then $200 per month per additional 1M up to a 10M cap. Control planes are priced separately: Serverless $25, Hybrid $200, Dedicated Cloud $500 per month plus $0.15 per GB. Fully self-hosted Kong Gateway Enterprise is custom pricing. All figures observed on 30 August 2026, and the pricing page currently warns of an upcoming increase.", "Does Kong run agents or execute code?", "No, and Kong does not claim to. It consistently describes itself in governance terms: securing agent-to-agent communication, governing MCP server access, and inspecting or blocking messages in flight. Agent execution and code sandboxing are outside its scope by design, which is a scope difference rather than a shortcoming.", "Is Kong's AI plugin packaging changing?", "Yes, by Kong's own account. Their July 2026 announcement states that Kong Gateway 3.18 is when AI plugins in the API Gateway codebase become opt-in rather than bundled, and that AI Gateway 2.0 runs on its own dedicated runtime with its own release cadence and admin API. AI Gateway 2.0 was in private beta at the time of that post; we could not confirm from a Kong source whether it has since reached general availability.", "Kong AI Gateway overview", "Kong plugin catalogue", "ai-semantic-cache (enterprise)", "ai-proxy chat route example", "Kong pricing", "Kong/kong licence (Apache-2.0)", "Kong AI Gateway 2.0 announcement", "Kong Agent Gateway announcement", "Everstack licence (Apache-2.0)", "Kong AI Gateway", "Everstack vs Kong AI Gateway", "Both put a governed endpoint in front of your model providers. The difference is where the licence line falls: Kong gates semantic caching, advanced rate limiting and every guardrail behind an enterprise key, and charges per proxied model. Everstack ships those under Apache-2.0.", "Kong AI Gateway is a connectivity and governance layer for AI-native applications built on top of Kong Gateway, the Apache-2.0 API gateway with 44,059 GitHub stars. Its AI capabilities arrive as plugins: six are free and ship with the OSS build, while seventeen require an AI Gateway Enterprise licence. It runs in all deployment modes, including self-hosted, hybrid, DB-less and Kubernetes." ] }, { "sourcePath": "routes/comparison.langfuse.tsx", "text": [ "Everstack vs Langfuse | Self-Hosted LLM Observability", "Compare Everstack and Langfuse on licence terms, self-hosted feature gating, evaluations, gateway routing and agent runtime, with working code for both.", "Traces exist without instrumenting your code, because requests already pass through the gateway", "One Apache-2.0 licence covers the repository, with no separately licensed enterprise directory", "Routing, sandboxes, guardrails and evaluations sit in the same control plane as the traces", "Far larger community and integration surface: 33,900+ GitHub stars as of August 2026.", "Core tracing, evaluations, datasets, prompt management and playground are MIT licensed and free to self-host with no limits.", "Backed by ClickHouse, which acquired Langfuse in January 2026 and has committed to keeping it open source.", "Mature prompt management and a well documented OpenTelemetry ingestion path.", "Not a gateway. Langfuse's own docs state that your requests never pass through Langfuse on the way to a provider, so it cannot route, fall back or enforce anything at request time.", "Nine enterprise features are gated behind a licence key when self-hosting, including audit logs, data retention policies, server-side data masking and SCIM.", "No code sandboxes or agent execution runtime: Langfuse observes agents that run somewhere else.", "Instrumentation is a code change in every service you want traced, not a base URL swap.", "Zero-instrumentation traces via the gateway", "Single permissive licence, no ee/ carve-out", "Isolated Docker, isolated runtime and Kubernetes sandboxes", "Guardrails enforced in the request path", "Licence", "Apache-2.0. One licence file covers the repository, including the enterprise modules.", "Mixed. The core is MIT (“MIT Expat”), but everything under ee/, web/src/ee/ and worker/src/ee/ is under the separate Langfuse Enterprise Licence, which forbids redistribution or resale without a paid key.", "Free self-hosting", "Yes. The full platform, no licence key required to run it.", "Yes for the core. Langfuse states that all core features are available in the OSS build without limits.", "Gated behind a licence key when self-hosting", "Commercial support, SLAs and directory lifecycle are sold separately; the code in the repository is Apache-2.0.", "Exactly nine: project-level RBAC, protected prompt labels, data retention policies, audit logs, server-side data masking, UI customisation, organisation creators, Org Management API and SCIM, and the Instance Management API. Note what is NOT gated: enterprise SSO, SSO enforcement, organisation-level RBAC, LLM-as-judge evaluators, annotation queues and the playground all run on the free build, with no seat or retention caps.", "Multi-provider gateway with fallback", "Yes. OpenAI-compatible endpoint with multi-provider routing and fallback.", "No. Langfuse publishes an explicit answer: “your requests never pass through Langfuse on the way to a provider”.", "How traces get created", "Route through the gateway and the trace already exists. SDK spans are available when you want deeper detail.", "Client-side instrumentation. You change an import, wrap calls in observations, or ship OpenTelemetry spans yourself.", "Isolated code execution", "Yes. Docker, isolated runtime and Kubernetes sandbox backends.", "No. Langfuse does not execute your code.", "Cloud pricing", "Starter $0, Build $20/month, Scale $100/month, Enterprise custom (August 2026).", "Hobby free with 50k units/month and 30 days data access, Core $29/month, Pro $199/month, Enterprise $2,499/month (August 2026). Discount programmes exist for startups, research, non-profits and open-source projects.", "Ownership", "Everstack Labs, independent.", "ClickHouse, Inc. ClickHouse acquired Langfuse in January 2026 and stated there are no planned licensing changes.", "Community size", "Small. Everstack is a young project and Langfuse comfortably wins this one.", "33,900+ GitHub stars as of 30 August 2026.", "Prices and star counts checked on 30 August 2026 against each vendor's own pricing page, licence file and repository. Pricing changes; verify before you buy.", "Observability", "Distributed tracing for LLM calls", "OpenTelemetry ingestion", "Traces without touching application code", "Via the gateway", "Sessions and multi-turn grouping", "Cost and token attribution", "Audit logs when self-hosted", "Planned", "Licence key required", "Data retention policies when self-hosted", "Evaluations", "Datasets and experiment runs", "LLM-as-judge scoring", "Human annotation queues", "Prompt management and playground", "Gateway", "OpenAI-compatible endpoint", "Multi-provider routing", "Automatic fallback between providers", "Request-time guardrails and policy", "Runtime", "Isolated code sandboxes", "Stateful agent runtime and workflows", "Deployment", "Self-host the whole product for free", "Core only", "Single permissive licence for the repository", "Apache-2.0", "MIT core plus ee/", "Everstack traces the call because the call goes through it. Langfuse traces the call because you changed the import. Both work; the difference is where the change lands and how many services you have to touch.", "Both products expose an SDK for spans you create yourself. If you already emit OpenTelemetry, both accept OTLP and neither requires their own SDK.", "Langfuse and Everstack both speak OpenTelemetry, so the telemetry path is the easy part. The work is in the Langfuse-specific SDK surface: decorators, prompt management and the public API. Plan a period of dual-writing rather than a cutover.", "Point your OTLP exporter at Everstack", "If you already ship OpenTelemetry spans to Langfuse, change the OTLP endpoint and the auth header. Spans arrive with the same semantic conventions and no code change beyond configuration.", "Move traffic to the gateway and delete instrumentation", "Change the OpenAI base URL to your Everstack gateway. Every request through it is traced with cost and token attribution, which removes the per-service instrumentation you were maintaining for Langfuse.", "Re-create datasets and scorers", "Export Langfuse datasets through their public API and import them as Everstack datasets. Scorers need to be re-declared: the concepts map closely but the definitions are not wire compatible.", "Dual-write until you trust the new traces", "Keep the Langfuse exporter running alongside Everstack for a release or two. Compare cost totals and span counts before you turn Langfuse off, and keep Langfuse readable for as long as you need the history.", "Langfuse is a good product and it is the right answer for a lot of teams. Pick Langfuse over Everstack when any of these is true.", "Getting a trace in the first place", "Requests pass through the gateway, so traces, cost and token counts exist as a side effect of routing. No import changes, no decorators, no per-service rollout.", "Tracing is client side. You change an import, add observations, or ship OpenTelemetry spans yourself, in every service you want covered.", "Instrumentation friction is the most common reason an observability trial stalls. Routing through a gateway removes it entirely for the LLM call path.", "Doing anything at request time", "Guardrails, quotas, provider fallback and caching run in the request path because the request goes through Everstack.", "Structurally impossible. Langfuse states plainly that requests never pass through it, so it can analyse behaviour but never change it.", "If you need to block a prompt, cap a spend or fail over to a second provider, an observability platform cannot help you. That is a gateway job.", "Community, integrations and mindshare", "A young project with a small community and a much shorter list of framework integrations.", "33,900+ GitHub stars, a large integration catalogue, and now ClickHouse behind it. The default answer when someone asks for open source LLM observability.", "If you want the option that most engineers already recognise and that has the most worked examples on the internet, that is Langfuse today, not Everstack.", "Licence terms for self-hosting", "Apache-2.0 across the repository. There is no separately licensed directory you have to reason about.", "MIT core, plus an ee/ directory under a bespoke Enterprise Licence. Audit logs, retention policies, data masking, SCIM and project-level RBAC need a paid key.", "The features Langfuse gates are exactly the ones a regulated buyer asks for first, which turns a free self-host into a paid one at the compliance review.", "Depth of the observability product itself", "Traces, sessions, evaluations, datasets, annotation queues, custom columns and faceted trace search.", "The same shape of product, longer in the market, with more polish in prompt management and a broader set of native framework integrations.", "On pure observability and prompt features these are close. Judge them on your own workload rather than on either vendor's feature table, including this one.", "What happens after the trace", "The same platform runs the agent, executes tool calls in isolated Docker, isolated runtime or Kubernetes sandboxes, and gates releases on evaluations.", "Langfuse observes and evaluates. Execution, isolation and routing are somebody else's product.", "Teams running agentic workloads otherwise buy a proxy, a sandbox vendor and a tracing vendor, then maintain the seams between them.", "Can it route a request to a different provider on failure?", "Yes. Multi-provider routing and fallback are in the gateway that produces the traces.", "No. Langfuse is not in the request path by design and documents this explicitly.", "What do I lose by self-hosting the free build?", "The repository is Apache-2.0 and self-hosting the platform does not require a licence key.", "Nine enterprise features, including audit logs, retention policies, data masking, SCIM and project-level RBAC.", "How much code do I change to get first traces?", "One base URL, if you route through the gateway. SDK spans are optional detail on top.", "An import swap at minimum, and manual observations for anything that is not a direct provider call.", "Who is behind the project, and how stable is that?", "Everstack Labs, independent and early. Smaller team, shorter track record.", "ClickHouse, Inc. since January 2026, with a public commitment to no licensing changes.", "Can it run untrusted agent code?", "Yes. Isolated Docker containers, isolated runtimes or Kubernetes pods, per sandbox.", "No. Langfuse does not execute code.", "Is Langfuse open source?", "Mostly. The core is MIT licensed. Everything under the ee/, web/src/ee/ and worker/src/ee/ directories is under the separate Langfuse Enterprise Licence, which allows development and testing but forbids redistribution or resale without a paid licence key. Langfuse documents both facts clearly.", "Which Langfuse features need a licence key when self-hosting?", "Langfuse lists exactly nine: project-level RBAC roles, protected prompt labels, data retention policies, audit logs, server-side data masking, UI customisation, organisation creators, the Org Management API and SCIM, and the Instance Management API. Everything else runs without a key, and the free build is genuinely not a stripped tier: Langfuse states that all core features are available in the OSS build without limits, and its own comparison table marks enterprise SSO, SSO enforcement, organisation-level RBAC, LLM-as-judge evaluators, human annotation queues, datasets, experiments, the prompt playground and custom dashboards as available on Open Source. Every entitlement limit is unlimited when self-hosting: no seat cap, no retention cap, no evaluator cap.", "Did ClickHouse buy Langfuse, and does that change the licence?", "Yes, announced 16 January 2026. Both ClickHouse and Langfuse published statements saying Langfuse stays open source and self-hostable with no planned licensing changes, and that Langfuse Cloud continues operating on the same endpoints. As of 30 August 2026 the licence files are unchanged apart from the copyright holder now reading ClickHouse, Inc.", "Can Langfuse route between model providers like a gateway?", "No, and Langfuse says so directly: your requests never pass through Langfuse on the way to a provider. That is a deliberate design choice with a real benefit, since Langfuse cannot take your inference path down. It also means Langfuse cannot fail over, cache, enforce quotas or block a prompt.", "Do I have to choose? Can I run both?", "You can run both. Everstack emits OpenTelemetry, so you can route through the Everstack gateway for reliability and keep exporting spans to Langfuse if that is where your team already works. A number of teams will sensibly land there rather than migrating.", "Should I trust this page?", "Only as a starting point. It is written by Everstack, so read the Langfuse sources linked below and check the claims yourself. Everything here was verified against Langfuse's own documentation, pricing page and licence files on 30 August 2026, and the page says plainly where Langfuse is the better choice.", "Langfuse licence (MIT plus ee/)", "Langfuse Enterprise Licence", "Langfuse self-host licence key features", "Langfuse pricing", "Langfuse self-host pricing", "Langfuse: is it an LLM gateway?", "Langfuse quickstart", "ClickHouse acquires Langfuse", "Everstack licence (Apache-2.0)", "Langfuse", "Everstack vs Langfuse", "Both trace and evaluate LLM applications, and both are self-hostable. The difference is that Langfuse watches the request while Everstack is in it, and that Langfuse gates nine enterprise features behind a licence key that Everstack ships under Apache-2.0.", "Langfuse is an open source LLM engineering platform for tracing, evaluating, debugging and managing prompts in AI applications. The core is MIT licensed and free to self-host, with an ee/ directory under a separate commercial licence. ClickHouse, Inc. acquired Langfuse in January 2026 and has said it stays open source with no planned licensing changes." ] }, { "sourcePath": "routes/comparison.litellm.tsx", "text": [ "Everstack vs LiteLLM | Self-Hosted AI Gateway Comparison", "Compare Everstack and LiteLLM on licence terms, which governance features sit in the enterprise directory, runtime scope, and what a migration actually costs.", "Virtual keys, budgets, per-tenant limits and SSO ship under one Apache-2.0 licence", "The same control plane runs agents, sandboxes and evaluations, not just the proxy", "No separately licensed directory to reason about at compliance review", "The default answer in this category, and deservedly so: 57,637 GitHub stars as of August 2026, with commits landing daily.", "The widest provider coverage anywhere. If a model API exists, LiteLLM almost certainly speaks it, and the community adds new ones fast.", "A Rust core with a Python SDK, so it is both fast and trivially embeddable in Python codebases that already exist.", "Enormous ecosystem gravity: worked examples, blog posts, Stack Overflow answers and framework integrations that no younger project can match.", "The MIT core genuinely is production capable on its own. Plenty of teams run it for years without ever talking to sales.", "The licence is split. LiteLLM's root LICENSE states that everything under the enterprise/ directory is governed by a separate licence, and that directory exists in the repository.", "The enterprise tier is where governance lives: virtual keys, budgets, RPM and TPM limits, spend tracking by key, user, team and org, SSO with SCIM, and OIDC or JWT auth.", "Enterprise pricing is not published. The site offers a 30 day trial key and a conversation with sales.", "It is a gateway. Agent sessions, isolated code execution, evaluations and human review happen in systems you assemble separately.", "One Apache-2.0 licence, no enterprise directory", "Governance included rather than gated", "Agent runtime and sandboxes in the same plane", "Published pricing you can read without a call", "Licence", "Apache-2.0 across the repository, including the enterprise modules.", "Split. The root LICENSE states that content under enterprise/ is licensed by enterprise/LICENSE and everything else is MIT. GitHub reports the repository licence as NOASSERTION for this reason.", "Virtual keys, budgets and per-tenant limits", "Included.", "Listed on LiteLLM's enterprise page under Governance, alongside spend tracking by key, user, team and org.", "SSO and SCIM", "Listed as an enterprise capability, with OIDC and JWT auth.", "Published pricing", "Starter $0, Build $20/month, Scale $100/month, Enterprise custom (August 2026).", "Not published. The enterprise page offers custom pricing, a 30 day trial key, and a sales conversation (August 2026).", "Provider coverage", "Broad and growing, but smaller than LiteLLM's. This is not a category we claim to lead.", "The widest in the category, and its own description cites 100+ LLM APIs.", "Agent runtime and isolated execution", "Stateful sessions, tools, approvals, child agents, plus Docker, isolated runtime and Kubernetes sandboxes.", "Out of scope. LiteLLM is a gateway and proxy.", "Evaluations and human review", "Datasets, scorers, LLM judges and annotation queues included.", "Out of scope.", "Community size", "Small. LiteLLM wins this comfortably and it is a real advantage.", "57,637 GitHub stars as of 31 August 2026, pushed the same day.", "Licence read from the root LICENSE file in BerriAI/litellm, stars and activity from the GitHub API, and enterprise capabilities from litellm.ai/enterprise, all on 31 August 2026. LiteLLM does not publish enterprise prices, so none are quoted here.", "Gateway", "OpenAI-compatible endpoint", "Multi-provider routing", "Fallback and retries", "Semantic caching", "Governance", "Virtual keys and budgets", "Enterprise", "Per-key and per-team spend tracking", "RPM and TPM limits", "SSO on Enterprise, no SCIM", "Runtime", "Stateful agent sessions", "Isolated code execution", "Vector memory", "Workflows with approvals", "Quality", "Datasets and evaluation runs", "Human annotation queues", "Observability", "OpenTelemetry-native traces", "Via callbacks and integrations", "Ecosystem", "Provider coverage breadth", "Community size and worked examples", "Both terminate an OpenAI-compatible request, so application code is a base URL change either way. This is the part that makes migration cheap in both directions.", "LiteLLM and Everstack both terminate an OpenAI-compatible request, so applications move with a base URL and key change. The real work is re-expressing the proxy config, and deciding what to do with anything built against LiteLLM's Python SDK rather than its proxy.", "Move the endpoint", "Change the base URL and API key. Applications calling through the OpenAI SDK need no other edit.", "Re-express model and provider config", "LiteLLM's model_list entries map to Everstack provider routes. Router settings for fallback and retries map to routing policy.", "Recreate keys, budgets and limits", "If you were on LiteLLM enterprise, virtual keys, budgets and RPM or TPM limits map to Everstack API keys and per-tenant limits. If you were on the MIT build, this is where you gain capability rather than port it.", "Run both and compare before cutting over", "Mirror traffic and compare latency, cost totals and error rates for a release or two.", "LiteLLM is the most widely deployed self-hosted AI gateway there is, and for many teams it is simply the right call. Pick LiteLLM over Everstack when any of these is true.", "Where the licence line falls", "Apache-2.0 across the repository. Virtual keys, budgets, per-tenant limits and SSO are in the build.", "MIT for the core, with a separate licence over the enterprise/ directory. Governance features are listed on the enterprise page.", "Both are honest about it. The question is whether the features you need sit on your side of the line, and governance is usually the first thing a growing team needs.", "Broad, but not the widest, and we do not pretend otherwise.", "The widest in the category. Its own description cites 100+ LLM APIs, and new providers land quickly.", "If your model list includes something niche, check it before anything else. This can decide the whole evaluation on its own.", "Scope past the request", "Agent sessions, isolated sandboxes, memory, workflows and evaluations run on the same control plane and share a trace.", "A gateway. Everything past the request is a separate system you choose, deploy and operate.", "Neither is wrong. It decides whether you are operating one system or four, and whether a trace stops at the request boundary.", "Ecosystem and mindshare", "Young, small community, fewer worked examples.", "57,637 stars and daily commits. When someone asks for a self-hosted LLM proxy, this is the answer they get.", "Ecosystem gravity is real and it compounds. This is LiteLLM's most durable advantage over any newer project, including this one.", "Do virtual keys and budgets need a paid licence?", "No. They are in the Apache-2.0 build.", "They appear under Governance on LiteLLM's enterprise page.", "Can I read the price before talking to sales?", "Yes. Starter $0, Build $20, Scale $100 per month.", "Not for enterprise. The page offers custom pricing and a trial key.", "Does it run the agent, or only route its calls?", "It runs it, including isolated code execution.", "It routes the calls. The agent runs elsewhere.", "Which supports more providers?", "Fewer. This is LiteLLM's category to win.", "More, by a wide margin.", "Is LiteLLM open source?", "Mostly. The root LICENSE file states that all content under the enterprise/ directory is licensed under enterprise/LICENSE, and that everything outside it is available under the MIT licence. That directory exists in the repository, which is why GitHub reports the repository licence as NOASSERTION rather than MIT. The MIT core is genuinely production capable.", "Which LiteLLM features are enterprise?", "LiteLLM's enterprise page groups them as governance (virtual keys, budgets, RPM and TPM limits, and spend by key, user, team and org), security (SSO with SCIM, and OIDC or JWT auth), deployment (self-hosted in your infrastructure, and air-gapped deployment), and support (24/7 with response-time SLAs). Checked 31 August 2026.", "How much does LiteLLM enterprise cost?", "LiteLLM does not publish enterprise pricing. The page offers custom pricing, procurement, a 30 day trial key, and a conversation with sales. We are not going to guess a number.", "Is migrating from LiteLLM to Everstack hard?", "The endpoint is not. Both terminate an OpenAI-compatible request, so applications move with a base URL and key change. The work is re-expressing proxy configuration, and rewriting anything that imports the litellm Python SDK directly rather than calling the proxy over HTTP.", "Does Everstack support as many providers as LiteLLM?", "No. LiteLLM has the widest provider coverage in the category and that is a genuine advantage. Check your required model list against both before deciding, because this can settle the evaluation on its own.", "LiteLLM licence", "LiteLLM enterprise", "BerriAI/litellm repository", "Everstack licence (Apache-2.0)", "LiteLLM", "Everstack vs LiteLLM", "LiteLLM is the most widely deployed self-hosted AI gateway there is, and its MIT core is genuinely production capable. The two differences worth your time are where the licence line falls, since governance sits in the enterprise directory, and how much of the problem each one solves past the request.", "LiteLLM is an open source AI gateway with a Rust core and a Python SDK, calling 100+ LLM APIs in OpenAI or native format with cost tracking, guardrails, load balancing and logging. It has 57,637 GitHub stars as of August 2026. Its root LICENSE places everything outside the enterprise/ directory under MIT, and everything inside it under a separate licence." ] }, { "sourcePath": "routes/comparison.mastra.tsx", "text": [ "Everstack vs Mastra | TypeScript Agent Framework vs Self-Hosted Platform", "Compare Everstack and Mastra on what each one is: a TypeScript framework you write agents in, or a self-hosted platform in front of agents written in any language. Licence, pricing, observability, sandboxes, and how the two fit together.", "Works with agents written in any language or framework: traffic goes through an OpenAI-compatible gateway and traces arrive over OpenTelemetry", "Apache-2.0 across the repository, with no enterprise directory under a separate licence", "Runs isolated sandboxes itself on Docker, isolated runtime or Kubernetes rather than through a third-party sandbox vendor", "The strongest TypeScript agent framework by adoption: 28,187 GitHub stars and 1,187,203 weekly downloads of @mastra/core in the week to 18 September 2026.", "Batteries included for building an agent from scratch: agents, workflows with branching and human approval, memory, RAG, scorers, datasets and a visual Studio, in one package.", "Built on the Vercel AI SDK, so it reaches 40+ providers and integrates naturally with Next.js, SvelteKit, Astro, Express and Hono applications.", "First-class MCP client and server support, and Agent2Agent protocol support in both directions.", "Well funded and well referenced: $35M raised, with Brex, Indeed, Marsh McLennan, MongoDB, Workday and Salesforce named as customers in the Series A announcement.", "TypeScript only. There is no Python SDK, and an agent built in LangGraph, the Google ADK, the Claude Agent SDK or plain Python is outside its model.", "The licence is split. Code under any ee/ directory is governed by the Mastra Enterprise Edition licence, effective 24 August 2026, which permits development and testing but requires a paid agreement for production use.", "Observability is documented for Mastra's own agents, workflows, tools and model calls. We could not find documentation for ingesting traces from applications that are not built on Mastra.", "Sandboxes are provided through Daytona, E2B and Blaxel rather than run by Mastra, so isolated execution is a second vendor relationship.", "Any framework, any language, one trace", "One Apache-2.0 licence, no ee/ directory", "Sandboxes run by the platform itself", "A Mastra agent can route through Everstack today", "What it is", "A self-hosted platform: an OpenAI-compatible gateway, an agent runtime, isolated sandboxes, evaluations and OpenTelemetry observability, in front of agents written in anything.", "A TypeScript framework for writing agents, with a hosted platform (Studio, Server, observability) built around agents written in it.", "Licence", "Apache-2.0 across the repository.", "Apache-2.0 for the core since July 2025, previously Elastic License 2.0. Code under ee/ directories is under the Mastra Enterprise Edition licence v1.0, effective 24 August 2026. GitHub reports the repository licence as NOASSERTION for this reason.", "Languages", "Any. Applications call an OpenAI-compatible endpoint and emit OpenTelemetry; SDKs exist for Node and Python.", "TypeScript only.", "Observability for agents not built on it", "Yes. Traces arrive over OTLP from any instrumented application, and gateway traffic is traced without instrumentation.", "Documented for Mastra agents, workflows, tools and model calls, with pluggable storage (ClickHouse, PostgreSQL, MongoDB and others). Ingestion from non-Mastra applications is not documented.", "Isolated code execution", "Docker, isolated runtime and Kubernetes sandboxes run by the platform.", "Remote Sandboxes through Daytona, E2B or Blaxel, each with its own filesystem, network and process space.", "Published pricing", "Published on the pricing page; self-hosting is free under Apache-2.0.", "Starter free with 100K observability events a month, Teams $250 a month with 1M events, Enterprise custom. Self-hosted open source free; self-hosted Enterprise a custom flat annual fee (19 September 2026).", "Protocols", "MCP server endpoint on the gateway. No A2A today.", "MCP client and server, and Agent2Agent v0.3 and v1.0 with agent-card discovery.", "Community size", "Small. Mastra wins this by a wide margin.", "28,187 GitHub stars and 1,187,203 weekly npm downloads of @mastra/core (19 September 2026).", "Licence read from the root LICENSE and ee/LICENSE files in mastra-ai/mastra and mastra.ai/docs/community/licensing; pricing from mastra.ai/pricing; stars from the GitHub API and downloads from the npm API, all on 19 September 2026. Where Mastra's documentation does not describe a capability we say so rather than assume it is absent.", "Building agents", "Agent definition SDK", "Agents as code, plus any external framework", "TypeScript SDK", "Workflows with branching and approvals", "Memory and RAG", "Python or Go agents", "Gateway", "OpenAI-compatible endpoint any app can call", "Mastra Gateway, priced at market rate plus 5.5%", "Multi-provider routing", "Through the Vercel AI SDK, 40+ providers", "Virtual keys, budgets and per-tenant limits", "Observability", "Traces, metrics and logs for its own agents", "OTLP ingestion from agents built elsewhere", "Not documented", "Datasets, scorers and evaluations", "Execution", "Isolated sandboxes", "Docker, isolated runtime, Kubernetes, run by the platform", "Daytona, E2B or Blaxel", "MCP", "Server endpoint", "Client and server", "Agent2Agent", "Deployment", "Self-hosted single binary", "Node.js server built with mastra build; Studio self-hostable", "Managed cloud", "One licence across the repository", "Ecosystem", "Community size and worked examples", "Mastra is the code you write the agent in. Everstack is the endpoint the agent's model calls go through, whatever the agent is written in. The two are different layers, which is why they compose.", "This is not usually a migration. Mastra is the framework an agent is written in; Everstack is the gateway and observability in front of it. Mastra resolves models through the Vercel AI SDK, and the AI SDK's OpenAI provider accepts a custom base URL, so a Mastra agent can send its model traffic through Everstack and appear in Everstack traces without leaving Mastra. Moving an agent off Mastra entirely means rewriting it, in either direction.", "Route the model calls", "Construct the AI SDK OpenAI provider with Everstack's OpenAI-compatible base URL and an Everstack API key, and give that provider's model to the Mastra agent.", "Send the traces", "Mastra's observability is built on OpenTelemetry and can export to OpenTelemetry-compatible destinations. Point that export at Everstack's OTLP endpoint to see the agent's spans next to its gateway traffic.", "Decide what runs where", "Keep memory, workflows and Studio in Mastra if the team is happy there. Use Everstack for the parts Mastra hands to someone else: sandboxes it runs itself, per-tenant keys and budgets, and agents written in other languages.", "Only then consider replacing the framework", "If the goal is one runtime for agents in several languages, port the agent definitions to Everstack's agent runtime. Budget it as a rewrite, because it is one.", "Mastra is the best-adopted TypeScript agent framework and for a lot of teams it is the right starting point. Pick Mastra over Everstack when any of these is true.", "Framework or platform", "A platform in front of agents: gateway, runtime, sandboxes, evaluations and traces, with the agent written in whatever the team already uses.", "A framework the agent is written in, with a platform built around agents written that way.", "This is the whole comparison. If every agent you will ever run is TypeScript, Mastra's shape is simpler. If some are Python, Go, or built on another framework, a platform that sits in front of all of them is the only one that gives you one trace.", "Where the licence line falls", "Apache-2.0 across the repository, including enterprise features.", "Apache-2.0 core with ee/ directories under a separate Enterprise Edition licence that permits development and testing but not production use without a paid agreement.", "Both are honest and both are open source at the core. The question is whether the feature you need is under ee/, and that list is Mastra's to change.", "Observability for what you already run", "OTLP ingestion from any instrumented application, and gateway traffic traced without instrumentation.", "Deep traces for Mastra agents, workflows and tools, with pluggable storage and export to OpenTelemetry destinations.", "Mastra's view of a Mastra agent is richer than a gateway can be. Everstack's view covers agents Mastra never sees. Which matters depends on how many of your agents are Mastra agents.", "Isolated execution", "Docker, isolated runtime and Kubernetes sandboxes run by the platform, billed by the platform.", "Remote Sandboxes through Daytona, E2B or Blaxel.", "Both give agents an isolated filesystem, network and process space. With Mastra it is a second vendor with its own pricing and data path; with Everstack it is the same control plane.", "Ecosystem and mindshare", "Young, small community, fewer worked examples.", "28,187 stars, 1.19M weekly downloads, $35M raised, and enterprise references. When a TypeScript team asks which agent framework to use, this is the answer they get.", "Ecosystem gravity compounds, and Mastra has a lot of it. It is the most durable advantage in this comparison and it is not Everstack's.", "Can it observe an agent written in Python?", "Yes, over OTLP or by routing its model calls through the gateway.", "Not that the documentation describes. Observability is for Mastra agents.", "Is production use of every feature covered by the open source licence?", "Yes. Apache-2.0 across the repository.", "Not for code under ee/ directories, which needs a paid agreement in production.", "Who runs the sandbox?", "The platform, on Docker, isolated runtime or Kubernetes.", "Daytona, E2B or Blaxel, through Mastra's sandbox interface.", "Which has the bigger community?", "Not this one.", "Mastra, by a wide margin.", "Is Mastra open source?", "The core is Apache-2.0, relicensed from the Elastic License 2.0 in July 2025. Code under any ee/ directory, such as the enterprise auth and agent-builder modules, is under the Mastra Enterprise Edition licence v1.0, effective 24 August 2026, which permits development and testing but requires a paid written agreement for production use. GitHub reports the repository licence as NOASSERTION because of the split.", "Does Mastra work with Python?", "No. Mastra is a TypeScript framework and we found no Python SDK. Its Memory Gateway is an OpenAI-compatible proxy that any HTTP client can call, but the agent framework itself is TypeScript only.", "Can I use Mastra and Everstack together?", "Yes, and for a TypeScript team already on Mastra that is usually the better question. Mastra resolves models through the Vercel AI SDK, whose OpenAI provider accepts a custom base URL, so a Mastra agent can send its model calls through Everstack's OpenAI-compatible gateway and appear in Everstack traces. Mastra's OpenTelemetry export can point at Everstack's OTLP endpoint as well.", "How much does Mastra cost?", "The open source framework is free to self-host. Mastra Cloud lists a free Starter tier with 100K observability events a month, a Teams tier at $250 a month with 1M events and SSO, and a custom Enterprise tier. Self-hosted Enterprise is a custom flat annual fee. Additional usage such as gateway tokens at market rate plus 5.5% and persistent servers at $100 a project is listed separately. Checked 19 September 2026.", "Does Mastra run sandboxes?", "Through providers. Mastra's Remote Sandboxes give an agent an isolated filesystem, network and process space, backed by Daytona, E2B or Blaxel. Everstack runs its own sandboxes on Docker, isolated runtime and Kubernetes.", "Who is behind Mastra?", "The team that built the Gatsby framework, which was sold to Netlify. Mastra went through Y Combinator's W25 batch, raised a $13M seed in October 2025 and a $22M Series A led by Spark Capital in April 2026, for $35M in total.", "Mastra licensing", "Mastra Enterprise Edition licence", "Mastra pricing", "Mastra observability", "Mastra Remote Sandboxes", "Mastra Series A", "mastra-ai/mastra repository", "Everstack licence (Apache-2.0)", "Mastra", "Everstack vs Mastra", "Mastra is the best-adopted TypeScript agent framework and a well-funded one. The comparison that matters is not feature by feature, it is shape: Mastra is the code you write an agent in, and Everstack is the platform that sits in front of agents written in anything. For a Mastra team the honest answer is often both.", "Mastra is a TypeScript framework for building AI agents, with agents, workflows, memory, RAG, scorers and a visual Studio, built on the Vercel AI SDK by the team behind Gatsby. It has 28,187 GitHub stars and 1.19M weekly npm downloads as of 19 September 2026, and $35M in funding. The core is Apache-2.0; code under ee/ directories is under a separate Enterprise Edition licence." ] }, { "sourcePath": "routes/comparison.modal.tsx", "text": [ "Everstack vs Modal | Serverless Compute or Self-Hosted Runtime", "Compare Everstack and Modal on deployment model, GPU access, per-second compute pricing, and whether sandboxed execution comes with a gateway and agent runtime.", "Runs on infrastructure you control, inside your own compliance boundary", "Sandbox execution shares a trace with the model call that produced the code", "Gateway, agent runtime and evaluations included rather than assembled", "Serverless compute done extremely well. Modal's cold start and scaling engineering is genuinely impressive and hard to replicate.", "First-class GPU access with published per-second rates, from Nvidia T4 at $0.000164 per second to B300 at $0.001972. Everstack does not offer managed GPUs at all.", "A Python-native developer experience that many teams find more pleasant than container orchestration.", "Generous free credits: $30 a month on Starter, $100 a month on Team.", "Volumes at $0.09 per GiB per month with 1 TiB free, which is a lot of included storage.", "Genuinely strong network controls on Sandboxes: block_network=True drops all outbound traffic, outbound_cidr_allowlist restricts egress by CIDR, and Modal states that Sandboxes are not authorized to access other resources in your Modal workspace.", "Modal is a cloud platform. Its pricing page describes no self-hosting or on-premises option.", "Team is $250 per month plus compute, so the platform fee arrives before any usage.", "It is compute, not AI infrastructure. Model routing, agent state, memory, evaluations and observability over LLM calls are separate systems.", "Correlating a sandbox execution with the model call that generated the code is a join you build and maintain yourself.", "Self-hosted execution inside your boundary", "One trace across model call and execution", "No platform fee before usage", "Gateway and evaluations included", "Deployment model", "Self-hosted with Docker, isolated runtime or Kubernetes, or Everstack Cloud.", "Cloud only. Modal's pricing page describes no self-hosting or on-premises deployment.", "Platform fee", "Starter $0, Build $20/month, Scale $100/month, Enterprise custom (August 2026).", "Starter $0 plus compute with $30 a month in free credits, Team $250 plus compute with $100 a month in credits, Enterprise custom (August 2026).", "Compute pricing", "Metered sandbox compute by plan.", "Sandboxes and Notebooks bill CPU at $0.00003942 per core per second and memory at $0.00000667 per GiB per second. Standard Modal compute is cheaper at $0.0000131 and $0.00000222, so the sandbox rate is roughly three times it, and the sandbox rate is the one that applies here. A core means a physical core, about 2 vCPU, with a 0.125 core minimum. Volumes $0.09 per GiB per month with 1 TiB free (August 2026).", "Managed GPUs", "Not offered. Everstack does not provide managed GPU compute.", "Yes, with published per-second rates including Nvidia T4 at $0.000164, L4 at $0.000222 and B300 at $0.001972 per second (August 2026).", "Isolation backends", "Docker, isolated runtime and Kubernetes.", "gVisor. Modal states that compute jobs are containerized and virtualized using gVisor, the sandboxing technology developed at Google.", "Sandbox lifetime", "Bounded by the session and the limits you configure.", "Five minutes by default, configurable up to 24 hours. Worth setting deliberately rather than discovering.", "Sandbox network controls", "Per-sandbox egress policy.", "block_network=True drops all outbound traffic, outbound_cidr_allowlist restricts egress by CIDR, and Sandboxes cannot reach other resources in your Modal workspace. A genuinely good set.", "Model gateway", "Included, OpenAI-compatible, multi-provider.", "Out of scope.", "Agent runtime and evaluations", "Same control plane, sharing one trace.", "Operational burden", "Real. You deploy and operate it.", "None, and Modal is very good at hiding it.", "Tiers and per-second rates read from modal.com/pricing on 31 August 2026, and Sandbox isolation, lifetime and network behaviour from Modal's own Sandbox documentation. Modal prices Sandboxes and Notebooks above its standard compute, so the sandbox rate is the one quoted first here. GPU rates are a subset; Modal publishes a fuller table. Verify before you model costs.", "Execution", "Sandboxed code execution", "Managed GPU compute", "Serverless autoscaling", "Via Kubernetes", "Isolation primitive", "isolated runtime", "gVisor", "Deployment", "Self-hosting", "Runs inside your compliance boundary", "Zero operational burden", "Platform", "Multi-provider model gateway", "Stateful agent runtime", "Vector memory", "Evaluations and scoring", "Commercial", "Team is $250/month", "Modal's model is decorated Python functions deployed to their cloud. Everstack's is a sandbox you create and execute inside. Both are pleasant; they are solving adjacent rather than identical problems.", "These are adjacent products rather than substitutes, so a straight migration is often the wrong framing. Modal is general serverless compute with GPUs; Everstack is AI infrastructure where sandboxes are one layer. Many teams should run both.", "Separate GPU work from agent code execution", "If you use Modal for model inference or training on GPUs, keep it. Everstack does not offer managed GPUs and moving that work would be a downgrade.", "Move agent code execution only", "Sandboxed execution of AI-generated code is the part that benefits from sitting next to the gateway and the trace.", "Re-express functions as sandbox executions", "Modal's decorated function model does not map directly. Code that ran as a deployed function becomes code executed inside a sandbox, which is a different shape and needs rewriting.", "Compare cost on your real workload", "Modal's per-second rates are competitive and its scaling is excellent, but price the sandbox line specifically: Sandboxes and Notebooks bill at roughly three times Modal's standard compute rate. Self-hosting is not automatically cheaper once you count the infrastructure and the attention.", "Modal is excellent at what it does and for a lot of workloads it is not really competing with us. Pick Modal over Everstack when any of these is true.", "Where execution happens", "On infrastructure you control, inside your own compliance boundary.", "On Modal's cloud. Their pricing page describes no self-hosting or on-premises option.", "If AI-generated code touches regulated data, where it executes is a compliance question rather than a preference.", "GPU compute", "Not offered.", "First-class, with published per-second rates across a wide GPU range.", "This is not close. If you need GPUs, Modal is the answer and Everstack is not a substitute.", "What surrounds the execution", "The model gateway that produced the code, the agent that orchestrated it and the evaluation that scored it are all on one control plane and in one trace.", "Compute. The AI infrastructure around it is yours to assemble.", "Debugging an agent that wrote bad code means seeing the prompt, the completion and the execution together, which is a join you maintain if they live in separate systems.", "Operational burden and scaling", "Real, and you own the scaling.", "None, with autoscaling and cold start work that is genuinely excellent engineering.", "A significant advantage for Modal that an honest comparison should state rather than skip.", "Can execution run on my own infrastructure?", "Yes, that is the default.", "No self-hosting option is described on the pricing page.", "Do I get managed GPUs?", "No. Everstack does not offer them.", "Yes, with published per-second rates.", "Is there a platform fee before usage?", "Starter is $0.", "Starter is $0, Team is $250 per month plus compute.", "Does it include a model gateway and evaluations?", "Yes, sharing one trace with execution.", "No, those are separate systems.", "Can Modal be self-hosted?", "Their pricing page describes no self-hosting or on-premises option. Modal is a serverless cloud platform. If a data residency constraint is why you are evaluating execution environments, that settles it.", "How much does Modal cost?", "As of August 2026: Starter is $0 plus compute with $30 a month in free credits, Team is $250 plus compute with $100 a month in credits, and Enterprise is custom. Sandboxes and Notebooks bill at $0.00003942 per core per second and $0.00000667 per GiB per second of memory, which is roughly three times Modal's standard compute rate of $0.0000131 and $0.00000222. A core means a physical core, about 2 vCPU, with a 0.125 core minimum. GPUs run from $0.000164 per second for an Nvidia T4 up to $0.001972 for a B300. Volumes are $0.09 per GiB per month with 1 TiB free.", "Does Everstack offer GPUs?", "No. Everstack does not provide managed GPU compute. If your workload needs GPUs, Modal is the right tool and we are not a substitute for it. Many teams run Modal for GPU work and Everstack for the gateway, agent runtime and sandboxed execution of agent-generated code.", "Are Modal and Everstack really competitors?", "Only partially, and it is worth being straight about that. Modal is general serverless compute with excellent GPU support. Everstack is AI infrastructure where sandboxed execution is one layer among gateway, agent runtime, memory and evaluations. They overlap on running untrusted code and diverge everywhere else.", "Modal pricing", "Modal documentation", "Everstack licence (Apache-2.0)", "Modal", "Everstack vs Modal", "These two overlap less than the search results suggest. Modal is general serverless compute with first-class GPUs, and it is very good at that. Everstack is AI infrastructure where sandboxed execution is one layer. If you need GPUs, use Modal. If you need agent code to run inside your own boundary next to the gateway that produced it, that is a different question.", "Modal is a serverless cloud platform for running Python workloads, with first-class GPU support and per-second billing. Starter is $0 plus compute with $30 monthly credits, Team is $250 plus compute, and Enterprise is custom. Its pricing page describes no self-hosting or on-premises deployment option." ] }, { "sourcePath": "routes/comparison.openrouter.tsx", "text": [ "Everstack vs OpenRouter | Hosted Aggregator or Self-Hosted", "Compare Everstack and OpenRouter on deployment model, credit and BYOK fees, provider breadth, and what happens to prompts and responses in transit.", "Prompts and responses never leave infrastructure you control", "Your provider contracts and rates stay yours, with no BYOK fee", "The gateway comes with an agent runtime, sandboxes and evaluations", "Unmatched provider and model breadth behind one key. If you want to try a model today, OpenRouter almost certainly has it.", "Inference is passed through without markup, which is a genuinely fair commercial model and unusual in aggregation.", "Zero operational burden. There is nothing to deploy, patch or scale, and you get automatic failover across providers.", "Excellent for evaluation and experimentation, where trying twelve models this week matters more than where the traffic goes.", "One billing relationship instead of a dozen provider contracts, which is a real procurement saving for small teams.", "Prompts and responses transit OpenRouter's infrastructure. There is no self-hosting option documented.", "Credit purchases carry a fee: 5.5% with a $0.80 minimum via Stripe, or 5% via crypto.", "Bringing your own provider keys is free only up to an allowance: $25,000 of monthly list price on pay-as-you-go, $200,000 on enterprise. Above that, BYOK costs 5% of standard OpenRouter pricing for that model and provider.", "It is an aggregator. Agent execution, sandboxes, memory, evaluations and human review are not part of it.", "Self-hosted, no third party in the request path", "No fee on your own provider keys", "Runtime, sandboxes and evals included", "Your data stays inside your boundary", "Deployment model", "Self-hosted on your infrastructure with Docker or Kubernetes, or Everstack Cloud.", "Hosted. OpenRouter's documentation does not describe a self-hosting or open source option.", "Where prompts and responses travel", "Wherever you deploy it.", "Through OpenRouter.", "Inference markup", "None. You hold the provider contracts and pay them directly.", "None on inference itself. OpenRouter states it passes through underlying provider pricing without markup, which is a fair model.", "Credit purchase fee", "Not applicable.", "5.5% with a $0.80 minimum via Stripe, or 5% via crypto (August 2026).", "Bring your own keys", "Always free. Your keys, your contracts, no fee.", "Free up to $25,000 of monthly list price on pay-as-you-go and $200,000 on enterprise. Above the allowance, 5% of standard OpenRouter pricing for that model and provider, deducted from your credits (August 2026).", "Provider and model breadth", "Broad, but narrower than OpenRouter's.", "The widest single-key catalogue available. This is their category and they win it.", "Agent runtime, sandboxes and evaluations", "Same control plane, sharing one trace.", "Out of scope.", "Operational burden", "Real. You deploy and operate it.", "None. This is a genuine advantage.", "Fees and BYOK allowances read from OpenRouter's own FAQ on 31 August 2026. Terms change; verify before you model costs.", "Gateway", "One key across many providers", "Automatic provider failover", "Model catalogue breadth", "Semantic caching", "Per-tenant rate limits and quotas", "Deployment", "Self-hosting", "Prompts stay inside your boundary", "Zero operational burden", "Commercial", "Above allowance, 5%", "Single billing relationship", "Runtime", "Stateful agent sessions", "Isolated code execution", "Quality", "Datasets and evaluation runs", "Observability", "OpenTelemetry-native traces", "Activity and usage views", "Both are OpenAI-compatible, so this is a base URL change. Integration effort is identical and should not decide anything.", "The endpoint change is trivial. What is not trivial is that you take on provider relationships and infrastructure that OpenRouter was handling for you. Do that deliberately, and only if the deployment question makes it worth it.", "Get direct provider accounts", "OpenRouter's single billing relationship becomes several. For a small team this is a real loss of convenience and worth weighing honestly.", "Map model identifiers", "OpenRouter namespaces models as provider/model. Everstack uses bare model identifiers with provider routing configured separately, so the model strings in your code change.", "Re-create routing and fallback preferences", "OpenRouter provider preferences and fallback ordering map to Everstack provider routes and routing policy.", "Compare cost honestly", "OpenRouter passes inference through without markup and charges on credit purchase instead. Model your real volume against direct provider pricing plus infrastructure before assuming self-hosting is cheaper.", "OpenRouter solves a real problem extremely well and for many teams it is the right answer. Pick OpenRouter over Everstack when any of these is true.", "Where prompts and responses go", "Wherever you deploy it, inside your own boundary.", "Through OpenRouter's infrastructure. No self-hosting option is documented.", "For teams whose customers ask where inference data is processed, this is the whole question and everything else is detail.", "Broad, but narrower.", "The widest single-key catalogue available anywhere.", "If your workflow is trying new models as they land, OpenRouter is simply better at this and nothing self-hosted will catch up.", "What using your own keys costs", "Nothing. Your keys, your contracts.", "Free up to $25,000 monthly list price on pay-as-you-go, then 5% of standard OpenRouter pricing above it.", "The allowance is generous and most teams never reach it. Above it, the fee applies to spend you are already paying a provider for directly.", "Real. You run it.", "None, plus automatic failover across a huge provider set.", "A genuine advantage and one an honest comparison has to state plainly rather than bury.", "Can prompts stay inside my infrastructure?", "Yes, that is the default.", "No. No self-hosting option is documented.", "What does it cost to use my own provider keys?", "Nothing.", "Free to $25,000 monthly list price, then 5% of standard OpenRouter pricing.", "Which has more models?", "Fewer. This is OpenRouter's category.", "The widest catalogue available behind a single key.", "Does it run agents and sandboxes?", "Yes.", "No, it routes model calls.", "Is OpenRouter open source or self-hostable?", "Their documentation does not describe an open source or self-hosting option. OpenRouter is a hosted aggregation service, and prompts and responses transit their infrastructure.", "What does OpenRouter charge?", "Inference is passed through without markup, which is a fair model. The fees are on credit purchases at 5.5% with a $0.80 minimum via Stripe or 5% via crypto, and on bring-your-own-keys usage above an allowance of $25,000 of monthly list price on pay-as-you-go or $200,000 on enterprise, charged at 5% of standard OpenRouter pricing for that model and provider. Checked 31 August 2026.", "Is Everstack cheaper than OpenRouter?", "Not automatically, and anyone telling you otherwise is selling. OpenRouter does not mark up inference. Self-hosting replaces their fees with infrastructure you operate and provider contracts you negotiate. Model your real volume before assuming a saving.", "Can Everstack match OpenRouter's model catalogue?", "No, and it is unlikely to. Aggregating every model behind one key is OpenRouter's entire product and they are very good at it. If catalogue breadth is your requirement, use them, or use both: OpenRouter for evaluation and a self-hosted gateway for production traffic that has constraints.", "OpenRouter FAQ", "OpenRouter documentation", "Everstack licence (Apache-2.0)", "OpenRouter", "Everstack vs OpenRouter", "OpenRouter has the widest model catalogue behind one key and passes inference through without markup, which is a fair model and a real convenience. The two questions that decide this are whether prompts can transit a third party, and whether you need anything past the request.", "OpenRouter is a hosted aggregation service giving access to a very large catalogue of models through one OpenAI-compatible key. It passes underlying provider pricing through without markup, charging instead on credit purchases and on bring-your-own-key usage above a monthly allowance. Its documentation describes no self-hosting or open source option." ] }, { "sourcePath": "routes/comparison.portkey.tsx", "text": [ "Everstack vs Portkey | AI Gateway After the Palo Alto Deal", "Compare Everstack and Portkey on deployment control, gateway versus runtime scope, and what the Palo Alto Networks acquisition changes for existing users.", "An independent roadmap that is not set by a security platform's priorities", "Self-hosting as the default rather than a plan tier", "Agent runtime, sandboxes and evaluations on the same control plane", "A genuinely strong gateway. Multi-provider routing, guardrails, semantic caching and a mature observability surface over model traffic, all working well on day one.", "Excellent gateway UX and policy controls. Portkey has spent longer than we have polishing the operator experience for routing.", "Now backed by Palo Alto Networks, which is a stronger continuity and compliance story than an independent young company can offer.", "A clear managed-product posture, which suits teams that want to adopt quickly without operating infrastructure.", "Established enterprise relationships and procurement paperwork already in place at many large organisations.", "Palo Alto Networks has completed its acquisition of Portkey, and the product is now sold as Prisma AIRS AI Gateway. Acquisitions of infrastructure vendors routinely bring repricing, enterprise repackaging and roadmap reprioritisation.", "Portkey is primarily cloud-hosted, with self-hosting positioned on enterprise plans rather than as the default path.", "Scope stops at the gateway. Agent sessions, isolated code execution, memory and human review are systems you assemble around it.", "Roadmap direction now answers to a security platform's priorities, which may or may not align with yours.", "Independent roadmap", "Self-hosting without a plan conversation", "Runtime and execution in the same plane", "One Apache-2.0 licence", "Ownership", "Everstack Labs, independent.", "Palo Alto Networks. The acquisition has completed and the product is now sold as Prisma AIRS AI Gateway. Palo Alto Networks announced general availability on 16 July 2026, describing it as six weeks after closing. Neither company publishes an exact closing date.", "Deployment posture", "Self-hosted first. Run the Apache-2.0 build with Docker or Kubernetes at any tier, or use Everstack Cloud.", "Primarily cloud-hosted, with self-hosting positioned on enterprise plans.", "Gateway capability", "Multi-provider routing, fallback, semantic caching, per-tenant limits and guardrails.", "The same shape of capability, and more mature on operator UX. This is Portkey's home ground.", "Agent runtime", "Stateful sessions, tools, approvals, child agents and workflows.", "Out of scope for the gateway product.", "Isolated code execution", "Docker, isolated runtime and Kubernetes sandboxes.", "Out of scope.", "Evaluations and human review", "Datasets, scorers, LLM judges and annotation queues.", "Roadmap risk", "A young independent company. That is its own risk and we are not pretending otherwise.", "Backed by a large security vendor, which is more stable but also means roadmap priorities are set elsewhere.", "Acquisition date and deployment posture from public announcements and Portkey's own materials, reviewed 31 August 2026. Portkey's pricing and packaging may have changed since the acquisition closed; verify current terms directly.", "Gateway", "OpenAI-compatible endpoint", "Multi-provider routing and fallback", "Semantic caching", "Request-time guardrails", "Operator UX maturity", "Observability", "LLM traffic observability", "OpenTelemetry-native traces", "Partial", "Deployment", "Self-hosting as the default path", "Runtime", "Stateful agent sessions", "Vector memory", "Workflows with approvals", "Quality", "Datasets and evaluation runs", "Human annotation queues", "Operations", "Large-vendor continuity and compliance backing", "Both are OpenAI-compatible, so this is a base URL change and a header. Integration effort should not decide this comparison.", "Both are OpenAI-compatible gateways, so applications move with a base URL and header change. The work is re-expressing configs and virtual keys, and deciding whether you also want the runtime layers Portkey does not cover.", "Swap the endpoint and drop the Portkey headers", "Everstack authenticates with its own API key rather than a Portkey key alongside a provider key and provider header.", "Re-express configs as routing policy", "Portkey config objects covering routing strategy, fallback ordering, retries and cache settings map to Everstack provider routes and routing policy.", "Recreate virtual keys and guardrails", "Virtual keys map to Everstack API keys with per-tenant limits. Guardrail rules need re-declaring; the concepts map but the definitions are not wire compatible.", "Dual-run before cutting over", "Mirror traffic and compare latency, cache hit rate, cost totals and guardrail outcomes for a release before turning Portkey off.", "Portkey is a strong gateway and the Palo Alto backing is a real advantage for some buyers. Pick Portkey over Everstack when any of these is true.", "What the acquisition changes", "An independent roadmap, with the risk that comes with a young independent company.", "Palo Alto Networks has completed the acquisition and now sells the product as Prisma AIRS AI Gateway. Stronger continuity and compliance backing, and roadmap priorities now set inside a security platform.", "This cuts both ways honestly. If you want vendor stability, the acquisition helps. If you want an AI infrastructure roadmap driven by AI infrastructure users, it is a reason to look around.", "Deployment control", "Self-hosting is the default at any tier, Apache-2.0, Docker or Kubernetes.", "If a deployment constraint is why you are shopping, the difference between a default and a plan tier is the whole comparison.", "Gateway maturity", "Capable, but younger.", "More mature operator UX and policy controls. This is Portkey's home ground and they are good at it.", "If you are evaluating purely on how good the gateway feels to run, Portkey is ahead and we would rather say so than pretend the tables are even.", "Scope past the request", "Agent sessions, isolated sandboxes, memory, workflows and evaluations on the same control plane, sharing a trace.", "The gateway. Everything past the request is a separate system you choose and operate.", "Decides whether a trace stops at the request boundary or follows the work into execution and scoring.", "Who owns the roadmap?", "Palo Alto Networks, which now sells the product as Prisma AIRS AI Gateway.", "Is self-hosting the default or a plan tier?", "The default, at any tier.", "Positioned on enterprise plans.", "Which gateway is more polished today?", "Ours is younger.", "Portkey, on operator UX and policy controls.", "Does it execute agent code in isolation?", "Yes, with Docker, isolated runtime and Kubernetes backends.", "No, that is outside the gateway's scope.", "Was Portkey acquired?", "Yes, and it is more than a change of owner. Portkey's own homepage now reads \"Portkey is now PRISMA AIRS AI Gateway, generally available for all enterprises\", and Palo Alto Networks announced that general availability on 16 July 2026, describing it as six weeks after the acquisition closed. Neither company publishes an exact closing date, so this page does not state one. If you are evaluating Portkey today, evaluate Prisma AIRS AI Gateway and its enterprise packaging.", "Should the acquisition make me switch?", "Not on its own, and anyone telling you otherwise is selling. Acquisitions of infrastructure vendors commonly bring repricing, enterprise repackaging and roadmap reprioritisation, which is worth planning for. But Palo Alto backing also means better continuity and compliance answers than a young independent vendor can give. Which of those matters more depends on your buyer.", "Can I self-host Portkey?", "Portkey is primarily cloud-hosted, with self-hosting positioned on enterprise plans rather than as the default path. If self-hosting is a hard requirement, confirm current terms directly, because packaging may have changed since the acquisition closed.", "Is Everstack a drop-in replacement for Portkey?", "For the gateway layer, close to it: both are OpenAI-compatible, so applications move with a base URL and header change. Portkey configs and virtual keys have to be re-expressed as Everstack routing policy and API keys, and guardrail rules need re-declaring. Budget a dual-run period rather than a cutover.", "Portkey documentation", "Portkey homepage", "Palo Alto Networks: Prisma AIRS AI Gateway GA", "Portkey pricing", "Everstack licence (Apache-2.0)", "Portkey", "Everstack vs Portkey", "Portkey is a strong gateway with a more polished operator experience than ours, and since May 2026 it has had Palo Alto Networks behind it. The two questions that decide this are whether self-hosting is a default or a plan tier, and whether you need anything past the request.", "Portkey is an AI gateway providing multi-provider routing, guardrails, semantic caching and observability over LLM traffic, with a mature operator experience. It is primarily cloud-hosted, with self-hosting positioned on enterprise plans. Palo Alto Networks has completed its acquisition of Portkey and now sells the product as Prisma AIRS AI Gateway." ] }, { "sourcePath": "routes/comparison.truefoundry.tsx", "text": [ "Everstack vs TrueFoundry | AI Infrastructure Comparison", "Compare Everstack and TrueFoundry across AI gateway routing, agent runtime depth, self-hosting, observability, deployment control, and enterprise operations.", "Single stack ownership: gateway + runtime + memory + controls", "Stronger native depth for agent execution and governance patterns", "Self-hosted model aligned to enterprise control requirements", "Strong enterprise narrative with Kubernetes-native deployment posture.", "Comprehensive platform messaging around gateway and broader AI infrastructure.", "Clear positioning for teams that want platform-heavy operational controls.", "Positioning can span broad platform concerns beyond pure gateway decisions.", "Some claims in comparison pages are marketing-led and require independent validation.", "Architecture fit depends heavily on existing infrastructure standards.", "Unified gateway + runtime + memory stack reduces cross-tool operational complexity.", "Execution controls and policy enforcement are closer to runtime behavior, not only infra management.", "Self-hosted architecture and tenant boundaries support strict enterprise control requirements.", "Gateway feature depth", "Agent runtime ownership", "Self-hosted control boundary", "Enterprise platform maturity", "Cost flexibility", "Operational simplicity", "Operational scope", "Combines gateway decisions, runtime execution, and memory lifecycle under one product surface with unified observability.", "Enterprise platform breadth is strong, especially in infra-centric and Kubernetes-heavy workflows.", "Everstack keeps day-2 runtime operations tighter for teams shipping fast-changing agent workloads.", "Routing plus execution governance", "Pairs routing/fallback controls with runtime policy and execution behavior in one control plane.", "Routing and reliability controls are mature and enterprise-ready.", "Everstack is stronger when teams need routing decisions tightly coupled with runtime behavior and policy.", "Agent runtime depth", "Focuses on memory-aware, tool-using agent execution patterns with integrated controls and sandboxed execution.", "Platform strengths extend broadly across enterprise AI infrastructure and integrations.", "Everstack wins when the core requirement is deep runtime orchestration rather than broad infra abstraction.", "Observability scope", "Targets end-to-end visibility across gateway, agent loop, and tool execution pathways with custom metrics.", "Strong enterprise observability posture with infrastructure-native telemetry patterns.", "Everstack provides clearer application-level traceability for teams operating multi-step agent workflows.", "Deployment flexibility", "Self-hosted architecture deploys in your VPC with full data sovereignty and tenant isolation.", "Kubernetes-native but primarily positioned as a managed service with cloud dependency.", "Everstack better supports strict data residency requirements and air-gapped environments.", "Architecture", "Self-hosted deployment", "Gateway + Runtime + Memory unified", "Sandboxed execution", "Kubernetes-native", "Gateway", "Multi-provider routing", "Fallback & retry logic", "Rate limiting & quotas", "Custom middleware", "Limited", "Runtime", "Agent orchestration", "Partial", "Memory management", "Tool execution control", "Streaming support", "Security", "Tenant isolation", "Policy enforcement", "Audit logging", "Basic", "SSO/SAML", "Enterprise", "Observability", "Full-stack tracing", "API-level", "Cost analytics", "Custom metrics", "OpenTelemetry compliant", "Fragmented LLM Infrastructure", "Unified platform for both model serving and LLM API gateway - one solution handles it all.", "Eliminates glue code and context-switching, allowing teams to focus on building features.", "Slow Deployment & Iteration Cycles", "Self-serve deployments in days or hours - no heavy DevOps dependency.", "80%+ time reduction in deployment cycles with automated environment setup.", "Uncontrolled Cloud Costs", "Kubernetes-based orchestration with ability to host your own models.", "35-50% TCO savings vs naive approaches with auto-scaling and spot instances.", "Limited Visibility & Debugging", "Deep observability built-in: real-time logs, detailed error traces, and performance metrics.", "Quick root-cause analysis whether it is a bad prompt, slow model, or infrastructure issue.", "Vendor Lock-in Fears", "Cloud-agnostic deployment with open standards (containers, Kubernetes).", "Full control and optionality - remove Everstack without breaking your applications.", "Are you facing latency or hosting issues?", "One-stop solution to host open-source LLMs + Gateway. Best-in-class ~3ms latency with horizontal scaling.", "Cloud-first approach; facing higher latency than expected for some workloads.", "Can we optimize our LLM usage costs?", "Cut costs 40-50% by running models on spot instances or GPUs at scale with auto-shutdown.", "Per API call pricing with limited cost optimization for self-hosted models.", "Do we need deep runtime orchestration?", "Native agent execution, memory management, and tool orchestration built-in.", "Requires additional tools for deep runtime orchestration beyond gateway.", "Will we outgrow the platform capabilities?", "Extensible platform covering model serving to monitoring. Adapts as use-cases grow.", "Focused on inference - growth means integrating additional solutions.", "Do you need strict data sovereignty?", "Runs everything inside your VPC with full tenant controls from day one.", "Enterprise plans offer private deployments but with managed components.", "Is TrueFoundry a credible enterprise alternative?", "Yes. It is a credible option, especially for teams aligned to Kubernetes-first operating models. However, consider whether their broad platform scope matches your specific gateway and runtime needs.", "When does Everstack have the edge over TrueFoundry?", "When teams want a tighter single-stack story for gateway, runtime, memory, and execution controls with self-hosted ownership. Everstack provides unified operational model without broader infrastructure complexity.", "How should we evaluate latency and scalability claims?", "Treat vendor numbers as directional and validate with your own p95/p99 benchmarks under representative production traffic. Both platforms can scale, but your specific workload patterns matter most.", "What about deployment control?", "Everstack provides a self-hosted deployment model for teams that need to control their infrastructure boundary. Evaluate each platform against your operational requirements and preferred ownership model.", "Which platform is better for agentic AI workloads?", "Everstack is purpose-built for agentic AI with memory management, tool execution controls, and sandboxed flows. TrueFoundry covers this but as part of broader platform capabilities.", "TrueFoundry Gateway docs", "TrueFoundry Load Balancing", "TrueFoundry MCP overview", "TrueFoundry vs Portkey", "TrueFoundry", "Everstack vs TrueFoundry", "Head-to-head comparison for production teams evaluating platform depth, runtime control, and deployment ownership.", "TrueFoundry is an enterprise-focused AI platform with strong Kubernetes-native positioning, offering gateway capabilities and broader MLOps/AI infrastructure including model serving and deployment." ] }, { "sourcePath": "routes/comparison.tsx", "text": [ "Everstack vs AI Infrastructure Platforms | Feature Comparison", "Compare Everstack with AI gateway and infrastructure platforms across routing, agent runtimes, sandboxes, observability, deployment ownership, and governance.", "Platform, not just proxy", "Everstack unifies gateway routing, runtime orchestration, sandboxes, and observability in one production stack.", "Control where it matters", "Run in your own environment with a self-hosted architecture designed for enterprise boundaries.", "Built to win in production", "Policy controls, spend visibility, and operational reliability from day one, not after custom integration work.", "Gateways and proxies", "Everstack vs LiteLLM", "The widest provider coverage in the category, against a split licence and governance features that live in the enterprise directory.", "Everstack vs Portkey", "Deployment control and runtime scope, plus a straight read on what the Palo Alto Networks acquisition changes for existing users.", "Everstack vs Kong AI Gateway", "Which AI plugins need an enterprise key, per-model pricing, and how far a mature API gateway reaches past the request.", "Everstack vs Bifrost", "Raw gateway throughput against licence terms, enterprise-only capabilities, and what happens after the response returns.", "Everstack vs Cloudflare AI Gateway", "Edge caching and rate limiting against data residency, deployment model, and scope past a single request.", "Everstack vs OpenRouter", "A hosted aggregator with unmatched model breadth, against self-hosting, credit and BYOK fees, and where prompts travel.", "Everstack vs TrueFoundry", "Head-to-head on enterprise platform depth, runtime control, and deployment ownership.", "Observability and evaluations", "Everstack vs Langfuse", "Licence terms, the nine features gated behind a self-host key, and the difference between watching a request and being in it.", "Everstack vs Helicone", "Licence terms, which tier unlocks on-prem deployment, and how far each product goes past logging model calls.", "Everstack vs Braintrust", "Evaluation depth and processed-data pricing, and whether the evals connect to the runtime that produced the traces.", "Sandboxes and compute", "Everstack vs E2B", "Sandbox isolation, concurrency limits, per-second compute pricing, and whether the sandbox arrives with the rest of the stack.", "Everstack vs Daytona", "What it means for a self-hosting plan that Daytona's open source repository stopped receiving updates in June 2026.", "Everstack vs Modal", "GPU access and per-second compute pricing, against deployment model and whether execution comes with a gateway and runtime.", "Agent frameworks", "Everstack vs Mastra", "The best-adopted TypeScript agent framework, against a platform that sits in front of agents written in any language. Licence split, sandboxes, and why a Mastra team often wants both.", "Everstack vs Agent Frameworks", "Framework versus platform: LangGraph, CrewAI, Mastra and Flue build the agent; Everstack is what it runs on.", "Everstack vs Flue", "Agent framework against self-hosted runtime: gateway, built-in observability and evals, and human-in-the-loop.", "LiteLLM alternatives", "Portkey alternatives", "Helicone alternatives", "E2B alternatives", "Comparison", "Compare the operating boundary, not just the feature count.", "See where each product begins and ends across model routing, agent execution, isolation, memory, telemetry, and deployment ownership.", "Ratings include source links so you can verify the underlying claim.", "View detailed comparisons", "Compare Everstack Head-to-Head", "Every page checks licence files, pricing pages and repositories against the vendor's own sources, shows working code for both products, and says plainly when the other product is the better choice.", "Everything that sits in the request path between your application and a model provider.", "Products that tell you what your models did, and whether the output was any good.", "Where AI-generated code actually runs, and who owns the machine it runs on.", "Libraries that describe an agent, rather than infrastructure that runs one.", "Everstack", "vs", "Open buyer guide", "Alternatives roundups", "Shortlists for teams already running one of these products and looking at what else is out there, Everstack included but not assumed." ] }, { "sourcePath": "routes/compatibility.tsx", "text": [ "Everstack Compatibility | SDKs, Frameworks, Models & Tools", "See how Everstack connects your SDKs, agent frameworks, AI model providers, tools, channels, webhooks, MCP servers, and OpenTelemetry pipelines." ] }, { "sourcePath": "routes/contact.tsx", "text": [ "2026-08-21", "21 August 2026", "Contact Everstack | Support, Sales, and Security", "Reach Everstack Labs for support, sales, security reports, and documentation questions, with the fastest route listed for each kind of request.", "Contact Everstack" ] }, { "sourcePath": "routes/evaluations.tsx", "text": [ "An illustrated testing station comparing and scoring AI outputs", "Quality evaluation", "Turn AI quality from a feeling into a release signal.", "Score datasets and production traces with built-in metrics, LLM judges, deterministic code, and human review, then catch regressions before they ship.", "LLM-as-judge", "Code scorers", "Datasets and baselines", "Human annotations", "What is an LLM judge?", "It is a separate model that grades an output against a defined rubric, the original input, and optional context or reference answers.", "Can evaluations be deterministic?", "Yes. Code scorers run in isolated sandboxes and can enforce exact domain rules alongside model-based metrics.", "Can an evaluation link back to a trace?", "Yes. Evaluation cases can reference the gateway or agent trace that produced the output, which keeps quality evidence connected to runtime behavior." ] }, { "sourcePath": "routes/gateway.tsx", "text": [ "An operator routing model traffic through an illustrated infrastructure switchboard", "AI gateway", "One model endpoint. Every routing decision under your control.", "Put one OpenAI-compatible API in front of every provider, then centralize routing, fallback, caching, limits, credentials, and tenant boundaries.", "OpenAI-compatible API", "200+ catalog models", "Fallback and balancing", "Tenant-scoped controls", "Do applications need a new SDK?", "No. Existing OpenAI-compatible clients can point at the Everstack gateway by changing the base URL and credentials.", "Can each tenant have different providers?", "Yes. Provider credentials, aliases, cache entries, and limits can remain isolated inside each tenant boundary.", "Can the gateway run without the rest of the platform?", "You can start with routing alone, then enable caching, rate limiting, guardrails, and observability as your operating requirements grow." ] }, { "sourcePath": "routes/guardrails.tsx", "text": [ "An illustrated checkpoint inspecting AI requests before they enter a protected system", "Runtime policy", "Inspect every boundary before unsafe data crosses it.", "Apply input and output checks for prompt injection, sensitive data, unsafe content, jailbreak markers, and dangerous code at the gateway or inside a workflow.", "Input and output checks", "PII detection", "Prompt injection controls", "Traceable violations", "Where do guardrails run?", "They can run across gateway requests through configuration or as explicit input and output nodes inside Workflow Studio.", "Are guardrails enabled automatically?", "No. Gateway guardrails are explicitly configured so teams can choose the checks, actions, and thresholds that match their application.", "Can a violation be audited later?", "Yes. Guardrail outcomes are recorded in execution context and appear in traces and workflow execution logs." ] }, { "sourcePath": "routes/index.tsx", "text": [ "https://schema.org", "Organization", "WebSite", "Everstack", "en", "WebPage", "SoftwareApplication", "DeveloperApplication", "Linux, Docker, Kubernetes", "OpenAI-compatible AI gateway", "Multi-provider model routing and fallback", "Stateful agent runtime and workflows", "Isolated Docker, isolated runtime, and Kubernetes sandboxes", "Evaluations, guardrails, and human review", "OpenTelemetry-native traces, metrics, and logs", "Vector memory and MCP tool federation", "FAQPage" ] }, { "sourcePath": "routes/model-catalog.changelog.tsx", "text": [ "Model Catalog Changelog | Everstack", "Track model additions to the Everstack catalog by release version and date. Explore the latest models and review provider availability requirements.", "Explore the model catalog", "Model catalog changelog", "A release-by-release record of models added to Everstack. These are catalog release dates, not provider launch dates.", "Historical entries do not guarantee that a model remains available today.", "Catalog v", "{release.additions.length} model additions recorded in this release.", "No model additions enumerated in this entry." ] }, { "sourcePath": "routes/models.$provider.$model.tsx", "text": [ "Loading...", "Provider", "Model", "not found.", "Back to catalog", "Models", "{modelDisplayName(model)} is available through Everstack's OpenAI-compatible gateway with routing, fallback, retries, and observability.", "released", "Quick start", "Context", "Max output", "Input", "Output", "Activity", "Providers", "Pricing", "Performance", "Reliability", "Compare", "Capabilities", "Quick Start", "Endpoint", "Input /M", "Output /M", "Compare usage and performance", "Place this model beside up to three other catalog models.", "No capabilities listed.", "Modalities", "Details", "Gateway Config", "More models from {providerDisplayName(provider)}", "No pricing data available.", "Item", "Price", "Unit", "Model ID", "Family", "Status", "Knowledge", "Released", "API", "Auth", "Discovery", "Provider type", "Base URL", "Chat completions", "Auth env", "Copied", "Copy", "TypeScript", "Python", "Go", "curl", "ctx", "/ {formatCostPerMillion(model.cost.input_per_1k)} in", "stable", "{label}{direction === \"capability\" ? \" capability\" : ` ${direction}`}" ] }, { "sourcePath": "routes/models.$provider.index.tsx", "text": [ "Loading...", "Provider not found.", "Back to catalog", "Models", "Access", "models through Everstack's OpenAI-compatible gateway with routing, fallback, retries, and observability.", "Max context", "Input range", "Discovery", "Activity", "Managed-cloud usage across this serving provider.", "Search {provider.models.length} {providerDisplayName(provider)} models...", "All", "models", "shown", "No models matched.", "{modelDisplayName(model)} supports {(model.capabilities || [\"chat\"]).map(titleCase).join(\", \")} workloads through Everstack.", "by", "context", "input", "output", "stable" ] }, { "sourcePath": "routes/models.compare.tsx", "text": [ "Compare AI Model and Provider Usage | Everstack", "Compare managed-cloud token usage, requests, latency, throughput, and reliability across AI models and providers.", "1W", "1M", "3M", "6M", "1Y", "All", "Tokens", "Requests", "TTFT", "Throughput", "Success", "Comparison data is temporarily unavailable.", "Model catalog", "Compare activity", "Compare public managed-cloud usage across two to four models or serving providers. Period usage is the default; cumulative is a selectable view.", "Comparison type", "Models", "Providers", "Remove {labels.get(key) || key}", "Add {kind}", "Add {kind === \"model\" ? \"model\" : \"provider\"}", "Select at least two and no more than four.", "Metric", "Value", "Period", "Cumulative", "Comparison interval", "Hour", "Day", "Month", "hour", "day", "month", "Comparison range", "Series use privacy-safe aggregate buckets. Low-volume periods are omitted and cumulative lines only sum eligible periods.", "Add", "two models or providers", "one more", "to begin the comparison.", "None of these selections has enough eligible public usage for this range.", "Withheld" ] }, { "sourcePath": "routes/models.index.tsx", "text": [ "AI Model Catalog | Compare Providers and Pricing | Everstack", "Browse AI models across OpenAI, Anthropic, Google, AWS Bedrock, Azure, and more. Compare context windows, capabilities, modalities, and token pricing.", "Model catalog", "Choose the model by the work it needs to do.", "Compare context, capabilities, modalities, token pricing, and live managed-cloud activity across every provider available through the Everstack gateway.", "An illustrated model interchange connecting different providers to one governed route", "One API", "Comparable usage evidence", "Compare models", "Models", "models across", "providers, available through one API.", "Compare", "Models display format", "List", "Table", "model", "models", "matching “{filters.search}”", "Filter", "Show", "more", "Close filters", "Filter models", "by", "context", "/M input", "/M output", "Released", "No models match these filters", "Try a broader search or reset the filters to return to the complete catalog.", "Clear filters", "Catalog unavailable", "The model catalog could not be loaded. Please refresh and try again." ] }, { "sourcePath": "routes/observability.tsx", "text": [ "An illustrated operator observing AI workload signals from a night-time monitoring station", "OpenTelemetry-native operations", "See the request, the agent, and every expensive decision between them.", "Correlate model routing, tool calls, sandboxes, approvals, evaluations, latency, tokens, and cost through one OpenTelemetry-native operating view.", "Distributed traces", "Structured logs", "Operational metrics", "Cost attribution", "Does Everstack require a separate collector?", "No. Everstack can collect telemetry directly, or export through OTLP when your deployment already uses an OpenTelemetry Collector.", "Can I trace an entire agent turn?", "Yes. Model calls, tool calls, approval events, and sandbox lifecycle operations nest under the session and turn spans.", "Can traces show token cost?", "Yes. Provider spans carry token and cost attributes so request economics remain connected to operational behavior." ] }, { "sourcePath": "routes/pricing.tsx", "text": [ "Everstack Pricing | AI Infrastructure Platform", "Compare Everstack plans for AI gateway routing, observability, agents, hosted browser automation, static site publishing, and isolated sandbox workloads.", "https://schema.org", "WebPage", "Everstack Pricing", "Transparent pricing for Everstack AI infrastructure.", "FAQPage", "Simple, transparent pricing", "Start on Starter. Move to Build as your application grows, then Scale for production workloads.", "Monthly", "Toggle yearly billing", "Yearly", "Save 2 months" ] }, { "sourcePath": "routes/privacy.tsx", "text": [ "2026-05-12", "12 May 2026", "Privacy Policy | Everstack", "How Everstack collects, uses, and protects personal data, including EU and UK GDPR rights and our subprocessor list.", "Privacy Policy" ] }, { "sourcePath": "routes/roadmap.$slug.tsx", "text": [ "Back" ] }, { "sourcePath": "routes/roadmap.tsx", "text": [ "Everstack Roadmap | AI Infrastructure Product Direction", "See what Everstack has shipped, what is in progress, and what is coming next across agents, sandboxes, evaluations, and observability.", "In Progress", "Coming Soon", "Shipped", "Product direction", "The path from intent to shipped infrastructure.", "See what is operating today, what is being installed now, and what we plan to connect next.", "An illustrated operations archive showing a product path through shipped and planned modules", "In progress", "Coming soon" ] }, { "sourcePath": "routes/sandboxes.tsx", "text": [ "AI Sandboxes | Isolated Compute for Agents and Applications", "Run code, agents, preview services, and jobs in isolated Everstack sandboxes with shell, files, lifecycle controls, signed previews, resource limits, and network policy.", "An illustrated operator supervising separate protected compute rooms" ] }, { "sourcePath": "routes/sites.tsx", "text": [ "EVS Sites | Governed Publishing for Agent Output", "Publish browser-ready agent output as private, versioned sites with immutable releases, rollback, and a phased path to governed Everstack runtime routes.", "EVS Sites versioned publishing relay" ] }, { "sourcePath": "routes/terms.tsx", "text": [ "2026-05-12", "12 May 2026", "Terms of Service | Everstack", "The terms that govern your use of Everstack, including our LLM gateway, observability, and agent sandbox platform.", "Terms of Service" ] }, { "sourcePath": "routes/workflows.tsx", "text": [ "An illustrated operator arranging a clear sequence of connected AI workflow stations", "Agent orchestration", "Use agents for judgment. Use workflows for control.", "Combine durable, tool-using agents with explicit workflow graphs so every workload gets the right balance of autonomy, repeatability, and review.", "Durable agent sessions", "Visual DAG workflows", "Parallel branches", "Human approval gates", "When should I use an agent instead of a workflow?", "Use an agent when the model must choose the next action from intermediate results. Use a workflow when the steps and decision points should remain explicit.", "Can a workflow call an agent?", "Yes. Agent runs, functions, model calls, guardrails, integrations, and memory operations can participate in the same workflow graph.", "Are workflow runs observable?", "Yes. Execution events, node timing, payloads, token use, errors, and guardrail outcomes link into the platform trace." ] } ] ``` ## Compatibility directory This includes every published SDK, framework, model provider, integration, implementation step, status, and reference link. ```json [ { "slug": "sdks", "path": "/compatibility/sdks", "title": "Languages & SDKs", "shortTitle": "SDKs", "eyebrow": "Client compatibility", "headline": "Use the language your team already ships.", "accent": "Typed clients where you want them. OpenAI compatibility everywhere else.", "description": "Call the full Everstack platform through native TypeScript, Python, and Go SDKs, or point an OpenAI-compatible client at the gateway from any other language.", "homeDescription": "Native TypeScript, Python, and Go clients, plus an OpenAI-compatible API for every other language.", "seoTitle": "Everstack SDKs & Language Compatibility | TypeScript, Python, Go", "seoDescription": "Use Everstack from TypeScript, Python, Go, Java, Rust, or any OpenAI-compatible client. Explore native SDKs, typed platform APIs, and gateway compatibility.", "primaryHref": "https://docs.everstack.ai/sdks", "primaryLabel": "Open SDK documentation", "proof": "3 native SDKs · 1 OpenAI-compatible gateway", "items": [ { "id": "typescript", "label": "TypeScript", "description": "A typed Node.js client for gateway, agents, memory, evaluations, traces, audio, and channels.", "href": "https://docs.everstack.ai/sdks/typescript", "icon": "simple-icons:typescript", "status": "Native SDK", "linkLabel": "TypeScript docs" }, { "id": "python", "label": "Python", "description": "Synchronous and asynchronous clients with Pydantic models for the complete platform API.", "href": "https://docs.everstack.ai/sdks/python", "icon": "simple-icons:python", "status": "Native SDK", "linkLabel": "Python docs" }, { "id": "go", "label": "Go", "description": "An idiomatic Go client with typed responses and first-class streaming support.", "href": "https://docs.everstack.ai/sdks/go", "icon": "simple-icons:go", "status": "Native SDK", "linkLabel": "Go docs" }, { "id": "java", "label": "Java", "description": "Use an OpenAI-compatible Java client today while the native Everstack SDK is developed.", "href": "/compatibility/sdks#java", "icon": "devicon-plain:java", "status": "Native SDK planned", "linkLabel": "Java compatibility" }, { "id": "rust", "label": "Rust", "description": "Connect through the gateway's OpenAI-compatible HTTP surface; a native client is on the roadmap.", "href": "/compatibility/sdks#rust", "icon": "simple-icons:rust", "status": "Native SDK planned", "linkLabel": "Rust compatibility" } ], "steps": [ { "title": "Choose a client", "description": "Use a native Everstack SDK for the full platform or keep your existing OpenAI-compatible client." }, { "title": "Set one endpoint", "description": "Configure your Everstack gateway URL and API key once in the application environment." }, { "title": "Reach the whole stack", "description": "Route models immediately, then adopt agents, memory, evaluations, and traces as you need them." } ] }, { "slug": "agent-frameworks", "path": "/compatibility/agent-frameworks", "title": "Agent Frameworks", "shortTitle": "Frameworks", "eyebrow": "Framework compatibility", "headline": "Keep the framework. Add the production layer.", "accent": "Your agent logic stays yours; Everstack runs what surrounds it.", "description": "Point framework model calls at the Everstack gateway and use platform APIs for isolated execution, memory, evaluations, approvals, deployment, and observability.", "homeDescription": "Bring LangChain, CrewAI, Pydantic AI, OpenAI Agents, Vercel AI, or your own loop.", "seoTitle": "Agent Framework Compatibility | LangChain, CrewAI & More", "seoDescription": "Run LangChain, CrewAI, Pydantic AI, OpenAI Agents, MLflow, Claude Agent SDK, and Vercel AI with Everstack gateway, sandboxes, memory, and observability.", "primaryHref": "/comparison/agent-frameworks", "primaryLabel": "Framework vs platform guide", "proof": "Framework-agnostic · OpenAI-compatible · Self-hostable", "items": [ { "id": "langchain", "label": "LangChain", "description": "Keep chains, graphs, and tools while routing model traffic through one governed endpoint.", "href": "/compatibility/agent-frameworks#langchain", "icon": "simple-icons:langchain", "status": "Gateway", "linkLabel": "Integration path" }, { "id": "crewai", "label": "CrewAI", "description": "Run CrewAI model calls through the gateway and attach Everstack execution and telemetry services.", "href": "/compatibility/agent-frameworks#crewai", "icon": "simple-icons:crewai", "status": "Gateway", "linkLabel": "Integration path" }, { "id": "pydantic-ai", "label": "Pydantic AI", "description": "Preserve typed agent code while centralizing model routing, policy, spend, and traces.", "href": "/compatibility/agent-frameworks#pydantic-ai", "icon": "simple-icons:pydantic", "status": "Gateway", "linkLabel": "Integration path" }, { "id": "openai-agents", "label": "OpenAI Agents", "description": "Use the SDK's agent loop with Everstack's OpenAI-compatible model gateway and platform services.", "href": "/compatibility/agent-frameworks#openai-agents", "icon": "simple-icons:openai", "status": "OpenAI-compatible", "linkLabel": "Integration path" }, { "id": "mlflow", "label": "MLflow", "description": "Retain experiment workflows while Everstack handles runtime routing and production telemetry.", "href": "/compatibility/agent-frameworks#mlflow", "icon": "simple-icons:mlflow", "status": "Telemetry bridge", "linkLabel": "Integration path" }, { "id": "claude-agent-sdk", "label": "Claude Agent SDK", "description": "Pair Claude-based agent logic with Everstack sandboxes, tools, and OpenTelemetry-native operations.", "href": "/compatibility/agent-frameworks#claude-agent-sdk", "icon": "simple-icons:anthropic", "status": "Platform APIs", "linkLabel": "Integration path" }, { "id": "vercel-ai", "label": "Vercel AI", "description": "Keep Vercel AI's application primitives and move provider access behind the Everstack gateway.", "href": "/compatibility/agent-frameworks#vercel-ai", "icon": "simple-icons:vercel", "status": "Gateway", "linkLabel": "Integration path" } ], "steps": [ { "title": "Keep your agent loop", "description": "No framework migration: your prompts, tools, graphs, and state model remain in your codebase." }, { "title": "Route through Everstack", "description": "Send model calls to the OpenAI-compatible gateway for fallback, caching, limits, and provider choice." }, { "title": "Add runtime services", "description": "Adopt isolated sandboxes, durable memory, evaluations, approvals, and traces without rebuilding them." } ] }, { "slug": "model-providers", "path": "/compatibility/model-providers", "title": "Model Providers", "shortTitle": "Providers", "eyebrow": "Provider compatibility", "headline": "One API. The model market behind it.", "accent": "Change providers in configuration, not throughout your product.", "description": "Route across hosted, cloud, and local models with provider fallback, key rotation, load balancing, semantic caching, rate limits, and unified telemetry.", "homeDescription": "Route across hosted, hyperscaler, and local models without rewriting application code.", "seoTitle": "AI Model Provider Compatibility | OpenAI, Anthropic & More", "seoDescription": "Connect OpenAI, Anthropic, Gemini, Mistral, Ollama, Groq, Azure OpenAI, AWS Bedrock, DeepSeek, Qwen, and more through one Everstack gateway API.", "primaryHref": "/models", "primaryLabel": "Explore every model", "proof": "22 providers · One catalog · One API", "items": [ { "id": "openai", "label": "OpenAI", "description": "Route GPT, reasoning, embedding, image, speech, and moderation models through one catalog.", "href": "/models/openai", "img": "/providers/lobehub/openai.svg", "status": "Native provider", "linkLabel": "OpenAI models" }, { "id": "anthropic", "label": "Anthropic", "description": "Use Claude models with the same routing, fallback, cost, and trace controls as every provider.", "href": "/models/anthropic", "img": "/providers/lobehub/anthropic.svg", "status": "Native provider", "linkLabel": "Anthropic models" }, { "id": "google", "label": "Google Gemini", "description": "Connect Gemini models directly or through Vertex AI while keeping one application interface.", "href": "/models/google", "img": "/providers/lobehub/gemini.svg", "status": "Native provider", "linkLabel": "Gemini models" }, { "id": "mistral", "label": "Mistral", "description": "Route Mistral's general, coding, and embedding models from the shared gateway surface.", "href": "/models/mistral", "img": "/providers/lobehub/mistral.svg", "status": "Native provider", "linkLabel": "Mistral models" }, { "id": "ollama", "label": "Ollama", "description": "Bring local models into the same routing and observability plane as hosted inference.", "href": "/models/ollama", "img": "/providers/lobehub/ollama.svg", "status": "Local provider", "linkLabel": "Ollama models" }, { "id": "groq", "label": "Groq", "description": "Use low-latency Groq inference as a primary route or fallback without changing clients.", "href": "/models/groq", "img": "/providers/lobehub/groq.svg", "status": "Native provider", "linkLabel": "Groq models" }, { "id": "azure-openai", "label": "Azure OpenAI", "description": "Connect Azure-hosted OpenAI deployments through Everstack's unified routing layer.", "href": "/models/azure-openai", "img": "/providers/lobehub/azure.svg", "status": "Cloud provider", "linkLabel": "Azure OpenAI models" }, { "id": "aws-bedrock", "label": "AWS Bedrock", "description": "Reach Bedrock-hosted model families while preserving consistent request and trace semantics.", "href": "/models/aws-bedrock", "img": "/providers/lobehub/bedrock.svg", "status": "Cloud provider", "linkLabel": "Bedrock models" }, { "id": "deepseek", "label": "DeepSeek", "description": "Add DeepSeek chat and reasoning models to routes, fallbacks, and cost policies.", "href": "/models/deepseek", "img": "/providers/lobehub/deepseek.svg", "status": "Native provider", "linkLabel": "DeepSeek models" }, { "id": "qwen", "label": "Qwen", "description": "Use Qwen model families through the same OpenAI-compatible application endpoint.", "href": "/models/qwen", "img": "/providers/lobehub/qwen.svg", "status": "Native provider", "linkLabel": "Qwen models" } ], "steps": [ { "title": "Connect provider keys", "description": "Register one or more upstream credentials per provider without exposing them to application clients." }, { "title": "Define the route", "description": "Choose primary models, fallback chains, load-balancing policy, cache behavior, and limits." }, { "title": "Call one API", "description": "Applications use a stable gateway contract while Everstack handles provider-specific behavior." } ] }, { "slug": "integrations", "path": "/compatibility/integrations", "title": "Tools & Integrations", "shortTitle": "Integrations", "eyebrow": "Tool compatibility", "headline": "Connect the systems around the model call.", "accent": "Native connectors where depth matters; open protocols everywhere else.", "description": "Bring source control, channels, webhooks, MCP tools, and OpenTelemetry pipelines into the same operational layer without a closed connector ecosystem.", "homeDescription": "Connect source control, channels, SaaS tools, MCP servers, webhooks, and telemetry pipelines.", "seoTitle": "Everstack Integrations | GitHub, Slack, MCP & OpenTelemetry", "seoDescription": "Connect Everstack with GitHub, Slack, Stripe, Figma, Datadog, Grafana, Google Drive, LangSmith, and more through native integrations, MCP, webhooks, and OTLP.", "primaryHref": "https://docs.everstack.ai/getting-started/integrations/overview", "primaryLabel": "Open integration docs", "proof": "Native connectors · MCP · Webhooks · OpenTelemetry", "items": [ { "id": "langsmith", "label": "LangSmith", "description": "Keep framework-level tracing where it helps and correlate production model traffic in Everstack.", "href": "/compatibility/integrations#langsmith", "icon": "simple-icons:langchaincorporate", "status": "Telemetry bridge", "linkLabel": "Integration path" }, { "id": "github", "label": "GitHub", "description": "Connect a tenant-scoped GitHub App for repository discovery, webhook handling, and PR workflows.", "href": "https://docs.everstack.ai/getting-started/integrations/github", "icon": "simple-icons:github", "status": "Native connector", "linkLabel": "GitHub setup" }, { "id": "slack", "label": "Slack", "description": "Bind agents to Slack channels and route messages into persistent Everstack sessions.", "href": "https://docs.everstack.ai/getting-started/integrations/channels#slack", "icon": "simple-icons:slack", "status": "Native channel", "linkLabel": "Slack setup" }, { "id": "stripe", "label": "Stripe", "description": "Trigger agents and workflows from signed Stripe events through the generic webhook surface.", "href": "https://docs.everstack.ai/getting-started/integrations/webhooks", "icon": "simple-icons:stripe", "status": "Webhook", "linkLabel": "Webhook setup" }, { "id": "figma", "label": "Figma", "description": "Expose Figma capabilities to agents through an MCP server and centrally managed credentials.", "href": "https://docs.everstack.ai/getting-started/mcp/overview", "icon": "simple-icons:figma", "status": "MCP", "linkLabel": "MCP setup" }, { "id": "datadog", "label": "Datadog", "description": "Receive Datadog alert webhooks or route OpenTelemetry data through your existing collector.", "href": "https://docs.everstack.ai/getting-started/integrations/webhooks", "icon": "simple-icons:datadog", "status": "Webhook + OTLP", "linkLabel": "Webhook setup" }, { "id": "grafana", "label": "Grafana", "description": "Trigger diagnostics from Grafana alerts and keep your existing OpenTelemetry pipeline.", "href": "https://docs.everstack.ai/getting-started/integrations/webhooks", "icon": "simple-icons:grafana", "status": "Webhook + OTLP", "linkLabel": "Webhook setup" }, { "id": "google-drive", "label": "Google Drive", "description": "Make Drive data and actions available to agents through a registered MCP server.", "href": "https://docs.everstack.ai/getting-started/mcp/overview", "icon": "simple-icons:googledrive", "status": "MCP", "linkLabel": "MCP setup" }, { "id": "opentelemetry", "label": "OpenTelemetry", "description": "Ingest and export OTLP telemetry so Everstack fits the observability pipeline you already operate.", "href": "https://docs.everstack.ai/getting-started/observability/overview", "icon": "simple-icons:opentelemetry", "status": "Native protocol", "linkLabel": "Observability docs" } ], "steps": [ { "title": "Choose the integration surface", "description": "Use a native connector, a channel binding, a webhook, MCP, or OTLP based on the system's role." }, { "title": "Centralize credentials", "description": "Scope connections by tenant and keep raw third-party credentials out of agent prompts and code." }, { "title": "Operate it as one system", "description": "Discover tools, monitor health, trace calls, and audit activity from the Everstack control plane." } ] } ] ``` ## Agent-ready integrations and code examples This contains SDK examples, coding-agent setup instructions, prompts, safeguards, verification steps, and documentation links used by the product integration panels. ```json { "gatewayAgentSkill": { "id": "gateway-model-call", "eyebrow": "Agent-ready integration", "title": "Route a model call through Everstack", "description": "Start with an Everstack SDK, keep an existing compatible client, or give the complete implementation brief to a coding agent.", "docsHref": "https://docs.everstack.ai/getting-started/gateway/overview", "codingAgents": [ { "id": "codex", "label": "Codex", "logo": "/providers/openai.svg", "logoAlt": "OpenAI", "capability": "Gateway and traces", "summary": "Use Everstack as Codex's Responses API provider, then send native Codex traces to the same instance.", "docsHref": "https://docs.everstack.ai/getting-started/observability/coding-agents/codex", "assisted": [ { "title": "Expose the Everstack key", "description": "Keep the gateway credential in the environment so Codex can reference it without writing the secret into configuration.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"\nexport EVERSTACK_GATEWAY_URL=\"https://{instance}.{region}.everstack.ai\"" } }, { "title": "Give Codex the setup brief", "description": "Use Copy for agent below. Codex will inspect your user-level config, preserve unrelated settings, add the Everstack provider, and show the exact diff before it writes." }, { "title": "Restart and verify", "description": "Start a new Codex session, run one small tool-using request, then confirm the request and session trace both appear in Everstack.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "codex" } } ], "manual": [ { "title": "Set the API key", "description": "Export the key before launching Codex. Keep it out of config.toml and shell history where possible.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"" } }, { "title": "Add the provider and trace exporter", "description": "Add this to the user-level ~/.codex/config.toml. Provider and telemetry settings are machine-local, so Codex ignores them in a project-scoped config file.", "snippet": { "filename": "~/.codex/config.toml", "language": "toml", "fenceLanguage": "toml", "code": "model = \"@openai/gpt-5.3-codex\"\nmodel_provider = \"everstack\"\n\n[model_providers.everstack]\nname = \"Everstack\"\nbase_url = \"https://{instance}.{region}.everstack.ai/openai/v1\"\nenv_key = \"EVERSTACK_API_KEY\"\nwire_api = \"responses\"\n\n[otel]\ntrace_exporter = { otlp-http = { endpoint = \"https://{instance}.{region}.everstack.ai/v1/traces\", protocol = \"binary\", headers = { Authorization = \"Bearer ${EVERSTACK_API_KEY}\" } } }" } }, { "title": "Launch a fresh session", "description": "Restart Codex so provider and telemetry settings are loaded, then verify a model request and a trace in Everstack.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "codex" } } ], "prompt": { "title": "Connect Codex to Everstack AI Gateway", "summary": "Configure this machine so Codex routes Responses API traffic through Everstack and exports native Codex traces to the same instance.", "inspect": [ "Read the existing user-level ~/.codex/config.toml before editing it.", "Preserve every unrelated provider, profile, approval, sandbox, MCP, and notification setting.", "Confirm EVERSTACK_API_KEY exists without printing its value." ], "implement": [ "Add a custom model provider named everstack with the Everstack /v1 base URL, EVERSTACK_API_KEY as env_key, and the Responses wire API.", "Select @openai/gpt-5.3-codex unless the user already has a compatible Everstack model alias for coding.", "Configure the current Codex OTLP HTTP trace exporter for the Everstack /v1/traces endpoint.", "Keep the API key in the environment. Do not replace it with a literal secret in config.toml.", "Show the exact config diff before writing it." ], "verify": [ "Launch a new Codex session and complete one small request that invokes a tool.", "Confirm the model request is routed through Everstack.", "Confirm the new Codex conversation appears in Everstack traces." ] } }, { "id": "claude-code", "label": "Claude Code", "logo": "/harnesses/claude-code.svg", "logoAlt": "Claude Code", "capability": "Native telemetry", "summary": "Claude Code keeps its Anthropic model path. Everstack receives its native OTLP traces, metrics, and logs for session visibility.", "docsHref": "https://docs.everstack.ai/getting-started/observability/coding-agents/claude-code", "assisted": [ { "title": "Expose the Everstack key", "description": "Provide a scoped Everstack API key to the shell that launches Claude Code.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"" } }, { "title": "Give Claude Code the setup brief", "description": "Use Copy for agent below. Claude Code will add the native telemetry variables, preserve unrelated settings, and avoid changing its model endpoint." }, { "title": "Restart and inspect the trace", "description": "Telemetry initializes when Claude Code starts. Open a fresh session, use a tool, and confirm the span tree appears in Everstack.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "claude" } } ], "manual": [ { "title": "Enable native OpenTelemetry", "description": "Set these variables in the environment that launches Claude Code. Raw tool and prompt content stays disabled by default.", "snippet": { "filename": "shell profile", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"\nexport CLAUDE_CODE_ENABLE_TELEMETRY=1\nexport CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1\nexport OTEL_TRACES_EXPORTER=otlp\nexport OTEL_METRICS_EXPORTER=otlp\nexport OTEL_LOGS_EXPORTER=otlp\nexport OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf\nexport OTEL_EXPORTER_OTLP_ENDPOINT=\"https://{instance}.{region}.everstack.ai\"\nexport OTEL_EXPORTER_OTLP_HEADERS=\"Authorization=Bearer $EVERSTACK_API_KEY\"" } }, { "title": "Restart Claude Code", "description": "A new prompt in an existing process is not enough. Launch a new process after the environment is configured.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "claude" } }, { "title": "Verify session evidence", "description": "Run a small task with one tool call, then confirm the interaction, tool span, token counts, and latency in Everstack traces." } ], "prompt": { "title": "Send Claude Code telemetry to Everstack", "summary": "Configure Claude Code's native OpenTelemetry export for Everstack without changing its Anthropic model route.", "inspect": [ "Inspect ~/.claude/settings.json and the shell environment used to launch Claude Code.", "Preserve unrelated Claude Code settings and hooks.", "Confirm EVERSTACK_API_KEY exists without printing its value." ], "implement": [ "Enable Claude Code telemetry, enhanced trace spans, and OTLP HTTP export to the Everstack instance root.", "Send the Bearer credential from EVERSTACK_API_KEY.", "Do not change ANTHROPIC_BASE_URL or claim that Claude Code model traffic routes through the Everstack gateway.", "Leave raw prompt and tool content export disabled unless the user explicitly approves it.", "Show the exact settings or shell-profile diff before writing it." ], "verify": [ "Restart Claude Code after the configuration changes.", "Run one small task with a tool call.", "Confirm the session and tool spans appear in Everstack traces." ] } }, { "id": "cursor", "label": "Cursor", "logo": "/harnesses/cursor.svg", "logoAlt": "Cursor", "capability": "Ask and Plan routing", "summary": "Route Cursor Ask and Plan requests through Everstack. Agent, Composer, inline edit, and Tab continue to use Cursor's backend.", "docsHref": "https://docs.everstack.ai/getting-started/observability/coding-agents/cursor", "assisted": [ { "title": "Create a scoped gateway key", "description": "Use a key limited to the models and environment Cursor should reach." }, { "title": "Copy the Cursor setup brief", "description": "Use Copy for agent below. Cursor will verify the model alias and give you the exact settings values without editing unrelated preferences." }, { "title": "Test in Ask or Plan", "description": "Send a small chat request in a supported mode and confirm it appears in Everstack logs and traces." } ], "manual": [ { "title": "Open the model settings", "description": "In Cursor, open Settings, then Models, then API Keys. Select the OpenAI-compatible configuration." }, { "title": "Set the key and base URL", "description": "Use an Everstack gateway key and enable Override OpenAI Base URL.", "snippet": { "filename": "Cursor settings", "language": "plaintext", "fenceLanguage": "text", "code": "OpenAI API Key: \nOverride OpenAI Base URL: https://{instance}.{region}.everstack.ai/v1" } }, { "title": "Use a catalog model in Ask or Plan", "description": "Choose a model alias available in your Everstack catalog. Cursor only honors this route for Ask and Plan modes.", "snippet": { "filename": "model alias", "language": "plaintext", "fenceLanguage": "text", "code": "@openai/gpt-5.3-codex" } } ], "prompt": { "title": "Connect Cursor Ask and Plan to Everstack", "summary": "Prepare the exact Cursor settings needed to route supported chat requests through Everstack AI Gateway.", "inspect": [ "Confirm the Everstack instance URL and a scoped gateway API key are available.", "Confirm the desired coding model exists in the Everstack model catalog.", "Do not modify editor, privacy, or unrelated model settings." ], "implement": [ "Set the OpenAI API key to the Everstack gateway key.", "Enable Override OpenAI Base URL and use the Everstack /v1 endpoint.", "Select a model alias that exists in the Everstack catalog.", "Clearly state that only Cursor Ask and Plan modes honor the custom base URL." ], "verify": [ "Run one request in Cursor Ask or Plan mode.", "Confirm the request reaches the selected Everstack model.", "Confirm the request appears in Everstack logs and traces." ] } }, { "id": "github-copilot", "label": "GitHub Copilot", "logo": "/harnesses/github-copilot.svg", "logoAlt": "GitHub Copilot", "capability": "OpenAI-compatible BYOK", "summary": "Point Copilot CLI at Everstack's OpenAI-compatible endpoint with your own key and model alias.", "docsHref": "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models", "assisted": [ { "title": "Expose the provider settings", "description": "Keep the key in the environment and select an Everstack model that supports streaming and tool calling.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"\nexport COPILOT_PROVIDER_BASE_URL=\"https://{instance}.{region}.everstack.ai/v1\"\nexport COPILOT_PROVIDER_TYPE=\"openai\"\nexport COPILOT_PROVIDER_API_KEY=\"$EVERSTACK_API_KEY\"\nexport COPILOT_MODEL=\"@openai/gpt-5.3-codex\"" } }, { "title": "Give Copilot the setup brief", "description": "Use Copy for agent below. Copilot will inspect the current shell profile, add only the missing provider variables, and show the diff first." }, { "title": "Start a fresh CLI session", "description": "Launch Copilot after the environment is loaded, then verify a tool-using request in Everstack.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "copilot" } } ], "manual": [ { "title": "Configure the OpenAI-compatible provider", "description": "Set the provider URL, type, API key, and a model that supports streaming and tool calling.", "snippet": { "filename": "shell profile", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"\nexport COPILOT_PROVIDER_BASE_URL=\"https://{instance}.{region}.everstack.ai/v1\"\nexport COPILOT_PROVIDER_TYPE=\"openai\"\nexport COPILOT_PROVIDER_API_KEY=\"$EVERSTACK_API_KEY\"\nexport COPILOT_MODEL=\"@openai/gpt-5.3-codex\"" } }, { "title": "Launch Copilot CLI", "description": "Start a new process so it reads the provider variables from the environment.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "copilot" } }, { "title": "Verify the routed session", "description": "Run a small task with one tool call, then confirm model, token, latency, and routing evidence in Everstack." } ], "prompt": { "title": "Connect GitHub Copilot CLI to Everstack", "summary": "Configure GitHub Copilot CLI to use Everstack as its OpenAI-compatible model provider.", "inspect": [ "Inspect the current shell profile and existing COPILOT_PROVIDER variables before editing.", "Confirm EVERSTACK_API_KEY exists without printing its value.", "Confirm the selected Everstack model supports streaming and tool calling." ], "implement": [ "Set COPILOT_PROVIDER_TYPE to openai and COPILOT_PROVIDER_BASE_URL to the Everstack /v1 endpoint.", "Read the provider key from EVERSTACK_API_KEY and keep the secret out of source files.", "Use @openai/gpt-5.3-codex unless the user already has a compatible coding model alias.", "Preserve unrelated shell settings and show the exact diff before writing it." ], "verify": [ "Launch a new Copilot CLI process.", "Complete one small request that invokes a tool.", "Confirm the request appears in Everstack with the expected model and routing evidence." ] } } ], "examples": [ { "id": "everstack-node", "label": "Node.js SDK", "filename": "generate.ts", "language": "typescript", "fenceLanguage": "ts", "setup": "pnpm add @everstack/node", "code": "import Everstack from \"@everstack/node\";\n\nconst everstack = new Everstack({\n apiKey: process.env.EVERSTACK_API_KEY!,\n baseUrl: process.env.EVERSTACK_GATEWAY_URL,\n});\n\nconst stream = await everstack.chat.completions.create({\n model: \"@google/gemini-3.6-flash\",\n messages: [{ role: \"user\", content: \"Why is the sky blue?\" }],\n stream: true,\n});\n\nfor await (const chunk of stream) {\n process.stdout.write(chunk.choices[0]?.delta?.content ?? \"\");\n}" }, { "id": "everstack-python", "label": "Python SDK", "filename": "generate.py", "language": "python", "fenceLanguage": "python", "setup": "pip install everstack", "code": "import os\nfrom everstack import Everstack\n\neverstack = Everstack(\n api_key=os.environ[\"EVERSTACK_API_KEY\"],\n base_url=os.environ[\"EVERSTACK_GATEWAY_URL\"],\n)\n\nstream = everstack.chat.completions.create(\n model=\"@google/gemini-3.6-flash\",\n messages=[\n {\"role\": \"user\", \"content\": \"Why is the sky blue?\"}\n ],\n stream=True,\n)\n\nfor chunk in stream:\n if chunk.choices and chunk.choices[0].delta.content:\n print(chunk.choices[0].delta.content, end=\"\", flush=True)" }, { "id": "everstack-go", "label": "Go SDK", "filename": "main.go", "language": "go", "fenceLanguage": "go", "setup": "go get github.com/everstacklabs/everstack-go", "code": "package main\n\nimport (\n \"context\"\n \"fmt\"\n \"log\"\n \"os\"\n\n everstack \"github.com/everstacklabs/everstack-go\"\n)\n\nfunc main() {\n client := everstack.NewClient(\n os.Getenv(\"EVERSTACK_API_KEY\"),\n everstack.WithBaseURL(os.Getenv(\"EVERSTACK_GATEWAY_URL\")),\n )\n\n stream, err := client.Chat.Completions.CreateStream(\n context.Background(),\n &everstack.ChatCompletionParams{\n Model: \"@google/gemini-3.6-flash\",\n Messages: []everstack.Message{{\n Role: \"user\", Content: \"Why is the sky blue?\",\n }},\n },\n )\n if err != nil {\n log.Fatal(err)\n }\n defer stream.Close()\n\n for stream.Next() {\n chunk := stream.Current()\n if len(chunk.Choices) > 0 && chunk.Choices[0].Delta.Content != nil {\n fmt.Print(*chunk.Choices[0].Delta.Content)\n }\n }\n if err := stream.Err(); err != nil {\n log.Fatal(err)\n }\n}" }, { "id": "ai-sdk", "label": "AI SDK", "filename": "generate.ts", "language": "typescript", "fenceLanguage": "ts", "setup": "pnpm add ai @ai-sdk/openai-compatible", "code": "import { createOpenAICompatible } from \"@ai-sdk/openai-compatible\";\nimport { streamText } from \"ai\";\n\nconst everstack = createOpenAICompatible({\n name: \"everstack\",\n baseURL: `${process.env.EVERSTACK_GATEWAY_URL}/openai/v1`,\n apiKey: process.env.EVERSTACK_API_KEY!,\n});\n\nconst result = streamText({\n model: everstack(\"@google/gemini-3.6-flash\"),\n prompt: \"Why is the sky blue?\",\n});\n\nfor await (const chunk of result.textStream) {\n process.stdout.write(chunk);\n}" }, { "id": "openai-node", "label": "OpenAI SDK", "filename": "generate.ts", "language": "typescript", "fenceLanguage": "ts", "setup": "pnpm add openai", "code": "import OpenAI from \"openai\";\n\nconst everstack = new OpenAI({\n baseURL: `${process.env.EVERSTACK_GATEWAY_URL}/openai/v1`,\n apiKey: process.env.EVERSTACK_API_KEY,\n});\n\nconst stream = await everstack.chat.completions.create({\n model: \"@google/gemini-3.6-flash\",\n stream: true,\n messages: [\n { role: \"user\", content: \"Why is the sky blue?\" },\n ],\n});\n\nfor await (const chunk of stream) {\n process.stdout.write(chunk.choices[0]?.delta?.content ?? \"\");\n}" }, { "id": "curl", "label": "cURL", "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "curl \"$EVERSTACK_GATEWAY_URL/openai/v1/chat/completions\" \\\n -H \"Authorization: Bearer $EVERSTACK_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"model\": \"@google/gemini-3.6-flash\",\n \"stream\": true,\n \"messages\": [\n {\"role\": \"user\", \"content\": \"Why is the sky blue?\"}\n ]\n }'" } ], "prompt": { "title": "Call Gemini 3.6 Flash through Everstack AI Gateway", "summary": "Integrate this project with Everstack AI Gateway. Keep the existing application architecture intact and route the smallest useful model call through Everstack.", "inspect": [ "Inspect the project before editing and identify its existing model client, package manager, environment pattern, and streaming behavior.", "Reuse an existing OpenAI-compatible client or AI SDK integration when one is already present. Otherwise, prefer the native Everstack SDK for the project's language.", "If credentials are missing, ask the user to create a key in Everstack Dashboard > Settings > Vault > API Keys. The key is shown once." ], "implement": [ "Read EVERSTACK_GATEWAY_URL from the environment. It should point to the instance root, for example https://{instance}.{region}.everstack.ai.", "Read EVERSTACK_API_KEY from the environment. Never print it, commit it, or expose it to browser code.", "Use @google/gemini-3.6-flash for the reference request unless the project already uses a configured model alias.", "Preserve streaming when the current application streams responses.", "Keep routing, fallback, and provider credentials in Everstack rather than duplicating that policy in application code.", "Return actionable errors without logging credentials or full sensitive prompts." ], "verify": [ "Run the project's existing formatter, typecheck, and focused tests.", "Make one small request through the Everstack endpoint and confirm it completes or streams successfully.", "Confirm the request appears in Everstack traces with the selected model, latency, token use, and routing decision." ] }, "safeguards": [ { "label": "Project aware", "value": "The brief tells the agent to reuse the client and conventions already present." }, { "label": "Secret safe", "value": "Credentials stay in environment variables and out of source, logs, and browser code." }, { "label": "Evidence included", "value": "The task finishes only after a real request and its Everstack trace are verified." } ] }, "productAgentSkills": { "gateway": { "id": "gateway-model-call", "eyebrow": "Agent-ready integration", "title": "Route a model call through Everstack", "description": "Start with an Everstack SDK, keep an existing compatible client, or give the complete implementation brief to a coding agent.", "docsHref": "https://docs.everstack.ai/getting-started/gateway/overview", "codingAgents": [ { "id": "codex", "label": "Codex", "logo": "/providers/openai.svg", "logoAlt": "OpenAI", "capability": "Gateway and traces", "summary": "Use Everstack as Codex's Responses API provider, then send native Codex traces to the same instance.", "docsHref": "https://docs.everstack.ai/getting-started/observability/coding-agents/codex", "assisted": [ { "title": "Expose the Everstack key", "description": "Keep the gateway credential in the environment so Codex can reference it without writing the secret into configuration.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"\nexport EVERSTACK_GATEWAY_URL=\"https://{instance}.{region}.everstack.ai\"" } }, { "title": "Give Codex the setup brief", "description": "Use Copy for agent below. Codex will inspect your user-level config, preserve unrelated settings, add the Everstack provider, and show the exact diff before it writes." }, { "title": "Restart and verify", "description": "Start a new Codex session, run one small tool-using request, then confirm the request and session trace both appear in Everstack.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "codex" } } ], "manual": [ { "title": "Set the API key", "description": "Export the key before launching Codex. Keep it out of config.toml and shell history where possible.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"" } }, { "title": "Add the provider and trace exporter", "description": "Add this to the user-level ~/.codex/config.toml. Provider and telemetry settings are machine-local, so Codex ignores them in a project-scoped config file.", "snippet": { "filename": "~/.codex/config.toml", "language": "toml", "fenceLanguage": "toml", "code": "model = \"@openai/gpt-5.3-codex\"\nmodel_provider = \"everstack\"\n\n[model_providers.everstack]\nname = \"Everstack\"\nbase_url = \"https://{instance}.{region}.everstack.ai/openai/v1\"\nenv_key = \"EVERSTACK_API_KEY\"\nwire_api = \"responses\"\n\n[otel]\ntrace_exporter = { otlp-http = { endpoint = \"https://{instance}.{region}.everstack.ai/v1/traces\", protocol = \"binary\", headers = { Authorization = \"Bearer ${EVERSTACK_API_KEY}\" } } }" } }, { "title": "Launch a fresh session", "description": "Restart Codex so provider and telemetry settings are loaded, then verify a model request and a trace in Everstack.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "codex" } } ], "prompt": { "title": "Connect Codex to Everstack AI Gateway", "summary": "Configure this machine so Codex routes Responses API traffic through Everstack and exports native Codex traces to the same instance.", "inspect": [ "Read the existing user-level ~/.codex/config.toml before editing it.", "Preserve every unrelated provider, profile, approval, sandbox, MCP, and notification setting.", "Confirm EVERSTACK_API_KEY exists without printing its value." ], "implement": [ "Add a custom model provider named everstack with the Everstack /v1 base URL, EVERSTACK_API_KEY as env_key, and the Responses wire API.", "Select @openai/gpt-5.3-codex unless the user already has a compatible Everstack model alias for coding.", "Configure the current Codex OTLP HTTP trace exporter for the Everstack /v1/traces endpoint.", "Keep the API key in the environment. Do not replace it with a literal secret in config.toml.", "Show the exact config diff before writing it." ], "verify": [ "Launch a new Codex session and complete one small request that invokes a tool.", "Confirm the model request is routed through Everstack.", "Confirm the new Codex conversation appears in Everstack traces." ] } }, { "id": "claude-code", "label": "Claude Code", "logo": "/harnesses/claude-code.svg", "logoAlt": "Claude Code", "capability": "Native telemetry", "summary": "Claude Code keeps its Anthropic model path. Everstack receives its native OTLP traces, metrics, and logs for session visibility.", "docsHref": "https://docs.everstack.ai/getting-started/observability/coding-agents/claude-code", "assisted": [ { "title": "Expose the Everstack key", "description": "Provide a scoped Everstack API key to the shell that launches Claude Code.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"" } }, { "title": "Give Claude Code the setup brief", "description": "Use Copy for agent below. Claude Code will add the native telemetry variables, preserve unrelated settings, and avoid changing its model endpoint." }, { "title": "Restart and inspect the trace", "description": "Telemetry initializes when Claude Code starts. Open a fresh session, use a tool, and confirm the span tree appears in Everstack.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "claude" } } ], "manual": [ { "title": "Enable native OpenTelemetry", "description": "Set these variables in the environment that launches Claude Code. Raw tool and prompt content stays disabled by default.", "snippet": { "filename": "shell profile", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"\nexport CLAUDE_CODE_ENABLE_TELEMETRY=1\nexport CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1\nexport OTEL_TRACES_EXPORTER=otlp\nexport OTEL_METRICS_EXPORTER=otlp\nexport OTEL_LOGS_EXPORTER=otlp\nexport OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf\nexport OTEL_EXPORTER_OTLP_ENDPOINT=\"https://{instance}.{region}.everstack.ai\"\nexport OTEL_EXPORTER_OTLP_HEADERS=\"Authorization=Bearer $EVERSTACK_API_KEY\"" } }, { "title": "Restart Claude Code", "description": "A new prompt in an existing process is not enough. Launch a new process after the environment is configured.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "claude" } }, { "title": "Verify session evidence", "description": "Run a small task with one tool call, then confirm the interaction, tool span, token counts, and latency in Everstack traces." } ], "prompt": { "title": "Send Claude Code telemetry to Everstack", "summary": "Configure Claude Code's native OpenTelemetry export for Everstack without changing its Anthropic model route.", "inspect": [ "Inspect ~/.claude/settings.json and the shell environment used to launch Claude Code.", "Preserve unrelated Claude Code settings and hooks.", "Confirm EVERSTACK_API_KEY exists without printing its value." ], "implement": [ "Enable Claude Code telemetry, enhanced trace spans, and OTLP HTTP export to the Everstack instance root.", "Send the Bearer credential from EVERSTACK_API_KEY.", "Do not change ANTHROPIC_BASE_URL or claim that Claude Code model traffic routes through the Everstack gateway.", "Leave raw prompt and tool content export disabled unless the user explicitly approves it.", "Show the exact settings or shell-profile diff before writing it." ], "verify": [ "Restart Claude Code after the configuration changes.", "Run one small task with a tool call.", "Confirm the session and tool spans appear in Everstack traces." ] } }, { "id": "cursor", "label": "Cursor", "logo": "/harnesses/cursor.svg", "logoAlt": "Cursor", "capability": "Ask and Plan routing", "summary": "Route Cursor Ask and Plan requests through Everstack. Agent, Composer, inline edit, and Tab continue to use Cursor's backend.", "docsHref": "https://docs.everstack.ai/getting-started/observability/coding-agents/cursor", "assisted": [ { "title": "Create a scoped gateway key", "description": "Use a key limited to the models and environment Cursor should reach." }, { "title": "Copy the Cursor setup brief", "description": "Use Copy for agent below. Cursor will verify the model alias and give you the exact settings values without editing unrelated preferences." }, { "title": "Test in Ask or Plan", "description": "Send a small chat request in a supported mode and confirm it appears in Everstack logs and traces." } ], "manual": [ { "title": "Open the model settings", "description": "In Cursor, open Settings, then Models, then API Keys. Select the OpenAI-compatible configuration." }, { "title": "Set the key and base URL", "description": "Use an Everstack gateway key and enable Override OpenAI Base URL.", "snippet": { "filename": "Cursor settings", "language": "plaintext", "fenceLanguage": "text", "code": "OpenAI API Key: \nOverride OpenAI Base URL: https://{instance}.{region}.everstack.ai/v1" } }, { "title": "Use a catalog model in Ask or Plan", "description": "Choose a model alias available in your Everstack catalog. Cursor only honors this route for Ask and Plan modes.", "snippet": { "filename": "model alias", "language": "plaintext", "fenceLanguage": "text", "code": "@openai/gpt-5.3-codex" } } ], "prompt": { "title": "Connect Cursor Ask and Plan to Everstack", "summary": "Prepare the exact Cursor settings needed to route supported chat requests through Everstack AI Gateway.", "inspect": [ "Confirm the Everstack instance URL and a scoped gateway API key are available.", "Confirm the desired coding model exists in the Everstack model catalog.", "Do not modify editor, privacy, or unrelated model settings." ], "implement": [ "Set the OpenAI API key to the Everstack gateway key.", "Enable Override OpenAI Base URL and use the Everstack /v1 endpoint.", "Select a model alias that exists in the Everstack catalog.", "Clearly state that only Cursor Ask and Plan modes honor the custom base URL." ], "verify": [ "Run one request in Cursor Ask or Plan mode.", "Confirm the request reaches the selected Everstack model.", "Confirm the request appears in Everstack logs and traces." ] } }, { "id": "github-copilot", "label": "GitHub Copilot", "logo": "/harnesses/github-copilot.svg", "logoAlt": "GitHub Copilot", "capability": "OpenAI-compatible BYOK", "summary": "Point Copilot CLI at Everstack's OpenAI-compatible endpoint with your own key and model alias.", "docsHref": "https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models", "assisted": [ { "title": "Expose the provider settings", "description": "Keep the key in the environment and select an Everstack model that supports streaming and tool calling.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"\nexport COPILOT_PROVIDER_BASE_URL=\"https://{instance}.{region}.everstack.ai/v1\"\nexport COPILOT_PROVIDER_TYPE=\"openai\"\nexport COPILOT_PROVIDER_API_KEY=\"$EVERSTACK_API_KEY\"\nexport COPILOT_MODEL=\"@openai/gpt-5.3-codex\"" } }, { "title": "Give Copilot the setup brief", "description": "Use Copy for agent below. Copilot will inspect the current shell profile, add only the missing provider variables, and show the diff first." }, { "title": "Start a fresh CLI session", "description": "Launch Copilot after the environment is loaded, then verify a tool-using request in Everstack.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "copilot" } } ], "manual": [ { "title": "Configure the OpenAI-compatible provider", "description": "Set the provider URL, type, API key, and a model that supports streaming and tool calling.", "snippet": { "filename": "shell profile", "language": "bash", "fenceLanguage": "bash", "code": "export EVERSTACK_API_KEY=\"\"\nexport COPILOT_PROVIDER_BASE_URL=\"https://{instance}.{region}.everstack.ai/v1\"\nexport COPILOT_PROVIDER_TYPE=\"openai\"\nexport COPILOT_PROVIDER_API_KEY=\"$EVERSTACK_API_KEY\"\nexport COPILOT_MODEL=\"@openai/gpt-5.3-codex\"" } }, { "title": "Launch Copilot CLI", "description": "Start a new process so it reads the provider variables from the environment.", "snippet": { "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "copilot" } }, { "title": "Verify the routed session", "description": "Run a small task with one tool call, then confirm model, token, latency, and routing evidence in Everstack." } ], "prompt": { "title": "Connect GitHub Copilot CLI to Everstack", "summary": "Configure GitHub Copilot CLI to use Everstack as its OpenAI-compatible model provider.", "inspect": [ "Inspect the current shell profile and existing COPILOT_PROVIDER variables before editing.", "Confirm EVERSTACK_API_KEY exists without printing its value.", "Confirm the selected Everstack model supports streaming and tool calling." ], "implement": [ "Set COPILOT_PROVIDER_TYPE to openai and COPILOT_PROVIDER_BASE_URL to the Everstack /v1 endpoint.", "Read the provider key from EVERSTACK_API_KEY and keep the secret out of source files.", "Use @openai/gpt-5.3-codex unless the user already has a compatible coding model alias.", "Preserve unrelated shell settings and show the exact diff before writing it." ], "verify": [ "Launch a new Copilot CLI process.", "Complete one small request that invokes a tool.", "Confirm the request appears in Everstack with the expected model and routing evidence." ] } } ], "examples": [ { "id": "everstack-node", "label": "Node.js SDK", "filename": "generate.ts", "language": "typescript", "fenceLanguage": "ts", "setup": "pnpm add @everstack/node", "code": "import Everstack from \"@everstack/node\";\n\nconst everstack = new Everstack({\n apiKey: process.env.EVERSTACK_API_KEY!,\n baseUrl: process.env.EVERSTACK_GATEWAY_URL,\n});\n\nconst stream = await everstack.chat.completions.create({\n model: \"@google/gemini-3.6-flash\",\n messages: [{ role: \"user\", content: \"Why is the sky blue?\" }],\n stream: true,\n});\n\nfor await (const chunk of stream) {\n process.stdout.write(chunk.choices[0]?.delta?.content ?? \"\");\n}" }, { "id": "everstack-python", "label": "Python SDK", "filename": "generate.py", "language": "python", "fenceLanguage": "python", "setup": "pip install everstack", "code": "import os\nfrom everstack import Everstack\n\neverstack = Everstack(\n api_key=os.environ[\"EVERSTACK_API_KEY\"],\n base_url=os.environ[\"EVERSTACK_GATEWAY_URL\"],\n)\n\nstream = everstack.chat.completions.create(\n model=\"@google/gemini-3.6-flash\",\n messages=[\n {\"role\": \"user\", \"content\": \"Why is the sky blue?\"}\n ],\n stream=True,\n)\n\nfor chunk in stream:\n if chunk.choices and chunk.choices[0].delta.content:\n print(chunk.choices[0].delta.content, end=\"\", flush=True)" }, { "id": "everstack-go", "label": "Go SDK", "filename": "main.go", "language": "go", "fenceLanguage": "go", "setup": "go get github.com/everstacklabs/everstack-go", "code": "package main\n\nimport (\n \"context\"\n \"fmt\"\n \"log\"\n \"os\"\n\n everstack \"github.com/everstacklabs/everstack-go\"\n)\n\nfunc main() {\n client := everstack.NewClient(\n os.Getenv(\"EVERSTACK_API_KEY\"),\n everstack.WithBaseURL(os.Getenv(\"EVERSTACK_GATEWAY_URL\")),\n )\n\n stream, err := client.Chat.Completions.CreateStream(\n context.Background(),\n &everstack.ChatCompletionParams{\n Model: \"@google/gemini-3.6-flash\",\n Messages: []everstack.Message{{\n Role: \"user\", Content: \"Why is the sky blue?\",\n }},\n },\n )\n if err != nil {\n log.Fatal(err)\n }\n defer stream.Close()\n\n for stream.Next() {\n chunk := stream.Current()\n if len(chunk.Choices) > 0 && chunk.Choices[0].Delta.Content != nil {\n fmt.Print(*chunk.Choices[0].Delta.Content)\n }\n }\n if err := stream.Err(); err != nil {\n log.Fatal(err)\n }\n}" }, { "id": "ai-sdk", "label": "AI SDK", "filename": "generate.ts", "language": "typescript", "fenceLanguage": "ts", "setup": "pnpm add ai @ai-sdk/openai-compatible", "code": "import { createOpenAICompatible } from \"@ai-sdk/openai-compatible\";\nimport { streamText } from \"ai\";\n\nconst everstack = createOpenAICompatible({\n name: \"everstack\",\n baseURL: `${process.env.EVERSTACK_GATEWAY_URL}/openai/v1`,\n apiKey: process.env.EVERSTACK_API_KEY!,\n});\n\nconst result = streamText({\n model: everstack(\"@google/gemini-3.6-flash\"),\n prompt: \"Why is the sky blue?\",\n});\n\nfor await (const chunk of result.textStream) {\n process.stdout.write(chunk);\n}" }, { "id": "openai-node", "label": "OpenAI SDK", "filename": "generate.ts", "language": "typescript", "fenceLanguage": "ts", "setup": "pnpm add openai", "code": "import OpenAI from \"openai\";\n\nconst everstack = new OpenAI({\n baseURL: `${process.env.EVERSTACK_GATEWAY_URL}/openai/v1`,\n apiKey: process.env.EVERSTACK_API_KEY,\n});\n\nconst stream = await everstack.chat.completions.create({\n model: \"@google/gemini-3.6-flash\",\n stream: true,\n messages: [\n { role: \"user\", content: \"Why is the sky blue?\" },\n ],\n});\n\nfor await (const chunk of stream) {\n process.stdout.write(chunk.choices[0]?.delta?.content ?? \"\");\n}" }, { "id": "curl", "label": "cURL", "filename": "terminal", "language": "bash", "fenceLanguage": "bash", "code": "curl \"$EVERSTACK_GATEWAY_URL/openai/v1/chat/completions\" \\\n -H \"Authorization: Bearer $EVERSTACK_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"model\": \"@google/gemini-3.6-flash\",\n \"stream\": true,\n \"messages\": [\n {\"role\": \"user\", \"content\": \"Why is the sky blue?\"}\n ]\n }'" } ], "prompt": { "title": "Call Gemini 3.6 Flash through Everstack AI Gateway", "summary": "Integrate this project with Everstack AI Gateway. Keep the existing application architecture intact and route the smallest useful model call through Everstack.", "inspect": [ "Inspect the project before editing and identify its existing model client, package manager, environment pattern, and streaming behavior.", "Reuse an existing OpenAI-compatible client or AI SDK integration when one is already present. Otherwise, prefer the native Everstack SDK for the project's language.", "If credentials are missing, ask the user to create a key in Everstack Dashboard > Settings > Vault > API Keys. The key is shown once." ], "implement": [ "Read EVERSTACK_GATEWAY_URL from the environment. It should point to the instance root, for example https://{instance}.{region}.everstack.ai.", "Read EVERSTACK_API_KEY from the environment. Never print it, commit it, or expose it to browser code.", "Use @google/gemini-3.6-flash for the reference request unless the project already uses a configured model alias.", "Preserve streaming when the current application streams responses.", "Keep routing, fallback, and provider credentials in Everstack rather than duplicating that policy in application code.", "Return actionable errors without logging credentials or full sensitive prompts." ], "verify": [ "Run the project's existing formatter, typecheck, and focused tests.", "Make one small request through the Everstack endpoint and confirm it completes or streams successfully.", "Confirm the request appears in Everstack traces with the selected model, latency, token use, and routing decision." ] }, "safeguards": [ { "label": "Project aware", "value": "The brief tells the agent to reuse the client and conventions already present." }, { "label": "Secret safe", "value": "Credentials stay in environment variables and out of source, logs, and browser code." }, { "label": "Evidence included", "value": "The task finishes only after a real request and its Everstack trace are verified." } ] } } } ``` ## Pricing, allowances, and metered usage All prices are public configuration values. Provider inference charges remain separate unless explicitly stated. ```json { "plans": [ { "tier": "free", "name": "Starter", "description": "Try Everstack and ship your first workload", "pricing": { "monthly": "$0", "yearly": "$0" }, "seatsIncluded": 1, "seatDisplay": "1 seat", "sessionRetentionDays": 7, "features": [ { "name": "AI Gateway & platform API", "included": true }, { "name": "Always-on agents", "included": true }, { "name": "Slack, Discord & Telegram connections", "included": true }, { "name": "Live browser viewport", "included": false }, { "name": "Evaluations & experiments", "included": true }, { "name": "Alerts & notifications", "included": false }, { "name": "Isolated execution environments", "included": true }, { "name": "Dedicated execution pools", "included": true }, { "name": "External vector memory", "included": false } ], "usageLimits": [ { "metric": "requests/min", "value": 60, "display": "60 requests/min" }, { "metric": "tokens/month", "value": 1000000, "display": "1M tokens/month" }, { "metric": "API requests/month", "value": 10000, "display": "10K API requests/month" }, { "metric": "storage", "value": 524288000, "display": "500 MB storage" }, { "metric": "Hosted sites", "value": 3, "display": "3 Hosted sites" }, { "metric": "Hosting storage bytes", "value": 524288000, "display": "524M Hosting storage bytes" }, { "metric": "dataset items", "value": 1000, "display": "1K dataset items" }, { "metric": "evaluation runs/month", "value": 5, "display": "5 evaluation runs/month" }, { "metric": "annotation queues", "value": 1, "display": "1 annotation queues" }, { "metric": "agent definitions", "value": 3, "display": "3 agent definitions" }, { "metric": "always-on agents", "value": 1, "display": "1 always-on agents" }, { "metric": "concurrent agent runs", "value": 1, "display": "1 concurrent agent runs" }, { "metric": "concurrent sandboxes", "value": 10, "display": "10 concurrent sandboxes" }, { "metric": "concurrent browser sessions", "value": 2, "display": "2 concurrent browser sessions" }, { "metric": "maximum browser session", "value": 900, "display": "15 minutes maximum browser session" }, { "metric": "sandbox memory", "value": 512, "display": "512 MB sandbox memory" }, { "metric": "channel messages/month", "value": 1000, "display": "1K channel messages/month" }, { "metric": "connected channels", "value": 3, "display": "3 connected channels" }, { "metric": "agent channel connections", "value": 3, "display": "3 agent channel connections" }, { "metric": "delegation depth", "value": 1, "display": "1 delegation depth" }, { "metric": "days of session history", "value": 7, "display": "7 days of session history" } ] }, { "tier": "basic", "name": "Build", "description": "For building production AI applications", "pricing": { "monthly": "$20", "yearly": "$200", "discounted": "$200", "suggested": "2 months free with annual billing", "per_seat": { "monthly": "$15", "yearly": "$150", "subText": "per additional seat beyond 3 included" } }, "seatsIncluded": 3, "seatDisplay": "3 seats included", "sessionRetentionDays": 30, "storageOverage": { "label": "+ $0.03/GB-month", "title": "Additional object & artifact storage", "detail": "+$0.03 per GB-month over 5 GB. Configured rate preview only. Automatic storage-overage billing is not yet enabled; this does not increase your storage limit. Separate from observability retention, Sites deployment storage, and sandbox disks.", "preview": true }, "features": [ { "name": "AI Gateway & platform API", "included": true }, { "name": "Always-on agents", "included": true }, { "name": "Slack, Discord & Telegram connections", "included": true }, { "name": "Live browser viewport", "included": true }, { "name": "Evaluations & experiments", "included": true }, { "name": "Alerts & notifications", "included": false }, { "name": "Isolated execution environments", "included": true }, { "name": "Dedicated execution pools", "included": true }, { "name": "External vector memory", "included": false } ], "usageLimits": [ { "metric": "requests/min", "value": 600, "display": "600 requests/min" }, { "metric": "tokens/month", "value": 10000000, "display": "10M tokens/month", "note": "+$0.50 per 1M tokens over 10M" }, { "metric": "API requests/month", "value": 100000, "display": "100K API requests/month", "note": "+$0.01 per 1k requests over 100k" }, { "metric": "storage", "value": 5368709120, "display": "5 GB storage", "note": "+$0.03 per GB-month over 5 GB" }, { "metric": "Hosted sites", "value": 10, "display": "10 Hosted sites" }, { "metric": "Hosting storage bytes", "value": 5368709120, "display": "5.37B Hosting storage bytes" }, { "metric": "dataset items", "value": 50000, "display": "50K dataset items" }, { "metric": "evaluation runs/month", "value": 50, "display": "50 evaluation runs/month" }, { "metric": "annotation queues", "value": 5, "display": "5 annotation queues" }, { "metric": "always-on agent instances", "value": 3, "display": "3 always-on agent instances" }, { "metric": "agent definitions", "value": 10, "display": "10 agent definitions" }, { "metric": "always-on agents", "value": 3, "display": "3 always-on agents" }, { "metric": "concurrent agent runs", "value": 3, "display": "3 concurrent agent runs" }, { "metric": "concurrent sandboxes", "value": 50, "display": "50 concurrent sandboxes" }, { "metric": "concurrent browser sessions", "value": 10, "display": "10 concurrent browser sessions" }, { "metric": "maximum browser session", "value": 3600, "display": "1 hour maximum browser session" }, { "metric": "sandbox memory", "value": 1024, "display": "1 GB sandbox memory" }, { "metric": "channel messages/month", "value": 15000, "display": "15K channel messages/month" }, { "metric": "connected channels", "value": "Unlimited", "display": "Unlimited connected channels" }, { "metric": "agent channel connections", "value": "Unlimited", "display": "Unlimited agent channel connections" }, { "metric": "delegation depth", "value": 2, "display": "2 delegation depth" }, { "metric": "days of session history", "value": 30, "display": "30 days of session history" } ] }, { "tier": "pro", "name": "Scale", "description": "For scaling production workloads", "pricing": { "monthly": "$100", "yearly": "$1,000", "discounted": "$1,000", "suggested": "2 months free with annual billing", "per_seat": { "monthly": "$39", "yearly": "$390", "subText": "per additional seat beyond 10 included" } }, "seatsIncluded": 10, "seatDisplay": "10 seats included", "sessionRetentionDays": 90, "storageOverage": { "label": "+ $0.03/GB-month", "title": "Additional object & artifact storage", "detail": "+$0.03 per GB-month over 50 GB. Configured rate preview only. Automatic storage-overage billing is not yet enabled; this does not increase your storage limit. Separate from observability retention, Sites deployment storage, and sandbox disks.", "preview": true }, "features": [ { "name": "AI Gateway & platform API", "included": true }, { "name": "Advanced analytics", "included": true }, { "name": "Custom integrations", "included": true }, { "name": "Always-on agent instances", "included": true }, { "name": "Always-on agents", "included": true }, { "name": "Slack, Discord & Telegram connections", "included": true }, { "name": "Multi-agent delegation", "included": true }, { "name": "Live browser viewport", "included": true }, { "name": "Evaluations & experiments", "included": true }, { "name": "Alerts & notifications", "included": true }, { "name": "Isolated execution environments", "included": true }, { "name": "Dedicated execution pools", "included": true }, { "name": "External vector memory", "included": true } ], "usageLimits": [ { "metric": "requests/min", "value": 6000, "display": "6K requests/min" }, { "metric": "tokens/month", "value": 100000000, "display": "100M tokens/month", "note": "+$0.50 per 1M tokens over 100M" }, { "metric": "API requests/month", "value": 1000000, "display": "1M API requests/month", "note": "+$0.01 per 1k requests over 1M" }, { "metric": "storage", "value": 53687091200, "display": "50 GB storage", "note": "+$0.03 per GB-month over 50 GB" }, { "metric": "Hosted sites", "value": 30, "display": "30 Hosted sites" }, { "metric": "Hosting storage bytes", "value": 53687091200, "display": "53.7B Hosting storage bytes" }, { "metric": "dataset items", "value": 500000, "display": "500K dataset items" }, { "metric": "evaluation runs/month", "value": 500, "display": "500 evaluation runs/month" }, { "metric": "annotation queues", "value": 25, "display": "25 annotation queues" }, { "metric": "always-on agent instances", "value": 10, "display": "10 always-on agent instances" }, { "metric": "agent definitions", "value": 30, "display": "30 agent definitions" }, { "metric": "always-on agents", "value": 10, "display": "10 always-on agents" }, { "metric": "concurrent agent runs", "value": 10, "display": "10 concurrent agent runs" }, { "metric": "concurrent sandboxes", "value": 50, "display": "50 concurrent sandboxes" }, { "metric": "concurrent browser sessions", "value": 25, "display": "25 concurrent browser sessions" }, { "metric": "maximum browser session", "value": 14400, "display": "4 hours maximum browser session" }, { "metric": "sandbox memory", "value": 4096, "display": "4 GB sandbox memory" }, { "metric": "channel messages/month", "value": 100000, "display": "100K channel messages/month" }, { "metric": "connected channels", "value": "Unlimited", "display": "Unlimited connected channels" }, { "metric": "agent channel connections", "value": "Unlimited", "display": "Unlimited agent channel connections" }, { "metric": "delegation depth", "value": 5, "display": "5 delegation depth" }, { "metric": "days of session history", "value": 90, "display": "90 days of session history" } ] }, { "tier": "enterprise", "name": "Enterprise", "description": "For large organizations", "pricing": { "monthly": "Custom", "yearly": "Custom" }, "seatsIncluded": "Unlimited", "seatDisplay": "Unlimited seats", "sessionRetentionDays": -1, "features": [ { "name": "AI Gateway & platform API", "included": true }, { "name": "Advanced analytics", "included": true }, { "name": "Custom integrations", "included": true }, { "name": "SSO & SAML", "included": true }, { "name": "Audit logs", "included": true }, { "name": "Always-on agent instances", "included": true }, { "name": "Always-on agents", "included": true }, { "name": "Slack, Discord & Telegram connections", "included": true }, { "name": "Multi-agent delegation", "included": true }, { "name": "Live browser viewport", "included": true }, { "name": "Evaluations & experiments", "included": true }, { "name": "Alerts & notifications", "included": true }, { "name": "Isolated execution environments", "included": true }, { "name": "Dedicated execution pools", "included": true }, { "name": "External vector memory", "included": true } ], "usageLimits": [ { "metric": "requests/min", "value": "Unlimited", "display": "Unlimited requests/min" }, { "metric": "tokens/month", "value": "Unlimited", "display": "Unlimited tokens/month" }, { "metric": "API requests/month", "value": "Unlimited", "display": "Unlimited API requests/month" }, { "metric": "storage", "value": "Unlimited", "display": "Unlimited storage" }, { "metric": "Hosted sites", "value": "Unlimited", "display": "Unlimited Hosted sites" }, { "metric": "Hosting storage bytes", "value": "Unlimited", "display": "Unlimited Hosting storage bytes" }, { "metric": "dataset items", "value": "Unlimited", "display": "Unlimited dataset items" }, { "metric": "evaluation runs/month", "value": "Unlimited", "display": "Unlimited evaluation runs/month" }, { "metric": "annotation queues", "value": "Unlimited", "display": "Unlimited annotation queues" }, { "metric": "always-on agent instances", "value": "Unlimited", "display": "Unlimited always-on agent instances" }, { "metric": "agent definitions", "value": "Unlimited", "display": "Unlimited agent definitions" }, { "metric": "always-on agents", "value": "Unlimited", "display": "Unlimited always-on agents" }, { "metric": "concurrent agent runs", "value": "Unlimited", "display": "Unlimited concurrent agent runs" }, { "metric": "concurrent sandboxes", "value": "Unlimited", "display": "Unlimited concurrent sandboxes" }, { "metric": "concurrent browser sessions", "value": "Unlimited", "display": "Unlimited concurrent browser sessions" }, { "metric": "maximum browser session", "value": "Unlimited", "display": "Unlimited maximum browser session" }, { "metric": "sandbox memory", "value": "Unlimited", "display": "Unlimited sandbox memory" }, { "metric": "channel messages/month", "value": "Unlimited", "display": "Unlimited channel messages/month" }, { "metric": "connected channels", "value": "Unlimited", "display": "Unlimited connected channels" }, { "metric": "agent channel connections", "value": "Unlimited", "display": "Unlimited agent channel connections" }, { "metric": "delegation depth", "value": "Unlimited", "display": "Unlimited delegation depth" }, { "metric": "days of session history", "value": "Unlimited", "display": "Unlimited days of session history" } ] } ], "sandboxCompute": { "currency": "USD", "starterCreditUsd": 5, "cpuPerVcpuHour": 0.0504, "memoryPerGibSecond": 0.0000045, "memoryPerGibHour": 0.0162, "diskPerGibSecond": 4.629e-8, "diskPerGibHour": 0.000166644, "platformPerSandboxHour": 0, "includedDiskGib": 20, "higherDiskTierThresholdGib": 50, "higherDiskTierMultiplier": 1.25, "sizes": [ { "id": "nano", "label": "Nano", "vcpu": 0.5, "memory_gib": 0.5, "disk_gib": 20 }, { "id": "small", "label": "Small", "vcpu": 1, "memory_gib": 1, "disk_gib": 20 }, { "id": "medium", "label": "Medium", "vcpu": 2, "memory_gib": 2, "disk_gib": 20 }, { "id": "large", "label": "Large", "vcpu": 4, "memory_gib": 4, "disk_gib": 20 }, { "id": "xlarge", "label": "XL", "vcpu": 8, "memory_gib": 8, "disk_gib": 20 } ] }, "siteDelivery": { "currency": "USD", "edgeRequestsPerMillion": 2, "transferPerGb": 0.1, "storagePerGbMonth": 0.03, "planAllowances": { "Starter": { "edgeRequests": 100000, "transferBytes": 10000000000, "storageBytes": 500000000, "overageEnabled": false, "custom": false }, "Build": { "edgeRequests": 1000000, "transferBytes": 100000000000, "storageBytes": 5000000000, "overageEnabled": true, "custom": false }, "Scale": { "edgeRequests": 5000000, "transferBytes": 500000000000, "storageBytes": 25000000000, "overageEnabled": true, "custom": false }, "Enterprise": { "overageEnabled": true, "custom": true } } }, "browserRuntime": { "currency": "USD", "browserHour": 0.01, "billingIncrementSeconds": 1, "minimumSessionSeconds": 60, "idlePoolBilling": false }, "usageCredits": { "currency": "USD", "inferenceMarkup": 1.4, "processedDataPerGib": 3, "freePlanProcessedDataPerGib": 4, "retentionPerGibMonth": 0.5, "scoresPerThousand": 1.5, "freePlanScoresPerThousand": 2.5 }, "faq": [ { "question": "Is Everstack free to use?", "answer": "Yes. The Starter plan has no platform subscription fee and every new organization receives $5 of managed sandbox compute credit with no card required. Add billing only when the credit is used up and you want compute to continue. Hosted browser runtime remains a separate meter." }, { "question": "Are sandboxes included with the Starter plan?", "answer": "Every new organization starts with $5 of sandbox compute credit. Choose a fixed sandbox size and use it without adding a payment method. When the credit is exhausted, running compute stops and Everstack asks you to add billing. Sleeping, archived, terminated, and failed-to-provision sandboxes do not consume credit." }, { "question": "How are hosted browser sessions billed?", "answer": "A browser session is billed separately from its agent sandbox because Everstack allocates an additional tenant-isolated Chromium runtime. Active sessions cost $0.01 per browser hour with a one-minute minimum and per-second billing after that. Warm-pool idle time is not charged." }, { "question": "What happens when I hit my usage limits?", "answer": "The $5 sandbox starter credit is a one-time organization credit, not a monthly allowance. Sandbox compute stops when it is exhausted and resumes after billing is added. Other Starter limits reset on their published cycle; paid usage continues up to the spend controls you configure." }, { "question": "Do you charge per channel connection?", "answer": "No. Every plan reaches Slack, Discord, and Telegram, and every paid plan connects an unlimited number of channels. Starter includes three so you can run a real workspace before paying anything. Channel usage is metered by messages per month, not by how many workspaces, servers, or groups you connect, so wiring an agent into another channel never changes your bill. Self-hosted Community Edition instances have no channel limit at all." }, { "question": "How does per-seat pricing work?", "answer": "Each paid plan includes a set number of seats. Build includes 3 seats and Scale includes 10. Additional seats can be added at the per-seat rate shown on each plan." }, { "question": "Do I need to change my existing API calls?", "answer": "Everstack provides an OpenAI-compatible API, so most applications can switch by simply changing the base URL. No code changes to your prompt logic are required." }, { "question": "Does evs.run execute my backend or build my site?", "answer": "No. evs.run is a static serving plane, not an application runtime. Build in your local environment, CI system, coding harness, or Everstack sandbox, then publish the generated directory for immutable edge delivery." }, { "question": "How is Sites usage billed?", "answer": "There is no fee per site or deployment. Usage is pooled across your workspace and measured by edge requests, data transferred to visitors, and retained deployment storage. Storage includes every immutable version, not only the active release." }, { "question": "Can I switch between monthly and yearly billing?", "answer": "Yes. You can switch at any time. When switching to yearly, you pay for 10 months and get 2 months free. Changes take effect at the start of your next billing cycle." }, { "question": "What is the Enterprise plan?", "answer": "Enterprise is for organizations needing SSO/SAML, audit logs, custom integrations, SLA guarantees, and unlimited usage. Contact our sales team for custom pricing tailored to your needs." } ] } ``` ## Platform comparison data Comparison values use yes, partial, planned, and no. Proof links are included with the source rows and columns. ```json { "proof": { "truefoundryGateway": { "label": "TrueFoundry Gateway", "href": "https://docs.truefoundry.com/gateway/load-balancing-overview" }, "truefoundryOverview": { "label": "TrueFoundry Overview", "href": "https://docs.truefoundry.com/gateway" }, "truefoundryObservability": { "label": "TrueFoundry OTEL", "href": "https://docs.truefoundry.com/gateway/opentelemetry" }, "truefoundryMcp": { "label": "TrueFoundry MCP", "href": "https://docs.truefoundry.com/ai-gateway/mcp-overview" }, "truefoundryProxy": { "label": "TrueFoundry Proxy API", "href": "https://truefoundry.com/docs/ai-gateway/proxy-api" }, "portkeyGateway": { "label": "Portkey AI Gateway", "href": "https://portkey.ai/docs/product/ai-gateway" }, "portkeyFallbacks": { "label": "Portkey Fallbacks", "href": "https://portkey.ai/docs/product/ai-gateway/fallbacks" }, "portkeyConditionalRouting": { "label": "Portkey Conditional Routing", "href": "https://portkey.ai/docs/product/ai-gateway/conditional-routing" }, "portkeyCaching": { "label": "Portkey Caching", "href": "https://portkey.ai/docs/product/ai-gateway/cache-simple-and-semantic" }, "portkeyPromptPlayground": { "label": "Portkey Prompt Playground", "href": "https://portkey.ai/docs/product/prompt-library/prompt-templates" }, "portkeyObservability": { "label": "Portkey Logs & Analytics", "href": "https://portkey.ai/docs/portkey-features/observability/logs-and-analytics" }, "litellmProxy": { "label": "LiteLLM Proxy", "href": "https://docs.litellm.ai/docs/" }, "litellmRouting": { "label": "LiteLLM Routing", "href": "https://docs.litellm.ai/docs/routing" }, "litellmCaching": { "label": "LiteLLM Caching", "href": "https://docs.litellm.ai/docs/proxy/caching" }, "litellmMcp": { "label": "LiteLLM MCP Gateway", "href": "https://docs.litellm.ai/docs/mcp_gateway/quick_start" }, "openrouterRouting": { "label": "OpenRouter Routing", "href": "https://openrouter.ai/docs/features/provider-routing" }, "openrouterOverview": { "label": "OpenRouter Docs", "href": "https://openrouter.ai/docs/" }, "openrouterCaching": { "label": "OpenRouter Prompt Caching", "href": "https://openrouter.ai/docs/features/prompt-caching" }, "vercelGateway": { "label": "Vercel AI Gateway", "href": "https://vercel.com/docs/ai-gateway" }, "vercelByok": { "label": "Vercel BYOK", "href": "https://vercel.com/docs/ai-gateway/byok/" }, "vercelZdr": { "label": "Vercel Zero Data Retention", "href": "https://vercel.com/docs/ai-gateway/zdr" }, "vercelSandbox": { "label": "Vercel Sandbox", "href": "https://vercel.com/docs/vercel-sandbox" }, "cloudflareGateway": { "label": "Cloudflare AI Gateway", "href": "https://developers.cloudflare.com/ai-gateway/" }, "cloudflareCaching": { "label": "Cloudflare Caching", "href": "https://developers.cloudflare.com/ai-gateway/features/caching/" }, "cloudflareRateLimiting": { "label": "Cloudflare Rate Limiting", "href": "https://developers.cloudflare.com/ai-gateway/features/rate-limiting/" }, "cloudflareObservability": { "label": "Cloudflare Analytics", "href": "https://developers.cloudflare.com/ai-gateway/observability/analytics/" }, "cloudflareLogging": { "label": "Cloudflare Logging", "href": "https://developers.cloudflare.com/ai-gateway/observability/logging/" }, "cloudflareByok": { "label": "Cloudflare BYOK", "href": "https://developers.cloudflare.com/ai-gateway/configuration/bring-your-own-keys/" }, "cloudflareFallbacks": { "label": "Cloudflare Request Handling", "href": "https://developers.cloudflare.com/ai-gateway/configuration/request-handling/" }, "cloudflareUniversal": { "label": "Cloudflare Universal Endpoint", "href": "https://developers.cloudflare.com/ai-gateway/universal/" }, "cloudflareMcp": { "label": "Cloudflare MCP", "href": "https://developers.cloudflare.com/agents/model-context-protocol/" } }, "categories": [ { "title": "Gateway & Routing", "proofLinks": [ { "label": "TrueFoundry Gateway", "href": "https://docs.truefoundry.com/gateway/load-balancing-overview" }, { "label": "Portkey AI Gateway", "href": "https://portkey.ai/docs/product/ai-gateway" }, { "label": "Vercel AI Gateway", "href": "https://vercel.com/docs/ai-gateway" }, { "label": "Cloudflare AI Gateway", "href": "https://developers.cloudflare.com/ai-gateway/" } ], "rows": [ { "feature": "Unified multi-provider API gateway", "reason": "Everstack combines gateway routing with agent runtime, memory, and controls, so teams avoid stitching multiple products.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "yes", "vercel": "yes", "cloudflare": "yes" }, { "feature": "Conditional routing and smart failover", "reason": "Routing policies are deeply integrated with fallback chains, cost signals, and provider health in one control plane.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "yes", "vercel": "yes", "cloudflare": "yes" }, { "feature": "Semantic caching built-in", "reason": "Semantic cache is native to the platform and tied directly to gateway decisions, reducing repeat-token spend automatically.", "proofLinks": [ { "label": "LiteLLM Caching", "href": "https://docs.litellm.ai/docs/proxy/caching" }, { "label": "OpenRouter Prompt Caching", "href": "https://openrouter.ai/docs/features/prompt-caching" } ], "everstack": "yes", "truefoundry": "partial", "portkey": "yes", "litellm": "partial", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Simple response caching", "reason": "Everstack supports straightforward response caching for repeated requests, then layers semantic caching for intent-level reuse.", "proofLinks": [ { "label": "LiteLLM Caching", "href": "https://docs.litellm.ai/docs/proxy/caching" }, { "label": "OpenRouter Prompt Caching", "href": "https://openrouter.ai/docs/features/prompt-caching" }, { "label": "Vercel AI Gateway", "href": "https://vercel.com/docs/ai-gateway" } ], "everstack": "yes", "truefoundry": "partial", "portkey": "yes", "litellm": "yes", "openrouter": "partial", "vercel": "partial", "cloudflare": "yes" }, { "feature": "Model + provider fallback controls", "reason": "Fallback rules can be configured at gateway level without external orchestration layers.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "yes", "vercel": "yes", "cloudflare": "yes" }, { "feature": "Bring-your-own-provider keys", "reason": "Provider key management is built into the same gateway stack used for routing, metering, and policy enforcement.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "yes", "vercel": "yes", "cloudflare": "yes" } ] }, { "title": "Agent Platform Depth", "proofLinks": [ { "label": "TrueFoundry Proxy API", "href": "https://truefoundry.com/docs/ai-gateway/proxy-api" }, { "label": "Vercel Sandbox", "href": "https://vercel.com/docs/vercel-sandbox" }, { "label": "Portkey AI Gateway", "href": "https://portkey.ai/docs/product/ai-gateway" } ], "rows": [ { "feature": "Built-in agent runtime/orchestration", "reason": "Everstack ships an integrated runtime for tool-using agents instead of stopping at proxy-only infrastructure.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Integrated sandboxed code execution", "reason": "Isolated execution is a first-class platform primitive, enabling secure tool calls and code tasks without external sandbox vendors.", "proofLinks": [ { "label": "Vercel Sandbox", "href": "https://vercel.com/docs/vercel-sandbox" }, { "label": "TrueFoundry Proxy API", "href": "https://truefoundry.com/docs/ai-gateway/proxy-api" } ], "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "yes", "cloudflare": "no" }, { "feature": "HITL approval controls in execution loop", "reason": "Human-in-the-loop gates are native to runtime flow, not bolted on as external UI or webhook logic.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Integrated memory + tool execution support", "reason": "Memory and tool orchestration share one runtime context, improving reliability of multi-step agent tasks.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Persistent memory layer (store + retrieval)", "reason": "Persistent memory is platform-native, so teams can retain context across sessions without managing separate memory infrastructure.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Visual Workflows Studio (agents + evals)", "reason": "Workflows Studio provides one place to design, operate, and evaluate agent workflows tied to the live gateway stack.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Voice-ready orchestration in platform stack", "reason": "Voice-capable orchestration is handled within the same runtime and routing layer used for text and tools.", "everstack": "yes", "truefoundry": "partial", "portkey": "partial", "litellm": "partial", "openrouter": "partial", "vercel": "partial", "cloudflare": "partial" }, { "feature": "Built-in functions runtime (webhook/proxy/isolated)", "reason": "Functions run in the same governed environment as routing and agents, supporting secure execution modes out of the box.", "everstack": "yes", "truefoundry": "partial", "portkey": "partial", "litellm": "partial", "openrouter": "no", "vercel": "partial", "cloudflare": "partial" } ] }, { "title": "Advanced Agent Infrastructure", "proofLinks": [ { "label": "TrueFoundry Proxy API", "href": "https://truefoundry.com/docs/ai-gateway/proxy-api" }, { "label": "Vercel Sandbox", "href": "https://vercel.com/docs/vercel-sandbox" }, { "label": "Cloudflare AI Gateway", "href": "https://developers.cloudflare.com/ai-gateway/" } ], "rows": [ { "feature": "Fastpath routing engine for low-latency serving", "reason": "Fastpath is purpose-built for high-throughput routing, helping production latency without sacrificing policy control.", "everstack": "yes", "truefoundry": "partial", "portkey": "partial", "litellm": "partial", "openrouter": "partial", "vercel": "partial", "cloudflare": "partial" }, { "feature": "Isolated functions execution (sandbox-first)", "reason": "Everstack can execute functions in isolated environments, which is critical for secure enterprise agent operations.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "yes", "cloudflare": "partial" }, { "feature": "Channels-integrated agents (OpenClaw/Spacebot-style)", "reason": "Channel-native agent experiences can be managed directly in-platform rather than requiring separate bot orchestration stacks.", "everstack": "yes", "truefoundry": "no", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Task runners for scheduled/background agent jobs (roadmap)", "reason": "Roadmap direction extends runtime into background execution, enabling recurring and asynchronous agent workflows.", "everstack": "planned", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "partial", "cloudflare": "partial" }, { "feature": "Multi-agent communication and orchestration", "reason": "Everstack supports coordinated agent patterns where specialized agents collaborate inside one managed runtime.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Cross-agent memory retrievals", "reason": "Shared memory retrieval across agents enables better continuity and context handoff in complex workflows.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" } ] }, { "title": "Evaluations & Prompt Ops", "proofLinks": [ { "label": "TrueFoundry Proxy API", "href": "https://truefoundry.com/docs/ai-gateway/proxy-api" }, { "label": "Portkey AI Gateway", "href": "https://portkey.ai/docs/product/ai-gateway" }, { "label": "Vercel AI Gateway", "href": "https://vercel.com/docs/ai-gateway" } ], "rows": [ { "feature": "Evaluation datasets management", "reason": "Everstack includes dataset-oriented evaluation workflows so teams can run repeatable quality checks against stable test sets.", "everstack": "yes", "truefoundry": "partial", "portkey": "partial", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Eval runs and historical run tracking", "reason": "Eval runs are treated as first-class records, enabling longitudinal quality tracking and release gating.", "everstack": "yes", "truefoundry": "partial", "portkey": "partial", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Annotation queues for human review", "reason": "Everstack supports human feedback workflows to review edge cases and improve evaluation quality over time.", "everstack": "yes", "truefoundry": "partial", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Score configs (metric and judge config)", "reason": "Teams can define reusable scoring configurations to standardize evaluation criteria across projects.", "everstack": "yes", "truefoundry": "partial", "portkey": "partial", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Prompt partials (roadmap)", "reason": "Prompt partials will let teams compose reusable prompt fragments and manage them as shared building blocks.", "everstack": "planned", "truefoundry": "no", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Prompt playground (roadmap)", "reason": "Roadmap playground support will enable rapid prompt/model iteration in the same platform where routing and production behavior are configured.", "everstack": "planned", "truefoundry": "partial", "portkey": "partial", "litellm": "no", "openrouter": "partial", "vercel": "partial", "cloudflare": "no" }, { "feature": "Prompt library (roadmap)", "reason": "Roadmap prompt library support will keep prompt assets versionable and discoverable for teams shipping multiple agent experiences.", "everstack": "planned", "truefoundry": "partial", "portkey": "partial", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" } ] }, { "title": "Observability & Control", "proofLinks": [ { "label": "TrueFoundry Gateway", "href": "https://docs.truefoundry.com/gateway/load-balancing-overview" }, { "label": "Portkey AI Gateway", "href": "https://portkey.ai/docs/product/ai-gateway" }, { "label": "LiteLLM Routing", "href": "https://docs.litellm.ai/docs/routing" }, { "label": "Cloudflare AI Gateway", "href": "https://developers.cloudflare.com/ai-gateway/" } ], "rows": [ { "feature": "End-to-end traces (gateway + agent + tools)", "reason": "Tracing spans gateway decisions, agent loops, and tool calls in one telemetry surface for faster debugging.", "everstack": "yes", "truefoundry": "yes", "portkey": "partial", "litellm": "partial", "openrouter": "partial", "vercel": "partial", "cloudflare": "partial" }, { "feature": "Centralized spend/cost analytics", "reason": "Cost visibility is unified across providers, models, and execution paths instead of split across multiple vendor dashboards.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "yes", "vercel": "yes", "cloudflare": "yes" }, { "feature": "Rate limits and policy controls", "reason": "Policy and rate limiting are applied consistently at runtime and gateway layers using shared tenant context.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "partial", "vercel": "partial", "cloudflare": "yes" }, { "feature": "Configurable data retention periods", "reason": "Everstack supports configurable retention controls so teams can align telemetry and runtime data lifecycles with compliance needs.", "cellNotes": { "everstack": "Configurable retention windows for telemetry and runtime data based on your deployment policy.", "truefoundry": "Retention can be tuned via deployment/data stack configuration; exact periods depend on setup and plan.", "portkey": "Retention is plan-dependent in hosted offerings; verify current plan limits in their docs.", "litellm": "Retention depends on your storage setup when self-hosted and observability backend choices.", "openrouter": "Retention controls are limited for gateway observability-style data compared to full platform offerings.", "vercel": "Retention is tied to platform analytics/log settings and may vary by plan.", "cloudflare": "Retention is governed by Cloudflare product/logging settings and configured account policies." }, "everstack": "yes", "truefoundry": "partial", "portkey": "partial", "litellm": "partial", "openrouter": "no", "vercel": "partial", "cloudflare": "partial" }, { "feature": "Model catalog with route-ready metadata", "reason": "Model catalog and routing logic are integrated, so teams can map quality/cost metadata directly to runtime policies.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "partial", "openrouter": "yes", "vercel": "yes", "cloudflare": "partial" }, { "feature": "MCP gateway/portal support", "reason": "Everstack provides MCP support as part of a full production stack, combining protocol compatibility with controls, observability, and deployment flexibility.", "proofLinks": [ { "label": "LiteLLM MCP Gateway", "href": "https://docs.litellm.ai/docs/mcp_gateway/quick_start" }, { "label": "Cloudflare MCP", "href": "https://developers.cloudflare.com/agents/model-context-protocol/" }, { "label": "Portkey AI Gateway", "href": "https://portkey.ai/docs/product/ai-gateway" } ], "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "partial", "openrouter": "no", "vercel": "no", "cloudflare": "yes" } ] }, { "title": "Deployment & Ownership", "proofLinks": [ { "label": "TrueFoundry Proxy API", "href": "https://truefoundry.com/docs/ai-gateway/proxy-api" }, { "label": "LiteLLM Proxy", "href": "https://docs.litellm.ai/docs/" }, { "label": "Portkey AI Gateway", "href": "https://portkey.ai/docs/product/ai-gateway" } ], "rows": [ { "feature": "Self-hosted deployment path", "reason": "Self-hosted deployment is a core design goal, supporting compliance and data sovereignty requirements.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Single-binary full-stack architecture", "reason": "A single-binary architecture minimizes operational complexity while still delivering full platform capabilities.", "everstack": "yes", "truefoundry": "no", "portkey": "no", "litellm": "no", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "On-prem / private VPC friendly", "reason": "Everstack is designed for private environments, making enterprise rollout easier in regulated settings.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "no", "vercel": "no", "cloudflare": "no" }, { "feature": "Multi-tenant controls out of the box", "reason": "Tenant isolation and access controls are built in from day one, reducing custom security work for production teams.", "everstack": "yes", "truefoundry": "yes", "portkey": "yes", "litellm": "yes", "openrouter": "partial", "vercel": "partial", "cloudflare": "partial" } ] } ], "flueValues": { "Unified multi-provider API gateway": "partial", "Conditional routing and smart failover": "no", "Semantic caching built-in": "no", "Simple response caching": "no", "Model + provider fallback controls": "no", "Bring-your-own-provider keys": "yes", "Built-in agent runtime/orchestration": "yes", "Integrated sandboxed code execution": "yes", "HITL approval controls in execution loop": "no", "Integrated memory + tool execution support": "partial", "Persistent memory layer (store + retrieval)": "partial", "Visual Workflows Studio (agents + evals)": "no", "Voice-ready orchestration in platform stack": "no", "Built-in functions runtime (webhook/proxy/isolated)": "partial", "Fastpath routing engine for low-latency serving": "no", "Isolated functions execution (sandbox-first)": "yes", "Channels-integrated agents (OpenClaw/Spacebot-style)": "yes", "Task runners for scheduled/background agent jobs (roadmap)": "partial", "Multi-agent communication and orchestration": "yes", "Cross-agent memory retrievals": "partial", "Evaluation datasets management": "no", "Eval runs and historical run tracking": "no", "Annotation queues for human review": "no", "Score configs (metric and judge config)": "no", "Prompt partials (roadmap)": "no", "Prompt playground (roadmap)": "no", "Prompt library (roadmap)": "no", "End-to-end traces (gateway + agent + tools)": "partial", "Centralized spend/cost analytics": "no", "Rate limits and policy controls": "no", "Configurable data retention periods": "partial", "Model catalog with route-ready metadata": "no", "MCP gateway/portal support": "partial", "Self-hosted deployment path": "yes", "Single-binary full-stack architecture": "no", "On-prem / private VPC friendly": "yes", "Multi-tenant controls out of the box": "no" }, "flueProof": [ { "label": "Flue docs", "href": "https://flueframework.com/docs/" } ], "columns": [ { "key": "everstack", "label": "Everstack", "accent": "text-brand-secondary-300", "href": null, "logo": "/everstack-mark-light.png", "compareHref": null }, { "key": "truefoundry", "label": "TrueFoundry", "accent": "text-brand-main-300", "href": "https://www.truefoundry.com", "logo": "https://www.google.com/s2/favicons?domain=truefoundry.com&sz=64", "compareHref": "/comparison/truefoundry" }, { "key": "portkey", "label": "Portkey", "accent": "text-brand-main-300", "href": "https://portkey.ai", "logo": "https://www.google.com/s2/favicons?domain=portkey.ai&sz=64", "compareHref": "/comparison/portkey" }, { "key": "litellm", "label": "LiteLLM", "accent": "text-brand-main-300", "href": "https://www.litellm.ai", "logo": "https://www.google.com/s2/favicons?domain=litellm.ai&sz=64", "compareHref": "/comparison/litellm" }, { "key": "openrouter", "label": "OpenRouter", "accent": "text-brand-main-300", "href": "https://openrouter.ai", "logo": "https://www.google.com/s2/favicons?domain=openrouter.ai&sz=64", "compareHref": "/comparison/openrouter" }, { "key": "vercel", "label": "Vercel AI GW", "accent": "text-brand-main-300", "href": "https://vercel.com/docs/ai-gateway", "logo": "https://www.google.com/s2/favicons?domain=vercel.com&sz=64", "compareHref": null }, { "key": "cloudflare", "label": "Cloudflare", "accent": "text-brand-main-300", "href": "https://developers.cloudflare.com/ai-gateway/", "logo": "https://www.google.com/s2/favicons?domain=cloudflare.com&sz=64", "compareHref": "/comparison/cloudflare-ai-gateway" }, { "key": "flue", "label": "Flue", "accent": "text-brand-main-300", "href": "https://flueframework.com", "logo": "https://www.google.com/s2/favicons?domain=flueframework.com&sz=64", "compareHref": "/comparison/flue" } ] } ``` ## AI model and provider directory The public landing catalog currently contains 24 providers and 594 models. Each provider and model has a published landing page. - [anthropic](https://everstack.ai/models/anthropic): 31 published models - [aws-bedrock](https://everstack.ai/models/aws-bedrock): 20 published models - [azure-openai](https://everstack.ai/models/azure-openai): 19 published models - [cerebras](https://everstack.ai/models/cerebras): 9 published models - [cohere](https://everstack.ai/models/cohere): 21 published models - [deepseek](https://everstack.ai/models/deepseek): 8 published models - [fireworks](https://everstack.ai/models/fireworks): 38 published models - [google](https://everstack.ai/models/google): 23 published models - [groq](https://everstack.ai/models/groq): 15 published models - [huggingface](https://everstack.ai/models/huggingface): 21 published models - [minimax](https://everstack.ai/models/minimax): 9 published models - [mistral](https://everstack.ai/models/mistral): 33 published models - [moonshot](https://everstack.ai/models/moonshot): 13 published models - [nvidia-nim](https://everstack.ai/models/nvidia-nim): 18 published models - [ollama](https://everstack.ai/models/ollama): 0 published models - [openai](https://everstack.ai/models/openai): 116 published models - [openrouter](https://everstack.ai/models/openrouter): 64 published models - [perplexity](https://everstack.ai/models/perplexity): 5 published models - [qwen](https://everstack.ai/models/qwen): 51 published models - [together](https://everstack.ai/models/together): 19 published models - [vertex-ai](https://everstack.ai/models/vertex-ai): 24 published models - [voyage](https://everstack.ai/models/voyage): 6 published models - [xai](https://everstack.ai/models/xai): 16 published models - [zai](https://everstack.ai/models/zai): 15 published models ## Complete documentation pages ### Agents Source: https://docs.everstack.ai/api-reference/agents Agents API endpoints #### Metadata ```yaml title: Agents description: Agents API endpoints ``` # Agents API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | [`/v1/agent-triggers/{id}`](https://docs.everstack.ai/api-reference/agents/get-agent-trigger) | | | `PATCH` | [`/v1/agent-triggers/{id}`](https://docs.everstack.ai/api-reference/agents/update-agent-trigger) | | | `DELETE` | [`/v1/agent-triggers/{id}`](https://docs.everstack.ai/api-reference/agents/delete-agent-trigger) | | | `POST` | [`/v1/agent-triggers/{id}/test`](https://docs.everstack.ai/api-reference/agents/test-agent-trigger) | | | `GET` | [`/v1/agent-triggers/{triggerId}/executions`](https://docs.everstack.ai/api-reference/agents/list-agent-trigger-executions) | | | `GET` | [`/v1/agents`](https://docs.everstack.ai/api-reference/agents/list-agents) | | | `POST` | [`/v1/agents`](https://docs.everstack.ai/api-reference/agents/agent-crud) | Agent CRUD | | `POST` | [`/v1/agents/import/opencode`](https://docs.everstack.ai/api-reference/agents/import-agent-from-opencode) | | | `PATCH` | [`/v1/agents/memories/{memoryId}`](https://docs.everstack.ai/api-reference/agents/update-agent-memory) | | | `DELETE` | [`/v1/agents/memories/{memoryId}`](https://docs.everstack.ai/api-reference/agents/delete-agent-memory) | | | `POST` | [`/v1/agents/memories/{memoryId}/deactivate`](https://docs.everstack.ai/api-reference/agents/deactivate-agent-memory) | | | `POST` | [`/v1/agents/memory/setup`](https://docs.everstack.ai/api-reference/agents/memory-setup) | Memory Setup | | `GET` | [`/v1/agents/reviews`](https://docs.everstack.ai/api-reference/agents/list-reviews) | | | `GET` | [`/v1/agents/reviews/{reviewId}`](https://docs.everstack.ai/api-reference/agents/get-review) | | | `POST` | [`/v1/agents/reviews/{reviewId}/submit`](https://docs.everstack.ai/api-reference/agents/hitl-approval-gate) | HITL Approval Gate | | `GET` | [`/v1/agents/sessions`](https://docs.everstack.ai/api-reference/agents/list-sessions) | | | `POST` | [`/v1/agents/sessions`](https://docs.everstack.ai/api-reference/agents/session-management) | Session management | | `GET` | [`/v1/agents/sessions/{id}`](https://docs.everstack.ai/api-reference/agents/get-session) | | | `POST` | [`/v1/agents/sessions/{sessionId}/cancel`](https://docs.everstack.ai/api-reference/agents/cancel-session) | | | `POST` | [`/v1/agents/sessions/{sessionId}/complete`](https://docs.everstack.ai/api-reference/agents/complete-session) | | | `GET` | [`/v1/agents/sessions/{sessionId}/spawn-nodes`](https://docs.everstack.ai/api-reference/agents/list-spawn-nodes) | | | `POST` | [`/v1/agents/sessions/{sessionId}/steer`](https://docs.everstack.ai/api-reference/agents/steer-session) | | | `POST` | [`/v1/agents/sessions/{sessionId}/turns`](https://docs.everstack.ai/api-reference/agents/runtime) | Runtime | | `POST` | [`/v1/agents/sessions/{sessionId}/turns/stream`](https://docs.everstack.ai/api-reference/agents/streaming-runtime) | Streaming runtime | | `GET` | [`/v1/agents/spawn-trees/{treeId}`](https://docs.everstack.ai/api-reference/agents/spawn-tree) | Spawn Tree | | `POST` | [`/v1/agents/{agentId}/deploy`](https://docs.everstack.ai/api-reference/agents/deploy-agent) | | | `GET` | [`/v1/agents/{agentId}/deployments`](https://docs.everstack.ai/api-reference/agents/list-deployments) | | | `GET` | [`/v1/agents/{agentId}/memories`](https://docs.everstack.ai/api-reference/agents/list-agent-memories) | | | `POST` | [`/v1/agents/{agentId}/memories`](https://docs.everstack.ai/api-reference/agents/create-agent-memory) | | | `GET` | [`/v1/agents/{agentId}/triggers`](https://docs.everstack.ai/api-reference/agents/list-agent-triggers) | | | `POST` | [`/v1/agents/{agentId}/triggers`](https://docs.everstack.ai/api-reference/agents/create-agent-trigger) | | | `GET` | [`/v1/agents/{id}`](https://docs.everstack.ai/api-reference/agents/get-agent) | | | `PATCH` | [`/v1/agents/{id}`](https://docs.everstack.ai/api-reference/agents/update-agent) | | | `DELETE` | [`/v1/agents/{id}`](https://docs.everstack.ai/api-reference/agents/delete-agent) | | | `GET` | [`/v1/agents/{id}/export/opencode`](https://docs.everstack.ai/api-reference/agents/export-agent-to-opencode) | | | `DELETE` | [`/v1/deployments/keys/{keyId}`](https://docs.everstack.ai/api-reference/agents/revoke-deployment-key) | | | `GET` | [`/v1/deployments/{deploymentId}/invocations`](https://docs.everstack.ai/api-reference/agents/list-deployment-invocations) | | | `GET` | [`/v1/deployments/{deploymentId}/keys`](https://docs.everstack.ai/api-reference/agents/list-deployment-keys) | | | `POST` | [`/v1/deployments/{deploymentId}/keys`](https://docs.everstack.ai/api-reference/agents/create-deployment-key) | | | `GET` | [`/v1/deployments/{id}`](https://docs.everstack.ai/api-reference/agents/get-deployment) | | | `PATCH` | [`/v1/deployments/{id}`](https://docs.everstack.ai/api-reference/agents/update-deployment) | | | `GET` | [`/v1/integrations/github/installations`](https://docs.everstack.ai/api-reference/agents/list-git-hub-installations) | | | `POST` | [`/v1/integrations/github/installations/link`](https://docs.everstack.ai/api-reference/agents/link-git-hub-installation) | | | `DELETE` | [`/v1/integrations/github/installations/{installationId}`](https://docs.everstack.ai/api-reference/agents/remove-git-hub-installation) | | | `GET` | [`/v1/integrations/github/installations/{installationId}/repos`](https://docs.everstack.ai/api-reference/agents/list-git-hub-repositories) | | | `GET` | [`/v1/integrations/github/installations/{installationId}/repos/{owner}/{repo}/branches`](https://docs.everstack.ai/api-reference/agents/list-git-hub-branches) | | | `POST` | [`/v1/sandbox`](https://docs.everstack.ai/api-reference/agents/sandbox-management) | Sandbox Management | | `GET` | [`/v1/sandbox/crons`](https://docs.everstack.ai/api-reference/agents/list-crons) | | | `POST` | [`/v1/sandbox/crons`](https://docs.everstack.ai/api-reference/agents/crons) | Crons | | `PATCH` | [`/v1/sandbox/crons/{id}`](https://docs.everstack.ai/api-reference/agents/update-cron) | | | `DELETE` | [`/v1/sandbox/crons/{id}`](https://docs.everstack.ai/api-reference/agents/delete-cron) | | | `GET` | [`/v1/sandbox/instances`](https://docs.everstack.ai/api-reference/agents/list-sandbox-instances) | | | `GET` | [`/v1/sandbox/instances/{sandboxId}`](https://docs.everstack.ai/api-reference/agents/get-sandbox-instance) | | | `GET` | [`/v1/sandbox/overview`](https://docs.everstack.ai/api-reference/agents/get-sandbox-overview) | | | `POST` | [`/v1/sandbox/recreate`](https://docs.everstack.ai/api-reference/agents/recreate-sandbox) | | | `GET` | [`/v1/sandbox/templates`](https://docs.everstack.ai/api-reference/agents/sandbox-templates-read-only-catalog) | Sandbox Templates (read-only catalog) | | `GET` | [`/v1/sandbox/templates/{templateId}`](https://docs.everstack.ai/api-reference/agents/get-sandbox-template) | | | `GET` | [`/v1/sandbox/triggers`](https://docs.everstack.ai/api-reference/agents/triggers-shared-history) | Triggers (shared history) | | `GET` | [`/v1/sandbox/webhooks`](https://docs.everstack.ai/api-reference/agents/list-webhooks) | | | `POST` | [`/v1/sandbox/webhooks`](https://docs.everstack.ai/api-reference/agents/webhooks) | Webhooks | | `DELETE` | [`/v1/sandbox/webhooks/{id}`](https://docs.everstack.ai/api-reference/agents/delete-webhook) | | | `GET` | [`/v1/sandbox/{sandboxId}/events`](https://docs.everstack.ai/api-reference/agents/sandbox-events) | Sandbox Events | | `GET` | [`/v1/sandbox/{sandboxId}/executions`](https://docs.everstack.ai/api-reference/agents/list-sandbox-executions) | | | `POST` | [`/v1/sandbox/{sandboxId}/revive`](https://docs.everstack.ai/api-reference/agents/revive-sandbox) | | | `POST` | [`/v1/sandbox/{sandboxId}/ssh/access`](https://docs.everstack.ai/api-reference/agents/grant-sandbox-sshaccess) | | | `DELETE` | [`/v1/sandbox/{sandboxId}/ssh/access/{userId}`](https://docs.everstack.ai/api-reference/agents/revoke-sandbox-sshaccess) | | | `GET` | [`/v1/sandbox/{sandboxId}/ssh/info`](https://docs.everstack.ai/api-reference/agents/get-sandbox-sshinfo) | | | `POST` | [`/v1/sandbox/{sandboxId}/stop`](https://docs.everstack.ai/api-reference/agents/stop-sandbox) | | | `POST` | [`/v1/sandbox/{sandboxId}/terminate`](https://docs.everstack.ai/api-reference/agents/terminate-sandbox) | | | `DELETE` | [`/v1/sandbox/{sessionId}`](https://docs.everstack.ai/api-reference/agents/destroy-sandbox) | | | `GET` | [`/v1/sandbox/{sessionId}/ports`](https://docs.everstack.ai/api-reference/agents/list-exposed-ports) | | | `POST` | [`/v1/sandbox/{sessionId}/ports`](https://docs.everstack.ai/api-reference/agents/port-exposure) | Port Exposure | | `GET` | [`/v1/sandbox/{sessionId}/ports/detect`](https://docs.everstack.ai/api-reference/agents/detect-listening-ports) | | | `DELETE` | [`/v1/sandbox/{sessionId}/ports/{port}`](https://docs.everstack.ai/api-reference/agents/unexpose-port) | | | `GET` | [`/v1/sandbox/{sessionId}/stats`](https://docs.everstack.ai/api-reference/agents/get-sandbox-stats) | | | `GET` | [`/v1/settings/ssh-keys`](https://docs.everstack.ai/api-reference/agents/list-sshkeys) | | | `POST` | [`/v1/settings/ssh-keys`](https://docs.everstack.ai/api-reference/agents/add-sshkey) | | | `DELETE` | [`/v1/settings/ssh-keys/{keyId}`](https://docs.everstack.ai/api-reference/agents/delete-sshkey) | | --- ### POST Add SSHKey Source: https://docs.everstack.ai/api-reference/agents/add-sshkey #### Metadata ```yaml title: "POST Add SSHKey" full: true ```

Add SSHKey

POST /v1/settings/ssh-keys

Request

```bash curl -X POST "http://localhost:8089/v1/settings/ssh-keys" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","userId":"string","name":"string","publicKey":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/settings/ssh-keys", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "userId": "string", "name": "string", "publicKey": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/settings/ssh-keys", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "userId": "string", "name": "string", "publicKey": "string" }, ) data = response.json() ```

Response

```json { "key": { "id": "string", "userId": "string", "name": "string", "fingerprint": "string", "keyType": "string", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `userId` | `string` | No | | | `name` | `string` | No | | | `publicKey` | `string` | No | | ### Responses #### 200 Upload a user's public SSH key | Property | Type | Description | |----------|------|-------------| | `key` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Agent CRUD Source: https://docs.everstack.ai/api-reference/agents/agent-crud Agent CRUD #### Metadata ```yaml title: "POST Agent CRUD" description: "Agent CRUD" full: true ```

Agent CRUD

POST /v1/agents

Request

```bash curl -X POST "http://localhost:8089/v1/agents" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","model":"string","systemPrompt":"string","tools":["string"],"maxTurns":0,"maxToolCallsPerTurn":0,"mode":"AGENT_MODE_UNSPECIFIED","maxSteps":0,"taskPermissionMode":"TASK_PERMISSION_MODE_UNSPECIFIED","hidden":true,"color":"string","workingDirectory":"string","mentionAlias":"string","executionPolicy":{"taskPermissionMode":"TASK_PERMISSION_MODE_UNSPECIFIED","maxSteps":0,"workingDirectory":"string"},"memoryConfig":{"enabled":true,"scope":"string","autoRetrieve":true,"autoRetrieveTopK":0,"autoExtract":true}}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true } }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true } }, ) data = response.json() ```

Response

```json { "agent": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true } } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `model` | `string` | No | | | `systemPrompt` | `string` | No | | | `tools` | `string[]` | No | | | `config` | `object` | No | | | `maxTurns` | `integer` | No | | | `maxToolCallsPerTurn` | `integer` | No | | | `mode` | `"AGENT_MODE_UNSPECIFIED" \| "AGENT_MODE_PRIMARY" \| "AGENT_MODE_SUBAGENT"` | No | AgentMode controls whether an agent is user-facing or delegation-only. | | `maxSteps` | `integer` | No | | | `taskPermissionMode` | `"TASK_PERMISSION_MODE_UNSPECIFIED" \| "TASK_PERMISSION_MODE_ASK" \| "TASK_PERMISSION_MODE_ALWAYS" \| "TASK_PERMISSION_MODE_DENY"` | No | TaskPermissionMode controls delegation behavior for task/spawn execution. | | `hidden` | `boolean` | No | | | `color` | `string` | No | | | `workingDirectory` | `string` | No | | | `mentionAlias` | `string` | No | | | `executionPolicy` | `object` | No | AgentExecutionPolicy is a typed policy container for runtime controls. | | `memoryConfig` | `object` | No | AgentMemoryConfig configures persistent memory for an agent. | ### Responses #### 200 Create a new agent definition | Property | Type | Description | |----------|------|-------------| | `agent` | `object` | AgentDefinition is the blueprint/config for an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Bind Agent Channel Source: https://docs.everstack.ai/api-reference/agents/bind-agent-channel #### Metadata ```yaml title: "POST Bind Agent Channel" full: true ```

Bind Agent Channel

POST /v1/agents/{agentId}/channels

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{agentId}/channels" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","channelConfigId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/channels", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "channelConfigId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{agentId}/channels", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "channelConfigId": "string" }, ) data = response.json() ```

Response

```json { "binding": { "id": "string", "agentId": "string", "channelConfigId": "string", "enabled": true, "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `channelConfigId` | `string` | No | | ### Responses #### 200 Bind a channel to an agent | Property | Type | Description | |----------|------|-------------| | `binding` | `object` | AgentChannelBinding represents a channel bound to an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Bind Channel To Trooper Source: https://docs.everstack.ai/api-reference/agents/bind-channel-to-trooper #### Metadata ```yaml title: "POST Bind Channel To Trooper" full: true ```

Bind Channel To Trooper

POST /v1/troopers/{trooperId}/channels

Request

```bash curl -X POST "http://localhost:8089/v1/troopers/{trooperId}/channels" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","channelConfigId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{trooperId}/channels", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "channelConfigId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/troopers/{trooperId}/channels", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "channelConfigId": "string" }, ) data = response.json() ```

Response

```json { "binding": { "id": "string", "trooperId": "string", "channelConfigId": "string", "enabled": true, "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `trooperId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `channelConfigId` | `string` | No | | ### Responses #### 200 Bind a channel to a trooper | Property | Type | Description | |----------|------|-------------| | `binding` | `object` | TrooperChannelBinding represents a channel bound to a trooper. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Cancel Session Source: https://docs.everstack.ai/api-reference/agents/cancel-session #### Metadata ```yaml title: "POST Cancel Session" full: true ```

Cancel Session

POST {"/v1/agents/sessions/{sessionId}/cancel"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/sessions/{sessionId}/cancel" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions/{sessionId}/cancel", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/sessions/{sessionId}/cancel", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Cancel a running session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Complete Session Source: https://docs.everstack.ai/api-reference/agents/complete-session #### Metadata ```yaml title: "POST Complete Session" full: true ```

Complete Session

POST {"/v1/agents/sessions/{sessionId}/complete"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/sessions/{sessionId}/complete" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions/{sessionId}/complete", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/sessions/{sessionId}/complete", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Explicitly complete a session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Computer Use Info Source: https://docs.everstack.ai/api-reference/agents/computer-use-info #### Metadata ```yaml title: "GET Computer Use Info" full: true ```

Computer Use Info

GET /v1/sandbox/instances/{sandboxId}/computer

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/instances/{sandboxId}/computer" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/computer", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/computer", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "sandboxId": "string", "operations": [ "string" ], "note": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Responses #### 200 List Computer Use capabilities for a sandbox | Property | Type | Description | |----------|------|-------------| | `sandboxId` | `string` | | | `operations` | `string[]` | | | `note` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Computer Use Source: https://docs.everstack.ai/api-reference/agents/computer-use #### Metadata ```yaml title: "POST Computer Use" full: true ```

Computer Use

POST /v1/sandbox/instances/{sandboxId}/computer/{op}

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/instances/{sandboxId}/computer/{op}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"format":"string","quality":0,"x":0,"y":0,"button":"string","doubleClick":true,"text":"string","key":"string","direction":"string","amount":0,"toX":0,"toY":0,"fps":0,"label":"string","recordingId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/computer/{op}", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "format": "string", "quality": 0, "x": 0, "y": 0, "button": "string", "doubleClick": true, "text": "string", "key": "string", "direction": "string", "amount": 0, "toX": 0, "toY": 0, "fps": 0, "label": "string", "recordingId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/computer/{op}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "format": "string", "quality": 0, "x": 0, "y": 0, "button": "string", "doubleClick": true, "text": "string", "key": "string", "direction": "string", "amount": 0, "toX": 0, "toY": 0, "fps": 0, "label": "string", "recordingId": "string" }, ) data = response.json() ```

Response

```json { "status": "string", "image": "string", "format": "string", "displays": [ { "id": 0, "display": "string", "width": 0, "height": 0, "isPrimary": true } ], "recordingId": "string", "file": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `op` | path | `string` | **Yes** | screenshot \| displays \| mouse/click \| mouse/move \| mouse/scroll \| mouse/drag \| keyboard/type \| keyboard/key \| recording/start \| recording/stop | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `format` | `string` | No | | | `quality` | `integer` | No | | | `x` | `integer` | No | | | `y` | `integer` | No | | | `button` | `string` | No | | | `doubleClick` | `boolean` | No | | | `text` | `string` | No | | | `key` | `string` | No | | | `direction` | `string` | No | | | `amount` | `integer` | No | | | `toX` | `integer` | No | | | `toY` | `integer` | No | | | `fps` | `integer` | No | | | `label` | `string` | No | | | `recordingId` | `string` | No | | ### Responses #### 200 Computer Use op (screenshot, mouse/keyboard, recording) | Property | Type | Description | |----------|------|-------------| | `status` | `string` | | | `image` | `string` | | | `format` | `string` | | | `displays` | `object[]` | | | `recordingId` | `string` | | | `file` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Content Search Source: https://docs.everstack.ai/api-reference/agents/content-search #### Metadata ```yaml title: "POST Content Search" full: true ```

Content Search

POST /v1/sandbox/instances/{sandboxId}/files/content-search

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/instances/{sandboxId}/files/content-search" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"pattern":"string","path":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/files/content-search", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "pattern": "string", "path": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/files/content-search", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "pattern": "string", "path": "string" }, ) data = response.json() ```

Response

```json { "matches": [ { "path": "string", "line": 0, "matchText": "string" } ], "total": 0, "pattern": "string", "path": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `pattern` | `string` | No | Regex/literal pattern to search for. | | `path` | `string` | No | Directory to search in (default "."). | ### Responses #### 200 Search file contents inside a sandbox | Property | Type | Description | |----------|------|-------------| | `matches` | `object[]` | | | `total` | `integer` | | | `pattern` | `string` | | | `path` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Agent Link Source: https://docs.everstack.ai/api-reference/agents/create-agent-link #### Metadata ```yaml title: "POST Create Agent Link" full: true ```

Create Agent Link

POST /v1/agents/{sourceAgentId}/links

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{sourceAgentId}/links" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","targetType":"string","targetId":"string","targetName":"string","linkType":"AGENT_LINK_TYPE_UNSPECIFIED","protocol":"AGENT_LINK_PROTOCOL_UNSPECIFIED"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{sourceAgentId}/links", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "targetType": "string", "targetId": "string", "targetName": "string", "linkType": "AGENT_LINK_TYPE_UNSPECIFIED", "protocol": "AGENT_LINK_PROTOCOL_UNSPECIFIED" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{sourceAgentId}/links", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "targetType": "string", "targetId": "string", "targetName": "string", "linkType": "AGENT_LINK_TYPE_UNSPECIFIED", "protocol": "AGENT_LINK_PROTOCOL_UNSPECIFIED" }, ) data = response.json() ```

Response

```json { "link": { "id": "string", "tenantId": "string", "sourceAgentId": "string", "targetType": "string", "targetId": "string", "targetName": "string", "linkType": "AGENT_LINK_TYPE_UNSPECIFIED", "protocol": "AGENT_LINK_PROTOCOL_UNSPECIFIED", "status": "AGENT_LINK_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sourceAgentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `targetType` | `string` | No | | | `targetId` | `string` | No | | | `targetName` | `string` | No | | | `linkType` | `"AGENT_LINK_TYPE_UNSPECIFIED" \| "AGENT_LINK_TYPE_COLLABORATOR" \| "AGENT_LINK_TYPE_SUPERVISOR" \| "AGENT_LINK_TYPE_SUBORDINATE" \| "AGENT_LINK_TYPE_PEER"` | No | AgentLinkType describes the relationship between linked agents. | | `protocol` | `"AGENT_LINK_PROTOCOL_UNSPECIFIED" \| "AGENT_LINK_PROTOCOL_INTERNAL" \| "AGENT_LINK_PROTOCOL_CHANNEL" \| "AGENT_LINK_PROTOCOL_WEBHOOK"` | No | AgentLinkProtocol describes how linked agents communicate. | | `config` | `object` | No | | ### Responses #### 200 Create a link between agents | Property | Type | Description | |----------|------|-------------| | `link` | `object` | AgentLink represents a connection between an agent and another entity. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Agent Memory Source: https://docs.everstack.ai/api-reference/agents/create-agent-memory #### Metadata ```yaml title: "POST Create Agent Memory" full: true ```

Create Agent Memory

POST {"/v1/agents/{agentId}/memories"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{agentId}/memories" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","memoryType":"string","content":"string","factKey":"string","confidence":0,"scope":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/memories", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "memoryType": "string", "content": "string", "factKey": "string", "confidence": 0, "scope": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{agentId}/memories", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "memoryType": "string", "content": "string", "factKey": "string", "confidence": 0, "scope": "string" }, ) data = response.json() ```

Response

```json { "memory": { "id": "string", "agentId": "string", "tenantId": "string", "memoryType": "string", "content": "string", "factKey": "string", "confidence": 0, "source": "string", "scope": "string", "userId": "string", "accessCount": 0, "isActive": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "sourceSessionId": "string", "sourceTurnNumber": 0, "supersededBy": "string", "lastAccessedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `memoryType` | `string` | No | | | `content` | `string` | No | | | `factKey` | `string` | No | | | `confidence` | `number` | No | | | `scope` | `string` | No | | ### Responses #### 200 Manually create a persistent memory entry | Property | Type | Description | |----------|------|-------------| | `memory` | `object` | AgentMemoryEntry represents a single persistent memory entry. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Agent Trigger Source: https://docs.everstack.ai/api-reference/agents/create-agent-trigger #### Metadata ```yaml title: "POST Create Agent Trigger" full: true ```

Create Agent Trigger

POST {"/v1/agents/{agentId}/triggers"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{agentId}/triggers" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","triggerType":"string","cronExpression":"string","cronTimezone":"string","eventSourceAgentId":"string","eventType":"string","inputTemplate":"string","maxRetries":0,"retryDelaySeconds":0,"timeoutSeconds":0,"maxConcurrent":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/triggers", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "triggerType": "string", "cronExpression": "string", "cronTimezone": "string", "eventSourceAgentId": "string", "eventType": "string", "inputTemplate": "string", "maxRetries": 0, "retryDelaySeconds": 0, "timeoutSeconds": 0, "maxConcurrent": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{agentId}/triggers", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "triggerType": "string", "cronExpression": "string", "cronTimezone": "string", "eventSourceAgentId": "string", "eventType": "string", "inputTemplate": "string", "maxRetries": 0, "retryDelaySeconds": 0, "timeoutSeconds": 0, "maxConcurrent": 0 }, ) data = response.json() ```

Response

```json { "trigger": { "id": "string", "tenantId": "string", "agentId": "string", "name": "string", "triggerType": "string", "enabled": true, "cronExpression": "string", "cronTimezone": "string", "webhookPath": "string", "eventSourceAgentId": "string", "eventType": "string", "inputTemplate": "string", "maxRetries": 0, "timeoutSeconds": 0, "maxConcurrent": 0, "circuitState": "string", "consecutiveFailures": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "retryDelaySeconds": 0 }, "webhookSecret": "string", "webhookUrl": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `triggerType` | `string` | No | | | `cronExpression` | `string` | No | | | `cronTimezone` | `string` | No | | | `eventSourceAgentId` | `string` | No | | | `eventType` | `string` | No | | | `eventFilter` | `object` | No | | | `inputTemplate` | `string` | No | | | `maxRetries` | `integer` | No | | | `retryDelaySeconds` | `integer` | No | | | `timeoutSeconds` | `integer` | No | | | `maxConcurrent` | `integer` | No | | ### Responses #### 200 Create a trigger for an agent | Property | Type | Description | |----------|------|-------------| | `trigger` | `object` | | | `webhookSecret` | `string` | | | `webhookUrl` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Deployment Key Source: https://docs.everstack.ai/api-reference/agents/create-deployment-key #### Metadata ```yaml title: "POST Create Deployment Key" full: true ```

Create Deployment Key

POST {"/v1/deployments/{deploymentId}/keys"}

Request

```bash curl -X POST "http://localhost:8089/v1/deployments/{deploymentId}/keys" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","expiresAt":"2024-01-01T00:00:00Z"}' ``` ```js const response = await fetch("http://localhost:8089/v1/deployments/{deploymentId}/keys", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "expiresAt": "2024-01-01T00:00:00Z" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/deployments/{deploymentId}/keys", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "expiresAt": "2024-01-01T00:00:00Z" }, ) data = response.json() ```

Response

```json { "key": { "id": "string", "deploymentId": "string", "name": "string", "keyPrefix": "string", "isActive": true, "expiresAt": "2024-01-01T00:00:00Z", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z" }, "rawKey": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `deploymentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `expiresAt` | `string` | No | | ### Responses #### 200 Create an API key for a deployment | Property | Type | Description | |----------|------|-------------| | `key` | `object` | | | `rawKey` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Sandbox SSHToken Source: https://docs.everstack.ai/api-reference/agents/create-sandbox-sshtoken #### Metadata ```yaml title: "POST Create Sandbox SSHToken" full: true ```

Create Sandbox SSHToken

POST /v1/sandbox/{sandboxId}/ssh-tokens

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","expiresInMinutes":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "expiresInMinutes": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "expiresInMinutes": 0 }, ) data = response.json() ```

Response

```json { "token": { "id": "string", "sandboxId": "string", "tenantId": "string", "tokenPrefix": "string", "createdBy": "string", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "revokedAt": "2024-01-01T00:00:00Z", "lastUsedAt": "2024-01-01T00:00:00Z", "lastUsedIp": "string", "organizationId": "string", "instanceId": "string" }, "rawToken": "string", "connectionString": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `expiresInMinutes` | `integer` | No | Token lifetime in minutes. Defaults to 60. Maximum is 1440 (24h). | ### Responses #### 200 Create a temporary SSH token for a sandbox | Property | Type | Description | |----------|------|-------------| | `token` | `object` | SandboxSSHToken is the non-secret metadata for a temporary SSH bearer token. The raw token is returned only from CreateSandboxSSHTokenResponse.raw_token. | | `rawToken` | `string` | Raw token. Store safely; it is not retrievable again. | | `connectionString` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Sandbox Volume Source: https://docs.everstack.ai/api-reference/agents/create-sandbox-volume #### Metadata ```yaml title: "POST Create Sandbox Volume" full: true ```

Create Sandbox Volume

POST /v1/volumes

Request

```bash curl -X POST "http://localhost:8089/v1/volumes" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","tenantId":"string","sizeGb":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/volumes", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "name": "string", "tenantId": "string", "sizeGb": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/volumes", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "name": "string", "tenantId": "string", "sizeGb": "string" }, ) data = response.json() ```

Response

```json { "volume": { "id": "string", "tenantId": "string", "name": "string", "sizeBytes": "string", "usedBytes": "string", "createdAt": "string", "updatedAt": "string", "usageMeasuredAt": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `name` | `string` | No | | | `tenantId` | `string` | No | Optional; defaults to the caller's tenant resolved from context. | | `sizeGb` | `string` | No | Optional capacity quota in GiB (0 = unlimited). Volumes are usage-billed regardless of quota; this only caps how large the volume may grow. | ### Responses #### 200 Create a persistent volume | Property | Type | Description | |----------|------|-------------| | `volume` | `object` | Persistent sandbox volume (POR-77). Object-storage-backed; usage-metered. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Trooper Link Source: https://docs.everstack.ai/api-reference/agents/create-trooper-link #### Metadata ```yaml title: "POST Create Trooper Link" full: true ```

Create Trooper Link

POST /v1/troopers/{sourceTrooperId}/links

Request

```bash curl -X POST "http://localhost:8089/v1/troopers/{sourceTrooperId}/links" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","targetType":"string","targetId":"string","targetName":"string","linkType":"TROOPER_LINK_TYPE_UNSPECIFIED","protocol":"TROOPER_LINK_PROTOCOL_UNSPECIFIED"}' ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{sourceTrooperId}/links", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "targetType": "string", "targetId": "string", "targetName": "string", "linkType": "TROOPER_LINK_TYPE_UNSPECIFIED", "protocol": "TROOPER_LINK_PROTOCOL_UNSPECIFIED" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/troopers/{sourceTrooperId}/links", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "targetType": "string", "targetId": "string", "targetName": "string", "linkType": "TROOPER_LINK_TYPE_UNSPECIFIED", "protocol": "TROOPER_LINK_PROTOCOL_UNSPECIFIED" }, ) data = response.json() ```

Response

```json { "link": { "id": "string", "tenantId": "string", "sourceTrooperId": "string", "targetType": "string", "targetId": "string", "targetName": "string", "linkType": "TROOPER_LINK_TYPE_UNSPECIFIED", "protocol": "TROOPER_LINK_PROTOCOL_UNSPECIFIED", "status": "TROOPER_LINK_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sourceTrooperId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `targetType` | `string` | No | | | `targetId` | `string` | No | | | `targetName` | `string` | No | | | `linkType` | `"TROOPER_LINK_TYPE_UNSPECIFIED" \| "TROOPER_LINK_TYPE_COLLABORATOR" \| "TROOPER_LINK_TYPE_SUPERVISOR" \| "TROOPER_LINK_TYPE_SUBORDINATE" \| "TROOPER_LINK_TYPE_PEER"` | No | TrooperLinkType describes the relationship between linked entities. | | `protocol` | `"TROOPER_LINK_PROTOCOL_UNSPECIFIED" \| "TROOPER_LINK_PROTOCOL_INTERNAL" \| "TROOPER_LINK_PROTOCOL_CHANNEL" \| "TROOPER_LINK_PROTOCOL_WEBHOOK"` | No | TrooperLinkProtocol describes how linked entities communicate. | | `config` | `object` | No | | ### Responses #### 200 Create a link between trooper and another entity | Property | Type | Description | |----------|------|-------------| | `link` | `object` | TrooperLink represents a connection between a trooper and another entity. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Trooper Source: https://docs.everstack.ai/api-reference/agents/create-trooper #### Metadata ```yaml title: "POST Create Trooper" full: true ```

Create Trooper

POST /v1/troopers

Request

```bash curl -X POST "http://localhost:8089/v1/troopers" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","model":"string","systemPrompt":"string","tools":["string"],"maxTurns":0,"maxToolCallsPerTurn":0,"maxSteps":0,"identity":{"soulMd":"string","identityMd":"string","userMd":"string","roleMd":"string"},"sandbox":{"image":"string","cpuLimit":0,"memoryMb":"string","diskMb":"string","timeoutSeconds":0,"networkMode":"string","allowedHosts":["string"],"sshEnabled":true,"gitRepoUrl":"string","gitBranch":"string"},"databases":{"sqlitePath":"string","lancedbPath":"string","redbPath":"string"},"workers":{"maxConcurrentWorkers":0},"color":"string","icon":"string","autoProvision":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/troopers", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string", "autoProvision": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/troopers", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string", "autoProvision": true }, ) data = response.json() ```

Response

```json { "trooper": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "status": "TROOPER_STATUS_UNSPECIFIED", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "sandboxId": "string", "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `model` | `string` | No | | | `systemPrompt` | `string` | No | | | `tools` | `string[]` | No | | | `agentConfig` | `object` | No | | | `maxTurns` | `integer` | No | | | `maxToolCallsPerTurn` | `integer` | No | | | `maxSteps` | `integer` | No | | | `identity` | `object` | No | TrooperIdentity holds the identity markdown files for a trooper. | | `sandbox` | `object` | No | TrooperSandboxConfig holds sandbox resource configuration. | | `databases` | `object` | No | TrooperDatabaseConfig holds paths for trooper-local databases. | | `workers` | `object` | No | TrooperWorkersConfig holds worker pool settings. | | `color` | `string` | No | | | `icon` | `string` | No | | | `autoProvision` | `boolean` | No | | ### Responses #### 200 Create a new trooper | Property | Type | Description | |----------|------|-------------| | `trooper` | `object` | Trooper is a first-class intelligent agent environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Crons Source: https://docs.everstack.ai/api-reference/agents/crons Crons #### Metadata ```yaml title: "POST Crons" description: "Crons" full: true ```

Crons

POST /v1/sandbox/crons

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/crons" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","sandboxId":"string","sessionId":"string","name":"string","schedule":"string","command":"string","workDir":"string","timeoutSeconds":0,"autoRecreate":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/crons", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "autoRecreate": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/crons", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "autoRecreate": true }, ) data = response.json() ```

Response

```json { "cron": { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "lastRunAt": "2024-01-01T00:00:00Z", "nextRunAt": "2024-01-01T00:00:00Z", "runCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `sandboxId` | `string` | No | | | `sessionId` | `string` | No | | | `name` | `string` | No | | | `schedule` | `string` | No | | | `command` | `string` | No | | | `workDir` | `string` | No | | | `timeoutSeconds` | `integer` | No | | | `autoRecreate` | `boolean` | No | | | `sandboxConfig` | `object` | No | | ### Responses #### 200 Create a sandbox cron schedule | Property | Type | Description | |----------|------|-------------| | `cron` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Deactivate Agent Memory Source: https://docs.everstack.ai/api-reference/agents/deactivate-agent-memory #### Metadata ```yaml title: "POST Deactivate Agent Memory" full: true ```

Deactivate Agent Memory

POST {"/v1/agents/memories/{memoryId}/deactivate"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/memories/{memoryId}/deactivate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/memories/{memoryId}/deactivate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/memories/{memoryId}/deactivate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `memoryId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Soft-delete (deactivate) a persistent memory entry | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Agent Link Source: https://docs.everstack.ai/api-reference/agents/delete-agent-link #### Metadata ```yaml title: "DELETE Delete Agent Link" full: true ```

Delete Agent Link

DELETE /v1/agent-links/{linkId}

Request

```bash curl -X DELETE "http://localhost:8089/v1/agent-links/{linkId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agent-links/{linkId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/agent-links/{linkId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `linkId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete an agent link | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Agent Memory Source: https://docs.everstack.ai/api-reference/agents/delete-agent-memory #### Metadata ```yaml title: "DELETE Delete Agent Memory" full: true ```

Delete Agent Memory

DELETE {"/v1/agents/memories/{memoryId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/agents/memories/{memoryId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/memories/{memoryId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/agents/memories/{memoryId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `memoryId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete a persistent memory entry | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Agent Trigger Source: https://docs.everstack.ai/api-reference/agents/delete-agent-trigger #### Metadata ```yaml title: "DELETE Delete Agent Trigger" full: true ```

Delete Agent Trigger

DELETE {"/v1/agent-triggers/{id}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/agent-triggers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agent-triggers/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/agent-triggers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

*No example available* ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete a trigger #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Agent Source: https://docs.everstack.ai/api-reference/agents/delete-agent #### Metadata ```yaml title: "DELETE Delete Agent" full: true ```

Delete Agent

DELETE {"/v1/agents/{id}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/agents/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/agents/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete agent definition | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Cron Source: https://docs.everstack.ai/api-reference/agents/delete-cron #### Metadata ```yaml title: "DELETE Delete Cron" full: true ```

Delete Cron

DELETE {"/v1/sandbox/crons/{id}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/sandbox/crons/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/crons/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/sandbox/crons/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete a sandbox cron schedule | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Sandbox Volume Source: https://docs.everstack.ai/api-reference/agents/delete-sandbox-volume #### Metadata ```yaml title: "DELETE Delete Sandbox Volume" full: true ```

Delete Sandbox Volume

DELETE /v1/volumes/{volumeId}

Request

```bash curl -X DELETE "http://localhost:8089/v1/volumes/{volumeId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/volumes/{volumeId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/volumes/{volumeId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

*No example available* ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `volumeId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | Optional; defaults to the caller's tenant resolved from context. | ### Responses #### 200 Delete a persistent volume #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete SSHKey Source: https://docs.everstack.ai/api-reference/agents/delete-sshkey #### Metadata ```yaml title: "DELETE Delete SSHKey" full: true ```

Delete SSHKey

DELETE {"/v1/settings/ssh-keys/{keyId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/settings/ssh-keys/{keyId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/settings/ssh-keys/{keyId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/settings/ssh-keys/{keyId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `keyId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Remove an SSH key | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Trooper Link Source: https://docs.everstack.ai/api-reference/agents/delete-trooper-link #### Metadata ```yaml title: "DELETE Delete Trooper Link" full: true ```

Delete Trooper Link

DELETE /v1/trooper-links/{linkId}

Request

```bash curl -X DELETE "http://localhost:8089/v1/trooper-links/{linkId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/trooper-links/{linkId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/trooper-links/{linkId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `linkId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete a trooper link | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Trooper Source: https://docs.everstack.ai/api-reference/agents/delete-trooper #### Metadata ```yaml title: "DELETE Delete Trooper" full: true ```

Delete Trooper

DELETE /v1/troopers/{id}

Request

```bash curl -X DELETE "http://localhost:8089/v1/troopers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/troopers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete trooper | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Webhook Source: https://docs.everstack.ai/api-reference/agents/delete-webhook #### Metadata ```yaml title: "DELETE Delete Webhook" full: true ```

Delete Webhook

DELETE {"/v1/sandbox/webhooks/{id}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/sandbox/webhooks/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/webhooks/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/sandbox/webhooks/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete a sandbox webhook | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Deploy Agent Source: https://docs.everstack.ai/api-reference/agents/deploy-agent #### Metadata ```yaml title: "POST Deploy Agent" full: true ```

Deploy Agent

POST {"/v1/agents/{agentId}/deploy"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{agentId}/deploy" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","changelog":"string","rateLimitRpm":0,"maxConcurrentSessions":0,"maxTurnsPerSession":0,"sessionTimeoutSeconds":0,"disableSessionTracking":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/deploy", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "changelog": "string", "rateLimitRpm": 0, "maxConcurrentSessions": 0, "maxTurnsPerSession": 0, "sessionTimeoutSeconds": 0, "disableSessionTracking": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{agentId}/deploy", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "changelog": "string", "rateLimitRpm": 0, "maxConcurrentSessions": 0, "maxTurnsPerSession": 0, "sessionTimeoutSeconds": 0, "disableSessionTracking": true }, ) data = response.json() ```

Response

```json { "deployment": { "id": "string", "tenantId": "string", "agentId": "string", "name": "string", "version": 0, "status": "string", "description": "string", "changelog": "string", "rateLimitRpm": 0, "maxConcurrentSessions": 0, "maxTurnsPerSession": 0, "sessionTimeoutSeconds": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "deployedBy": "string", "disableSessionTracking": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `changelog` | `string` | No | | | `rateLimitRpm` | `integer` | No | | | `maxConcurrentSessions` | `integer` | No | | | `maxTurnsPerSession` | `integer` | No | | | `sessionTimeoutSeconds` | `integer` | No | | | `disableSessionTracking` | `boolean` | No | | ### Responses #### 200 Deploy an agent as an API endpoint | Property | Type | Description | |----------|------|-------------| | `deployment` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Destroy Sandbox Source: https://docs.everstack.ai/api-reference/agents/destroy-sandbox #### Metadata ```yaml title: "DELETE Destroy Sandbox" full: true ```

Destroy Sandbox

DELETE {"/v1/sandbox/{sessionId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/sandbox/{sessionId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sessionId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/sandbox/{sessionId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Destroy a sandbox instance | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Detect Listening Ports Source: https://docs.everstack.ai/api-reference/agents/detect-listening-ports #### Metadata ```yaml title: "GET Detect Listening Ports" full: true ```

Detect Listening Ports

GET {"/v1/sandbox/{sessionId}/ports/detect"}

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/{sessionId}/ports/detect" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sessionId}/ports/detect", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/{sessionId}/ports/detect", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "ports": [ { "port": 0, "protocol": "string", "address": "string", "pid": 0, "process": "string", "isExposed": true } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Auto-detect listening ports inside a sandbox | Property | Type | Description | |----------|------|-------------| | `ports` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Export Agent To Opencode Source: https://docs.everstack.ai/api-reference/agents/export-agent-to-opencode #### Metadata ```yaml title: "GET Export Agent To Opencode" full: true ```

Export Agent To Opencode

GET {"/v1/agents/{id}/export/opencode"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/{id}/export/opencode" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{id}/export/opencode", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/{id}/export/opencode", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "opencodeAgentJson": "string", "warnings": [ "string" ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Export an agent as an Opencode-compatible payload | Property | Type | Description | |----------|------|-------------| | `opencodeAgentJson` | `string` | | | `warnings` | `string[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Active Agent Revision Source: https://docs.everstack.ai/api-reference/agents/get-active-agent-revision #### Metadata ```yaml title: "GET Get Active Agent Revision" full: true ```

Get Active Agent Revision

GET /v1/agents/{agentId}/revisions/active

Request

```bash curl -X GET "http://localhost:8089/v1/agents/{agentId}/revisions/active" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/revisions/active", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/{agentId}/revisions/active", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "revision": { "id": "string", "tenantId": "string", "agentId": "string", "number": 0, "digest": "string", "format": 0, "files": [ { "path": "string", "content": "string", "sha256": "string", "mode": 0, "sizeBytes": "string" } ], "functions": [ { "name": "string", "description": "string", "path": "string", "exportName": "string", "runtime": "string" } ], "createdBy": "string", "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get the active source revision for an agent | Property | Type | Description | |----------|------|-------------| | `revision` | `object` | AgentRevision is an immutable, content-addressed agent source project. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Agent Revision Source: https://docs.everstack.ai/api-reference/agents/get-agent-revision #### Metadata ```yaml title: "GET Get Agent Revision" full: true ```

Get Agent Revision

GET /v1/agent-revisions/{revisionId}

Request

```bash curl -X GET "http://localhost:8089/v1/agent-revisions/{revisionId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agent-revisions/{revisionId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agent-revisions/{revisionId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "revision": { "id": "string", "tenantId": "string", "agentId": "string", "number": 0, "digest": "string", "format": 0, "files": [ { "path": "string", "content": "string", "sha256": "string", "mode": 0, "sizeBytes": "string" } ], "functions": [ { "name": "string", "description": "string", "path": "string", "exportName": "string", "runtime": "string" } ], "createdBy": "string", "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `revisionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get an immutable agent source revision | Property | Type | Description | |----------|------|-------------| | `revision` | `object` | AgentRevision is an immutable, content-addressed agent source project. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Agent Trigger Source: https://docs.everstack.ai/api-reference/agents/get-agent-trigger #### Metadata ```yaml title: "GET Get Agent Trigger" full: true ```

Get Agent Trigger

GET {"/v1/agent-triggers/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/agent-triggers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agent-triggers/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agent-triggers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "trigger": { "id": "string", "tenantId": "string", "agentId": "string", "name": "string", "triggerType": "string", "enabled": true, "cronExpression": "string", "cronTimezone": "string", "webhookPath": "string", "eventSourceAgentId": "string", "eventType": "string", "inputTemplate": "string", "maxRetries": 0, "timeoutSeconds": 0, "maxConcurrent": 0, "circuitState": "string", "consecutiveFailures": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "retryDelaySeconds": 0 } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get a trigger by ID | Property | Type | Description | |----------|------|-------------| | `trigger` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Agent Source: https://docs.everstack.ai/api-reference/agents/get-agent #### Metadata ```yaml title: "GET Get Agent" full: true ```

Get Agent

GET {"/v1/agents/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "agent": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true } } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get agent by ID | Property | Type | Description | |----------|------|-------------| | `agent` | `object` | AgentDefinition is the blueprint/config for an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Deployment Source: https://docs.everstack.ai/api-reference/agents/get-deployment #### Metadata ```yaml title: "GET Get Deployment" full: true ```

Get Deployment

GET {"/v1/deployments/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/deployments/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/deployments/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/deployments/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "deployment": { "id": "string", "tenantId": "string", "agentId": "string", "name": "string", "version": 0, "status": "string", "description": "string", "changelog": "string", "rateLimitRpm": 0, "maxConcurrentSessions": 0, "maxTurnsPerSession": 0, "sessionTimeoutSeconds": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "deployedBy": "string", "disableSessionTracking": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get a deployment by ID | Property | Type | Description | |----------|------|-------------| | `deployment` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Review Source: https://docs.everstack.ai/api-reference/agents/get-review #### Metadata ```yaml title: "GET Get Review" full: true ```

Get Review

GET {"/v1/agents/reviews/{reviewId}"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/reviews/{reviewId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/reviews/{reviewId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/reviews/{reviewId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "review": { "id": "string", "sessionId": "string", "tenantId": "string", "agentId": "string", "turnNumber": 0, "iteration": 0, "status": "APPROVAL_REVIEW_STATUS_UNSPECIFIED", "toolCalls": [ { "toolCallId": "string", "toolName": "string", "toolArgs": "string" } ], "decisions": [ { "toolCallId": "string", "action": "APPROVAL_ACTION_UNSPECIFIED", "reason": "string" } ], "defaultAction": "string", "requestedAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "resolvedAt": "2024-01-01T00:00:00Z", "resolvedBy": "string", "resolutionReason": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `reviewId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get an approval review by ID | Property | Type | Description | |----------|------|-------------| | `review` | `object` | ApprovalReview represents a HITL approval review for tool calls. V1 is single-instance; multi-instance via Redis pub/sub is v2. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Sandbox Instance Source: https://docs.everstack.ai/api-reference/agents/get-sandbox-instance #### Metadata ```yaml title: "GET Get Sandbox Instance" full: true ```

Get Sandbox Instance

GET {"/v1/sandbox/instances/{sandboxId}"}

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/instances/{sandboxId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/instances/{sandboxId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "instance": { "id": "string", "sessionId": "string", "tenantId": "string", "backend": "string", "containerId": "string", "image": "string", "status": "SANDBOX_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "destroyReason": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitCommitSha": "string", "lifecycleState": "string", "revivableUntil": "2024-01-01T00:00:00Z", "stoppedAt": "2024-01-01T00:00:00Z", "sshEnabled": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get a sandbox instance by ID | Property | Type | Description | |----------|------|-------------| | `instance` | `object` | SandboxInstance represents a running sandbox environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Sandbox Overview Source: https://docs.everstack.ai/api-reference/agents/get-sandbox-overview #### Metadata ```yaml title: "GET Get Sandbox Overview" full: true ```

Get Sandbox Overview

GET /v1/sandbox/overview

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/overview" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/overview", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/overview", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "overview": { "totalInstances": 0, "runningInstances": 0, "maxSandboxes": 0, "backend": "string", "maxCpu": 0, "maxMemoryMb": "string", "healthy": true, "aggregateCpuPercent": 0, "aggregateMemoryUsage": "string", "aggregateMemoryLimit": "string", "aggregateMemoryPercent": 0, "aggregateNetworkRxBytes": "string", "aggregateNetworkTxBytes": "string", "aggregateBlockRead": "string", "aggregateBlockWrite": "string", "aggregatePids": 0, "totalExecutions": 0, "avgExecutionDurationMs": 0 } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | ### Responses #### 200 Get sandbox subsystem overview | Property | Type | Description | |----------|------|-------------| | `overview` | `object` | SandboxOverview provides a summary of the sandbox subsystem. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Get Sandbox Preview Url generates a signed preview URL for a sandbox port. Source: https://docs.everstack.ai/api-reference/agents/get-sandbox-preview-url-generates-a-signed-preview-url-for-a-sandbox-port-the-url-embeds-an-hmac-sha256-auth-token-so-it-can-be-shared-directly-without-requiring-custom-http-headers-iframe-embeds-link-sharing "GetSandboxPreviewUrl generates a signed preview URL for a sandbox port. #### Metadata ```yaml title: "POST Get Sandbox Preview Url generates a signed preview URL for a sandbox port. The URL embeds an HMAC-SHA256 auth token so it can be shared directly without requiring custom HTTP headers (iframe embeds, link sharing)." description: "GetSandboxPreviewUrl generates a signed preview URL for a sandbox port. The URL embeds an HMAC-SHA256 auth token so it can be shared directly without requiring custom HTTP headers (iframe embeds, link sharing)." full: true ```

Get Sandbox Preview Url generates a signed preview URL for a sandbox port. The URL embeds an HMAC-SHA256 auth token so it can be shared directly without requiring custom HTTP headers (iframe embeds, link sharing).

POST /v1/sandbox/instances/{sandboxId}/preview-url

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/instances/{sandboxId}/preview-url" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","port":0,"expiresInSeconds":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/preview-url", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "port": 0, "expiresInSeconds": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/preview-url", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "port": 0, "expiresInSeconds": 0 }, ) data = response.json() ```

Response

```json { "url": "string", "expiresAt": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `port` | `integer` | No | Port to generate the preview URL for (e.g. 3000). | | `expiresInSeconds` | `integer` | No | How long the signed URL should remain valid (1-86400 seconds). Default: 3600. | ### Responses #### 200 Generate a signed preview URL for a sandbox port | Property | Type | Description | |----------|------|-------------| | `url` | `string` | Signed URL embedding the auth token -- no custom headers required. Share directly or embed in iframes. | | `expiresAt` | `string` | RFC 3339 expiry timestamp. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Sandbox SSHInfo Source: https://docs.everstack.ai/api-reference/agents/get-sandbox-sshinfo #### Metadata ```yaml title: "GET Get Sandbox SSHInfo" full: true ```

Get Sandbox SSHInfo

GET {"/v1/sandbox/{sandboxId}/ssh/info"}

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/{sandboxId}/ssh/info" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/ssh/info", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/{sandboxId}/ssh/info", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "enabled": true, "connectionString": "string", "host": "string", "port": 0, "hostFingerprint": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get SSH connection info for a sandbox | Property | Type | Description | |----------|------|-------------| | `enabled` | `boolean` | | | `connectionString` | `string` | | | `host` | `string` | | | `port` | `integer` | | | `hostFingerprint` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Sandbox Stats Source: https://docs.everstack.ai/api-reference/agents/get-sandbox-stats #### Metadata ```yaml title: "GET Get Sandbox Stats" full: true ```

Get Sandbox Stats

GET {"/v1/sandbox/{sessionId}/stats"}

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/{sessionId}/stats" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sessionId}/stats", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/{sessionId}/stats", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "stats": { "cpuPercent": 0, "memoryUsage": "string", "memoryLimit": "string", "memoryPercent": 0, "networkRxBytes": "string", "networkTxBytes": "string", "blockRead": "string", "blockWrite": "string", "pids": 0, "timestamp": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get live stats for a sandbox | Property | Type | Description | |----------|------|-------------| | `stats` | `object` | SandboxStats holds a point-in-time resource usage snapshot. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Sandbox Template Source: https://docs.everstack.ai/api-reference/agents/get-sandbox-template #### Metadata ```yaml title: "GET Get Sandbox Template" full: true ```

Get Sandbox Template

GET {"/v1/sandbox/templates/{templateId}"}

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/templates/{templateId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/templates/{templateId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/templates/{templateId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "template": { "id": "string", "name": "string", "slug": "string", "description": "string", "icon": "string", "iconColor": "string", "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "workDir": "string", "tags": [ "string" ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `templateId` | path | `string` | **Yes** | ID or slug | ### Responses #### 200 Get a sandbox template by ID or slug | Property | Type | Description | |----------|------|-------------| | `template` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Session Source: https://docs.everstack.ai/api-reference/agents/get-session #### Metadata ```yaml title: "GET Get Session" full: true ```

Get Session

GET {"/v1/agents/sessions/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/sessions/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/sessions/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "session": { "id": "string", "tenantId": "string", "agentId": "string", "status": "SESSION_STATUS_UNSPECIFIED", "turnCount": 0, "totalTokens": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z", "turns": [ { "id": "string", "sessionId": "string", "turnNumber": 0, "status": "TURN_STATUS_UNSPECIFIED", "userInput": "string", "assistantOutput": "string", "toolCalls": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "latencyMs": "string", "error": "string", "createdAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get session by ID | Property | Type | Description | |----------|------|-------------| | `session` | `object` | AgentSession is an execution instance of an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Trooper Source: https://docs.everstack.ai/api-reference/agents/get-trooper #### Metadata ```yaml title: "GET Get Trooper" full: true ```

Get Trooper

GET /v1/troopers/{id}

Request

```bash curl -X GET "http://localhost:8089/v1/troopers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/troopers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "trooper": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "status": "TROOPER_STATUS_UNSPECIFIED", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "sandboxId": "string", "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get trooper by ID | Property | Type | Description | |----------|------|-------------| | `trooper` | `object` | Trooper is a first-class intelligent agent environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Global Replace Source: https://docs.everstack.ai/api-reference/agents/global-replace #### Metadata ```yaml title: "POST Global Replace" full: true ```

Global Replace

POST /v1/sandbox/instances/{sandboxId}/files/global-replace

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/instances/{sandboxId}/files/global-replace" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"path":"string","pattern":"string","replacement":"string","recursive":true,"dryRun":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/files/global-replace", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "path": "string", "pattern": "string", "replacement": "string", "recursive": true, "dryRun": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/files/global-replace", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "path": "string", "pattern": "string", "replacement": "string", "recursive": true, "dryRun": true }, ) data = response.json() ```

Response

```json { "dryRun": true, "pattern": "string", "replacement": "string", "path": "string", "output": "string", "exitCode": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `path` | `string` | No | Directory to operate in (default "."). | | `pattern` | `string` | No | | | `replacement` | `string` | No | | | `recursive` | `boolean` | No | | | `dryRun` | `boolean` | No | When true, returns a preview without modifying files. | ### Responses #### 200 Find-and-replace across files inside a sandbox | Property | Type | Description | |----------|------|-------------| | `dryRun` | `boolean` | | | `pattern` | `string` | | | `replacement` | `string` | | | `path` | `string` | | | `output` | `string` | | | `exitCode` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Grant Sandbox SSHAccess Source: https://docs.everstack.ai/api-reference/agents/grant-sandbox-sshaccess #### Metadata ```yaml title: "POST Grant Sandbox SSHAccess" full: true ```

Grant Sandbox SSHAccess

POST {"/v1/sandbox/{sandboxId}/ssh/access"}

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/{sandboxId}/ssh/access" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","userId":"string","grantedBy":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/ssh/access", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "userId": "string", "grantedBy": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/{sandboxId}/ssh/access", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "userId": "string", "grantedBy": "string" }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `userId` | `string` | No | | | `grantedBy` | `string` | No | | ### Responses #### 200 Grant a user SSH access to a sandbox | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST HITL Approval Gate Source: https://docs.everstack.ai/api-reference/agents/hitl-approval-gate HITL Approval Gate #### Metadata ```yaml title: "POST HITL Approval Gate" description: "HITL Approval Gate" full: true ```

HITL Approval Gate

POST {"/v1/agents/reviews/{reviewId}/submit"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/reviews/{reviewId}/submit" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","action":"APPROVAL_ACTION_UNSPECIFIED","decisions":[{"toolCallId":"string","action":"APPROVAL_ACTION_UNSPECIFIED","reason":"string"}],"reason":"string","resolvedBy":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/reviews/{reviewId}/submit", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "action": "APPROVAL_ACTION_UNSPECIFIED", "decisions": [ { "toolCallId": "string", "action": "APPROVAL_ACTION_UNSPECIFIED", "reason": "string" } ], "reason": "string", "resolvedBy": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/reviews/{reviewId}/submit", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "action": "APPROVAL_ACTION_UNSPECIFIED", "decisions": [ { "toolCallId": "string", "action": "APPROVAL_ACTION_UNSPECIFIED", "reason": "string" } ], "reason": "string", "resolvedBy": "string" }, ) data = response.json() ```

Response

```json { "accepted": true, "message": "string", "review": { "id": "string", "sessionId": "string", "tenantId": "string", "agentId": "string", "turnNumber": 0, "iteration": 0, "status": "APPROVAL_REVIEW_STATUS_UNSPECIFIED", "toolCalls": [ { "toolCallId": "string", "toolName": "string", "toolArgs": "string" } ], "decisions": [ { "toolCallId": "string", "action": "APPROVAL_ACTION_UNSPECIFIED", "reason": "string" } ], "defaultAction": "string", "requestedAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "resolvedAt": "2024-01-01T00:00:00Z", "resolvedBy": "string", "resolutionReason": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `reviewId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `action` | `"APPROVAL_ACTION_UNSPECIFIED" \| "APPROVAL_ACTION_APPROVE" \| "APPROVAL_ACTION_DENY"` | No | ApprovalAction is the action to take on a review. | | `decisions` | `object[]` | No | | | `reason` | `string` | No | | | `resolvedBy` | `string` | No | | ### Responses #### 200 Submit a review decision for a pending approval | Property | Type | Description | |----------|------|-------------| | `accepted` | `boolean` | | | `message` | `string` | | | `review` | `object` | ApprovalReview represents a HITL approval review for tool calls. V1 is single-instance; multi-instance via Redis pub/sub is v2. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Immutable agent source revisions. Source: https://docs.everstack.ai/api-reference/agents/immutable-agent-source-revisions Immutable agent source revisions. #### Metadata ```yaml title: "POST Immutable agent source revisions." description: "Immutable agent source revisions." full: true ```

Immutable agent source revisions.

POST /v1/agents/{agentId}/revisions

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{agentId}/revisions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","files":[{"path":"string","content":"string","sha256":"string","mode":0,"sizeBytes":"string"}],"functions":[{"name":"string","description":"string","path":"string","exportName":"string","runtime":"string"}]}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/revisions", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "files": [ { "path": "string", "content": "string", "sha256": "string", "mode": 0, "sizeBytes": "string" } ], "functions": [ { "name": "string", "description": "string", "path": "string", "exportName": "string", "runtime": "string" } ] }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{agentId}/revisions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "files": [ { "path": "string", "content": "string", "sha256": "string", "mode": 0, "sizeBytes": "string" } ], "functions": [ { "name": "string", "description": "string", "path": "string", "exportName": "string", "runtime": "string" } ] }, ) data = response.json() ```

Response

```json { "revision": { "id": "string", "tenantId": "string", "agentId": "string", "number": 0, "digest": "string", "format": 0, "files": [ { "path": "string", "content": "string", "sha256": "string", "mode": 0, "sizeBytes": "string" } ], "functions": [ { "name": "string", "description": "string", "path": "string", "exportName": "string", "runtime": "string" } ], "createdBy": "string", "createdAt": "2024-01-01T00:00:00Z" }, "created": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `files` | `object[]` | No | | | `functions` | `object[]` | No | | ### Responses #### 200 Create and activate an immutable agent source revision | Property | Type | Description | |----------|------|-------------| | `revision` | `object` | AgentRevision is an immutable, content-addressed agent source project. | | `created` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Import Agent From Opencode Source: https://docs.everstack.ai/api-reference/agents/import-agent-from-opencode #### Metadata ```yaml title: "POST Import Agent From Opencode" full: true ```

Import Agent From Opencode

POST /v1/agents/import/opencode

Request

```bash curl -X POST "http://localhost:8089/v1/agents/import/opencode" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","opencodeAgentJson":"string","dryRun":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/import/opencode", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "opencodeAgentJson": "string", "dryRun": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/import/opencode", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "opencodeAgentJson": "string", "dryRun": true }, ) data = response.json() ```

Response

```json { "valid": true, "warnings": [ "string" ], "agent": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true } } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `opencodeAgentJson` | `string` | No | | | `dryRun` | `boolean` | No | | ### Responses #### 200 Import an Opencode-compatible agent payload | Property | Type | Description | |----------|------|-------------| | `valid` | `boolean` | | | `warnings` | `string[]` | | | `agent` | `object` | AgentDefinition is the blueprint/config for an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Link Git Hub Installation Source: https://docs.everstack.ai/api-reference/agents/link-git-hub-installation #### Metadata ```yaml title: "POST Link Git Hub Installation" full: true ```

Link Git Hub Installation

POST /v1/integrations/github/installations/link

Request

```bash curl -X POST "http://localhost:8089/v1/integrations/github/installations/link" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","installationId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/integrations/github/installations/link", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "installationId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/integrations/github/installations/link", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "installationId": "string" }, ) data = response.json() ```

Response

```json { "installation": { "id": "string", "tenantId": "string", "installationId": "string", "accountLogin": "string", "accountType": "string", "appId": "string", "repositorySelection": "string", "status": "string", "installedBy": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `installationId` | `string` | No | | ### Responses #### 200 Link a pending GitHub App installation to the current tenant | Property | Type | Description | |----------|------|-------------| | `installation` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Agent Channel Bindings Source: https://docs.everstack.ai/api-reference/agents/list-agent-channel-bindings #### Metadata ```yaml title: "GET List Agent Channel Bindings" full: true ```

List Agent Channel Bindings

GET /v1/agents/{agentId}/channels

Request

```bash curl -X GET "http://localhost:8089/v1/agents/{agentId}/channels" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/channels", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/{agentId}/channels", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "bindings": [ { "id": "string", "agentId": "string", "channelConfigId": "string", "enabled": true, "createdAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List channel bindings for an agent | Property | Type | Description | |----------|------|-------------| | `bindings` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Agent Links Source: https://docs.everstack.ai/api-reference/agents/list-agent-links #### Metadata ```yaml title: "GET List Agent Links" full: true ```

List Agent Links

GET /v1/agents/{agentId}/links

Request

```bash curl -X GET "http://localhost:8089/v1/agents/{agentId}/links" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/links", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/{agentId}/links", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "links": [ { "id": "string", "tenantId": "string", "sourceAgentId": "string", "targetType": "string", "targetId": "string", "targetName": "string", "linkType": "AGENT_LINK_TYPE_UNSPECIFIED", "protocol": "AGENT_LINK_PROTOCOL_UNSPECIFIED", "status": "AGENT_LINK_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List agent links | Property | Type | Description | |----------|------|-------------| | `links` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Agent Memories Source: https://docs.everstack.ai/api-reference/agents/list-agent-memories #### Metadata ```yaml title: "GET List Agent Memories" full: true ```

List Agent Memories

GET {"/v1/agents/{agentId}/memories"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/{agentId}/memories" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/memories", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/{agentId}/memories", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "memories": [ { "id": "string", "agentId": "string", "tenantId": "string", "memoryType": "string", "content": "string", "factKey": "string", "confidence": 0, "source": "string", "scope": "string", "userId": "string", "accessCount": 0, "isActive": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "sourceSessionId": "string", "sourceTurnNumber": 0, "supersededBy": "string", "lastAccessedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `memoryType` | query | `string` | No | | | `scope` | query | `string` | No | | | `activeOnly` | query | `boolean` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List persistent memories for an agent | Property | Type | Description | |----------|------|-------------| | `memories` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Agent Trigger Executions Source: https://docs.everstack.ai/api-reference/agents/list-agent-trigger-executions #### Metadata ```yaml title: "GET List Agent Trigger Executions" full: true ```

List Agent Trigger Executions

GET {"/v1/agent-triggers/{triggerId}/executions"}

Request

```bash curl -X GET "http://localhost:8089/v1/agent-triggers/{triggerId}/executions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agent-triggers/{triggerId}/executions", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agent-triggers/{triggerId}/executions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "executions": [ { "id": "string", "triggerId": "string", "sessionId": "string", "status": "string", "inputRendered": "string", "outputPreview": "string", "errorMessage": "string", "attempt": 0, "durationMs": 0, "startedAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `triggerId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List execution history for a trigger | Property | Type | Description | |----------|------|-------------| | `executions` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Agent Triggers Source: https://docs.everstack.ai/api-reference/agents/list-agent-triggers #### Metadata ```yaml title: "GET List Agent Triggers" full: true ```

List Agent Triggers

GET {"/v1/agents/{agentId}/triggers"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/{agentId}/triggers" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/triggers", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/{agentId}/triggers", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "triggers": [ { "id": "string", "tenantId": "string", "agentId": "string", "name": "string", "triggerType": "string", "enabled": true, "cronExpression": "string", "cronTimezone": "string", "webhookPath": "string", "eventSourceAgentId": "string", "eventType": "string", "inputTemplate": "string", "maxRetries": 0, "timeoutSeconds": 0, "maxConcurrent": 0, "circuitState": "string", "consecutiveFailures": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "retryDelaySeconds": 0 } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List triggers for an agent | Property | Type | Description | |----------|------|-------------| | `triggers` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Agents Source: https://docs.everstack.ai/api-reference/agents/list-agents #### Metadata ```yaml title: "GET List Agents" full: true ```

List Agents

GET /v1/agents

Request

```bash curl -X GET "http://localhost:8089/v1/agents" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "agents": [ { "id": "string", "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true } } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `enabled` | query | `boolean` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | | `includeHidden` | query | `boolean` | No | | | `mode` | query | `"AGENT_MODE_UNSPECIFIED" \| "AGENT_MODE_PRIMARY" \| "AGENT_MODE_SUBAGENT"` | No | | ### Responses #### 200 List all agents for tenant | Property | Type | Description | |----------|------|-------------| | `agents` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Crons Source: https://docs.everstack.ai/api-reference/agents/list-crons #### Metadata ```yaml title: "GET List Crons" full: true ```

List Crons

GET /v1/sandbox/crons

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/crons" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/crons", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/crons", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "crons": [ { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "lastRunAt": "2024-01-01T00:00:00Z", "nextRunAt": "2024-01-01T00:00:00Z", "runCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `sandboxId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List sandbox cron schedules | Property | Type | Description | |----------|------|-------------| | `crons` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Deployment Invocations Source: https://docs.everstack.ai/api-reference/agents/list-deployment-invocations #### Metadata ```yaml title: "GET List Deployment Invocations" full: true ```

List Deployment Invocations

GET {"/v1/deployments/{deploymentId}/invocations"}

Request

```bash curl -X GET "http://localhost:8089/v1/deployments/{deploymentId}/invocations" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/deployments/{deploymentId}/invocations", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/deployments/{deploymentId}/invocations", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "invocations": [ { "id": "string", "deploymentId": "string", "status": "string", "turns": 0, "promptTokens": 0, "completionTokens": 0, "durationMs": 0, "errorMessage": "string", "createdAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `deploymentId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List invocation history for a deployment | Property | Type | Description | |----------|------|-------------| | `invocations` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Deployment Keys Source: https://docs.everstack.ai/api-reference/agents/list-deployment-keys #### Metadata ```yaml title: "GET List Deployment Keys" full: true ```

List Deployment Keys

GET {"/v1/deployments/{deploymentId}/keys"}

Request

```bash curl -X GET "http://localhost:8089/v1/deployments/{deploymentId}/keys" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/deployments/{deploymentId}/keys", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/deployments/{deploymentId}/keys", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "keys": [ { "id": "string", "deploymentId": "string", "name": "string", "keyPrefix": "string", "isActive": true, "expiresAt": "2024-01-01T00:00:00Z", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `deploymentId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List API keys for a deployment | Property | Type | Description | |----------|------|-------------| | `keys` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Deployments Source: https://docs.everstack.ai/api-reference/agents/list-deployments #### Metadata ```yaml title: "GET List Deployments" full: true ```

List Deployments

GET {"/v1/agents/{agentId}/deployments"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/{agentId}/deployments" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/deployments", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/{agentId}/deployments", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "deployments": [ { "id": "string", "tenantId": "string", "agentId": "string", "name": "string", "version": 0, "status": "string", "description": "string", "changelog": "string", "rateLimitRpm": 0, "maxConcurrentSessions": 0, "maxTurnsPerSession": 0, "sessionTimeoutSeconds": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "deployedBy": "string", "disableSessionTracking": true } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List deployments for an agent | Property | Type | Description | |----------|------|-------------| | `deployments` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Exposed Ports Source: https://docs.everstack.ai/api-reference/agents/list-exposed-ports #### Metadata ```yaml title: "GET List Exposed Ports" full: true ```

List Exposed Ports

GET {"/v1/sandbox/{sessionId}/ports"}

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/{sessionId}/ports" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sessionId}/ports", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/{sessionId}/ports", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "ports": [ { "id": "string", "sandboxId": "string", "port": 0, "protocol": "string", "subdomain": "string", "url": "string", "status": "string", "createdAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List exposed ports for a sandbox | Property | Type | Description | |----------|------|-------------| | `ports` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Git Hub Branches Source: https://docs.everstack.ai/api-reference/agents/list-git-hub-branches #### Metadata ```yaml title: "GET List Git Hub Branches" full: true ```

List Git Hub Branches

GET {"/v1/integrations/github/installations/{installationId}/repos/{owner}/{repo}/branches"}

Request

```bash curl -X GET "http://localhost:8089/v1/integrations/github/installations/{installationId}/repos/{owner}/{repo}/branches" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/integrations/github/installations/{installationId}/repos/{owner}/{repo}/branches", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/integrations/github/installations/{installationId}/repos/{owner}/{repo}/branches", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "branches": [ { "name": "string", "protected": true, "commitSha": "string" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `installationId` | path | `string` | **Yes** | | | `owner` | path | `string` | **Yes** | | | `repo` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `page` | query | `integer` | No | | | `perPage` | query | `integer` | No | | ### Responses #### 200 List branches for a specific repo | Property | Type | Description | |----------|------|-------------| | `branches` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Git Hub Installations Source: https://docs.everstack.ai/api-reference/agents/list-git-hub-installations #### Metadata ```yaml title: "GET List Git Hub Installations" full: true ```

List Git Hub Installations

GET /v1/integrations/github/installations

Request

```bash curl -X GET "http://localhost:8089/v1/integrations/github/installations" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/integrations/github/installations", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/integrations/github/installations", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "installations": [ { "id": "string", "tenantId": "string", "installationId": "string", "accountLogin": "string", "accountType": "string", "appId": "string", "repositorySelection": "string", "status": "string", "installedBy": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | ### Responses #### 200 List active GitHub App installations for tenant | Property | Type | Description | |----------|------|-------------| | `installations` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Git Hub Repositories Source: https://docs.everstack.ai/api-reference/agents/list-git-hub-repositories #### Metadata ```yaml title: "GET List Git Hub Repositories" full: true ```

List Git Hub Repositories

GET {"/v1/integrations/github/installations/{installationId}/repos"}

Request

```bash curl -X GET "http://localhost:8089/v1/integrations/github/installations/{installationId}/repos" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/integrations/github/installations/{installationId}/repos", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/integrations/github/installations/{installationId}/repos", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "repositories": [ { "id": "string", "name": "string", "fullName": "string", "description": "string", "private": true, "defaultBranch": "string", "language": "string", "sizeKb": 0, "htmlUrl": "string" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `installationId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `query` | query | `string` | No | | | `page` | query | `integer` | No | | | `perPage` | query | `integer` | No | | ### Responses #### 200 Paginated repo listing with search for an installation | Property | Type | Description | |----------|------|-------------| | `repositories` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Reviews Source: https://docs.everstack.ai/api-reference/agents/list-reviews #### Metadata ```yaml title: "GET List Reviews" full: true ```

List Reviews

GET /v1/agents/reviews

Request

```bash curl -X GET "http://localhost:8089/v1/agents/reviews" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/reviews", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/reviews", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "reviews": [ { "id": "string", "sessionId": "string", "tenantId": "string", "agentId": "string", "turnNumber": 0, "iteration": 0, "status": "APPROVAL_REVIEW_STATUS_UNSPECIFIED", "toolCalls": [], "decisions": [], "defaultAction": "string", "requestedAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "resolvedAt": "2024-01-01T00:00:00Z", "resolvedBy": "string", "resolutionReason": "string" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `sessionId` | query | `string` | No | | | `status` | query | `"APPROVAL_REVIEW_STATUS_UNSPECIFIED" \| "APPROVAL_REVIEW_STATUS_PENDING" \| "APPROVAL_REVIEW_STATUS_APPROVED" \| "APPROVAL_REVIEW_STATUS_DENIED" \| "APPROVAL_REVIEW_STATUS_EXPIRED" \| "APPROVAL_REVIEW_STATUS_CANCELLED"` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List approval reviews | Property | Type | Description | |----------|------|-------------| | `reviews` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Sandbox Executions Source: https://docs.everstack.ai/api-reference/agents/list-sandbox-executions #### Metadata ```yaml title: "GET List Sandbox Executions" full: true ```

List Sandbox Executions

GET {"/v1/sandbox/{sandboxId}/executions"}

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/{sandboxId}/executions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/executions", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/{sandboxId}/executions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "executions": [ { "id": "string", "sandboxId": "string", "sessionId": "string", "toolName": "string", "toolCallId": "string", "language": "string", "command": "string", "exitCode": 0, "stdout": "string", "stderr": "string", "durationMs": "string", "timedOut": true, "createdAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List executions for a sandbox | Property | Type | Description | |----------|------|-------------| | `executions` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Sandbox Instances Source: https://docs.everstack.ai/api-reference/agents/list-sandbox-instances #### Metadata ```yaml title: "GET List Sandbox Instances" full: true ```

List Sandbox Instances

GET /v1/sandbox/instances

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/instances" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/instances", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "instances": [ { "id": "string", "sessionId": "string", "tenantId": "string", "backend": "string", "containerId": "string", "image": "string", "status": "SANDBOX_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "destroyReason": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitCommitSha": "string", "lifecycleState": "string", "revivableUntil": "2024-01-01T00:00:00Z", "stoppedAt": "2024-01-01T00:00:00Z", "sshEnabled": true } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `status` | query | `"SANDBOX_STATUS_UNSPECIFIED" \| "SANDBOX_STATUS_PENDING" \| "SANDBOX_STATUS_RUNNING" \| "SANDBOX_STATUS_STOPPED" \| "SANDBOX_STATUS_FAILED"` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List sandbox instances | Property | Type | Description | |----------|------|-------------| | `instances` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Sandbox SSHTokens Source: https://docs.everstack.ai/api-reference/agents/list-sandbox-sshtokens #### Metadata ```yaml title: "GET List Sandbox SSHTokens" full: true ```

List Sandbox SSHTokens

GET /v1/sandbox/{sandboxId}/ssh-tokens

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "tokens": [ { "id": "string", "sandboxId": "string", "tenantId": "string", "tokenPrefix": "string", "createdBy": "string", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "revokedAt": "2024-01-01T00:00:00Z", "lastUsedAt": "2024-01-01T00:00:00Z", "lastUsedIp": "string", "organizationId": "string", "instanceId": "string" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List active temporary SSH tokens for a sandbox | Property | Type | Description | |----------|------|-------------| | `tokens` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Sessions Source: https://docs.everstack.ai/api-reference/agents/list-sessions #### Metadata ```yaml title: "GET List Sessions" full: true ```

List Sessions

GET /v1/agents/sessions

Request

```bash curl -X GET "http://localhost:8089/v1/agents/sessions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/sessions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "sessions": [ { "id": "string", "tenantId": "string", "agentId": "string", "status": "SESSION_STATUS_UNSPECIFIED", "turnCount": 0, "totalTokens": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z", "turns": [] } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `agentId` | query | `string` | No | | | `status` | query | `"SESSION_STATUS_UNSPECIFIED" \| "SESSION_STATUS_CREATED" \| "SESSION_STATUS_RUNNING" \| "SESSION_STATUS_WAITING_FOR_INPUT" \| "SESSION_STATUS_WAITING_FOR_APPROVAL" \| "SESSION_STATUS_COMPLETED" \| "SESSION_STATUS_FAILED" \| "SESSION_STATUS_CANCELLED"` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List sessions | Property | Type | Description | |----------|------|-------------| | `sessions` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Spawn Nodes Source: https://docs.everstack.ai/api-reference/agents/list-spawn-nodes #### Metadata ```yaml title: "GET List Spawn Nodes" full: true ```

List Spawn Nodes

GET {"/v1/agents/sessions/{sessionId}/spawn-nodes"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/sessions/{sessionId}/spawn-nodes" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions/{sessionId}/spawn-nodes", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/sessions/{sessionId}/spawn-nodes", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "nodes": [ { "id": "string", "treeId": "string", "parentNodeId": "string", "agentId": "string", "depth": 0, "status": "string", "task": "string", "result": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "startedAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z", "executionId": "string", "tenantId": "string" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List spawn nodes for a session | Property | Type | Description | |----------|------|-------------| | `nodes` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List SSHKeys Source: https://docs.everstack.ai/api-reference/agents/list-sshkeys #### Metadata ```yaml title: "GET List SSHKeys" full: true ```

List SSHKeys

GET /v1/settings/ssh-keys

Request

```bash curl -X GET "http://localhost:8089/v1/settings/ssh-keys" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/settings/ssh-keys", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/settings/ssh-keys", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "keys": [ { "id": "string", "userId": "string", "name": "string", "fingerprint": "string", "keyType": "string", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `userId` | query | `string` | No | | ### Responses #### 200 List user's SSH keys | Property | Type | Description | |----------|------|-------------| | `keys` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Trooper Channel Bindings Source: https://docs.everstack.ai/api-reference/agents/list-trooper-channel-bindings #### Metadata ```yaml title: "GET List Trooper Channel Bindings" full: true ```

List Trooper Channel Bindings

GET /v1/troopers/{trooperId}/channels

Request

```bash curl -X GET "http://localhost:8089/v1/troopers/{trooperId}/channels" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{trooperId}/channels", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/troopers/{trooperId}/channels", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "bindings": [ { "id": "string", "trooperId": "string", "channelConfigId": "string", "enabled": true, "createdAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `trooperId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List channel bindings for a trooper | Property | Type | Description | |----------|------|-------------| | `bindings` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Trooper Links Source: https://docs.everstack.ai/api-reference/agents/list-trooper-links #### Metadata ```yaml title: "GET List Trooper Links" full: true ```

List Trooper Links

GET /v1/troopers/{trooperId}/links

Request

```bash curl -X GET "http://localhost:8089/v1/troopers/{trooperId}/links" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{trooperId}/links", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/troopers/{trooperId}/links", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "links": [ { "id": "string", "tenantId": "string", "sourceTrooperId": "string", "targetType": "string", "targetId": "string", "targetName": "string", "linkType": "TROOPER_LINK_TYPE_UNSPECIFIED", "protocol": "TROOPER_LINK_PROTOCOL_UNSPECIFIED", "status": "TROOPER_LINK_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `trooperId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List links for a trooper | Property | Type | Description | |----------|------|-------------| | `links` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Troopers Source: https://docs.everstack.ai/api-reference/agents/list-troopers #### Metadata ```yaml title: "GET List Troopers" full: true ```

List Troopers

GET /v1/troopers

Request

```bash curl -X GET "http://localhost:8089/v1/troopers" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/troopers", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/troopers", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "troopers": [ { "id": "string", "tenantId": "string", "name": "string", "description": "string", "status": "TROOPER_STATUS_UNSPECIFIED", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "sandboxId": "string", "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `status` | query | `"TROOPER_STATUS_UNSPECIFIED" \| "TROOPER_STATUS_CREATED" \| "TROOPER_STATUS_PROVISIONING" \| "TROOPER_STATUS_RUNNING" \| "TROOPER_STATUS_SLEEPING" \| "TROOPER_STATUS_WAKING" \| "TROOPER_STATUS_FAILED" \| "TROOPER_STATUS_TERMINATED"` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List all troopers for tenant | Property | Type | Description | |----------|------|-------------| | `troopers` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Webhooks Source: https://docs.everstack.ai/api-reference/agents/list-webhooks #### Metadata ```yaml title: "GET List Webhooks" full: true ```

List Webhooks

GET /v1/sandbox/webhooks

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/webhooks" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/webhooks", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/webhooks", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "webhooks": [ { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "path": "string", "url": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "rateLimitRpm": 0, "lastTriggeredAt": "2024-01-01T00:00:00Z", "triggerCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `sandboxId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List sandbox webhooks | Property | Type | Description | |----------|------|-------------| | `webhooks` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Memory Setup Source: https://docs.everstack.ai/api-reference/agents/memory-setup Memory Setup #### Metadata ```yaml title: "POST Memory Setup" description: "Memory Setup" full: true ```

Memory Setup

POST /v1/agents/memory/setup

Request

```bash curl -X POST "http://localhost:8089/v1/agents/memory/setup" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/memory/setup", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/memory/setup", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string", "backend": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body ### Responses #### 200 Setup memory backend (pgvector extension + embeddings) | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | | `backend` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Persistent sandbox volumes (POR-77). Source: https://docs.everstack.ai/api-reference/agents/persistent-sandbox-volumes-por-77 Persistent sandbox volumes (POR-77). #### Metadata ```yaml title: "GET Persistent sandbox volumes (POR-77)." description: "Persistent sandbox volumes (POR-77)." full: true ```

Persistent sandbox volumes (POR-77).

GET /v1/volumes

Request

```bash curl -X GET "http://localhost:8089/v1/volumes" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/volumes", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/volumes", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "volumes": [ { "id": "string", "tenantId": "string", "name": "string", "sizeBytes": "string", "usedBytes": "string", "createdAt": "string", "updatedAt": "string", "usageMeasuredAt": "string" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | Optional; defaults to the caller's tenant resolved from context. | ### Responses #### 200 List persistent volumes for the tenant | Property | Type | Description | |----------|------|-------------| | `volumes` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Port Exposure Source: https://docs.everstack.ai/api-reference/agents/port-exposure Port Exposure #### Metadata ```yaml title: "POST Port Exposure" description: "Port Exposure" full: true ```

Port Exposure

POST {"/v1/sandbox/{sessionId}/ports"}

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/{sessionId}/ports" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","port":0,"protocol":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sessionId}/ports", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "port": 0, "protocol": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/{sessionId}/ports", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "port": 0, "protocol": "string" }, ) data = response.json() ```

Response

```json { "mapping": { "id": "string", "sandboxId": "string", "port": 0, "protocol": "string", "subdomain": "string", "url": "string", "status": "string", "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `port` | `integer` | No | | | `protocol` | `string` | No | | ### Responses #### 200 Expose a sandbox port via subdomain | Property | Type | Description | |----------|------|-------------| | `mapping` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Provision Agent Source: https://docs.everstack.ai/api-reference/agents/provision-agent #### Metadata ```yaml title: "POST Provision Agent" full: true ```

Provision Agent

POST /v1/agents/{agentId}/provision

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{agentId}/provision" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/provision", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{agentId}/provision", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "agent": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true }, "lifecycleMode": "AGENT_LIFECYCLE_MODE_UNSPECIFIED", "lifecycleStatus": "AGENT_LIFECYCLE_STATUS_UNSPECIFIED", "icon": "string", "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandboxConfig": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string", "linkedSessionId": "string" }, "databaseConfig": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workersConfig": { "maxConcurrentWorkers": 0 }, "sandboxId": "string", "primarySessionId": "string", "activeRevisionId": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Provision a persistent agent sandbox | Property | Type | Description | |----------|------|-------------| | `agent` | `object` | AgentDefinition is the blueprint/config for an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Provision Trooper Source: https://docs.everstack.ai/api-reference/agents/provision-trooper #### Metadata ```yaml title: "POST Provision Trooper" full: true ```

Provision Trooper

POST /v1/troopers/{trooperId}/provision

Request

```bash curl -X POST "http://localhost:8089/v1/troopers/{trooperId}/provision" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{trooperId}/provision", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/troopers/{trooperId}/provision", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "trooper": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "status": "TROOPER_STATUS_UNSPECIFIED", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "sandboxId": "string", "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `trooperId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Provision a trooper sandbox | Property | Type | Description | |----------|------|-------------| | `trooper` | `object` | Trooper is a first-class intelligent agent environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Recreate Sandbox Source: https://docs.everstack.ai/api-reference/agents/recreate-sandbox #### Metadata ```yaml title: "POST Recreate Sandbox" full: true ```

Recreate Sandbox

POST /v1/sandbox/recreate

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/recreate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","sandboxId":"string","sessionId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/recreate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "sandboxId": "string", "sessionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/recreate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "sandboxId": "string", "sessionId": "string" }, ) data = response.json() ```

Response

```json { "id": "string", "sessionId": "string", "tenantId": "string", "containerId": "string", "status": "string", "backend": "string", "image": "string", "createdAt": "string", "expiresAt": "string", "name": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `sandboxId` | `string` | No | | | `sessionId` | `string` | No | | ### Responses #### 200 Recreate a sandbox from an expired instance's config | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `sessionId` | `string` | | | `tenantId` | `string` | | | `containerId` | `string` | | | `status` | `string` | | | `backend` | `string` | | | `image` | `string` | | | `createdAt` | `string` | | | `expiresAt` | `string` | | | `name` | `string` | Friendly name for the sandbox (if set). | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Remove Git Hub Installation Source: https://docs.everstack.ai/api-reference/agents/remove-git-hub-installation #### Metadata ```yaml title: "DELETE Remove Git Hub Installation" full: true ```

Remove Git Hub Installation

DELETE {"/v1/integrations/github/installations/{installationId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/integrations/github/installations/{installationId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/integrations/github/installations/{installationId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/integrations/github/installations/{installationId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `installationId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Unlink a GitHub App installation | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Resize Sandbox Source: https://docs.everstack.ai/api-reference/agents/resize-sandbox #### Metadata ```yaml title: "POST Resize Sandbox" full: true ```

Resize Sandbox

POST /v1/sandbox/instances/{sandboxId}/resize

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/instances/{sandboxId}/resize" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"cpuMillicores":"string","memoryMb":"string","diskMb":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/resize", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "cpuMillicores": "string", "memoryMb": "string", "diskMb": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/resize", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "cpuMillicores": "string", "memoryMb": "string", "diskMb": "string" }, ) data = response.json() ```

Response

```json { "sandboxId": "string", "cpuLimit": 0, "memoryMb": "string", "isRunning": true, "effectiveAt": "string", "updatedAt": "string", "note": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `cpuMillicores` | `string` | No | New CPU allocation in millicores (e.g. 1000 = 1 vCPU). 0 = unchanged. Max 4000. | | `memoryMb` | `string` | No | New memory in MB. 0 = unchanged. Max 8192. | | `diskMb` | `string` | No | New disk in MB. Any change requires the sandbox to be stopped first. | ### Responses #### 200 Dynamically resize a sandbox's CPU/memory allocation | Property | Type | Description | |----------|------|-------------| | `sandboxId` | `string` | | | `cpuLimit` | `number` | | | `memoryMb` | `string` | | | `isRunning` | `boolean` | | | `effectiveAt` | `string` | "immediately" or "on next start". | | `updatedAt` | `string` | RFC 3339 timestamp. | | `note` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Revive Sandbox Source: https://docs.everstack.ai/api-reference/agents/revive-sandbox #### Metadata ```yaml title: "POST Revive Sandbox" full: true ```

Revive Sandbox

POST {"/v1/sandbox/{sandboxId}/revive"}

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/{sandboxId}/revive" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/revive", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/{sandboxId}/revive", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "instance": { "id": "string", "sessionId": "string", "tenantId": "string", "backend": "string", "containerId": "string", "image": "string", "status": "SANDBOX_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "destroyReason": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitCommitSha": "string", "lifecycleState": "string", "revivableUntil": "2024-01-01T00:00:00Z", "stoppedAt": "2024-01-01T00:00:00Z", "sshEnabled": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Revive a stopped sandbox from its workspace snapshot | Property | Type | Description | |----------|------|-------------| | `instance` | `object` | SandboxInstance represents a running sandbox environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Revoke Deployment Key Source: https://docs.everstack.ai/api-reference/agents/revoke-deployment-key #### Metadata ```yaml title: "DELETE Revoke Deployment Key" full: true ```

Revoke Deployment Key

DELETE {"/v1/deployments/keys/{keyId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/deployments/keys/{keyId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/deployments/keys/{keyId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/deployments/keys/{keyId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

*No example available* ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `keyId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Revoke an API key for a deployment #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Revoke Sandbox SSHAccess Source: https://docs.everstack.ai/api-reference/agents/revoke-sandbox-sshaccess #### Metadata ```yaml title: "DELETE Revoke Sandbox SSHAccess" full: true ```

Revoke Sandbox SSHAccess

DELETE {"/v1/sandbox/{sandboxId}/ssh/access/{userId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/sandbox/{sandboxId}/ssh/access/{userId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/ssh/access/{userId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/sandbox/{sandboxId}/ssh/access/{userId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `userId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Revoke SSH access from a sandbox | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Revoke Sandbox SSHToken Source: https://docs.everstack.ai/api-reference/agents/revoke-sandbox-sshtoken #### Metadata ```yaml title: "DELETE Revoke Sandbox SSHToken" full: true ```

Revoke Sandbox SSHToken

DELETE /v1/sandbox/{sandboxId}/ssh-tokens/{tokenId}

Request

```bash curl -X DELETE "http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens/{tokenId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens/{tokenId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/sandbox/{sandboxId}/ssh-tokens/{tokenId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tokenId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Revoke a temporary SSH token for a sandbox | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Runtime Source: https://docs.everstack.ai/api-reference/agents/runtime Runtime #### Metadata ```yaml title: "POST Runtime" description: "Runtime" full: true ```

Runtime

POST {"/v1/agents/sessions/{sessionId}/turns"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/sessions/{sessionId}/turns" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","userInput":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions/{sessionId}/turns", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "userInput": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/sessions/{sessionId}/turns", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "userInput": "string" }, ) data = response.json() ```

Response

```json { "turn": { "id": "string", "sessionId": "string", "turnNumber": 0, "status": "TURN_STATUS_UNSPECIFIED", "userInput": "string", "assistantOutput": "string", "toolCalls": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "latencyMs": "string", "error": "string", "createdAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z" }, "sessionStatus": "SESSION_STATUS_UNSPECIFIED" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `userInput` | `string` | No | | ### Responses #### 200 Run a single turn in an agent session | Property | Type | Description | |----------|------|-------------| | `turn` | `object` | AgentSessionTurn is a single conversation turn within a session. | | `sessionStatus` | `"SESSION_STATUS_UNSPECIFIED" \| "SESSION_STATUS_CREATED" \| "SESSION_STATUS_RUNNING" \| "SESSION_STATUS_WAITING_FOR_INPUT" \| "SESSION_STATUS_WAITING_FOR_APPROVAL" \| "SESSION_STATUS_COMPLETED" \| "SESSION_STATUS_FAILED" \| "SESSION_STATUS_CANCELLED"` | SessionStatus tracks the lifecycle of an agent session. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Sandbox Events Source: https://docs.everstack.ai/api-reference/agents/sandbox-events Sandbox Events #### Metadata ```yaml title: "GET Sandbox Events" description: "Sandbox Events" full: true ```

Sandbox Events

GET {"/v1/sandbox/{sandboxId}/events"}

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/{sandboxId}/events" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/events", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/{sandboxId}/events", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "events": [ { "id": "string", "sandboxId": "string", "sessionId": "string", "tenantId": "string", "eventType": "string", "message": "string", "durationMs": "string", "error": "string", "createdAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `eventType` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List lifecycle events for a sandbox | Property | Type | Description | |----------|------|-------------| | `events` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Sandbox LSP Source: https://docs.everstack.ai/api-reference/agents/sandbox-lsp #### Metadata ```yaml title: "POST Sandbox LSP" full: true ```

Sandbox LSP

POST /v1/sandbox/instances/{sandboxId}/lsp/{lang}/{op}

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/instances/{sandboxId}/lsp/{lang}/{op}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"path":"string","query":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/lsp/{lang}/{op}", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "path": "string", "query": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/lsp/{lang}/{op}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "path": "string", "query": "string" }, ) data = response.json() ```

Response

```json { "resultJson": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `lang` | path | `string` | **Yes** | "python" \| "typescript" \| "javascript". | | `op` | path | `string` | **Yes** | "diagnostics" \| "symbols" \| "document-symbols" \| "workspace-symbols". | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `path` | `string` | No | File path the op targets (required for diagnostics/symbols). | | `query` | `string` | No | Query string (workspace-symbols). | ### Responses #### 200 Run a language-server operation inside a sandbox | Property | Type | Description | |----------|------|-------------| | `resultJson` | `string` | Raw JSON produced by the underlying tool (array or object). | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Sandbox LSPInfo Source: https://docs.everstack.ai/api-reference/agents/sandbox-lspinfo #### Metadata ```yaml title: "GET Sandbox LSPInfo" full: true ```

Sandbox LSPInfo

GET /v1/sandbox/instances/{sandboxId}/lsp

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/instances/{sandboxId}/lsp" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/lsp", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/lsp", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "sandboxId": "string", "languages": [ { "language": "string", "endpoints": [ "string" ] } ], "note": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Responses #### 200 List LSP capabilities for a sandbox | Property | Type | Description | |----------|------|-------------| | `sandboxId` | `string` | | | `languages` | `object[]` | | | `note` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Sandbox Management Source: https://docs.everstack.ai/api-reference/agents/sandbox-management Sandbox Management #### Metadata ```yaml title: "POST Sandbox Management" description: "Sandbox Management" full: true ```

Sandbox Management

POST /v1/sandbox

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","sessionId":"string","image":"string","cpuLimit":0,"memoryMb":"string","diskMb":"string","timeoutSeconds":0,"networkMode":"string","idleRetentionSeconds":0,"templateId":"string","name":"string","gitRepoUrl":"string","gitBranch":"string","gitInstallationId":"string","sshEnabled":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "sessionId": "string", "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "idleRetentionSeconds": 0, "templateId": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitInstallationId": "string", "sshEnabled": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "sessionId": "string", "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "idleRetentionSeconds": 0, "templateId": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitInstallationId": "string", "sshEnabled": true }, ) data = response.json() ```

Response

```json { "id": "string", "sessionId": "string", "tenantId": "string", "containerId": "string", "status": "string", "backend": "string", "image": "string", "createdAt": "string", "expiresAt": "string", "name": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `sessionId` | `string` | No | | | `image` | `string` | No | | | `cpuLimit` | `number` | No | | | `memoryMb` | `string` | No | | | `diskMb` | `string` | No | | | `timeoutSeconds` | `integer` | No | | | `networkMode` | `string` | No | | | `idleRetentionSeconds` | `integer` | No | Idle retention in seconds. 0 means no expiration (pro/enterprise). When omitted, the server resolves retention from the tenant's plan tier. | | `templateId` | `string` | No | If set, use template config as base. Individual fields override template defaults. | | `name` | `string` | No | Optional friendly name for the sandbox. | | `gitRepoUrl` | `string` | No | | | `gitBranch` | `string` | No | | | `gitInstallationId` | `string` | No | | | `sshEnabled` | `boolean` | No | | ### Responses #### 200 Create a new sandbox instance | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `sessionId` | `string` | | | `tenantId` | `string` | | | `containerId` | `string` | | | `status` | `string` | | | `backend` | `string` | | | `image` | `string` | | | `createdAt` | `string` | | | `expiresAt` | `string` | | | `name` | `string` | Friendly name for the sandbox (if set). | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Sandbox Metrics Batch Source: https://docs.everstack.ai/api-reference/agents/sandbox-metrics-batch #### Metadata ```yaml title: "GET Sandbox Metrics Batch" full: true ```

Sandbox Metrics Batch

GET /v1/sandbox/metrics/batch

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/metrics/batch" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/metrics/batch", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/metrics/batch", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

*No example available* ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `ids` | query | `string[]` | No | Sandbox IDs to fetch the latest snapshot for (capped at 50). | ### Responses #### 200 Latest metrics snapshot for multiple sandboxes | Property | Type | Description | |----------|------|-------------| | `metrics` | `object` | Latest snapshot keyed by sandbox_id. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Sandbox Metrics History Source: https://docs.everstack.ai/api-reference/agents/sandbox-metrics-history #### Metadata ```yaml title: "GET Sandbox Metrics History" full: true ```

Sandbox Metrics History

GET /v1/sandbox/instances/{sandboxId}/metrics/history

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/instances/{sandboxId}/metrics/history" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/metrics/history", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/metrics/history", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "snapshots": [ { "sandboxId": "string", "cpuPercent": 0, "memoryUsage": "string", "memoryLimit": "string", "diskUsedMb": "string", "collectedAt": "string" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `limit` | query | `integer` | No | Max snapshots to return (default 120). | ### Responses #### 200 Time-series resource metrics for a sandbox | Property | Type | Description | |----------|------|-------------| | `snapshots` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Sandbox Templates (read-only catalog) Source: https://docs.everstack.ai/api-reference/agents/sandbox-templates-read-only-catalog Sandbox Templates (read-only catalog) #### Metadata ```yaml title: "GET Sandbox Templates (read-only catalog)" description: "Sandbox Templates (read-only catalog)" full: true ```

Sandbox Templates (read-only catalog)

GET /v1/sandbox/templates

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/templates" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/templates", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/templates", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "templates": [ { "id": "string", "name": "string", "slug": "string", "description": "string", "icon": "string", "iconColor": "string", "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "workDir": "string", "tags": [ "string" ] } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 List available sandbox templates | Property | Type | Description | |----------|------|-------------| | `templates` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Session management Source: https://docs.everstack.ai/api-reference/agents/session-management Session management #### Metadata ```yaml title: "POST Session management" description: "Session management" full: true ```

Session management

POST /v1/agents/sessions

Request

```bash curl -X POST "http://localhost:8089/v1/agents/sessions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","agentId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "agentId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/sessions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "agentId": "string" }, ) data = response.json() ```

Response

```json { "session": { "id": "string", "tenantId": "string", "agentId": "string", "status": "SESSION_STATUS_UNSPECIFIED", "turnCount": 0, "totalTokens": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z", "turns": [ { "id": "string", "sessionId": "string", "turnNumber": 0, "status": "TURN_STATUS_UNSPECIFIED", "userInput": "string", "assistantOutput": "string", "toolCalls": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "latencyMs": "string", "error": "string", "createdAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `agentId` | `string` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Create a new agent session | Property | Type | Description | |----------|------|-------------| | `session` | `object` | AgentSession is an execution instance of an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Sleep Agent Source: https://docs.everstack.ai/api-reference/agents/sleep-agent #### Metadata ```yaml title: "POST Sleep Agent" full: true ```

Sleep Agent

POST /v1/agents/{agentId}/sleep

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{agentId}/sleep" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/sleep", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{agentId}/sleep", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Put a persistent agent to sleep | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Sleep Trooper Source: https://docs.everstack.ai/api-reference/agents/sleep-trooper #### Metadata ```yaml title: "POST Sleep Trooper" full: true ```

Sleep Trooper

POST /v1/troopers/{trooperId}/sleep

Request

```bash curl -X POST "http://localhost:8089/v1/troopers/{trooperId}/sleep" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{trooperId}/sleep", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/troopers/{trooperId}/sleep", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `trooperId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Put trooper to sleep | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Spawn Tree Source: https://docs.everstack.ai/api-reference/agents/spawn-tree Spawn Tree #### Metadata ```yaml title: "GET Spawn Tree" description: "Spawn Tree" full: true ```

Spawn Tree

GET {"/v1/agents/spawn-trees/{treeId}"}

Request

```bash curl -X GET "http://localhost:8089/v1/agents/spawn-trees/{treeId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/spawn-trees/{treeId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/agents/spawn-trees/{treeId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "nodes": [ { "id": "string", "treeId": "string", "parentNodeId": "string", "agentId": "string", "depth": 0, "status": "string", "task": "string", "result": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "startedAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z", "executionId": "string", "tenantId": "string" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `treeId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get all nodes in a spawn tree | Property | Type | Description | |----------|------|-------------| | `nodes` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Steer Session Source: https://docs.everstack.ai/api-reference/agents/steer-session #### Metadata ```yaml title: "POST Steer Session" full: true ```

Steer Session

POST {"/v1/agents/sessions/{sessionId}/steer"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/sessions/{sessionId}/steer" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","role":"string","content":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions/{sessionId}/steer", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "role": "string", "content": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/sessions/{sessionId}/steer", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "role": "string", "content": "string" }, ) data = response.json() ```

Response

```json { "accepted": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `role` | `string` | No | | | `content` | `string` | No | | ### Responses #### 200 Inject a message into a running session | Property | Type | Description | |----------|------|-------------| | `accepted` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Stop Sandbox Source: https://docs.everstack.ai/api-reference/agents/stop-sandbox #### Metadata ```yaml title: "POST Stop Sandbox" full: true ```

Stop Sandbox

POST {"/v1/sandbox/{sandboxId}/stop"}

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/{sandboxId}/stop" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/stop", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/{sandboxId}/stop", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Stop a running sandbox, preserving workspace snapshot | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Streaming runtime Source: https://docs.everstack.ai/api-reference/agents/streaming-runtime Streaming runtime #### Metadata ```yaml title: "POST Streaming runtime" description: "Streaming runtime" full: true ```

Streaming runtime

POST {"/v1/agents/sessions/{sessionId}/turns/stream"}

Request

```bash curl -X POST "http://localhost:8089/v1/agents/sessions/{sessionId}/turns/stream" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","userInput":"string","enableStreaming":true,"enableWebSearch":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/sessions/{sessionId}/turns/stream", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "userInput": "string", "enableStreaming": true, "enableWebSearch": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/sessions/{sessionId}/turns/stream", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "userInput": "string", "enableStreaming": true, "enableWebSearch": true }, ) data = response.json() ```

Response

```json { "result": { "type": "string", "sessionId": "string", "turnNumber": 0, "textDelta": "string", "toolCallId": "string", "toolName": "string", "toolArgs": "string", "toolResult": "string", "toolSuccess": true, "toolDurationMs": "string", "finishReason": "string", "error": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "turn": { "id": "string", "sessionId": "string", "turnNumber": 0, "status": "TURN_STATUS_UNSPECIFIED", "userInput": "string", "assistantOutput": "string", "toolCalls": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "latencyMs": "string", "error": "string", "createdAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z" }, "reviewId": "string", "pendingToolCalls": [ { "toolCallId": "string", "toolName": "string", "toolArgs": "string" } ], "approvalAction": "string", "sandboxId": "string", "sandboxExitCode": 0, "sandboxDurationMs": "string", "fallbackFromModel": "string", "fallbackToModel": "string", "fallbackAttempt": 0, "userInputId": "string" }, "error": { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `userInput` | `string` | No | | | `enableStreaming` | `boolean` | No | | | `enableWebSearch` | `boolean` | No | | ### Responses #### 200 Run a turn with streaming events | Property | Type | Description | |----------|------|-------------| | `result` | `object` | | | `error` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Terminate Sandbox Source: https://docs.everstack.ai/api-reference/agents/terminate-sandbox #### Metadata ```yaml title: "POST Terminate Sandbox" full: true ```

Terminate Sandbox

POST {"/v1/sandbox/{sandboxId}/terminate"}

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/{sandboxId}/terminate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sandboxId}/terminate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/{sandboxId}/terminate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Permanently destroy a sandbox (non-revivable) | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Test Agent Trigger Source: https://docs.everstack.ai/api-reference/agents/test-agent-trigger #### Metadata ```yaml title: "POST Test Agent Trigger" full: true ```

Test Agent Trigger

POST {"/v1/agent-triggers/{id}/test"}

Request

```bash curl -X POST "http://localhost:8089/v1/agent-triggers/{id}/test" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agent-triggers/{id}/test", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agent-triggers/{id}/test", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "execution": { "id": "string", "triggerId": "string", "sessionId": "string", "status": "string", "inputRendered": "string", "outputPreview": "string", "errorMessage": "string", "attempt": 0, "durationMs": 0, "startedAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `testPayload` | `object` | No | | ### Responses #### 200 Test fire a trigger with a synthetic payload | Property | Type | Description | |----------|------|-------------| | `execution` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Triggers (shared history) Source: https://docs.everstack.ai/api-reference/agents/triggers-shared-history Triggers (shared history) #### Metadata ```yaml title: "GET Triggers (shared history)" description: "Triggers (shared history)" full: true ```

Triggers (shared history)

GET /v1/sandbox/triggers

Request

```bash curl -X GET "http://localhost:8089/v1/sandbox/triggers" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/triggers", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/sandbox/triggers", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "triggers": [ { "id": "string", "triggerType": "string", "triggerId": "string", "sandboxId": "string", "executionId": "string", "status": "string", "error": "string", "durationMs": "string", "webhookMethod": "string", "webhookBody": "string", "createdAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `sandboxId` | query | `string` | No | | | `triggerType` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List trigger execution history | Property | Type | Description | |----------|------|-------------| | `triggers` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Unbind Agent Channel Source: https://docs.everstack.ai/api-reference/agents/unbind-agent-channel #### Metadata ```yaml title: "DELETE Unbind Agent Channel" full: true ```

Unbind Agent Channel

DELETE /v1/agents/{agentId}/channels/{channelConfigId}

Request

```bash curl -X DELETE "http://localhost:8089/v1/agents/{agentId}/channels/{channelConfigId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/channels/{channelConfigId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/agents/{agentId}/channels/{channelConfigId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | | `channelConfigId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Unbind a channel from an agent | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Unbind Channel From Trooper Source: https://docs.everstack.ai/api-reference/agents/unbind-channel-from-trooper #### Metadata ```yaml title: "DELETE Unbind Channel From Trooper" full: true ```

Unbind Channel From Trooper

DELETE /v1/troopers/{trooperId}/channels/{channelConfigId}

Request

```bash curl -X DELETE "http://localhost:8089/v1/troopers/{trooperId}/channels/{channelConfigId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{trooperId}/channels/{channelConfigId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/troopers/{trooperId}/channels/{channelConfigId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `trooperId` | path | `string` | **Yes** | | | `channelConfigId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Unbind a channel from a trooper | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Unexpose Port Source: https://docs.everstack.ai/api-reference/agents/unexpose-port #### Metadata ```yaml title: "DELETE Unexpose Port" full: true ```

Unexpose Port

DELETE {"/v1/sandbox/{sessionId}/ports/{port}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/sandbox/{sessionId}/ports/{port}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/{sessionId}/ports/{port}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/sandbox/{sessionId}/ports/{port}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `port` | path | `integer` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Close an exposed port | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Agent Memory Source: https://docs.everstack.ai/api-reference/agents/update-agent-memory #### Metadata ```yaml title: "PATCH Update Agent Memory" full: true ```

Update Agent Memory

PATCH {"/v1/agents/memories/{memoryId}"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/agents/memories/{memoryId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","content":"string","factKey":"string","confidence":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/memories/{memoryId}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "content": "string", "factKey": "string", "confidence": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/agents/memories/{memoryId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "content": "string", "factKey": "string", "confidence": 0 }, ) data = response.json() ```

Response

```json { "memory": { "id": "string", "agentId": "string", "tenantId": "string", "memoryType": "string", "content": "string", "factKey": "string", "confidence": 0, "source": "string", "scope": "string", "userId": "string", "accessCount": 0, "isActive": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "sourceSessionId": "string", "sourceTurnNumber": 0, "supersededBy": "string", "lastAccessedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `memoryId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `content` | `string` | No | | | `factKey` | `string` | No | | | `confidence` | `number` | No | | ### Responses #### 200 Update a persistent memory entry | Property | Type | Description | |----------|------|-------------| | `memory` | `object` | AgentMemoryEntry represents a single persistent memory entry. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Agent Trigger Source: https://docs.everstack.ai/api-reference/agents/update-agent-trigger #### Metadata ```yaml title: "PATCH Update Agent Trigger" full: true ```

Update Agent Trigger

PATCH {"/v1/agent-triggers/{id}"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/agent-triggers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","enabled":true,"cronExpression":"string","cronTimezone":"string","eventSourceAgentId":"string","eventType":"string","inputTemplate":"string","maxRetries":0,"retryDelaySeconds":0,"timeoutSeconds":0,"maxConcurrent":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/agent-triggers/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "enabled": true, "cronExpression": "string", "cronTimezone": "string", "eventSourceAgentId": "string", "eventType": "string", "inputTemplate": "string", "maxRetries": 0, "retryDelaySeconds": 0, "timeoutSeconds": 0, "maxConcurrent": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/agent-triggers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "enabled": true, "cronExpression": "string", "cronTimezone": "string", "eventSourceAgentId": "string", "eventType": "string", "inputTemplate": "string", "maxRetries": 0, "retryDelaySeconds": 0, "timeoutSeconds": 0, "maxConcurrent": 0 }, ) data = response.json() ```

Response

```json { "trigger": { "id": "string", "tenantId": "string", "agentId": "string", "name": "string", "triggerType": "string", "enabled": true, "cronExpression": "string", "cronTimezone": "string", "webhookPath": "string", "eventSourceAgentId": "string", "eventType": "string", "inputTemplate": "string", "maxRetries": 0, "timeoutSeconds": 0, "maxConcurrent": 0, "circuitState": "string", "consecutiveFailures": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "retryDelaySeconds": 0 } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `enabled` | `boolean` | No | | | `cronExpression` | `string` | No | | | `cronTimezone` | `string` | No | | | `eventSourceAgentId` | `string` | No | | | `eventType` | `string` | No | | | `eventFilter` | `object` | No | | | `inputTemplate` | `string` | No | | | `maxRetries` | `integer` | No | | | `retryDelaySeconds` | `integer` | No | | | `timeoutSeconds` | `integer` | No | | | `maxConcurrent` | `integer` | No | | ### Responses #### 200 Update a trigger | Property | Type | Description | |----------|------|-------------| | `trigger` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Agent Source: https://docs.everstack.ai/api-reference/agents/update-agent #### Metadata ```yaml title: "PATCH Update Agent" full: true ```

Update Agent

PATCH {"/v1/agents/{id}"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/agents/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","model":"string","systemPrompt":"string","tools":[],"maxTurns":0,"maxToolCallsPerTurn":0,"enabled":true,"mode":"AGENT_MODE_UNSPECIFIED","maxSteps":0,"taskPermissionMode":"TASK_PERMISSION_MODE_UNSPECIFIED","hidden":true,"color":"string","workingDirectory":"string","mentionAlias":"string","executionPolicy":{"taskPermissionMode":"TASK_PERMISSION_MODE_UNSPECIFIED","maxSteps":0,"workingDirectory":"string"},"memoryConfig":{"enabled":true,"scope":"string","autoRetrieve":true,"autoRetrieveTopK":0,"autoExtract":true},"clearTools":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true }, "clearTools": true }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/agents/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true }, "clearTools": true }, ) data = response.json() ```

Response

```json { "agent": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true } } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `model` | `string` | No | | | `systemPrompt` | `string` | No | | | `tools` | `string[]` | No | | | `config` | `object` | No | | | `maxTurns` | `integer` | No | | | `maxToolCallsPerTurn` | `integer` | No | | | `enabled` | `boolean` | No | | | `mode` | `"AGENT_MODE_UNSPECIFIED" \| "AGENT_MODE_PRIMARY" \| "AGENT_MODE_SUBAGENT"` | No | AgentMode controls whether an agent is user-facing or delegation-only. | | `maxSteps` | `integer` | No | | | `taskPermissionMode` | `"TASK_PERMISSION_MODE_UNSPECIFIED" \| "TASK_PERMISSION_MODE_ASK" \| "TASK_PERMISSION_MODE_ALWAYS" \| "TASK_PERMISSION_MODE_DENY"` | No | TaskPermissionMode controls delegation behavior for task/spawn execution. | | `hidden` | `boolean` | No | | | `color` | `string` | No | | | `workingDirectory` | `string` | No | | | `mentionAlias` | `string` | No | | | `executionPolicy` | `object` | No | AgentExecutionPolicy is a typed policy container for runtime controls. | | `memoryConfig` | `object` | No | AgentMemoryConfig configures persistent memory for an agent. | | `clearTools` | `boolean` | No | Explicitly clears tools when true. | ### Responses #### 200 Update agent definition | Property | Type | Description | |----------|------|-------------| | `agent` | `object` | AgentDefinition is the blueprint/config for an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Cron Source: https://docs.everstack.ai/api-reference/agents/update-cron #### Metadata ```yaml title: "PATCH Update Cron" full: true ```

Update Cron

PATCH {"/v1/sandbox/crons/{id}"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/sandbox/crons/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","schedule":"string","command":"string","enabled":true,"timeoutSeconds":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/crons/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "schedule": "string", "command": "string", "enabled": true, "timeoutSeconds": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/sandbox/crons/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "schedule": "string", "command": "string", "enabled": true, "timeoutSeconds": 0 }, ) data = response.json() ```

Response

```json { "cron": { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "lastRunAt": "2024-01-01T00:00:00Z", "nextRunAt": "2024-01-01T00:00:00Z", "runCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `schedule` | `string` | No | | | `command` | `string` | No | | | `enabled` | `boolean` | No | | | `timeoutSeconds` | `integer` | No | | ### Responses #### 200 Update a sandbox cron schedule | Property | Type | Description | |----------|------|-------------| | `cron` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Deployment Source: https://docs.everstack.ai/api-reference/agents/update-deployment #### Metadata ```yaml title: "PATCH Update Deployment" full: true ```

Update Deployment

PATCH {"/v1/deployments/{id}"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/deployments/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","status":"string","rateLimitRpm":0,"maxConcurrentSessions":0,"maxTurnsPerSession":0,"sessionTimeoutSeconds":0,"disableSessionTracking":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/deployments/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "status": "string", "rateLimitRpm": 0, "maxConcurrentSessions": 0, "maxTurnsPerSession": 0, "sessionTimeoutSeconds": 0, "disableSessionTracking": true }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/deployments/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "status": "string", "rateLimitRpm": 0, "maxConcurrentSessions": 0, "maxTurnsPerSession": 0, "sessionTimeoutSeconds": 0, "disableSessionTracking": true }, ) data = response.json() ```

Response

```json { "deployment": { "id": "string", "tenantId": "string", "agentId": "string", "name": "string", "version": 0, "status": "string", "description": "string", "changelog": "string", "rateLimitRpm": 0, "maxConcurrentSessions": 0, "maxTurnsPerSession": 0, "sessionTimeoutSeconds": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "deployedBy": "string", "disableSessionTracking": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `status` | `string` | No | | | `rateLimitRpm` | `integer` | No | | | `maxConcurrentSessions` | `integer` | No | | | `maxTurnsPerSession` | `integer` | No | | | `sessionTimeoutSeconds` | `integer` | No | | | `disableSessionTracking` | `boolean` | No | | ### Responses #### 200 Update a deployment's status or limits | Property | Type | Description | |----------|------|-------------| | `deployment` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Update Sandbox Auto Intervals Source: https://docs.everstack.ai/api-reference/agents/update-sandbox-auto-intervals #### Metadata ```yaml title: "POST Update Sandbox Auto Intervals" full: true ```

Update Sandbox Auto Intervals

POST /v1/sandbox/instances/{sandboxId}/auto-intervals

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/instances/{sandboxId}/auto-intervals" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","autoStopInterval":0,"autoArchiveInterval":0,"autoDeleteInterval":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/instances/{sandboxId}/auto-intervals", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "autoStopInterval": 0, "autoArchiveInterval": 0, "autoDeleteInterval": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/instances/{sandboxId}/auto-intervals", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "autoStopInterval": 0, "autoArchiveInterval": 0, "autoDeleteInterval": 0 }, ) data = response.json() ```

Response

```json { "instance": { "id": "string", "sessionId": "string", "tenantId": "string", "backend": "string", "containerId": "string", "image": "string", "status": "SANDBOX_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "destroyReason": "string", "name": "string", "lastUsedAt": "2024-01-01T00:00:00Z", "idleRetentionSecs": 0, "keepWarm": true, "gitRepoUrl": "string", "gitBranch": "string", "gitCommitSha": "string", "lifecycleState": "string", "revivableUntil": "2024-01-01T00:00:00Z", "stoppedAt": "2024-01-01T00:00:00Z", "sshEnabled": true, "persistent": true, "agentId": "string", "shortCode": "string", "agentHealthy": true, "autoArchiveAfterDays": 0, "autoDeleteAfterDays": 0, "archivedAt": "2024-01-01T00:00:00Z", "snapshotId": "string", "state": "string", "desiredState": "string", "errorReason": "string", "autoStopInterval": 0, "autoArchiveInterval": 0, "autoDeleteInterval": 0, "billingStartedAt": "2024-01-01T00:00:00Z", "currentComputeSeconds": "string", "currentComputeCostUsd": 0, "billingEndedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `autoStopInterval` | `integer` | No | | | `autoArchiveInterval` | `integer` | No | | | `autoDeleteInterval` | `integer` | No | | ### Responses #### 200 Update the auto-stop/auto-archive/auto-delete intervals on a sandbox | Property | Type | Description | |----------|------|-------------| | `instance` | `object` | SandboxInstance represents a running sandbox environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Trooper Source: https://docs.everstack.ai/api-reference/agents/update-trooper #### Metadata ```yaml title: "PATCH Update Trooper" full: true ```

Update Trooper

PATCH /v1/troopers/{id}

Request

```bash curl -X PATCH "http://localhost:8089/v1/troopers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","model":"string","systemPrompt":"string","tools":["string"],"maxTurns":0,"maxToolCallsPerTurn":0,"maxSteps":0,"identity":{"soulMd":"string","identityMd":"string","userMd":"string","roleMd":"string"},"sandbox":{"image":"string","cpuLimit":0,"memoryMb":"string","diskMb":"string","timeoutSeconds":0,"networkMode":"string","allowedHosts":["string"],"sshEnabled":true,"gitRepoUrl":"string","gitBranch":"string"},"databases":{"sqlitePath":"string","lancedbPath":"string","redbPath":"string"},"workers":{"maxConcurrentWorkers":0},"color":"string","icon":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/troopers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string" }, ) data = response.json() ```

Response

```json { "trooper": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "status": "TROOPER_STATUS_UNSPECIFIED", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "sandboxId": "string", "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `model` | `string` | No | | | `systemPrompt` | `string` | No | | | `tools` | `string[]` | No | | | `agentConfig` | `object` | No | | | `maxTurns` | `integer` | No | | | `maxToolCallsPerTurn` | `integer` | No | | | `maxSteps` | `integer` | No | | | `identity` | `object` | No | TrooperIdentity holds the identity markdown files for a trooper. | | `sandbox` | `object` | No | TrooperSandboxConfig holds sandbox resource configuration. | | `databases` | `object` | No | TrooperDatabaseConfig holds paths for trooper-local databases. | | `workers` | `object` | No | TrooperWorkersConfig holds worker pool settings. | | `color` | `string` | No | | | `icon` | `string` | No | | ### Responses #### 200 Update trooper | Property | Type | Description | |----------|------|-------------| | `trooper` | `object` | Trooper is a first-class intelligent agent environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Wake Agent Source: https://docs.everstack.ai/api-reference/agents/wake-agent #### Metadata ```yaml title: "POST Wake Agent" full: true ```

Wake Agent

POST /v1/agents/{agentId}/wake

Request

```bash curl -X POST "http://localhost:8089/v1/agents/{agentId}/wake" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/agents/{agentId}/wake", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/agents/{agentId}/wake", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "agent": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "mode": "AGENT_MODE_UNSPECIFIED", "maxSteps": 0, "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "hidden": true, "color": "string", "workingDirectory": "string", "mentionAlias": "string", "executionPolicy": { "taskPermissionMode": "TASK_PERMISSION_MODE_UNSPECIFIED", "maxSteps": 0, "workingDirectory": "string" }, "memoryConfig": { "enabled": true, "scope": "string", "autoRetrieve": true, "autoRetrieveTopK": 0, "autoExtract": true }, "lifecycleMode": "AGENT_LIFECYCLE_MODE_UNSPECIFIED", "lifecycleStatus": "AGENT_LIFECYCLE_STATUS_UNSPECIFIED", "icon": "string", "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandboxConfig": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string", "linkedSessionId": "string" }, "databaseConfig": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workersConfig": { "maxConcurrentWorkers": 0 }, "sandboxId": "string", "primarySessionId": "string", "activeRevisionId": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `agentId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Wake a sleeping persistent agent | Property | Type | Description | |----------|------|-------------| | `agent` | `object` | AgentDefinition is the blueprint/config for an agent. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Wake Trooper Source: https://docs.everstack.ai/api-reference/agents/wake-trooper #### Metadata ```yaml title: "POST Wake Trooper" full: true ```

Wake Trooper

POST /v1/troopers/{trooperId}/wake

Request

```bash curl -X POST "http://localhost:8089/v1/troopers/{trooperId}/wake" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/troopers/{trooperId}/wake", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/troopers/{trooperId}/wake", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "trooper": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "status": "TROOPER_STATUS_UNSPECIFIED", "model": "string", "systemPrompt": "string", "tools": [ "string" ], "maxTurns": 0, "maxToolCallsPerTurn": 0, "maxSteps": 0, "identity": { "soulMd": "string", "identityMd": "string", "userMd": "string", "roleMd": "string" }, "sandbox": { "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "allowedHosts": [ "string" ], "sshEnabled": true, "gitRepoUrl": "string", "gitBranch": "string" }, "sandboxId": "string", "databases": { "sqlitePath": "string", "lancedbPath": "string", "redbPath": "string" }, "workers": { "maxConcurrentWorkers": 0 }, "color": "string", "icon": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `trooperId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Wake a sleeping trooper | Property | Type | Description | |----------|------|-------------| | `trooper` | `object` | Trooper is a first-class intelligent agent environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Webhooks Source: https://docs.everstack.ai/api-reference/agents/webhooks Webhooks #### Metadata ```yaml title: "POST Webhooks" description: "Webhooks" full: true ```

Webhooks

POST /v1/sandbox/webhooks

Request

```bash curl -X POST "http://localhost:8089/v1/sandbox/webhooks" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","sandboxId":"string","sessionId":"string","name":"string","path":"string","command":"string","workDir":"string","timeoutSeconds":0,"rateLimitRpm":0,"autoRecreate":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/sandbox/webhooks", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "path": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "rateLimitRpm": 0, "autoRecreate": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/sandbox/webhooks", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "path": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "rateLimitRpm": 0, "autoRecreate": true }, ) data = response.json() ```

Response

```json { "webhook": { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "path": "string", "url": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "rateLimitRpm": 0, "lastTriggeredAt": "2024-01-01T00:00:00Z", "triggerCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "secret": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `sandboxId` | `string` | No | | | `sessionId` | `string` | No | | | `name` | `string` | No | | | `path` | `string` | No | | | `command` | `string` | No | | | `workDir` | `string` | No | | | `timeoutSeconds` | `integer` | No | | | `rateLimitRpm` | `integer` | No | | | `autoRecreate` | `boolean` | No | | | `sandboxConfig` | `object` | No | | ### Responses #### 200 Create a sandbox webhook | Property | Type | Description | |----------|------|-------------| | `webhook` | `object` | | | `secret` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### API Keys Source: https://docs.everstack.ai/api-reference/api-keys API Keys API endpoints #### Metadata ```yaml title: API Keys description: API Keys API endpoints ``` # API Keys API | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | [`/v1/api-key/create`](https://docs.everstack.ai/api-reference/api-keys/create-api-key) | | | `GET` | [`/v1/api-key/list`](https://docs.everstack.ai/api-reference/api-keys/list-api-keys) | | | `POST` | [`/v1/api-key/regenerate`](https://docs.everstack.ai/api-reference/api-keys/regenerate-api-key) | | | `POST` | [`/v1/api-key/update`](https://docs.everstack.ai/api-reference/api-keys/update-api-key) | | | `GET` | [`/v1/api-key/{id}`](https://docs.everstack.ai/api-reference/api-keys/get-api-key) | | | `DELETE` | [`/v1/api-key/{id}`](https://docs.everstack.ai/api-reference/api-keys/delete-api-key) | | --- ### POST Create Api Key Source: https://docs.everstack.ai/api-reference/api-keys/create-api-key #### Metadata ```yaml title: "POST Create Api Key" full: true ```

Create Api Key

POST /v1/api-key/create

Request

```bash curl -X POST "http://localhost:8089/v1/api-key/create" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","userId":"string","orgId":"string","type":"API_KEY_TYPE_UNSPECIFIED"}' ``` ```js const response = await fetch("http://localhost:8089/v1/api-key/create", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "name": "string", "userId": "string", "orgId": "string", "type": "API_KEY_TYPE_UNSPECIFIED" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/api-key/create", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "name": "string", "userId": "string", "orgId": "string", "type": "API_KEY_TYPE_UNSPECIFIED" }, ) data = response.json() ```

Response

```json { "apiKey": { "id": "string", "name": "string", "hash": "string", "userId": "string", "orgId": "string", "type": "API_KEY_TYPE_UNSPECIFIED", "sensitiveId": "string", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `name` | `string` | No | | | `userId` | `string` | No | | | `orgId` | `string` | No | | | `type` | `"API_KEY_TYPE_UNSPECIFIED" \| "API_KEY_TYPE_USER" \| "API_KEY_TYPE_ORG"` | No | | ### Responses #### 200 Create new Everstack API key | Property | Type | Description | |----------|------|-------------| | `apiKey` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Api Key Source: https://docs.everstack.ai/api-reference/api-keys/delete-api-key #### Metadata ```yaml title: "DELETE Delete Api Key" full: true ```

Delete Api Key

DELETE {"/v1/api-key/{id}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/api-key/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/api-key/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/api-key/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Responses #### 200 Delete Everstack API key | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Api Key Source: https://docs.everstack.ai/api-reference/api-keys/get-api-key #### Metadata ```yaml title: "GET Get Api Key" full: true ```

Get Api Key

GET {"/v1/api-key/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/api-key/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/api-key/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/api-key/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "apiKey": { "id": "string", "name": "string", "hash": "string", "userId": "string", "orgId": "string", "type": "API_KEY_TYPE_UNSPECIFIED", "sensitiveId": "string", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Responses #### 200 Get Everstack API key | Property | Type | Description | |----------|------|-------------| | `apiKey` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Api Keys Source: https://docs.everstack.ai/api-reference/api-keys/list-api-keys #### Metadata ```yaml title: "GET List Api Keys" full: true ```

List Api Keys

GET /v1/api-key/list

Request

```bash curl -X GET "http://localhost:8089/v1/api-key/list" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/api-key/list", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/api-key/list", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "apiKeys": [ { "id": "string", "name": "string", "hash": "string", "userId": "string", "orgId": "string", "type": "API_KEY_TYPE_UNSPECIFIED", "sensitiveId": "string", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `userId` | query | `string` | No | | | `orgId` | query | `string` | No | | | `type` | query | `"API_KEY_TYPE_UNSPECIFIED" \| "API_KEY_TYPE_USER" \| "API_KEY_TYPE_ORG"` | No | | ### Responses #### 200 List Everstack API keys | Property | Type | Description | |----------|------|-------------| | `apiKeys` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Regenerate Api Key Source: https://docs.everstack.ai/api-reference/api-keys/regenerate-api-key #### Metadata ```yaml title: "POST Regenerate Api Key" full: true ```

Regenerate Api Key

POST /v1/api-key/regenerate

Request

```bash curl -X POST "http://localhost:8089/v1/api-key/regenerate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/api-key/regenerate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/api-key/regenerate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "apiKey": { "id": "string", "name": "string", "hash": "string", "userId": "string", "orgId": "string", "type": "API_KEY_TYPE_UNSPECIFIED", "sensitiveId": "string", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | query | `string` | No | | ### Responses #### 200 Regenerate Everstack API key | Property | Type | Description | |----------|------|-------------| | `apiKey` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Update Api Key Source: https://docs.everstack.ai/api-reference/api-keys/update-api-key #### Metadata ```yaml title: "POST Update Api Key" full: true ```

Update Api Key

POST /v1/api-key/update

Request

```bash curl -X POST "http://localhost:8089/v1/api-key/update" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/api-key/update", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/api-key/update", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "apiKey": { "id": "string", "name": "string", "hash": "string", "userId": "string", "orgId": "string", "type": "API_KEY_TYPE_UNSPECIFIED", "sensitiveId": "string", "lastUsedAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | query | `string` | No | | | `name` | query | `string` | No | | | `userId` | query | `string` | No | | | `orgId` | query | `string` | No | | | `type` | query | `"API_KEY_TYPE_UNSPECIFIED" \| "API_KEY_TYPE_USER" \| "API_KEY_TYPE_ORG"` | No | | ### Responses #### 200 Update Everstack API key | Property | Type | Description | |----------|------|-------------| | `apiKey` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Auth Source: https://docs.everstack.ai/api-reference/auth Auth API endpoints #### Metadata ```yaml title: Auth description: Auth API endpoints ``` # Auth API | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | [`/v1/auth/accept-invite`](https://docs.everstack.ai/api-reference/auth/accept-invitation-accepts-a-team-invitation-and-sets-up-the-user-account) | AcceptInvitation accepts a team invitation and sets up the user account | | `POST` | [`/v1/auth/authenticate`](https://docs.everstack.ai/api-reference/auth/authenticate-exchanges-an-oauth-code-for-a-session-cloud-only) | Authenticate exchanges an OAuth code for a session (Cloud only) | | `POST` | [`/v1/auth/invite`](https://docs.everstack.ai/api-reference/auth/invite-team-member-sends-an-invitation-to-join-the-team-checks-seat-limit) | InviteTeamMember sends an invitation to join the team (checks seat limit) | | `DELETE` | [`/v1/auth/invite/{invitationId}`](https://docs.everstack.ai/api-reference/auth/revoke-invitation-revokes-a-pending-invitation) | RevokeInvitation revokes a pending invitation | | `POST` | [`/v1/auth/login`](https://docs.everstack.ai/api-reference/auth/login-authenticates-with-email-and-password-self-hosted-only) | Login authenticates with email and password - Self-hosted only | | `POST` | [`/v1/auth/magic-link`](https://docs.everstack.ai/api-reference/auth/request-magic-link-sends-a-magic-link-email-for-passwordless-login-self-hosted-only) | RequestMagicLink sends a magic link email for passwordless login - Self-hosted only | | `GET` | [`/v1/auth/mode`](https://docs.everstack.ai/api-reference/auth/get-auth-mode-returns-the-authentication-mode-cloud-vs-self-hosted) | GetAuthMode returns the authentication mode (cloud vs self-hosted) | | `POST` | [`/v1/auth/refresh`](https://docs.everstack.ai/api-reference/auth/refresh-session-extends-the-current-session) | RefreshSession extends the current session | | `POST` | [`/v1/auth/register`](https://docs.everstack.ai/api-reference/auth/register-creates-the-first-admin-user-becomes-instance-owner-self-hosted-only) | Register creates the first admin user (becomes instance owner) - Self-hosted only | | `GET` | [`/v1/auth/session`](https://docs.everstack.ai/api-reference/auth/get-session-returns-the-current-user-session-if-authenticated) | GetSession returns the current user session if authenticated | | `POST` | [`/v1/auth/signout`](https://docs.everstack.ai/api-reference/auth/sign-out-invalidates-the-current-session) | SignOut invalidates the current session | | `POST` | [`/v1/auth/sso-url`](https://docs.everstack.ai/api-reference/auth/get-auth-url-returns-the-sso-provider-url-for-sign-in-redirect-cloud-only) | GetAuthURL returns the SSO provider URL for sign-in redirect (Cloud only) | | `GET` | [`/v1/auth/team`](https://docs.everstack.ai/api-reference/auth/list-team-members-returns-all-team-members-and-pending-invitations) | ListTeamMembers returns all team members and pending invitations | | `DELETE` | [`/v1/auth/team/{userId}`](https://docs.everstack.ai/api-reference/auth/remove-team-member-removes-a-user-from-the-team) | RemoveTeamMember removes a user from the team | | `POST` | [`/v1/auth/verify-magic-link`](https://docs.everstack.ai/api-reference/auth/verify-magic-link-verifies-a-magic-link-token-and-creates-a-session-self-hosted-only) | VerifyMagicLink verifies a magic link token and creates a session - Self-hosted only | --- ### POST Accept Invitation accepts a team invitation and sets up the user account Source: https://docs.everstack.ai/api-reference/auth/accept-invitation-accepts-a-team-invitation-and-sets-up-the-user-account AcceptInvitation accepts a team invitation and sets up the user account #### Metadata ```yaml title: "POST Accept Invitation accepts a team invitation and sets up the user account" description: "AcceptInvitation accepts a team invitation and sets up the user account" full: true ```

Accept Invitation accepts a team invitation and sets up the user account

POST /v1/auth/accept-invite

Request

```bash curl -X POST "http://localhost:8089/v1/auth/accept-invite" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"token":"string","password":"string","name":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/accept-invite", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "token": "string", "password": "string", "name": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/accept-invite", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "token": "string", "password": "string", "name": "string" }, ) data = response.json() ```

Response

```json { "success": true, "user": { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "organizations": [ { "id": "string", "slug": "string", "name": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" } ] }, "sessionToken": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `token` | `string` | No | | | `password` | `string` | No | | | `name` | `string` | No | | ### Responses #### 200 Invitation acceptance result with session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `user` | `object` | | | `sessionToken` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Approve Device Authorization approves a device authorization request. Source: https://docs.everstack.ai/api-reference/auth/approve-device-authorization-approves-a-device-authorization-request-called-by-the-browser-after-the-user-confirms "ApproveDeviceAuthorization approves a device authorization request. #### Metadata ```yaml title: "POST Approve Device Authorization approves a device authorization request. Called by the browser after the user confirms." description: "ApproveDeviceAuthorization approves a device authorization request. Called by the browser after the user confirms." full: true ```

Approve Device Authorization approves a device authorization request. Called by the browser after the user confirms.

POST /v1/auth/device/approve

Request

```bash curl -X POST "http://localhost:8089/v1/auth/device/approve" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"userCode":"string","organizationId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/device/approve", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "userCode": "string", "organizationId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/device/approve", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "userCode": "string", "organizationId": "string" }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body ApproveDeviceAuthorizationRequest is called by the browser to approve. | Property | Type | Required | Description | |----------|------|----------|-------------| | `userCode` | `string` | No | | | `organizationId` | `string` | No | | ### Responses #### 200 Device authorization approval result | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Authenticate exchanges an OAuth code for a session (Cloud only) Source: https://docs.everstack.ai/api-reference/auth/authenticate-exchanges-an-oauth-code-for-a-session-cloud-only Authenticate exchanges an OAuth code for a session (Cloud only) #### Metadata ```yaml title: "POST Authenticate exchanges an OAuth code for a session (Cloud only)" description: "Authenticate exchanges an OAuth code for a session (Cloud only)" full: true ```

Authenticate exchanges an OAuth code for a session (Cloud only)

POST /v1/auth/authenticate

Request

```bash curl -X POST "http://localhost:8089/v1/auth/authenticate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"code":"string","state":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/authenticate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "code": "string", "state": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/authenticate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "code": "string", "state": "string" }, ) data = response.json() ```

Response

```json { "success": true, "user": { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "organizations": [ { "id": "string", "slug": "string", "name": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" } ] }, "sessionToken": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `code` | `string` | No | | | `state` | `string` | No | | ### Responses #### 200 Authentication result with session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `user` | `object` | | | `sessionToken` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Complete Email Verification finalises email verification using the Source: https://docs.everstack.ai/api-reference/auth/complete-email-verification-finalises-email-verification-using-the-pending-authentication-token-from-a-prior-auth-challenge-and-the-code-delivered-by-email "CompleteEmailVerification finalises email verification using the #### Metadata ```yaml title: "POST Complete Email Verification finalises email verification using the pending_authentication_token from a prior auth challenge and the code delivered by email." description: "CompleteEmailVerification finalises email verification using the pending_authentication_token from a prior auth challenge and the code delivered by email." full: true ```

Complete Email Verification finalises email verification using the pending_authentication_token from a prior auth challenge and the code delivered by email.

POST /v1/auth/complete-email-verification

Request

```bash curl -X POST "http://localhost:8089/v1/auth/complete-email-verification" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"pendingAuthenticationToken":"string","code":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/complete-email-verification", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "pendingAuthenticationToken": "string", "code": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/complete-email-verification", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "pendingAuthenticationToken": "string", "code": "string" }, ) data = response.json() ```

Response

```json { "success": true, "user": { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "organizations": [ { "id": "string", "slug": "string", "name": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" } ] }, "sessionToken": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body CompleteEmailVerificationRequest - Verify an email address using the pending_authentication_token returned from a prior auth attempt and the 6-digit code emailed to the user. | Property | Type | Required | Description | |----------|------|----------|-------------| | `pendingAuthenticationToken` | `string` | No | | | `code` | `string` | No | | ### Responses #### 200 Email verification result with session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `user` | `object` | | | `sessionToken` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Complete Instance Connect binds an authenticated cloud organization to the Source: https://docs.everstack.ai/api-reference/auth/complete-instance-connect-binds-an-authenticated-cloud-organization-to-the-instance-and-returns-the-redirect-url-back-to-the-instance "CompleteInstanceConnect binds an authenticated cloud organization to the #### Metadata ```yaml title: "POST Complete Instance Connect binds an authenticated cloud organization to the instance and returns the redirect URL back to the instance." description: "CompleteInstanceConnect binds an authenticated cloud organization to the instance and returns the redirect URL back to the instance." full: true ```

Complete Instance Connect binds an authenticated cloud organization to the instance and returns the redirect URL back to the instance.

POST /v1/auth/instance-connect-sessions/{sessionId}:complete

Request

```bash curl -X POST "http://localhost:8089/v1/auth/instance-connect-sessions/{sessionId}:complete" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"organizationId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/instance-connect-sessions/{sessionId}:complete", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "organizationId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/instance-connect-sessions/{sessionId}:complete", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "organizationId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "redirectUrl": "string", "organizationSlug": "string", "workspaceId": "string", "workspaceSlug": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `organizationId` | `string` | No | | ### Responses #### 200 Completed instance connection | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `redirectUrl` | `string` | | | `organizationSlug` | `string` | | | `workspaceId` | `string` | | | `workspaceSlug` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Complete Password Reset finalises a password reset using the token from the Source: https://docs.everstack.ai/api-reference/auth/complete-password-reset-finalises-a-password-reset-using-the-token-from-the-email-and-creates-a-session "CompletePasswordReset finalises a password reset using the token from the #### Metadata ```yaml title: "POST Complete Password Reset finalises a password reset using the token from the email and creates a session." description: "CompletePasswordReset finalises a password reset using the token from the email and creates a session." full: true ```

Complete Password Reset finalises a password reset using the token from the email and creates a session.

POST /v1/auth/complete-password-reset

Request

```bash curl -X POST "http://localhost:8089/v1/auth/complete-password-reset" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"token":"string","newPassword":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/complete-password-reset", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "token": "string", "newPassword": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/complete-password-reset", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "token": "string", "newPassword": "string" }, ) data = response.json() ```

Response

```json { "success": true, "user": { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "organizations": [ { "id": "string", "slug": "string", "name": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" } ] }, "sessionToken": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body CompletePasswordResetRequest - Set a new password using a reset token from the email. | Property | Type | Required | Description | |----------|------|----------|-------------| | `token` | `string` | No | | | `newPassword` | `string` | No | | ### Responses #### 200 Password reset completion with session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `user` | `object` | | | `sessionToken` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Create Device Authorization initiates a device authorization flow. Source: https://docs.everstack.ai/api-reference/auth/create-device-authorization-initiates-a-device-authorization-flow-the-cli-desktop-calls-this-to-get-a-user-code-and-verification-url "CreateDeviceAuthorization initiates a device authorization flow. #### Metadata ```yaml title: "POST Create Device Authorization initiates a device authorization flow. The CLI/desktop calls this to get a user code and verification URL." description: "CreateDeviceAuthorization initiates a device authorization flow. The CLI/desktop calls this to get a user code and verification URL." full: true ```

Create Device Authorization initiates a device authorization flow. The CLI/desktop calls this to get a user code and verification URL.

POST /v1/auth/device/authorize

Request

```bash curl -X POST "http://localhost:8089/v1/auth/device/authorize" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"clientId":"string","scope":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/device/authorize", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "clientId": "string", "scope": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/device/authorize", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "clientId": "string", "scope": "string" }, ) data = response.json() ```

Response

```json { "deviceCode": "string", "userCode": "string", "verificationUri": "string", "expiresIn": 0, "interval": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body CreateDeviceAuthorizationRequest initiates a device flow. | Property | Type | Required | Description | |----------|------|----------|-------------| | `clientId` | `string` | No | | | `scope` | `string` | No | | ### Responses #### 200 Device authorization session with user code | Property | Type | Description | |----------|------|-------------| | `deviceCode` | `string` | | | `userCode` | `string` | | | `verificationUri` | `string` | | | `expiresIn` | `integer` | | | `interval` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Create Instance Connect Session creates a short-lived session for connecting Source: https://docs.everstack.ai/api-reference/auth/create-instance-connect-session-creates-a-short-lived-session-for-connecting-a-ce-instance-to-everstack-cloud "CreateInstanceConnectSession creates a short-lived session for connecting #### Metadata ```yaml title: "POST Create Instance Connect Session creates a short-lived session for connecting a CE instance to Everstack Cloud." description: "CreateInstanceConnectSession creates a short-lived session for connecting a CE instance to Everstack Cloud." full: true ```

Create Instance Connect Session creates a short-lived session for connecting a CE instance to Everstack Cloud.

POST /v1/auth/instance-connect-sessions

Request

```bash curl -X POST "http://localhost:8089/v1/auth/instance-connect-sessions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"instanceName":"string","instanceUrl":"string","instanceId":"string","ownerEmail":"string","fingerprint":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/instance-connect-sessions", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "instanceName": "string", "instanceUrl": "string", "instanceId": "string", "ownerEmail": "string", "fingerprint": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/instance-connect-sessions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "instanceName": "string", "instanceUrl": "string", "instanceId": "string", "ownerEmail": "string", "fingerprint": "string" }, ) data = response.json() ```

Response

```json { "sessionId": "string", "expiresAt": "2024-01-01T00:00:00Z", "expiresInSeconds": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `instanceName` | `string` | No | | | `instanceUrl` | `string` | No | | | `instanceId` | `string` | No | | | `ownerEmail` | `string` | No | | | `fingerprint` | `string` | No | | ### Responses #### 200 Short-lived instance connect session | Property | Type | Description | |----------|------|-------------| | `sessionId` | `string` | | | `expiresAt` | `string` | | | `expiresInSeconds` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Exchange Device Code polls for the result of a device authorization. Source: https://docs.everstack.ai/api-reference/auth/exchange-device-code-polls-for-the-result-of-a-device-authorization-returns-pending-until-the-user-approves-in-the-browser "ExchangeDeviceCode polls for the result of a device authorization. #### Metadata ```yaml title: "POST Exchange Device Code polls for the result of a device authorization. Returns pending until the user approves in the browser." description: "ExchangeDeviceCode polls for the result of a device authorization. Returns pending until the user approves in the browser." full: true ```

Exchange Device Code polls for the result of a device authorization. Returns pending until the user approves in the browser.

POST /v1/auth/device/token

Request

```bash curl -X POST "http://localhost:8089/v1/auth/device/token" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"deviceCode":"string","clientId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/device/token", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "deviceCode": "string", "clientId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/device/token", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "deviceCode": "string", "clientId": "string" }, ) data = response.json() ```

Response

```json { "status": "string", "accessToken": "string", "tokenType": "string", "orgId": "string", "orgSlug": "string", "userEmail": "string", "userId": "string", "oauthError": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body ExchangeDeviceCodeRequest polls for device authorization result. | Property | Type | Required | Description | |----------|------|----------|-------------| | `deviceCode` | `string` | No | | | `clientId` | `string` | No | | ### Responses #### 200 Device code exchange result | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Backward-compatible state: "pending" (or legacy "authorization_pending" in self-hosted mode), "authorized", "expired", or "denied". | | `accessToken` | `string` | M2M signed JWT (long-lived) | | `tokenType` | `string` | | | `orgId` | `string` | | | `orgSlug` | `string` | | | `userEmail` | `string` | | | `userId` | `string` | | | `oauthError` | `string` | RFC 8628 token error when status is not authorized: "authorization_pending", "slow_down", "expired_token", or "access_denied". | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Auth Mode returns the authentication mode (cloud vs self-hosted) Source: https://docs.everstack.ai/api-reference/auth/get-auth-mode-returns-the-authentication-mode-cloud-vs-self-hosted GetAuthMode returns the authentication mode (cloud vs self-hosted) #### Metadata ```yaml title: "GET Get Auth Mode returns the authentication mode (cloud vs self-hosted)" description: "GetAuthMode returns the authentication mode (cloud vs self-hosted)" full: true ```

Get Auth Mode returns the authentication mode (cloud vs self-hosted)

GET /v1/auth/mode

Request

```bash curl -X GET "http://localhost:8089/v1/auth/mode" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/mode", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/auth/mode", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "mode": "AUTH_MODE_UNSPECIFIED", "hasUsers": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Authentication mode and setup status | Property | Type | Description | |----------|------|-------------| | `mode` | `"AUTH_MODE_UNSPECIFIED" \| "AUTH_MODE_CLOUD" \| "AUTH_MODE_SELF_HOSTED"` | - AUTH_MODE_CLOUD: WorkOS SSO (Cloud edition) - AUTH_MODE_SELF_HOSTED: Email/password + magic link (Self-hosted) | | `hasUsers` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Get Auth URL returns the SSO provider URL for sign-in redirect (Cloud only) Source: https://docs.everstack.ai/api-reference/auth/get-auth-url-returns-the-sso-provider-url-for-sign-in-redirect-cloud-only GetAuthURL returns the SSO provider URL for sign-in redirect (Cloud only) #### Metadata ```yaml title: "POST Get Auth URL returns the SSO provider URL for sign-in redirect (Cloud only)" description: "GetAuthURL returns the SSO provider URL for sign-in redirect (Cloud only)" full: true ```

Get Auth URL returns the SSO provider URL for sign-in redirect (Cloud only)

POST /v1/auth/sso-url

Request

```bash curl -X POST "http://localhost:8089/v1/auth/sso-url" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"provider":"string","connectionId":"string","redirectUri":"string","state":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/sso-url", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "provider": "string", "connectionId": "string", "redirectUri": "string", "state": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/sso-url", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "provider": "string", "connectionId": "string", "redirectUri": "string", "state": "string" }, ) data = response.json() ```

Response

```json { "authUrl": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `provider` | `string` | No | | | `connectionId` | `string` | No | | | `redirectUri` | `string` | No | | | `state` | `string` | No | | ### Responses #### 200 SSO auth URL for redirect | Property | Type | Description | |----------|------|-------------| | `authUrl` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "GET Get Device Authorization Status returns the status of a device authorization by user code. Source: https://docs.everstack.ai/api-reference/auth/get-device-authorization-status-returns-the-status-of-a-device-authorization-by-user-code-used-by-the-browser-approval-page-to-validate-the-code "GetDeviceAuthorizationStatus returns the status of a device authorization by user code. #### Metadata ```yaml title: "GET Get Device Authorization Status returns the status of a device authorization by user code. Used by the browser approval page to validate the code." description: "GetDeviceAuthorizationStatus returns the status of a device authorization by user code. Used by the browser approval page to validate the code." full: true ```

Get Device Authorization Status returns the status of a device authorization by user code. Used by the browser approval page to validate the code.

GET /v1/auth/device/status/{userCode}

Request

```bash curl -X GET "http://localhost:8089/v1/auth/device/status/{userCode}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/device/status/{userCode}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/auth/device/status/{userCode}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "valid": true, "expired": true, "clientId": "string", "scope": "string", "status": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `userCode` | path | `string` | **Yes** | | ### Responses #### 200 Device authorization status | Property | Type | Description | |----------|------|-------------| | `valid` | `boolean` | | | `expired` | `boolean` | | | `clientId` | `string` | | | `scope` | `string` | | | `status` | `string` | Browser-facing status: "pending", "authorized", "expired", or "denied". | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "GET Get Instance Connect Session validates and returns metadata for an instance Source: https://docs.everstack.ai/api-reference/auth/get-instance-connect-session-validates-and-returns-metadata-for-an-instance-connection-session "GetInstanceConnectSession validates and returns metadata for an instance #### Metadata ```yaml title: "GET Get Instance Connect Session validates and returns metadata for an instance connection session." description: "GetInstanceConnectSession validates and returns metadata for an instance connection session." full: true ```

Get Instance Connect Session validates and returns metadata for an instance connection session.

GET /v1/auth/instance-connect-sessions/{sessionId}

Request

```bash curl -X GET "http://localhost:8089/v1/auth/instance-connect-sessions/{sessionId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/instance-connect-sessions/{sessionId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/auth/instance-connect-sessions/{sessionId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "valid": true, "expired": true, "notFound": true, "instanceName": "string", "instanceUrl": "string", "instanceId": "string", "ownerEmail": "string", "fingerprint": "string", "expiresAt": "2024-01-01T00:00:00Z" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Responses #### 200 Instance connect session details | Property | Type | Description | |----------|------|-------------| | `valid` | `boolean` | | | `expired` | `boolean` | | | `notFound` | `boolean` | | | `instanceName` | `string` | | | `instanceUrl` | `string` | | | `instanceId` | `string` | | | `ownerEmail` | `string` | | | `fingerprint` | `string` | | | `expiresAt` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Session returns the current user session if authenticated Source: https://docs.everstack.ai/api-reference/auth/get-session-returns-the-current-user-session-if-authenticated GetSession returns the current user session if authenticated #### Metadata ```yaml title: "GET Get Session returns the current user session if authenticated" description: "GetSession returns the current user session if authenticated" full: true ```

Get Session returns the current user session if authenticated

GET /v1/auth/session

Request

```bash curl -X GET "http://localhost:8089/v1/auth/session" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/session", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/auth/session", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "authenticated": true, "user": { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "organizations": [ { "id": "string", "slug": "string", "name": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Current session info | Property | Type | Description | |----------|------|-------------| | `authenticated` | `boolean` | | | `user` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Invite Team Member sends an invitation to join the team (checks seat limit) Source: https://docs.everstack.ai/api-reference/auth/invite-team-member-sends-an-invitation-to-join-the-team-checks-seat-limit InviteTeamMember sends an invitation to join the team (checks seat limit) #### Metadata ```yaml title: "POST Invite Team Member sends an invitation to join the team (checks seat limit)" description: "InviteTeamMember sends an invitation to join the team (checks seat limit)" full: true ```

Invite Team Member sends an invitation to join the team (checks seat limit)

POST /v1/auth/invite

Request

```bash curl -X POST "http://localhost:8089/v1/auth/invite" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email":"string","role":"ORGANIZATION_ROLE_UNSPECIFIED"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/invite", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "email": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/invite", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "email": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" }, ) data = response.json() ```

Response

```json { "success": true, "invitation": { "id": "string", "email": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED", "invitedByEmail": "string", "expiresAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "accepted": true }, "upgradeMessage": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `email` | `string` | No | | | `role` | `"ORGANIZATION_ROLE_UNSPECIFIED" \| "ORGANIZATION_ROLE_OWNER" \| "ORGANIZATION_ROLE_ADMIN" \| "ORGANIZATION_ROLE_MEMBER" \| "ORGANIZATION_ROLE_VIEWER"` | No | | ### Responses #### 200 Invitation result | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `invitation` | `object` | | | `upgradeMessage` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Team Members returns all team members and pending invitations Source: https://docs.everstack.ai/api-reference/auth/list-team-members-returns-all-team-members-and-pending-invitations ListTeamMembers returns all team members and pending invitations #### Metadata ```yaml title: "GET List Team Members returns all team members and pending invitations" description: "ListTeamMembers returns all team members and pending invitations" full: true ```

List Team Members returns all team members and pending invitations

GET /v1/auth/team

Request

```bash curl -X GET "http://localhost:8089/v1/auth/team" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/team", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/auth/team", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "members": [ { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "role": "ORGANIZATION_ROLE_UNSPECIFIED", "joinedAt": "2024-01-01T00:00:00Z" } ], "pendingInvitations": [ { "id": "string", "email": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED", "invitedByEmail": "string", "expiresAt": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "accepted": true } ], "seatLimit": 0, "seatsUsed": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Team members and invitations | Property | Type | Description | |----------|------|-------------| | `members` | `object[]` | | | `pendingInvitations` | `object[]` | | | `seatLimit` | `integer` | | | `seatsUsed` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Login authenticates with email and password - Self-hosted only Source: https://docs.everstack.ai/api-reference/auth/login-authenticates-with-email-and-password-self-hosted-only Login authenticates with email and password - Self-hosted only #### Metadata ```yaml title: "POST Login authenticates with email and password - Self-hosted only" description: "Login authenticates with email and password - Self-hosted only" full: true ```

Login authenticates with email and password - Self-hosted only

POST /v1/auth/login

Request

```bash curl -X POST "http://localhost:8089/v1/auth/login" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email":"string","password":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/login", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "email": "string", "password": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/login", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "email": "string", "password": "string" }, ) data = response.json() ```

Response

```json { "success": true, "user": { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "organizations": [ { "id": "string", "slug": "string", "name": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" } ] }, "sessionToken": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `email` | `string` | No | | | `password` | `string` | No | | ### Responses #### 200 Login result with session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `user` | `object` | | | `sessionToken` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Refresh Session extends the current session Source: https://docs.everstack.ai/api-reference/auth/refresh-session-extends-the-current-session RefreshSession extends the current session #### Metadata ```yaml title: "POST Refresh Session extends the current session" description: "RefreshSession extends the current session" full: true ```

Refresh Session extends the current session

POST /v1/auth/refresh

Request

```bash curl -X POST "http://localhost:8089/v1/auth/refresh" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/refresh", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/refresh", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "expiresAt": "2024-01-01T00:00:00Z" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Refreshed session info | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `expiresAt` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Register creates the first admin user (becomes instance owner) - Self-hosted only Source: https://docs.everstack.ai/api-reference/auth/register-creates-the-first-admin-user-becomes-instance-owner-self-hosted-only Register creates the first admin user (becomes instance owner) - Self-hosted only #### Metadata ```yaml title: "POST Register creates the first admin user (becomes instance owner) - Self-hosted only" description: "Register creates the first admin user (becomes instance owner) - Self-hosted only" full: true ```

Register creates the first admin user (becomes instance owner) - Self-hosted only

POST /v1/auth/register

Request

```bash curl -X POST "http://localhost:8089/v1/auth/register" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email":"string","password":"string","name":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/register", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "email": "string", "password": "string", "name": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/register", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "email": "string", "password": "string", "name": "string" }, ) data = response.json() ```

Response

```json { "success": true, "user": { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "organizations": [ { "id": "string", "slug": "string", "name": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" } ] }, "sessionToken": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `email` | `string` | No | | | `password` | `string` | No | | | `name` | `string` | No | | ### Responses #### 200 Registration result with session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `user` | `object` | | | `sessionToken` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Remove Team Member removes a user from the team Source: https://docs.everstack.ai/api-reference/auth/remove-team-member-removes-a-user-from-the-team RemoveTeamMember removes a user from the team #### Metadata ```yaml title: "DELETE Remove Team Member removes a user from the team" description: "RemoveTeamMember removes a user from the team" full: true ```

Remove Team Member removes a user from the team

DELETE {"/v1/auth/team/{userId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/auth/team/{userId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/team/{userId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/auth/team/{userId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `userId` | path | `string` | **Yes** | | ### Responses #### 200 Removal result | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Request Magic Link sends a magic link email for passwordless login - Self-hosted only Source: https://docs.everstack.ai/api-reference/auth/request-magic-link-sends-a-magic-link-email-for-passwordless-login-self-hosted-only RequestMagicLink sends a magic link email for passwordless login - Self-hosted only #### Metadata ```yaml title: "POST Request Magic Link sends a magic link email for passwordless login - Self-hosted only" description: "RequestMagicLink sends a magic link email for passwordless login - Self-hosted only" full: true ```

Request Magic Link sends a magic link email for passwordless login - Self-hosted only

POST /v1/auth/magic-link

Request

```bash curl -X POST "http://localhost:8089/v1/auth/magic-link" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/magic-link", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "email": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/magic-link", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "email": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `email` | `string` | No | | ### Responses #### 200 Magic link request result | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### "POST Request Password Reset initiates a password reset by emailing a reset link Source: https://docs.everstack.ai/api-reference/auth/request-password-reset-initiates-a-password-reset-by-emailing-a-reset-link-to-the-user-anti-enumeration-always-returns-success "RequestPasswordReset initiates a password reset by emailing a reset link #### Metadata ```yaml title: "POST Request Password Reset initiates a password reset by emailing a reset link to the user. Anti-enumeration: always returns success." description: "RequestPasswordReset initiates a password reset by emailing a reset link to the user. Anti-enumeration: always returns success." full: true ```

Request Password Reset initiates a password reset by emailing a reset link to the user. Anti-enumeration: always returns success.

POST /v1/auth/request-password-reset

Request

```bash curl -X POST "http://localhost:8089/v1/auth/request-password-reset" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/request-password-reset", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "email": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/request-password-reset", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "email": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body RequestPasswordResetRequest - Initiate a password reset for the given email. Anti-enumeration: the response is identical for known + unknown emails. | Property | Type | Required | Description | |----------|------|----------|-------------| | `email` | `string` | No | | ### Responses #### 200 Password reset request result | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Revoke Invitation revokes a pending invitation Source: https://docs.everstack.ai/api-reference/auth/revoke-invitation-revokes-a-pending-invitation RevokeInvitation revokes a pending invitation #### Metadata ```yaml title: "DELETE Revoke Invitation revokes a pending invitation" description: "RevokeInvitation revokes a pending invitation" full: true ```

Revoke Invitation revokes a pending invitation

DELETE {"/v1/auth/invite/{invitationId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/auth/invite/{invitationId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/invite/{invitationId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/auth/invite/{invitationId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `invitationId` | path | `string` | **Yes** | | ### Responses #### 200 Revocation result | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Sign Out invalidates the current session Source: https://docs.everstack.ai/api-reference/auth/sign-out-invalidates-the-current-session SignOut invalidates the current session #### Metadata ```yaml title: "POST Sign Out invalidates the current session" description: "SignOut invalidates the current session" full: true ```

Sign Out invalidates the current session

POST /v1/auth/signout

Request

```bash curl -X POST "http://localhost:8089/v1/auth/signout" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/auth/signout", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/signout", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Sign out result | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Verify Magic Link verifies a magic link token and creates a session - Self-hosted only Source: https://docs.everstack.ai/api-reference/auth/verify-magic-link-verifies-a-magic-link-token-and-creates-a-session-self-hosted-only VerifyMagicLink verifies a magic link token and creates a session - Self-hosted only #### Metadata ```yaml title: "POST Verify Magic Link verifies a magic link token and creates a session - Self-hosted only" description: "VerifyMagicLink verifies a magic link token and creates a session - Self-hosted only" full: true ```

Verify Magic Link verifies a magic link token and creates a session - Self-hosted only

POST /v1/auth/verify-magic-link

Request

```bash curl -X POST "http://localhost:8089/v1/auth/verify-magic-link" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"token":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/auth/verify-magic-link", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "token": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/auth/verify-magic-link", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "token": "string" }, ) data = response.json() ```

Response

```json { "success": true, "user": { "user": { "id": "string", "email": "string", "name": "string", "avatarUrl": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "organizations": [ { "id": "string", "slug": "string", "name": "string", "role": "ORGANIZATION_ROLE_UNSPECIFIED" } ] }, "sessionToken": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `token` | `string` | No | | ### Responses #### 200 Magic link verification result with session | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `user` | `object` | | | `sessionToken` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Config Source: https://docs.everstack.ai/api-reference/config Config API endpoints #### Metadata ```yaml title: Config description: Config API endpoints ``` # Config API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | [`/api/v1/config/runtime`](https://docs.everstack.ai/api-reference/config/get-runtime-config-returns-the-full-runtime-configuration) | GetRuntimeConfig returns the full runtime configuration | | `PUT` | [`/api/v1/config/runtime`](https://docs.everstack.ai/api-reference/config/update-runtime-config-updates-the-full-runtime-configuration) | UpdateRuntimeConfig updates the full runtime configuration | | `GET` | [`/api/v1/config/runtime/{section}`](https://docs.everstack.ai/api-reference/config/get-runtime-config-section-returns-a-specific-section-of-the-runtime-configuration) | GetRuntimeConfigSection returns a specific section of the runtime configuration | | `PUT` | [`/api/v1/config/runtime/{section}`](https://docs.everstack.ai/api-reference/config/update-runtime-config-section-updates-a-specific-section-of-the-runtime-configuration) | UpdateRuntimeConfigSection updates a specific section of the runtime configuration | | `POST` | [`/api/v1/config/runtime/{section}/reset`](https://docs.everstack.ai/api-reference/config/reset-runtime-config-section-resets-a-section-to-its-default-values) | ResetRuntimeConfigSection resets a section to its default values | | `GET` | [`/api/v1/config/schemas`](https://docs.everstack.ai/api-reference/config/list-schemas-returns-available-schemas) | ListSchemas returns available schemas | | `GET` | [`/api/v1/config/schemas/{name}`](https://docs.everstack.ai/api-reference/config/get-schema-returns-a-specific-schema) | GetSchema returns a specific schema | | `POST` | [`/api/v1/config/validate`](https://docs.everstack.ai/api-reference/config/validate-yaml-validates-a-yaml-configuration-string) | ValidateYAML validates a YAML configuration string | | `POST` | [`/api/v1/config/validate-map`](https://docs.everstack.ai/api-reference/config/validate-map-validates-a-configuration-map) | ValidateMap validates a configuration map | | `GET` | [`/api/v1/config/validation-history`](https://docs.everstack.ai/api-reference/config/get-validation-history-returns-the-validation-history) | GetValidationHistory returns the validation history | | `GET` | [`/api/v1/config/validation-status`](https://docs.everstack.ai/api-reference/config/get-validation-status-returns-the-current-validation-status-of-the-configuration) | GetValidationStatus returns the current validation status of the configuration | --- ### GET Get Runtime Config returns the full runtime configuration Source: https://docs.everstack.ai/api-reference/config/get-runtime-config-returns-the-full-runtime-configuration GetRuntimeConfig returns the full runtime configuration #### Metadata ```yaml title: "GET Get Runtime Config returns the full runtime configuration" description: "GetRuntimeConfig returns the full runtime configuration" full: true ```

Get Runtime Config returns the full runtime configuration

GET /api/v1/config/runtime

Request

```bash curl -X GET "http://localhost:8089/api/v1/config/runtime" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/runtime", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/api/v1/config/runtime", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "rateLimit": { "enabled": true, "requestsPerMinute": 0, "burst": 0, "keySource": "string" }, "loadBalancer": { "enabled": true, "strategy": "string", "keySource": "string" }, "features": { "enableStreaming": true, "enableEmbeddings": true, "enableFunctionCalling": true, "enableResponseCaching": true, "enableSse": true, "enableRequestLogging": true, "enableHealthChecks": true, "enableAgents": true }, "cache": { "enabled": true, "type": "string", "ttl": "string", "memoryMaxSize": 0, "redisAddress": "string", "redisDb": 0, "redisPoolSize": 0 }, "telemetry": { "enabled": true, "samplingRate": 0, "granularity": "string", "traceProviderCalls": true, "traceStreamChunks": true, "traceFallbacks": true, "collectorUrl": "string", "serviceName": "string" }, "cors": { "enabled": true, "allowedOrigins": [ "string" ], "allowedMethods": [ "string" ], "allowedHeaders": [ "string" ], "exposedHeaders": [ "string" ], "allowCredentials": true, "maxAge": "string" }, "updatedAt": "2024-01-01T00:00:00Z", "version": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `rateLimit` | `object` | | | `loadBalancer` | `object` | | | `features` | `object` | | | `cache` | `object` | | | `telemetry` | `object` | | | `cors` | `object` | | | `updatedAt` | `string` | | | `version` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Runtime Config Section returns a specific section of the runtime configuration Source: https://docs.everstack.ai/api-reference/config/get-runtime-config-section-returns-a-specific-section-of-the-runtime-configuration GetRuntimeConfigSection returns a specific section of the runtime configuration #### Metadata ```yaml title: "GET Get Runtime Config Section returns a specific section of the runtime configuration" description: "GetRuntimeConfigSection returns a specific section of the runtime configuration" full: true ```

Get Runtime Config Section returns a specific section of the runtime configuration

GET {"/api/v1/config/runtime/{section}"}

Request

```bash curl -X GET "http://localhost:8089/api/v1/config/runtime/{section}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/runtime/{section}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/api/v1/config/runtime/{section}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "name": "string", "yamlContent": "string", "updatedAt": "2024-01-01T00:00:00Z", "version": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `section` | path | `string` | **Yes** | "rate_limit", "load_balancer", "features", "cache", "telemetry", "cors" | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `name` | `string` | | | `config` | `object` | | | `yamlContent` | `string` | | | `updatedAt` | `string` | | | `version` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Schema returns a specific schema Source: https://docs.everstack.ai/api-reference/config/get-schema-returns-a-specific-schema GetSchema returns a specific schema #### Metadata ```yaml title: "GET Get Schema returns a specific schema" description: "GetSchema returns a specific schema" full: true ```

Get Schema returns a specific schema

GET {"/api/v1/config/schemas/{name}"}

Request

```bash curl -X GET "http://localhost:8089/api/v1/config/schemas/{name}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/schemas/{name}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/api/v1/config/schemas/{name}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "name": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `name` | path | `string` | **Yes** | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `name` | `string` | | | `schema` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Validation History returns the validation history Source: https://docs.everstack.ai/api-reference/config/get-validation-history-returns-the-validation-history GetValidationHistory returns the validation history #### Metadata ```yaml title: "GET Get Validation History returns the validation history" description: "GetValidationHistory returns the validation history" full: true ```

Get Validation History returns the validation history

GET /api/v1/config/validation-history

Request

```bash curl -X GET "http://localhost:8089/api/v1/config/validation-history" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/validation-history", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/api/v1/config/validation-history", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "entries": [ { "timestamp": "2024-01-01T00:00:00Z", "state": "VALIDATION_STATE_UNSPECIFIED", "errorCount": 0, "warningCount": 0, "configHash": "string", "sections": [ "string" ] } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `limit` | query | `integer` | No | | | `section` | query | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `entries` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Validation Status returns the current validation status of the configuration Source: https://docs.everstack.ai/api-reference/config/get-validation-status-returns-the-current-validation-status-of-the-configuration GetValidationStatus returns the current validation status of the configuration #### Metadata ```yaml title: "GET Get Validation Status returns the current validation status of the configuration" description: "GetValidationStatus returns the current validation status of the configuration" full: true ```

Get Validation Status returns the current validation status of the configuration

GET /api/v1/config/validation-status

Request

```bash curl -X GET "http://localhost:8089/api/v1/config/validation-status" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/validation-status", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/api/v1/config/validation-status", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "state": "VALIDATION_STATE_UNSPECIFIED", "message": "string", "errorCount": 0, "warningCount": 0, "lastValidated": "2024-01-01T00:00:00Z", "validatedSections": [ "string" ], "failedSections": [ "string" ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `section` | query | `string` | No | Optional: specific section to get status for | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `state` | `"VALIDATION_STATE_UNSPECIFIED" \| "VALIDATION_STATE_VALID" \| "VALIDATION_STATE_INVALID" \| "VALIDATION_STATE_WARNING" \| "VALIDATION_STATE_PARTIAL" \| "VALIDATION_STATE_PENDING" \| "VALIDATION_STATE_ERROR"` | | | `message` | `string` | | | `errorCount` | `integer` | | | `warningCount` | `integer` | | | `lastValidated` | `string` | | | `validatedSections` | `string[]` | | | `failedSections` | `string[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Schemas returns available schemas Source: https://docs.everstack.ai/api-reference/config/list-schemas-returns-available-schemas ListSchemas returns available schemas #### Metadata ```yaml title: "GET List Schemas returns available schemas" description: "ListSchemas returns available schemas" full: true ```

List Schemas returns available schemas

GET /api/v1/config/schemas

Request

```bash curl -X GET "http://localhost:8089/api/v1/config/schemas" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/schemas", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/api/v1/config/schemas", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "schemaNames": [ "string" ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `schemaNames` | `string[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Reset Runtime Config Section resets a section to its default values Source: https://docs.everstack.ai/api-reference/config/reset-runtime-config-section-resets-a-section-to-its-default-values ResetRuntimeConfigSection resets a section to its default values #### Metadata ```yaml title: "POST Reset Runtime Config Section resets a section to its default values" description: "ResetRuntimeConfigSection resets a section to its default values" full: true ```

Reset Runtime Config Section resets a section to its default values

POST {"/api/v1/config/runtime/{section}/reset"}

Request

```bash curl -X POST "http://localhost:8089/api/v1/config/runtime/{section}/reset" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/runtime/{section}/reset", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/api/v1/config/runtime/{section}/reset", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "name": "string", "yamlContent": "string", "updatedAt": "2024-01-01T00:00:00Z", "version": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `section` | path | `string` | **Yes** | | ### Request Body ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `name` | `string` | | | `config` | `object` | | | `yamlContent` | `string` | | | `updatedAt` | `string` | | | `version` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PUT Update Runtime Config Section updates a specific section of the runtime configuration Source: https://docs.everstack.ai/api-reference/config/update-runtime-config-section-updates-a-specific-section-of-the-runtime-configuration UpdateRuntimeConfigSection updates a specific section of the runtime configuration #### Metadata ```yaml title: "PUT Update Runtime Config Section updates a specific section of the runtime configuration" description: "UpdateRuntimeConfigSection updates a specific section of the runtime configuration" full: true ```

Update Runtime Config Section updates a specific section of the runtime configuration

PUT {"/api/v1/config/runtime/{section}"}

Request

```bash curl -X PUT "http://localhost:8089/api/v1/config/runtime/{section}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"yamlContent":"string"}' ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/runtime/{section}", { method: "PUT", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "yamlContent": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.put( "http://localhost:8089/api/v1/config/runtime/{section}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "yamlContent": "string" }, ) data = response.json() ```

Response

```json { "name": "string", "yamlContent": "string", "updatedAt": "2024-01-01T00:00:00Z", "version": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `section` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `config` | `object` | No | | | `yamlContent` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `name` | `string` | | | `config` | `object` | | | `yamlContent` | `string` | | | `updatedAt` | `string` | | | `version` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PUT Update Runtime Config updates the full runtime configuration Source: https://docs.everstack.ai/api-reference/config/update-runtime-config-updates-the-full-runtime-configuration UpdateRuntimeConfig updates the full runtime configuration #### Metadata ```yaml title: "PUT Update Runtime Config updates the full runtime configuration" description: "UpdateRuntimeConfig updates the full runtime configuration" full: true ```

Update Runtime Config updates the full runtime configuration

PUT /api/v1/config/runtime

Request

```bash curl -X PUT "http://localhost:8089/api/v1/config/runtime" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"config":{"rateLimit":{"enabled":true,"requestsPerMinute":0,"burst":0,"keySource":"string"},"loadBalancer":{"enabled":true,"strategy":"string","keySource":"string"},"features":{"enableStreaming":true,"enableEmbeddings":true,"enableFunctionCalling":true,"enableResponseCaching":true,"enableSse":true,"enableRequestLogging":true,"enableHealthChecks":true,"enableAgents":true},"cache":{"enabled":true,"type":"string","ttl":"string","memoryMaxSize":0,"redisAddress":"string","redisDb":0,"redisPoolSize":0},"telemetry":{"enabled":true,"samplingRate":0,"granularity":"string","traceProviderCalls":true,"traceStreamChunks":true,"traceFallbacks":true,"collectorUrl":"string","serviceName":"string"},"cors":{"enabled":true,"allowedOrigins":["string"],"allowedMethods":["string"],"allowedHeaders":["string"],"exposedHeaders":["string"],"allowCredentials":true,"maxAge":"string"},"updatedAt":"2024-01-01T00:00:00Z","version":0}}' ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/runtime", { method: "PUT", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "config": { "rateLimit": { "enabled": true, "requestsPerMinute": 0, "burst": 0, "keySource": "string" }, "loadBalancer": { "enabled": true, "strategy": "string", "keySource": "string" }, "features": { "enableStreaming": true, "enableEmbeddings": true, "enableFunctionCalling": true, "enableResponseCaching": true, "enableSse": true, "enableRequestLogging": true, "enableHealthChecks": true, "enableAgents": true }, "cache": { "enabled": true, "type": "string", "ttl": "string", "memoryMaxSize": 0, "redisAddress": "string", "redisDb": 0, "redisPoolSize": 0 }, "telemetry": { "enabled": true, "samplingRate": 0, "granularity": "string", "traceProviderCalls": true, "traceStreamChunks": true, "traceFallbacks": true, "collectorUrl": "string", "serviceName": "string" }, "cors": { "enabled": true, "allowedOrigins": [ "string" ], "allowedMethods": [ "string" ], "allowedHeaders": [ "string" ], "exposedHeaders": [ "string" ], "allowCredentials": true, "maxAge": "string" }, "updatedAt": "2024-01-01T00:00:00Z", "version": 0 } }), }); const data = await response.json(); ``` ```python import requests response = requests.put( "http://localhost:8089/api/v1/config/runtime", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "config": { "rateLimit": { "enabled": true, "requestsPerMinute": 0, "burst": 0, "keySource": "string" }, "loadBalancer": { "enabled": true, "strategy": "string", "keySource": "string" }, "features": { "enableStreaming": true, "enableEmbeddings": true, "enableFunctionCalling": true, "enableResponseCaching": true, "enableSse": true, "enableRequestLogging": true, "enableHealthChecks": true, "enableAgents": true }, "cache": { "enabled": true, "type": "string", "ttl": "string", "memoryMaxSize": 0, "redisAddress": "string", "redisDb": 0, "redisPoolSize": 0 }, "telemetry": { "enabled": true, "samplingRate": 0, "granularity": "string", "traceProviderCalls": true, "traceStreamChunks": true, "traceFallbacks": true, "collectorUrl": "string", "serviceName": "string" }, "cors": { "enabled": true, "allowedOrigins": [ "string" ], "allowedMethods": [ "string" ], "allowedHeaders": [ "string" ], "exposedHeaders": [ "string" ], "allowCredentials": true, "maxAge": "string" }, "updatedAt": "2024-01-01T00:00:00Z", "version": 0 } }, ) data = response.json() ```

Response

```json { "rateLimit": { "enabled": true, "requestsPerMinute": 0, "burst": 0, "keySource": "string" }, "loadBalancer": { "enabled": true, "strategy": "string", "keySource": "string" }, "features": { "enableStreaming": true, "enableEmbeddings": true, "enableFunctionCalling": true, "enableResponseCaching": true, "enableSse": true, "enableRequestLogging": true, "enableHealthChecks": true, "enableAgents": true }, "cache": { "enabled": true, "type": "string", "ttl": "string", "memoryMaxSize": 0, "redisAddress": "string", "redisDb": 0, "redisPoolSize": 0 }, "telemetry": { "enabled": true, "samplingRate": 0, "granularity": "string", "traceProviderCalls": true, "traceStreamChunks": true, "traceFallbacks": true, "collectorUrl": "string", "serviceName": "string" }, "cors": { "enabled": true, "allowedOrigins": [ "string" ], "allowedMethods": [ "string" ], "allowedHeaders": [ "string" ], "exposedHeaders": [ "string" ], "allowCredentials": true, "maxAge": "string" }, "updatedAt": "2024-01-01T00:00:00Z", "version": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `config` | `object` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `rateLimit` | `object` | | | `loadBalancer` | `object` | | | `features` | `object` | | | `cache` | `object` | | | `telemetry` | `object` | | | `cors` | `object` | | | `updatedAt` | `string` | | | `version` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Validate Map validates a configuration map Source: https://docs.everstack.ai/api-reference/config/validate-map-validates-a-configuration-map ValidateMap validates a configuration map #### Metadata ```yaml title: "POST Validate Map validates a configuration map" description: "ValidateMap validates a configuration map" full: true ```

Validate Map validates a configuration map

POST /api/v1/config/validate-map

Request

```bash curl -X POST "http://localhost:8089/api/v1/config/validate-map" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/validate-map", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/api/v1/config/validate-map", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "valid": true, "errors": [ { "field": "string", "message": "string", "code": "string", "severity": "VALIDATION_SEVERITY_UNSPECIFIED" } ], "warnings": [ { "field": "string", "message": "string", "code": "string" } ], "status": { "state": "VALIDATION_STATE_UNSPECIFIED", "message": "string", "errorCount": 0, "warningCount": 0, "lastValidated": "2024-01-01T00:00:00Z", "validatedSections": [ "string" ], "failedSections": [ "string" ] }, "validatedAt": "2024-01-01T00:00:00Z" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `config` | `object` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `valid` | `boolean` | | | `errors` | `object[]` | | | `warnings` | `object[]` | | | `status` | `object` | | | `validatedAt` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Validate YAML validates a YAML configuration string Source: https://docs.everstack.ai/api-reference/config/validate-yaml-validates-a-yaml-configuration-string ValidateYAML validates a YAML configuration string #### Metadata ```yaml title: "POST Validate YAML validates a YAML configuration string" description: "ValidateYAML validates a YAML configuration string" full: true ```

Validate YAML validates a YAML configuration string

POST /api/v1/config/validate

Request

```bash curl -X POST "http://localhost:8089/api/v1/config/validate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"yamlConfig":"string"}' ``` ```js const response = await fetch("http://localhost:8089/api/v1/config/validate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "yamlConfig": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/api/v1/config/validate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "yamlConfig": "string" }, ) data = response.json() ```

Response

```json { "valid": true, "errors": [ { "field": "string", "message": "string", "code": "string", "severity": "VALIDATION_SEVERITY_UNSPECIFIED" } ], "warnings": [ { "field": "string", "message": "string", "code": "string" } ], "status": { "state": "VALIDATION_STATE_UNSPECIFIED", "message": "string", "errorCount": 0, "warningCount": 0, "lastValidated": "2024-01-01T00:00:00Z", "validatedSections": [ "string" ], "failedSections": [ "string" ] }, "validatedAt": "2024-01-01T00:00:00Z" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `yamlConfig` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `valid` | `boolean` | | | `errors` | `object[]` | | | `warnings` | `object[]` | | | `status` | `object` | | | `validatedAt` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Functions Source: https://docs.everstack.ai/api-reference/functions Functions API endpoints #### Metadata ```yaml title: Functions description: Functions API endpoints ``` # Functions API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | [`/v1/functions`](https://docs.everstack.ai/api-reference/functions/list-functions) | | | `POST` | [`/v1/functions`](https://docs.everstack.ai/api-reference/functions/create-function) | | | `GET` | [`/v1/functions/by-name/{name}`](https://docs.everstack.ai/api-reference/functions/get-function-by-name) | | | `GET` | [`/v1/functions/isolation-status`](https://docs.everstack.ai/api-reference/functions/get-isolation-status) | | | `GET` | [`/v1/functions/{id}`](https://docs.everstack.ai/api-reference/functions/get-function) | | | `PATCH` | [`/v1/functions/{id}`](https://docs.everstack.ai/api-reference/functions/update-function) | | | `DELETE` | [`/v1/functions/{id}`](https://docs.everstack.ai/api-reference/functions/delete-function) | | --- ### POST Create Function Source: https://docs.everstack.ai/api-reference/functions/create-function #### Metadata ```yaml title: "POST Create Function" full: true ```

Create Function

POST /v1/functions

Request

```bash curl -X POST "http://localhost:8089/v1/functions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","mode":"EXECUTION_MODE_UNSPECIFIED","webhook":{"url":"string","method":"string","timeoutMs":0},"proxy":{"baseUrl":"string","path":"string","method":"string"},"isolated":{"runtime":"string","code":"string","packages":["string"]},"timeoutMs":0,"memoryMb":0,"maxRetries":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/functions", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [ "string" ], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/functions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [ "string" ], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0 }, ) data = response.json() ```

Response

```json { "function": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [ "string" ], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `mode` | `"EXECUTION_MODE_UNSPECIFIED" \| "EXECUTION_MODE_WEBHOOK" \| "EXECUTION_MODE_PROXY" \| "EXECUTION_MODE_ISOLATED"` | No | | | `parameters` | `object` | No | | | `webhook` | `object` | No | | | `proxy` | `object` | No | | | `isolated` | `object` | No | | | `timeoutMs` | `integer` | No | | | `memoryMb` | `integer` | No | | | `maxRetries` | `integer` | No | | ### Responses #### 200 Create a new serverless function | Property | Type | Description | |----------|------|-------------| | `function` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Function Source: https://docs.everstack.ai/api-reference/functions/delete-function #### Metadata ```yaml title: "DELETE Delete Function" full: true ```

Delete Function

DELETE {"/v1/functions/{id}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/functions/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/functions/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/functions/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete function | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Function By Name Source: https://docs.everstack.ai/api-reference/functions/get-function-by-name #### Metadata ```yaml title: "GET Get Function By Name" full: true ```

Get Function By Name

GET {"/v1/functions/by-name/{name}"}

Request

```bash curl -X GET "http://localhost:8089/v1/functions/by-name/{name}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/functions/by-name/{name}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/functions/by-name/{name}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "function": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [ "string" ], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `name` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get function by name | Property | Type | Description | |----------|------|-------------| | `function` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Function Source: https://docs.everstack.ai/api-reference/functions/get-function #### Metadata ```yaml title: "GET Get Function" full: true ```

Get Function

GET {"/v1/functions/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/functions/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/functions/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/functions/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "function": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [ "string" ], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get function by ID | Property | Type | Description | |----------|------|-------------| | `function` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Isolation Status Source: https://docs.everstack.ai/api-reference/functions/get-isolation-status #### Metadata ```yaml title: "GET Get Isolation Status" full: true ```

Get Isolation Status

GET /v1/functions/isolation-status

Request

```bash curl -X GET "http://localhost:8089/v1/functions/isolation-status" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/functions/isolation-status", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/functions/isolation-status", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "available": true, , "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Get isolation backend status | Property | Type | Description | |----------|------|-------------| | `available` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Functions Source: https://docs.everstack.ai/api-reference/functions/list-functions #### Metadata ```yaml title: "GET List Functions" full: true ```

List Functions

GET /v1/functions

Request

```bash curl -X GET "http://localhost:8089/v1/functions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/functions", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/functions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "functions": [ { "id": "string", "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `mode` | query | `"EXECUTION_MODE_UNSPECIFIED" \| "EXECUTION_MODE_WEBHOOK" \| "EXECUTION_MODE_PROXY" \| "EXECUTION_MODE_ISOLATED"` | No | | | `enabled` | query | `boolean` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List all functions for tenant | Property | Type | Description | |----------|------|-------------| | `functions` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Function Source: https://docs.everstack.ai/api-reference/functions/update-function #### Metadata ```yaml title: "PATCH Update Function" full: true ```

Update Function

PATCH {"/v1/functions/{id}"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/functions/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","mode":"EXECUTION_MODE_UNSPECIFIED","webhook":{"url":"string","method":"string","timeoutMs":0},"proxy":{"baseUrl":"string","path":"string","method":"string"},"isolated":{"runtime":"string","code":"string","packages":["string"]},"timeoutMs":0,"memoryMb":0,"maxRetries":0,"enabled":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/functions/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [ "string" ], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0, "enabled": true }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/functions/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [ "string" ], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0, "enabled": true }, ) data = response.json() ```

Response

```json { "function": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "mode": "EXECUTION_MODE_UNSPECIFIED", "webhook": { "url": "string", "method": "string", "timeoutMs": 0 }, "proxy": { "baseUrl": "string", "path": "string", "method": "string" }, "isolated": { "runtime": "string", "code": "string", "packages": [ "string" ], }, "timeoutMs": 0, "memoryMb": 0, "maxRetries": 0, "enabled": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `mode` | `"EXECUTION_MODE_UNSPECIFIED" \| "EXECUTION_MODE_WEBHOOK" \| "EXECUTION_MODE_PROXY" \| "EXECUTION_MODE_ISOLATED"` | No | | | `parameters` | `object` | No | | | `webhook` | `object` | No | | | `proxy` | `object` | No | | | `isolated` | `object` | No | | | `timeoutMs` | `integer` | No | | | `memoryMb` | `integer` | No | | | `maxRetries` | `integer` | No | | | `enabled` | `boolean` | No | | ### Responses #### 200 Update function | Property | Type | Description | |----------|------|-------------| | `function` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Gateway Source: https://docs.everstack.ai/api-reference/gateway Gateway API endpoints #### Metadata ```yaml title: Gateway description: Gateway API endpoints ``` # Gateway API | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | [`/v1/audio/speech`](https://docs.everstack.ai/api-reference/gateway/text-to-speech-generate-audio-from-text) | Text-to-Speech: Generate audio from text | | `POST` | [`/v1/audio/transcriptions`](https://docs.everstack.ai/api-reference/gateway/speech-to-text-transcribe-audio-to-text) | Speech-to-Text: Transcribe audio to text | | `POST` | [`/v1/audio/translations`](https://docs.everstack.ai/api-reference/gateway/audio-translation-translate-audio-to-english-text) | Audio Translation: Translate audio to English text | | `POST` | [`/v1/chat/completions`](https://docs.everstack.ai/api-reference/gateway/chat-completion) | | | `POST` | [`/v1/embeddings`](https://docs.everstack.ai/api-reference/gateway/embeddings) | | | `POST` | [`/v1/gateway/activation-callback`](https://docs.everstack.ai/api-reference/gateway/activation-callback-from-cloud-called-by-cloud-after-successful-payment) | Activation callback from cloud (called by cloud after successful payment) | | `POST` | [`/v1/gateway/instance/activate`](https://docs.everstack.ai/api-reference/gateway/admin-endpoints-for-gateway-instance-management) | Admin endpoints for Gateway instance management | | `GET` | [`/v1/gateway/instance/status`](https://docs.everstack.ai/api-reference/gateway/get-gateway-instance-status) | | | `GET` | [`/v1/gateway/models`](https://docs.everstack.ai/api-reference/gateway/list-models) | | | `POST` | [`/v1/gateway/subscription-status-callback`](https://docs.everstack.ai/api-reference/gateway/subscription-status-callback-from-billing-service-called-after-stripe-webhooks) | Subscription status callback from billing service (called after Stripe webhooks) | | `GET` | [`/v1/gateway/{id}`](https://docs.everstack.ai/api-reference/gateway/get-gateway) | | | `POST` | [`/v1/images/edits`](https://docs.everstack.ai/api-reference/gateway/edit-an-existing-image) | Edit an existing image | | `POST` | [`/v1/images/generations`](https://docs.everstack.ai/api-reference/gateway/generate-images-from-text-prompts) | Generate images from text prompts | | `POST` | [`/v1/images/variations`](https://docs.everstack.ai/api-reference/gateway/create-variations-of-an-image) | Create variations of an image | | `POST` | [`/v1/moderations`](https://docs.everstack.ai/api-reference/gateway/classify-content-for-policy-violations) | Classify content for policy violations | | `POST` | [`/v1/rerank`](https://docs.everstack.ai/api-reference/gateway/rerank-documents-by-relevance-to-a-query) | Rerank documents by relevance to a query | | `GET` | [`/v1/responses`](https://docs.everstack.ai/api-reference/gateway/list-responses) | List responses | | `POST` | [`/v1/responses`](https://docs.everstack.ai/api-reference/gateway/create-a-response-agentic-loop-with-auto-tool-calling) | Create a response (agentic loop with auto tool calling) | | `GET` | [`/v1/responses/{responseId}`](https://docs.everstack.ai/api-reference/gateway/get-a-response-by-id) | Get a response by ID | | `DELETE` | [`/v1/responses/{responseId}`](https://docs.everstack.ai/api-reference/gateway/delete-a-response) | Delete a response | | `POST` | [`/v1/responses/{responseId}/cancel`](https://docs.everstack.ai/api-reference/gateway/cancel-an-in-progress-response) | Cancel an in-progress response | --- ### POST Activation callback from cloud (called by cloud after successful payment) Source: https://docs.everstack.ai/api-reference/gateway/activation-callback-from-cloud-called-by-cloud-after-successful-payment Activation callback from cloud (called by cloud after successful payment) #### Metadata ```yaml title: "POST Activation callback from cloud (called by cloud after successful payment)" description: "Activation callback from cloud (called by cloud after successful payment)" full: true ```

Activation callback from cloud (called by cloud after successful payment)

POST /v1/gateway/activation-callback

Request

```bash curl -X POST "http://localhost:8089/v1/gateway/activation-callback" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"signedPayload":"string","callbackSecret":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/gateway/activation-callback", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "signedPayload": "string", "callbackSecret": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/gateway/activation-callback", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "signedPayload": "string", "callbackSecret": "string" }, ) data = response.json() ```

Response

```json { "success": true, "instanceId": "string", "planTier": "string", "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `signedPayload` | `string` | No | | | `callbackSecret` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `instanceId` | `string` | | | `planTier` | `string` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Admin endpoints for Gateway instance management Source: https://docs.everstack.ai/api-reference/gateway/admin-endpoints-for-gateway-instance-management Admin endpoints for Gateway instance management #### Metadata ```yaml title: "POST Admin endpoints for Gateway instance management" description: "Admin endpoints for Gateway instance management" full: true ```

Admin endpoints for Gateway instance management

POST /v1/gateway/instance/activate

Request

```bash curl -X POST "http://localhost:8089/v1/gateway/instance/activate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"activationToken":"string","deviceFingerprintHash":"string","instanceId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/gateway/instance/activate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "activationToken": "string", "deviceFingerprintHash": "string", "instanceId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/gateway/instance/activate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "activationToken": "string", "deviceFingerprintHash": "string", "instanceId": "string" }, ) data = response.json() ```

Response

```json { "status": "string", "instanceId": "string", "tenantId": "string", "planTier": "string", "activatedAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `activationToken` | `string` | No | | | `deviceFingerprintHash` | `string` | No | | | `instanceId` | `string` | No | | ### Responses #### 200 Gateway instance activated successfully | Property | Type | Description | |----------|------|-------------| | `status` | `string` | | | `instanceId` | `string` | | | `tenantId` | `string` | | | `planTier` | `string` | | | `activatedAt` | `string` | | | `expiresAt` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Audio Translation: Translate audio to English text Source: https://docs.everstack.ai/api-reference/gateway/audio-translation-translate-audio-to-english-text Audio Translation: Translate audio to English text #### Metadata ```yaml title: "POST Audio Translation: Translate audio to English text" description: "Audio Translation: Translate audio to English text" full: true ```

Audio Translation: Translate audio to English text

POST /v1/audio/translations

Request

```bash curl -X POST "http://localhost:8089/v1/audio/translations" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"file":"string","model":"string","prompt":"string","responseFormat":"string","temperature":0,"filename":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/audio/translations", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "file": "string", "model": "string", "prompt": "string", "responseFormat": "string", "temperature": 0, "filename": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/audio/translations", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "file": "string", "model": "string", "prompt": "string", "responseFormat": "string", "temperature": 0, "filename": "string" }, ) data = response.json() ```

Response

```json { "text": "string", "task": "string", "language": "string", "duration": 0, "segments": [ { "id": 0, "seek": 0, "start": 0, "end": 0, "text": "string", "tokens": [ 0 ], "temperature": 0, "avgLogprob": 0, "compressionRatio": 0, "noSpeechProb": 0 } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `file` | `string` | No | | | `model` | `string` | No | | | `prompt` | `string` | No | | | `responseFormat` | `string` | No | | | `temperature` | `number` | No | | | `filename` | `string` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Translated text | Property | Type | Description | |----------|------|-------------| | `text` | `string` | | | `task` | `string` | | | `language` | `string` | | | `duration` | `number` | | | `segments` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Cancel an in-progress response Source: https://docs.everstack.ai/api-reference/gateway/cancel-an-in-progress-response Cancel an in-progress response #### Metadata ```yaml title: "POST Cancel an in-progress response" description: "Cancel an in-progress response" full: true ```

Cancel an in-progress response

POST {"/v1/responses/{responseId}/cancel"}

Request

```bash curl -X POST "http://localhost:8089/openai/v1/responses/{responseId}/cancel" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/openai/v1/responses/{responseId}/cancel", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/openai/v1/responses/{responseId}/cancel", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "response": { "id": "string", "object": "string", "createdAt": "string", "status": "string", "error": { "code": "string", "message": "string" }, "incompleteDetails": { "reason": "string" }, "model": "string", "output": [ { "id": "string", "type": "string", "status": "string", "role": "ROLE_UNSPECIFIED", "content": [], "callId": "string", "name": "string", "arguments": "string", "output": "string" } ], "usage": { "inputTokens": 0, "outputTokens": 0, "totalTokens": 0, "inputTokensDetails": { "cachedTokens": 0, "textTokens": 0, "audioTokens": 0, "imageTokens": 0, "reasoningTokens": 0, "cacheWriteTokens": 0 }, "outputTokensDetails": { "cachedTokens": 0, "textTokens": 0, "audioTokens": 0, "imageTokens": 0, "reasoningTokens": 0, "cacheWriteTokens": 0 } }, "temperature": 0, "topP": 0, "maxOutputTokens": 0, "previousResponseId": "string", "reasoning": { "effort": "string", "generateSummary": "string" }, "truncation": { "type": "string", "lastMessages": 0 } } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `responseId` | path | `string` | **Yes** | The response ID to cancel | ### Request Body ### Responses #### 200 Cancelled response | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `response` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Chat Completion Source: https://docs.everstack.ai/api-reference/gateway/chat-completion #### Metadata ```yaml title: "POST Chat Completion" full: true ```

Chat Completion

POST /v1/chat/completions

Request

```bash curl -X POST "http://localhost:8089/openai/v1/chat/completions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"string","messages":[{"role":"ROLE_UNSPECIFIED","content":[],"toolCalls":[],"toolCallId":"string","name":"string"}],"sampling":{"temperature":0,"topP":0,"maxTokens":0,"stop":["string"],"maxCompletionTokens":0},"stream":true,"tools":[{"type":"string","function":{"name":"string","description":"string"}}],"toolChoice":{"mode":"string","specificTool":{"type":"string","function":{"name":"string","description":"string"}}},"parallelToolCalls":true}' ``` ```js const response = await fetch("http://localhost:8089/openai/v1/chat/completions", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "model": "string", "messages": [ { "role": "ROLE_UNSPECIFIED", "content": [], "toolCalls": [], "toolCallId": "string", "name": "string" } ], "sampling": { "temperature": 0, "topP": 0, "maxTokens": 0, "stop": [ "string" ], "maxCompletionTokens": 0 }, "stream": true, "tools": [ { "type": "string", "function": { "name": "string", "description": "string" } } ], "toolChoice": { "mode": "string", "specificTool": { "type": "string", "function": { "name": "string", "description": "string" } } }, "parallelToolCalls": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/openai/v1/chat/completions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "model": "string", "messages": [ { "role": "ROLE_UNSPECIFIED", "content": [], "toolCalls": [], "toolCallId": "string", "name": "string" } ], "sampling": { "temperature": 0, "topP": 0, "maxTokens": 0, "stop": [ "string" ], "maxCompletionTokens": 0 }, "stream": true, "tools": [ { "type": "string", "function": { "name": "string", "description": "string" } } ], "toolChoice": { "mode": "string", "specificTool": { "type": "string", "function": { "name": "string", "description": "string" } } }, "parallelToolCalls": true }, ) data = response.json() ```

Response

```json { "result": { "id": "string", "created": "string", "model": "string", "choices": [ { "index": 0, "finishReason": "string" } ], "usage": { "promptTokens": 0, "completionTokens": 0, "totalTokens": 0 }, "fallbackInfo": { "fallbackUsed": true, "requestedModel": "string", "actualModel": "string", "fallbackReason": "string", "fallbackAttempts": 0 } }, "error": { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `model` | `string` | No | | | `messages` | `object[]` | No | | | `sampling` | `object` | No | | | `responseFormat` | `object` | No | | | `stream` | `boolean` | No | Streaming hint; use ChatStream for true streaming. Optional to allow presence detection. | | `metadata` | `object` | No | | | `tools` | `object[]` | No | | | `toolChoice` | `object` | No | | | `parallelToolCalls` | `boolean` | No | | ### Responses #### 200 The chat completion | Property | Type | Description | |----------|------|-------------| | `result` | `object` | | | `error` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Classify content for policy violations Source: https://docs.everstack.ai/api-reference/gateway/classify-content-for-policy-violations Classify content for policy violations #### Metadata ```yaml title: "POST Classify content for policy violations" description: "Classify content for policy violations" full: true ```

Classify content for policy violations

POST /v1/moderations

Request

```bash curl -X POST "http://localhost:8089/v1/moderations" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"input":"string","inputs":[{"type":"string","text":"string","imageUrl":{"url":"string"}}],"model":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/moderations", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "input": "string", "inputs": [ { "type": "string", "text": "string", "imageUrl": { "url": "string" } } ], "model": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/moderations", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "input": "string", "inputs": [ { "type": "string", "text": "string", "imageUrl": { "url": "string" } } ], "model": "string" }, ) data = response.json() ```

Response

```json { "id": "string", "model": "string", "results": [ { "flagged": true, "categories": { "hate": true, "hateThreatening": true, "harassment": true, "harassmentThreatening": true, "illicit": true, "illicitViolent": true, "selfHarm": true, "selfHarmIntent": true, "selfHarmInstructions": true, "sexual": true, "sexualMinors": true, "violence": true, "violenceGraphic": true }, "categoryScores": { "hate": 0, "hateThreatening": 0, "harassment": 0, "harassmentThreatening": 0, "illicit": 0, "illicitViolent": 0, "selfHarm": 0, "selfHarmIntent": 0, "selfHarmInstructions": 0, "sexual": 0, "sexualMinors": 0, "violence": 0, "violenceGraphic": 0 }, "categoryAppliedInputTypes": { "hate": [], "hateThreatening": [], "harassment": [], "harassmentThreatening": [], "illicit": [], "illicitViolent": [], "selfHarm": [], "selfHarmIntent": [], "selfHarmInstructions": [], "sexual": [], "sexualMinors": [], "violence": [], "violenceGraphic": [] } } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `input` | `string` | No | | | `inputs` | `object[]` | No | | | `model` | `string` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Moderation results | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `model` | `string` | | | `results` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create a response (agentic loop with auto tool calling) Source: https://docs.everstack.ai/api-reference/gateway/create-a-response-agentic-loop-with-auto-tool-calling Create a response (agentic loop with auto tool calling) #### Metadata ```yaml title: "POST Create a response (agentic loop with auto tool calling)" description: "Create a response (agentic loop with auto tool calling)" full: true ```

Create a response (agentic loop with auto tool calling)

POST /v1/responses

Request

```bash curl -X POST "http://localhost:8089/openai/v1/responses" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"string","instructions":"string","input":[{"type":"string","role":"ROLE_UNSPECIFIED","content":[],"itemId":"string"}],"tools":[{"type":"string","function":{"name":"string","description":"string"}}],"builtinTools":[{"type":"string","webSearch":{"maxResults":0,"searchContextSize":"string"},"fileSearch":{"vectorStoreIds":[],"maxNumResults":0},"computerUse":{"environment":"string","displayWidth":0,"displayHeight":0},"mcp":{"url":"string","name":"string","requireApproval":true,"allowedTools":[]}}],"toolChoice":{"mode":"string","specificTool":{"type":"string","function":{"name":"string","description":"string"}}},"parallelToolCalls":true,"text":{"format":{"type":"string"}},"reasoning":{"effort":"string","generateSummary":"string"},"maxOutputTokens":0,"temperature":0,"topP":0,"truncation":{"type":"string","lastMessages":0},"store":true,"previousResponseId":"string","stream":true}' ``` ```js const response = await fetch("http://localhost:8089/openai/v1/responses", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "model": "string", "instructions": "string", "input": [ { "type": "string", "role": "ROLE_UNSPECIFIED", "content": [], "itemId": "string" } ], "tools": [ { "type": "string", "function": { "name": "string", "description": "string" } } ], "builtinTools": [ { "type": "string", "webSearch": { "maxResults": 0, "searchContextSize": "string" }, "fileSearch": { "vectorStoreIds": [], "maxNumResults": 0 }, "computerUse": { "environment": "string", "displayWidth": 0, "displayHeight": 0 }, "mcp": { "url": "string", "name": "string", "requireApproval": true, "allowedTools": [] } } ], "toolChoice": { "mode": "string", "specificTool": { "type": "string", "function": { "name": "string", "description": "string" } } }, "parallelToolCalls": true, "text": { "format": { "type": "string" } }, "reasoning": { "effort": "string", "generateSummary": "string" }, "maxOutputTokens": 0, "temperature": 0, "topP": 0, "truncation": { "type": "string", "lastMessages": 0 }, "store": true, "previousResponseId": "string", "stream": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/openai/v1/responses", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "model": "string", "instructions": "string", "input": [ { "type": "string", "role": "ROLE_UNSPECIFIED", "content": [], "itemId": "string" } ], "tools": [ { "type": "string", "function": { "name": "string", "description": "string" } } ], "builtinTools": [ { "type": "string", "webSearch": { "maxResults": 0, "searchContextSize": "string" }, "fileSearch": { "vectorStoreIds": [], "maxNumResults": 0 }, "computerUse": { "environment": "string", "displayWidth": 0, "displayHeight": 0 }, "mcp": { "url": "string", "name": "string", "requireApproval": true, "allowedTools": [] } } ], "toolChoice": { "mode": "string", "specificTool": { "type": "string", "function": { "name": "string", "description": "string" } } }, "parallelToolCalls": true, "text": { "format": { "type": "string" } }, "reasoning": { "effort": "string", "generateSummary": "string" }, "maxOutputTokens": 0, "temperature": 0, "topP": 0, "truncation": { "type": "string", "lastMessages": 0 }, "store": true, "previousResponseId": "string", "stream": true }, ) data = response.json() ```

Response

```json { "result": { "id": "string", "object": "string", "createdAt": "string", "status": "string", "error": { "code": "string", "message": "string" }, "incompleteDetails": { "reason": "string" }, "model": "string", "output": [ { "id": "string", "type": "string", "status": "string", "role": "ROLE_UNSPECIFIED", "content": [], "callId": "string", "name": "string", "arguments": "string", "output": "string" } ], "usage": { "inputTokens": 0, "outputTokens": 0, "totalTokens": 0, "inputTokensDetails": { "cachedTokens": 0, "textTokens": 0, "audioTokens": 0, "imageTokens": 0, "reasoningTokens": 0, "cacheWriteTokens": 0 }, "outputTokensDetails": { "cachedTokens": 0, "textTokens": 0, "audioTokens": 0, "imageTokens": 0, "reasoningTokens": 0, "cacheWriteTokens": 0 } }, "temperature": 0, "topP": 0, "maxOutputTokens": 0, "previousResponseId": "string", "reasoning": { "effort": "string", "generateSummary": "string" }, "truncation": { "type": "string", "lastMessages": 0 } }, "error": { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `model` | `string` | No | | | `instructions` | `string` | No | | | `input` | `object[]` | No | | | `tools` | `object[]` | No | | | `builtinTools` | `object[]` | No | | | `toolChoice` | `object` | No | | | `parallelToolCalls` | `boolean` | No | | | `text` | `object` | No | | | `reasoning` | `object` | No | | | `maxOutputTokens` | `integer` | No | | | `temperature` | `number` | No | | | `topP` | `number` | No | | | `truncation` | `object` | No | | | `store` | `boolean` | No | | | `previousResponseId` | `string` | No | | | `stream` | `boolean` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Generated response with tool calls | Property | Type | Description | |----------|------|-------------| | `result` | `object` | | | `error` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create variations of an image Source: https://docs.everstack.ai/api-reference/gateway/create-variations-of-an-image Create variations of an image #### Metadata ```yaml title: "POST Create variations of an image" description: "Create variations of an image" full: true ```

Create variations of an image

POST /v1/images/variations

Request

```bash curl -X POST "http://localhost:8089/v1/images/variations" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image":"string","model":"string","n":0,"responseFormat":"string","size":"string","user":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/images/variations", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "image": "string", "model": "string", "n": 0, "responseFormat": "string", "size": "string", "user": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/images/variations", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "image": "string", "model": "string", "n": 0, "responseFormat": "string", "size": "string", "user": "string" }, ) data = response.json() ```

Response

```json { "created": "string", "data": [ { "b64Json": "string", "url": "string", "revisedPrompt": "string" } ], "model": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `image` | `string` | No | | | `model` | `string` | No | | | `n` | `integer` | No | | | `responseFormat` | `string` | No | | | `size` | `string` | No | | | `user` | `string` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Image variations | Property | Type | Description | |----------|------|-------------| | `created` | `string` | | | `data` | `object[]` | | | `model` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete a response Source: https://docs.everstack.ai/api-reference/gateway/delete-a-response Delete a response #### Metadata ```yaml title: "DELETE Delete a response" description: "Delete a response" full: true ```

Delete a response

DELETE {"/v1/responses/{responseId}"}

Request

```bash curl -X DELETE "http://localhost:8089/openai/v1/responses/{responseId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/openai/v1/responses/{responseId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/openai/v1/responses/{responseId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "id": "string", "object": "string", "deleted": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `responseId` | path | `string` | **Yes** | The response ID to delete | ### Responses #### 200 Deleted response | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `object` | `string` | | | `deleted` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Edit an existing image Source: https://docs.everstack.ai/api-reference/gateway/edit-an-existing-image Edit an existing image #### Metadata ```yaml title: "POST Edit an existing image" description: "Edit an existing image" full: true ```

Edit an existing image

POST /v1/images/edits

Request

```bash curl -X POST "http://localhost:8089/v1/images/edits" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"image":"string","prompt":"string","mask":"string","model":"string","n":0,"size":"string","responseFormat":"string","user":"string","quality":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/images/edits", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "image": "string", "prompt": "string", "mask": "string", "model": "string", "n": 0, "size": "string", "responseFormat": "string", "user": "string", "quality": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/images/edits", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "image": "string", "prompt": "string", "mask": "string", "model": "string", "n": 0, "size": "string", "responseFormat": "string", "user": "string", "quality": "string" }, ) data = response.json() ```

Response

```json { "created": "string", "data": [ { "b64Json": "string", "url": "string", "revisedPrompt": "string" } ], "model": "string", "usage": { "inputTokens": 0, "outputTokens": 0, "totalTokens": 0, "inputTokensDetails": { "textTokens": 0, "imageTokens": 0 }, "outputTokensDetails": { "textTokens": 0, "imageTokens": 0 } } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `image` | `string` | No | | | `prompt` | `string` | No | | | `mask` | `string` | No | | | `model` | `string` | No | | | `n` | `integer` | No | | | `size` | `string` | No | | | `responseFormat` | `string` | No | | | `user` | `string` | No | | | `quality` | `string` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Edited images | Property | Type | Description | |----------|------|-------------| | `created` | `string` | | | `data` | `object[]` | | | `model` | `string` | | | `usage` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Embeddings Source: https://docs.everstack.ai/api-reference/gateway/embeddings #### Metadata ```yaml title: "POST Embeddings" full: true ```

Embeddings

POST /v1/embeddings

Request

```bash curl -X POST "http://localhost:8089/openai/v1/embeddings" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"string","input":"string","messages":[{"role":"ROLE_UNSPECIFIED","content":[],"toolCalls":[],"toolCallId":"string","name":"string"}]}' ``` ```js const response = await fetch("http://localhost:8089/openai/v1/embeddings", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "model": "string", "input": "string", "messages": [ { "role": "ROLE_UNSPECIFIED", "content": [], "toolCalls": [], "toolCallId": "string", "name": "string" } ] }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/openai/v1/embeddings", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "model": "string", "input": "string", "messages": [ { "role": "ROLE_UNSPECIFIED", "content": [], "toolCalls": [], "toolCallId": "string", "name": "string" } ] }, ) data = response.json() ```

Response

```json { "result": { "object": "string", "data": [ { "object": "string", "embedding": [], "index": 0 } ], "model": "string", "id": "string", "usage": { "promptTokens": 0, "totalTokens": 0, "cost": 0 } }, "error": { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `model` | `string` | No | | | `input` | `string` | No | | | `metadata` | `object` | No | | | `messages` | `object[]` | No | | ### Responses #### 200 The embeddings | Property | Type | Description | |----------|------|-------------| | `result` | `object` | | | `error` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Generate images from text prompts Source: https://docs.everstack.ai/api-reference/gateway/generate-images-from-text-prompts Generate images from text prompts #### Metadata ```yaml title: "POST Generate images from text prompts" description: "Generate images from text prompts" full: true ```

Generate images from text prompts

POST /v1/images/generations

Request

```bash curl -X POST "http://localhost:8089/v1/images/generations" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt":"string","model":"string","n":0,"quality":"string","responseFormat":"string","size":"string","style":"string","user":"string","background":"string","outputFormat":"string","moderation":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/images/generations", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "prompt": "string", "model": "string", "n": 0, "quality": "string", "responseFormat": "string", "size": "string", "style": "string", "user": "string", "background": "string", "outputFormat": "string", "moderation": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/images/generations", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "prompt": "string", "model": "string", "n": 0, "quality": "string", "responseFormat": "string", "size": "string", "style": "string", "user": "string", "background": "string", "outputFormat": "string", "moderation": "string" }, ) data = response.json() ```

Response

```json { "created": "string", "data": [ { "b64Json": "string", "url": "string", "revisedPrompt": "string" } ], "model": "string", "usage": { "inputTokens": 0, "outputTokens": 0, "totalTokens": 0, "inputTokensDetails": { "textTokens": 0, "imageTokens": 0 }, "outputTokensDetails": { "textTokens": 0, "imageTokens": 0 } } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `prompt` | `string` | No | | | `model` | `string` | No | | | `n` | `integer` | No | | | `quality` | `string` | No | | | `responseFormat` | `string` | No | | | `size` | `string` | No | | | `style` | `string` | No | | | `user` | `string` | No | | | `background` | `string` | No | | | `outputFormat` | `string` | No | | | `moderation` | `string` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Generated images | Property | Type | Description | |----------|------|-------------| | `created` | `string` | | | `data` | `object[]` | | | `model` | `string` | | | `usage` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get a response by ID Source: https://docs.everstack.ai/api-reference/gateway/get-a-response-by-id Get a response by ID #### Metadata ```yaml title: "GET Get a response by ID" description: "Get a response by ID" full: true ```

Get a response by ID

GET {"/v1/responses/{responseId}"}

Request

```bash curl -X GET "http://localhost:8089/openai/v1/responses/{responseId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/openai/v1/responses/{responseId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/openai/v1/responses/{responseId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "response": { "id": "string", "object": "string", "createdAt": "string", "status": "string", "error": { "code": "string", "message": "string" }, "incompleteDetails": { "reason": "string" }, "model": "string", "output": [ { "id": "string", "type": "string", "status": "string", "role": "ROLE_UNSPECIFIED", "content": [], "callId": "string", "name": "string", "arguments": "string", "output": "string" } ], "usage": { "inputTokens": 0, "outputTokens": 0, "totalTokens": 0, "inputTokensDetails": { "cachedTokens": 0, "textTokens": 0, "audioTokens": 0, "imageTokens": 0, "reasoningTokens": 0, "cacheWriteTokens": 0 }, "outputTokensDetails": { "cachedTokens": 0, "textTokens": 0, "audioTokens": 0, "imageTokens": 0, "reasoningTokens": 0, "cacheWriteTokens": 0 } }, "temperature": 0, "topP": 0, "maxOutputTokens": 0, "previousResponseId": "string", "reasoning": { "effort": "string", "generateSummary": "string" }, "truncation": { "type": "string", "lastMessages": 0 } }, "input": [ { "type": "string", "role": "ROLE_UNSPECIFIED", "content": [], "itemId": "string" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `responseId` | path | `string` | **Yes** | The response ID to retrieve | | `includeInput` | query | `boolean` | No | Include input items in the response | ### Responses #### 200 The response | Property | Type | Description | |----------|------|-------------| | `response` | `object` | | | `input` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Gateway Instance Status Source: https://docs.everstack.ai/api-reference/gateway/get-gateway-instance-status #### Metadata ```yaml title: "GET Get Gateway Instance Status" full: true ```

Get Gateway Instance Status

GET /v1/gateway/instance/status

Request

```bash curl -X GET "http://localhost:8089/v1/gateway/instance/status" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/gateway/instance/status", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/gateway/instance/status", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "status": "string", "activated": true, "instanceId": "string", "activatedAt": "2024-01-01T00:00:00Z", "licenseState": { "instanceId": "string", "tenantId": "string", "planTier": "LICENSE_TYPE_UNSPECIFIED", "features": [ { "name": "string", "enabled": true } ], "usageLimits": [ { "type": "USAGE_LIMITS_TYPE_UNSPECIFIED", "value": "string" } ], "expiresAt": "2024-01-01T00:00:00Z", "refreshIntervalSecs": 0, "gracePeriodSecs": 0, "status": "LICENSE_STATUS_UNSPECIFIED" }, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Gateway instance status | Property | Type | Description | |----------|------|-------------| | `status` | `string` | | | `activated` | `boolean` | | | `instanceId` | `string` | | | `activatedAt` | `string` | | | `licenseState` | `object` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Gateway Source: https://docs.everstack.ai/api-reference/gateway/get-gateway #### Metadata ```yaml title: "GET Get Gateway" full: true ```

Get Gateway

GET {"/v1/gateway/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/gateway/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/gateway/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/gateway/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "id": "string", "name": "string", "description": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Responses #### 200 The created application | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `name` | `string` | | | `description` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Models Source: https://docs.everstack.ai/api-reference/gateway/list-models #### Metadata ```yaml title: "GET List Models" full: true ```

List Models

GET /v1/gateway/models

Request

```bash curl -X GET "http://localhost:8089/v1/gateway/models" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/gateway/models", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/gateway/models", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "providers": [ { "provider": "string", "models": [ "string" ] } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Provider model catalog | Property | Type | Description | |----------|------|-------------| | `providers` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List responses Source: https://docs.everstack.ai/api-reference/gateway/list-responses List responses #### Metadata ```yaml title: "GET List responses" description: "List responses" full: true ```

List responses

GET /v1/responses

Request

```bash curl -X GET "http://localhost:8089/openai/v1/responses" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/openai/v1/responses", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/openai/v1/responses", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "data": [ { "id": "string", "object": "string", "createdAt": "string", "status": "string", "error": { "code": "string", "message": "string" }, "incompleteDetails": { "reason": "string" }, "model": "string", "output": [], "usage": { "inputTokens": 0, "outputTokens": 0, "totalTokens": 0 }, "temperature": 0, "topP": 0, "maxOutputTokens": 0, "previousResponseId": "string", "reasoning": { "effort": "string", "generateSummary": "string" }, "truncation": { "type": "string", "lastMessages": 0 } } ], "object": "string", "firstId": "string", "lastId": "string", "hasMore": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `status` | query | `string` | No | Filter by status | | `limit` | query | `integer` | No | Pagination limit | | `after` | query | `string` | No | Pagination cursor (after) | | `before` | query | `string` | No | Pagination cursor (before) | | `order` | query | `string` | No | Order: "asc" or "desc" | ### Responses #### 200 List of responses | Property | Type | Description | |----------|------|-------------| | `data` | `object[]` | | | `object` | `string` | | | `firstId` | `string` | | | `lastId` | `string` | | | `hasMore` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Rerank documents by relevance to a query Source: https://docs.everstack.ai/api-reference/gateway/rerank-documents-by-relevance-to-a-query Rerank documents by relevance to a query #### Metadata ```yaml title: "POST Rerank documents by relevance to a query" description: "Rerank documents by relevance to a query" full: true ```

Rerank documents by relevance to a query

POST /v1/rerank

Request

```bash curl -X POST "http://localhost:8089/v1/rerank" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"string","query":"string","documents":["string"],"documentObjects":[{"text":"string"}],"topN":0,"returnDocuments":true,"maxTokensPerDoc":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/rerank", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "model": "string", "query": "string", "documents": [ "string" ], "documentObjects": [ { "text": "string" } ], "topN": 0, "returnDocuments": true, "maxTokensPerDoc": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/rerank", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "model": "string", "query": "string", "documents": [ "string" ], "documentObjects": [ { "text": "string" } ], "topN": 0, "returnDocuments": true, "maxTokensPerDoc": 0 }, ) data = response.json() ```

Response

```json { "id": "string", "model": "string", "results": [ { "index": 0, "relevanceScore": 0, "document": "string" } ], "meta": { "version": "string", "isBillable": true, "billedUnits": { "searchUnits": 0, "inputTokens": 0, "outputTokens": 0 }, "tokens": { "inputTokens": 0, "outputTokens": 0 } } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `model` | `string` | No | | | `query` | `string` | No | | | `documents` | `string[]` | No | | | `documentObjects` | `object[]` | No | | | `topN` | `integer` | No | | | `returnDocuments` | `boolean` | No | | | `maxTokensPerDoc` | `integer` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Reranked documents | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `model` | `string` | | | `results` | `object[]` | | | `meta` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Speech-to-Text: Transcribe audio to text Source: https://docs.everstack.ai/api-reference/gateway/speech-to-text-transcribe-audio-to-text Speech-to-Text: Transcribe audio to text #### Metadata ```yaml title: "POST Speech-to-Text: Transcribe audio to text" description: "Speech-to-Text: Transcribe audio to text" full: true ```

Speech-to-Text: Transcribe audio to text

POST /v1/audio/transcriptions

Request

```bash curl -X POST "http://localhost:8089/v1/audio/transcriptions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"file":"string","model":"string","language":"string","prompt":"string","responseFormat":"string","temperature":0,"timestampGranularities":["string"],"filename":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/audio/transcriptions", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "file": "string", "model": "string", "language": "string", "prompt": "string", "responseFormat": "string", "temperature": 0, "timestampGranularities": [ "string" ], "filename": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/audio/transcriptions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "file": "string", "model": "string", "language": "string", "prompt": "string", "responseFormat": "string", "temperature": 0, "timestampGranularities": [ "string" ], "filename": "string" }, ) data = response.json() ```

Response

```json { "text": "string", "task": "string", "language": "string", "duration": 0, "words": [ { "word": "string", "start": 0, "end": 0 } ], "segments": [ { "id": 0, "seek": 0, "start": 0, "end": 0, "text": "string", "tokens": [ 0 ], "temperature": 0, "avgLogprob": 0, "compressionRatio": 0, "noSpeechProb": 0 } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `file` | `string` | No | | | `model` | `string` | No | | | `language` | `string` | No | | | `prompt` | `string` | No | | | `responseFormat` | `string` | No | | | `temperature` | `number` | No | | | `timestampGranularities` | `string[]` | No | | | `filename` | `string` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Transcribed text | Property | Type | Description | |----------|------|-------------| | `text` | `string` | | | `task` | `string` | | | `language` | `string` | | | `duration` | `number` | | | `words` | `object[]` | | | `segments` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Subscription status callback from billing service (called after Stripe webhooks) Source: https://docs.everstack.ai/api-reference/gateway/subscription-status-callback-from-billing-service-called-after-stripe-webhooks Subscription status callback from billing service (called after Stripe webhooks) #### Metadata ```yaml title: "POST Subscription status callback from billing service (called after Stripe webhooks)" description: "Subscription status callback from billing service (called after Stripe webhooks)" full: true ```

Subscription status callback from billing service (called after Stripe webhooks)

POST /v1/gateway/subscription-status-callback

Request

```bash curl -X POST "http://localhost:8089/v1/gateway/subscription-status-callback" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"signedPayload":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/gateway/subscription-status-callback", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "signedPayload": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/gateway/subscription-status-callback", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "signedPayload": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `signedPayload` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Text-to-Speech: Generate audio from text Source: https://docs.everstack.ai/api-reference/gateway/text-to-speech-generate-audio-from-text Text-to-Speech: Generate audio from text #### Metadata ```yaml title: "POST Text-to-Speech: Generate audio from text" description: "Text-to-Speech: Generate audio from text" full: true ```

Text-to-Speech: Generate audio from text

POST /v1/audio/speech

Request

```bash curl -X POST "http://localhost:8089/v1/audio/speech" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"string","input":"string","voice":"string","responseFormat":"string","speed":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/audio/speech", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "model": "string", "input": "string", "voice": "string", "responseFormat": "string", "speed": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/audio/speech", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "model": "string", "input": "string", "voice": "string", "responseFormat": "string", "speed": 0 }, ) data = response.json() ```

Response

```json { "audio": "string", "format": "string", "contentType": "string", "durationSeconds": 0, "inputCharacters": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `model` | `string` | No | | | `input` | `string` | No | | | `voice` | `string` | No | | | `responseFormat` | `string` | No | | | `speed` | `number` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Generated audio file | Property | Type | Description | |----------|------|-------------| | `audio` | `string` | | | `format` | `string` | | | `contentType` | `string` | | | `durationSeconds` | `number` | | | `inputCharacters` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### API Reference Source: https://docs.everstack.ai/api-reference Everstack REST API reference, OpenAI-compatible gateway and platform APIs. #### Metadata ```yaml title: API Reference description: Everstack REST API reference, OpenAI-compatible gateway and platform APIs. icon: FileCode ``` Everstack exposes an OpenAI-compatible gateway API for LLM operations, plus platform APIs for agents, memory, workflows, functions, and more. All endpoints are served on the same port (default `8089`). OpenAI-compatible endpoints live under `/openai/v1` and take a standard `Authorization: Bearer ` header. The native REST surface under `/v1` takes `x-evs-api-key` instead and will reject a Bearer token. ```bash curl https://{instance}.{region}.everstack.ai/openai/v1/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "gpt-4o-mini", "messages": [{"role": "user", "content": "Hello"}]}' ``` ## Gateway OpenAI-compatible endpoints, drop-in replacement for any OpenAI SDK. Chat completions, embeddings, images, audio, moderations, and responses. ## Platform Create and manage agents, sessions, and HITL approvals. Workflow CRUD and execution management. Vector memory collections and semantic search. Isolated function management and execution. Configure and manage LLM provider integrations. Create, list, and revoke API keys. Model Context Protocol server management. ## System Runtime configuration management. Authentication, sessions, and user management. --- ### MCP Source: https://docs.everstack.ai/api-reference/mcp MCP API endpoints #### Metadata ```yaml title: MCP description: MCP API endpoints ``` # MCP API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | [`/v1/mcp/servers`](https://docs.everstack.ai/api-reference/mcp/list-mcp-servers) | | | `POST` | [`/v1/mcp/servers`](https://docs.everstack.ai/api-reference/mcp/register-mcp-server) | | | `GET` | [`/v1/mcp/servers/{id}`](https://docs.everstack.ai/api-reference/mcp/get-mcp-server) | | | `PATCH` | [`/v1/mcp/servers/{id}`](https://docs.everstack.ai/api-reference/mcp/update-mcp-server) | | | `DELETE` | [`/v1/mcp/servers/{id}`](https://docs.everstack.ai/api-reference/mcp/delete-mcp-server) | | | `GET` | [`/v1/mcp/servers/{id}/health`](https://docs.everstack.ai/api-reference/mcp/get-mcp-server-health) | | | `GET` | [`/v1/mcp/servers/{serverId}/tools`](https://docs.everstack.ai/api-reference/mcp/discover-tools) | | | `GET` | [`/v1/mcp/tools`](https://docs.everstack.ai/api-reference/mcp/list-federated-tools) | | | `POST` | [`/v1/mcp/tools/call`](https://docs.everstack.ai/api-reference/mcp/call-tool) | | --- ### POST Call Tool Source: https://docs.everstack.ai/api-reference/mcp/call-tool #### Metadata ```yaml title: "POST Call Tool" full: true ```

Call Tool

POST /v1/mcp/tools/call

Request

```bash curl -X POST "http://localhost:8089/v1/mcp/tools/call" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","serverId":"string","toolName":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/tools/call", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "serverId": "string", "toolName": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/mcp/tools/call", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "serverId": "string", "toolName": "string" }, ) data = response.json() ```

Response

```json { "result": { "id": "string", "serverId": "string", "toolName": "string", "tenantId": "string", "status": "MCP_TOOL_CALL_STATUS_UNSPECIFIED", "output": "string", "error": "string", "latencyMs": "string", "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `serverId` | `string` | No | | | `toolName` | `string` | No | | | `arguments` | `object` | No | | ### Responses #### 200 Call a tool on the appropriate MCP server | Property | Type | Description | |----------|------|-------------| | `result` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Mcp Server Source: https://docs.everstack.ai/api-reference/mcp/delete-mcp-server #### Metadata ```yaml title: "DELETE Delete Mcp Server" full: true ```

Delete Mcp Server

DELETE {"/v1/mcp/servers/{id}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/mcp/servers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/servers/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/mcp/servers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

*No example available* ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete an MCP server and its discovered tools #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Discover Tools Source: https://docs.everstack.ai/api-reference/mcp/discover-tools #### Metadata ```yaml title: "GET Discover Tools" full: true ```

Discover Tools

GET {"/v1/mcp/servers/{serverId}/tools"}

Request

```bash curl -X GET "http://localhost:8089/v1/mcp/servers/{serverId}/tools" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/servers/{serverId}/tools", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/mcp/servers/{serverId}/tools", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "tools": [ { "id": "string", "serverId": "string", "name": "string", "description": "string", "discoveredAt": "2024-01-01T00:00:00Z", "lastSeenAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `serverId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Trigger tool discovery on a specific MCP server | Property | Type | Description | |----------|------|-------------| | `tools` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Mcp Server Health Source: https://docs.everstack.ai/api-reference/mcp/get-mcp-server-health #### Metadata ```yaml title: "GET Get Mcp Server Health" full: true ```

Get Mcp Server Health

GET {"/v1/mcp/servers/{id}/health"}

Request

```bash curl -X GET "http://localhost:8089/v1/mcp/servers/{id}/health" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/servers/{id}/health", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/mcp/servers/{id}/health", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "status": "MCP_SERVER_HEALTH_STATUS_UNSPECIFIED", "lastCheck": "2024-01-01T00:00:00Z", "error": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get health status of an MCP server | Property | Type | Description | |----------|------|-------------| | `status` | `"MCP_SERVER_HEALTH_STATUS_UNSPECIFIED" \| "MCP_SERVER_HEALTH_STATUS_HEALTHY" \| "MCP_SERVER_HEALTH_STATUS_UNHEALTHY" \| "MCP_SERVER_HEALTH_STATUS_UNKNOWN"` | | | `lastCheck` | `string` | | | `error` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Mcp Server Source: https://docs.everstack.ai/api-reference/mcp/get-mcp-server #### Metadata ```yaml title: "GET Get Mcp Server" full: true ```

Get Mcp Server

GET {"/v1/mcp/servers/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/mcp/servers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/servers/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/mcp/servers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "server": { "id": "string", "tenantId": "string", "name": "string", "url": "string", "transportType": "MCP_TRANSPORT_TYPE_UNSPECIFIED", "authType": "MCP_AUTH_TYPE_UNSPECIFIED", "toolFilter": { "type": "string", "tools": [ "string" ] }, "stdioConfig": { "command": "string", "args": [ "string" ], "workingDir": "string" }, "enabled": true, "healthStatus": "MCP_SERVER_HEALTH_STATUS_UNSPECIFIED", "healthLastCheck": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "toolCount": 0 } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get MCP server by ID | Property | Type | Description | |----------|------|-------------| | `server` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Federated Tools Source: https://docs.everstack.ai/api-reference/mcp/list-federated-tools #### Metadata ```yaml title: "GET List Federated Tools" full: true ```

List Federated Tools

GET /v1/mcp/tools

Request

```bash curl -X GET "http://localhost:8089/v1/mcp/tools" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/tools", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/mcp/tools", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "tools": [ { "id": "string", "serverId": "string", "name": "string", "description": "string", "discoveredAt": "2024-01-01T00:00:00Z", "lastSeenAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `serverIds` | query | `string[]` | No | Optional: filter by server IDs | | `namePrefix` | query | `string` | No | Optional: search by tool name prefix | ### Responses #### 200 List tools across all registered MCP servers | Property | Type | Description | |----------|------|-------------| | `tools` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Mcp Servers Source: https://docs.everstack.ai/api-reference/mcp/list-mcp-servers #### Metadata ```yaml title: "GET List Mcp Servers" full: true ```

List Mcp Servers

GET /v1/mcp/servers

Request

```bash curl -X GET "http://localhost:8089/v1/mcp/servers" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/servers", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/mcp/servers", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "servers": [ { "id": "string", "tenantId": "string", "name": "string", "url": "string", "transportType": "MCP_TRANSPORT_TYPE_UNSPECIFIED", "authType": "MCP_AUTH_TYPE_UNSPECIFIED", "toolFilter": { "type": "string", "tools": [] }, "stdioConfig": { "command": "string", "args": [], "workingDir": "string" }, "enabled": true, "healthStatus": "MCP_SERVER_HEALTH_STATUS_UNSPECIFIED", "healthLastCheck": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "toolCount": 0 } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `enabledOnly` | query | `boolean` | No | | ### Responses #### 200 List all registered MCP servers for tenant | Property | Type | Description | |----------|------|-------------| | `servers` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Register Mcp Server Source: https://docs.everstack.ai/api-reference/mcp/register-mcp-server #### Metadata ```yaml title: "POST Register Mcp Server" full: true ```

Register Mcp Server

POST /v1/mcp/servers

Request

```bash curl -X POST "http://localhost:8089/v1/mcp/servers" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","url":"string","transportType":"MCP_TRANSPORT_TYPE_UNSPECIFIED","authType":"MCP_AUTH_TYPE_UNSPECIFIED","toolFilter":{"type":"string","tools":["string"]},"stdioConfig":{"command":"string","args":["string"],"workingDir":"string"},"enabled":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/servers", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "url": "string", "transportType": "MCP_TRANSPORT_TYPE_UNSPECIFIED", "authType": "MCP_AUTH_TYPE_UNSPECIFIED", "toolFilter": { "type": "string", "tools": [ "string" ] }, "stdioConfig": { "command": "string", "args": [ "string" ], "workingDir": "string" }, "enabled": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/mcp/servers", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "url": "string", "transportType": "MCP_TRANSPORT_TYPE_UNSPECIFIED", "authType": "MCP_AUTH_TYPE_UNSPECIFIED", "toolFilter": { "type": "string", "tools": [ "string" ] }, "stdioConfig": { "command": "string", "args": [ "string" ], "workingDir": "string" }, "enabled": true }, ) data = response.json() ```

Response

```json { "server": { "id": "string", "tenantId": "string", "name": "string", "url": "string", "transportType": "MCP_TRANSPORT_TYPE_UNSPECIFIED", "authType": "MCP_AUTH_TYPE_UNSPECIFIED", "toolFilter": { "type": "string", "tools": [ "string" ] }, "stdioConfig": { "command": "string", "args": [ "string" ], "workingDir": "string" }, "enabled": true, "healthStatus": "MCP_SERVER_HEALTH_STATUS_UNSPECIFIED", "healthLastCheck": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "toolCount": 0 }, "tools": [ { "id": "string", "serverId": "string", "name": "string", "description": "string", "discoveredAt": "2024-01-01T00:00:00Z", "lastSeenAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `url` | `string` | No | | | `transportType` | `"MCP_TRANSPORT_TYPE_UNSPECIFIED" \| "MCP_TRANSPORT_TYPE_SSE" \| "MCP_TRANSPORT_TYPE_STREAMABLE_HTTP" \| "MCP_TRANSPORT_TYPE_STDIO"` | No | | | `authType` | `"MCP_AUTH_TYPE_UNSPECIFIED" \| "MCP_AUTH_TYPE_NONE" \| "MCP_AUTH_TYPE_API_KEY" \| "MCP_AUTH_TYPE_BEARER" \| "MCP_AUTH_TYPE_OAUTH2"` | No | | | `authConfig` | `object` | No | | | `toolFilter` | `object` | No | | | `headers` | `object` | No | | | `stdioConfig` | `object` | No | | | `enabled` | `boolean` | No | | ### Responses #### 200 Register a new MCP server and discover its tools | Property | Type | Description | |----------|------|-------------| | `server` | `object` | | | `tools` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Mcp Server Source: https://docs.everstack.ai/api-reference/mcp/update-mcp-server #### Metadata ```yaml title: "PATCH Update Mcp Server" full: true ```

Update Mcp Server

PATCH {"/v1/mcp/servers/{id}"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/mcp/servers/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","url":"string","transportType":"MCP_TRANSPORT_TYPE_UNSPECIFIED","authType":"MCP_AUTH_TYPE_UNSPECIFIED","toolFilter":{"type":"string","tools":["string"]},"stdioConfig":{"command":"string","args":["string"],"workingDir":"string"},"enabled":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/mcp/servers/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "url": "string", "transportType": "MCP_TRANSPORT_TYPE_UNSPECIFIED", "authType": "MCP_AUTH_TYPE_UNSPECIFIED", "toolFilter": { "type": "string", "tools": [ "string" ] }, "stdioConfig": { "command": "string", "args": [ "string" ], "workingDir": "string" }, "enabled": true }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/mcp/servers/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "url": "string", "transportType": "MCP_TRANSPORT_TYPE_UNSPECIFIED", "authType": "MCP_AUTH_TYPE_UNSPECIFIED", "toolFilter": { "type": "string", "tools": [ "string" ] }, "stdioConfig": { "command": "string", "args": [ "string" ], "workingDir": "string" }, "enabled": true }, ) data = response.json() ```

Response

```json { "server": { "id": "string", "tenantId": "string", "name": "string", "url": "string", "transportType": "MCP_TRANSPORT_TYPE_UNSPECIFIED", "authType": "MCP_AUTH_TYPE_UNSPECIFIED", "toolFilter": { "type": "string", "tools": [ "string" ] }, "stdioConfig": { "command": "string", "args": [ "string" ], "workingDir": "string" }, "enabled": true, "healthStatus": "MCP_SERVER_HEALTH_STATUS_UNSPECIFIED", "healthLastCheck": "2024-01-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z", "toolCount": 0 } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `url` | `string` | No | | | `transportType` | `"MCP_TRANSPORT_TYPE_UNSPECIFIED" \| "MCP_TRANSPORT_TYPE_SSE" \| "MCP_TRANSPORT_TYPE_STREAMABLE_HTTP" \| "MCP_TRANSPORT_TYPE_STDIO"` | No | | | `authType` | `"MCP_AUTH_TYPE_UNSPECIFIED" \| "MCP_AUTH_TYPE_NONE" \| "MCP_AUTH_TYPE_API_KEY" \| "MCP_AUTH_TYPE_BEARER" \| "MCP_AUTH_TYPE_OAUTH2"` | No | | | `authConfig` | `object` | No | | | `toolFilter` | `object` | No | | | `headers` | `object` | No | | | `stdioConfig` | `object` | No | | | `enabled` | `boolean` | No | | ### Responses #### 200 Update MCP server configuration | Property | Type | Description | |----------|------|-------------| | `server` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Memory Source: https://docs.everstack.ai/api-reference/memory Memory API endpoints #### Metadata ```yaml title: Memory description: Memory API endpoints ``` # Memory API | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | [`/v1/memory/analytics`](https://docs.everstack.ai/api-reference/memory/get-memory-analytics) | | | `GET` | [`/v1/memory/collections`](https://docs.everstack.ai/api-reference/memory/list-collections) | | | `POST` | [`/v1/memory/collections`](https://docs.everstack.ai/api-reference/memory/create-collection) | | | `POST` | [`/v1/memory/collections/{collectionName}/documents`](https://docs.everstack.ai/api-reference/memory/add-documents) | | | `DELETE` | [`/v1/memory/collections/{collectionName}/documents/{documentId}`](https://docs.everstack.ai/api-reference/memory/delete-document) | | | `POST` | [`/v1/memory/collections/{collectionName}/query`](https://docs.everstack.ai/api-reference/memory/query-collection) | | | `GET` | [`/v1/memory/collections/{name}`](https://docs.everstack.ai/api-reference/memory/get-collection) | | | `DELETE` | [`/v1/memory/collections/{name}`](https://docs.everstack.ai/api-reference/memory/delete-collection) | | | `POST` | [`/v1/memory/setup`](https://docs.everstack.ai/api-reference/memory/setup-pg-vector) | | --- ### POST Add Documents Source: https://docs.everstack.ai/api-reference/memory/add-documents #### Metadata ```yaml title: "POST Add Documents" full: true ```

Add Documents

POST {"/v1/memory/collections/{collectionName}/documents"}

Request

```bash curl -X POST "http://localhost:8089/v1/memory/collections/{collectionName}/documents" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","documents":[{"content":"string","source":"string"}],"chunkSize":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/memory/collections/{collectionName}/documents", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "documents": [ { "content": "string", "source": "string" } ], "chunkSize": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/memory/collections/{collectionName}/documents", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "documents": [ { "content": "string", "source": "string" } ], "chunkSize": 0 }, ) data = response.json() ```

Response

```json { "documentIds": [ "string" ], "chunksCreated": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `collectionName` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `documents` | `object[]` | No | | | `chunkSize` | `integer` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `documentIds` | `string[]` | | | `chunksCreated` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Collection Source: https://docs.everstack.ai/api-reference/memory/create-collection #### Metadata ```yaml title: "POST Create Collection" full: true ```

Create Collection

POST /v1/memory/collections

Request

```bash curl -X POST "http://localhost:8089/v1/memory/collections" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","embeddingModel":"string","embeddingDimension":0,"distanceMetric":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/memory/collections", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "embeddingModel": "string", "embeddingDimension": 0, "distanceMetric": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/memory/collections", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "embeddingModel": "string", "embeddingDimension": 0, "distanceMetric": "string" }, ) data = response.json() ```

Response

```json { "collection": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "embeddingModel": "string", "embeddingDimension": 0, "distanceMetric": "string", "documentCount": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `embeddingModel` | `string` | No | | | `embeddingDimension` | `integer` | No | | | `distanceMetric` | `string` | No | | | `metadata` | `object` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `collection` | `object` | Collection represents a vector memory collection. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Collection Source: https://docs.everstack.ai/api-reference/memory/delete-collection #### Metadata ```yaml title: "DELETE Delete Collection" full: true ```

Delete Collection

DELETE {"/v1/memory/collections/{name}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/memory/collections/{name}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/memory/collections/{name}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/memory/collections/{name}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `name` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Document Source: https://docs.everstack.ai/api-reference/memory/delete-document #### Metadata ```yaml title: "DELETE Delete Document" full: true ```

Delete Document

DELETE {"/v1/memory/collections/{collectionName}/documents/{documentId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/memory/collections/{collectionName}/documents/{documentId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/memory/collections/{collectionName}/documents/{documentId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/memory/collections/{collectionName}/documents/{documentId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `collectionName` | path | `string` | **Yes** | | | `documentId` | path | `string` | **Yes** | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Collection Source: https://docs.everstack.ai/api-reference/memory/get-collection #### Metadata ```yaml title: "GET Get Collection" full: true ```

Get Collection

GET {"/v1/memory/collections/{name}"}

Request

```bash curl -X GET "http://localhost:8089/v1/memory/collections/{name}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/memory/collections/{name}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/memory/collections/{name}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "collection": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "embeddingModel": "string", "embeddingDimension": 0, "distanceMetric": "string", "documentCount": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `name` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `collection` | `object` | Collection represents a vector memory collection. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Get Memory Analytics Source: https://docs.everstack.ai/api-reference/memory/get-memory-analytics #### Metadata ```yaml title: "POST Get Memory Analytics" full: true ```

Get Memory Analytics

POST /v1/memory/analytics

Request

```bash curl -X POST "http://localhost:8089/v1/memory/analytics" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","from":"string","to":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/memory/analytics", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "from": "string", "to": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/memory/analytics", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "from": "string", "to": "string" }, ) data = response.json() ```

Response

```json { "buckets": [ { "timestamp": "string", "queryCount": 0, "storeCount": 0, "deleteCount": 0, "errorCount": 0, "avgLatencyMs": 0 } ], "totalRequests": 0, "totalErrors": 0, "avgLatencyMs": 0, "topCollections": [ { "collectionName": "string", "requestCount": 0 } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `from` | `string` | No | | | `to` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `buckets` | `object[]` | | | `totalRequests` | `integer` | | | `totalErrors` | `integer` | | | `avgLatencyMs` | `number` | | | `topCollections` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Collections Source: https://docs.everstack.ai/api-reference/memory/list-collections #### Metadata ```yaml title: "GET List Collections" full: true ```

List Collections

GET /v1/memory/collections

Request

```bash curl -X GET "http://localhost:8089/v1/memory/collections" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/memory/collections", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/memory/collections", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "collections": [ { "id": "string", "tenantId": "string", "name": "string", "description": "string", "embeddingModel": "string", "embeddingDimension": 0, "distanceMetric": "string", "documentCount": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `collections` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Query Collection Source: https://docs.everstack.ai/api-reference/memory/query-collection #### Metadata ```yaml title: "POST Query Collection" full: true ```

Query Collection

POST {"/v1/memory/collections/{collectionName}/query"}

Request

```bash curl -X POST "http://localhost:8089/v1/memory/collections/{collectionName}/query" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","query":"string","topK":0,"minScore":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/memory/collections/{collectionName}/query", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "query": "string", "topK": 0, "minScore": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/memory/collections/{collectionName}/query", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "query": "string", "topK": 0, "minScore": 0 }, ) data = response.json() ```

Response

```json { "results": [ { "documentId": "string", "chunkText": "string", "chunkIndex": 0, "score": 0 } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `collectionName` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `query` | `string` | No | | | `topK` | `integer` | No | | | `minScore` | `number` | No | | | `metadataFilter` | `object` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `results` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Setup Pg Vector Source: https://docs.everstack.ai/api-reference/memory/setup-pg-vector #### Metadata ```yaml title: "POST Setup Pg Vector" full: true ```

Setup Pg Vector

POST /v1/memory/setup

Request

```bash curl -X POST "http://localhost:8089/v1/memory/setup" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/memory/setup", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/memory/setup", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### OpenAI Agents REST Source: https://docs.everstack.ai/api-reference/openai-agents-rest OpenAI Agents REST API endpoints #### Metadata ```yaml title: OpenAI Agents REST description: OpenAI Agents REST API endpoints ``` # OpenAI Agents REST API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | [`/v1/openai-agents/capabilities`](https://docs.everstack.ai/api-reference/openai-agents-rest/get-capabilities) | Get Capabilities | | `GET` | [`/v1/openai-agents/connections`](https://docs.everstack.ai/api-reference/openai-agents-rest/list-connections) | List Connections | | `POST` | [`/v1/openai-agents/connections`](https://docs.everstack.ai/api-reference/openai-agents-rest/create-connection) | Create Connection | | `GET` | [`/v1/openai-agents/connections/{connection-id}`](https://docs.everstack.ai/api-reference/openai-agents-rest/get-connection) | Get Connection | | `PATCH` | [`/v1/openai-agents/connections/{connection-id}`](https://docs.everstack.ai/api-reference/openai-agents-rest/update-connection) | Update Connection | | `DELETE` | [`/v1/openai-agents/connections/{connection-id}`](https://docs.everstack.ai/api-reference/openai-agents-rest/delete-connection) | Delete Connection | | `GET` | [`/v1/openai-agents/sessions`](https://docs.everstack.ai/api-reference/openai-agents-rest/list-sessions) | List Sessions | | `POST` | [`/v1/openai-agents/sessions`](https://docs.everstack.ai/api-reference/openai-agents-rest/create-session) | Create Session | | `GET` | [`/v1/openai-agents/sessions/{session-id}`](https://docs.everstack.ai/api-reference/openai-agents-rest/get-session) | Get Session | | `DELETE` | [`/v1/openai-agents/sessions/{session-id}`](https://docs.everstack.ai/api-reference/openai-agents-rest/delete-session) | Delete Session | | `POST` | [`/v1/openai-agents/sessions/{session-id}/input`](https://docs.everstack.ai/api-reference/openai-agents-rest/send-input) | Send Input | | `POST` | [`/v1/openai-agents/sessions/{session-id}/cancel`](https://docs.everstack.ai/api-reference/openai-agents-rest/cancel-session) | Cancel Session | | `GET` | [`/v1/openai-agents/sessions/{session-id}/events`](https://docs.everstack.ai/api-reference/openai-agents-rest/list-session-events) | List Session Events | | `GET` | [`/v1/openai-agents/sessions/{session-id}/usage`](https://docs.everstack.ai/api-reference/openai-agents-rest/get-session-usage) | Get Session Usage | | `POST` | [`/v1/openai-agents/sessions/{session-id}/inputs`](https://docs.everstack.ai/api-reference/openai-agents-rest/upload-session-input) | Upload Session Input | | `GET` | [`/v1/openai-agents/sessions/{session-id}/artifacts`](https://docs.everstack.ai/api-reference/openai-agents-rest/list-session-artifacts) | List Session Artifacts | | `POST` | [`/v1/openai-agents/sessions/{session-id}/artifacts/export`](https://docs.everstack.ai/api-reference/openai-agents-rest/export-session-artifact) | Export Session Artifact | | `GET` | [`/v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}/download`](https://docs.everstack.ai/api-reference/openai-agents-rest/get-artifact-download) | Get Artifact Download | | `DELETE` | [`/v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}`](https://docs.everstack.ai/api-reference/openai-agents-rest/delete-session-artifact) | Delete Session Artifact | | `GET` | [`/v1/openai-agents/approvals`](https://docs.everstack.ai/api-reference/openai-agents-rest/list-approvals) | List Approvals | | `POST` | [`/v1/openai-agents/approvals/{approval-id}/resolve`](https://docs.everstack.ai/api-reference/openai-agents-rest/resolve-approval) | Resolve Approval | --- ### POST Cancel Session Source: https://docs.everstack.ai/api-reference/openai-agents-rest/cancel-session Cancel Session #### Metadata ```yaml title: "POST Cancel Session" description: "Cancel Session" full: true ```

Cancel Session

POST /v1/openai-agents/sessions/{session-id}/cancel

Request

```bash curl -X POST "http://localhost:8089/v1/openai-agents/sessions/{session-id}/cancel" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/cancel", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/cancel", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "accepted": true } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | ### Responses #### 202 Success | Property | Type | Description | |----------|------|-------------| | `accepted` | `boolean` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### POST Create Connection Source: https://docs.everstack.ai/api-reference/openai-agents-rest/create-connection Create Connection #### Metadata ```yaml title: "POST Create Connection" description: "Create Connection" full: true ```

Create Connection

POST /v1/openai-agents/connections

Request

```bash curl -X POST "http://localhost:8089/v1/openai-agents/connections" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","api_key":"string","executor_key":"string","project_id":"string","organization_id":"string","principal_id":"string","allowed_models":["string"]}' ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/connections", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "name": "string", "api_key": "string", "executor_key": "string", "project_id": "string", "organization_id": "string", "principal_id": "string", "allowed_models": [ "string" ] }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/openai-agents/connections", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "name": "string", "api_key": "string", "executor_key": "string", "project_id": "string", "organization_id": "string", "principal_id": "string", "allowed_models": [ "string" ] }, ) data = response.json() ```

Response

```json { "id": "string", "name": "string", "provider": "string", "project_id": "string", "organization_id": "string", "principal_id": "string", "allowed_models": [ "string" ], "status": "string", "last_error": "string", "created_at": "string", "updated_at": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Request Body JSON request bodies are capped at 2 MiB. | Property | Type | Required | Description | |----------|------|----------|-------------| | `name` | `string` | **Yes** | | | `api_key` | `string` | **Yes** | | | `executor_key` | `string` | No | | | `project_id` | `string` | No | | | `organization_id` | `string` | No | | | `principal_id` | `string` | No | | | `allowed_models` | `string[]` | No | | ### Responses #### 201 Success | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `name` | `string` | | | `provider` | `string` | | | `project_id` | `string` | | | `organization_id` | `string` | | | `principal_id` | `string` | | | `allowed_models` | `string[]` | | | `status` | `string` | | | `last_error` | `string` | | | `created_at` | `string` | | | `updated_at` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### POST Create Session Source: https://docs.everstack.ai/api-reference/openai-agents-rest/create-session Create Session #### Metadata ```yaml title: "POST Create Session" description: "Create Session" full: true ```

Create Session

POST /v1/openai-agents/sessions

Request

```bash curl -X POST "http://localhost:8089/v1/openai-agents/sessions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"connection_id":"string","idempotency_key":"string","model":"string","instructions":"string","environment":{"type":"none","workspace_directory":"string"},"tools":[{"type":"string","resource_id":"string","name":"string"}]}' ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "connection_id": "string", "idempotency_key": "string", "model": "string", "instructions": "string", "environment": { "type": "none", "workspace_directory": "string" }, "tools": [ { "type": "string", "resource_id": "string", "name": "string" } ] }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/openai-agents/sessions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "connection_id": "string", "idempotency_key": "string", "model": "string", "instructions": "string", "environment": { "type": "none", "workspace_directory": "string" }, "tools": [ { "type": "string", "resource_id": "string", "name": "string" } ] }, ) data = response.json() ```

Response

```json { "id": "string", "provider": "string", "connection_id": "string", "conversation_id": "string", "upstream_session_id": "string", "upstream_environment_id": "string", "sandbox_id": "string", "model": "string", "environment": { "type": "none", "workspace_directory": "string" }, "status": "string", "readiness": "string", "cleanup_status": "string", "environment_cleanup_status": "string", "last_error": "string", "created_at": "string", "updated_at": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Request Body JSON request bodies are capped at 2 MiB. | Property | Type | Required | Description | |----------|------|----------|-------------| | `connection_id` | `string` | **Yes** | | | `idempotency_key` | `string` | **Yes** | | | `model` | `string` | **Yes** | | | `instructions` | `string` | No | | | `environment` | `object` | **Yes** | | | `input` | `object` | No | | | `tools` | `object[]` | No | | ### Responses #### 201 Success | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `provider` | `string` | | | `connection_id` | `string` | | | `conversation_id` | `string` | | | `upstream_session_id` | `string` | | | `upstream_environment_id` | `string` | | | `sandbox_id` | `string` | | | `model` | `string` | | | `environment` | `object` | | | `status` | `string` | | | `readiness` | `string` | | | `cleanup_status` | `string` | | | `environment_cleanup_status` | `string` | | | `last_error` | `string` | | | `created_at` | `string` | | | `updated_at` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 409 Creation outcome is pending recovery | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### DELETE Delete Connection Source: https://docs.everstack.ai/api-reference/openai-agents-rest/delete-connection Delete Connection #### Metadata ```yaml title: "DELETE Delete Connection" description: "Delete Connection" full: true ```

Delete Connection

DELETE /v1/openai-agents/connections/{connection-id}

Request

```bash curl -X DELETE "http://localhost:8089/v1/openai-agents/connections/{connection-id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/connections/{connection-id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/openai-agents/connections/{connection-id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "deleted": true } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `connection-id` | path | `string` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `deleted` | `boolean` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### DELETE Delete Session Artifact Source: https://docs.everstack.ai/api-reference/openai-agents-rest/delete-session-artifact Delete Session Artifact #### Metadata ```yaml title: "DELETE Delete Session Artifact" description: "Delete Session Artifact" full: true ```

Delete Session Artifact

DELETE /v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}

Request

```bash curl -X DELETE "http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "deleted": true } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | | `artifact-id` | path | `string` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `deleted` | `boolean` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### DELETE Delete Session Source: https://docs.everstack.ai/api-reference/openai-agents-rest/delete-session Delete Session #### Metadata ```yaml title: "DELETE Delete Session" description: "Delete Session" full: true ```

Delete Session

DELETE /v1/openai-agents/sessions/{session-id}

Request

```bash curl -X DELETE "http://localhost:8089/v1/openai-agents/sessions/{session-id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/openai-agents/sessions/{session-id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "deleted": true } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `deleted` | `boolean` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### POST Export Session Artifact Source: https://docs.everstack.ai/api-reference/openai-agents-rest/export-session-artifact Export Session Artifact #### Metadata ```yaml title: "POST Export Session Artifact" description: "Export Session Artifact" full: true ```

Export Session Artifact

POST /v1/openai-agents/sessions/{session-id}/artifacts/export

Request

```bash curl -X POST "http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/export" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"path":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/export", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "path": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/export", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "path": "string" }, ) data = response.json() ```

Response

```json { "object_id": "string", "filename": "string", "content_type": "string", "size_bytes": 0, "sha256": "string", "kind": "string", "created_at": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | ### Request Body JSON request bodies are capped at 2 MiB. | Property | Type | Required | Description | |----------|------|----------|-------------| | `path` | `string` | **Yes** | | ### Responses #### 201 Success | Property | Type | Description | |----------|------|-------------| | `object_id` | `string` | | | `filename` | `string` | | | `content_type` | `string` | | | `size_bytes` | `integer` | | | `sha256` | `string` | | | `kind` | `string` | | | `created_at` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET Get Artifact Download Source: https://docs.everstack.ai/api-reference/openai-agents-rest/get-artifact-download Get Artifact Download #### Metadata ```yaml title: "GET Get Artifact Download" description: "Get Artifact Download" full: true ```

Get Artifact Download

GET /v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}/download

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}/download" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}/download", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts/{artifact-id}/download", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "object_id": "string", "filename": "string", "content_type": "string", "size_bytes": 0, "sha256": "string", "kind": "string", "created_at": "string", "url": "string", "expires_at": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | | `artifact-id` | path | `string` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `object_id` | `string` | | | `filename` | `string` | | | `content_type` | `string` | | | `size_bytes` | `integer` | | | `sha256` | `string` | | | `kind` | `string` | | | `created_at` | `string` | | | `url` | `string` | | | `expires_at` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET Get Capabilities Source: https://docs.everstack.ai/api-reference/openai-agents-rest/get-capabilities Get Capabilities #### Metadata ```yaml title: "GET Get Capabilities" description: "Get Capabilities" full: true ```

Get Capabilities

GET /v1/openai-agents/capabilities

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/capabilities" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/capabilities", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/capabilities", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "enabled": true, "provider": "string", "environment_modes": [ "string" ], "tool_types": [ "string" ], "file_operations": [ "string" ], "executor_version": "string", "readiness": "string", "can_manage_connections": true, "can_run_sessions": true, "can_resolve_approvals": true } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `enabled` | `boolean` | | | `provider` | `string` | | | `environment_modes` | `string[]` | | | `tool_types` | `string[]` | | | `file_operations` | `string[]` | | | `executor_version` | `string` | | | `readiness` | `string` | | | `can_manage_connections` | `boolean` | | | `can_run_sessions` | `boolean` | | | `can_resolve_approvals` | `boolean` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET Get Connection Source: https://docs.everstack.ai/api-reference/openai-agents-rest/get-connection Get Connection #### Metadata ```yaml title: "GET Get Connection" description: "Get Connection" full: true ```

Get Connection

GET /v1/openai-agents/connections/{connection-id}

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/connections/{connection-id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/connections/{connection-id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/connections/{connection-id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "id": "string", "name": "string", "provider": "string", "project_id": "string", "organization_id": "string", "principal_id": "string", "allowed_models": [ "string" ], "status": "string", "last_error": "string", "created_at": "string", "updated_at": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `connection-id` | path | `string` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `name` | `string` | | | `provider` | `string` | | | `project_id` | `string` | | | `organization_id` | `string` | | | `principal_id` | `string` | | | `allowed_models` | `string[]` | | | `status` | `string` | | | `last_error` | `string` | | | `created_at` | `string` | | | `updated_at` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET Get Session Usage Source: https://docs.everstack.ai/api-reference/openai-agents-rest/get-session-usage Get Session Usage #### Metadata ```yaml title: "GET Get Session Usage" description: "Get Session Usage" full: true ```

Get Session Usage

GET /v1/openai-agents/sessions/{session-id}/usage

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/sessions/{session-id}/usage" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/usage", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/usage", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "status": "reported", "input_tokens": 0, "output_tokens": 0, "total_tokens": 0, "updated_at": "string", "source": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `"reported" \| "unavailable"` | | | `input_tokens` | `integer` | | | `output_tokens` | `integer` | | | `total_tokens` | `integer` | | | `updated_at` | `string` | | | `source` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET Get Session Source: https://docs.everstack.ai/api-reference/openai-agents-rest/get-session Get Session #### Metadata ```yaml title: "GET Get Session" description: "Get Session" full: true ```

Get Session

GET /v1/openai-agents/sessions/{session-id}

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/sessions/{session-id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/sessions/{session-id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "id": "string", "provider": "string", "connection_id": "string", "conversation_id": "string", "upstream_session_id": "string", "upstream_environment_id": "string", "sandbox_id": "string", "model": "string", "environment": { "type": "none", "workspace_directory": "string" }, "status": "string", "readiness": "string", "cleanup_status": "string", "environment_cleanup_status": "string", "last_error": "string", "created_at": "string", "updated_at": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `provider` | `string` | | | `connection_id` | `string` | | | `conversation_id` | `string` | | | `upstream_session_id` | `string` | | | `upstream_environment_id` | `string` | | | `sandbox_id` | `string` | | | `model` | `string` | | | `environment` | `object` | | | `status` | `string` | | | `readiness` | `string` | | | `cleanup_status` | `string` | | | `environment_cleanup_status` | `string` | | | `last_error` | `string` | | | `created_at` | `string` | | | `updated_at` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET List Approvals Source: https://docs.everstack.ai/api-reference/openai-agents-rest/list-approvals List Approvals #### Metadata ```yaml title: "GET List Approvals" description: "List Approvals" full: true ```

List Approvals

GET /v1/openai-agents/approvals

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/approvals" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/approvals", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/approvals", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "data": [ { "id": "string", "session_id": "string", "turn_id": "string", "call_id": "string", "tool_name": "string", "resource_kind": "string", "resource_id": "string", "status": "string", "requested_by": "string", "requested_at": "string", "expires_at": "string" } ] } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `data` | `object[]` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET List Connections Source: https://docs.everstack.ai/api-reference/openai-agents-rest/list-connections List Connections #### Metadata ```yaml title: "GET List Connections" description: "List Connections" full: true ```

List Connections

GET /v1/openai-agents/connections

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/connections" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/connections", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/connections", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "data": [ { "id": "string", "name": "string", "provider": "string", "project_id": "string", "organization_id": "string", "principal_id": "string", "allowed_models": [ "string" ], "status": "string", "last_error": "string", "created_at": "string", "updated_at": "string" } ] } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `data` | `object[]` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET List Session Artifacts Source: https://docs.everstack.ai/api-reference/openai-agents-rest/list-session-artifacts List Session Artifacts #### Metadata ```yaml title: "GET List Session Artifacts" description: "List Session Artifacts" full: true ```

List Session Artifacts

GET /v1/openai-agents/sessions/{session-id}/artifacts

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/artifacts", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "data": [ { "object_id": "string", "filename": "string", "content_type": "string", "size_bytes": 0, "sha256": "string", "kind": "string", "created_at": "string" } ] } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `data` | `object[]` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET List Session Events Source: https://docs.everstack.ai/api-reference/openai-agents-rest/list-session-events List Session Events #### Metadata ```yaml title: "GET List Session Events" description: "List Session Events" full: true ```

List Session Events

GET /v1/openai-agents/sessions/{session-id}/events

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/sessions/{session-id}/events" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/events", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/events", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "data": [ { "cursor": 0, "event_id": "string", "type": "string", "version": "string", "upstream_item_id": "string", "tool_failed": true, "created_at": "string" } ], "next_cursor": 0, "has_more": true } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | | `after` | query | `integer` | No | | | `limit` | query | `integer` | No | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `data` | `object[]` | | | `next_cursor` | `integer` | | | `has_more` | `boolean` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### GET List Sessions Source: https://docs.everstack.ai/api-reference/openai-agents-rest/list-sessions List Sessions #### Metadata ```yaml title: "GET List Sessions" description: "List Sessions" full: true ```

List Sessions

GET /v1/openai-agents/sessions

Request

```bash curl -X GET "http://localhost:8089/v1/openai-agents/sessions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/openai-agents/sessions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "data": [ { "id": "string", "provider": "string", "connection_id": "string", "conversation_id": "string", "upstream_session_id": "string", "upstream_environment_id": "string", "sandbox_id": "string", "model": "string", "environment": { "type": "none", "workspace_directory": "string" }, "status": "string", "readiness": "string", "cleanup_status": "string", "environment_cleanup_status": "string", "last_error": "string", "created_at": "string", "updated_at": "string" } ] } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `data` | `object[]` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### POST Resolve Approval Source: https://docs.everstack.ai/api-reference/openai-agents-rest/resolve-approval Resolve Approval #### Metadata ```yaml title: "POST Resolve Approval" description: "Resolve Approval" full: true ```

Resolve Approval

POST /v1/openai-agents/approvals/{approval-id}/resolve

Request

```bash curl -X POST "http://localhost:8089/v1/openai-agents/approvals/{approval-id}/resolve" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"decision":"approved"}' ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/approvals/{approval-id}/resolve", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "decision": "approved" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/openai-agents/approvals/{approval-id}/resolve", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "decision": "approved" }, ) data = response.json() ```

Response

```json { "resolved": true } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `approval-id` | path | `string` | **Yes** | | ### Request Body JSON request bodies are capped at 2 MiB. | Property | Type | Required | Description | |----------|------|----------|-------------| | `decision` | `"approved" \| "denied"` | **Yes** | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `resolved` | `boolean` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### POST Send Input Source: https://docs.everstack.ai/api-reference/openai-agents-rest/send-input Send Input #### Metadata ```yaml title: "POST Send Input" description: "Send Input" full: true ```

Send Input

POST /v1/openai-agents/sessions/{session-id}/input

Request

```bash curl -X POST "http://localhost:8089/v1/openai-agents/sessions/{session-id}/input" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"idempotency_key":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/input", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "idempotency_key": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/input", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "idempotency_key": "string" }, ) data = response.json() ```

Response

```json { "accepted": true } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | ### Request Body JSON request bodies are capped at 2 MiB. | Property | Type | Required | Description | |----------|------|----------|-------------| | `idempotency_key` | `string` | **Yes** | | | `input` | `object` | **Yes** | | ### Responses #### 202 Success | Property | Type | Description | |----------|------|-------------| | `accepted` | `boolean` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### PATCH Update Connection Source: https://docs.everstack.ai/api-reference/openai-agents-rest/update-connection Update Connection #### Metadata ```yaml title: "PATCH Update Connection" description: "Update Connection" full: true ```

Update Connection

PATCH /v1/openai-agents/connections/{connection-id}

Request

```bash curl -X PATCH "http://localhost:8089/v1/openai-agents/connections/{connection-id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","api_key":"string","executor_key":"string","project_id":"string","organization_id":"string","principal_id":"string","allowed_models":["string"]}' ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/connections/{connection-id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "name": "string", "api_key": "string", "executor_key": "string", "project_id": "string", "organization_id": "string", "principal_id": "string", "allowed_models": [ "string" ] }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/openai-agents/connections/{connection-id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "name": "string", "api_key": "string", "executor_key": "string", "project_id": "string", "organization_id": "string", "principal_id": "string", "allowed_models": [ "string" ] }, ) data = response.json() ```

Response

```json { "id": "string", "name": "string", "provider": "string", "project_id": "string", "organization_id": "string", "principal_id": "string", "allowed_models": [ "string" ], "status": "string", "last_error": "string", "created_at": "string", "updated_at": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `connection-id` | path | `string` | **Yes** | | ### Request Body JSON request bodies are capped at 2 MiB. | Property | Type | Required | Description | |----------|------|----------|-------------| | `name` | `string` | No | | | `api_key` | `string` | No | | | `executor_key` | `string` | No | | | `project_id` | `string` | No | | | `organization_id` | `string` | No | | | `principal_id` | `string` | No | | | `allowed_models` | `string[]` | No | | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `name` | `string` | | | `provider` | `string` | | | `project_id` | `string` | | | `organization_id` | `string` | | | `principal_id` | `string` | | | `allowed_models` | `string[]` | | | `status` | `string` | | | `last_error` | `string` | | | `created_at` | `string` | | | `updated_at` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### POST Upload Session Input Source: https://docs.everstack.ai/api-reference/openai-agents-rest/upload-session-input Upload Session Input #### Metadata ```yaml title: "POST Upload Session Input" description: "Upload Session Input" full: true ```

Upload Session Input

POST /v1/openai-agents/sessions/{session-id}/inputs

JSON request body is capped at 2 MiB. content_base64 contains the file bytes.

Request

```bash curl -X POST "http://localhost:8089/v1/openai-agents/sessions/{session-id}/inputs" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"filename":"string","content_type":"string","content_base64":"string","destination":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/openai-agents/sessions/{session-id}/inputs", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "filename": "string", "content_type": "string", "content_base64": "string", "destination": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/openai-agents/sessions/{session-id}/inputs", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "filename": "string", "content_type": "string", "content_base64": "string", "destination": "string" }, ) data = response.json() ```

Response

```json { "object_id": "string", "filename": "string", "content_type": "string", "size_bytes": 0, "sha256": "string", "kind": "string", "created_at": "string" } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ``` ```json { "error": { "code": "string", "message": "string" } } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `session-id` | path | `string` | **Yes** | | ### Request Body JSON request bodies are capped at 2 MiB. | Property | Type | Required | Description | |----------|------|----------|-------------| | `filename` | `string` | **Yes** | | | `content_type` | `string` | No | | | `content_base64` | `string` | **Yes** | | | `destination` | `string` | No | | ### Responses #### 201 Success | Property | Type | Description | |----------|------|-------------| | `object_id` | `string` | | | `filename` | `string` | | | `content_type` | `string` | | | `size_bytes` | `integer` | | | `sha256` | `string` | | | `kind` | `string` | | | `created_at` | `string` | | #### 400 Invalid request | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 403 Permission denied | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 404 Not found | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 500 Internal error | Property | Type | Description | |----------|------|-------------| | `error` | `object` | | #### 503 Unavailable | Property | Type | Description | |----------|------|-------------| | `error` | `object` | |
--- ### OpenAI Agents Connect JSON Source: https://docs.everstack.ai/api-reference/openai-agents OpenAI Agents Connect JSON API endpoints #### Metadata ```yaml title: OpenAI Agents Connect JSON description: OpenAI Agents Connect JSON API endpoints ``` # OpenAI Agents Connect JSON API | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/CancelSession`](https://docs.everstack.ai/api-reference/openai-agents/cancel-session) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/CreateConnection`](https://docs.everstack.ai/api-reference/openai-agents/create-connection) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/CreateSession`](https://docs.everstack.ai/api-reference/openai-agents/create-session) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/DeleteConnection`](https://docs.everstack.ai/api-reference/openai-agents/delete-connection) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/DeleteSession`](https://docs.everstack.ai/api-reference/openai-agents/delete-session) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/DeleteSessionArtifact`](https://docs.everstack.ai/api-reference/openai-agents/delete-session-artifact) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/ExportSessionArtifact`](https://docs.everstack.ai/api-reference/openai-agents/export-session-artifact) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/GetArtifactDownload`](https://docs.everstack.ai/api-reference/openai-agents/get-artifact-download) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/GetCapabilities`](https://docs.everstack.ai/api-reference/openai-agents/get-capabilities) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/GetConnection`](https://docs.everstack.ai/api-reference/openai-agents/get-connection) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/GetSession`](https://docs.everstack.ai/api-reference/openai-agents/get-session) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/GetSessionUsage`](https://docs.everstack.ai/api-reference/openai-agents/get-session-usage) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/ListApprovals`](https://docs.everstack.ai/api-reference/openai-agents/list-approvals) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/ListConnections`](https://docs.everstack.ai/api-reference/openai-agents/list-connections) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/ListSessionArtifacts`](https://docs.everstack.ai/api-reference/openai-agents/list-session-artifacts) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/ListSessionEvents`](https://docs.everstack.ai/api-reference/openai-agents/list-session-events) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/ListSessions`](https://docs.everstack.ai/api-reference/openai-agents/list-sessions) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/ResolveApproval`](https://docs.everstack.ai/api-reference/openai-agents/resolve-approval) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/SendInput`](https://docs.everstack.ai/api-reference/openai-agents/send-input) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/UpdateConnection`](https://docs.everstack.ai/api-reference/openai-agents/update-connection) | | | `POST` | [`/everstack.openai_agents.v1.OpenAIAgentsService/UploadSessionInput`](https://docs.everstack.ai/api-reference/openai-agents/upload-session-input) | | --- ### POST Cancel Session Source: https://docs.everstack.ai/api-reference/openai-agents/cancel-session #### Metadata ```yaml title: "POST Cancel Session" full: true ```

Cancel Session

POST /everstack.openai_agents.v1.OpenAIAgentsService/CancelSession

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CancelSession" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CancelSession", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CancelSession", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string" }, ) data = response.json() ```

Response

```json { "accepted": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `accepted` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Connection Source: https://docs.everstack.ai/api-reference/openai-agents/create-connection #### Metadata ```yaml title: "POST Create Connection" full: true ```

Create Connection

POST /everstack.openai_agents.v1.OpenAIAgentsService/CreateConnection

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CreateConnection" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","apiKey":"string","executorKey":"string","projectId":"string","organizationId":"string","principalId":"string","allowedModels":["string"]}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CreateConnection", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "name": "string", "apiKey": "string", "executorKey": "string", "projectId": "string", "organizationId": "string", "principalId": "string", "allowedModels": [ "string" ] }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CreateConnection", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "name": "string", "apiKey": "string", "executorKey": "string", "projectId": "string", "organizationId": "string", "principalId": "string", "allowedModels": [ "string" ] }, ) data = response.json() ```

Response

```json { "connection": { "id": "string", "name": "string", "provider": "string", "projectId": "string", "organizationId": "string", "principalId": "string", "allowedModels": [ "string" ], "status": "string", "lastError": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `name` | `string` | No | | | `apiKey` | `string` | No | | | `executorKey` | `string` | No | | | `projectId` | `string` | No | | | `organizationId` | `string` | No | | | `principalId` | `string` | No | | | `allowedModels` | `string[]` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `connection` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Session Source: https://docs.everstack.ai/api-reference/openai-agents/create-session #### Metadata ```yaml title: "POST Create Session" full: true ```

Create Session

POST /everstack.openai_agents.v1.OpenAIAgentsService/CreateSession

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CreateSession" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"connectionId":"string","idempotencyKey":"string","model":"string","instructions":"string","environment":{"type":"string","workspaceDirectory":"string"},"tools":[{"type":"string","resourceId":"string","name":"string"}]}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CreateSession", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "connectionId": "string", "idempotencyKey": "string", "model": "string", "instructions": "string", "environment": { "type": "string", "workspaceDirectory": "string" }, "tools": [ { "type": "string", "resourceId": "string", "name": "string" } ] }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/CreateSession", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "connectionId": "string", "idempotencyKey": "string", "model": "string", "instructions": "string", "environment": { "type": "string", "workspaceDirectory": "string" }, "tools": [ { "type": "string", "resourceId": "string", "name": "string" } ] }, ) data = response.json() ```

Response

```json { "session": { "id": "string", "provider": "string", "connectionId": "string", "conversationId": "string", "upstreamSessionId": "string", "upstreamEnvironmentId": "string", "sandboxId": "string", "model": "string", "environment": { "type": "string", "workspaceDirectory": "string" }, "status": "string", "readiness": "string", "cleanupStatus": "string", "environmentCleanupStatus": "string", "lastError": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `connectionId` | `string` | No | | | `idempotencyKey` | `string` | No | | | `model` | `string` | No | | | `instructions` | `string` | No | | | `environment` | `object` | No | | | `input` | `object` | No | | | `tools` | `object[]` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `session` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Delete Connection Source: https://docs.everstack.ai/api-reference/openai-agents/delete-connection #### Metadata ```yaml title: "POST Delete Connection" full: true ```

Delete Connection

POST /everstack.openai_agents.v1.OpenAIAgentsService/DeleteConnection

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteConnection" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"connectionId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteConnection", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "connectionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteConnection", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "connectionId": "string" }, ) data = response.json() ```

Response

```json { "deleted": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `connectionId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `deleted` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Delete Session Artifact Source: https://docs.everstack.ai/api-reference/openai-agents/delete-session-artifact #### Metadata ```yaml title: "POST Delete Session Artifact" full: true ```

Delete Session Artifact

POST /everstack.openai_agents.v1.OpenAIAgentsService/DeleteSessionArtifact

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteSessionArtifact" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string","objectId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteSessionArtifact", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string", "objectId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteSessionArtifact", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string", "objectId": "string" }, ) data = response.json() ```

Response

```json { "deleted": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | | `objectId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `deleted` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Delete Session Source: https://docs.everstack.ai/api-reference/openai-agents/delete-session #### Metadata ```yaml title: "POST Delete Session" full: true ```

Delete Session

POST /everstack.openai_agents.v1.OpenAIAgentsService/DeleteSession

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteSession" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteSession", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/DeleteSession", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string" }, ) data = response.json() ```

Response

```json { "deleted": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `deleted` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Export Session Artifact Source: https://docs.everstack.ai/api-reference/openai-agents/export-session-artifact #### Metadata ```yaml title: "POST Export Session Artifact" full: true ```

Export Session Artifact

POST /everstack.openai_agents.v1.OpenAIAgentsService/ExportSessionArtifact

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ExportSessionArtifact" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string","path":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ExportSessionArtifact", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string", "path": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ExportSessionArtifact", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string", "path": "string" }, ) data = response.json() ```

Response

```json { "artifact": { "objectId": "string", "filename": "string", "contentType": "string", "sizeBytes": "string", "sha256": "string", "kind": "string", "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | | `path` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `artifact` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Get Artifact Download Source: https://docs.everstack.ai/api-reference/openai-agents/get-artifact-download #### Metadata ```yaml title: "POST Get Artifact Download" full: true ```

Get Artifact Download

POST /everstack.openai_agents.v1.OpenAIAgentsService/GetArtifactDownload

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetArtifactDownload" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string","objectId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetArtifactDownload", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string", "objectId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetArtifactDownload", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string", "objectId": "string" }, ) data = response.json() ```

Response

```json { "download": { "artifact": { "objectId": "string", "filename": "string", "contentType": "string", "sizeBytes": "string", "sha256": "string", "kind": "string", "createdAt": "2024-01-01T00:00:00Z" }, "url": "string", "expiresAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | | `objectId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `download` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Get Capabilities Source: https://docs.everstack.ai/api-reference/openai-agents/get-capabilities #### Metadata ```yaml title: "POST Get Capabilities" full: true ```

Get Capabilities

POST /everstack.openai_agents.v1.OpenAIAgentsService/GetCapabilities

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetCapabilities" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetCapabilities", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetCapabilities", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "capabilities": { "enabled": true, "provider": "string", "environmentModes": [ "string" ], "toolTypes": [ "string" ], "fileOperations": [ "string" ], "executorVersion": "string", "readiness": "string", "canManageConnections": true, "canRunSessions": true, "canResolveApprovals": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `capabilities` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Get Connection Source: https://docs.everstack.ai/api-reference/openai-agents/get-connection #### Metadata ```yaml title: "POST Get Connection" full: true ```

Get Connection

POST /everstack.openai_agents.v1.OpenAIAgentsService/GetConnection

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetConnection" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"connectionId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetConnection", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "connectionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetConnection", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "connectionId": "string" }, ) data = response.json() ```

Response

```json { "connection": { "id": "string", "name": "string", "provider": "string", "projectId": "string", "organizationId": "string", "principalId": "string", "allowedModels": [ "string" ], "status": "string", "lastError": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `connectionId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `connection` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Get Session Usage Source: https://docs.everstack.ai/api-reference/openai-agents/get-session-usage #### Metadata ```yaml title: "POST Get Session Usage" full: true ```

Get Session Usage

POST /everstack.openai_agents.v1.OpenAIAgentsService/GetSessionUsage

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetSessionUsage" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetSessionUsage", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetSessionUsage", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string" }, ) data = response.json() ```

Response

```json { "usage": { "status": "string", "inputTokens": "string", "outputTokens": "string", "totalTokens": "string", "updatedAt": "2024-01-01T00:00:00Z", "source": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `usage` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Get Session Source: https://docs.everstack.ai/api-reference/openai-agents/get-session #### Metadata ```yaml title: "POST Get Session" full: true ```

Get Session

POST /everstack.openai_agents.v1.OpenAIAgentsService/GetSession

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetSession" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetSession", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/GetSession", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string" }, ) data = response.json() ```

Response

```json { "session": { "id": "string", "provider": "string", "connectionId": "string", "conversationId": "string", "upstreamSessionId": "string", "upstreamEnvironmentId": "string", "sandboxId": "string", "model": "string", "environment": { "type": "string", "workspaceDirectory": "string" }, "status": "string", "readiness": "string", "cleanupStatus": "string", "environmentCleanupStatus": "string", "lastError": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `session` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST List Approvals Source: https://docs.everstack.ai/api-reference/openai-agents/list-approvals #### Metadata ```yaml title: "POST List Approvals" full: true ```

List Approvals

POST /everstack.openai_agents.v1.OpenAIAgentsService/ListApprovals

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListApprovals" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListApprovals", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListApprovals", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "approvals": [ { "id": "string", "sessionId": "string", "turnId": "string", "callId": "string", "toolName": "string", "resourceKind": "string", "resourceId": "string", "status": "string", "requestedBy": "string", "requestedAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `approvals` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST List Connections Source: https://docs.everstack.ai/api-reference/openai-agents/list-connections #### Metadata ```yaml title: "POST List Connections" full: true ```

List Connections

POST /everstack.openai_agents.v1.OpenAIAgentsService/ListConnections

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListConnections" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListConnections", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListConnections", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "connections": [ { "id": "string", "name": "string", "provider": "string", "projectId": "string", "organizationId": "string", "principalId": "string", "allowedModels": [ "string" ], "status": "string", "lastError": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `connections` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST List Session Artifacts Source: https://docs.everstack.ai/api-reference/openai-agents/list-session-artifacts #### Metadata ```yaml title: "POST List Session Artifacts" full: true ```

List Session Artifacts

POST /everstack.openai_agents.v1.OpenAIAgentsService/ListSessionArtifacts

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessionArtifacts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessionArtifacts", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessionArtifacts", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string" }, ) data = response.json() ```

Response

```json { "artifacts": [ { "objectId": "string", "filename": "string", "contentType": "string", "sizeBytes": "string", "sha256": "string", "kind": "string", "createdAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `artifacts` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST List Session Events Source: https://docs.everstack.ai/api-reference/openai-agents/list-session-events #### Metadata ```yaml title: "POST List Session Events" full: true ```

List Session Events

POST /everstack.openai_agents.v1.OpenAIAgentsService/ListSessionEvents

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessionEvents" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string","afterCursor":"string","limit":0}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessionEvents", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string", "afterCursor": "string", "limit": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessionEvents", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string", "afterCursor": "string", "limit": 0 }, ) data = response.json() ```

Response

```json { "events": [ { "cursor": "string", "eventId": "string", "type": "string", "version": "string", "upstreamItemId": "string", "toolFailed": true, "createdAt": "2024-01-01T00:00:00Z" } ], "nextCursor": "string", "hasMore": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | | `afterCursor` | `string` | No | | | `limit` | `integer` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `events` | `object[]` | | | `nextCursor` | `string` | | | `hasMore` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST List Sessions Source: https://docs.everstack.ai/api-reference/openai-agents/list-sessions #### Metadata ```yaml title: "POST List Sessions" full: true ```

List Sessions

POST /everstack.openai_agents.v1.OpenAIAgentsService/ListSessions

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessions", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ListSessions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "sessions": [ { "id": "string", "provider": "string", "connectionId": "string", "conversationId": "string", "upstreamSessionId": "string", "upstreamEnvironmentId": "string", "sandboxId": "string", "model": "string", "environment": { "type": "string", "workspaceDirectory": "string" }, "status": "string", "readiness": "string", "cleanupStatus": "string", "environmentCleanupStatus": "string", "lastError": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `sessions` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Resolve Approval Source: https://docs.everstack.ai/api-reference/openai-agents/resolve-approval #### Metadata ```yaml title: "POST Resolve Approval" full: true ```

Resolve Approval

POST /everstack.openai_agents.v1.OpenAIAgentsService/ResolveApproval

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ResolveApproval" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"approvalId":"string","decision":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ResolveApproval", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "approvalId": "string", "decision": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/ResolveApproval", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "approvalId": "string", "decision": "string" }, ) data = response.json() ```

Response

```json { "resolved": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `approvalId` | `string` | No | | | `decision` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `resolved` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Send Input Source: https://docs.everstack.ai/api-reference/openai-agents/send-input #### Metadata ```yaml title: "POST Send Input" full: true ```

Send Input

POST /everstack.openai_agents.v1.OpenAIAgentsService/SendInput

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/SendInput" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string","idempotencyKey":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/SendInput", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string", "idempotencyKey": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/SendInput", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string", "idempotencyKey": "string" }, ) data = response.json() ```

Response

```json { "accepted": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | | `idempotencyKey` | `string` | No | | | `input` | `object` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `accepted` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Update Connection Source: https://docs.everstack.ai/api-reference/openai-agents/update-connection #### Metadata ```yaml title: "POST Update Connection" full: true ```

Update Connection

POST /everstack.openai_agents.v1.OpenAIAgentsService/UpdateConnection

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/UpdateConnection" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"connectionId":"string","name":"string","apiKey":"string","executorKey":"string","projectId":"string","organizationId":"string","principalId":"string","allowedModels":["string"],"updateMask":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/UpdateConnection", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "connectionId": "string", "name": "string", "apiKey": "string", "executorKey": "string", "projectId": "string", "organizationId": "string", "principalId": "string", "allowedModels": [ "string" ], "updateMask": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/UpdateConnection", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "connectionId": "string", "name": "string", "apiKey": "string", "executorKey": "string", "projectId": "string", "organizationId": "string", "principalId": "string", "allowedModels": [ "string" ], "updateMask": "string" }, ) data = response.json() ```

Response

```json { "connection": { "id": "string", "name": "string", "provider": "string", "projectId": "string", "organizationId": "string", "principalId": "string", "allowedModels": [ "string" ], "status": "string", "lastError": "string", "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `connectionId` | `string` | No | | | `name` | `string` | No | | | `apiKey` | `string` | No | | | `executorKey` | `string` | No | | | `projectId` | `string` | No | | | `organizationId` | `string` | No | | | `principalId` | `string` | No | | | `allowedModels` | `string[]` | No | | | `updateMask` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `connection` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Upload Session Input Source: https://docs.everstack.ai/api-reference/openai-agents/upload-session-input #### Metadata ```yaml title: "POST Upload Session Input" full: true ```

Upload Session Input

POST /everstack.openai_agents.v1.OpenAIAgentsService/UploadSessionInput

Request

```bash curl -X POST "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/UploadSessionInput" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sessionId":"string","filename":"string","contentType":"string","content":"string","destination":"string"}' ``` ```js const response = await fetch("http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/UploadSessionInput", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "sessionId": "string", "filename": "string", "contentType": "string", "content": "string", "destination": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/everstack.openai_agents.v1.OpenAIAgentsService/UploadSessionInput", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "sessionId": "string", "filename": "string", "contentType": "string", "content": "string", "destination": "string" }, ) data = response.json() ```

Response

```json { "artifact": { "objectId": "string", "filename": "string", "contentType": "string", "sizeBytes": "string", "sha256": "string", "kind": "string", "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `sessionId` | `string` | No | | | `filename` | `string` | No | | | `contentType` | `string` | No | | | `content` | `string` | No | | | `destination` | `string` | No | | ### Responses #### 200 A successful response. | Property | Type | Description | |----------|------|-------------| | `artifact` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Providers Source: https://docs.everstack.ai/api-reference/providers Providers API endpoints #### Metadata ```yaml title: Providers description: Providers API endpoints ``` # Providers API | Method | Endpoint | Description | |--------|----------|-------------| | `POST` | [`/v1/providers/api-keys`](https://docs.everstack.ai/api-reference/providers/add-provider-apikey-adds-a-new-api-key-to-a-provider-configuration) | AddProviderAPIKey adds a new API key to a provider configuration | | `DELETE` | [`/v1/providers/api-keys/{keyId}`](https://docs.everstack.ai/api-reference/providers/delete-provider-apikey-deletes-an-api-key) | DeleteProviderAPIKey deletes an API key | | `PATCH` | [`/v1/providers/api-keys/{keyId}/toggle`](https://docs.everstack.ai/api-reference/providers/toggle-apikey-activates-or-deactivates-an-api-key) | ToggleAPIKey activates or deactivates an API key | | `PATCH` | [`/v1/providers/api-keys/{keyId}/weight`](https://docs.everstack.ai/api-reference/providers/update-apikey-weight-updates-the-weight-of-an-api-key-for-load-balancing) | UpdateAPIKeyWeight updates the weight of an API key for load balancing | | `GET` | [`/v1/providers/api-keys/{providerConfigId}`](https://docs.everstack.ai/api-reference/providers/list-provider-apikeys-lists-all-api-keys-for-a-provider-configuration) | ListProviderAPIKeys lists all API keys for a provider configuration | | `GET` | [`/v1/providers/catalog`](https://docs.everstack.ai/api-reference/providers/list-provider-catalog-returns-all-available-providers-from-the-catalog-defaults) | ListProviderCatalog returns all available providers from the catalog (defaults) | | `GET` | [`/v1/providers/config-yaml`](https://docs.everstack.ai/api-reference/providers/get-config-yaml-gets-the-current-yaml-config-content) | GetConfigYAML gets the current YAML config content | | `POST` | [`/v1/providers/config-yaml`](https://docs.everstack.ai/api-reference/providers/save-config-yaml-saves-yaml-config-and-syncs-to-database) | SaveConfigYAML saves YAML config and syncs to database | | `GET` | [`/v1/providers/configured`](https://docs.everstack.ai/api-reference/providers/list-configured-providers-returns-all-providers-with-their-status-configured-and-unconfigured) | ListConfiguredProviders returns all providers with their status (configured and unconfigured) | | `POST` | [`/v1/providers/reload`](https://docs.everstack.ai/api-reference/providers/reload-config-syncs-yaml-to-db-and-triggers-gateway-reload) | ReloadConfig syncs YAML to DB and triggers gateway reload | | `GET` | [`/v1/providers/sync-status`](https://docs.everstack.ai/api-reference/providers/get-sync-status-checks-if-yaml-and-db-are-in-sync) | GetSyncStatus checks if YAML and DB are in sync | | `GET` | [`/v1/providers/{providerName}`](https://docs.everstack.ai/api-reference/providers/get-provider-returns-detailed-information-about-a-specific-provider) | GetProvider returns detailed information about a specific provider | | `DELETE` | [`/v1/providers/{providerName}`](https://docs.everstack.ai/api-reference/providers/delete-provider-configuration-removes-a-provider-configuration) | DeleteProviderConfiguration removes a provider configuration | | `POST` | [`/v1/providers/{providerName}/configure`](https://docs.everstack.ai/api-reference/providers/configure-provider-creates-or-updates-a-provider-configuration) | ConfigureProvider creates or updates a provider configuration | --- ### POST Add Provider APIKey adds a new API key to a provider configuration Source: https://docs.everstack.ai/api-reference/providers/add-provider-apikey-adds-a-new-api-key-to-a-provider-configuration AddProviderAPIKey adds a new API key to a provider configuration #### Metadata ```yaml title: "POST Add Provider APIKey adds a new API key to a provider configuration" description: "AddProviderAPIKey adds a new API key to a provider configuration" full: true ```

Add Provider APIKey adds a new API key to a provider configuration

POST /v1/providers/api-keys

Request

```bash curl -X POST "http://localhost:8089/v1/providers/api-keys" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"providerConfigId":"string","keyName":"string","apiKey":"string","weight":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/providers/api-keys", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "providerConfigId": "string", "keyName": "string", "apiKey": "string", "weight": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/providers/api-keys", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "providerConfigId": "string", "keyName": "string", "apiKey": "string", "weight": 0 }, ) data = response.json() ```

Response

```json { "key": { "id": "string", "providerConfigId": "string", "keyName": "string", "keyMasked": "string", "weight": 0, "isActive": true, "createdAt": "string", "updatedAt": "string", "source": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `providerConfigId` | `string` | No | | | `keyName` | `string` | No | | | `apiKey` | `string` | No | | | `weight` | `integer` | No | | ### Responses #### 200 API key added successfully | Property | Type | Description | |----------|------|-------------| | `key` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Configure Provider creates or updates a provider configuration Source: https://docs.everstack.ai/api-reference/providers/configure-provider-creates-or-updates-a-provider-configuration ConfigureProvider creates or updates a provider configuration #### Metadata ```yaml title: "POST Configure Provider creates or updates a provider configuration" description: "ConfigureProvider creates or updates a provider configuration" full: true ```

Configure Provider creates or updates a provider configuration

POST {"/v1/providers/{providerName}/configure"}

Request

```bash curl -X POST "http://localhost:8089/v1/providers/{providerName}/configure" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"apiKey":"string","enabledModels":["string"],"customBaseUrl":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/providers/{providerName}/configure", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "apiKey": "string", "enabledModels": [ "string" ], "customBaseUrl": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/providers/{providerName}/configure", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "apiKey": "string", "enabledModels": [ "string" ], "customBaseUrl": "string" }, ) data = response.json() ```

Response

```json { "provider": { "catalog": { "name": "string", "displayName": "string", "baseUrl": "string", "apiVersion": "string", "capabilities": { "chat": true, "completions": true, "embeddings": true, "functionCalling": true, "vision": true, "streaming": true, "fineTuning": true, "assistants": true }, "modelFamilies": [], "models": [], "rateLimits": { "requestsPerMinute": 0, "tokensPerMinute": 0, "concurrentRequests": 0 }, "description": "string", "providerType": "string", "supportsModelDiscovery": true, "discoveryApiEndpoint": "string" }, "configuration": { "id": "string", "providerName": "string", "apiKey": "string", "enabledModels": [ "string" ], "customBaseUrl": "string", "isActive": true, "createdAt": "string", "updatedAt": "string", "syncedToYamlAt": "string", "lastUsedAt": "string" }, "isConfigured": true, "isActive": true, "configuredModelsCount": 0, "availableModelsCount": 0, "catalogStatus": "string", "isFromCatalog": true }, "syncTriggered": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `providerName` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `apiKey` | `string` | No | | | `enabledModels` | `string[]` | No | | | `customBaseUrl` | `string` | No | | | `customSettings` | `object` | No | | ### Responses #### 200 Provider configured successfully | Property | Type | Description | |----------|------|-------------| | `provider` | `object` | | | `syncTriggered` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Provider APIKey deletes an API key Source: https://docs.everstack.ai/api-reference/providers/delete-provider-apikey-deletes-an-api-key DeleteProviderAPIKey deletes an API key #### Metadata ```yaml title: "DELETE Delete Provider APIKey deletes an API key" description: "DeleteProviderAPIKey deletes an API key" full: true ```

Delete Provider APIKey deletes an API key

DELETE {"/v1/providers/api-keys/{keyId}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/providers/api-keys/{keyId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/api-keys/{keyId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/providers/api-keys/{keyId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `keyId` | path | `string` | **Yes** | | ### Responses #### 200 API key deleted successfully | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Provider Configuration removes a provider configuration Source: https://docs.everstack.ai/api-reference/providers/delete-provider-configuration-removes-a-provider-configuration DeleteProviderConfiguration removes a provider configuration #### Metadata ```yaml title: "DELETE Delete Provider Configuration removes a provider configuration" description: "DeleteProviderConfiguration removes a provider configuration" full: true ```

Delete Provider Configuration removes a provider configuration

DELETE {"/v1/providers/{providerName}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/providers/{providerName}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/{providerName}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/providers/{providerName}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string", "syncTriggered": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `providerName` | path | `string` | **Yes** | | ### Responses #### 200 Provider configuration deleted successfully | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | | `syncTriggered` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Config YAML gets the current YAML config content Source: https://docs.everstack.ai/api-reference/providers/get-config-yaml-gets-the-current-yaml-config-content GetConfigYAML gets the current YAML config content #### Metadata ```yaml title: "GET Get Config YAML gets the current YAML config content" description: "GetConfigYAML gets the current YAML config content" full: true ```

Get Config YAML gets the current YAML config content

GET /v1/providers/config-yaml

Request

```bash curl -X GET "http://localhost:8089/v1/providers/config-yaml" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/config-yaml", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/providers/config-yaml", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "yamlContent": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 YAML config content | Property | Type | Description | |----------|------|-------------| | `yamlContent` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Provider returns detailed information about a specific provider Source: https://docs.everstack.ai/api-reference/providers/get-provider-returns-detailed-information-about-a-specific-provider GetProvider returns detailed information about a specific provider #### Metadata ```yaml title: "GET Get Provider returns detailed information about a specific provider" description: "GetProvider returns detailed information about a specific provider" full: true ```

Get Provider returns detailed information about a specific provider

GET {"/v1/providers/{providerName}"}

Request

```bash curl -X GET "http://localhost:8089/v1/providers/{providerName}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/{providerName}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/providers/{providerName}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "provider": { "catalog": { "name": "string", "displayName": "string", "baseUrl": "string", "apiVersion": "string", "capabilities": { "chat": true, "completions": true, "embeddings": true, "functionCalling": true, "vision": true, "streaming": true, "fineTuning": true, "assistants": true }, "modelFamilies": [], "models": [], "rateLimits": { "requestsPerMinute": 0, "tokensPerMinute": 0, "concurrentRequests": 0 }, "description": "string", "providerType": "string", "supportsModelDiscovery": true, "discoveryApiEndpoint": "string" }, "configuration": { "id": "string", "providerName": "string", "apiKey": "string", "enabledModels": [ "string" ], "customBaseUrl": "string", "isActive": true, "createdAt": "string", "updatedAt": "string", "syncedToYamlAt": "string", "lastUsedAt": "string" }, "isConfigured": true, "isActive": true, "configuredModelsCount": 0, "availableModelsCount": 0, "catalogStatus": "string", "isFromCatalog": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `providerName` | path | `string` | **Yes** | | ### Responses #### 200 Provider details with catalog and configuration | Property | Type | Description | |----------|------|-------------| | `provider` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Sync Status checks if YAML and DB are in sync Source: https://docs.everstack.ai/api-reference/providers/get-sync-status-checks-if-yaml-and-db-are-in-sync GetSyncStatus checks if YAML and DB are in sync #### Metadata ```yaml title: "GET Get Sync Status checks if YAML and DB are in sync" description: "GetSyncStatus checks if YAML and DB are in sync" full: true ```

Get Sync Status checks if YAML and DB are in sync

GET /v1/providers/sync-status

Request

```bash curl -X GET "http://localhost:8089/v1/providers/sync-status" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/sync-status", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/providers/sync-status", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "inSync": true, "yamlModTime": "string", "lastSyncTime": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Sync status information | Property | Type | Description | |----------|------|-------------| | `inSync` | `boolean` | | | `yamlModTime` | `string` | | | `lastSyncTime` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Configured Providers returns all providers with their status (configured and unconfigured) Source: https://docs.everstack.ai/api-reference/providers/list-configured-providers-returns-all-providers-with-their-status-configured-and-unconfigured ListConfiguredProviders returns all providers with their status (configured and unconfigured) #### Metadata ```yaml title: "GET List Configured Providers returns all providers with their status (configured and unconfigured)" description: "ListConfiguredProviders returns all providers with their status (configured and unconfigured)" full: true ```

List Configured Providers returns all providers with their status (configured and unconfigured)

GET /v1/providers/configured

Request

```bash curl -X GET "http://localhost:8089/v1/providers/configured" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/configured", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/providers/configured", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "providers": [ { "catalog": { "name": "string", "displayName": "string", "baseUrl": "string", "apiVersion": "string", "modelFamilies": [], "models": [], "description": "string", "providerType": "string", "supportsModelDiscovery": true, "discoveryApiEndpoint": "string" }, "configuration": { "id": "string", "providerName": "string", "apiKey": "string", "enabledModels": [], "customBaseUrl": "string", "isActive": true, "createdAt": "string", "updatedAt": "string", "syncedToYamlAt": "string", "lastUsedAt": "string" }, "isConfigured": true, "isActive": true, "configuredModelsCount": 0, "availableModelsCount": 0, "catalogStatus": "string", "isFromCatalog": true } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `activeOnly` | query | `boolean` | No | Filter to only active providers | ### Responses #### 200 List of all providers with their status | Property | Type | Description | |----------|------|-------------| | `providers` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Provider APIKeys lists all API keys for a provider configuration Source: https://docs.everstack.ai/api-reference/providers/list-provider-apikeys-lists-all-api-keys-for-a-provider-configuration ListProviderAPIKeys lists all API keys for a provider configuration #### Metadata ```yaml title: "GET List Provider APIKeys lists all API keys for a provider configuration" description: "ListProviderAPIKeys lists all API keys for a provider configuration" full: true ```

List Provider APIKeys lists all API keys for a provider configuration

GET {"/v1/providers/api-keys/{providerConfigId}"}

Request

```bash curl -X GET "http://localhost:8089/v1/providers/api-keys/{providerConfigId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/api-keys/{providerConfigId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/providers/api-keys/{providerConfigId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "keys": [ { "id": "string", "providerConfigId": "string", "keyName": "string", "keyMasked": "string", "weight": 0, "isActive": true, "createdAt": "string", "updatedAt": "string", "source": "string" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `providerConfigId` | path | `string` | **Yes** | | ### Responses #### 200 List of API keys | Property | Type | Description | |----------|------|-------------| | `keys` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Provider Catalog returns all available providers from the catalog (defaults) Source: https://docs.everstack.ai/api-reference/providers/list-provider-catalog-returns-all-available-providers-from-the-catalog-defaults ListProviderCatalog returns all available providers from the catalog (defaults) #### Metadata ```yaml title: "GET List Provider Catalog returns all available providers from the catalog (defaults)" description: "ListProviderCatalog returns all available providers from the catalog (defaults)" full: true ```

List Provider Catalog returns all available providers from the catalog (defaults)

GET /v1/providers/catalog

Request

```bash curl -X GET "http://localhost:8089/v1/providers/catalog" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/catalog", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/providers/catalog", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "providers": [ { "name": "string", "displayName": "string", "baseUrl": "string", "apiVersion": "string", "capabilities": { "chat": true, "completions": true, "embeddings": true, "functionCalling": true, "vision": true, "streaming": true, "fineTuning": true, "assistants": true }, "modelFamilies": [], "models": [], "rateLimits": { "requestsPerMinute": 0, "tokensPerMinute": 0, "concurrentRequests": 0 }, "description": "string", "providerType": "string", "supportsModelDiscovery": true, "discoveryApiEndpoint": "string" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 List of all available providers from catalog | Property | Type | Description | |----------|------|-------------| | `providers` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Reload Config syncs YAML to DB and triggers gateway reload Source: https://docs.everstack.ai/api-reference/providers/reload-config-syncs-yaml-to-db-and-triggers-gateway-reload ReloadConfig syncs YAML to DB and triggers gateway reload #### Metadata ```yaml title: "POST Reload Config syncs YAML to DB and triggers gateway reload" description: "ReloadConfig syncs YAML to DB and triggers gateway reload" full: true ```

Reload Config syncs YAML to DB and triggers gateway reload

POST /v1/providers/reload

Request

```bash curl -X POST "http://localhost:8089/v1/providers/reload" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/providers/reload", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/providers/reload", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string", "providersSynced": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 Config reloaded successfully | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | | `providersSynced` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Save Config YAML saves YAML config and syncs to database Source: https://docs.everstack.ai/api-reference/providers/save-config-yaml-saves-yaml-config-and-syncs-to-database SaveConfigYAML saves YAML config and syncs to database #### Metadata ```yaml title: "POST Save Config YAML saves YAML config and syncs to database" description: "SaveConfigYAML saves YAML config and syncs to database" full: true ```

Save Config YAML saves YAML config and syncs to database

POST /v1/providers/config-yaml

Request

```bash curl -X POST "http://localhost:8089/v1/providers/config-yaml" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"yamlContent":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/providers/config-yaml", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "yamlContent": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/providers/config-yaml", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "yamlContent": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `yamlContent` | `string` | No | | ### Responses #### 200 Config saved successfully | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Toggle APIKey activates or deactivates an API key Source: https://docs.everstack.ai/api-reference/providers/toggle-apikey-activates-or-deactivates-an-api-key ToggleAPIKey activates or deactivates an API key #### Metadata ```yaml title: "PATCH Toggle APIKey activates or deactivates an API key" description: "ToggleAPIKey activates or deactivates an API key" full: true ```

Toggle APIKey activates or deactivates an API key

PATCH {"/v1/providers/api-keys/{keyId}/toggle"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/providers/api-keys/{keyId}/toggle" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"isActive":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/providers/api-keys/{keyId}/toggle", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "isActive": true }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/providers/api-keys/{keyId}/toggle", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "isActive": true }, ) data = response.json() ```

Response

```json { "key": { "id": "string", "providerConfigId": "string", "keyName": "string", "keyMasked": "string", "weight": 0, "isActive": true, "createdAt": "string", "updatedAt": "string", "source": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `keyId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `isActive` | `boolean` | No | | ### Responses #### 200 API key toggled successfully | Property | Type | Description | |----------|------|-------------| | `key` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update APIKey Weight updates the weight of an API key for load balancing Source: https://docs.everstack.ai/api-reference/providers/update-apikey-weight-updates-the-weight-of-an-api-key-for-load-balancing UpdateAPIKeyWeight updates the weight of an API key for load balancing #### Metadata ```yaml title: "PATCH Update APIKey Weight updates the weight of an API key for load balancing" description: "UpdateAPIKeyWeight updates the weight of an API key for load balancing" full: true ```

Update APIKey Weight updates the weight of an API key for load balancing

PATCH {"/v1/providers/api-keys/{keyId}/weight"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/providers/api-keys/{keyId}/weight" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"weight":0}' ``` ```js const response = await fetch("http://localhost:8089/v1/providers/api-keys/{keyId}/weight", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "weight": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/providers/api-keys/{keyId}/weight", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "weight": 0 }, ) data = response.json() ```

Response

```json { "key": { "id": "string", "providerConfigId": "string", "keyName": "string", "keyMasked": "string", "weight": 0, "isActive": true, "createdAt": "string", "updatedAt": "string", "source": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `keyId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `weight` | `integer` | No | | ### Responses #### 200 API key weight updated successfully | Property | Type | Description | |----------|------|-------------| | `key` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Sandbox Source: https://docs.everstack.ai/api-reference/sandbox Sandbox APIs for isolated runtimes, lifecycle, networking, automation, and observability. #### Metadata ```yaml title: Sandbox description: Sandbox APIs for isolated runtimes, lifecycle, networking, automation, and observability. ``` # Sandbox API Programmatic endpoints for treating sandboxes as isolated runtimes you can create, inspect, automate, expose, and destroy. Sandboxes are not only for agents. The same API can be used to: - run isolated code execution - host temporary preview apps and expose them at the edge - create scheduled workers with crons - create HTTP-triggered workers with webhooks - inspect logs, metrics, events, and execution history - manage shell, files, ports, SSH access, and lifecycle ## Common workflows ### Create an isolated runtime Start with [`POST /v1/sandbox`](https://docs.everstack.ai/api-reference/sandbox/sandbox-management) to create a sandbox from a template or image, then use shell, files, commands, or code execution APIs inside it. ### Host a temporary service Create a sandbox, start a web process, detect or expose a listening port, and use the generated URL for previews, demos, or QA. ### Run recurring or event-driven jobs Use cron and webhook endpoints to turn a sandbox into a scheduled or HTTP-triggered worker. ### Observe and debug Use stats, events, and execution history to understand what happened inside the runtime. --- ## Lifecycle | Method | Endpoint | Description | | -------- | -------- | ----------- | | `POST` | `/v1/sandbox` | Create Sandbox | | `GET` | `/v1/sandbox/instances` | List Instances | | `GET` | `/v1/sandbox/instances/{sandboxId}` | Get Instance | | `PATCH` | `/v1/sandbox/instances/{sandboxId}` | Resize (CPU/memory) | | `GET` | `/v1/sandbox/overview` | Overview | | `POST` | `/v1/sandbox/recreate` | Recreate | | `POST` | `/v1/sandbox/{sandboxId}/stop` | Stop | | `POST` | `/v1/sandbox/{sandboxId}/revive` | Revive from sleep | | `POST` | `/v1/sandbox/instances/{sandboxId}/restore` | Restore from archive | | `POST` | `/v1/sandbox/{sandboxId}/terminate` | Terminate | | `DELETE` | `/v1/sandbox/{sessionId}` | Destroy | | `POST` | `/v1/sandbox/{sandboxId}/renew-expiration` | Renew Expiration | ### Lifecycle states Sandboxes progress through these `lifecycle_state` values: | State | Description | |-------|-------------| | `pending` | Creation queued | | `creating` | VM being provisioned | | `running` | Active and reachable | | `stopping` | Shutting down | | `sleeping` | VM stopped, workspace preserved | | `reviving` | Waking from sleep | | `archiving` | Compressing to archive storage | | `archived` | VM gone, workspace in cold storage. Restore with `/restore`. | | `terminating` | Being permanently deleted | | `terminated` | Permanently deleted | | `failed` | Unrecoverable error | ### Create sandbox -- new fields The following fields were added to `POST /v1/sandbox` in the Sandbox Overhaul: | Field | Type | Description | |-------|------|-------------| | `labels` | `object` | Key-value metadata for filtering (`{ "agent_id": "agt_123" }`). Filterable via `label_filter` on List. | | `autoArchiveAfterDays` | `integer` | Days before sleeping sandbox is archived. `0` = disabled. Default: 7. | | `autoDeleteAfterDays` | `integer` | Days before sandbox is deleted. `-1` = never (default). `0` = on stop. | | `networkBlockAll` | `boolean` | Block all outbound egress. Always permits loopback, link-local, DNS. | | `networkAllowCidrs` | `string[]` | CIDR blocks to permit when `networkBlockAll` is true (max 10). | | `computerUse` | `boolean` | Start Xvfb + XFCE4 desktop at boot for GUI automation. | | `tailscaleAuthKey` | `string` | Join sandbox to a Tailnet at boot via this ephemeral auth key. | | `mounts` | `StorageMount[]` | FUSE-mount external S3/R2/GCS/Azure storage at boot. | | `snapshotId` | `string` | Use a named snapshot's image instead of `image`. | --- ## Templates | Method | Endpoint | Description | | ------ | -------- | ----------- | | `GET` | `/v1/sandbox/templates` | List Templates | | `GET` | `/v1/sandbox/templates/{templateId}` | Get Template | --- ## Snapshots Named, reusable environment templates. Create from a public image or an existing sandbox. Reference via `snapshotId` when creating sandboxes. > **Note:** Creating a snapshot from an existing sandbox currently captures the base image reference. Full filesystem snapshots (isolated runtime-level) are planned for Phase 2 of snapshot support. | Method | Endpoint | Description | | -------- | -------- | ----------- | | `POST` | `/v1/snapshots` | Create snapshot `{ name, image? }` or `{ name, from_sandbox_id }` | | `GET` | `/v1/snapshots` | List snapshots | | `GET` | `/v1/snapshots/{snapshotId}` | Get snapshot | | `DELETE` | `/v1/snapshots/{snapshotId}` | Delete snapshot | **Snapshot states:** `pending` → `active` | `error`. Auto-deactivated after 2 weeks of no use; reactivated on next use. --- ## Volumes Persistent FUSE-backed storage independent of sandbox lifecycle. Multiple sandboxes can mount the same volume simultaneously. | Method | Endpoint | Description | | -------- | -------- | ----------- | | `POST` | `/v1/volumes` | Create volume `{ name }` | | `GET` | `/v1/volumes` | List volumes | | `DELETE` | `/v1/volumes/{volumeId}` | Delete volume | Attach volumes at sandbox creation via the `mounts` field with `type: "everstack-volume"`. --- ## Command Execution | Method | Endpoint | Description | | -------- | -------- | ----------- | | `GET` | `/v1/sandbox/{sandboxId}/ping` | Ping | | `POST` | `/v1/sandbox/{sandboxId}/command` | Execute Command (SSE) | | `DELETE` | `/v1/sandbox/{sandboxId}/command` | Interrupt Command | | `GET` | `/v1/sandbox/{sandboxId}/command/status/{cmdId}` | Command Status | | `GET` | `/v1/sandbox/{sandboxId}/command/{cmdId}/logs` | Command Logs | --- ## Code Execution | Method | Endpoint | Description | | -------- | -------- | ----------- | | `POST` | `/v1/sandbox/{sandboxId}/code/context` | Create Code Context | | `GET` | `/v1/sandbox/{sandboxId}/code/contexts` | List Code Contexts | | `GET` | `/v1/sandbox/{sandboxId}/code/contexts/{contextId}` | Get Code Context | | `DELETE` | `/v1/sandbox/{sandboxId}/code/contexts/{contextId}` | Delete Code Context | | `DELETE` | `/v1/sandbox/{sandboxId}/code/contexts` | Delete by Language | | `POST` | `/v1/sandbox/{sandboxId}/code` | Execute Code (SSE) | | `DELETE` | `/v1/sandbox/{sandboxId}/code` | Interrupt Code | --- ## Filesystem Standard file operations: | Method | Endpoint | Description | | -------- | -------- | ----------- | | `GET` | `/v1/sandbox/{sandboxId}/files/info` | File Info | | `DELETE` | `/v1/sandbox/{sandboxId}/files` | Delete Files | | `POST` | `/v1/sandbox/{sandboxId}/files/permissions` | File Permissions | | `POST` | `/v1/sandbox/{sandboxId}/files/mv` | Move Files | | `POST` | `/v1/sandbox/{sandboxId}/files/replace` | Replace in File | | `POST` | `/v1/sandbox/{sandboxId}/files/upload` | Upload File | | `GET` | `/v1/sandbox/{sandboxId}/files/download` | Download File | | `POST` | `/v1/sandbox/{sandboxId}/directories` | Create Directories | | `DELETE` | `/v1/sandbox/{sandboxId}/directories` | Delete Directories | Bulk and search operations (added in Sandbox Overhaul): | Method | Endpoint | Description | | -------- | -------- | ----------- | | `POST` | `/v1/sandbox/{sandboxId}/files/bulk-upload` | Upload multiple files (multipart, 256MB limit) | | `GET` | `/v1/sandbox/{sandboxId}/files/content-search` | Search file contents (`?pattern=&path=`) | | `POST` | `/v1/sandbox/{sandboxId}/files/global-replace` | Find-and-replace across files (`{ path, pattern, replacement, dry_run }`) | --- ## Metrics & Observability | Method | Endpoint | Description | | ------ | -------- | ----------- | | `GET` | `/v1/sandbox/{sandboxId}/metrics` | Point-in-time stats | | `GET` | `/v1/sandbox/{sandboxId}/metrics/watch` | Stream stats (SSE, every 2s) | | `GET` | `/v1/sandbox/{sandboxId}/metrics/history` | Time-series history (30s resolution, 2h retention) | | `GET` | `/v1/sandbox/metrics/batch` | Latest metrics for multiple sandboxes (`?ids=id1,id2`) | | `GET` | `/v1/sandbox/{sandboxId}/events` | Lifecycle events | | `GET` | `/v1/sandbox/{sandboxId}/executions` | Execution history | ### OTLP Export Forward sandbox metrics to your own observability backend (New Relic, Grafana Cloud, Datadog, Honeycomb). > **Preview:** Metric forwarding to the OTLP endpoint is in development. The config API is live; metrics will be forwarded in a follow-up release. | Method | Endpoint | Description | | ------ | -------- | ----------- | | `GET` | `/v1/settings/otlp` | Get OTLP config | | `PUT` | `/v1/settings/otlp` | Set OTLP config `{ endpoint, headers, extra_labels, enabled }` | | `POST` | `/v1/settings/otlp/test` | Send test span to configured endpoint | --- ## Ports & Preview URLs | Method | Endpoint | Description | | -------- | -------- | ----------- | | `GET` | `/v1/sandbox/{sessionId}/ports` | List Exposed Ports | | `POST` | `/v1/sandbox/{sessionId}/ports` | Expose Port | | `GET` | `/v1/sandbox/{sessionId}/ports/detect` | Detect Listening Ports | | `DELETE` | `/v1/sandbox/{sessionId}/ports/{port}` | Unexpose Port | | `POST` | `/v1/sandbox/instances/{sandboxId}/preview-url` | Generate signed preview URL | ### Signed preview URLs `POST /v1/sandbox/instances/{sandboxId}/preview-url` generates an HMAC-signed URL that embeds auth in the URL itself -- no custom headers required. Useful for shareable links, iframe embeds, and link sharing. ```json { "port": 3000, "expires_in_seconds": 3600 } ``` Response: ```json { "url": "https://...", "expires_at": "2026-06-01T13:00:00Z" } ``` --- ## SSH | Method | Endpoint | Description | | -------- | -------- | ----------- | | `POST` | `/v1/sandbox/{sandboxId}/ssh/access` | Grant SSH Access | | `DELETE` | `/v1/sandbox/{sandboxId}/ssh/access/{userId}` | Revoke SSH Access | | `GET` | `/v1/sandbox/{sandboxId}/ssh/info` | SSH Info | | `POST` | `/v1/sandbox/instances/{sandboxId}/ssh-token` | Generate temporary SSH token | | `GET` | `/v1/sandbox/instances/{sandboxId}/ssh-tokens` | List active SSH tokens | | `DELETE` | `/v1/sandbox/instances/{sandboxId}/ssh-tokens/{tokenId}` | Revoke SSH token | ### SSH tokens SSH tokens let agents and users SSH into sandboxes without key distribution. Connect via: ``` ssh @ssh.everstack.ai ``` Tokens are temporary (default 60 minutes, max 24 hours) and can be revoked before expiry. > **Note:** The SSH proxy token validation is in development. Token generation and revocation APIs are live; proxy-level enforcement ships in a follow-up. --- ## Language Server Protocol (LSP) Get structured code intelligence inside sandboxes without parsing raw terminal output. Requires the relevant tools installed in the sandbox image (`pylint`/`pylsp` for Python, `tsc` for TypeScript). The `everstack-python` and `everstack-node` catalog images include these by default. | Method | Endpoint | Description | | ------ | -------- | ----------- | | `GET` | `/v1/sandbox/{sandboxId}/lsp` | LSP capability info | | `GET` | `/v1/sandbox/{sandboxId}/lsp/{lang}/diagnostics?path=` | Errors and warnings | | `GET` | `/v1/sandbox/{sandboxId}/lsp/{lang}/symbols?path=` | Functions, classes, variables in a file | | `GET` | `/v1/sandbox/{sandboxId}/lsp/{lang}/workspace-symbols?query=` | Cross-file symbol search | **Supported languages:** `python`, `typescript` **Returns:** Structured JSON with line numbers and severity -- not raw terminal output. --- ## Computer Use Full desktop automation for vision-capable agents. Requires `computer_use: true` on sandbox creation, which launches Xvfb + XFCE4 at boot. Install `xdotool`, `scrot`/ImageMagick, and `ffmpeg` in your sandbox image for full functionality. ### Screenshot | Method | Endpoint | Description | | ------ | -------- | ----------- | | `GET` | `/v1/sandbox/{sandboxId}/computer` | Capability info | | `POST` | `/v1/sandbox/{sandboxId}/computer/screenshot` | Take screenshot (returns image bytes) | | `GET` | `/v1/sandbox/{sandboxId}/computer/displays` | List displays | | `GET` | `/v1/sandbox/{sandboxId}/computer/windows` | List open windows | ```json { "format": "jpeg", "quality": 85 } ``` Response: `Content-Type: image/jpeg` binary body. ### Mouse & keyboard | Method | Endpoint | Description | | ------ | -------- | ----------- | | `POST` | `/v1/sandbox/{sandboxId}/computer/mouse/click` | Click `{ x, y, button, double }` | | `POST` | `/v1/sandbox/{sandboxId}/computer/mouse/move` | Move `{ x, y }` | | `POST` | `/v1/sandbox/{sandboxId}/computer/mouse/scroll` | Scroll `{ x, y, direction, amount }` | | `POST` | `/v1/sandbox/{sandboxId}/computer/mouse/drag` | Drag `{ from: {x,y}, to: {x,y} }` | | `POST` | `/v1/sandbox/{sandboxId}/computer/keyboard/type` | Type text `{ text }` | | `POST` | `/v1/sandbox/{sandboxId}/computer/keyboard/key` | Key combo `{ key }` (e.g. `"ctrl+c"`) | ### Screen recording | Method | Endpoint | Description | | -------- | -------- | ----------- | | `POST` | `/v1/sandbox/{sandboxId}/computer/recording/start` | Start recording `{ label, fps }` | | `POST` | `/v1/sandbox/{sandboxId}/computer/recording/stop` | Stop recording `{ recording_id }` | | `GET` | `/v1/sandbox/{sandboxId}/computer/recordings` | List recordings | | `GET` | `/v1/sandbox/{sandboxId}/computer/recordings/{id}/download` | Download MP4 | | `DELETE` | `/v1/sandbox/{sandboxId}/computer/recordings/{id}` | Delete recording | ### VNC access When `computer_use: true`, deploy `x11vnc` and `NoVNC` in your sandbox image. NoVNC is then accessible on port 6080 via the preview URL infrastructure: ``` https://6080-{token}.preview.everstack.ai ``` --- ## Lifecycle Webhooks Outgoing webhooks that notify your system when sandbox state changes. > These are **outgoing** lifecycle events -- distinct from the incoming trigger webhooks (`/v1/sandbox/webhooks`) used to invoke sandboxes. | Method | Endpoint | Description | | -------- | -------- | ----------- | | `GET` | `/v1/sandbox-webhooks` | List endpoints | | `POST` | `/v1/sandbox-webhooks` | Create endpoint `{ url, events, secret }` | | `DELETE` | `/v1/sandbox-webhooks/{id}` | Remove endpoint | | `GET` | `/v1/sandbox-webhooks/{id}/deliveries` | Delivery log (last 100) | | `POST` | `/v1/sandbox-webhooks/{id}/test` | Send test payload | **Events:** `sandbox.started`, `sandbox.stopped`, `sandbox.archived`, `sandbox.deleted`, `sandbox.error` All payloads are HMAC-SHA256 signed (`X-Everstack-Signature: sha256=`). 3 retries with 0s/5s/30s backoff. --- ## Declarative Image Builder Build sandbox environments from a spec in code, without maintaining a Docker registry. > **Preview:** Phase 1 maps specs to the nearest catalog image. Custom package installation via BuildKit build is in Phase 2. | Method | Endpoint | Description | | ------ | -------- | ----------- | | `POST` | `/v1/images/build` | Build from spec (24h cache) | ```json { "spec": { "base": "debian:bookworm-slim", "apt": ["python3", "nodejs"], "pip": ["numpy", "pandas"], "npm": ["typescript"], "run": ["pip install -r requirements.txt"], "env": { "PYTHONPATH": "/app" }, "workdir": "/app" } } ``` Same spec within 24h returns the cached result instantly (`"cached": true`). --- ## MCP Setup Get the MCP server config block for your AI client with one call. | Method | Endpoint | Description | | ------ | -------- | ----------- | | `GET` | `/v1/mcp/config?client=claude` | Config block for Claude / Cursor / Windsurf | Supported clients: `claude`, `cursor`, `windsurf`. --- ## Crons | Method | Endpoint | Description | | -------- | -------- | ----------- | | `GET` | `/v1/sandbox/crons` | List Crons | | `POST` | `/v1/sandbox/crons` | Create Cron | | `PATCH` | `/v1/sandbox/crons/{id}` | Update Cron | | `DELETE` | `/v1/sandbox/crons/{id}` | Delete Cron | ## Incoming Webhooks | Method | Endpoint | Description | | -------- | -------- | ----------- | | `GET` | `/v1/sandbox/webhooks` | List Webhooks | | `POST` | `/v1/sandbox/webhooks` | Create Webhook | | `DELETE` | `/v1/sandbox/webhooks/{id}` | Delete Webhook | ## Triggers | Method | Endpoint | Description | | ------ | -------- | ----------- | | `GET` | `/v1/sandbox/triggers` | Shared History | --- ### POST Crons Source: https://docs.everstack.ai/api-reference/sandbox/crons Crons #### Metadata ```yaml title: "POST Crons" description: "Crons" full: true ```

Crons

POST /v1/sandbox/crons

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/crons" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","sandboxId":"string","sessionId":"string","name":"string","schedule":"string","command":"string","workDir":"string","timeoutSeconds":0,"autoRecreate":true}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/crons", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "autoRecreate": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox/crons", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "autoRecreate": true }, ) data = response.json() ```

Response

```json { "cron": { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "lastRunAt": "2024-01-01T00:00:00Z", "nextRunAt": "2024-01-01T00:00:00Z", "runCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `sandboxId` | `string` | No | | | `sessionId` | `string` | No | | | `name` | `string` | No | | | `schedule` | `string` | No | | | `command` | `string` | No | | | `workDir` | `string` | No | | | `timeoutSeconds` | `integer` | No | | | `autoRecreate` | `boolean` | No | | | `sandboxConfig` | `object` | No | | ### Responses #### 200 Create a sandbox cron schedule | Property | Type | Description | |----------|------|-------------| | `cron` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Cron Source: https://docs.everstack.ai/api-reference/sandbox/delete-cron #### Metadata ```yaml title: "DELETE Delete Cron" full: true ```

Delete Cron

DELETE {"/v1/sandbox/crons/{id}"}

Request

```bash curl -X DELETE "https://{instance}.{region}.everstack.ai/v1/sandbox/crons/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/crons/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "https://{instance}.{region}.everstack.ai/v1/sandbox/crons/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete a sandbox cron schedule | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Webhook Source: https://docs.everstack.ai/api-reference/sandbox/delete-webhook #### Metadata ```yaml title: "DELETE Delete Webhook" full: true ```

Delete Webhook

DELETE {"/v1/sandbox/webhooks/{id}"}

Request

```bash curl -X DELETE "https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete a sandbox webhook | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Destroy Source: https://docs.everstack.ai/api-reference/sandbox/destroy-sandbox #### Metadata ```yaml title: "DELETE Destroy" full: true ```

Destroy Sandbox

DELETE {"/v1/sandbox/{sessionId}"}

Request

```bash curl -X DELETE "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Destroy a sandbox instance | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Detect Ports Source: https://docs.everstack.ai/api-reference/sandbox/detect-listening-ports #### Metadata ```yaml title: "GET Detect Ports" full: true ```

Detect Listening Ports

GET {"/v1/sandbox/{sessionId}/ports/detect"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports/detect" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports/detect", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports/detect", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "ports": [ { "port": 0, "protocol": "string", "address": "string", "pid": 0, "process": "string", "isExposed": true } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Auto-detect listening ports inside a sandbox | Property | Type | Description | |----------|------|-------------| | `ports` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Instance Source: https://docs.everstack.ai/api-reference/sandbox/get-sandbox-instance #### Metadata ```yaml title: "GET Get Instance" full: true ```

Get Sandbox Instance

GET {"/v1/sandbox/instances/{sandboxId}"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/instances/{sandboxId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/instances/{sandboxId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/instances/{sandboxId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "instance": { "id": "string", "sessionId": "string", "tenantId": "string", "backend": "string", "containerId": "string", "image": "string", "status": "SANDBOX_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "destroyReason": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitCommitSha": "string", "lifecycleState": "string", "revivableUntil": "2024-01-01T00:00:00Z", "stoppedAt": "2024-01-01T00:00:00Z", "sshEnabled": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get a sandbox instance by ID | Property | Type | Description | |----------|------|-------------| | `instance` | `object` | SandboxInstance represents a running sandbox environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Overview Source: https://docs.everstack.ai/api-reference/sandbox/get-sandbox-overview #### Metadata ```yaml title: "GET Get Overview" full: true ```

Get Sandbox Overview

GET /v1/sandbox/overview

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/overview" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/overview", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/overview", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "overview": { "totalInstances": 0, "runningInstances": 0, "maxSandboxes": 0, "backend": "string", "maxCpu": 0, "maxMemoryMb": "string", "healthy": true, "aggregateCpuPercent": 0, "aggregateMemoryUsage": "string", "aggregateMemoryLimit": "string", "aggregateMemoryPercent": 0, "aggregateNetworkRxBytes": "string", "aggregateNetworkTxBytes": "string", "aggregateBlockRead": "string", "aggregateBlockWrite": "string", "aggregatePids": 0, "totalExecutions": 0, "avgExecutionDurationMs": 0 } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | ### Responses #### 200 Get sandbox subsystem overview | Property | Type | Description | |----------|------|-------------| | `overview` | `object` | SandboxOverview provides a summary of the sandbox subsystem. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get SSH Info Source: https://docs.everstack.ai/api-reference/sandbox/get-sandbox-sshinfo #### Metadata ```yaml title: "GET Get SSH Info" full: true ```

Get Sandbox SSHInfo

GET {"/v1/sandbox/{sandboxId}/ssh/info"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/info" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/info", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/info", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "enabled": true, "connectionString": "string", "host": "string", "port": 0, "hostFingerprint": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get SSH connection info for a sandbox | Property | Type | Description | |----------|------|-------------| | `enabled` | `boolean` | | | `connectionString` | `string` | | | `host` | `string` | | | `port` | `integer` | | | `hostFingerprint` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Stats Source: https://docs.everstack.ai/api-reference/sandbox/get-sandbox-stats #### Metadata ```yaml title: "GET Get Stats" full: true ```

Get Sandbox Stats

GET {"/v1/sandbox/{sessionId}/stats"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/stats" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/stats", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/stats", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "stats": { "cpuPercent": 0, "memoryUsage": "string", "memoryLimit": "string", "memoryPercent": 0, "networkRxBytes": "string", "networkTxBytes": "string", "blockRead": "string", "blockWrite": "string", "pids": 0, "timestamp": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get live stats for a sandbox | Property | Type | Description | |----------|------|-------------| | `stats` | `object` | SandboxStats holds a point-in-time resource usage snapshot. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Sandbox Template Source: https://docs.everstack.ai/api-reference/sandbox/get-sandbox-template #### Metadata ```yaml title: "GET Get Sandbox Template" full: true ```

Get Sandbox Template

GET {"/v1/sandbox/templates/{templateId}"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/templates/{templateId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/templates/{templateId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/templates/{templateId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "template": { "id": "string", "name": "string", "slug": "string", "description": "string", "icon": "string", "iconColor": "string", "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "workDir": "string", "tags": [ "string" ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `templateId` | path | `string` | **Yes** | ID or slug | ### Responses #### 200 Get a sandbox template by ID or slug | Property | Type | Description | |----------|------|-------------| | `template` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Grant SSH Access Source: https://docs.everstack.ai/api-reference/sandbox/grant-sandbox-sshaccess #### Metadata ```yaml title: "POST Grant SSH Access" full: true ```

Grant Sandbox SSHAccess

POST {"/v1/sandbox/{sandboxId}/ssh/access"}

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/access" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","userId":"string","grantedBy":"string"}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/access", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "userId": "string", "grantedBy": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/access", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "userId": "string", "grantedBy": "string" }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `userId` | `string` | No | | | `grantedBy` | `string` | No | | ### Responses #### 200 Grant a user SSH access to a sandbox | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Declarative Image Builder Source: https://docs.everstack.ai/api-reference/sandbox/image-builder Build sandbox environments from a spec without a Docker registry. #### Metadata ```yaml title: Declarative Image Builder description: Build sandbox environments from a spec without a Docker registry. ``` # Declarative Image Builder Build sandbox environments from a code spec. No Docker registry needed. Repeated calls with the same spec within 24 hours return the cached result instantly. > **Preview:** Phase 1 maps specs to the nearest catalog image. Custom package installation via Kaniko build is in Phase 2. ## Build `POST /v1/images/build` ```json { "spec": { "base": "debian:bookworm-slim", "apt": ["python3", "git", "ripgrep"], "pip": ["numpy", "pandas", "fastapi", "uvicorn"], "npm": ["typescript", "@types/node"], "run": ["pip install -r requirements.txt"], "env": { "PYTHONPATH": "/app" }, "workdir": "/app", "user": "sandbox" } } ``` **Spec fields:** | Field | Type | Description | |-------|------|-------------| | `base` | string | Base image (default: `debian:bookworm-slim`) | | `apt` | string[] | APT packages to install | | `pip` | string[] | Python packages to install | | `npm` | string[] | Node packages to install globally | | `run` | string[] | Shell commands to run during build | | `env` | object | Environment variables | | `workdir` | string | Working directory | | `user` | string | User to run as | **Response:** ```json { "image_id": "img_abc123", "image_ref": "ghcr.io/everstacklabs/sandbox:python", "cached": false, "build_ms": 0, "state": "ready", "expires_at": "2026-06-02T10:00:00Z", "note": "Phase 1: spec matched to catalog image." } ``` ## Caching The spec is SHA-256 hashed. The same spec within 24 hours returns `"cached": true` with zero build time. After 24 hours, the next call rebuilds. ## Use the image ```json POST /v1/sandbox { "image": "ghcr.io/everstacklabs/sandbox:python" } ``` Use `image_ref` from the build response as the `image` field on `CreateSandbox`. --- ### GET List Crons Source: https://docs.everstack.ai/api-reference/sandbox/list-crons #### Metadata ```yaml title: "GET List Crons" full: true ```

List Crons

GET /v1/sandbox/crons

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/crons" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/crons", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/crons", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "crons": [ { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "lastRunAt": "2024-01-01T00:00:00Z", "nextRunAt": "2024-01-01T00:00:00Z", "runCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `sandboxId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List sandbox cron schedules | Property | Type | Description | |----------|------|-------------| | `crons` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Ports Source: https://docs.everstack.ai/api-reference/sandbox/list-exposed-ports #### Metadata ```yaml title: "GET List Ports" full: true ```

List Exposed Ports

GET {"/v1/sandbox/{sessionId}/ports"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "ports": [ { "id": "string", "sandboxId": "string", "port": 0, "protocol": "string", "subdomain": "string", "url": "string", "status": "string", "createdAt": "2024-01-01T00:00:00Z" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 List exposed ports for a sandbox | Property | Type | Description | |----------|------|-------------| | `ports` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Executions Source: https://docs.everstack.ai/api-reference/sandbox/list-sandbox-executions #### Metadata ```yaml title: "GET List Executions" full: true ```

List Sandbox Executions

GET {"/v1/sandbox/{sandboxId}/executions"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/executions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/executions", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/executions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "executions": [ { "id": "string", "sandboxId": "string", "sessionId": "string", "toolName": "string", "toolCallId": "string", "language": "string", "command": "string", "exitCode": 0, "stdout": "string", "stderr": "string", "durationMs": "string", "timedOut": true, "createdAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List executions for a sandbox | Property | Type | Description | |----------|------|-------------| | `executions` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Instances Source: https://docs.everstack.ai/api-reference/sandbox/list-sandbox-instances #### Metadata ```yaml title: "GET List Instances" full: true ```

List Sandbox Instances

GET /v1/sandbox/instances

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/instances" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/instances", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/instances", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "instances": [ { "id": "string", "sessionId": "string", "tenantId": "string", "backend": "string", "containerId": "string", "image": "string", "status": "SANDBOX_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "destroyReason": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitCommitSha": "string", "lifecycleState": "string", "revivableUntil": "2024-01-01T00:00:00Z", "stoppedAt": "2024-01-01T00:00:00Z", "sshEnabled": true } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `status` | query | `"SANDBOX_STATUS_UNSPECIFIED" \| "SANDBOX_STATUS_PENDING" \| "SANDBOX_STATUS_RUNNING" \| "SANDBOX_STATUS_STOPPED" \| "SANDBOX_STATUS_FAILED"` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List sandbox instances | Property | Type | Description | |----------|------|-------------| | `instances` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Webhooks Source: https://docs.everstack.ai/api-reference/sandbox/list-webhooks #### Metadata ```yaml title: "GET List Webhooks" full: true ```

List Webhooks

GET /v1/sandbox/webhooks

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "webhooks": [ { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "path": "string", "url": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "rateLimitRpm": 0, "lastTriggeredAt": "2024-01-01T00:00:00Z", "triggerCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `sandboxId` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List sandbox webhooks | Property | Type | Description | |----------|------|-------------| | `webhooks` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Expose Port Source: https://docs.everstack.ai/api-reference/sandbox/port-exposure Port Exposure #### Metadata ```yaml title: "POST Expose Port" description: "Port Exposure" full: true ```

Port Exposure

POST {"/v1/sandbox/{sessionId}/ports"}

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","port":0,"protocol":"string"}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "port": 0, "protocol": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "port": 0, "protocol": "string" }, ) data = response.json() ```

Response

```json { "mapping": { "id": "string", "sandboxId": "string", "port": 0, "protocol": "string", "subdomain": "string", "url": "string", "status": "string", "createdAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `port` | `integer` | No | | | `protocol` | `string` | No | | ### Responses #### 200 Expose a sandbox port via subdomain | Property | Type | Description | |----------|------|-------------| | `mapping` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Recreate Source: https://docs.everstack.ai/api-reference/sandbox/recreate-sandbox #### Metadata ```yaml title: "POST Recreate" full: true ```

Recreate Sandbox

POST /v1/sandbox/recreate

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/recreate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","sandboxId":"string","sessionId":"string"}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/recreate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "sandboxId": "string", "sessionId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox/recreate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "sandboxId": "string", "sessionId": "string" }, ) data = response.json() ```

Response

```json { "id": "string", "sessionId": "string", "tenantId": "string", "containerId": "string", "status": "string", "backend": "string", "image": "string", "createdAt": "string", "expiresAt": "string", "name": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `sandboxId` | `string` | No | | | `sessionId` | `string` | No | | ### Responses #### 200 Recreate a sandbox from an expired instance's config | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `sessionId` | `string` | | | `tenantId` | `string` | | | `containerId` | `string` | | | `status` | `string` | | | `backend` | `string` | | | `image` | `string` | | | `createdAt` | `string` | | | `expiresAt` | `string` | | | `name` | `string` | Friendly name for the sandbox (if set). | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Revive Source: https://docs.everstack.ai/api-reference/sandbox/revive-sandbox #### Metadata ```yaml title: "POST Revive" full: true ```

Revive Sandbox

POST {"/v1/sandbox/{sandboxId}/revive"}

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/revive" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/revive", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/revive", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "instance": { "id": "string", "sessionId": "string", "tenantId": "string", "backend": "string", "containerId": "string", "image": "string", "status": "SANDBOX_STATUS_UNSPECIFIED", "createdAt": "2024-01-01T00:00:00Z", "expiresAt": "2024-01-01T00:00:00Z", "destroyReason": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitCommitSha": "string", "lifecycleState": "string", "revivableUntil": "2024-01-01T00:00:00Z", "stoppedAt": "2024-01-01T00:00:00Z", "sshEnabled": true } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Revive a stopped sandbox from its workspace snapshot | Property | Type | Description | |----------|------|-------------| | `instance` | `object` | SandboxInstance represents a running sandbox environment. | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Revoke SSH Access Source: https://docs.everstack.ai/api-reference/sandbox/revoke-sandbox-sshaccess #### Metadata ```yaml title: "DELETE Revoke SSH Access" full: true ```

Revoke Sandbox SSHAccess

DELETE {"/v1/sandbox/{sandboxId}/ssh/access/{userId}"}

Request

```bash curl -X DELETE "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/access/{userId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/access/{userId}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/ssh/access/{userId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `userId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Revoke SSH access from a sandbox | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Bulk Upload Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-bulk-upload Upload multiple files to a sandbox in a single request. #### Metadata ```yaml title: Bulk Upload description: Upload multiple files to a sandbox in a single request. ``` # Bulk Upload Upload multiple files to a sandbox in one multipart request. Maximum 256MB total. `POST /v1/sandbox/{sandboxId}/files/bulk-upload` ## Request `Content-Type: multipart/form-data` | Field | Description | |-------|-------------| | `base_dir` | Base directory for files without an explicit path (default: `/repo`) | | `{fieldName}` | File content for each file | | `path_{fieldName}` | Destination path for the corresponding field (optional) | ## Example ```bash curl -X POST "https://.../v1/sandbox/{id}/files/bulk-upload" \ -H "Authorization: Bearer $KEY" \ -F "base_dir=/workspace" \ -F "app=@./src/app.py" \ -F "utils=@./src/utils.py" \ -F "path_utils=/workspace/lib/utils.py" ``` `app` → `/workspace/app.py` (using `base_dir`) `utils` → `/workspace/lib/utils.py` (using `path_utils`) ## Response ```json { "uploaded": ["/workspace/app.py", "/workspace/lib/utils.py"], "failed": [], "total": 2 } ``` Failed uploads are reported per-file without failing the entire request. --- ### DELETE Interrupt Command Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-command-interrupt Interrupt a running background command in a sandbox instance #### Metadata ```yaml title: "DELETE Interrupt Command" description: "Interrupt a running background command in a sandbox instance" full: true ```

Interrupt Sandbox Command

DELETE {"/v1/sandbox/{sandbox_id}/command"}

Request

```bash curl -X DELETE "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/command" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"command_id":"cmd_abc123"}' ``` ```js const sandboxId = "your-sandbox-id"; const response = await fetch(`https://{instance}.{region}.everstack.ai/v1/sandbox/${sandboxId}/command`, { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "command_id": "cmd_abc123", }), }); const data = await response.json(); ``` ```python import requests sandbox_id = "your-sandbox-id" response = requests.delete( f"https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/command", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "command_id": "cmd_abc123", }, ) data = response.json() ```

Response

```json { "status": "interrupted" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Description Sends an interrupt signal to a background command running in the specified sandbox. Use the `command_id` returned when the command was launched with `background: true`. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `command_id` | `string` | Yes | ID of the background command to interrupt | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Result of the interrupt operation. Value is `"interrupted"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Command Logs Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-command-logs Retrieve the captured logs for a background command in a sandbox instance #### Metadata ```yaml title: "GET Get Command Logs" description: "Retrieve the captured logs for a background command in a sandbox instance" full: true ```

Get Command Logs

GET {"/v1/sandbox/{sandbox_id}/command/{cmd_id}/logs"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/command/{cmd_id}/logs" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const sandboxId = "your-sandbox-id"; const cmdId = "cmd_abc123"; const response = await fetch( `https://{instance}.{region}.everstack.ai/v1/sandbox/${sandboxId}/command/${cmdId}/logs`, { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, } ); const data = await response.json(); ``` ```python import requests sandbox_id = "your-sandbox-id" cmd_id = "cmd_abc123" response = requests.get( f"https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/command/{cmd_id}/logs", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "logs": [ "line1", "line2" ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Description Returns the buffered output logs for a background command. Logs include all combined `stdout` and `stderr` lines captured during execution. This endpoint can be called while the command is still running or after it has completed. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | | `cmd_id` | `string` | Yes | ID of the background command whose logs to retrieve | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `logs` | `string[]` | Array of log lines captured from the command's output | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Command Status Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-command-status Get the status of a background command running in a sandbox instance #### Metadata ```yaml title: "GET Get Command Status" description: "Get the status of a background command running in a sandbox instance" full: true ```

Get Background Command Status

GET {"/v1/sandbox/{sandbox_id}/command/status/{cmd_id}"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/command/status/{cmd_id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const sandboxId = "your-sandbox-id"; const cmdId = "cmd_abc123"; const response = await fetch( `https://{instance}.{region}.everstack.ai/v1/sandbox/${sandboxId}/command/status/${cmdId}`, { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, } ); const data = await response.json(); ``` ```python import requests sandbox_id = "your-sandbox-id" cmd_id = "cmd_abc123" response = requests.get( f"https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/command/status/{cmd_id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "id": "string", "sandbox_id": "string", "command": "string", "cwd": "string", "running": true, "exit_code": null, "started_at": "string", "finished_at": null } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Description Retrieves the current status of a background command that was launched with `background: true`. Use this endpoint to poll for completion and obtain the exit code once the command finishes. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | | `cmd_id` | `string` | Yes | ID of the background command to query | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `id` | `string` | Unique ID of the background command | | `sandbox_id` | `string` | ID of the sandbox the command is running in | | `command` | `string` | The shell command that was executed | | `cwd` | `string` | Working directory the command was run from | | `running` | `boolean` | Whether the command is currently running | | `exit_code` | `integer \| null` | Exit code of the command. `null` while still running | | `started_at` | `string` | ISO 8601 timestamp when the command started | | `finished_at` | `string \| null` | ISO 8601 timestamp when the command finished. `null` while still running | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Execute Sandbox Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-command Execute a command in a sandbox instance with SSE streaming output #### Metadata ```yaml title: "POST Execute Sandbox" description: "Execute a command in a sandbox instance with SSE streaming output" full: true ```

Execute Sandbox Command

POST {"/v1/sandbox/{sandbox_id}/command"}

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/command" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: text/event-stream" \ -d '{"command":"ls -la /workspace","cwd":"/workspace","background":false,"timeout":30000}' ``` ```js const sandboxId = "your-sandbox-id"; const response = await fetch(`https://{instance}.{region}.everstack.ai/v1/sandbox/${sandboxId}/command`, { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", "Accept": "text/event-stream", }, body: JSON.stringify({ "command": "ls -la /workspace", "cwd": "/workspace", "background": false, "timeout": 30000, }), }); const reader = response.body.getReader(); const decoder = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) break; console.log(decoder.decode(value)); } ``` ```python import requests sandbox_id = "your-sandbox-id" response = requests.post( f"https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/command", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", "Accept": "text/event-stream", }, json={ "command": "ls -la /workspace", "cwd": "/workspace", "background": False, "timeout": 30000, }, stream=True, ) for line in response.iter_lines(): if line: print(line.decode("utf-8")) ```

Response

```json {"type":"stdout","data":"total 48\ndrwxr-xr-x 6 root root 4096 Jan 1 00:00 .\n"} {"type":"stderr","data":""} {"type":"exit","data":"0"} ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Description Executes a shell command inside the specified sandbox. By default the response is a Server-Sent Events (SSE) stream that emits `stdout`, `stderr`, and `exit` events in real time as the command runs. When `background` is set to `true`, the command is launched in the background and the response immediately returns a command ID and status that can be used to poll for results. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `command` | `string` | Yes | Shell command to execute | | `cwd` | `string` | No | Working directory for the command. Defaults to the sandbox root | | `background` | `boolean` | No | Run the command in the background and return immediately. Default: `false` | | `timeout` | `integer` | No | Timeout in milliseconds before the command is killed. Default: `30000` | ### Responses #### 200 Success (foreground, SSE stream) Each line is a JSON-encoded SSE event: | Property | Type | Description | |----------|------|-------------| | `type` | `string` | Event type: `"stdout"`, `"stderr"`, or `"exit"` | | `data` | `string` | Event payload. For `"exit"` events, contains the numeric exit code as a string | #### 200 Success (background, `background: true`) | Property | Type | Description | |----------|------|-------------| | `id` | `string` | Unique ID for the background command | | `status` | `string` | Initial status, e.g. `"running"` | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Computer Use Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-computer-use Screenshot, mouse, keyboard, and screen recording for GUI automation. #### Metadata ```yaml title: Computer Use description: Screenshot, mouse, keyboard, and screen recording for GUI automation. ``` # Computer Use Full desktop automation for vision-capable agents. Requires `computerUse: true` on `CreateSandbox`, which launches Xvfb + XFCE4 at boot. ## Capability Info `GET /v1/sandbox/{sandboxId}/computer` Returns available operations and whether Computer Use is active. ## Screenshot `POST /v1/sandbox/{sandboxId}/computer/screenshot` ```json { "format": "jpeg", "quality": 85 } ``` Response: `Content-Type: image/jpeg` binary body (~50-100KB for JPEG). Formats: `jpeg` (default, smallest), `png` (lossless). ## Displays and Windows ``` GET /v1/sandbox/{sandboxId}/computer/displays GET /v1/sandbox/{sandboxId}/computer/windows ``` ## Mouse | Endpoint | Body | Description | |----------|------|-------------| | `POST .../mouse/click` | `{ x, y, button, double? }` | Click (`left`, `right`, `middle`) | | `POST .../mouse/move` | `{ x, y }` | Move cursor | | `POST .../mouse/scroll` | `{ x, y, direction, amount }` | Scroll (`up`/`down`) | | `POST .../mouse/drag` | `{ from: {x,y}, to: {x,y} }` | Click-and-drag | ## Keyboard | Endpoint | Body | Description | |----------|------|-------------| | `POST .../keyboard/type` | `{ text }` | Type text (handles uppercase, symbols) | | `POST .../keyboard/key` | `{ key }` | Key combo e.g. `"ctrl+c"`, `"Return"`, `"F5"` | ## Screen Recording | Endpoint | Body / Response | Description | |----------|-----------------|-------------| | `POST .../recording/start` | `{ label, fps? }` → `{ recording_id }` | Start recording | | `POST .../recording/stop` | `{ recording_id }` | Stop and finalize MP4 | | `GET .../recordings` |, | List recordings | | `GET .../recordings/{id}/download` |, | Download MP4 | | `DELETE .../recordings/{id}` |, | Delete recording | ## As agent tool calls The screenshot operation is available as an MCP/agent tool call: ``` sandbox_screenshot(sandbox_id, format?) → base64 image ``` ## Image requirements | Tool | Purpose | |------|---------| | `Xvfb`, `xfce4` | Virtual display + desktop | | `xdotool` | Mouse and keyboard control | | `scrot` or `imagemagick` | Screenshot capture | | `ffmpeg` | Screen recording | | `wmctrl` | Window enumeration (optional) | Install: `apt-get install xvfb xfce4 xdotool scrot ffmpeg` --- ### Content Search Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-content-search Search file contents inside a sandbox using ripgrep or grep. #### Metadata ```yaml title: Content Search description: Search file contents inside a sandbox using ripgrep or grep. ``` # Content Search Search file contents recursively inside a sandbox. Uses ripgrep (`rg`) when available, falls back to `grep -rn`. `GET /v1/sandbox/{sandboxId}/files/content-search` ## Parameters | Parameter | Required | Description | |-----------|----------|-------------| | `pattern` | Yes | Regex or literal string to search for | | `path` | No | Directory to search in (default: `.`) | ## Response ```json { "matches": [ { "path": "/repo/main.py", "line": 42, "match_text": "def process_data(input):" }, { "path": "/repo/utils.py", "line": 8, "match_text": "import process_data" } ], "total": 2, "pattern": "process_data", "path": "/repo" } ``` Up to 500 matches are returned. Results are capped at 8MB. ## Examples ```bash # Find all TODO comments GET /v1/sandbox/{id}/files/content-search?pattern=TODO&path=/repo # Find Python function definitions GET /v1/sandbox/{id}/files/content-search?pattern=^def%20&path=/src ``` --- ### POST Create Code Context Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-create-code-context Create a persistent REPL code context in a sandbox instance #### Metadata ```yaml title: "POST Create Code Context" description: "Create a persistent REPL code context in a sandbox instance" full: true ```

Create Code Context

POST {"/v1/sandbox/{sandbox_id}/code/context"}

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/code/context" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"language":"python"}' ``` ```js const sandboxId = "your-sandbox-id"; const response = await fetch(`https://{instance}.{region}.everstack.ai/v1/sandbox/${sandboxId}/code/context`, { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "language": "python", }), }); const data = await response.json(); ``` ```python import requests sandbox_id = "your-sandbox-id" response = requests.post( f"https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/code/context", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "language": "python", }, ) data = response.json() ```

Response

```json { "id": "string", "language": "python", "sandbox_id": "string", "created_at": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Description Creates a persistent REPL (Read-Eval-Print Loop) code context within the specified sandbox. A code context maintains interpreter state, variables, imports, and definitions, across multiple code execution requests, enabling interactive and stateful code evaluation sessions. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `language` | `string` | Yes | Programming language for the REPL context. Supported values: `"python"` | ### Responses #### 201 Created | Property | Type | Description | |----------|------|-------------| | `id` | `string` | Unique ID of the created code context | | `language` | `string` | Programming language of the REPL context | | `sandbox_id` | `string` | ID of the sandbox this context belongs to | | `created_at` | `string` | ISO 8601 timestamp when the context was created | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Create Directories Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-create-directories Create one or more directories inside a sandbox. #### Metadata ```yaml title: "POST Create Directories" description: "Create one or more directories inside a sandbox." full: true ```

Create Directories

POST {"/v1/sandbox/{sandbox_id}/directories"}

Request

```bash curl -X POST "https://your-instance.example.com/v1/sandbox/sb_abc123/directories" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"paths":["/repo/src","/repo/tests"]}' ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/directories", { method: "POST", headers: { Authorization: "Bearer ", "Content-Type": "application/json", }, body: JSON.stringify({ paths: ["/repo/src", "/repo/tests"], }), } ); const data = await response.json(); console.log(data); // { status: "created" } ``` ```python import requests response = requests.post( "https://your-instance.example.com/v1/sandbox/sb_abc123/directories", headers={"Authorization": "Bearer "}, json={"paths": ["/repo/src", "/repo/tests"]}, ) print(response.json()) # {"status": "created"} ```

Response

```json {"status": "created"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Creates one or more directories inside the sandbox filesystem. Intermediate parent directories are created automatically (equivalent to `mkdir -p`). If a directory already exists the operation is a no-op for that path. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `paths` | `string[]` | Yes | List of absolute directory paths to create inside the sandbox | ### Responses #### 201 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"created"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Code Context Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-delete-code-context Delete a code context from a sandbox. #### Metadata ```yaml title: "DELETE Delete Code Context" description: "Delete a code context from a sandbox." full: true ```

Delete Code Context

DELETE {"/v1/sandbox/{sandbox_id}/code/contexts/{context_id}"}

Request

```bash curl -X DELETE "https://your-instance.example.com/v1/sandbox/sb_abc123/code/contexts/ctx_xyz789" \ -H "Authorization: Bearer " ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/code/contexts/ctx_xyz789", { method: "DELETE", headers: { Authorization: "Bearer ", }, } ); const data = await response.json(); console.log(data); // { status: "deleted" } ``` ```python import requests response = requests.delete( "https://your-instance.example.com/v1/sandbox/sb_abc123/code/contexts/ctx_xyz789", headers={"Authorization": "Bearer "}, ) print(response.json()) # {"status": "deleted"} ```

Response

```json {"status": "deleted"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Deletes a specific code execution context from a sandbox by its context ID. Once deleted, the context and any variables or state associated with it are permanently removed. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | | `context_id` | `string` | Yes | The ID of the code context to delete | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"deleted"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Code Contexts Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-delete-code-contexts-by-language Delete all code contexts for a given language from a sandbox. #### Metadata ```yaml title: "DELETE Delete Code Contexts" description: "Delete all code contexts for a given language from a sandbox." full: true ```

Delete Code Contexts by Language

DELETE {"/v1/sandbox/{sandbox_id}/code/contexts"}

Request

```bash curl -X DELETE "https://your-instance.example.com/v1/sandbox/sb_abc123/code/contexts?language=python" \ -H "Authorization: Bearer " ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/code/contexts?language=python", { method: "DELETE", headers: { Authorization: "Bearer ", }, } ); const data = await response.json(); console.log(data); // { deleted: 2 } ``` ```python import requests response = requests.delete( "https://your-instance.example.com/v1/sandbox/sb_abc123/code/contexts", params={"language": "python"}, headers={"Authorization": "Bearer "}, ) print(response.json()) # {"deleted": 2} ```

Response

```json {"deleted": 2} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Deletes all code execution contexts associated with a specific language within a sandbox. Useful for clearing all Python, JavaScript, or other language contexts in bulk without having to delete them one by one. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Query Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `language` | `string` | Yes | The programming language whose contexts should be deleted (e.g., `python`, `javascript`) | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `deleted` | `integer` | The number of contexts that were deleted | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Directories Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-delete-directories Delete one or more directories from a sandbox. #### Metadata ```yaml title: "DELETE Delete Directories" description: "Delete one or more directories from a sandbox." full: true ```

Delete Directories

DELETE {"/v1/sandbox/{sandbox_id}/directories"}

Request

```bash curl -X DELETE "https://your-instance.example.com/v1/sandbox/sb_abc123/directories" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"paths":["/repo/tmp"]}' ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/directories", { method: "DELETE", headers: { Authorization: "Bearer ", "Content-Type": "application/json", }, body: JSON.stringify({ paths: ["/repo/tmp"], }), } ); const data = await response.json(); console.log(data); // { status: "deleted" } ``` ```python import requests response = requests.delete( "https://your-instance.example.com/v1/sandbox/sb_abc123/directories", headers={"Authorization": "Bearer "}, json={"paths": ["/repo/tmp"]}, ) print(response.json()) # {"status": "deleted"} ```

Response

```json {"status": "deleted"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Deletes one or more directories from the sandbox filesystem, including all of their contents recursively (equivalent to `rm -rf`). Paths that do not exist are silently ignored. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `paths` | `string[]` | Yes | List of absolute directory paths to delete inside the sandbox | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"deleted"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Files Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-delete-files Delete one or more files from a sandbox. #### Metadata ```yaml title: "DELETE Delete Files" description: "Delete one or more files from a sandbox." full: true ```

Delete Files

DELETE {"/v1/sandbox/{sandbox_id}/files"}

Request

```bash curl -X DELETE "https://your-instance.example.com/v1/sandbox/sb_abc123/files" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "paths": ["/repo/temp.txt", "/repo/build/output.bin"] }' ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/files", { method: "DELETE", headers: { Authorization: "Bearer ", "Content-Type": "application/json", }, body: JSON.stringify({ paths: ["/repo/temp.txt", "/repo/build/output.bin"], }), } ); const data = await response.json(); console.log(data); // { status: "deleted" } ``` ```python import requests response = requests.delete( "https://your-instance.example.com/v1/sandbox/sb_abc123/files", headers={"Authorization": "Bearer "}, json={ "paths": ["/repo/temp.txt", "/repo/build/output.bin"], }, ) print(response.json()) # {"status": "deleted"} ```

Response

```json {"status": "deleted"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Deletes one or more files from the sandbox filesystem. Provide a list of absolute paths in the request body. All specified files are removed permanently and the operation cannot be undone. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `paths` | `string[]` | Yes | Array of absolute file paths to delete | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"deleted"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Download File Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-download-file Download a file from a sandbox as a binary stream. #### Metadata ```yaml title: "GET Download File" description: "Download a file from a sandbox as a binary stream." full: true ```

Download File

GET {"/v1/sandbox/{sandbox_id}/files/download"}

Request

```bash curl -X GET "https://your-instance.example.com/v1/sandbox/sb_abc123/files/download?path=/repo/main.go" \ -H "Authorization: Bearer " \ -O -J ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/download?path=/repo/main.go", { method: "GET", headers: { Authorization: "Bearer ", }, } ); // Stream binary content to a local file (Node.js) const { createWriteStream } = require("fs"); const dest = createWriteStream("./main.go"); response.body.pipe(dest); ``` ```python import requests response = requests.get( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/download", params={"path": "/repo/main.go"}, headers={"Authorization": "Bearer "}, stream=True, ) with open("./main.go", "wb") as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) ```

Response

```json Binary file content streamed in the response body. Content-Type: application/octet-stream Content-Disposition: attachment; filename="main.go" ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Downloads a file from the sandbox filesystem. The response body is the raw binary content of the file. The server sets a `Content-Disposition: attachment` header containing the filename so that HTTP clients can save it with the correct name. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Query Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `path` | `string` | Yes | Absolute path to the file inside the sandbox (e.g. `/repo/main.go`) | ### Responses #### 200 Success The response body is the raw binary content of the requested file. | Header | Description | |--------|-------------| | `Content-Type` | `application/octet-stream` | | `Content-Disposition` | `attachment; filename=""` | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Events Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-events Sandbox Events #### Metadata ```yaml title: "GET List Events" description: "Sandbox Events" full: true ```

Sandbox Events

GET {"/v1/sandbox/{sandboxId}/events"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/events" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/events", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/events", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "events": [ { "id": "string", "sandboxId": "string", "sessionId": "string", "tenantId": "string", "eventType": "string", "message": "string", "durationMs": "string", "error": "string", "createdAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `eventType` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List lifecycle events for a sandbox | Property | Type | Description | |----------|------|-------------| | `events` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Execute Code Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-execute-code Execute code in a sandbox and stream the output via Server-Sent Events. #### Metadata ```yaml title: "POST Execute Code" description: "Execute code in a sandbox and stream the output via Server-Sent Events." full: true ```

Execute Code

POST {"/v1/sandbox/{sandbox_id}/code"}

Request

```bash curl -X POST "https://your-instance.example.com/v1/sandbox/sb_abc123/code" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -H "Accept: text/event-stream" \ --no-buffer \ -d '{ "context_id": "ctx_xyz789", "code": "print('"'"'hello'"'"')", "language": "python" }' ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/code", { method: "POST", headers: { Authorization: "Bearer ", "Content-Type": "application/json", Accept: "text/event-stream", }, body: JSON.stringify({ context_id: "ctx_xyz789", code: "print('hello')", language: "python", }), } ); const reader = response.body.getReader(); const decoder = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) break; const chunk = decoder.decode(value); for (const line of chunk.split("\n")) { if (line.startsWith("data: ")) { const event = JSON.parse(line.slice(6)); console.log(event); // { type: "stdout", data: "hello\n" } } } } ``` ```python import requests import json with requests.post( "https://your-instance.example.com/v1/sandbox/sb_abc123/code", headers={ "Authorization": "Bearer ", "Content-Type": "application/json", "Accept": "text/event-stream", }, json={ "context_id": "ctx_xyz789", "code": "print('hello')", "language": "python", }, stream=True, ) as response: for line in response.iter_lines(): if line and line.startswith(b"data: "): event = json.loads(line[6:]) print(event) # {"type": "stdout", "data": "hello\n"} ```

Response

```json data: {"type":"stdout","data":"hello\n"} data: {"type":"exit","data":"0"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Executes code within a sandbox and streams the output as Server-Sent Events (SSE). The response is a stream of events that deliver stdout, stderr, exit codes, and errors as the code runs. Use `context_id` to maintain state across multiple executions (e.g., variables defined in one call are available in subsequent calls with the same context). ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `context_id` | `string` | No | ID of an existing context to execute within. If omitted, a new ephemeral context is used | | `code` | `string` | Yes | The source code to execute | | `language` | `string` | Yes | The programming language (e.g., `python`, `javascript`) | ### SSE Event Types | Event `type` | Description | |--------------|-------------| | `stdout` | Standard output produced by the code | | `stderr` | Standard error output produced by the code | | `exit` | Process exit code (e.g., `"0"` for success) | | `error` | Execution error message | ### Responses #### 200 Success SSE stream of JSON event objects. | Property | Type | Description | |----------|------|-------------| | `type` | `string` | Event type: `stdout`, `stderr`, `exit`, or `error` | | `data` | `string` | Event payload | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get File Info Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-file-info Get metadata for one or more files in a sandbox. #### Metadata ```yaml title: "GET Get File Info" description: "Get metadata for one or more files in a sandbox." full: true ```

Get File Info

GET {"/v1/sandbox/{sandbox_id}/files/info"}

Request

```bash curl -X GET "https://your-instance.example.com/v1/sandbox/sb_abc123/files/info?path=/repo/main.go&path=/repo/README.md" \ -H "Authorization: Bearer " ``` ```js const params = new URLSearchParams(); params.append("path", "/repo/main.go"); params.append("path", "/repo/README.md"); const response = await fetch( `https://your-instance.example.com/v1/sandbox/sb_abc123/files/info?${params}`, { method: "GET", headers: { Authorization: "Bearer ", }, } ); const data = await response.json(); console.log(data.files); ``` ```python import requests response = requests.get( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/info", params=[("path", "/repo/main.go"), ("path", "/repo/README.md")], headers={"Authorization": "Bearer "}, ) print(response.json()) ```

Response

```json { "files": [ { "path": "/repo/main.go", "size": 1234, "is_dir": false, "modified_at": "2025-01-01T00:00:00Z", "created_at": "2025-01-01T00:00:00Z", "owner": "root", "group": "root", "mode": 644 } ] } ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Returns metadata for one or more files or directories within a sandbox. Multiple `path` query parameters can be provided to retrieve information for several files in a single request. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Query Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `path` | `string` | Yes | Path of the file or directory to inspect. Can be repeated for multiple paths | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `files` | `object[]` | Array of file metadata objects | | `files[].path` | `string` | Absolute path of the file | | `files[].size` | `integer` | File size in bytes | | `files[].is_dir` | `boolean` | Whether the path is a directory | | `files[].modified_at` | `string` | Last modification timestamp (ISO 8601) | | `files[].created_at` | `string` | Creation timestamp (ISO 8601) | | `files[].owner` | `string` | Owning user name | | `files[].group` | `string` | Owning group name | | `files[].mode` | `integer` | Unix file permission bits (e.g., `644`) | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Change File Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-file-permissions Change the permissions of a file in a sandbox. #### Metadata ```yaml title: "POST Change File" description: "Change the permissions of a file in a sandbox." full: true ```

Change File Permissions

POST {"/v1/sandbox/{sandbox_id}/files/permissions"}

Request

```bash curl -X POST "https://your-instance.example.com/v1/sandbox/sb_abc123/files/permissions" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "path": "/repo/script.sh", "mode": "755" }' ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/permissions", { method: "POST", headers: { Authorization: "Bearer ", "Content-Type": "application/json", }, body: JSON.stringify({ path: "/repo/script.sh", mode: "755", }), } ); const data = await response.json(); console.log(data); // { status: "ok" } ``` ```python import requests response = requests.post( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/permissions", headers={"Authorization": "Bearer "}, json={ "path": "/repo/script.sh", "mode": "755", }, ) print(response.json()) # {"status": "ok"} ```

Response

```json {"status": "ok"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Changes the Unix file permission mode of a file within the sandbox. The `mode` is specified as an octal string (e.g., `"755"` for rwxr-xr-x, `"644"` for rw-r--r--). This is equivalent to running `chmod` on the file. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `path` | `string` | Yes | Absolute path of the file whose permissions should be changed | | `mode` | `string` | Yes | Unix permission mode as an octal string (e.g., `"755"`, `"644"`, `"600"`) | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"ok"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Code Context Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-get-code-context Retrieve a specific persistent REPL code context from a sandbox instance #### Metadata ```yaml title: "GET Get Code Context" description: "Retrieve a specific persistent REPL code context from a sandbox instance" full: true ```

Get Code Context

GET {"/v1/sandbox/{sandbox_id}/code/contexts/{context_id}"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/code/contexts/{context_id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const sandboxId = "your-sandbox-id"; const contextId = "ctx_abc123"; const response = await fetch( `https://{instance}.{region}.everstack.ai/v1/sandbox/${sandboxId}/code/contexts/${contextId}`, { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, } ); const data = await response.json(); ``` ```python import requests sandbox_id = "your-sandbox-id" context_id = "ctx_abc123" response = requests.get( f"https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/code/contexts/{context_id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "id": "string", "language": "python", "sandbox_id": "string", "created_at": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Description Retrieves details about a specific persistent REPL code context by its ID. Use the context ID returned when the context was created or listed. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | | `context_id` | `string` | Yes | ID of the code context to retrieve | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `id` | `string` | Unique ID of the code context | | `language` | `string` | Programming language of the REPL context | | `sandbox_id` | `string` | ID of the sandbox this context belongs to | | `created_at` | `string` | ISO 8601 timestamp when the context was created | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Global Replace Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-global-replace Find-and-replace across all files under a path inside a sandbox. #### Metadata ```yaml title: Global Replace description: Find-and-replace across all files under a path inside a sandbox. ``` # Global Replace Replace a pattern across all files under a path. Supports `dry_run` mode to preview changes. `POST /v1/sandbox/{sandboxId}/files/global-replace` ## Request ```json { "path": "/repo", "pattern": "oldFunctionName", "replacement": "newFunctionName", "dry_run": false } ``` | Field | Type | Description | |-------|------|-------------| | `path` | string | Root directory to search (default: `.`) | | `pattern` | string | Pattern to match (supports regex) | | `replacement` | string | Replacement string | | `dry_run` | boolean | Preview matches without applying (default: false) | ## Response ```json { "dry_run": false, "pattern": "oldFunctionName", "replacement": "newFunctionName", "path": "/repo", "output": "done", "exit_code": 0 } ``` ## Dry run Set `"dry_run": true` to see which lines would be affected without modifying any files. Returns the matching lines in `output`. ## Implementation Uses `perl -pi -e 's/pattern/replacement/g'` via `find | xargs`. Supports regex with capture groups. 60 second timeout. --- ### DELETE Interrupt Execution Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-interrupt-code Interrupt a running code execution in a sandbox. #### Metadata ```yaml title: "DELETE Interrupt Execution" description: "Interrupt a running code execution in a sandbox." full: true ```

Interrupt Code Execution

DELETE {"/v1/sandbox/{sandbox_id}/code"}

Request

```bash curl -X DELETE "https://your-instance.example.com/v1/sandbox/sb_abc123/code" \ -H "Authorization: Bearer " ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/code", { method: "DELETE", headers: { Authorization: "Bearer ", }, } ); const data = await response.json(); console.log(data); // { status: "ok" } ``` ```python import requests response = requests.delete( "https://your-instance.example.com/v1/sandbox/sb_abc123/code", headers={"Authorization": "Bearer "}, ) print(response.json()) # {"status": "ok"} ```

Response

```json {"status": "ok"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Interrupts any currently running code execution in the sandbox. This sends an interrupt signal to the running process, causing it to terminate. Any active SSE stream for the interrupted execution will receive an `exit` or `error` event before closing. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"ok"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Lifecycle Webhooks Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-lifecycle-webhooks Outgoing notifications when sandbox state changes. #### Metadata ```yaml title: Lifecycle Webhooks description: Outgoing notifications when sandbox state changes. ``` # Sandbox Lifecycle Webhooks Outgoing HTTP callbacks that notify your system when a sandbox state changes. > These are **outgoing** lifecycle events. For incoming trigger webhooks (invoking sandboxes), see [Incoming Webhooks](https://docs.everstack.ai/api-reference/sandbox/webhooks). ## Create Endpoint `POST /v1/sandbox-webhooks` ```json { "url": "https://your-system.com/webhooks/sandbox", "events": ["sandbox.started", "sandbox.stopped"], "secret": "your-signing-secret" } ``` | Field | Type | Description | |-------|------|-------------| | `url` | string | HTTPS endpoint to deliver events to | | `events` | string[] | Events to subscribe to. Omit for all events. | | `secret` | string | Used to sign delivery payloads | **Events:** `sandbox.started`, `sandbox.stopped`, `sandbox.archived`, `sandbox.deleted`, `sandbox.error` ## List Endpoints `GET /v1/sandbox-webhooks` ## Delete Endpoint `DELETE /v1/sandbox-webhooks/{id}` → `204 No Content` ## Delivery Log `GET /v1/sandbox-webhooks/{id}/deliveries` Returns the last 100 delivery attempts with status code, duration, and error (if any). ## Test Endpoint `POST /v1/sandbox-webhooks/{id}/test` Sends a test `sandbox.started` payload to your endpoint immediately. ## Payload format ```json { "event": "sandbox.started", "timestamp": "2026-06-01T12:00:00Z", "sandbox_id": "sbx_abc123", "tenant_id": "org_456", "state": "running", "status": "running" } ``` ## Signature verification Each delivery includes `X-Everstack-Signature: sha256=`. ```python import hmac, hashlib def is_valid(body: bytes, header: str, secret: str) -> bool: expected = "sha256=" + hmac.new( secret.encode(), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, header) ``` ## Reliability - At-least-once delivery - 3 retries with 0s → 5s → 30s backoff - Your endpoint must respond with `2xx` within 5 seconds --- ### GET List Code Contexts Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-list-code-contexts List all persistent REPL code contexts for a sandbox instance #### Metadata ```yaml title: "GET List Code Contexts" description: "List all persistent REPL code contexts for a sandbox instance" full: true ```

List Code Contexts

GET {"/v1/sandbox/{sandbox_id}/code/contexts"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/code/contexts?language=python" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const sandboxId = "your-sandbox-id"; const params = new URLSearchParams({ language: "python" }); const response = await fetch( `https://{instance}.{region}.everstack.ai/v1/sandbox/${sandboxId}/code/contexts?${params}`, { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, } ); const data = await response.json(); ``` ```python import requests sandbox_id = "your-sandbox-id" response = requests.get( f"https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/code/contexts", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, params={"language": "python"}, ) data = response.json() ```

Response

```json { "contexts": [ { "id": "string", "language": "python", "sandbox_id": "string", "created_at": "string" } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Description Returns all persistent REPL code contexts associated with the specified sandbox. Optionally filter by programming language using the `language` query parameter. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Query Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `language` | `string` | No | Filter contexts by programming language (e.g. `"python"`) | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `contexts` | `object[]` | Array of code context objects | | `contexts[].id` | `string` | Unique ID of the code context | | `contexts[].language` | `string` | Programming language of the REPL context | | `contexts[].sandbox_id` | `string` | ID of the sandbox this context belongs to | | `contexts[].created_at` | `string` | ISO 8601 timestamp when the context was created | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Language Server (LSP) Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-lsp Structured code diagnostics and symbols inside sandboxes. #### Metadata ```yaml title: Language Server (LSP) description: Structured code diagnostics and symbols inside sandboxes. ``` # Language Server Protocol (LSP) Get structured code intelligence inside sandboxes: diagnostics (errors and warnings), document symbols, and cross-file symbol search. Works with Python and TypeScript. Requires the relevant tools in the sandbox image. The `everstack-python` and `everstack-node` catalog images include these pre-installed. ## Capability Info `GET /v1/sandbox/{sandboxId}/lsp` Returns available languages and operations for this sandbox. ## Diagnostics Get compiler/linter errors and warnings for a file. `GET /v1/sandbox/{sandboxId}/lsp/{lang}/diagnostics?path={path}` **Parameters:** - `lang`: `python` or `typescript` - `path`: absolute path to the file inside the sandbox **Python** -- uses `pylint` or `flake8`. Requires `pylint` or `flake8` in the sandbox. **TypeScript** -- uses `tsc --noEmit`. Requires `typescript` in the sandbox. **Response:** ```json [ { "line": 12, "severity": "error", "message": "undefined variable 'foo'", "code": "E1101" }, { "line": 34, "severity": "warning", "message": "unused import 'os'" } ] ``` ## Document Symbols List functions, classes, and variables defined in a file. `GET /v1/sandbox/{sandboxId}/lsp/{lang}/symbols?path={path}` **Python** -- parses via `ast`. Covers `def`, `async def`, and `class`. **TypeScript** -- grep-based. Covers `function`, `class`, `const`, `interface`, `type`, `enum`. **Response:** ```json [ { "name": "process_data", "kind": "FunctionDef", "line": 42 }, { "name": "DataProcessor", "kind": "ClassDef", "line": 10 } ] ``` ## Workspace Symbols Search for functions or classes by name across all files under a path. `GET /v1/sandbox/{sandboxId}/lsp/{lang}/workspace-symbols?query={query}&path={path}` **Response:** ```json [ { "name": "process_data", "file": "/repo/processor.py", "line": 42 }, { "name": "process_event", "file": "/repo/handlers.py", "line": 8 } ] ``` ## As agent tool calls All three operations are available as MCP/agent tool calls via the Everstack MCP server: ``` sandbox_lsp_diagnostics(sandbox_id, path, language) sandbox_lsp_symbols(sandbox_id, path, language) ``` This means coding agents can call them directly without constructing HTTP requests. ## Requirements | Language | Tool | Install | |----------|------|---------| | Python diagnostics | `pylint` or `flake8` | `pip install pylint` | | Python symbols | `python3` | Built-in | | TypeScript diagnostics | `tsc` | `npm install -g typescript` | | TypeScript symbols | `grep` | Built-in | The `everstack-python` and `everstack-node` catalog snapshots include these pre-installed. --- ### POST Create Sandbox Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-management Sandbox Management #### Metadata ```yaml title: "POST Create Sandbox" description: "Sandbox Management" full: true ```

Sandbox Management

POST /v1/sandbox

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","sessionId":"string","image":"string","cpuLimit":0,"memoryMb":"string","diskMb":"string","timeoutSeconds":0,"networkMode":"string","idleRetentionSeconds":0,"templateId":"string","name":"string","gitRepoUrl":"string","gitBranch":"string","gitInstallationId":"string","sshEnabled":true}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "sessionId": "string", "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "idleRetentionSeconds": 0, "templateId": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitInstallationId": "string", "sshEnabled": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "sessionId": "string", "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "idleRetentionSeconds": 0, "templateId": "string", "name": "string", "gitRepoUrl": "string", "gitBranch": "string", "gitInstallationId": "string", "sshEnabled": true }, ) data = response.json() ```

Response

```json { "id": "string", "sessionId": "string", "tenantId": "string", "containerId": "string", "status": "string", "backend": "string", "image": "string", "createdAt": "string", "expiresAt": "string", "name": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `sessionId` | `string` | No | | | `image` | `string` | No | | | `cpuLimit` | `number` | No | | | `memoryMb` | `string` | No | | | `diskMb` | `string` | No | | | `timeoutSeconds` | `integer` | No | | | `networkMode` | `string` | No | | | `idleRetentionSeconds` | `integer` | No | Idle retention in seconds. 0 means no expiration (pro/enterprise). When omitted, the server resolves retention from the tenant's plan tier. | | `templateId` | `string` | No | If set, use template config as base. Individual fields override template defaults. | | `name` | `string` | No | Optional friendly name for the sandbox. | | `gitRepoUrl` | `string` | No | | | `gitBranch` | `string` | No | | | `gitInstallationId` | `string` | No | | | `sshEnabled` | `boolean` | No | | ### Responses #### 200 Create a new sandbox instance | Property | Type | Description | |----------|------|-------------| | `id` | `string` | | | `sessionId` | `string` | | | `tenantId` | `string` | | | `containerId` | `string` | | | `status` | `string` | | | `backend` | `string` | | | `image` | `string` | | | `createdAt` | `string` | | | `expiresAt` | `string` | | | `name` | `string` | Friendly name for the sandbox (if set). | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Metrics History Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-metrics-history Time-series CPU, memory, and disk metrics for sandboxes. #### Metadata ```yaml title: Metrics History description: Time-series CPU, memory, and disk metrics for sandboxes. ``` # Sandbox Metrics History Per-sandbox resource metrics collected every 30 seconds, retained for 2 hours. ## Point-in-time Snapshot `GET /v1/sandbox/{sandboxId}/metrics` Returns current CPU %, memory usage, memory limit, network bytes, and block I/O. ## Stream (SSE) `GET /v1/sandbox/{sandboxId}/metrics/watch` Server-sent events stream, updated every 2 seconds. Useful for live dashboards. ## Time-series History `GET /v1/sandbox/{sandboxId}/metrics/history?limit=120` Returns stored snapshots in ascending time order. | Parameter | Default | Description | |-----------|---------|-------------| | `limit` | 120 | Number of snapshots (1 per 30s = 1h at 120). Max 500. | **Response:** ```json { "snapshots": [ { "sandbox_id": "sbx_abc", "cpu_percent": 45.2, "memory_usage": 536870912, "memory_limit": 1073741824, "disk_used_mb": 1024, "collected_at": "2026-06-01T12:00:00Z" } ], "total": 120 } ``` ## Batch (for list views) `GET /v1/sandbox/metrics/batch?ids=id1,id2,id3` Returns the latest snapshot for each sandbox ID. Max 50 IDs per request. Useful for showing gauges in the sandbox list view without N+1 requests. **Response:** ```json { "metrics": { "sbx_abc": { "cpu_percent": 45.2, "memory_usage": 536870912, ... }, "sbx_def": { "cpu_percent": 2.1, "memory_usage": 104857600, ... } } } ``` ## Retention Metrics are collected every 30 seconds and retained for 2 hours. Older data is automatically pruned. For longer retention, configure [OTLP export](https://docs.everstack.ai/api-reference/sandbox/sandbox) to forward metrics to your own observability backend (New Relic, Grafana Cloud, Datadog, etc.). --- ### POST Move / Rename File Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-move-files Move or rename a file in a sandbox. #### Metadata ```yaml title: "POST Move / Rename File" description: "Move or rename a file in a sandbox." full: true ```

Move / Rename File

POST {"/v1/sandbox/{sandbox_id}/files/mv"}

Request

```bash curl -X POST "https://your-instance.example.com/v1/sandbox/sb_abc123/files/mv" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "source": "/repo/old.txt", "destination": "/repo/new.txt" }' ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/mv", { method: "POST", headers: { Authorization: "Bearer ", "Content-Type": "application/json", }, body: JSON.stringify({ source: "/repo/old.txt", destination: "/repo/new.txt", }), } ); const data = await response.json(); console.log(data); // { status: "moved" } ``` ```python import requests response = requests.post( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/mv", headers={"Authorization": "Bearer "}, json={ "source": "/repo/old.txt", "destination": "/repo/new.txt", }, ) print(response.json()) # {"status": "moved"} ```

Response

```json {"status": "moved"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Moves or renames a file within the sandbox filesystem. Provide the current absolute path as `source` and the desired absolute path as `destination`. If `source` and `destination` share the same parent directory, the operation is equivalent to a rename. Moving a file across directories is also supported. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `source` | `string` | Yes | Absolute path of the file to move or rename | | `destination` | `string` | Yes | Absolute path of the desired new location or name | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"moved"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Sandbox Ping Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-ping Health check for a sandbox instance #### Metadata ```yaml title: "GET Sandbox Ping" description: "Health check for a sandbox instance" full: true ```

Sandbox Ping

GET {"/v1/sandbox/{sandbox_id}/ping"}

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/ping" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const sandboxId = "your-sandbox-id"; const response = await fetch(`https://{instance}.{region}.everstack.ai/v1/sandbox/${sandboxId}/ping`, { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests sandbox_id = "your-sandbox-id" response = requests.get( f"https://{instance}.{region}.everstack.ai/v1/sandbox/{sandbox_id}/ping", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "status": "ok", "sandbox_id": "string", "exit_code": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Description Performs a health check on a sandbox instance, verifying that the sandbox is running and reachable. Returns the sandbox status and an exit code indicating the result. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Health status of the sandbox (e.g. `"ok"`) | | `sandbox_id` | `string` | The ID of the sandbox that was pinged | | `exit_code` | `integer` | Exit code of the ping operation. `0` indicates success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Signed Preview URL Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-preview-url Generate a shareable URL for a sandbox port with embedded auth. #### Metadata ```yaml title: Signed Preview URL description: Generate a shareable URL for a sandbox port with embedded auth. ``` # Generate Signed Preview URL `POST /v1/sandbox/instances/{sandboxId}/preview-url` Generates an HMAC-SHA256 signed URL for a sandbox port. The auth token is embedded in the URL itself, so it can be shared directly without requiring custom HTTP headers -- suitable for iframe embeds, chat/email links, and third-party tools. ## Request | Field | Type | Required | Description | |-------|------|----------|-------------| | `port` | integer | Yes | Port to generate a URL for (1-65535) | | `expiresInSeconds` | integer | No | Token validity window. Range: 1-86400. Default: 3600 (1 hour) | ```bash POST /v1/sandbox/instances/{sandboxId}/preview-url { "port": 3000, "expiresInSeconds": 7200 } ``` ## Response ```json { "url": "https://xK3p9q2A-3000.preview.everstack.ai?_preview_token=", "expiresAt": "2026-06-01T14:00:00Z" } ``` ## How it works 1. The gateway signs a claims payload (`sandbox_id`, `port`, `tenant_id`, `expires_at`) with HMAC-SHA256 2. The token is appended as `?_preview_token=` to the preview URL 3. When a browser hits the URL, the gateway validates the token and sets a short-lived cookie so subsequent same-session requests (JS imports, images, XHR) don't need to re-verify ## Security - Token is HMAC-SHA256 signed -- tamper-proof - Bound to a specific sandbox ID and port -- a token for port 3000 does not grant access to port 8080 - Auto-expires at the specified time - Standard preview access (via SDK or `x-everstack-preview-token` header) continues to work alongside signed URLs ## SDK usage ```typescript const { url, expiresAt } = await everstack.sandbox.getPreviewUrl(sandboxId, { port: 3000, expiresInSeconds: 3600, }) // share url directly -- no headers needed ``` --- ### POST Renew Sandbox Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-renew-expiration Extend the idle timeout of a sandbox by a given number of seconds. #### Metadata ```yaml title: "POST Renew Sandbox" description: "Extend the idle timeout of a sandbox by a given number of seconds." full: true ```

Renew Sandbox Expiration

POST {"/v1/sandbox/{sandbox_id}/renew-expiration"}

Request

```bash curl -X POST "https://your-instance.example.com/v1/sandbox/sb_abc123/renew-expiration" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"extra_seconds":3600}' ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/renew-expiration", { method: "POST", headers: { Authorization: "Bearer ", "Content-Type": "application/json", }, body: JSON.stringify({ extra_seconds: 3600, }), } ); const data = await response.json(); console.log(data); // { status: "renewed", extra_seconds: 3600 } ``` ```python import requests response = requests.post( "https://your-instance.example.com/v1/sandbox/sb_abc123/renew-expiration", headers={"Authorization": "Bearer "}, json={"extra_seconds": 3600}, ) print(response.json()) # {"status": "renewed", "extra_seconds": 3600} ```

Response

```json {"status": "renewed", "extra_seconds": 3600} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Extends the idle timeout of a running sandbox by the specified number of seconds. This is useful for keeping a sandbox alive during long-running tasks or when an agent is idle but will resume shortly. The extension is added on top of the sandbox's current remaining lifetime. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `extra_seconds` | `integer` | Yes | Number of additional seconds to add to the sandbox idle timeout | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"renewed"` on success | | `extra_seconds` | `integer` | The number of seconds that were added to the sandbox timeout | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Replace File Content Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-replace-file-content Find and replace text within a file inside a sandbox. #### Metadata ```yaml title: "POST Replace File Content" description: "Find and replace text within a file inside a sandbox." full: true ```

Replace File Content

POST {"/v1/sandbox/{sandbox_id}/files/replace"}

Request

```bash curl -X POST "https://your-instance.example.com/v1/sandbox/sb_abc123/files/replace" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"path":"/repo/config.json","old":"localhost","new":"0.0.0.0"}' ``` ```js const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/replace", { method: "POST", headers: { Authorization: "Bearer ", "Content-Type": "application/json", }, body: JSON.stringify({ path: "/repo/config.json", old: "localhost", new: "0.0.0.0", }), } ); const data = await response.json(); console.log(data); // { status: "replaced" } ``` ```python import requests response = requests.post( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/replace", headers={"Authorization": "Bearer "}, json={ "path": "/repo/config.json", "old": "localhost", "new": "0.0.0.0", }, ) print(response.json()) # {"status": "replaced"} ```

Response

```json {"status": "replaced"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Finds all occurrences of a substring within a file inside the sandbox and replaces them with a new value. The operation is performed in-place on the file at the given path. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `path` | `string` | Yes | Absolute path to the file inside the sandbox | | `old` | `string` | Yes | The substring to search for and replace | | `new` | `string` | Yes | The replacement string | ### Responses #### 200 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"replaced"` on success | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### SSH Tokens Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-ssh-tokens Generate temporary SSH access tokens for sandbox connections. #### Metadata ```yaml title: SSH Tokens description: Generate temporary SSH access tokens for sandbox connections. ``` # SSH Tokens Temporary SSH access tokens let agents and users SSH into sandboxes without key distribution. ``` ssh @ssh.everstack.ai ``` Tokens are time-limited (default 60 minutes) and can be revoked before expiry. > **Note:** SSH proxy token validation is in development. Token generation and revocation APIs are live; the SSH proxy enforcement ships in a follow-up release. ## Generate Token `POST /v1/sandbox/instances/{sandboxId}/ssh-token` ```json { "expiresInMinutes": 60 } ``` | Field | Type | Description | |-------|------|-------------| | `expiresInMinutes` | integer | Token lifetime. Range: 1-1440 (max 24h). Default: 60. | **Response:** ```json { "id": "ssht_abc123", "token": "", "expiresAt": "2026-06-01T13:00:00Z", "expiresInMinutes": 60, "connectionString": "ssh @ssh.everstack.ai" } ``` ## List Active Tokens `GET /v1/sandbox/instances/{sandboxId}/ssh-tokens` Returns tokens that have not expired and have not been revoked. ## Revoke Token `DELETE /v1/sandbox/instances/{sandboxId}/ssh-tokens/{tokenId}` → `204 No Content` ## Use cases - **Debugging handoff** -- agent hits an error, generates a token, sends connection string to a developer - **VS Code Remote SSH** -- add the connection string as a remote host - **JetBrains Gateway** -- connect to the sandbox as a remote interpreter - **Temporary access** -- give a team member access to a running sandbox without permanent key grant --- ### GET List Templates Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-templates-read-only-catalog Sandbox Templates (read-only catalog) #### Metadata ```yaml title: "GET List Templates" description: "Sandbox Templates (read-only catalog)" full: true ```

Sandbox Templates (read-only catalog)

GET /v1/sandbox/templates

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/templates" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/templates", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/templates", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "templates": [ { "id": "string", "name": "string", "slug": "string", "description": "string", "icon": "string", "iconColor": "string", "image": "string", "cpuLimit": 0, "memoryMb": "string", "diskMb": "string", "timeoutSeconds": 0, "networkMode": "string", "workDir": "string", "tags": [ "string" ] } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Responses #### 200 List available sandbox templates | Property | Type | Description | |----------|------|-------------| | `templates` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Upload File Source: https://docs.everstack.ai/api-reference/sandbox/sandbox-upload-file Upload a file to a sandbox via multipart form or raw body. #### Metadata ```yaml title: "POST Upload File" description: "Upload a file to a sandbox via multipart form or raw body." full: true ```

Upload File

POST {"/v1/sandbox/{sandbox_id}/files/upload"}

Request

```bash curl -X POST "https://your-instance.example.com/v1/sandbox/sb_abc123/files/upload?path=/repo/data.csv" \ -H "Authorization: Bearer " \ -H "Content-Type: multipart/form-data" \ -F "file=@/local/path/data.csv" ``` ```js const fs = require("fs"); const formData = new FormData(); formData.append("file", new Blob([fs.readFileSync("/local/path/data.csv")]), "data.csv"); const response = await fetch( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/upload?path=/repo/data.csv", { method: "POST", headers: { Authorization: "Bearer ", }, body: formData, } ); const data = await response.json(); console.log(data); // { status: "uploaded", path: "/repo/data.csv" } ``` ```python import requests with open("/local/path/data.csv", "rb") as f: response = requests.post( "https://your-instance.example.com/v1/sandbox/sb_abc123/files/upload", params={"path": "/repo/data.csv"}, headers={"Authorization": "Bearer "}, files={"file": ("data.csv", f, "text/csv")}, ) print(response.json()) # {"status": "uploaded", "path": "/repo/data.csv"} ```

Response

```json {"status": "uploaded", "path": "/repo/data.csv"} ``` ```json {"code": 0, "message": "string", "details": [{"@type": "string"}]} ```
### Description Uploads a file into the sandbox filesystem at the destination path specified by the `path` query parameter. The request body may be a multipart/form-data upload or a raw binary body. If the parent directories do not exist they will be created automatically. ### Path Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `sandbox_id` | `string` | Yes | Sandbox ID or name | ### Query Parameters | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | `path` | `string` | Yes | Absolute destination path inside the sandbox (e.g. `/repo/data.csv`) | ### Request Body Send the file as a multipart/form-data field named `file`, or as a raw binary body with an appropriate `Content-Type` header. ### Responses #### 201 Success | Property | Type | Description | |----------|------|-------------| | `status` | `string` | Always `"uploaded"` on success | | `path` | `string` | The absolute path where the file was written inside the sandbox | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Snapshots Source: https://docs.everstack.ai/api-reference/sandbox/snapshots Create and manage named sandbox environment templates. #### Metadata ```yaml title: Snapshots description: Create and manage named sandbox environment templates. ``` # Snapshots Snapshots are named, reusable environment templates. Create a snapshot from a public image or an existing sandbox, then reference it by ID when creating sandboxes for instant cold start. ## Create Snapshot `POST /v1/snapshots` **From a public image:** ```json { "name": "my-python-env", "image": "ghcr.io/everstacklabs/sandbox:python" } ``` **From an existing sandbox:** ```json { "name": "my-custom-env", "from_sandbox_id": "sbx_abc123" } ``` **Response:** ```json { "id": "snap_def456", "tenant_id": "org_123", "name": "my-python-env", "state": "active", "base_image": "ghcr.io/everstacklabs/sandbox:python", "size_bytes": 0, "created_at": "2026-06-01T10:00:00Z", "updated_at": "2026-06-01T10:00:00Z" } ``` **Snapshot states:** `pending` → `active` | `error` Snapshots are auto-deactivated after 2 weeks of no use (reactivated automatically on next use, not deleted). ## List Snapshots `GET /v1/snapshots` Returns all active and inactive snapshots for the tenant. ## Get Snapshot `GET /v1/snapshots/{snapshotId}` ## Delete Snapshot `DELETE /v1/snapshots/{snapshotId}` → `204 No Content` ## Use in CreateSandbox ```json POST /v1/sandbox { "snapshotId": "snap_def456" } ``` The sandbox uses the snapshot's `base_image`. Removes the need to know or maintain image references in client code. ## Catalog snapshots Everstack maintains pre-built catalog images rebuilt weekly: | Name | `image` value | |------|-------------| | Base | `ghcr.io/everstacklabs/sandbox:base` | | Python (+ pylsp, pylint) | `ghcr.io/everstacklabs/sandbox:python` | | Node.js (+ typescript-language-server) | `ghcr.io/everstacklabs/sandbox:node` | | Fullstack (Python + Node) | `ghcr.io/everstacklabs/sandbox:fullstack` | --- ### POST Stop Source: https://docs.everstack.ai/api-reference/sandbox/stop-sandbox #### Metadata ```yaml title: "POST Stop" full: true ```

Stop Sandbox

POST {"/v1/sandbox/{sandboxId}/stop"}

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/stop" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/stop", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/stop", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Stop a running sandbox, preserving workspace snapshot | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Terminate Source: https://docs.everstack.ai/api-reference/sandbox/terminate-sandbox #### Metadata ```yaml title: "POST Terminate" full: true ```

Terminate Sandbox

POST {"/v1/sandbox/{sandboxId}/terminate"}

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/terminate" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/terminate", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sandboxId}/terminate", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sandboxId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Permanently destroy a sandbox (non-revivable) | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Trigger History Source: https://docs.everstack.ai/api-reference/sandbox/triggers-shared-history Triggers (shared history) #### Metadata ```yaml title: "GET Trigger History" description: "Triggers (shared history)" full: true ```

Triggers (shared history)

GET /v1/sandbox/triggers

Request

```bash curl -X GET "https://{instance}.{region}.everstack.ai/v1/sandbox/triggers" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/triggers", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "https://{instance}.{region}.everstack.ai/v1/sandbox/triggers", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "triggers": [ { "id": "string", "triggerType": "string", "triggerId": "string", "sandboxId": "string", "executionId": "string", "status": "string", "error": "string", "durationMs": "string", "webhookMethod": "string", "webhookBody": "string", "createdAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `sandboxId` | query | `string` | No | | | `triggerType` | query | `string` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List trigger execution history | Property | Type | Description | |----------|------|-------------| | `triggers` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Unexpose Port Source: https://docs.everstack.ai/api-reference/sandbox/unexpose-port #### Metadata ```yaml title: "DELETE Unexpose Port" full: true ```

Unexpose Port

DELETE {"/v1/sandbox/{sessionId}/ports/{port}"}

Request

```bash curl -X DELETE "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports/{port}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports/{port}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "https://{instance}.{region}.everstack.ai/v1/sandbox/{sessionId}/ports/{port}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `sessionId` | path | `string` | **Yes** | | | `port` | path | `integer` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Close an exposed port | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Cron Source: https://docs.everstack.ai/api-reference/sandbox/update-cron #### Metadata ```yaml title: "PATCH Update Cron" full: true ```

Update Cron

PATCH {"/v1/sandbox/crons/{id}"}

Request

```bash curl -X PATCH "https://{instance}.{region}.everstack.ai/v1/sandbox/crons/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","schedule":"string","command":"string","enabled":true,"timeoutSeconds":0}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/crons/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "schedule": "string", "command": "string", "enabled": true, "timeoutSeconds": 0 }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "https://{instance}.{region}.everstack.ai/v1/sandbox/crons/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "schedule": "string", "command": "string", "enabled": true, "timeoutSeconds": 0 }, ) data = response.json() ```

Response

```json { "cron": { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "schedule": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "lastRunAt": "2024-01-01T00:00:00Z", "nextRunAt": "2024-01-01T00:00:00Z", "runCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `schedule` | `string` | No | | | `command` | `string` | No | | | `enabled` | `boolean` | No | | | `timeoutSeconds` | `integer` | No | | ### Responses #### 200 Update a sandbox cron schedule | Property | Type | Description | |----------|------|-------------| | `cron` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Volumes Source: https://docs.everstack.ai/api-reference/sandbox/volumes Persistent FUSE-backed storage shareable across sandboxes. #### Metadata ```yaml title: Volumes description: Persistent FUSE-backed storage shareable across sandboxes. ``` # Volumes Volumes are persistent storage units backed by S3-compatible object storage, independent of sandbox lifecycle. Multiple sandboxes can mount the same volume simultaneously. ## Create Volume `POST /v1/volumes` ```json { "name": "pip-cache" } ``` **Response:** ```json { "id": "vol_abc123", "tenant_id": "org_123", "name": "pip-cache", "size_bytes": 0, "created_at": "2026-06-01T10:00:00Z" } ``` ## List Volumes `GET /v1/volumes` ## Delete Volume `DELETE /v1/volumes/{volumeId}` → `204 No Content` ## Attach to a sandbox Volumes are mounted at sandbox creation time via the `mounts` field: ```json POST /v1/sandbox { "mounts": [ { "type": "s3", "bucket": "vol_pip_cache_id", "mountPath": "/cache/pip" } ] } ``` ### Subpath isolation Give each sandbox access to only a prefix of the volume: ```json { "type": "s3", "bucket": "shared-data", "mountPath": "/data", "subpath": "user-42" } ``` ### Options | Field | Type | Description | |-------|------|-------------| | `type` | string | `"s3"`, `"r2"`, `"gcs"`, `"azure"` | | `bucket` | string | Bucket or container name | | `mountPath` | string | Absolute path inside the sandbox | | `subpath` | string | Prefix within the bucket (optional, for isolation) | | `endpoint` | string | Custom endpoint for R2 or MinIO (optional) | | `readOnly` | boolean | Mount as read-only (default: false) | ## Limits - Maximum 100 volumes per organization - FUSE mounts are slower than local disk -- suitable for sequential reads (model weights, datasets), not for databases - Volume data does not count toward sandbox storage quota --- ### POST Webhooks Source: https://docs.everstack.ai/api-reference/sandbox/webhooks Webhooks #### Metadata ```yaml title: "POST Webhooks" description: "Webhooks" full: true ```

Webhooks

POST /v1/sandbox/webhooks

Request

```bash curl -X POST "https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","sandboxId":"string","sessionId":"string","name":"string","path":"string","command":"string","workDir":"string","timeoutSeconds":0,"rateLimitRpm":0,"autoRecreate":true}' ``` ```js const response = await fetch("https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "path": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "rateLimitRpm": 0, "autoRecreate": true }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "https://{instance}.{region}.everstack.ai/v1/sandbox/webhooks", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "path": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "rateLimitRpm": 0, "autoRecreate": true }, ) data = response.json() ```

Response

```json { "webhook": { "id": "string", "tenantId": "string", "sandboxId": "string", "sessionId": "string", "name": "string", "path": "string", "url": "string", "command": "string", "workDir": "string", "timeoutSeconds": 0, "enabled": true, "rateLimitRpm": 0, "lastTriggeredAt": "2024-01-01T00:00:00Z", "triggerCount": 0, "errorCount": 0, "lastError": "string", "autoRecreate": true, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "secret": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `sandboxId` | `string` | No | | | `sessionId` | `string` | No | | | `name` | `string` | No | | | `path` | `string` | No | | | `command` | `string` | No | | | `workDir` | `string` | No | | | `timeoutSeconds` | `integer` | No | | | `rateLimitRpm` | `integer` | No | | | `autoRecreate` | `boolean` | No | | | `sandboxConfig` | `object` | No | | ### Responses #### 200 Create a sandbox webhook | Property | Type | Description | |----------|------|-------------| | `webhook` | `object` | | | `secret` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### Workflows Source: https://docs.everstack.ai/api-reference/workflows Workflows API endpoints #### Metadata ```yaml title: Workflows description: Workflows API endpoints ``` # Workflows API | Method | Endpoint | Description | |--------|----------|-------------| | `GET` | [`/v1/workflows`](https://docs.everstack.ai/api-reference/workflows/list-workflows) | | | `POST` | [`/v1/workflows`](https://docs.everstack.ai/api-reference/workflows/create-workflow) | | | `GET` | [`/v1/workflows/executions/{executionId}`](https://docs.everstack.ai/api-reference/workflows/get-a-single-workflow-execution-by-id) | Get a single workflow execution by ID | | `POST` | [`/v1/workflows/executions/{executionId}/replay`](https://docs.everstack.ai/api-reference/workflows/replay-a-past-workflow-execution-with-the-same-inputs) | Replay a past workflow execution with the same inputs | | `GET` | [`/v1/workflows/{id}`](https://docs.everstack.ai/api-reference/workflows/get-workflow) | | | `PATCH` | [`/v1/workflows/{id}`](https://docs.everstack.ai/api-reference/workflows/update-workflow) | | | `DELETE` | [`/v1/workflows/{id}`](https://docs.everstack.ai/api-reference/workflows/delete-workflow) | | | `PUT` | [`/v1/workflows/{id}/draft`](https://docs.everstack.ai/api-reference/workflows/save-workflow-draft-without-creating-a-version-event) | Save workflow draft without creating a version event | | `POST` | [`/v1/workflows/{id}/publish`](https://docs.everstack.ai/api-reference/workflows/publish-workflow-creating-a-version-snapshot) | Publish workflow, creating a version snapshot | | `POST` | [`/v1/workflows/{id}/unpublish`](https://docs.everstack.ai/api-reference/workflows/unpublish-workflow-move-back-to-draft) | Unpublish workflow (move back to draft) | | `GET` | [`/v1/workflows/{id}/versions`](https://docs.everstack.ai/api-reference/workflows/get-version-history-for-a-workflow) | Get version history for a workflow | | `GET` | [`/v1/workflows/{id}/versions/{version}`](https://docs.everstack.ai/api-reference/workflows/get-reconstructed-workflow-state-at-a-specific-version) | Get reconstructed workflow state at a specific version | | `POST` | [`/v1/workflows/{workflowId}/execute`](https://docs.everstack.ai/api-reference/workflows/execute-a-workflow-with-streaming-events) | Execute a workflow with streaming events | | `GET` | [`/v1/workflows/{workflowId}/executions`](https://docs.everstack.ai/api-reference/workflows/list-execution-history-for-a-workflow) | List execution history for a workflow | --- ### POST Create Workflow Source: https://docs.everstack.ai/api-reference/workflows/create-workflow #### Metadata ```yaml title: "POST Create Workflow" full: true ```

Create Workflow

POST /v1/workflows

Request

```bash curl -X POST "http://localhost:8089/v1/workflows" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","nodes":[{"id":"string","type":"string","label":"string","position":{"x":0,"y":0}}],"edges":[{"id":"string","source":"string","target":"string","sourceHandle":"string","targetHandle":"string"}],"viewport":{"x":0,"y":0,"zoom":0}}' ``` ```js const response = await fetch("http://localhost:8089/v1/workflows", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string", "position": { "x": 0, "y": 0 } } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 } }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/workflows", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string", "position": { "x": 0, "y": 0 } } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 } }, ) data = response.json() ```

Response

```json { "workflow": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string" } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true, "version": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `nodes` | `object[]` | No | | | `edges` | `object[]` | No | | | `viewport` | `object` | No | | ### Responses #### 200 Create a new workflow | Property | Type | Description | |----------|------|-------------| | `workflow` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### DELETE Delete Workflow Source: https://docs.everstack.ai/api-reference/workflows/delete-workflow #### Metadata ```yaml title: "DELETE Delete Workflow" full: true ```

Delete Workflow

DELETE {"/v1/workflows/{id}"}

Request

```bash curl -X DELETE "http://localhost:8089/v1/workflows/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{id}", { method: "DELETE", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.delete( "http://localhost:8089/v1/workflows/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "success": true, "message": "string" } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Delete workflow | Property | Type | Description | |----------|------|-------------| | `success` | `boolean` | | | `message` | `string` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Execute a workflow with streaming events Source: https://docs.everstack.ai/api-reference/workflows/execute-a-workflow-with-streaming-events Execute a workflow with streaming events #### Metadata ```yaml title: "POST Execute a workflow with streaming events" description: "Execute a workflow with streaming events" full: true ```

Execute a workflow with streaming events

POST {"/v1/workflows/{workflowId}/execute"}

Request

```bash curl -X POST "http://localhost:8089/v1/workflows/{workflowId}/execute" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","messages":[{"role":"string","content":"string"}]}' ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{workflowId}/execute", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "messages": [ { "role": "string", "content": "string" } ] }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/workflows/{workflowId}/execute", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "messages": [ { "role": "string", "content": "string" } ] }, ) data = response.json() ```

Response

```json { "result": { "type": "string", "nodeId": "string", "nodeType": "string", "nodeLabel": "string", "error": "string", "durationMs": "string", "timestamp": "string", "chunkContent": "string" }, "error": { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `workflowId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `messages` | `object[]` | No | | | `metadata` | `object` | No | | ### Responses #### 200 Execute a workflow and stream execution events | Property | Type | Description | |----------|------|-------------| | `result` | `object` | | | `error` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get a single workflow execution by ID Source: https://docs.everstack.ai/api-reference/workflows/get-a-single-workflow-execution-by-id Get a single workflow execution by ID #### Metadata ```yaml title: "GET Get a single workflow execution by ID" description: "Get a single workflow execution by ID" full: true ```

Get a single workflow execution by ID

GET {"/v1/workflows/executions/{executionId}"}

Request

```bash curl -X GET "http://localhost:8089/v1/workflows/executions/{executionId}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/executions/{executionId}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/workflows/executions/{executionId}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "execution": { "id": "string", "workflowId": "string", "tenantId": "string", "correlationId": "string", "triggerType": "string", "status": "string", "inputMessages": [ { "role": "string", "content": "string" } ], "outputContent": "string", "resolvedModel": "string", "resolvedProvider": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "errorMessage": "string", "startedAt": "string", "completedAt": "string", "durationMs": 0, "eventsJson": "string", "ledgerJson": "string" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `executionId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get workflow execution details | Property | Type | Description | |----------|------|-------------| | `execution` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get reconstructed workflow state at a specific version Source: https://docs.everstack.ai/api-reference/workflows/get-reconstructed-workflow-state-at-a-specific-version Get reconstructed workflow state at a specific version #### Metadata ```yaml title: "GET Get reconstructed workflow state at a specific version" description: "Get reconstructed workflow state at a specific version" full: true ```

Get reconstructed workflow state at a specific version

GET {"/v1/workflows/{id}/versions/{version}"}

Request

```bash curl -X GET "http://localhost:8089/v1/workflows/{id}/versions/{version}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{id}/versions/{version}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/workflows/{id}/versions/{version}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "workflow": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string" } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true, "version": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "details": [ { "category": "string", "summary": "string", "items": [ "string" ], "itemIds": [ "string" ] } ], "changes": [ "string" ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | workflow ID | | `version` | path | `integer` | **Yes** | version number to reconstruct | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get workflow state at a specific version | Property | Type | Description | |----------|------|-------------| | `workflow` | `object` | | | `details` | `object[]` | | | `changes` | `string[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get version history for a workflow Source: https://docs.everstack.ai/api-reference/workflows/get-version-history-for-a-workflow Get version history for a workflow #### Metadata ```yaml title: "GET Get version history for a workflow" description: "Get version history for a workflow" full: true ```

Get version history for a workflow

GET {"/v1/workflows/{id}/versions"}

Request

```bash curl -X GET "http://localhost:8089/v1/workflows/{id}/versions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{id}/versions", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/workflows/{id}/versions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "versions": [ { "version": 0, "eventType": "string", "timestamp": "2024-01-01T00:00:00Z", "changes": [ "string" ], "details": [] } ] } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | workflow ID | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get version history | Property | Type | Description | |----------|------|-------------| | `versions` | `object[]` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET Get Workflow Source: https://docs.everstack.ai/api-reference/workflows/get-workflow #### Metadata ```yaml title: "GET Get Workflow" full: true ```

Get Workflow

GET {"/v1/workflows/{id}"}

Request

```bash curl -X GET "http://localhost:8089/v1/workflows/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{id}", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/workflows/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "workflow": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string" } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true, "version": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | ### Responses #### 200 Get workflow by ID | Property | Type | Description | |----------|------|-------------| | `workflow` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List execution history for a workflow Source: https://docs.everstack.ai/api-reference/workflows/list-execution-history-for-a-workflow List execution history for a workflow #### Metadata ```yaml title: "GET List execution history for a workflow" description: "List execution history for a workflow" full: true ```

List execution history for a workflow

GET {"/v1/workflows/{workflowId}/executions"}

Request

```bash curl -X GET "http://localhost:8089/v1/workflows/{workflowId}/executions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{workflowId}/executions", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/workflows/{workflowId}/executions", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "executions": [ { "id": "string", "workflowId": "string", "tenantId": "string", "correlationId": "string", "triggerType": "string", "status": "string", "inputMessages": [], "outputContent": "string", "resolvedModel": "string", "resolvedProvider": "string", "promptTokens": 0, "completionTokens": 0, "totalTokens": 0, "errorMessage": "string", "startedAt": "string", "completedAt": "string", "durationMs": 0, "eventsJson": "string", "ledgerJson": "string" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `workflowId` | path | `string` | **Yes** | | | `tenantId` | query | `string` | No | | | `pageSize` | query | `integer` | No | | | `offset` | query | `integer` | No | | | `statusFilter` | query | `string` | No | optional: running \| completed \| failed | ### Responses #### 200 List workflow executions | Property | Type | Description | |----------|------|-------------| | `executions` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### GET List Workflows Source: https://docs.everstack.ai/api-reference/workflows/list-workflows #### Metadata ```yaml title: "GET List Workflows" full: true ```

List Workflows

GET /v1/workflows

Request

```bash curl -X GET "http://localhost:8089/v1/workflows" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" ``` ```js const response = await fetch("http://localhost:8089/v1/workflows", { method: "GET", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, }); const data = await response.json(); ``` ```python import requests response = requests.get( "http://localhost:8089/v1/workflows", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, ) data = response.json() ```

Response

```json { "workflows": [ { "id": "string", "tenantId": "string", "name": "string", "description": "string", "nodes": [], "edges": [], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true, "version": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } ], "total": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `tenantId` | query | `string` | No | | | `enabled` | query | `boolean` | No | | | `limit` | query | `integer` | No | | | `offset` | query | `integer` | No | | ### Responses #### 200 List all workflows for tenant | Property | Type | Description | |----------|------|-------------| | `workflows` | `object[]` | | | `total` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Publish workflow, creating a version snapshot Source: https://docs.everstack.ai/api-reference/workflows/publish-workflow-creating-a-version-snapshot Publish workflow, creating a version snapshot #### Metadata ```yaml title: "POST Publish workflow, creating a version snapshot" description: "Publish workflow, creating a version snapshot" full: true ```

Publish workflow, creating a version snapshot

POST {"/v1/workflows/{id}/publish"}

Request

```bash curl -X POST "http://localhost:8089/v1/workflows/{id}/publish" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{id}/publish", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/workflows/{id}/publish", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "workflow": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string" } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true, "version": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" }, "publishedVersion": 0 } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Publish workflow | Property | Type | Description | |----------|------|-------------| | `workflow` | `object` | | | `publishedVersion` | `integer` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Replay a past workflow execution with the same inputs Source: https://docs.everstack.ai/api-reference/workflows/replay-a-past-workflow-execution-with-the-same-inputs Replay a past workflow execution with the same inputs #### Metadata ```yaml title: "POST Replay a past workflow execution with the same inputs" description: "Replay a past workflow execution with the same inputs" full: true ```

Replay a past workflow execution with the same inputs

POST {"/v1/workflows/executions/{executionId}/replay"}

Request

```bash curl -X POST "http://localhost:8089/v1/workflows/executions/{executionId}/replay" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/executions/{executionId}/replay", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/workflows/executions/{executionId}/replay", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "result": { "type": "string", "nodeId": "string", "nodeType": "string", "nodeLabel": "string", "error": "string", "durationMs": "string", "timestamp": "string", "chunkContent": "string" }, "error": { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `executionId` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Replay a workflow execution | Property | Type | Description | |----------|------|-------------| | `result` | `object` | | | `error` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PUT Save workflow draft without creating a version event Source: https://docs.everstack.ai/api-reference/workflows/save-workflow-draft-without-creating-a-version-event Save workflow draft without creating a version event #### Metadata ```yaml title: "PUT Save workflow draft without creating a version event" description: "Save workflow draft without creating a version event" full: true ```

Save workflow draft without creating a version event

PUT {"/v1/workflows/{id}/draft"}

Request

```bash curl -X PUT "http://localhost:8089/v1/workflows/{id}/draft" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","nodes":[{"id":"string","type":"string","label":"string","position":{"x":0,"y":0}}],"edges":[{"id":"string","source":"string","target":"string","sourceHandle":"string","targetHandle":"string"}],"viewport":{"x":0,"y":0,"zoom":0}}' ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{id}/draft", { method: "PUT", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string", "position": { "x": 0, "y": 0 } } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 } }), }); const data = await response.json(); ``` ```python import requests response = requests.put( "http://localhost:8089/v1/workflows/{id}/draft", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string", "position": { "x": 0, "y": 0 } } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 } }, ) data = response.json() ```

Response

```json { "workflow": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string" } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true, "version": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `nodes` | `object[]` | No | | | `edges` | `object[]` | No | | | `viewport` | `object` | No | | ### Responses #### 200 Save workflow draft | Property | Type | Description | |----------|------|-------------| | `workflow` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### POST Unpublish workflow (move back to draft) Source: https://docs.everstack.ai/api-reference/workflows/unpublish-workflow-move-back-to-draft Unpublish workflow (move back to draft) #### Metadata ```yaml title: "POST Unpublish workflow (move back to draft)" description: "Unpublish workflow (move back to draft)" full: true ```

Unpublish workflow (move back to draft)

POST {"/v1/workflows/{id}/unpublish"}

Request

```bash curl -X POST "http://localhost:8089/v1/workflows/{id}/unpublish" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string"}' ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{id}/unpublish", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string" }), }); const data = await response.json(); ``` ```python import requests response = requests.post( "http://localhost:8089/v1/workflows/{id}/unpublish", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string" }, ) data = response.json() ```

Response

```json { "workflow": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string" } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true, "version": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | ### Responses #### 200 Unpublish workflow | Property | Type | Description | |----------|------|-------------| | `workflow` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### PATCH Update Workflow Source: https://docs.everstack.ai/api-reference/workflows/update-workflow #### Metadata ```yaml title: "PATCH Update Workflow" full: true ```

Update Workflow

PATCH {"/v1/workflows/{id}"}

Request

```bash curl -X PATCH "http://localhost:8089/v1/workflows/{id}" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"tenantId":"string","name":"string","description":"string","nodes":[{"id":"string","type":"string","label":"string","position":{"x":0,"y":0}}],"edges":[{"id":"string","source":"string","target":"string","sourceHandle":"string","targetHandle":"string"}],"viewport":{"x":0,"y":0,"zoom":0},"enabled":true}' ``` ```js const response = await fetch("http://localhost:8089/v1/workflows/{id}", { method: "PATCH", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string", "position": { "x": 0, "y": 0 } } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true }), }); const data = await response.json(); ``` ```python import requests response = requests.patch( "http://localhost:8089/v1/workflows/{id}", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json", }, json={ "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string", "position": { "x": 0, "y": 0 } } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true }, ) data = response.json() ```

Response

```json { "workflow": { "id": "string", "tenantId": "string", "name": "string", "description": "string", "nodes": [ { "id": "string", "type": "string", "label": "string" } ], "edges": [ { "id": "string", "source": "string", "target": "string", "sourceHandle": "string", "targetHandle": "string" } ], "viewport": { "x": 0, "y": 0, "zoom": 0 }, "enabled": true, "version": 0, "createdAt": "2024-01-01T00:00:00Z", "updatedAt": "2024-01-01T00:00:00Z" } } ``` ```json { "code": 0, "message": "string", "details": [ { "@type": "string" } ] } ```
### Parameters | Name | In | Type | Required | Description | |------|-----|------|----------|-------------| | `id` | path | `string` | **Yes** | | ### Request Body | Property | Type | Required | Description | |----------|------|----------|-------------| | `tenantId` | `string` | No | | | `name` | `string` | No | | | `description` | `string` | No | | | `nodes` | `object[]` | No | | | `edges` | `object[]` | No | | | `viewport` | `object` | No | | | `enabled` | `boolean` | No | | ### Responses #### 200 Update workflow | Property | Type | Description | |----------|------|-------------| | `workflow` | `object` | | #### default An unexpected error response. | Property | Type | Description | |----------|------|-------------| | `code` | `integer` | | | `message` | `string` | | | `details` | `object[]` | |
--- ### evs config Source: https://docs.everstack.ai/cli/config Manage CLI profiles, contexts, and configuration values. #### Metadata ```yaml title: evs config description: Manage CLI profiles, contexts, and configuration values. icon: Settings ``` ## What it does `evs config` manages named profiles (contexts) that hold your CLI settings: API endpoint, org, workspace, output format, and transport. Each profile is independent, so you can switch between cloud, self-hosted, and staging environments with a single command. Config is stored at `~/.config/everstack/config.yaml`. ## Subcommands ### set ```bash evs config set ``` Sets a value in the active profile. ```bash evs config set api_url https://api.your-domain.com evs config set org my-org evs config set workspace staging evs config set output json ``` **Valid keys:** | Key | Description | |---|---| | `api_url` | Everstack API base URL | | `org` | Default organization slug | | `workspace` | Default workspace slug | | `output` | Default output format: `table`, `json`, `yaml`, `wide` | | `transport` | API transport: `grpc` (default) or `rest` | ### get ```bash evs config get ``` Prints the value of a single config key from the active profile. ```bash evs config get api_url # https://api.your-domain.com ``` ### list ```bash evs config list ``` Prints the resolved config for the active profile, including values from environment variables and defaults. ```yaml api_url: https://api.your-domain.com context: default org: my-org output: table transport: grpc workspace: "" ``` ### use-context ```bash evs config use-context ``` Switches the active profile. Creates the profile if it does not exist. ```bash evs config use-context prod evs config use-context staging ``` ### current-context ```bash evs config current-context ``` Prints the active context name and a summary of its resolved settings. ``` Context: prod API URL: https://api.your-domain.com Org: my-org Workspace: production Output: table ``` ## Named profiles Each profile stores a set of connection and display settings. A typical multi-environment setup: ```yaml # ~/.config/everstack/config.yaml active_context: prod contexts: default: api_url: https://api.your-domain.com org: my-org prod: api_url: https://api.your-domain.com org: my-org workspace: production output: json staging: api_url: https://staging-api.your-domain.com org: my-org workspace: staging ``` Switch between them: ```bash evs config use-context staging evs sandbox list evs config use-context prod evs sandbox list ``` ## Resolution order Settings are resolved in this order (higher wins): 1. Explicit flag (e.g. `--api-url`, `--org`) 2. Environment variable (e.g. `EVS_API_URL`, `EVS_ORG`) 3. Active profile value from `~/.config/everstack/config.yaml` 4. Built-in default (where the setting has one) There is no built-in API endpoint. A context gets its endpoint from `evs login --api-url`, `evs config set api_url`, or `EVS_API_URL`. ## Environment variables | Variable | Equivalent config key | Description | |---|---|---| | `EVS_API_URL` | `api_url` | Override the API endpoint | | `EVS_ORG` | `org` | Override the active organization | | `EVS_WORKSPACE` | `workspace` | Override the active workspace | | `EVS_OUTPUT` | `output` | Override the output format | | `EVS_TRANSPORT` | `transport` | Override the transport (`grpc` or `rest`) | Credentials (tokens and API keys) are stored separately in `~/.config/everstack/credentials`, not in this config file. See [evs login](https://docs.everstack.ai/cli/login) for details. --- ### CLI Reference Source: https://docs.everstack.ai/cli Everstack command-line interface reference. #### Metadata ```yaml title: CLI Reference description: Everstack command-line interface reference. icon: TerminalSquare ``` The Everstack CLI (`evs`) is a cloud-provider-style tool for managing your Everstack resources from the terminal. Install it, authenticate once, and control agents, sandboxes, deployments, and more. ```bash evs --help ``` ## Commands Authenticate, log out, and check your current identity. Manage named profiles, contexts, and configuration values. Create, inspect, exec into, and manage sandbox environments. ### Self-hosted operator commands Start the Everstack server with all platform services. Run database migrations for PostgreSQL and ClickHouse. ## Installation ```bash curl -fsSL https://get.everstack.ai/install.sh | bash ``` Or with Homebrew: ```bash brew install everstacklabs/tap/evs ``` See [installation](https://docs.everstack.ai/getting-started/installation) for options and manual install steps. ## Global flags These flags are available on every command: | Flag | Description | |---|---| | `--no-update-check` | Disable automatic update checks (env: `EVS_NO_UPDATE_CHECK`) | | `--config` | Path to a server config YAML file (repeatable; self-hosted operator use) | | `--help` / `-h` | Help for any command | | `--version` / `-v` | Print version and exit | ## Authentication Run `evs login --api-url ` once. The `sandbox` and `memory` commands then use the endpoint and credential saved for the active context automatically. The `sandbox` and `memory` commands also accept per-command connection overrides: | Flag | Description | |---|---| | `--api-key` | API key (env: `EVS_API_KEY`) | | `--api-url` | API server URL (env: `EVS_API_URL`) | | `--tenant-id` | Tenant ID override | See [evs login](https://docs.everstack.ai/cli/login) for browser and API-key authentication. --- ### evs login Source: https://docs.everstack.ai/cli/login Authenticate the Everstack CLI with your account. #### Metadata ```yaml title: evs login description: Authenticate the Everstack CLI with your account. icon: KeyRound ``` ## What it does `evs login` authenticates your CLI session against an Everstack instance. Interactive login uses browser-based OAuth Authorization Code with PKCE. On a headless machine, `--device` uses the Device Authorization Grant instead. For CI and automation, use `--api-key` to skip the browser. The first login for a context needs the API URL for the instance you want to manage. Once login succeeds, the CLI saves that endpoint with the context, so subsequent commands do not need `--api-url` or `--api-key`. Related commands: `evs logout`, `evs whoami`. ## Basic usage ```bash # Browser flow (recommended for interactive use) evs login --api-url https://api.your-domain.com # API key (CI / scripts) evs login --api-url https://api.your-domain.com --api-key evs_... # Headless device flow evs login --api-url https://api.your-domain.com --device # After the endpoint has been saved for this context evs login ``` ## Device authorization flow ``` $ evs login --api-url https://api.your-domain.com --device Open this URL in your browser: https://everstack.ai/device Enter code: ABCD-1234 Waiting for authorization... Logged in as you@example.com (your-org) ``` 1. The CLI calls the selected Everstack instance and receives a user code and verification URL. 2. Your browser opens automatically (or you open the URL manually). 3. Sign in and enter the code on the page. The CLI polls in the background. 4. Once approved, your access token is stored in `~/.config/everstack/credentials` with `0600` permissions. ## Flags | Flag | Default | Description | |---|---|---| | `--api-key` | | Authenticate with an existing API key instead of the browser flow | | `--api-url` | Active context | Everstack instance API endpoint (env: `EVS_API_URL`; required when the context has no saved endpoint) | | `--device` | `false` | Use the device authorization flow for a headless environment | ## Environment variables | Variable | Description | |---|---| | `EVS_API_KEY` | Equivalent to `--api-key`. Useful in CI without storing the key in shell history. | | `EVS_API_URL` | Select the Everstack instance API endpoint. | ## Credential storage Tokens are stored in `~/.config/everstack/credentials` as JSON with `0600` permissions. Browser login stores a rotating refresh credential and short-lived access token; device and API-key login retain their corresponding credential. The file is keyed by context name (default: `default`). Secrets are never written to `~/.config/everstack/config.yaml`. To use a different named profile, set the active context first: `evs config use-context prod`, then run `evs login`. ## Logout ```bash evs logout # If the server is offline, forget only the local credential evs logout --local ``` For OAuth browser logins, this revokes the refresh credential before removing the active context's local credential. Device and API-key logins perform a best-effort server sign-out and then forget the local credential; logging out does not delete or rotate an API key. If the server is offline and you intentionally want to skip revocation, use `--local`. ## whoami ```bash evs whoami ``` Prints the authenticated identity without making changes. ``` FIELD VALUE User you@example.com User ID usr_abc123 Org your-org Org ID org_xyz456 Endpoint https://api.your-domain.com Context default ``` --- ### evs migrate Source: https://docs.everstack.ai/cli/migrate Run database migrations for PostgreSQL and ClickHouse. #### Metadata ```yaml title: evs migrate description: Run database migrations for PostgreSQL and ClickHouse. icon: ArrowUpDown ``` ## What it does `evs migrate` manages database schema changes for PostgreSQL and ClickHouse. It applies versioned migration files in order, tracks which migrations have run, and supports rolling back. Always run migrations before starting the server for the first time, and again after every upgrade. This command is for self-hosted deployments only. ## Basic usage ```bash # Apply all pending migrations for both databases evs migrate postgres up evs migrate clickhouse up # Check migration status evs migrate postgres status evs migrate clickhouse status # Roll back the most recent migration evs migrate postgres down evs migrate clickhouse down ``` ## Commands Migrations are run per-database. The two subcommand groups are `postgres` and `clickhouse`, each with the same set of operations. ### up ```bash evs migrate postgres up evs migrate clickhouse up ``` Applies all pending migrations in order. If the database is already up to date, the command exits successfully without making changes. ### down ```bash evs migrate postgres down evs migrate clickhouse down ``` Rolls back the most recent migration. Rolling back can cause data loss if the down migration drops tables or columns. Always review what a migration does before running it in production. ### status ```bash evs migrate postgres status evs migrate clickhouse status ``` Shows the current migration version and any pending migrations. ## Running before first serve ```bash # 1. Set database connections export EVS_DATABASE_URL="postgres://everstack:changeme@localhost:5432/everstack?sslmode=disable" export EVS_CLICKHOUSE_URL="clickhouse://localhost:9000/everstack" # 2. Apply migrations evs migrate postgres up evs migrate clickhouse up # 3. Start the server evs serve ``` ## Upgrade workflow When upgrading to a new version, run migrations before restarting the server: ```bash evs migrate postgres up evs migrate clickhouse up evs serve ``` ## Version tracking Each database maintains a `schema_migrations` table. Migration versions are timestamps in `YYYYMMDDHHMMSS` format applied in ascending order. ## Configuration Migration commands read database connection strings from the same config file and environment variables as `evs serve`: ```bash evs migrate postgres up --config /etc/everstack/config.yaml ``` See [evs serve](https://docs.everstack.ai/cli/serve) for the full configuration reference. --- ### evs sandbox Source: https://docs.everstack.ai/cli/sandbox Create, manage, and connect to Everstack sandbox environments from the CLI. #### Metadata ```yaml title: evs sandbox description: Create, manage, and connect to Everstack sandbox environments from the CLI. icon: Container ``` ## What it does `evs sandbox` manages isolated execution environments: creating them from images or templates, inspecting their state, streaming logs, executing commands, and connecting via SSH. ## Authentication Run `evs login` once and sandbox commands automatically use the active context's saved endpoint and credential. Connection flags remain available as per-command overrides. ```bash # After evs login, no flags needed evs sandbox list # Optional one-command override evs sandbox list --api-key --api-url https://api.your-domain.com ``` ## Commands ### create ```bash evs sandbox create [flags] ``` Creates a new sandbox instance. | Flag | Description | |---|---| | `--name` | Friendly sandbox name | | `--template` | Template ID or slug | | `--image` | Container image | | `--from-github` | GitHub repo (`owner/repo`) to clone into the sandbox | | `--git-repo-url` | Git repository URL to clone | | `--git-branch` | Git branch to clone | | `--git-installation-id` | GitHub App installation ID | | `--cpu` | CPU limit | | `--memory-mb` | Memory in MB | | `--disk-mb` | Disk in MB | | `--network-mode` | `deny`, `whitelist`, or `allow` | | `--timeout-seconds` | Execution timeout | | `--idle-retention-seconds` | Idle retention (0 = plan default) | | `--session-id` | Custom session ID (auto-generated when omitted) | | `--ssh-enabled` | Request SSH access | ```bash evs sandbox create --template node-22 --name my-sandbox evs sandbox create --image ubuntu:24.04 --memory-mb 2048 evs sandbox create --from-github myorg/myrepo --git-branch main ``` ### list ```bash evs sandbox list [flags] ``` Lists sandbox instances. | Flag | Description | |---|---| | `--status` | Filter by status: `pending`, `running`, `stopped`, `failed` | | `--limit` | Max results (default 50) | | `--offset` | Result offset | ```bash evs sandbox list evs sandbox list --status running evs sandbox list --json ``` ### get ```bash evs sandbox get ``` Shows full details for a single sandbox. ### overview ```bash evs sandbox overview ``` Shows a summary of the entire sandbox subsystem: counts by status, quota usage, and recent activity. ### logs ```bash evs sandbox logs [flags] ``` Streams sandbox logs. | Flag | Description | |---|---| | `--follow` | Follow the log stream (default true) | | `--session-id` | Session ID override | ```bash evs sandbox logs abc123 evs sandbox logs abc123 --follow=false # print existing logs and exit ``` ### stats ```bash evs sandbox stats [flags] ``` Shows CPU, memory, and network stats for a running sandbox. | Flag | Description | |---|---| | `--watch` | Stream stats continuously | | `--session-id` | Session ID override | ### events ```bash evs sandbox events [flags] ``` Lists or streams lifecycle events for a sandbox. | Flag | Description | |---|---| | `--follow` | Stream events as they arrive | | `--event-type` | Filter by event type | | `--limit` | Max results (default 50) | | `--offset` | Result offset | ### exec ```bash evs sandbox exec -- [flags] ``` **Coming soon.** The exec endpoint is not yet wired. Use `evs sandbox ssh` to run commands interactively. Executes a command inside a running sandbox and returns the output. | Flag | Description | |---|---| | `--work-dir` | Working directory inside the sandbox | | `--env` | Environment variables (`KEY=VALUE`, repeatable) | | `--timeout-seconds` | Command timeout | ```bash evs sandbox exec abc123 -- ls /app evs sandbox exec abc123 --work-dir /app --env NODE_ENV=test -- npm test ``` ### ssh ```bash evs sandbox ssh [flags] ``` Opens an interactive shell to a sandbox. Connects via WebSocket through the API port by default (firewall-friendly). SSH keys are discovered from the SSH agent and `~/.ssh/id_ed25519`, `~/.ssh/id_ecdsa`, `~/.ssh/id_rsa` automatically. | Flag | Description | |---|---| | `--identity-file` | Explicit SSH private key path | | `--direct-ssh` | Use the SSH proxy directly (requires TCP access to port 2223) | | `--dry-run` | Print the SSH command without running it (only with `--direct-ssh`) | ```bash evs sandbox ssh abc123 evs sandbox ssh my-sandbox --identity-file ~/.ssh/id_ed25519 evs sandbox ssh abc123 --direct-ssh --dry-run ``` ### ssh-info ```bash evs sandbox ssh-info ``` Prints SSH connection details (host, port, username, key fingerprint) without connecting. ### shell ```bash evs sandbox shell ``` **Coming soon.** Use `evs sandbox ssh` for interactive shell access today. ### stop / revive / terminate ```bash evs sandbox stop evs sandbox revive evs sandbox terminate ``` **Coming soon.** These lifecycle commands are not yet wired to the backend. Use `evs sandbox destroy` to remove a sandbox now. ### destroy ```bash evs sandbox destroy ``` Destroys a sandbox and removes its session. Not recoverable. ### recreate ```bash evs sandbox recreate ``` Recreates a sandbox from its stored configuration. Useful when a sandbox has expired or been destroyed but you want to restart it with the same settings. ## Port management ### ports list ```bash evs sandbox ports list ``` Lists exposed ports for a sandbox. ### ports expose ```bash evs sandbox ports expose [flags] ``` Exposes a port on a running sandbox via a public subdomain. | Flag | Description | |---|---| | `--protocol` | Protocol: `http` (default) | | `--session-id` | Session ID override | ```bash evs sandbox ports expose abc123 3000 evs sandbox ports expose abc123 8080 --protocol http ``` ### ports unexpose ```bash evs sandbox ports unexpose ``` Closes a previously exposed port. ### ports detect ```bash evs sandbox ports detect ``` Auto-detects ports that are actively listening inside the sandbox. ## SSH key management ### ssh-keys list ```bash evs sandbox ssh-keys list ``` Lists SSH public keys registered for sandbox access. ### ssh-keys add ```bash evs sandbox ssh-keys add ``` Adds an SSH public key for sandbox access. ### ssh-keys delete ```bash evs sandbox ssh-keys delete ``` Removes an SSH key. ## Common flags These flags are available on all `evs sandbox` subcommands: | Flag | Default | Description | |---|---|---| | `--api-key` | Active login | API key override (env: `EVS_API_KEY`) | | `--api-url` | Active context | API server URL override (env: `EVS_API_URL`) | | `--tenant-id` | | Tenant ID override | | `--timeout` | `30s` | Request timeout | | `--json` | | Output raw JSON | --- ### evs serve Source: https://docs.everstack.ai/cli/serve Start the Everstack server with all platform services. #### Metadata ```yaml title: evs serve description: Start the Everstack server with all platform services. icon: Play ``` ## What it does `evs serve` starts the Everstack server process. This single command boots the gateway, API server, and agent runtime, everything needed to run the platform. It reads configuration from a YAML file and environment variables, opens the configured port, and begins serving requests. This command is for self-hosted deployments. If you are using Everstack Cloud, you do not run `evs serve`. ## Basic usage ```bash # Start with default settings evs serve # Start with a specific config file evs serve --config /etc/everstack/config.yaml # Start on a custom port evs serve --port 9090 ``` The server listens on port `8089` by default and serves both gRPC and HTTP traffic. ## Flags | Flag | Default | Description | |---|---|---| | `--port` | `8089` | Port to listen on | | `--customDomain` | | Custom domain for this instance (e.g. `https://mydomain.com`) | | `--customPort` | | Custom port override | | `--info` | | Print instance information and exit | | `--config` | | Path to config YAML file (repeatable) | ## Configuration Everstack loads configuration in the following order (later sources override earlier ones): 1. Built-in defaults 2. Config file (`--config` flag) 3. Environment variables with the `EVS_` prefix ### Config file ```yaml title="everstack.yaml" server: port: 8089 database: url: "postgres://everstack:changeme@localhost:5432/everstack?sslmode=disable" clickhouse: url: "clickhouse://localhost:9000/everstack" redis: url: "redis://localhost:6379" auth: secret: "your-auth-secret" log: level: info format: json ``` ### Environment variables Every config field can be set via an environment variable. The mapping uses the `EVS_` prefix with underscores for nested keys: | Variable | Config equivalent | Description | |---|---|---| | `EVS_SERVER_PORT` | `server.port` | Port to listen on | | `EVS_DATABASE_URL` | `database.url` | Postgres connection string | | `EVS_CLICKHOUSE_URL` | `clickhouse.url` | ClickHouse connection string | | `EVS_REDIS_URL` | `redis.url` | Redis connection string | | `EVS_AUTH_SECRET` | `auth.secret` | Secret for signing tokens | | `EVS_LOG_LEVEL` | `log.level` | Log verbosity: `debug`, `info`, `warn`, `error` | | `EVS_LOG_FORMAT` | `log.format` | Log format: `json` or `text` | Environment variables take precedence over config file values. ## Signals The server handles SIGTERM and SIGINT gracefully: it stops accepting new connections, drains in-flight requests, then exits. `Ctrl+C` and `docker stop` both trigger a clean shutdown. ## Verifying the server is running ```bash curl http://localhost:8089/healthz ``` A `200 OK` response means all services are ready. --- ### Database Setup Source: https://docs.everstack.ai/deployment/database-setup PostgreSQL and ClickHouse configuration for Everstack. #### Metadata ```yaml title: Database Setup description: PostgreSQL and ClickHouse configuration for Everstack. icon: Database ``` ## Hybrid storage model Everstack uses two databases, each optimized for a different workload: | Database | Stores | Why | | --- | --- | --- | | **PostgreSQL** | Users, tenants, agents, configs, sessions, jobs | Relational integrity, ACID transactions | | **ClickHouse** | Traces, spans, analytics events, logs | Columnar compression, fast aggregation over billions of rows | This is the **hybrid** mode and it is the default. You can also run in Postgres-only mode, but you lose analytics, trace search, and log aggregation. ## PostgreSQL setup ### Version and extensions Everstack requires PostgreSQL 15 or later. The following extensions must be available: - `uuid-ossp` -- UUID generation for primary keys - `pgcrypto` -- Cryptographic functions for token hashing Optional but recommended: - `pgvector` -- Vector similarity search for agent memory Create the database and enable extensions: ```sql CREATE DATABASE everstack; \c everstack CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pgcrypto"; -- Optional: for agent memory vector search CREATE EXTENSION IF NOT EXISTS "vector"; ``` ### Connection string The Postgres connection string follows the standard URI format: ``` postgres://user:password@host:5432/everstack?sslmode=require ``` Set it via the config file or environment variable: ```bash export EVS_DATABASE_URL="postgres://everstack:changeme@localhost:5432/everstack?sslmode=disable" ``` For production, always use `sslmode=require` or `sslmode=verify-full`. ### Connection pooling Everstack manages its own connection pool internally. The defaults work for most deployments. For large clusters with many gateway replicas, consider placing PgBouncer in front of Postgres to limit total backend connections. ## ClickHouse setup ### Version ClickHouse 24.1 or later is recommended. Everstack uses the native protocol (port `9000`) for writes and the HTTP interface (port `8123`) for health checks. ### Creating the database ```sql CREATE DATABASE IF NOT EXISTS everstack; ``` Everstack creates all required tables automatically when migrations run. You do not need to create tables manually. ### Connection string ``` clickhouse://host:9000/everstack ``` Set it via config or environment variable: ```bash export EVS_CLICKHOUSE_URL="clickhouse://localhost:9000/everstack" ``` For authenticated ClickHouse instances: ``` clickhouse://user:password@host:9000/everstack?secure=true ``` ## Database modes ### Hybrid mode (default) Both Postgres and ClickHouse are required. This is the recommended mode for production. ```yaml title="everstack.yaml" database: mode: hybrid url: "postgres://..." clickhouse: url: "clickhouse://..." ``` ### Postgres-only mode Only Postgres is required. Analytics, traces, and log queries will be unavailable. ```yaml title="everstack.yaml" database: mode: postgres url: "postgres://..." ``` Postgres-only mode is useful for evaluation and development. For production workloads with observability features, use hybrid mode. ## Running migrations After setting up your databases, run migrations before starting the server: ```bash # Migrate both databases (hybrid mode) everstack migrate up # Migrate only Postgres everstack migrate up --target postgres # Migrate only ClickHouse everstack migrate up --target clickhouse ``` Migrations are idempotent. Running them multiple times is safe. See [everstack migrate](https://docs.everstack.ai/cli/migrate) for the full reference. ## What goes where Understanding the split helps when planning backups and capacity: | PostgreSQL (small, critical) | ClickHouse (large, append-heavy) | | --- | --- | | Tenant and user accounts | LLM call traces and spans | | Agent definitions and configs | Token usage analytics | | Session history and messages | Audit logs | | Job queue and results | Performance metrics | | API keys and secrets | Evaluation run results | PostgreSQL data is small but critical -- back it up frequently. ClickHouse data grows fast but can be rebuilt from source if needed. ## Backup considerations **PostgreSQL:** Use `pg_dump` or continuous archiving (WAL-G, pgBackRest) for point-in-time recovery. Back up at least daily in production. ```bash pg_dump -Fc everstack > everstack_backup.dump ``` **ClickHouse:** Use `clickhouse-backup` or the built-in `BACKUP` command. ClickHouse data is append-heavy, so incremental backups work well. ```sql BACKUP DATABASE everstack TO Disk('backups', 'everstack_backup'); ``` Always test your backup restoration process before relying on it. An untested backup is not a backup. --- ### Docker Source: https://docs.everstack.ai/deployment/docker Deploy Everstack with Docker Compose for local and small-scale environments. #### Metadata ```yaml title: Docker description: Deploy Everstack with Docker Compose for local and small-scale environments. icon: Container ``` ## When to use Docker Docker Compose is the fastest way to get Everstack running. It works well for local development, evaluation, and small production deployments serving a single team. If you need horizontal scaling, high availability, or multi-node redundancy, use [Kubernetes](https://docs.everstack.ai/deployment/kubernetes) instead. ## Prerequisites - Docker Engine 24+ and Docker Compose v2 - At least 4 GB of available RAM (8 GB recommended) - 20 GB of free disk space for persistent volumes ## Services overview The Compose stack includes the following services: | Service | Description | Default port | | --- | --- | --- | | `everstack` | Main server (gateway, API, agent runtime) | `8089` | | `postgres` | Metadata store (users, agents, configs) | `5432` | | `clickhouse` | Analytics, traces, and log storage | `9000` / `8123` | | `redis` | Optional caching and rate limiting | `6379` | ## Getting started Create a `docker-compose.yml` in your project directory: ```yaml title="docker-compose.yml" version: "3.9" services: postgres: image: postgres:16 environment: POSTGRES_USER: everstack POSTGRES_PASSWORD: changeme POSTGRES_DB: everstack volumes: - pgdata:/var/lib/postgresql/data ports: - "5432:5432" clickhouse: image: clickhouse/clickhouse-server:24.3 volumes: - chdata:/var/lib/clickhouse ports: - "8123:8123" - "9000:9000" redis: image: redis:7-alpine ports: - "6379:6379" everstack: image: ghcr.io/everstacklabs/everstack:latest ports: - "8089:8089" environment: EVS_DATABASE_URL: "postgres://everstack:changeme@postgres:5432/everstack?sslmode=disable" EVS_CLICKHOUSE_URL: "clickhouse://clickhouse:9000/everstack" EVS_REDIS_URL: "redis://redis:6379" depends_on: - postgres - clickhouse - redis volumes: pgdata: chdata: ``` ## Configuration All Everstack settings can be set through environment variables with the `EVS_` prefix. Add them to the `environment` block of the `everstack` service. ```yaml environment: EVS_DATABASE_URL: "postgres://everstack:changeme@postgres:5432/everstack?sslmode=disable" EVS_CLICKHOUSE_URL: "clickhouse://clickhouse:9000/everstack" EVS_REDIS_URL: "redis://redis:6379" EVS_AUTH_SECRET: "your-secret-key" EVS_LOG_LEVEL: "info" ``` You can also mount a YAML config file: ```yaml volumes: - ./everstack.yaml:/etc/everstack/config.yaml ``` See [everstack serve](https://docs.everstack.ai/cli/serve) for the full list of configuration options. ## Persistent volumes Both Postgres and ClickHouse use named volumes (`pgdata`, `chdata`) so data survives container restarts. Back up these volumes regularly in production. You can inspect volume locations with `docker volume inspect`. Never use `docker compose down -v` in production. The `-v` flag deletes all named volumes and permanently removes your data. ## Running migrations Before starting Everstack for the first time, run migrations to set up the database schema: ```bash docker compose run --rm everstack migrate up ``` See [everstack migrate](https://docs.everstack.ai/cli/migrate) for more details on migration commands. ## Starting and stopping ```bash # Start all services in the background docker compose up -d # View logs docker compose logs -f everstack # Stop all services (data is preserved) docker compose down ``` ## Health checks The Everstack server exposes a health endpoint at `/healthz`. You can verify the server is running: ```bash curl http://localhost:8089/healthz ``` To add a Docker health check to the Compose file: ```yaml everstack: healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8089/healthz"] interval: 10s timeout: 5s retries: 3 ``` ## Upgrading To upgrade to a new version: ```bash # Pull the latest image docker compose pull everstack # Run any new migrations docker compose run --rm everstack migrate up # Restart with the new image docker compose up -d ``` Always run migrations before restarting the server. Everstack migrations are idempotent, so running them on an already up-to-date database is safe. --- ### Deployment Source: https://docs.everstack.ai/deployment Deploy Everstack to production with Docker, Kubernetes, or bare metal. #### Metadata ```yaml title: Deployment description: Deploy Everstack to production with Docker, Kubernetes, or bare metal. icon: Cloud ``` Everstack can be deployed anywhere, from a single Docker container to a Kubernetes cluster. This section covers production deployment patterns for all environments. Docker images, compose files, and container deployment. Kubernetes deployment patterns and scaling strategies. PostgreSQL and ClickHouse configuration for production. --- ### Kubernetes Source: https://docs.everstack.ai/deployment/kubernetes Deploy Everstack on Kubernetes with Helm charts for production workloads. #### Metadata ```yaml title: Kubernetes description: Deploy Everstack on Kubernetes with Helm charts for production workloads. icon: Server ``` ## When to use Kubernetes Use Kubernetes when you need horizontal scaling, high availability, or multi-tenant isolation. Everstack ships a Helm chart that deploys the full platform -- gateway, API server, and agent runtime -- with built-in support for autoscaling, secrets management, and network policies. For simpler setups, see [Docker](https://docs.everstack.ai/deployment/docker). ## Prerequisites - Kubernetes 1.27+ cluster (k3s, EKS, GKE, or AKS all work) - Helm 3.12+ - `kubectl` configured to access your cluster - PostgreSQL 15+ and ClickHouse 24+ (managed services or in-cluster). See [Database Setup](https://docs.everstack.ai/deployment/database-setup). ## Helm chart installation Add the Everstack Helm repository and install: ```bash helm repo add everstack https://charts.everstack.ai helm repo update helm install everstack everstack/everstack \ --namespace everstack \ --create-namespace \ -f values.yaml ``` Or install from a local chart archive: ```bash helm install everstack ./everstack-chart.tgz \ --namespace everstack \ --create-namespace \ -f values.yaml ``` ## Key values.yaml settings ```yaml title="values.yaml" # Server configuration server: replicaCount: 2 image: repository: ghcr.io/everstacklabs/everstack tag: latest # Database connections database: url: "postgres://everstack:changeme@postgres:5432/everstack?sslmode=require" clickhouse: url: "clickhouse://clickhouse:9000/everstack" redis: url: "redis://redis:6379" # Ingress ingress: enabled: true className: nginx hosts: - host: everstack.example.com paths: - path: / pathType: Prefix tls: - secretName: everstack-tls hosts: - everstack.example.com # Autoscaling autoscaling: enabled: true minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 70 ``` ## Service architecture The Helm chart deploys the following components: | Component | Role | Scaling | | --- | --- | --- | | Gateway | gRPC/HTTP ingress, routing, rate limiting | HPA (CPU-based) | | API Server | Business logic, authentication, tenant resolution | HPA (CPU-based) | | Agent Runtime | Sandbox orchestration, agent execution | Per-node or HPA | All components run as a single binary (`everstack serve`) by default. You can split them into separate deployments by setting the server mode in values: ```yaml server: mode: gateway-only # runs only the gateway ``` ## Scaling with HPA The chart includes a `HorizontalPodAutoscaler` for the gateway. Enable it in your values: ```yaml autoscaling: enabled: true minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 70 ``` The HPA scales gateway pods based on CPU utilization. For agent runtime scaling, consider dedicated node pools with appropriate resource requests. ## Secrets management Store sensitive values (database credentials, auth secrets) in Kubernetes secrets rather than plain values.yaml. The chart supports referencing existing secrets: ```yaml server: existingSecret: everstack-credentials ``` For production clusters, use Sealed Secrets or an external secrets operator to manage credentials safely in Git: ```bash kubeseal --format yaml < secret.yaml > sealed-secret.yaml ``` Never commit plain-text secrets to version control. Use sealed-secrets or an external secret store for all credentials. ## Network policies The chart can deploy `NetworkPolicy` resources to restrict traffic between pods. Enable them in values: ```yaml networkPolicy: enabled: true ``` This ensures only the gateway can reach the API server, and only the API server can reach the databases. ## Upgrades Upgrade to a new chart version with: ```bash # Run migrations first kubectl run everstack-migrate --rm -it \ --image=ghcr.io/everstacklabs/everstack:latest \ --restart=Never \ -- migrate up # Then upgrade the release helm upgrade everstack everstack/everstack \ --namespace everstack \ -f values.yaml ``` Helm performs a rolling update by default, so there is no downtime during the upgrade. ## Monitoring The chart exposes Prometheus metrics on the `/metrics` endpoint. If you run the kube-prometheus-stack, the chart can create a `ServiceMonitor` automatically: ```yaml metrics: enabled: true serviceMonitor: enabled: true ``` This gives you request latency, error rates, and resource utilization dashboards out of the box. --- ### Advanced Source: https://docs.everstack.ai/getting-started/agents/advanced Spawn trees, forks, context compaction, and digest bulletins. #### Metadata ```yaml title: Advanced description: Spawn trees, forks, context compaction, and digest bulletins. icon: Cpu ``` Everstack's agent runtime includes four advanced capabilities that extend what a single agent can do. Each is opt-in through agent configuration, so you only pay for the complexity you need. ## Job delegation Job delegation lets an agent hand off work to a sub-agent asynchronously. The parent agent continues its own work and checks back on the result later. This is useful when: - a task can be broken into independent pieces that run in parallel - the parent needs to stay responsive while a long-running sub-task completes - you want to specialize agents for different domains and compose them The parent uses `delegate_job` to queue structured work for another agent, then calls `check_job` to poll for completion. Results flow back through the `JobResultCh` channel into the parent's next loop iteration. Configure with `spawn.async: true` and `spawn.maxConcurrentJobs` in the agent config. ## Forking Forking creates independent branches of an agent's execution. Each fork starts with a copy of the current conversation context and runs autonomously from that point forward. Use forks when: - you want to explore multiple approaches to a problem simultaneously - a decision point has several viable paths and you want to evaluate all of them - you need to test different strategies before committing to one Fork results are collected and returned to the originating agent for synthesis. Configure with `fork.enabled: true` in the agent config. ## Context compaction Long agent sessions accumulate conversation history that eventually exceeds the model's context window. Context compaction manages this automatically using a three-tier system. The tiers activate based on how full the context window is: - **Background** (80% utilization): summarizes the oldest 30% of non-system messages using a lightweight summarization model - **Aggressive** (85% utilization): summarizes the oldest 60% of non-system messages - **Emergency** (95% utilization): hard-truncates to the system prompt plus the last 20 user messages, without an LLM call The summarization model is configurable (defaults to a fast, inexpensive model). System messages are always preserved across all tiers. Compaction is transparent to the agent. It sees the summarized context as part of its normal conversation history, so it can reference earlier work without knowing a summary replaced the raw messages. Configure with `monitor.enabled: true` in the agent config. ## Digest bulletins When multiple agents run concurrently in the same workspace, digest bulletins keep each agent informed about what the others are doing. A DigestManager aggregates activity across all active sessions and injects a short bulletin into each agent's context at the start of its next loop iteration. This is valuable when: - several agents work on related parts of a larger task - coordination matters but direct message passing would create too much overhead - you want situational awareness without tight coupling between agents Bulletins are lightweight summaries, not full message histories. They give each agent enough context to avoid duplicating work or conflicting with another agent's actions. Configure with `digest.enabled: true` in the agent config. ## Configuration summary All four features are opt-in. Enable them individually based on your use case: - `spawn.async: true` and `spawn.maxConcurrentJobs: N` for job delegation - `fork.enabled: true` for forking - `monitor.enabled: true` for context compaction - `digest.enabled: true` for digest bulletins These features compose well together. A persistent agent might use all four: delegating jobs to specialized sub-agents, forking to explore alternatives, compacting its own context as sessions grow long, and receiving digests about what its peers are doing. ## Next steps - Review [Tools](https://docs.everstack.ai/getting-started/agents/tools) for the delegation and fork tool interfaces. - See [Sessions](https://docs.everstack.ai/getting-started/agents/sessions) for how these features affect session state and streaming events. - Use the [Agents API](https://docs.everstack.ai/api-reference/agents) to configure these features programmatically. --- ### Approvals Center Source: https://docs.everstack.ai/getting-started/agents/approvals-center How the Approvals tab works for human review of sensitive agent actions. #### Metadata ```yaml title: Approvals Center description: How the Approvals tab works for human review of sensitive agent actions. icon: ClipboardCheck ``` The admin app includes a dedicated `Approvals` tab under `Deployments -> Agents` for human-in-the-loop review. Use it when an agent is allowed to plan or propose a sensitive action, but a human still needs to decide whether the action should actually run. ## What the Approvals tab does The `Approvals` tab is the operator inbox for agent actions that were paused by a human approval gate. It lets reviewers: - see all pending and resolved approval reviews in one place - inspect the exact tool call payload before anything executes - view the triggering session, turn, and nearby transcript context - approve or deny the action with an optional reviewer note - keep an audit trail of who resolved the review and why ## Where it lives In the admin UI, approvals are a top-level tab alongside: - `Agents` - `Sessions` - `Approvals` That means approval handling is no longer buried inside a session detail view. Operators can go straight to the queue and work through pending reviews. ## What reviewers see The page is split into two main areas. ### Review queue The left side shows a list of approval reviews with: - status - agent name - turn number - a short summary of the action the agent wants to take - request and expiry timing - inferred risk badges such as destructive, production, external, billing, or sensitive Pending reviews are sorted by expiry so urgent actions surface first. ### Review detail panel The right side shows the full context for the selected review, including: - agent and session identifiers - turn number and iteration - requested time, expiry, and default timeout action - the user request that led to the action - the assistant response before the run paused - nearby transcript turns for context - the exact tool calls and arguments awaiting approval - decision metadata after resolution ## Typical lifecycle The full flow looks like this: 1. A user message reaches the agent. 2. The model decides to call one or more tools. 3. Everstack checks those tool calls against the configured HITL approval rules. 4. If a tool call requires approval, the session moves into `waiting_for_approval`. 5. A review is created and appears in the `Approvals` tab. 6. A human reviewer opens the review and either approves or denies it. 7. The runtime resumes with that decision. ## What happens after a decision ### Approve If the reviewer approves the action: - the review is marked resolved - the session leaves `waiting_for_approval` - the blocked tool call is allowed to execute - the agent continues its turn normally ### Deny If the reviewer denies the action: - the review is marked denied - the blocked tool call is not executed - the runtime injects a denial result back into the conversation - the model can continue with that denial as context This gives the agent a chance to explain the denial, ask for a safer alternative, or choose a different action. ### Timeout If nobody resolves the review before the timeout expires, Everstack applies the configured default action. Depending on configuration, that default is usually either: - approve on timeout - deny on timeout ## Why this matters The Approvals Center is useful for actions where autonomy is helpful but fully automatic execution would be risky. Common examples: - deployment or production changes - destructive file or infrastructure operations - billing or customer-impacting actions - sending external communications - anything involving secrets, credentials, or admin access ## Good mental model Think of the Approvals tab as the point where the agent hands control to a human. The model can still reason, plan, and prepare the exact action. The human stays in charge of whether that action is allowed to cross the line into execution. ## Related pages - [Human-in-the-Loop](https://docs.everstack.ai/getting-started/agents/human-in-the-loop) - [Sessions](https://docs.everstack.ai/getting-started/agents/sessions) - [Tools](https://docs.everstack.ai/getting-started/agents/tools) --- ### Creating Agents Source: https://docs.everstack.ai/getting-started/agents/creating-agents Define, configure, and deploy AI agents. #### Metadata ```yaml title: Creating Agents description: Define, configure, and deploy AI agents. icon: Plus ``` Creating an agent means defining what it can do, how it behaves, and where it runs. Every agent starts as a definition -- a configuration object that specifies the model, system prompt, tools, constraints, and optional features like memory, HITL, and sandbox settings. You can create agents through the admin UI or programmatically via the API. Both paths produce the same agent definition. ## Core configuration Every agent definition includes these fields: **Identity** - **name** -- a human-readable name displayed in the admin UI and logs - **description** -- a short summary of what the agent does - **icon** -- an icon identifier for visual distinction in the UI - **color** -- a color for the agent's avatar and badges - **mention_alias** -- an `@mention` handle other agents can use to address this agent in multi-agent conversations **Execution** - **model** -- the language model to use (e.g. `claude-3-opus`, `claude-sonnet-4-20250514`) - **system_prompt** -- the core instructions that define the agent's behavior - **tools** -- an array of tool names the agent is allowed to call - **config** -- additional JSONB configuration for advanced features **Constraints** - **max_turns** -- maximum number of user-agent exchanges per session - **max_tool_calls_per_turn** -- caps how many tools the agent can call in a single turn - **max_steps** -- total iteration budget across the session - **working_directory** -- the default directory for sandbox file operations ## Agent mode Choose the mode based on how the agent will be used: - **Primary** (`AGENT_MODE_PRIMARY`) -- user-facing agents that receive messages directly. Most agents are primary. - **Sub-agent** (`AGENT_MODE_SUBAGENT`) -- agents spawned by other agents for delegated work. Sub-agents are not directly addressable by users and report results back to their parent. ## Lifecycle type The lifecycle type determines how long the agent's execution environment persists: **Ephemeral** (`EPHEMERAL`) -- the agent has no persistent environment. Each session starts clean. State is only preserved through the memory system. This is the default and works well for most conversational and task-based agents. **Persistent** (`PERSISTENT`) -- the agent gets a dedicated, fully isolated sandbox that survives across sessions. The sandbox retains its filesystem, installed packages, running processes, and any local state. When the agent is not actively running a turn, it moves to `idle`. It can be put to `sleeping` to stop the sandbox while preserving state, and wakes automatically when a new message arrives. Use persistent agents when the agent needs to maintain a development environment, run background processes, keep large datasets loaded, or preserve complex local state between conversations. ## Sandbox configuration Persistent agents require sandbox configuration: - **image** -- the base container image for the sandbox environment - **cpu_limit** -- CPU allocation (e.g. `1` for one vCPU) - **memory_mb** -- memory allocation in megabytes - **disk_mb** -- disk allocation in megabytes - **timeout_seconds** -- how long the sandbox stays alive without activity before sleeping - **network_mode** -- network access policy for the sandbox - **env_vars** -- environment variables injected into the sandbox at startup - **ssh_enabled** -- whether SSH access is available for debugging - **git_repo_url** -- a repository to clone into the sandbox at provision time These settings give you precise control over the agent's compute environment. Start conservative and scale up based on the agent's workload. ## Memory configuration Memory lets agents retain and recall information across sessions. When enabled, the agent can store facts, retrieve relevant context, and build knowledge over time. - **enabled** -- turn memory on or off - **scope** -- controls visibility: `agent` (private to this agent), `user` (shared across agents for the same user), or `global` (shared across all agents and users in the tenant) - **auto_retrieve** -- automatically query memory at the start of each turn and inject relevant results into context - **auto_retrieve_top_k** -- how many memory results to inject (controls context budget) - **auto_extract** -- automatically extract and store notable facts from conversation turns Auto-retrieve and auto-extract make memory work without requiring the agent to explicitly call memory tools. The runtime handles retrieval and extraction behind the scenes, so the agent benefits from accumulated knowledge without prompt engineering. ## Identity documents Beyond the system prompt, agents support four identity documents that are composed into the agent's context: - **soul_md** -- personality, values, tone, and behavioral guardrails - **identity_md** -- who the agent is, its expertise, and background - **user_md** -- context about the user the agent interacts with - **role_md** -- the specific role the agent plays in this deployment These documents let you separate concerns cleanly. The system prompt handles task instructions. Identity documents handle personality and context. This makes it easier to reuse the same base agent across different deployments with different personas. ## HITL configuration Human-in-the-loop approval gates are configured per agent: - **tools** -- an array of tool name patterns that require approval before execution - **timeout_seconds** -- how long to wait for a reviewer before applying the default action - **default_action** -- what happens if no reviewer responds (`approve` or `deny`) - **match_mode** -- how tool patterns are matched against tool names See [Human-in-the-Loop](https://docs.everstack.ai/getting-started/agents/human-in-the-loop) for a detailed walkthrough of approval flows. ## Creating via the admin UI The admin UI provides a multi-tab form for agent creation: 1. **General** -- name, description, icon, color, mention alias, mode, and lifecycle type 2. **Model & Prompt** -- model selection, system prompt, and identity documents 3. **Tools** -- browse and select from available tools, configure HITL rules 4. **Constraints** -- turn limits, step limits, tool call caps 5. **Memory** -- enable and configure memory scope, auto-retrieve, auto-extract 6. **Sandbox** -- image, resources, environment variables, SSH, git repo (persistent agents only) The form validates configuration as you go and shows warnings for common misconfigurations. ## Creating via the API Use the `CreateAgent` endpoint to create agents programmatically. This is useful for automated deployments, templated agent creation, or CI/CD pipelines that provision agents as part of infrastructure. See the [API Reference](https://docs.everstack.ai/api-reference/agents) for full endpoint documentation, request schemas, and examples. ## Deployment Once created, an agent definition is immediately available. Ephemeral agents are ready to receive sessions. Persistent agents begin provisioning their sandbox, moving through `provisioning` to `idle` once the environment is ready. You can update agent definitions at any time. Updates to tools, constraints, memory config, and identity documents take effect on the next session. Model and system prompt changes also apply to new sessions without requiring redeployment. --- ### Human-in-the-Loop Source: https://docs.everstack.ai/getting-started/agents/human-in-the-loop HITL approval gates for tool calls and agent actions. #### Metadata ```yaml title: Human-in-the-Loop description: HITL approval gates for tool calls and agent actions. icon: UserCheck ``` Human-in-the-loop, or HITL, lets you keep agents autonomous for most work while requiring a person to approve high-risk actions before they execute. In Everstack, HITL sits between tool planning and tool execution. That means the model can still: - understand the request - decide which tool it wants to call - prepare structured tool arguments But if the tool call matches an approval rule, the runtime pauses and waits for a reviewer. ## When to use HITL Use approval gates when an action is valuable to automate up to the decision point, but should not run fully unattended. Common cases include: - production deploys or restarts - destructive mutations such as delete, terminate, revoke, or drop - billing or subscription changes - outbound emails, webhooks, Slack messages, or other external communication - actions involving secrets, credentials, admin operations, or regulated data ## How it works at a high level The approval flow is: 1. the model proposes a tool call 2. Everstack evaluates that tool call against HITL policy 3. matching calls create an approval review 4. the session moves to `waiting_for_approval` 5. a reviewer approves or denies the review 6. the agent resumes with that result If the review is denied, the blocked tool is not executed. Instead, the runtime returns a denial result to the agent so it can continue safely with that context. ## Operator experience Approval reviews are surfaced in the admin app through the `Approvals` tab under `Deployments -> Agents`. Reviewers can: - work through pending reviews from a central queue - inspect the exact tool payload - read the triggering session context - leave reviewer notes - see resolved history for audit and debugging For a full walkthrough of that interface, see [Approvals Center](https://docs.everstack.ai/getting-started/agents/approvals-center). ## Session state and events When a review is waiting on a human, the session moves into `waiting_for_approval`. The runtime also emits approval lifecycle events such as: - `approval.requested` - `approval.heartbeat` - `approval.resolved` - `approval.cancelled` These events support streaming UIs, audit trails, and integrations that want to surface approval requests outside the core admin interface. ## Timeout behavior Each approval gate can define a timeout and a default action. If no reviewer responds before the timeout: - the review expires - the default action is applied - the runtime continues according to that policy Choose the default carefully. For sensitive systems, `deny` is usually the safer fallback. ## Design goal HITL is not about making agents less capable. It is about drawing a clear control boundary. Let the model handle reasoning, planning, and structured tool preparation. Let humans retain final authority over actions that can cause real-world impact. --- ### OpenAI Agents API Source: https://docs.everstack.ai/getting-started/agents/openai-agents-api Connect an OpenAI-managed agent to an Everstack instance and its isolated compute. #### Metadata ```yaml title: OpenAI Agents API description: Connect an OpenAI-managed agent to an Everstack instance and its isolated compute. ``` The OpenAI Agents API runs the agent harness at OpenAI. Everstack owns the connection to your project, maps each session to its instance, and provides isolated compute when you select an Everstack sandbox. Manage these sessions in the existing **Agents** area alongside Everstack sessions; OpenAI sessions do not use a separate dashboard. This integration is undergoing release qualification. The complete development journey, including isolated runtime compute, retained files, SDK follow-up, browser review and cleanup, passed at the qualified source revision. Production rollout and final native RPC qualification remain pending. Treat the capability and environment modes returned by your instance as authoritative. ## Credentials Use two different OpenAI credentials for an Everstack sandbox: | Credential | Where it runs | Required access | | --- | --- | --- | | Application key | Everstack gateway server | `api.agents.read`, `api.agents.write`, `api.responses.write` | | Restricted executor key | Isolated sandbox executor | Environment connection only; all other permissions set to None | Both keys must belong to the same OpenAI organization, project and user or service account. Create the restricted key on [OpenAI's environment keys page](https://platform.openai.com/agents?tab=environments&environment_view=keys). The application key must never enter the sandbox. Also enable **List models: Read** on the application key. Session creation checks model access and returns HTTP 403 without it. For a session without a sandbox (`environment.type: "none"`), only the application key is required. OpenAI remains responsible for the harness and session state; Everstack does not start an executor or provide a workspace for this mode. Your Everstack login is separate from these OpenAI credentials. Use the instance Admin console or an authenticated device-login bearer token to create connections and run sessions. Instance API keys currently provide read access to this integration. ## Configure the server The integration requires PostgreSQL and the existing gateway credential-encryption secret. Run the gateway migrations before using a new release. Server-controlled configuration: - `EVS_OPENAI_AGENTS_ALLOWED_MODELS`: optional comma-separated permitted upstream model IDs. - `EVS_OPENAI_AGENTS_EXECUTOR_IMAGE`: the executor template alias. For isolated runtime, use `everstack/openai-codex-isolated runtime-rootfs:openai-codex-0.154.0-r3` after installing and verifying the matching ext4 file on every isolated runtime host. - `EVS_OPENAI_AGENTS_BASE_URL`: optional upstream API URL override for trusted deployments and protocol testing. Self-hosted executor environments require a configured isolated runtime or remote isolated runtime Agent sandbox backend. Docker and Kubernetes are not available for OpenAI executor environments in this release. The pinned r3 isolated runtime guest, restricted-key connection and retained-file journey have passed development qualification; production remains a separate release gate. Do not give customers arbitrary upstream URL overrides. The application key is attached to upstream requests. The compatibility target is the `agents=v1` API and Codex executor `0.154.0`. The release workflow builds and smokes linux/amd64 and linux/arm64 before publishing the immutable version tag. Copy the digest-qualified reference from the successful **Publish OpenAI Codex Executor** workflow run: | Component | Intended compatible release | | --- | --- | | Everstack gateway | `v0.1.45` | | OpenAI Agents API | `agents=v1` | | Codex executor | `0.154.0` | | Node SDK (`@everstack/node`) | `0.2.7` | | Python SDK (`everstack`) | `0.1.1` | | Go SDK (`github.com/everstacklabs/everstack/packages/sdks/everstack-go`) | Prepared as `v0.1.0`; unavailable until the public module tag is published and install-verified | These are release targets, not a statement that the integration is generally available. Do not install an SDK version until its registry reports that exact version. The Go SDK source and public release workflow are prepared, but there is no installable tagged module at its declared module path yet. isolated runtime does not pull this setting as an OCI image. It takes the suffix after the colon and opens a local file with that name under `FC_ROOTFS_DIR`. Once the immutable `openai-codex-0.154.0-r3` release exists in `everstacklabs/releases`, download and verify both the compressed asset and expanded filesystem: ```bash mkdir -p dist/isolated runtime-rootfs cd dist/isolated runtime-rootfs base_url='https://github.com/everstacklabs/releases/releases/download/openai-codex-0.154.0-r3' curl -fLO "$base_url/openai-codex-0.154.0-r3.ext4.gz" curl -fLO "$base_url/openai-codex-0.154.0-r3.ext4.gz.sha256" curl -fLO "$base_url/openai-codex-0.154.0-r3.ext4.sha256" sha256sum -c openai-codex-0.154.0-r3.ext4.gz.sha256 gzip -d openai-codex-0.154.0-r3.ext4.gz sha256sum -c openai-codex-0.154.0-r3.ext4.sha256 ``` Do not install from a workflow artifact or use these commands before the exact public release exists. To build and qualify an artifact from source, run `infra/images/prepare-openai-codex-isolated runtime-rootfs.sh dist/isolated runtime-rootfs` from the repository root. The script composes the checked-in canonical sandbox rootfs recipe with a public digest-pinned Ubuntu amd64 base, then applies the pinned Codex overlay. Package repositories used by Ubuntu, NodeSource, Go modules and npm remain network inputs, so the resulting ext4 checksum is authoritative for that qualification run; rebuilding is not assumed to reproduce identical bytes. Copy `openai-codex-0.154.0-r3.ext4` and its checksum to every isolated runtime host, verify the checksum there, and install the image as: ```text $FC_ROOTFS_DIR/openai-codex-0.154.0-r3.ext4 ``` `FC_ROOTFS_DIR` defaults to `/var/lib/everstack/rootfs`; use the configured Helm `isolated runtimeAgent.isolated runtime.rootfsDir` when it differs. Only after the exact file exists and its checksum passes on every eligible host, configure: ```bash export EVS_OPENAI_AGENTS_EXECUTOR_IMAGE='everstack/openai-codex-isolated runtime-rootfs:openai-codex-0.154.0-r3' ``` The generic isolated runtime startup preflight accepts any ext4 image. It does not prove this named template exists. If the named file is missing, the current backend warns and boots `base.ext4`, so deployment automation must treat the exact-file and checksum checks as a fail-closed gate. The preparation script verifies `codex-cli 0.154.0`, `codex exec-server --help`, the guest `sandbox-agent`, and the r3 version marker before producing the artifact. Never bake the restricted executor key into the image or its environment configuration. ## Start from Admin or Cloud Open the owning instance's Admin console. Cloud's instance link uses the existing authentication relay. In **Agents**, start a session and choose the **OpenAI Agents API** runtime: 1. Add a connection with the application key and, for sandbox execution, the restricted executor key. 2. Choose a permitted OpenAI model. 3. Choose **No sandbox** for a simple conversational task, or **Everstack sandbox** for code and files. 4. Submit a task and follow its saved progress. 5. Find the session under **Sessions** and continue it after returning to the page. The runtime label distinguishes OpenAI sessions from Everstack sessions. The session detail uses the same transcript and composer interaction as native Agent sessions. Its compact runtime panel shows the fixed model, upstream state and sandbox readiness. Files appear in the secondary **Files** panel only when retained storage is available. A refresh error does not erase already saved history, but mutation controls stay disabled until current capabilities are confirmed. Review pending tool requests under **Approvals**. OpenAI approval history is not currently available in this view. **Create Agent** continues to create reusable Everstack agent definitions. Starting an OpenAI session does not create an Everstack definition, and native-only settings such as agent memory, peers, and deployments do not apply to it. Only server-reported environment modes are selectable. A saved connection, a booted sandbox, an idle session and a successful task are different states. ## CLI Log in with the existing Everstack device-login flow, then select the intended instance/context. Use `evs agents openai --help` and its `connections` and `sessions` subcommands for the exact command surface. Create the connection in Admin, or provide connection JSON through a protected file or stdin so credentials never appear in process arguments. Do not place an OpenAI key directly in a shell command. Create a session request file: ```json { "connection_id": "your-everstack-connection-id", "idempotency_key": "a-unique-persisted-request-id", "model": "your-enabled-openai-model", "environment": { "type": "none" }, "input": "Suggest three small milestones for my first agent project." } ``` Then create the session and page through its durable Everstack history: ```bash evs agents openai sessions create --file openai-session.json > openai-session-result.json session_id="$(jq -er '.id' openai-session-result.json)" evs agents openai sessions events "$session_id" --after 0 --limit 100 evs agents openai sessions get "$session_id" ``` For a sandbox task, change the environment to `{ "type": "self_hosted" }` only when the instance reports that mode, and ask for work that needs the connected `/workspace`. That path also requires the matching restricted executor key and the installed isolated runtime guest described above. The CLI uses the currently selected, device-authenticated instance. Session IDs and event cursors are safe to persist. Treat response bodies and temporary artifact download URLs as sensitive operational data. Retain the request ID after a timeout. Check the saved session before retrying a creation or follow-up. Everstack does not promise exactly-once execution when the upstream outcome is unknown. ## Node SDK The official SDK exports a dedicated resource for bearer-authenticated operations: ```ts import { OpenAIAgents } from '@everstack/node' const agents = new OpenAIAgents({ baseUrl: process.env.EVS_API_URL!, accessToken: process.env.EVS_ACCESS_TOKEN!, }) const session = await agents.sessions.create({ connection_id: process.env.EVS_OPENAI_CONNECTION_ID!, idempotency_key: crypto.randomUUID(), // Persist this before sending. model: process.env.OPENAI_MODEL!, environment: { type: 'none' }, input: 'Describe the next steps for a small coding task.', }) const history = await agents.sessions.events(session.id) console.log(session.status, history.data) ``` A callback can supply a refreshed bearer token for each request. The resource never retries mutations automatically. Continue pagination with `history.next_cursor` while `history.has_more` is true. The Python SDK exposes `client.openai_agents`; the Go SDK exposes `client.OpenAIAgents`. Both use the same instance-owned session IDs and durable event cursor. ## Tools, approvals and files Select enabled webhook or proxy functions and MCP tools when creating the session. Resource ownership and session grants are checked again before each invocation. Native isolated-mode functions are not currently supported by this integration. Approval requests show the tool, resource and sanitized arguments. An instance owner or administrator can approve or deny them. If tool execution may have succeeded but its result could not be saved, Everstack reports `recovery_required` and does not automatically execute the action again. For a connected Everstack sandbox, upload an input and specify its workspace destination to make it available to the agent: ```ts await agents.sessions.uploadInput(session.id, { filename: 'input.txt', content_type: 'text/plain', content_base64: Buffer.from('Example input').toString('base64'), destination: '/workspace/input.txt', }) const artifact = await agents.sessions.exportArtifact(session.id, '/workspace/result.txt') const download = await agents.sessions.artifactDownload(session.id, artifact.object_id) // download.url is temporary. Keep signed download URLs out of logs. ``` Omitting `destination` retains the input in storage without attaching it to the workspace. The Admin upload control accepts files up to 1 MiB. Storage quota and retention checks still apply. File export requires an existing file inside the session workspace. Retained inputs, exports and download links require a configured Everstack Storage service. In Everstack Cloud, that means the environment's managed-storage cell, bucket-scoped credential, tenant placement and gateway switch must all be enabled and healthy. A working isolated runtime workspace alone does not make files durable. If storage is unavailable, use the conversation without files; do not interpret an empty Files panel as proof that an upload or export succeeded. | Capability | Supported behavior | | --- | --- | | Conversation | No-sandbox sessions and follow-ups with retained history | | Compute | Configured Everstack executor; restricted environment key required | | Functions | Existing webhook and proxy functions | | MCP | Instance-owned tools with durable session grants and required approvals | | Files | Retained inputs, workspace attachment, export, temporary downloads and deletion | | Usage | Sparse provider-reported tokens; missing counters remain unavailable | | Upstream replay | Not supported by OpenAI; Everstack reconciles saved items | | Exactly-once side effects | Not promised across ambiguous failures; automatic re-execution is disabled | ## API surface and common setup errors Choose the transport that fits your client: - **REST** uses the instance-owned `/v1/openai-agents` paths below and is what the CLI and language SDK resources call. - **ConnectRPC** uses `everstack.openai_agents.v1.OpenAIAgentsService` over HTTP/1.1 or HTTP/2 with Connect framing. - **gRPC** uses the same protobuf service over HTTP/2. The generated protobuf messages and RPC methods are the contract for gRPC and ConnectRPC. The Connect JSON reference documents their procedure-style POST paths. The separate REST reference is maintained from the custom HTTP handler's wire contract. All three transports apply the same authenticated organization and instance scope, permissions, durable idempotency intent, and cleanup rules. REST clients must keep creation and input idempotency keys across ambiguous outcomes; switching transports or minting a new key does not make an unknown mutation safe to repeat. Connect JSON clients use the generated service descriptor and attach the Everstack bearer token to each request: ```ts import { createClient } from '@connectrpc/connect' import { createConnectTransport } from '@connectrpc/connect-node' import { OpenAIAgentsService } from '@everstack/node' const transport = createConnectTransport({ baseUrl: process.env.EVS_API_URL!, httpVersion: '2', useBinaryFormat: false, interceptors: [(next) => async (request) => { request.header.set('Authorization', `Bearer ${process.env.EVS_ACCESS_TOKEN!}`) return next(request) }], }) const rpc = createClient(OpenAIAgentsService, transport) const capabilities = await rpc.getCapabilities({}) ``` For native gRPC, use TLS and the generated Go client. The target is the gateway authority without an `https://` prefix: ```go creds := credentials.NewTLS(&tls.Config{MinVersion: tls.VersionTLS12}) conn, err := grpc.NewClient(os.Getenv("EVS_GRPC_TARGET"), grpc.WithTransportCredentials(creds)) if err != nil { log.Fatal(err) } defer conn.Close() client := openaiagents.NewOpenAIAgentsServiceClient(conn) ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer "+os.Getenv("EVS_ACCESS_TOKEN")) capabilities, err := client.GetCapabilities(ctx, &openaiagents.GetCapabilitiesRequest{}) ``` Use imports from `google.golang.org/grpc`, `google.golang.org/grpc/credentials`, `google.golang.org/grpc/metadata`, and `github.com/everstacklabs/everstack/pkg/grpc/everstack/openai_agents/v1`. Keep credentials in environment or an approved credential provider, not source code. REST endpoints: | Operation | Endpoint | | --- | --- | | Capabilities | `GET /v1/openai-agents/capabilities` | | Connections | `GET, POST /v1/openai-agents/connections` | | Sessions | `GET, POST /v1/openai-agents/sessions` | | Continue a session | `POST /v1/openai-agents/sessions/{session-id}/input` | | Durable history | `GET /v1/openai-agents/sessions/{session-id}/events` | | Cancel or delete | `POST .../cancel`, `DELETE /v1/openai-agents/sessions/{session-id}` | | Files and exports | `.../inputs`, `.../artifacts`, `.../artifacts/export` | | Usage | `GET /v1/openai-agents/sessions/{session-id}/usage` | | Approvals | `GET /v1/openai-agents/approvals`, `POST .../{approval-id}/resolve` | Every resource is scoped to the authenticated organization and instance. Use a device-login bearer token for writes; instance API keys are read-only for this integration. List-session-events pagination uses Everstack's durable `after` cursor and bounded `limit`; advance with `next_cursor` while `has_more` is true. It is separate from the non-replayable upstream stream cursor. Usage counters are optional. A reported or unavailable response may omit `input_tokens`, `output_tokens`, `total_tokens`, and `updated_at`; generated protobuf clients represent those absent counters as unset optional fields. Do not turn absence into zero. See [Authentication](https://docs.everstack.ai/getting-started/authentication), the [OpenAI Agents REST reference](https://docs.everstack.ai/api-reference/openai-agents-rest), the [OpenAI Agents Connect JSON reference](https://docs.everstack.ai/api-reference/openai-agents), the [native Everstack Agents API reference](https://docs.everstack.ai/api-reference/agents), [Storage](https://docs.everstack.ai/getting-started/storage), and [Sandboxes](https://docs.everstack.ai/getting-started/sandboxes) for the surrounding contracts. | Symptom | What to check | | --- | --- | | Connection validation returns 403 | The application key has `List models: Read`, the model is permitted, and the key belongs to the configured organization and project. | | Environment connection fails | The executor key and application key have the same organization, project and principal owner; the executor key is restricted to Environment connection. | | `self_hosted` is absent | The gateway has no supported isolated runtime backend. Do not force an unreported mode. | | `self_hosted` is offered but startup fails | Read `last_error` and verify the named executor rootfs is installed on every eligible isolated runtime host. Capability discovery does not validate that host file. | | Session remains pending or reports failed readiness | Read `last_error`; upstream session creation, sandbox creation and environment connection are separate phases. | | Files are unavailable | Verify the Storage service and, on Cloud, the managed-storage cell and tenant placement. The workspace and retained artifacts have different lifetimes. | | Usage says unavailable | OpenAI has not reported token counters for the saved turns. This does not mean zero usage or zero cost. | | Input or tool result says recovery is required | Preserve the idempotency key and inspect saved events. Do not create a new key or repeat an external side effect until the prior outcome is reconciled. | ## Readiness, recovery and cleanup An Everstack sandbox is ready only after OpenAI reports `agent.session.environment.connected`. Pending or failed executor connections must not be displayed as ready. A successful turn is reported by `agent.session.turn.completed`. Inspect individual tool outcomes too. `agent.session.idle` alone is not evidence of success. Upstream streams do not replay old events. Everstack's history cursor addresses retained local events; recovery must also reconcile saved upstream items. A disconnected stream must not automatically submit the task again. Export the files you need before deleting a session or terminating its compute. Sandbox workspace files, retained Everstack artifacts and upstream-held files have different lifetimes. Cleanup failures remain visible and retryable. ## Data and usage OpenAI retains session state. The Agents API currently supports US data residency and does not support Zero Data Retention, including when using self-hosted compute. Provider-reported model usage is distinct from Everstack sandbox and retained-storage usage. Missing provider data must be shown as unavailable. Do not infer a zero balance, a zero charge, or an enforceable upstream spending cap from missing usage. ## Qualification status Protocol tests, a live upstream session, image validation, a local product test and a deployed Cloud/self-hosted journey are separate evidence levels. Passing one does not qualify the others. Check the release notes and your instance's capabilities before enabling this integration; this page does not claim a completed production release. Official references: [overview](https://developers.openai.com/api/docs/guides/agents-api/overview), [self-hosted environments](https://developers.openai.com/api/docs/guides/agents-api/environments/self-hosted), [sessions](https://developers.openai.com/api/docs/guides/agents-api/sessions). --- ### Agents Overview Source: https://docs.everstack.ai/getting-started/agents/overview Autonomous AI agents with tool use, memory, and human-in-the-loop approval. #### Metadata ```yaml title: Agents Overview description: Autonomous AI agents with tool use, memory, and human-in-the-loop approval. icon: Bot ``` Agents are the core runtime in Everstack for autonomous, multi-step AI work. An agent is a session-based execution loop where a language model reasons about a goal, calls tools, observes results, and repeats until the task is done or a constraint is reached. Unlike a single function call or a fixed workflow, an agent decides its own path. It chooses which tools to invoke, in what order, and how to respond to intermediate results. You define the boundaries -- the model, the available tools, the turn limits, the approval gates -- and the agent operates within them. ## What agents give you - **Tool chaining.** Agents can call any combination of 45+ built-in tools across sandbox execution, browser automation, web search, file management, memory, and storage. Each tool result feeds back into the model context for the next decision. - **Persistent or ephemeral execution.** Ephemeral agents spin up for a single session and tear down when done. Persistent agents get a dedicated, fully isolated sandbox that survives across sessions, with configurable CPU, memory, disk, networking, and SSH access. - **Memory.** Agents can store and retrieve knowledge across sessions. Memory is scoped (per-agent, per-user, or global) and supports automatic extraction and retrieval so the agent builds context over time without manual prompt engineering. - **Human-in-the-loop approval.** Any tool call can be gated behind reviewer approval. The agent pauses, a human inspects the payload, and the agent resumes only after explicit sign-off. This keeps agents autonomous for routine work while reserving human judgment for high-risk actions. - **Multi-agent coordination.** Agents can spawn sub-agents, delegate jobs asynchronously, send messages to other agents, and check for replies. A primary agent can orchestrate a team of specialized sub-agents, each with its own tools and constraints. - **Streaming.** Every session streams events in real time over SSE: text deltas from the model, tool call start and end markers, approval lifecycle events, and sandbox state changes. Clients get a live, granular view of agent reasoning and execution. ## Why agents exist Functions and workflows handle structured, predictable tasks well. But many real problems are open-ended. A developer debugging a production issue needs to read logs, form a hypothesis, check code, run a test, and iterate. A research task might require searching the web, reading documents, synthesizing findings, and deciding what to investigate next. Agents handle this kind of work because the execution path is not known ahead of time. The model decides what to do at each step based on what it has learned so far. Everstack agents are not a thin wrapper around a chat completion API. The runtime manages the full execution lifecycle: sandbox provisioning, tool dispatch, HITL gating, context window compaction, token tracking, session state persistence, and streaming. You bring the goal and the guardrails. The runtime handles everything else. ## Ephemeral vs persistent The two agent modes serve different operational patterns. **Ephemeral agents** are session-scoped. They start, do their work, and clean up. There is no state between sessions beyond what is stored in memory. Use ephemeral agents for on-demand tasks like code review, data analysis, content generation, or answering questions. **Persistent agents** get a dedicated sandbox that lives across sessions. The sandbox has a filesystem, installed packages, cloned repos, and running processes that survive between conversations. Use persistent agents for long-running workloads like monitoring, scheduled jobs, development environments, or agents that need to maintain complex local state. Persistent agents follow a lifecycle state machine: - `active` -- the agent definition exists and is ready - `provisioning` -- sandbox is being created - `idle` -- sandbox is alive, no active turn - `running` -- a turn is actively in progress - `sleeping` -- sandbox is stopped, state preserved - wake -- a sleeping agent is brought back to `idle` automatically when it receives a message ## When to use agents vs workflows vs functions **Use a function** when the task is a single, well-defined operation with clear inputs and outputs. Structured data transformations, API calls, validation checks. **Use a workflow** when the task is a fixed sequence of steps that does not require model reasoning between them. ETL pipelines, approval chains, notification sequences. **Use an agent** when the task is open-ended, requires reasoning about intermediate results, or needs to adapt its approach based on what it discovers. Debugging, research, code generation, multi-step analysis, anything where the model needs to think and act in a loop. ## Agent modes Agents operate in one of two modes: - **Primary** agents are user-facing. They receive messages directly from users or external triggers and run the main task. - **Sub-agents** are spawned by other agents to handle delegated work. They report results back to their parent and are not directly addressable by users. ## Key constraints Every agent has configurable limits that bound its execution: - **max_turns** -- the maximum number of user-agent exchanges in a session - **max_tool_calls_per_turn** -- caps tool invocations within a single turn - **max_steps** -- total iterations (tool call plus result cycles) across the session - **turn timeout** -- 30 minutes per turn by default - **iteration limit** -- 200 tool-result cycles per turn These constraints prevent runaway execution and keep costs predictable. When a limit is reached, the agent completes its current output and stops. ## Identity and personality Agents support rich identity configuration beyond the system prompt: - **system_prompt** -- the core instructions for the agent - **soul_md** -- defines the agent's personality, values, and behavioral traits - **identity_md** -- establishes who the agent is, its role, and its expertise - **user_md** -- context about the user the agent is interacting with - **role_md** -- the specific role the agent plays in a given deployment These identity documents are composed into the agent's context, giving you fine-grained control over tone, expertise, and behavior without overloading the system prompt. ## Next steps - [OpenAI Agents API](https://docs.everstack.ai/getting-started/agents/openai-agents-api) -- run an OpenAI-managed harness with Everstack sessions, tools, approvals, compute, and retained files - [Creating Agents](https://docs.everstack.ai/getting-started/agents/creating-agents) -- define and configure your first agent - [Tools](https://docs.everstack.ai/getting-started/agents/tools) -- explore the built-in tool catalog and add custom tools - [Sessions](https://docs.everstack.ai/getting-started/agents/sessions) -- understand the execution lifecycle and streaming events - [Human-in-the-Loop](https://docs.everstack.ai/getting-started/agents/human-in-the-loop) -- set up approval gates for sensitive actions - [Advanced](https://docs.everstack.ai/getting-started/agents/advanced) -- spawn trees, forks, context compaction, and digest bulletins - [API Reference](https://docs.everstack.ai/api-reference/agents) -- full endpoint documentation for programmatic agent management --- ### Sessions Source: https://docs.everstack.ai/getting-started/agents/sessions Session lifecycle, streaming events, and turn-by-turn execution. #### Metadata ```yaml title: Sessions description: Session lifecycle, streaming events, and turn-by-turn execution. icon: MessageSquare ``` A session is a single conversation between a user (or trigger) and an agent. It tracks the full execution from the first message through every tool call, model response, and approval gate until the agent completes its work or hits a limit. Sessions are the unit of execution in Everstack. Every interaction with an agent happens inside a session, and every session produces a complete, auditable record of what happened. ## Session state machine Sessions move through a defined set of states: ``` CREATED -> RUNNING -> COMPLETED -> FAILED -> CANCELLED ``` With intermediate states for interactive flows: ``` RUNNING -> WAITING_FOR_INPUT -> RUNNING RUNNING -> WAITING_FOR_APPROVAL -> RUNNING ``` And for persistent agents: ``` HIBERNATED (sandbox sleeping, session preserved) ``` **CREATED** -- the session has been initialized but the agent has not started processing. This is the state immediately after session creation, before the first turn begins. **RUNNING** -- the agent is actively processing. It may be waiting for a model response, executing a tool, or preparing its next action. This is the normal active state. **WAITING_FOR_INPUT** -- the agent has called the `ask_user` tool and is paused, waiting for the user to provide a response. The session resumes to `RUNNING` once the user replies. **WAITING_FOR_APPROVAL** -- a tool call has matched a HITL approval rule and is waiting for a reviewer. The session resumes to `RUNNING` once the review is resolved (approved or denied). See [Human-in-the-Loop](https://docs.everstack.ai/getting-started/agents/human-in-the-loop) for details. **COMPLETED** -- the agent finished its work normally. The final turn contains the agent's concluding output. **FAILED** -- the session ended due to an error, such as a model API failure, a sandbox crash, or an unrecoverable tool error. **CANCELLED** -- the session was explicitly cancelled by a user or system action before it completed. **HIBERNATED** -- for persistent agents, the session is preserved while the sandbox is sleeping. The session resumes when the agent wakes. ## Turns A session is composed of turns. Each turn represents one exchange: a user input followed by the agent's response (which may include multiple tool calls). Each turn records: - **turn_number** -- the sequential position within the session - **user_input** -- the message or trigger that started this turn - **assistant_output** -- the agent's final text response for the turn - **tool_calls** -- an ordered list of every tool call the agent made during the turn, including arguments and results - **token_usage** -- prompt tokens, completion tokens, and cache hits for this turn - **latency_ms** -- wall-clock time from turn start to turn completion Turns give you a structured, inspectable record of agent behavior. You can see exactly what the agent was asked, what it did, and how much it cost. ## The execution loop Within each turn, the agent runs an iteration loop: 1. The user's message (or the previous tool result) is sent to the model 2. The model returns either a text response or one or more tool calls 3. If the model returned a text response with no tool calls, the turn is complete 4. If the model returned tool calls, each call is evaluated against HITL rules 5. Approved tool calls are executed and their results are appended to the conversation 6. The loop returns to step 1 with the updated context This loop continues until the model produces a final text response, or a constraint is reached. **Iteration limit:** each turn allows up to 200 tool-result cycles. This prevents infinite loops where the agent keeps calling tools without converging on an answer. **Turn timeout:** each turn has a 30-minute wall-clock timeout. If the agent has not completed the turn within this window, the turn is terminated. These defaults keep execution bounded and costs predictable. ## Streaming events Sessions emit a real-time event stream over SSE (Server-Sent Events). Clients can subscribe to this stream to build live UIs that show agent activity as it happens. ### Event types **Model events** - `llm.chunk` -- a text delta from the model's streaming response. These arrive token-by-token and can be assembled into the full response progressively. **Tool events** - `tool_call.start` -- the agent is about to execute a tool. Includes the tool name and arguments. - `tool_call.end` -- a tool call has completed. Includes the result and execution time. **Approval events** - `approval.requested` -- a tool call matched a HITL rule and is waiting for review. - `approval.heartbeat` -- periodic signal that an approval is still pending. - `approval.resolved` -- a reviewer has approved or denied the tool call. - `approval.cancelled` -- the approval request was cancelled. **Sandbox events** - `sandbox.*` -- lifecycle events for the agent's sandbox, including provisioning, ready, sleeping, and wake events. These events give clients granular visibility into every phase of agent execution. A streaming UI can show the model thinking in real time, display tool calls as they happen, surface approval requests instantly, and reflect sandbox state changes without polling. ## Token tracking Every turn tracks token consumption at a granular level: - **prompt_tokens** -- tokens in the input to the model, including system prompt, conversation history, tool results, and memory context - **completion_tokens** -- tokens generated by the model in its response - **cache_tokens** -- tokens served from the provider's prompt cache rather than recomputed Token tracking is essential for understanding costs and optimizing agent configurations. Sessions with high prompt token counts may benefit from context compaction (see [Advanced](https://docs.everstack.ai/getting-started/agents/advanced)). Sessions with excessive tool calls may need tighter constraints. ## Session management in the admin UI The admin UI provides a session timeline view that shows: - the full sequence of turns with user inputs and agent responses - every tool call with expandable argument and result inspection - approval events with reviewer identity and resolution - token usage per turn and cumulative for the session - session state transitions and timing You can browse active, completed, and failed sessions. Filtering by agent, status, and time range helps you find specific sessions for debugging or review. For persistent agents, the session list shows the relationship between the agent's lifecycle and its sessions -- which sessions ran during which wake periods, and when the agent was sleeping between them. ## Programmatic access Sessions can be created, listed, and inspected through the API. You can start a session by sending a message to an agent, poll for status, stream events, and retrieve the complete turn history. See the [API Reference](https://docs.everstack.ai/api-reference/agents) for full endpoint documentation. --- ### Tools Source: https://docs.everstack.ai/getting-started/agents/tools Built-in tools, custom functions, and MCP server tools for agents. #### Metadata ```yaml title: Tools description: Built-in tools, custom functions, and MCP server tools for agents. icon: Wrench ``` Tools are how agents interact with the world beyond conversation. When an agent decides it needs to read a file, run a command, search the web, or store a result, it calls a tool. The Everstack runtime handles dispatching the call, executing it in the right environment, and returning the result to the model for its next reasoning step. Agents only have access to tools explicitly listed in their definition. This is by design -- it gives you precise control over what each agent can and cannot do. ## Built-in tool catalog Everstack ships with 45+ built-in tools organized into categories. ### Sandbox tools These tools operate inside the agent's sandbox environment. For persistent agents, that is their dedicated, fully isolated sandbox. For ephemeral agents, a sandbox is provisioned on demand. | Tool | Purpose | |------|---------| | `sandbox_shell` | Run a shell command and return stdout/stderr | | `sandbox_execute` | Execute a script or binary | | `sandbox_read_file` | Read file contents | | `sandbox_write_file` | Write content to a file | | `sandbox_edit` | Apply targeted edits to a file | | `sandbox_patch` | Apply a patch to one or more files | | `sandbox_list_files` | List directory contents | | `sandbox_glob` | Find files matching a glob pattern | | `sandbox_grep` | Search file contents with regex | | `sandbox_git_clone` | Clone a git repository into the sandbox | | `sandbox_expose_port` | Expose a port from the sandbox for external access | | `schedule_cron` | Schedule a recurring command inside the sandbox | ### Browser tools Browser tools give agents the ability to navigate web pages, interact with UI elements, and extract information from rendered content. | Tool | Purpose | |------|---------| | `browser_navigate` | Navigate to a URL | | `browser_screenshot` | Capture a screenshot of the current page | | `browser_observe` | Extract structured observations from the page | | `browser_click` | Click an element on the page | | `browser_type` | Type text into an input field | | `browser_scroll` | Scroll the page | | `browser_evaluate` | Execute JavaScript in the browser context | ### Web tools | Tool | Purpose | |------|---------| | `web_search` | Search the web and return results | | `web_fetch` | Fetch content from a URL | ### Agent coordination tools These tools enable multi-agent workflows where agents communicate, delegate, and collaborate. | Tool | Purpose | |------|---------| | `spawn_agent` | Create and start a sub-agent | | `send_message` | Send a message to another agent | | `check_messages` | Check for incoming messages from other agents | | `delegate_job` | Delegate a task to a sub-agent asynchronously | | `check_job` | Check the status and result of a delegated job | ### Memory tools | Tool | Purpose | |------|---------| | `memory_query` | Search the agent's memory for relevant information | | `memory_store` | Store a fact or observation in memory | ### User interaction tools | Tool | Purpose | |------|---------| | `ask_user` | Pause execution and ask the user a question | ### Platform tools Platform tools are meta-level tools that let agents manage other agents. These are typically reserved for orchestrator or admin agents. | Tool | Purpose | |------|---------| | `platform_create_agent` | Create a new agent definition | | `platform_list_agents` | List existing agents | | `platform_update_agent` | Update an agent's configuration | ### Storage tools | Tool | Purpose | |------|---------| | `upload_artifact` | Upload a file to persistent storage | | `download_artifact` | Download a file from persistent storage | | `list_artifacts` | List stored artifacts | ### Trigger tools | Tool | Purpose | |------|---------| | `create_trigger` | Create an event trigger that starts agent sessions | | `list_triggers` | List existing triggers | | `delete_trigger` | Remove a trigger | ## Attaching tools to agents Tools are attached by name in the agent definition's `tools` array. Only tools listed in this array are available to the agent at runtime. Be intentional about which tools you grant. An agent that only needs to read and analyze files should not have `sandbox_shell` or `sandbox_write_file`. Narrowing the tool set reduces the surface area for unexpected behavior and makes HITL rules simpler to reason about. ## Custom functions as tools Beyond built-in tools, you can expose your own application logic as tools through the [Functions](https://docs.everstack.ai/getting-started/functions/overview) system. When a function is registered with Everstack, it becomes available as a tool that agents can call. This is how you connect agents to your domain -- a function that queries your database, calls your internal API, triggers a deployment, or performs any custom operation becomes a tool the agent can reason about and invoke. The agent sees the function's name, description, and parameter schema. When it decides to call the function, Everstack dispatches the call to your registered handler and returns the result to the agent. ## MCP server tools Everstack supports the [Model Context Protocol (MCP)](https://docs.everstack.ai/getting-started/mcp/overview), which lets you connect external tool servers. Any tools exposed by a connected MCP server are available to agents alongside built-in and custom tools. MCP tools are useful for integrating with third-party services, existing tool infrastructure, or specialized capabilities that live outside Everstack. Federated MCP tools appear in the `tools` array under a namespaced name, `mcp____`, and are opt-in per agent exactly like built-in tools. For naming rules, attachment, result handling, and approval patterns, see [MCP Tools in Agents](https://docs.everstack.ai/getting-started/mcp/agent-tools). ## Tool execution flow When the model decides to call a tool: 1. The model outputs a structured tool call with the tool name and arguments 2. The runtime checks the tool against the agent's allowed tool list 3. If the tool matches a HITL approval rule, the session pauses for reviewer approval (see [Human-in-the-Loop](https://docs.everstack.ai/getting-started/agents/human-in-the-loop)) 4. Once approved (or if no HITL rule applies), the runtime dispatches the call to the appropriate handler 5. The handler executes the tool -- in the sandbox, in the browser, against an external API, or wherever the tool operates 6. The result is returned to the model as a tool result message 7. The model uses the result to decide its next action This cycle repeats until the model produces a final response, reaches a constraint limit, or encounters an error. ## Tool approval rules HITL rules are defined in the agent's configuration as an array of tool name patterns. When a tool call matches a pattern, it is held for approval before execution. Match modes let you control how patterns are evaluated: - Exact match: the tool name must match the pattern exactly - Prefix match: the tool name must start with the pattern - Glob/wildcard: standard glob patterns for flexible matching You can gate entire categories (e.g. all `sandbox_*` tools) or specific high-risk tools (e.g. only `sandbox_shell`). The goal is to let the agent work autonomously on safe operations while requiring human sign-off for actions that could cause real-world impact. For detailed configuration options, see [Human-in-the-Loop](https://docs.everstack.ai/getting-started/agents/human-in-the-loop). --- ### Architecture Source: https://docs.everstack.ai/getting-started/architecture How Everstack is designed, components, data flow, and the decisions behind them. #### Metadata ```yaml title: Architecture description: How Everstack is designed, components, data flow, and the decisions behind them. icon: Network ``` Everstack is a unified AI control plane. Rather than scattering LLM logic across services, it consolidates routing, governance, execution, and observability into a single platform that every team integrates against. This page describes how the system is designed and how its components fit together. ## System Overview Everstack is composed of seven subsystems. All share the same authentication, observability, and governance layer, there are no separate auth flows or siloed telemetry. ```mermaid graph TB subgraph clients [" "] direction LR SDK["SDKs
Go · Python · Node · Rust · Java · Kotlin"] COMPAT["OpenAI-compatible API"] GRPC["Native gRPC"] end subgraph everstack ["Everstack"] direction TB subgraph gateway ["Gateway"] direction LR AUTH["Auth"] RATE["Rate Limit"] CACHE["Cache"] ROUTE["Route"] PROVIDER["Provider Call"] AUTH --> RATE --> CACHE --> ROUTE --> PROVIDER end subgraph services ["Application Services"] direction LR AGENTS["Agents
Tools · Sandbox · HITL
Multi-agent collaboration
"] WORKFLOWS["Workflows
Visual DAG builder
15 node types
"] MEMORY["Memory
Vector search · RAG
4 backends
"] FUNCTIONS["Functions
Isolated serverless
execution
"] end subgraph platform ["Shared Platform"] direction LR OTEL["Observability"] CQRS["Event Bus"] CONFIG["Config"] LICENSE["Licensing"] end end subgraph providers ["AI Providers"] direction LR OPENAI["OpenAI"] ANTHROPIC["Anthropic"] GOOGLE["Google"] OTHERS["Mistral · Cohere · DeepSeek · Ollama · ..."] end subgraph storage ["Data Layer"] direction LR PG["PostgreSQL
State"] CH["ClickHouse
Telemetry"] REDIS["Redis
Cache"] VECTOR["Vector Store
Embeddings"] end clients --> gateway gateway --> providers services --> platform gateway --> platform platform --> storage ``` ### Why This Shape **Single binary**, The gateway, agents, workflows, memory, functions, and all APIs compile into one Go binary. You deploy one container, not a fleet of microservices. This reduces operational surface without sacrificing capability. **Shared platform layer**, Every subsystem dispatches commands and emits events through the same event bus. An agent calling a function, a workflow querying memory, or a gateway request hitting cache all produce consistent telemetry and respect the same access controls. **Dual database**, Transactional state (configs, keys, agent sessions) lives in PostgreSQL. High-volume telemetry (traces, logs, metrics) flows to ClickHouse. This separation lets you scale analytics independently and keep your operational database fast. --- ## Gateway The gateway is the primary API surface. It accepts OpenAI-compatible requests and routes them to one of 17+ upstream LLM providers. ```mermaid flowchart LR REQ["Request"] --> A subgraph pipeline ["Gateway Pipeline"] direction LR A["Auth
API key · license
access policy
"] B["Guard
Rate limit
spend cap
"] C{"Cache"} D["Route
Model resolution
weighted key selection
"] E["Execute
Provider call
fallback chain
"] A --> B --> C C -- "HIT" --> HIT["Return cached"] C -- "MISS" --> D --> E end E --> T["Telemetry
Trace · tokens · cost"] E --> RES["Response"] HIT --> RES ``` **Provider routing**, Each provider registers through a factory. At request time, the gateway selects a provider and API key based on model config, key weights, and real-time rate-limit state from Redis. If the primary provider fails, the fallback chain is evaluated automatically. **Semantic cache**, Embeddings of recent requests are compared to incoming requests. Semantically similar queries return cached responses, saving both latency and provider cost. **Hot-reload**, Gateway configuration (models, rate limits, providers) can be changed at runtime without restarts. --- ## Agents Agents are long-running LLM sessions that can use tools, execute code, and collaborate with other agents. The runtime manages the conversation loop, tool dispatch, and context window automatically. ```mermaid flowchart TB subgraph loop ["Agent Loop"] direction TB CHECK["Check termination
Max iterations · token budget · timeout"] LLM["Call LLM
Retry on rate-limit, 3 attempts"] TOOLS["Execute tool calls"] HITL{"HITL
approval?"} EMIT["Emit events"] CHECK --> LLM --> TOOLS --> HITL HITL -- "approved" --> EMIT HITL -- "needs review" --> WAIT["Wait for human"] WAIT --> EMIT EMIT --> CHECK end subgraph phases ["Phase Channels"] direction TB P1["Task results
Async sub-agents"] P2["Fork results
Parallel branches"] P3["Compaction
Context management"] P4["Digests
Cross-agent knowledge"] end phases -- "inject between iterations" --> loop ``` **Tool system**, Agents access two kinds of tools. _Custom tools_ are defined in the agent config or discovered from MCP servers. _Runtime tools_ are injected by the platform: sandbox execution, file I/O, git, web search, memory query/store, sub-agent spawning, and human-in-the-loop prompts. **Four-phase execution**, The loop supports four opt-in phases that inject state between iterations: | Phase | What it does | | -------------- | --------------------------------------------------------------------------------------------------------------- | | **Task queue** | Spawn sub-agents asynchronously. Results are injected when ready. | | **Forking** | Split into parallel branches that execute independently and merge. | | **Monitoring** | Track token usage. When the context window fills, compact it in three tiers: summarize, prune, then hard-limit. | | **Digestion** | Summarize completed sessions into digests and broadcast them to related agents. | **Sandboxes**, Agents can create isolated environments to run code. Three backends are available: Docker containers (development), hardware-isolated sandboxes (production), and Kubernetes pods (enterprise). Each sandbox supports file I/O, git, shell access, port exposure, and cron scheduling. --- ## Workflows Studio is a visual workflow builder. Workflows compile into a directed acyclic graph (DAG) and execute as a single API call. ```mermaid flowchart LR START["Start
Input variables"] --> LLM["Provider
LLM call"] LLM --> COND{"If / Else"} COND -- "true" --> RESP["Response
Return output"] COND -- "false" --> GUARD["Guardrail
Filter"] GUARD --> FUNC["Function
Execute code"] FUNC --> RESP ``` Fifteen node types are available: Start, Provider (LLM call), Agent, Function, Memory, Cache, Load Balancer, If/Else, Router, Input Guardrails, Output Guardrails, Webhook, HTTP Request, Auth, and Response. The engine traverses the graph with cycle detection, records every node execution in a ledger (timing, inputs, outputs), and routes along labeled edges. Workflows are versioned with preview and rollback support. --- ## Memory The memory system provides vector-based semantic search for RAG. Documents are chunked, embedded via an LLM embedding model, and stored in one of four backends: | Backend | Best for | | ------------ | ------------------------------------------- | | **PgVector** | Self-hosted, low-ops (PostgreSQL extension) | | **Qdrant** | High-performance, large-scale | | **Pinecone** | Managed, serverless | | **Weaviate** | Hybrid search (vector + keyword) | At query time, the search text is embedded and matched against stored vectors using cosine, euclidean, or dot-product distance. Agents call memory automatically via the `memory_query` and `memory_store` tools. --- ## Observability Every request, agent turn, workflow node, and function invocation produces telemetry via OpenTelemetry. ```mermaid flowchart TB subgraph app ["Everstack"] SPANS["Spans"] METRICS["Metrics"] LOGS["Logs"] end COLLECTOR["OTEL Collector
Embedded or external"] SPANS --> COLLECTOR METRICS --> COLLECTOR LOGS --> COLLECTOR COLLECTOR --> CH["ClickHouse
Traces & logs"] COLLECTOR --> PROM["Prometheus
Metrics"] ``` Beyond standard OTEL signals, Everstack adds: | Signal | Description | | ------------------------ | ------------------------------------------------------------------- | | **Token counts** | Input, output, and cached tokens on every LLM call | | **Cost** | Per-request cost calculated from the model catalog's pricing | | **Scores** | Custom quality or relevance scores you attach to any trace | | **Payload logging** | Full request/response bodies (opt-in, disabled by default) | | **Provider attribution** | Every span maps to a specific provider and model for cost breakdown | --- ## Security and Governance | Layer | Mechanism | | ---------------------- | ----------------------------------------------------------------------------------------------- | | **Authentication** | API key validation on every request. Keys support rotation, revocation, and scoped permissions. | | **Machine-to-machine** | Internal service calls are signed with device fingerprints and anti-replay nonces. | | **Spend control** | Real-time budget enforcement. Spend limits and token caps are checked before any provider call. | | **Rate limiting** | Per-key, per-model, and global rate limits with state in Redis. | | **Encryption** | API keys encrypted at rest. TLS for all traffic. | | **Data residency** | Self-hosted mode: all data in your databases, nothing leaves your network. | | **Payload privacy** | Request/response bodies are never stored unless you opt in. Retention is configurable. | | **Audit** | Every action is logged with user, timestamp, and correlation ID. | | **License gating** | Features are enforced per license tier. Unauthorized access is blocked at the middleware layer. | --- ## Data Architecture | What | Where | Why | | ------------------------------------------------- | ------------------------------------------- | -------------------------------------------------------------------------- | | Configs, API keys, agents, workflows, functions | **PostgreSQL** | Transactional consistency, relational queries, encrypted key storage | | Traces, logs, telemetry events, metrics | **ClickHouse** | Column-oriented, high-volume append, fast analytical queries | | Rate-limit state, semantic cache, session routing | **Redis** | Sub-millisecond reads, ephemeral state, pub/sub for cross-instance routing | | Document embeddings | **PgVector / Qdrant / Pinecone / Weaviate** | Nearest-neighbor search for RAG | You can run PostgreSQL alone for simpler deployments. Add ClickHouse when you need analytics at scale. Redis is optional but recommended for caching and rate limiting. --- ## Deployment | Model | What you run | Data location | | --------------- | ------------------------------------------------------------------ | ---------------------------------- | | **Self-hosted** | Single binary or Docker container + your databases | Everything on your infrastructure | | **Cloud** | Managed by Everstack with multi-tenant isolation, SSO, and billing | Hosted with configurable retention | Both modes use the same core binary. Configuration is via YAML files and environment variables (prefixed `EVS_`). Config changes are hot-reloaded without restarts. --- ## Where to Go Next - [Quickstart](https://docs.everstack.ai/getting-started/quickstart), Get running in minutes - [Configuration](https://docs.everstack.ai/getting-started/configuration), Config reference and environment variables - [Providers](https://docs.everstack.ai/getting-started/providers), Connect your LLM providers - [Gateway](https://docs.everstack.ai/getting-started/gateway/overview), Routing, caching, and rate limiting - [Agents](https://docs.everstack.ai/getting-started/agents/overview), Build and manage autonomous agents - [Studio](https://docs.everstack.ai/getting-started/studio/overview), Visual workflow builder - [Memory](https://docs.everstack.ai/getting-started/memory/overview), Vector search and RAG - [Observability](https://docs.everstack.ai/getting-started/observability/overview), Traces, logs, and metrics - [Authentication](https://docs.everstack.ai/getting-started/authentication), Auth and access control --- ### Authentication Source: https://docs.everstack.ai/getting-started/authentication Authentication modes, session management, and access control for self-hosted and cloud deployments. #### Metadata ```yaml title: Authentication description: Authentication modes, session management, and access control for self-hosted and cloud deployments. icon: Lock ``` ## Overview Everstack uses different authentication strategies depending on your deployment mode: | Deployment | Auth Method | How It Works | | --------------- | -------------------------- | ------------------------------------------------------- | | **Self-hosted** | Email/password, magic link | Built-in auth with sessions stored in PostgreSQL | | **Cloud** | OAuth / SSO via WorkOS | Google, Microsoft, GitHub, or enterprise SSO | | **Both** | Same-origin bypass | Automatic when dashboard is served by the same instance | | **Both** | API key | `x-evs-api-key` header for programmatic access | ## Authentication Flow When a request arrives, Everstack checks authentication in this order: 1. **Policy bypass**, health checks and public endpoints skip auth 2. **Same-origin check**, if browser headers indicate same-origin, allow without auth 3. **Session cookie**, if `es_everstack_session` cookie is present and valid, allow 4. **API key**, if `x-evs-api-key` header is present and valid, allow 5. **Reject**, return `401 Unauthorized` --- ## Same-Origin Detection When the admin dashboard is served directly by the Everstack instance (same scheme + host + port), authentication is automatically bypassed. This is detected via browser headers: - `Origin` header matches the server's origin - `Referer` header starts with the server's origin - `Sec-Fetch-Site` header is `same-origin` or `none` This means you can access `http://localhost:8080` without any API key or login, the dashboard just works. **Note:** Same-origin detection relies on browser-specific headers. Programmatic clients (curl, scripts) will not trigger the bypass and must use an API key or session cookie. --- ## Self-Hosted Authentication Self-hosted instances use a built-in authentication system with email/password login, magic links, and team invitations. All session data is stored in PostgreSQL. ### First-Time Setup 1. Start Everstack with a PostgreSQL database configured 2. Open the dashboard, you'll see the registration page 3. Register with an email and password, this creates the **instance owner** account 4. You're logged in and a session cookie is set automatically The first registered user becomes the instance owner and cannot be removed. ### Login Methods #### Email and Password The primary login method. Passwords are hashed using Argon2id before storage. ``` POST /auth/login Content-Type: application/json { "email": "user@example.com", "password": "your-password" } ``` On success, a `es_everstack_session` cookie is set and subsequent requests are authenticated automatically. #### Magic Link Passwordless login via email. When requested, a one-time token is generated and can be sent to the user (email delivery depends on your SMTP configuration). 1. Request a magic link for your email address 2. Click the link (or navigate to `/auth/verify-magic-link?token=...`) 3. The token is validated and a session is created ### Team Management The instance owner and admins can invite team members: - **Invite**, send an invitation to an email address with a role (owner, admin, member, viewer) - **Accept**, invited users set a password and join the team - **Remove**, owners can remove members; owners cannot remove themselves - **Revoke**, cancel a pending invitation before it's accepted Team member limits are enforced by your license. The `seatLimit` is checked when sending invitations. ### Session Management After logging in: 1. A session record is created in the `sessions` table with a random token 2. The `es_everstack_session` cookie is set in your browser 3. On subsequent requests, the cookie is validated directly against the database 4. Expired sessions are automatically cleaned up Session cookie properties are configurable: | Property | Description | | ------------ | ------------------------------------------------------ | | `CookieName` | Cookie name (default: `es_everstack_session`) | | `Domain` | Cookie domain scope | | `Secure` | Require HTTPS (auto-relaxed for localhost/private IPs) | | `HTTPOnly` | Prevent JavaScript access | | `SameSite` | CSRF protection (`Lax`, `Strict`, or `None`) | | `MaxAge` | Session duration | #### Secure Cookie Relaxation When running on localhost or private networks over plain HTTP, Everstack automatically relaxes the `Secure` flag on session cookies so they work without TLS. This applies to: - `localhost` and `*.localhost` - Loopback addresses (`localhost`, `::1`) - Private network ranges (`10.x.x.x`, `172.16-31.x.x`, `192.168.x.x`) - Carrier-grade NAT (`100.64.0.0/10`) If `SameSite=None` is configured but `Secure` is relaxed, it's automatically downgraded to `Lax` (browsers reject `SameSite=None` without `Secure`). --- ## Cloud Authentication Cloud-managed instances authenticate through [WorkOS](https://workos.com), which provides OAuth and enterprise SSO. ### Supported Providers | Provider | Identifier | | -------------- | ------------------- | | Google | `GoogleOAuth` | | Microsoft | `MicrosoftOAuth` | | GitHub | `GitHubOAuth` | | WorkOS AuthKit | `authkit` | | Enterprise SSO | Via `connection_id` | ### OAuth Flow 1. The dashboard calls `GetAuthURL` with the desired provider 2. The user is redirected to the provider's login page 3. After authentication, the provider redirects back with an authorization code 4. Everstack exchanges the code with WorkOS for user information and tokens 5. A session is created with the WorkOS access token and refresh token stored 6. The `es_everstack_session` cookie is set ### Token Management Cloud sessions store WorkOS OAuth tokens alongside the session: - **Access token**, short-lived JWT used for WorkOS API calls - **Refresh token**, used to obtain new access tokens when they expire - **Token expiry**, parsed from the JWT `exp` claim, capped at 24 hours for security Token refresh happens automatically when the `RefreshSession` endpoint is called and the access token is within 30 seconds of expiry. ### Managed Instance Authentication Cloud-managed instances use a token exchange flow for cross-domain authentication: 1. User authenticates on the cloud dashboard 2. Cloud issues a short-lived JWT (60s expiry) signed with HMAC-SHA256 using a derived key 3. User is redirected to the managed instance with the token 4. Instance validates the JWT, creates a local user record, and sets a session cookie This allows users to log in once on the cloud dashboard and seamlessly access any managed instance. --- ## API Key Authentication For programmatic access (scripts, CI/CD, SDKs), use API keys. See [API Keys](https://docs.everstack.ai/getting-started/vault/api-keys) for creating and using API keys. API keys are passed via the `x-evs-api-key` header: ```bash curl -X POST https://your-instance.example.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "x-evs-api-key: evs_your_api_key_here" \ -d '{"model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}]}' ``` --- ## Reverse Proxy Configuration When Everstack runs behind a reverse proxy, same-origin detection may not work (the browser sees the proxy's origin, not Everstack's). In this case, session cookies are validated directly against the database, so logged-in users can access the API without an API key. Your reverse proxy must forward cookies and relevant headers to Everstack. ### Nginx ```nginx server { listen 443 ssl; server_name everstack.example.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Forward cookies and API key header proxy_pass_header Set-Cookie; proxy_pass_header Cookie; proxy_pass_header x-evs-api-key; } } ``` ### Caddy ```txt everstack.example.com { reverse_proxy localhost:8080 } ``` Caddy forwards all headers and cookies by default, no additional configuration needed. ### Traefik ```yaml http: routers: everstack: rule: "Host(`everstack.example.com`)" service: everstack tls: {} services: everstack: loadBalancer: servers: - url: "http://localhost:8080" ``` Traefik forwards cookies by default. --- ### Configuration Source: https://docs.everstack.ai/getting-started/configuration Config file structure, environment variables, and validation. #### Metadata ```yaml title: Configuration description: Config file structure, environment variables, and validation. icon: Settings ``` Everstack is configured through a YAML config file, environment variables, or a combination of both. Environment variables take precedence over the config file, which takes precedence over built-in defaults. ## Configuration Sources Everstack loads configuration in this order (highest priority first): 1. **Environment variables** (`EVS_*` prefix) 2. **Config file** (YAML, local or remote) 3. **Built-in defaults** (bundled in the binary) ## Config File By default, Everstack uses its bundled defaults. To use a custom config file: ```bash evs serve --config ./config/gateway.yaml ``` ```bash evs serve --config https://raw.githubusercontent.com/your-org/configs/main/gateway.yaml # With authentication EVS_CONFIG_AUTH_TOKEN=ghp_your_token evs serve --config https://... ``` ```yaml volumes: - ./config/gateway.yaml:/app/config/gateway.yaml:ro command: 'serve' ``` ## Minimal Config A minimal config file that adds an OpenAI provider, everything else uses built-in defaults: ```yaml gateway: models: - provider: openai model: - gpt-4o - gpt-4o-mini api_key: sk-your-openai-key default: true ``` ## Full Config Reference ```yaml server: config: port: 8089 # EVS_SERVER_PORT host: "0.0.0.0" external_port: 8089 # EVS_SERVER_EXTERNAL_PORT external_domain: "localhost" # EVS_SERVER_EXTERNAL_DOMAIN external_secure: false enforce_external_domain: false # true in production log: level: "info" # EVS_LOG_LEVEL (debug, info, warn, error, trace) include_levels: ["info", "warn", "error", "fatal", "panic"] exclude_levels: [] formatter: format: "text" # EVS_LOG_FORMATTER_FORMAT (text, json) cors: enabled: true # EVS_CORS_ENABLED allow_credentials: true allowed_origins: - "http://localhost:3000" - "https://{instance}.{region}.everstack.ai" allowed_methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH"] allowed_headers: - "Origin" - "Content-Type" - "Accept" - "Authorization" - "Cookie" tls: enabled: false # EVS_TLS_ENABLED key_path: "" # EVS_TLS_KEY_PATH cert_path: "" # EVS_TLS_CERT_PATH ``` ```yaml database: mode: hybrid # EVS_DATABASE_MODE (single, hybrid) type: postgres # EVS_DATABASE_TYPE (postgres, memory) postgres: dsn: "postgres://postgres:postgres@localhost:5432/everstack" # EVS_DATABASE_POSTGRES_DSN max_open_conns: 200 # EVS_DATABASE_POSTGRES_MAX_OPEN_CONNS max_idle_conns: 200 # EVS_DATABASE_POSTGRES_MAX_IDLE_CONNS conn_max_lifetime: 5m # EVS_DATABASE_POSTGRES_CONN_MAX_LIFETIME ssl_mode: disable # EVS_DATABASE_POSTGRES_SSL_MODE clickhouse: dsn: "clickhouse://clickhouse:clickhouse@localhost:9000/everstack" # EVS_DATABASE_CLICKHOUSE_DSN max_open_conns: 100 # EVS_DATABASE_CLICKHOUSE_MAX_OPEN_CONNS max_idle_conns: 50 # EVS_DATABASE_CLICKHOUSE_MAX_IDLE_CONNS conn_max_lifetime: 10m query_timeout: 30s compression: true ``` **Single mode** stores everything in PostgreSQL. **Hybrid mode** (recommended) stores telemetry in ClickHouse for better analytics query performance. ```yaml auth: mode: "none" # EVS_AUTH_MODE (none, builtin, oidc) # Built-in email/password auth, first user becomes owner builtin: session_secret: "change-me-in-production" # EVS_AUTH_BUILTIN_SESSION_SECRET session_max_age: 604800 # 7 days in seconds session_secure: false # true in production (HTTPS) seat_limit: 0 # 0 = unlimited users # OpenID Connect (Keycloak, Auth0, Okta, Azure AD, etc.) oidc: issuer_url: "" # EVS_AUTH_OIDC_ISSUER_URL client_id: "" # EVS_AUTH_OIDC_CLIENT_ID client_secret: "" # EVS_AUTH_OIDC_CLIENT_SECRET redirect_uri: "" # EVS_AUTH_OIDC_REDIRECT_URI scopes: ["openid", "profile", "email"] ``` ```yaml cache: enabled: true # EVS_CACHE_ENABLED type: memory # EVS_CACHE_TYPE (memory, redis) memory: max_size: 50000 # EVS_CACHE_MEMORY_MAX_SIZE ttl: 10m # EVS_CACHE_MEMORY_TTL redis: address: "" # EVS_CACHE_REDIS_ADDRESS (e.g., "localhost:6379") password: "" # EVS_CACHE_REDIS_PASSWORD db: 0 ttl: 10m pool_size: 100 search: enabled: false # Requires RedisSearch module index_name: "semantic_cache_idx" # Semantic cache with embeddings (experimental) semantic: enabled: false # EVS_CACHE_SEMANTIC_ENABLED max_entries: 10000 ttl: 5m similarity_threshold: 0.85 # Cosine similarity (0.0-1.0) backend: "auto" # redis, memory, or auto embedding: model: "" # Must be in gateway.models (e.g., "text-embedding-3-small") dimensions: 0 # Auto-detected if 0 cache_embeddings: true cache_ttl: 1h batch_size: 10 timeout: 30s ``` ```yaml gateway: models: - provider: openai model: - gpt-4o - gpt-4o-mini api_key: sk-your-key # Or use Vault for key management base_url: https://api.openai.com/v1 max_tokens: 4096 default: true # Default provider for unmatched models default_alias: gpt-4o # Default model when none specified - provider: anthropic model: - claude-sonnet-4-5-20250929 - claude-haiku-4-5-20251001 api_key: sk-ant-your-key base_url: https://api.anthropic.com/v1 max_tokens: 4096 rate_limit: enabled: true # EVS_RATE_LIMIT_ENABLED requests_per_minute: 500 # EVS_RATE_LIMIT_REQUESTS_PER_MINUTE burst: 100 # EVS_RATE_LIMIT_BURST key_source: "correlation" # ip, user_id, api_key, or correlation load_balancer: enabled: false strategy: round_robin # round_robin, priority, weighted fallback: enabled: false factors: - name: "unified_fallback" priority: 1 criteria: - error_codes: [429, 500, 502, 503, 504] - rate_limit_hit: true strategy: priority timeout_ms: 5000 max_attempts: 1 models: - provider: anthropic model: claude-haiku-4-5-20251001 max_tokens: 4096 ``` ```yaml server: telemetry: otel: enabled: true mode: embedded # embedded or external collector_url: "localhost:4317" service_name: "everstack-gateway" tenant_type: "self_hosted" direct_export: enabled: true # Export logs/traces to ClickHouse tracing: sampling_rate: 1.0 # 0.0-1.0 (1.0 = trace all requests) granularity: standard # minimal, standard, or detailed trace_provider_calls: true trace_stream_chunks: false # Noisy, only for debugging trace_fallbacks: true trace_key_rotation: false metrics: type: otel # EVS_METRICS_TYPE (otel, none) tracing: type: otel # EVS_TRACING_TYPE (otel, none) fraction: 0.1 # Sampling fraction otel: sampling_rate: 1.0 granularity: standard service_name: "everstack-gateway" timeout: 30s retry: enabled: true max_attempts: 3 backoff_duration: 1s ``` ```yaml features: # Fast-path engine for ultra-low latency fastpath: enabled: true auth: bloom_filter_size: 100000 bloom_false_positive_rate: 0.001 cache_ttl: "60s" cache: exact: enabled: true max_entries: 50000 ttl: "5m" semantic: enabled: true similarity_threshold: 0.35 algorithm: "minhash" streaming: buffer_size: 32768 pool_size: 1024 connection_pool: max_idle_per_host: 256 prewarm_connections: 10 # Vector memory (pgvector backend) enable_memory: true memory: backend: pgvector embedding_models: - model: text-embedding-3-small dimension: 1536 # Sandbox environments sandbox: enabled: true backend: "docker" # docker or kubernetes default_image: "everstack/sandbox:base" max_cpu: 4.0 max_memory_mb: 4096 ssh: listen_addr: ":2222" # Isolated functions isolated_functions: pool: enabled: true min_per_runtime: 1 max_per_runtime: 10 idle_timeout_seconds: 300 # Gateway features gateway: enable_streaming: true enable_embeddings: true enable_response_caching: true enable_request_logging: true enable_cost_tracking: true ``` ## Environment Variables All config values can be set via environment variables with the `EVS_` prefix. Each config key maps to a variable, check the comments in the config reference above for the exact variable name. ### Common Variables | Variable | Description | Default | | ------------------------- | ---------------------------- | -------- | | `EVS_SERVER_PORT` | Port to listen on | `8089` | | `EVS_DATABASE_MODE` | `single` or `hybrid` | `hybrid` | | `EVS_POSTGRES_DSN` | PostgreSQL connection string |, | | `EVS_CLICKHOUSE_DSN` | ClickHouse connection string |, | | `EVS_AUTH_MODE` | `none`, `builtin`, or `oidc` | `none` | | `EVS_CACHE_TYPE` | `memory` or `redis` | `memory` | | `EVS_CACHE_REDIS_ADDRESS` | Redis address |, | | `EVS_LOG_LEVEL` | Log level | `info` | ## Database Modes All data stored in PostgreSQL. Simpler to operate but limited telemetry query performance. ```yaml database: mode: "single" postgres: dsn: "postgres://postgres:postgres@localhost:5432/everstack" ``` Application data in PostgreSQL, telemetry (traces, logs) in ClickHouse. Better query performance for observability at scale. ```yaml database: mode: "hybrid" postgres: dsn: "postgres://postgres:postgres@localhost:5432/everstack" clickhouse: dsn: "clickhouse://clickhouse:clickhouse@localhost:9000/everstack" ``` ## Validation ```bash # Validate config without starting evs serve --validate-config # Validate on every startup (recommended for production) evs serve --validate-on-start ``` ## CLI Flags | Flag | Description | Default | | --------------------- | ----------------------------------------------- | ----------------- | | `--port` | Override the server port | `8089` | | `--config` | Path or URL to config file | Built-in defaults | | `--customDomain` | Custom domain (e.g., `https://api.example.com`) |, | | `--customPort` | Custom port for external access |, | | `--validate-config` | Validate config and exit | `false` | | `--validate-on-start` | Validate config before starting | `false` | | `--info` | Show instance information | `false` | ## Next Steps - [Architecture](https://docs.everstack.ai/getting-started/architecture), understand how services connect - [Authentication](https://docs.everstack.ai/getting-started/authentication), set up user authentication - [Providers](https://docs.everstack.ai/getting-started/providers), configure LLM providers in detail --- ### Annotations Source: https://docs.everstack.ai/getting-started/evaluations/annotations Human review queues for evaluation scoring and quality control. #### Metadata ```yaml title: Annotations description: Human review queues for evaluation scoring and quality control. icon: MessageSquare ``` Annotation queues bring human reviewers into the evaluation process. They provide a structured interface for people to score AI outputs, validate automated evaluations, and build labeled datasets for future use. ## What annotation queues are An annotation queue is an ordered list of items waiting for human review. Each item presents the reviewer with the AI input, output, and any relevant context. The reviewer submits a score or label according to the queue's scoring criteria. Queues act as a bridge between automated evaluation and human judgment. They are not a replacement for automated scorers but a complement for cases where human assessment is necessary. ## When human review adds value **Use annotation queues when:** - Automated scorers cannot capture the quality dimension you care about (brand voice, cultural sensitivity, nuanced correctness) - You need a human-verified ground truth to calibrate or validate LLM-judge scorers - Compliance or regulatory requirements demand human oversight of AI outputs - You are building labeled datasets for fine-tuning or training custom scorers - Edge cases from production need expert review to determine the correct handling **Rely on automated scorers when:** - The quality dimension is well-defined and consistently measurable (format compliance, factual grounding, toxicity) - Volume is too high for human review to keep up - Speed matters more than perfect accuracy on every individual item - The scorer has been validated against human labels and performs reliably In most setups, automated scorers handle the bulk of evaluation while annotation queues catch the long tail of ambiguous or high-stakes cases. ## Creating a queue Navigate to **Evaluations > Annotation Queues** and create a new queue. You configure: - **Name and description** to clarify the review task for annotators - **Scoring criteria** defining what reviewers should evaluate and how they should score (numeric scale, categorical labels, or boolean pass/fail) - **Instructions** providing guidance, examples, and rubric details so reviewers score consistently Clear instructions are the single most important factor in annotation quality. Spend time writing them well, include concrete examples of good and bad outputs, and explain boundary cases explicitly. ## Populating queues Queues can be populated from two sources. ### From production traces Filter traces by time range, model, endpoint, or metadata, then push matching items into the queue. This is useful for reviewing a sample of live traffic, investigating quality issues flagged by automated scorers, or building labeled datasets from real-world usage. ### From datasets Push existing dataset items into a queue for human labeling. This works well when you need human scores alongside automated scores for calibration, or when building a new dataset from scratch with human-generated labels. Items enter the queue in order and are distributed to reviewers as they become available. ## The annotation interface Reviewers work through queue items one at a time. The interface shows: - The original input or prompt - The AI-generated output - Context documents or retrieval results, if available - The scoring criteria and instructions - A form for submitting the score Reviewers submit their score and move to the next item. The interface is designed to minimize friction so reviewers can maintain a consistent pace without excessive context-switching. ## Submitting scores Scores are recorded against the item and associated with the reviewer. Each submission captures: - The score value (numeric, categorical, or boolean depending on queue configuration) - The reviewer identity - A timestamp - Optional notes or justification Annotation scores appear alongside automated scores in eval results, giving you a combined view of human and machine assessment. ## Operational guidance - Write detailed, example-rich instructions for every queue. Vague criteria lead to inconsistent scores. - Use a small calibration round before full annotation. Have multiple reviewers score the same items, compare results, and refine instructions until agreement is high. - Route high-confidence automated results away from human review. Focus human attention on items where automated scorers are uncertain or disagree. - Review annotation throughput and quality periodically. If scores drift over time, refresh the instructions and run another calibration round. ## Related pages - [Evaluations Overview](https://docs.everstack.ai/getting-started/evaluations/overview) - [Scorers](https://docs.everstack.ai/getting-started/evaluations/scorers) - [Running Evaluations](https://docs.everstack.ai/getting-started/evaluations/running-evals) - [Evaluations API](https://docs.everstack.ai/getting-started/evaluations/overview) --- ### Datasets Source: https://docs.everstack.ai/getting-started/evaluations/datasets Creating and managing evaluation datasets for scoring. #### Metadata ```yaml title: Datasets description: Creating and managing evaluation datasets for scoring. icon: Database ``` A dataset is a collection of test cases that you run scorers against. Each item in a dataset represents one input-output pair, optionally with reference context or expected answers. Datasets give your evaluations a stable, reproducible foundation. ## What a dataset contains A dataset is a named collection of items. Each item typically includes: - **Input** - the prompt or query sent to your AI system - **Output** - the generated response (can be pre-filled or generated at eval time) - **Expected output** - the reference or gold-standard answer, if one exists - **Context** - supporting documents, retrieval results, or other material the model had access to - **Metadata** - arbitrary key-value pairs for filtering and grouping results Not every field is required for every scorer. Answer Relevancy only needs input and output, while Faithfulness also needs context. The fields you populate depend on what you plan to measure. ## Creating datasets ### In the UI Navigate to **Evaluations > Datasets** and create a new dataset. You can add items one at a time through the interface, which works well for small, hand-curated test sets. ### Importing CSV Upload a CSV file where each row becomes a dataset item. Map columns to the standard fields (input, output, expected_output, context) during import. This is the fastest path when you already have test cases in a spreadsheet or exported from another tool. ### Importing JSON Upload a JSON file containing an array of objects. Each object maps directly to a dataset item. JSON import preserves nested structures in context and metadata fields, which CSV cannot represent cleanly. ### From the API Use the [Datasets API](https://docs.everstack.ai/getting-started/evaluations/datasets) to create datasets and add items programmatically. This is the right approach when generating test cases from production data, building datasets in CI pipelines, or syncing from external systems. ## When to use datasets vs production traces Datasets and production traces serve different evaluation needs. **Use datasets when you want:** - repeatable, deterministic test suites - controlled comparisons across prompt versions or models - pre-deploy quality gates in CI/CD - coverage of known edge cases and failure modes **Use production traces when you want:** - real-world quality monitoring on live traffic - detection of issues that curated test cases miss - continuous scoring without maintaining a separate dataset - sampling-based evaluation that scales with traffic In practice, most teams use both. Datasets catch known regressions before deploy. Production trace sampling catches unknown regressions after deploy. ## Dataset lifecycle Datasets are versioned implicitly through their items. When you add, update, or remove items, future eval runs use the current state of the dataset. Past eval runs retain their results against the items that existed at the time. This means you can grow and refine a dataset over time without invalidating historical comparisons. If you need a clean break, create a new dataset version with a descriptive name. ### Sizing guidance Small, focused datasets (50-200 items) work well for targeted regression testing. Larger datasets (500+) are better for broad quality assessment and statistical confidence. Start small, observe which failure modes matter, and expand coverage where it counts. ## Related pages - [Evaluations Overview](https://docs.everstack.ai/getting-started/evaluations/overview) - [Scorers](https://docs.everstack.ai/getting-started/evaluations/scorers) - [Running Evaluations](https://docs.everstack.ai/getting-started/evaluations/running-evals) - [Datasets API](https://docs.everstack.ai/getting-started/evaluations/datasets) --- ### Evaluations Overview Source: https://docs.everstack.ai/getting-started/evaluations/overview LLM-as-judge scoring, built-in metrics, and regression detection for AI quality. #### Metadata ```yaml title: Evaluations Overview description: LLM-as-judge scoring, built-in metrics, and regression detection for AI quality. icon: Brain ``` Evaluations let you measure and track the quality of your AI outputs systematically. Instead of relying on gut checks or manual spot-checking, you define scoring criteria, run them against datasets or production traces, and get repeatable, comparable results. Evaluations are part of the observe pillar in Everstack, sitting alongside tracing and logging. Where traces show you what happened, evals tell you how good it was. ## What evaluations are An evaluation in Everstack is a scored assessment of AI-generated content. The system supports several scoring approaches: - **LLM-as-judge** scoring, where a separate LLM grades the output against defined criteria - **Built-in metrics** for common quality dimensions like relevancy, faithfulness, and safety - **Custom score configs** for domain-specific quality checks using numeric, boolean, categorical, LLM-judge, or code-based scorers - **Code scorers** that execute Python, JavaScript, or TypeScript in sandboxed environments for deterministic or rule-based evaluation - **Human annotations** through review queues for cases where automated scoring is not sufficient ## The LLM-as-judge concept LLM-as-judge is a pattern where a language model evaluates the output of another language model. You provide the judge with the original input, the generated output, and optionally a reference answer or context. The judge then scores the output on the criteria you define. This approach scales better than human review for most quality dimensions while being more nuanced than simple heuristic checks. It works especially well for subjective criteria like relevance, coherence, and tone. ## Built-in metrics Everstack ships five built-in metrics that cover the most common quality concerns: - **Answer Relevancy** measures whether the response actually addresses what was asked - **Faithfulness** checks whether claims in the response are supported by the provided context - **Hallucination** detects fabricated facts, entities, or citations that do not exist in the source material - **Bias** identifies unfair or prejudiced content across demographic dimensions - **Toxicity** flags harmful, offensive, or inappropriate language Each metric is preconfigured with a judge prompt and scoring rubric. You can use them out of the box or as starting points for custom scorers. ## Evaluations vs monitoring Monitoring tells you whether your system is up and performing within latency and error-rate bounds. Evaluations tell you whether the content your system produces is actually good. Use monitoring for operational health. Use evaluations for output quality. In practice, you want both: monitoring catches outages and performance regressions, while evaluations catch quality regressions that would otherwise slip through unnoticed. ## Where evaluations fit Evaluations connect to several other parts of Everstack: - **Datasets** hold the test cases you score against - **Scorers** define how each output gets graded - **Eval runs** execute a scorer across a dataset and produce results - **Scheduling** lets you run evals on a cron so regressions surface automatically - **CI/CD integration** blocks deploys when quality drops below a threshold - **Annotation queues** bring humans into the loop for edge cases - **Sampling** runs scorers on a fraction of production traffic in real time ## How evaluations work in practice A typical evaluation workflow follows this sequence: 1. **Define your dataset.** Collect input-output pairs that represent the scenarios you care about. Import from CSV, JSON, or create them in the UI. 2. **Choose your scorers.** Start with built-in metrics, then add custom LLM-judge or code scorers for domain-specific criteria. 3. **Run the evaluation.** Execute scorers against the dataset. Review per-item scores and aggregate results. 4. **Set a baseline.** When you are satisfied with the scores, promote the run as your quality baseline. 5. **Automate.** Schedule recurring runs and wire the CLI into your CI/CD pipeline so regressions are caught before they ship. 6. **Review edge cases.** Route ambiguous or high-stakes items to annotation queues for human review. Each step builds on the previous one. You can start with just step 1 and 2, then layer on automation as your evaluation practice matures. ## Use cases ### Pre-deploy quality gates Run your eval suite in CI before every deploy. If scores drop below a threshold or regress compared to the baseline, the pipeline fails and the deploy is blocked. ### Prompt iteration When refining prompts, run the same dataset through each version and compare scores side by side. This replaces anecdotal testing with measurable improvement. ### Model migration Switching from one model to another (or upgrading versions) is risky without evaluation. Run your existing eval suite against the new model and compare results to your baseline before cutting over. ### Production quality monitoring Sample a percentage of live traffic and score it continuously. This catches quality degradation from model drift, upstream data changes, or prompt regressions that only appear at scale. ### Compliance and safety audits Use the Bias and Toxicity metrics, combined with custom scorers, to demonstrate that your AI outputs meet safety and fairness standards. Annotation queues provide a human review layer for audit trails. ### RAG pipeline validation For retrieval-augmented generation systems, combine Faithfulness and Hallucination scorers to verify that responses stay grounded in retrieved context. Add Answer Relevancy to confirm the retrieval step is surfacing the right documents. ## Pro tier requirement Evaluations are available on the Pro tier. This includes all built-in metrics, custom scorers, datasets, eval runs, scheduling, regression detection, CI/CD integration, and annotation queues. ## Next steps - Create test cases with [Datasets](https://docs.everstack.ai/getting-started/evaluations/datasets) - Configure scoring criteria with [Scorers](https://docs.everstack.ai/getting-started/evaluations/scorers) - Execute and schedule runs with [Running Evaluations](https://docs.everstack.ai/getting-started/evaluations/running-evals) - Add human review with [Annotations](https://docs.everstack.ai/getting-started/evaluations/annotations) - Automate with the [Evaluations API](https://docs.everstack.ai/getting-started/evaluations/overview) --- ### Running Evaluations Source: https://docs.everstack.ai/getting-started/evaluations/running-evals Eval runs, scheduling, regression detection, and CI/CD integration. #### Metadata ```yaml title: Running Evaluations description: Eval runs, scheduling, regression detection, and CI/CD integration. icon: Play ``` An eval run executes one or more scorers against a dataset or a set of production traces and produces scored results. Runs are the core unit of measurement in the evaluations system. ## Creating an eval run To start a run, you select: - a dataset or a trace filter to score against - one or more scorers (built-in metrics, custom LLM judges, or code scorers) - optionally, a baseline run to compare against for regression detection Runs can be triggered manually from the UI, on a schedule, or from your CI/CD pipeline via the CLI. ## What happens during a run 1. The runner loads items from the selected dataset or samples matching traces. 2. Each item is sent to every selected scorer. 3. Scorers execute in parallel where possible. LLM-judge scorers make inference calls, code scorers run in sandboxes. 4. Results are collected, aggregated, and stored. 5. If a baseline is set, regression detection compares the new scores against baseline thresholds. 6. The run completes with a summary showing per-scorer averages, distributions, and pass/fail status. ## Scheduling eval runs Use cron-based scheduling to run evaluations automatically. This is valuable for catching regressions early, especially after model updates, prompt changes, or upstream data shifts. Navigate to an eval configuration and set a cron expression. The scheduler creates runs at the specified interval and retains results for trend analysis. Common schedules: - **Daily** for production quality monitoring - **On every deploy** via CI/CD integration (see below) - **Weekly** for comprehensive regression sweeps against larger datasets ## Comparing runs and baselines Every eval run produces a set of scores. To detect regression, you designate one run as the baseline. Future runs are compared against the baseline automatically. The comparison shows: - per-scorer score deltas (improvement or regression) - statistical significance of changes - individual items that crossed threshold boundaries When you ship a new version and are satisfied with its eval scores, promote that run to become the new baseline. ## Regression detection Regression detection compares each scorer's aggregate score against the baseline. You configure a threshold per scorer, and a run is flagged as regressed if any scorer drops below its threshold relative to the baseline. This is intentionally strict by default. A regression in any single scorer fails the run, because quality regressions tend to compound. You can adjust thresholds per scorer if certain dimensions are more or less critical for your use case. ## CI/CD integration The `everstack-eval` CLI tool integrates evaluations into your deployment pipeline. ### Running evals in CI ```bash everstack-eval run --config --dataset ``` This triggers an eval run and waits for completion. The process exits with: - **Exit code 0** when all scorers pass their thresholds - **Exit code 2** when one or more scorers fall below their threshold - **Exit code 3** when a regression is detected compared to the baseline Use these exit codes to gate your deployment. A typical CI step runs `everstack-eval run` after tests pass but before deploy, and fails the pipeline on exit code 2 or 3. ### Simulating runs ```bash everstack-eval simulate --config --dataset ``` Simulate runs a dry evaluation without persisting results. Use this during development to test scorer configurations and dataset coverage before committing to a formal run. ## Sampling eval on production traces Instead of scoring a static dataset, you can evaluate a sample of live production traces. Configure a sampling rate (for example, 5% of traces) and select which scorers to apply. **When to use sampling:** - You want continuous quality visibility without maintaining a separate dataset - Your traffic patterns are diverse enough that static datasets miss real-world edge cases - You need to detect model drift or quality degradation between scheduled eval runs Sampling runs produce the same scored results as dataset runs and feed into the same regression detection and trending views. ## Operational guidance - Start with built-in metrics and a small dataset to establish a baseline quickly. - Add custom scorers incrementally as you identify domain-specific quality dimensions. - Schedule daily runs against your core dataset and use sampling for real-time coverage. - Promote baselines deliberately. A baseline represents your quality bar, so update it only when a run reflects the standard you want to hold. - In CI, prefer exit code checks over score parsing. The CLI encodes pass/fail/regress into exit codes so your pipeline logic stays simple. ## Related pages - [Evaluations Overview](https://docs.everstack.ai/getting-started/evaluations/overview) - [Datasets](https://docs.everstack.ai/getting-started/evaluations/datasets) - [Scorers](https://docs.everstack.ai/getting-started/evaluations/scorers) - [Annotations](https://docs.everstack.ai/getting-started/evaluations/annotations) - [Evaluations API](https://docs.everstack.ai/getting-started/evaluations/overview) --- ### Scorers Source: https://docs.everstack.ai/getting-started/evaluations/scorers Built-in metrics, custom score configs, and code-based scorers. #### Metadata ```yaml title: Scorers description: Built-in metrics, custom score configs, and code-based scorers. icon: Target ``` Scorers define how an AI output gets graded. Everstack provides five built-in metrics for common quality dimensions and a flexible score config system for defining your own. ## Built-in metrics These metrics are ready to use out of the box. Each uses an LLM-as-judge approach with a preconfigured prompt and scoring rubric. ### Answer Relevancy Measures whether the response addresses the question that was asked. A response can be factually correct but still score low on relevancy if it answers a different question or includes excessive unrelated information. Requires input and output fields. ### Faithfulness Checks whether every claim in the response is supported by the provided context. This is critical for retrieval-augmented generation (RAG) systems where the model should ground its answers in retrieved documents rather than its parametric knowledge. Requires input, output, and context fields. ### Hallucination Detects fabricated information, including invented facts, nonexistent citations, made-up entities, and false attributions. Where Faithfulness checks for grounding in context, Hallucination casts a wider net for anything the model appears to have invented. Requires input, output, and context fields. ### Bias Identifies unfair, prejudiced, or stereotyping content across demographic dimensions including race, gender, age, religion, and nationality. Useful for compliance requirements and for ensuring outputs treat all groups equitably. Requires input and output fields. ### Toxicity Flags harmful, offensive, abusive, or inappropriate language. Covers profanity, hate speech, threats, sexually explicit content, and other categories that violate content policies. Requires input and output fields. ## Custom score configs When built-in metrics do not cover your use case, create a custom score config. Each config specifies a name, scoring type, and evaluation logic. ### Scoring types - **Numeric** produces a score on a defined range (for example, 0 to 10). Good for graded quality assessments where you need fine-grained comparison between runs. - **Boolean** produces a pass/fail result. Good for binary checks like "Did the response include a disclaimer?" or "Does the output contain valid JSON?" - **Categorical** produces one of a predefined set of labels. Good for classification tasks like sentiment (positive/neutral/negative) or intent detection. - **LLM judge** uses a language model with a custom prompt and rubric that you define. This is the most flexible option for subjective or domain-specific criteria. You write the judge prompt, specify the scoring scale, and the system handles execution and result extraction. - **Code scorer** runs a Python, JavaScript, or TypeScript function that computes the score programmatically. The code executes in a sandboxed environment for safety and isolation. ## Code scorers Code scorers are useful when evaluation logic is deterministic, requires external lookups, or involves complex parsing that a language model would handle unreliably. Your scorer function receives the dataset item (input, output, expected output, context, metadata) and returns a score. The runtime environment supports standard libraries for string manipulation, JSON parsing, regex matching, and HTTP requests. **When to use code scorers:** - Exact match or fuzzy match against expected output - JSON schema validation of structured responses - Regex-based extraction and verification - Length, format, or structural compliance checks - API calls to external validation services - Custom similarity metrics or distance calculations Code scorers run inside Everstack sandboxes, so they have the same isolation guarantees as any other sandboxed workload. Python, JavaScript, and TypeScript are all supported. ## Choosing the right scorer type **Start with built-in metrics** if your concern maps to relevancy, faithfulness, hallucination, bias, or toxicity. They require no configuration and provide well-calibrated baselines. **Use LLM judge configs** when you need to evaluate subjective, domain-specific qualities like tone, completeness, or adherence to brand voice. LLM judges handle nuance well but cost one LLM call per item scored. **Use code scorers** when evaluation logic is deterministic or needs external validation. Code scorers are fast, cheap, and perfectly reproducible, but they cannot assess subjective quality. **Combine multiple scorers** in a single eval run for comprehensive coverage. A typical setup might include Faithfulness for RAG grounding, a custom LLM judge for domain relevance, and a code scorer for format validation. ## Related pages - [Evaluations Overview](https://docs.everstack.ai/getting-started/evaluations/overview) - [Datasets](https://docs.everstack.ai/getting-started/evaluations/datasets) - [Running Evaluations](https://docs.everstack.ai/getting-started/evaluations/running-evals) - [Evaluations API](https://docs.everstack.ai/getting-started/evaluations/overview) --- ### Functions vs Sandboxes Source: https://docs.everstack.ai/getting-started/functions-vs-sandboxes Decide whether your use case needs a reusable tool or a full execution workspace. #### Metadata ```yaml title: Functions vs Sandboxes description: Decide whether your use case needs a reusable tool or a full execution workspace. icon: Scale ``` Functions and sandboxes are complementary, but they solve different jobs. The simplest distinction is: - functions are reusable tools - sandboxes are execution workspaces ## Use functions when Choose functions if your use case is mostly about a known action with a stable contract. Good fits: - call an internal API - look up records - trigger a backend action - wrap an external API - run a small transform or calculation - reuse the same capability across many agents and workflows ## Use sandboxes when Choose sandboxes if your use case needs a live environment. Good fits: - shell commands - files and directories - package installation - long-running processes - temporary service hosting - interactive debugging - stateful multi-step execution ## Practical difference ### Functions - narrow - schema-driven - production-friendly - easier to govern - best for repeatable actions ### Sandboxes - broad - interactive - stateful within a session - better for exploration and debugging - best for open-ended execution ## Decision matrix | If you need to... | Use | | --------------------------------------- | ----------- | | fetch customer or order data | `functions` | | create tickets or trigger approvals | `functions` | | wrap an API as a tool | `functions` | | run a small calculation or transform | `functions` | | edit files or run shell commands | `sandboxes` | | debug code in a live environment | `sandboxes` | | start a temporary app or service | `sandboxes` | | work through an exploratory coding task | `sandboxes` | ## Typical maturity path Many teams use both over time. A common pattern is: 1. explore or prototype in a sandbox 2. identify repeated behavior 3. operationalize that behavior as a function 4. attach the function to agents and workflows ## Why functions are often the better production default For many business use cases, functions are the cleaner primitive because they expose only the capability you intend to give the model. That usually means: - less surface area - clearer contracts - easier governance - better reuse ## Why sandboxes are still essential Sandboxes are the right choice when the work is not easily reduced to a single tool call. If the agent needs to inspect files, iterate on code, install dependencies, or run a process over time, a sandbox is the better fit. ## Rule of thumb - if you can describe the job as a named action, use a function - if you can describe the job as a live environment, use a sandbox ## Next steps - Read [Functions Overview](https://docs.everstack.ai/getting-started/functions/overview) for the product framing. - Read [Attaching Functions To Agents And Workflows](https://docs.everstack.ai/getting-started/functions/attaching-to-agents-and-workflows) to wire functions into runtime behavior. - Read [Sandboxes Overview](https://docs.everstack.ai/getting-started/sandboxes/overview) if your use case needs a full environment. --- ### Attaching Functions To Agents And Workflows Source: https://docs.everstack.ai/getting-started/functions/attaching-to-agents-and-workflows Use registered functions as tools inside agents, troopers, and workflow executions. #### Metadata ```yaml title: Attaching Functions To Agents And Workflows description: Use registered functions as tools inside agents, troopers, and workflow executions. icon: PlugZap ``` Once a function is registered, the next step is to make it available where runtime decisions happen. In Everstack, that usually means attaching functions to: - agents - troopers - workflows ## How attachment works Functions are selected by name. When you add a function name to an agent or workflow configuration, Everstack exposes that function to the runtime as a callable tool. That means the model can decide when to use it based on the user's request, your system prompt, and the tool schema. ## Attach a function to an agent Add function names to the agent's `tools` list. ```json { "name": "support-assistant", "description": "Answers support questions using customer and order data", "model": "claude-sonnet-4-20250514", "system_prompt": "Use the available tools before answering when live customer or order data is needed.", "tools": ["search_customers", "get_order_history", "create_jira_ticket"], "max_turns": 10, "max_tool_calls_per_turn": 5 } ``` This works well for assistants that need to: - look up data - take a backend action - chain multiple business operations together ## Attach a function to a trooper Troopers use the same mental model: pick the functions you want available and add them to the tool list. Good fits include: - internal ops copilots - deployment or incident helpers - domain-specific assistants with a stable tool catalog ## Attach functions to workflows Functions are also useful in workflows when you want a step to call a known capability instead of embedding custom logic directly into the flow. This is a good fit when you want: - reuse across multiple workflows - a cleaner separation between orchestration and execution - a shared library of operational steps ## Example pattern: support workflow One common pattern looks like this: 1. user asks about a customer issue 2. the agent calls `search_customers` 3. the agent calls `get_order_history` 4. if escalation is needed, the agent calls `create_jira_ticket` 5. the final answer includes both the result and the action taken ## Choosing the right functions to attach Use functions that are: - high-confidence - clearly described - scoped to a specific action - stable enough to reuse across multiple sessions Avoid attaching tools that are: - overly broad - ambiguously named - missing a useful description - better handled by a sandbox session ## Best practices - use descriptive names like `search_customers` instead of vague names like `lookup` - make descriptions action-oriented so the model knows when to call the tool - keep parameter schemas clear and minimal - attach only the tools the runtime really needs ## When to use a sandbox instead If the runtime needs shell access, files, package installation, or long-running stateful behavior, use a sandbox instead of trying to force that behavior through a function. Read [Functions vs Sandboxes](https://docs.everstack.ai/getting-started/functions-vs-sandboxes) for the full comparison. ## Next steps - Read [Functions Overview](https://docs.everstack.ai/getting-started/functions/overview) for the high-level model. - Read [Execution Modes](https://docs.everstack.ai/getting-started/functions/execution-modes) to choose how each function should run. - Read [Examples](https://docs.everstack.ai/getting-started/functions/examples) for common tool patterns. --- ### Examples Source: https://docs.everstack.ai/getting-started/functions/examples Practical function examples for business actions, API integrations, and lightweight code execution. #### Metadata ```yaml title: Examples description: Practical function examples for business actions, API integrations, and lightweight code execution. icon: Blocks ``` The fastest way to understand functions is to look at real patterns. These examples show how teams typically use functions in production. ## Example 1: Customer lookup with webhook mode Use webhook mode when you already have a backend endpoint. ```bash curl -X POST https://{instance}.{region}.everstack.ai/v1/functions \ -H "Content-Type: application/json" \ -d '{ "name": "search_customers", "description": "Search customers by name, email, or account ID", "mode": "webhook", "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": "Customer name, email, or ID" }, "limit": { "type": "integer", "default": 5 } }, "required": ["query"] }, "webhook": { "url": "https://api.example.com/internal/search-customers", "method": "POST", "timeout_ms": 10000 } }' ``` Best for: - support assistants - account lookup flows - CRM copilots ## Example 2: Order history tool This pattern works well when an agent needs to chain multiple functions together. ```bash curl -X POST https://{instance}.{region}.everstack.ai/v1/functions \ -H "Content-Type: application/json" \ -d '{ "name": "get_order_history", "description": "Get recent orders for a customer account", "mode": "webhook", "parameters": { "type": "object", "properties": { "account_id": { "type": "string" }, "limit": { "type": "integer", "default": 10 } }, "required": ["account_id"] }, "webhook": { "url": "https://api.example.com/internal/orders", "method": "POST", "timeout_ms": 15000 } }' ``` Pair this with `search_customers` so an agent can: 1. find the customer 2. extract the account ID 3. fetch recent orders 4. answer the user with live data ## Example 3: Ticket creation for operations Functions are often the cleanest way to turn operational actions into tools. ```bash curl -X POST https://{instance}.{region}.everstack.ai/v1/functions \ -H "Content-Type: application/json" \ -d '{ "name": "create_jira_ticket", "description": "Create a Jira issue for an operational incident", "mode": "webhook", "parameters": { "type": "object", "properties": { "summary": { "type": "string" }, "description": { "type": "string" }, "priority": { "type": "string", "enum": ["low", "medium", "high"] } }, "required": ["summary", "description"] }, "webhook": { "url": "https://ops.example.com/internal/create-jira-ticket", "method": "POST", "timeout_ms": 10000 } }' ``` Best for: - incident response assistants - IT operations copilots - support escalation workflows ## Example 4: Wrap an upstream API with proxy mode Proxy mode works well when you want to put a cleaner contract in front of an API. ```bash curl -X POST https://{instance}.{region}.everstack.ai/v1/functions \ -H "Content-Type: application/json" \ -d '{ "name": "github_issue_lookup", "description": "Look up a GitHub issue by owner, repo, and issue number", "mode": "proxy", "parameters": { "type": "object", "properties": { "owner": { "type": "string" }, "repo": { "type": "string" }, "issue_number": { "type": "integer" } }, "required": ["owner", "repo", "issue_number"] }, "proxy": { "base_url": "https://api.github.com", "path": "/repos/{owner}/{repo}/issues/{issue_number}", "method": "GET" } }' ``` Best for: - standardizing external integrations - reducing custom integration glue - exposing limited parts of a large API ## Example 5: Tax calculation with isolated mode Use isolated mode when you need a small, bounded unit of custom logic. ```bash curl -X POST https://{instance}.{region}.everstack.ai/v1/functions \ -H "Content-Type: application/json" \ -d '{ "name": "calculate_tax", "description": "Calculate tax and total for an amount and rate", "mode": "isolated", "parameters": { "type": "object", "properties": { "amount": { "type": "number" }, "rate": { "type": "number" } }, "required": ["amount", "rate"] }, "isolated": { "runtime": "nodejs20", "code": "export default async ({ amount, rate }) => ({ tax: amount * rate, total: amount * (1 + rate) })" }, "timeout_ms": 30000, "memory_mb": 256 }' ``` Best for: - pricing utilities - scoring logic - validation and formatting - custom transforms ## Example 6: Normalize incoming data Isolated functions are also good for cleanup or shaping work. ```bash curl -X POST https://{instance}.{region}.everstack.ai/v1/functions \ -H "Content-Type: application/json" \ -d '{ "name": "normalize_csv_row", "description": "Normalize a CSV row into a consistent record shape", "mode": "isolated", "parameters": { "type": "object", "properties": { "row": { "type": "object" } }, "required": ["row"] }, "isolated": { "runtime": "nodejs20", "code": "export default async ({ row }) => ({ email: String(row.email || '').trim().toLowerCase(), company: String(row.company || '').trim(), spend: Number(row.spend || 0) })" }, "timeout_ms": 30000, "memory_mb": 256 }' ``` ## Attach functions to an agent Once functions are registered, add their names to an agent's tool list. ```json { "name": "support-assistant", "model": "claude-sonnet-4-20250514", "system_prompt": "Use the available tools to look up customer and order data before answering.", "tools": ["search_customers", "get_order_history", "create_jira_ticket"] } ``` ## Example selection guide - start with `webhook` if you already own the backend - use `proxy` when you want a cleaner contract over an upstream API - use `isolated` when you need bounded custom logic without a full service If you need a shell, files, or a long-running process, use a sandbox instead. --- ### Execution Modes Source: https://docs.everstack.ai/getting-started/functions/execution-modes Choose between webhook, proxy, and isolated execution for your functions. #### Metadata ```yaml title: Execution Modes description: Choose between webhook, proxy, and isolated execution for your functions. icon: Settings ``` Every function runs in one of three execution modes: - `webhook` - `proxy` - `isolated` Each mode is useful, but they fit different jobs. ## Quick decision guide - choose `webhook` when you already have a backend endpoint - choose `proxy` when you want to wrap an upstream API as a tool - choose `isolated` when you need lightweight custom code in a bounded runtime ## Webhook Webhook mode is the best starting point for most teams. Use it when you already have an API route or internal service and want Everstack to call it as a tool. ### Best for - customer lookup - order history - ticket creation - account actions - approval workflows - internal service calls ### Why teams like it - easy to connect to existing systems - keeps business logic in your backend - easiest mode to understand operationally ### When not to use it Do not use webhook mode if the main thing you need is inline custom code and you do not already have a service to call. ## Proxy Proxy mode is for wrapping an upstream API behind a cleaner function interface. Use it when you want Everstack to front an API and map input or output fields rather than building a custom webhook adapter yourself. ### Best for - simplifying noisy third-party APIs - exposing only part of an upstream API surface - normalizing request and response shapes - building reusable integration wrappers ### Why teams like it - reduces custom glue code - gives a cleaner tool contract to agents - useful for platform-style integration layers ### When not to use it Do not use proxy mode if a simple webhook to your backend is easier or if you need arbitrary custom logic instead of request mapping. ## Isolated Isolated mode runs custom code in a bounded isolated runtime. Use it when you need a small execution unit for transformations, calculations, validation, or integration glue logic. ### Best for - tax calculation - field normalization - payload validation - lightweight enrichment - format conversion - custom scoring or routing logic ### Why teams like it - no separate service required - narrower than a full sandbox - good for repeatable utility logic ### When not to use it Do not use isolated functions when you really need a live environment with shell access, files, port exposure, or long-running processes. That is a sandbox use case. ## Comparison table | Mode | Best fit | What you provide | Typical user value | | ---------- | ------------------------ | ----------------------- | -------------------------------------- | | `webhook` | existing backend actions | an endpoint you control | fast path from AI to business systems | | `proxy` | upstream API wrapping | base URL plus mappings | cleaner contracts for integrations | | `isolated` | bounded custom logic | runtime and code | utility compute without a full service | ## Recommended default If you are unsure where to start, start with `webhook`. It is usually the fastest path to production value because most teams already have business logic living in a service they can call. ## Related guidance - Read [Functions Overview](https://docs.everstack.ai/getting-started/functions/overview) for the product framing. - Read [Examples](https://docs.everstack.ai/getting-started/functions/examples) for concrete patterns. - Read [Functions vs Sandboxes](https://docs.everstack.ai/getting-started/functions-vs-sandboxes) to understand when isolated functions stop being the right tool. --- ### Functions Overview Source: https://docs.everstack.ai/getting-started/functions/overview Reusable tools that connect agents and workflows to APIs, services, and custom logic. #### Metadata ```yaml title: Functions Overview description: Reusable tools that connect agents and workflows to APIs, services, and custom logic. icon: Zap ``` Functions are Everstack's reusable tool layer. They let you turn APIs, services, and small units of custom logic into named tools that agents and workflows can call when they need to take action. The important framing is this: functions are not just for running code. They are how you connect AI systems to real business operations. ## What a function is A function is a registered tool with: - a `name` - a `description` - a parameter schema - an execution mode - controls like timeout, memory, retries, and enabled state Once registered, a function can be attached to agents, troopers, and workflow nodes. ## Why functions exist Functions solve a very specific problem: an LLM can reason, but it still needs a safe and structured way to do useful work. Functions provide that structure. Use them when you want AI to: - look up customers, orders, or tickets - trigger backend actions - call internal tools or external APIs - run small transforms or calculations - reuse the same action across many agents and workflows ## Where functions fit in Everstack Functions sit between reasoning and execution. 1. an agent or workflow receives a task 2. the model decides it needs a tool 3. Everstack exposes matching function definitions to the model 4. the selected function runs in its configured mode 5. the result comes back into the agent or workflow That makes functions the action layer for production AI systems. ## Common use cases ### Business system lookups Expose tools like `search_customers`, `get_order_history`, or `lookup_incident` so an assistant can answer questions with live data. ### Operational actions Expose tools like `create_jira_ticket`, `refund_order`, `page_oncall`, or `send_approval_request` so agents can do real work instead of only generating text. ### Lightweight custom logic Use isolated functions for tax calculation, payload validation, field normalization, scoring, and data shaping. ### Shared tool catalogs Define a function once and reuse it across multiple agents and workflows instead of rebuilding the same integration repeatedly. ## Why users value functions Functions are often one of the most production-useful features in Everstack because they are: - narrower than a sandbox - easier to reason about than broad compute access - highly reusable - close to existing APIs and services teams already own In many organizations, functions are configured occasionally but invoked constantly. ## Functions and sandboxes Functions and sandboxes are complementary. Use functions for repeatable actions with a clear contract. Use sandboxes for shell access, files, long-running processes, or interactive execution. Read [Functions vs Sandboxes](https://docs.everstack.ai/getting-started/functions-vs-sandboxes) for the full decision guide. ## Next steps - Read [Execution Modes](https://docs.everstack.ai/getting-started/functions/execution-modes) to choose between webhook, proxy, and isolated execution. - Read [Examples](https://docs.everstack.ai/getting-started/functions/examples) for common function patterns. - Read [Attaching Functions To Agents And Workflows](https://docs.everstack.ai/getting-started/functions/attaching-to-agents-and-workflows) to connect functions to runtime behavior. - Read [Functions vs Sandboxes](https://docs.everstack.ai/getting-started/functions-vs-sandboxes) to decide which primitive fits your use case. - Use the [Functions API](https://docs.everstack.ai/api-reference/functions) to create and manage functions programmatically. --- ### Caching Source: https://docs.everstack.ai/getting-started/gateway/caching Exact and semantic response caching for LLM calls. #### Metadata ```yaml title: Caching description: Exact and semantic response caching for LLM calls. icon: HardDrive ``` The gateway can cache LLM responses to reduce latency, lower costs, and avoid redundant provider calls. Two cache types are available, and they work together: exact caching for identical requests, and semantic caching for requests that are similar but not byte-identical. ## When to use caching Caching is most valuable when your application sends repeated or near-identical prompts. Common scenarios include: - customer support agents that handle similar questions across sessions - classification or extraction pipelines that process similar inputs - development and testing workflows where the same prompts are sent repeatedly - high-traffic endpoints where a subset of requests are functionally identical Caching is less useful for open-ended conversation where every message is unique. ## How exact caching works Exact caching stores responses keyed by an xxHash of the request contents. The hash is computed over: - the model name - the sorted message array - the temperature - the max_tokens value If an incoming request produces the same hash as a cached entry, the cached response is returned in under 1ms without contacting the provider. This is fast and deterministic. Two requests with identical parameters always produce the same cache key. ## How semantic caching works Semantic caching catches requests that are worded differently but carry the same meaning. For example, "What is the capital of France?" and "Tell me France's capital city" would miss an exact cache but hit a semantic cache. The gateway supports two semantic cache implementations: - **MinHash LSH** (default) -- uses locality-sensitive hashing to estimate similarity without any external calls. This is fast and requires no additional infrastructure. It works well for moderate similarity thresholds. - **Redis + embeddings** -- uses embedding vectors stored in Redis for higher-accuracy similarity matching. This requires a Redis instance and an embedding model, but produces better results for nuanced similarity. Both caches are checked in order: exact first, then semantic. The first hit wins. ## Configuration Enable caching and choose a backend: ```yaml cache: enabled: true type: "memory" # or "redis" memory: ttl: "10m" max_size: 50000 ``` Key settings: - `cache.enabled` -- turns caching on or off - `cache.type` -- `"memory"` for in-process storage, `"redis"` for shared storage across replicas - `cache.memory.ttl` -- how long entries live before expiration (default: `"10m"`) - `cache.memory.max_size` -- maximum number of cached entries (default: `50000`) All settings are overridable via environment variables with the `EVS_` prefix, for example `EVS_CACHE_TYPE=redis`. ## What is not cached - **Streaming responses** are not cached. The gateway only caches complete, non-streamed responses. If your request uses `stream: true`, the response will always go to the provider. - **Errored responses** are not cached. Only successful completions are stored. ## Cache bypass If you need to force a fresh provider call for a specific request, you can bypass the cache. This is useful when you know the cached result is stale or when you want to compare cached and fresh responses during debugging. Cache bypass is controlled at the request level and does not affect the global cache state. Other requests will continue to hit the cache normally. ## TTL and eviction Cached entries expire after the configured TTL. When the cache reaches `max_size`, the oldest entries are evicted to make room for new ones. For the in-memory backend, cache state is local to each gateway replica. If you are running multiple replicas and need shared cache state, use the Redis backend. For endpoint details, see the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway). --- ### CORS Source: https://docs.everstack.ai/getting-started/gateway/cors Cross-origin resource sharing configuration for browser-based clients. #### Metadata ```yaml title: CORS description: Cross-origin resource sharing configuration for browser-based clients. icon: Globe ``` CORS (Cross-Origin Resource Sharing) controls which browser origins can make requests to the gateway. If your application calls the gateway directly from frontend JavaScript, you need CORS configured correctly or the browser will block the requests. ## When to configure CORS You need CORS settings when: - your frontend makes direct API calls to the gateway from the browser - you are building a chat widget, playground, or demo that talks to the gateway client-side - your gateway serves requests from multiple domains or subdomains You do not need CORS if all LLM requests go through your own backend server. Server-to-server requests are not subject to browser CORS restrictions. ## Static CORS (server level) Static CORS is configured at the server level and applies to all requests, including unauthenticated preflight requests. ```yaml server: cors: enabled: true allowed_origins: - "https://app.example.com" - "https://staging.example.com" allowed_methods: - "GET" - "POST" - "OPTIONS" allowed_headers: - "Authorization" - "Content-Type" allow_credentials: true ``` Key settings: - `enabled` -- turns CORS handling on or off - `allowed_origins` -- list of origins permitted to make requests. Use `["*"]` to allow any origin. - `allowed_methods` -- HTTP methods the gateway accepts from cross-origin requests - `allowed_headers` -- request headers the client is allowed to send - `allow_credentials` -- whether the browser should include cookies and authorization headers ## Runtime CORS (per-tenant override) For multi-tenant deployments, each tenant can override CORS settings at runtime. When an authenticated request arrives, the gateway checks whether the resolved tenant has custom CORS configuration. If it does, the tenant's settings take precedence over the static server-level config. This is useful when different tenants embed the gateway in different frontend applications, each with its own origin. Runtime CORS only applies to authenticated requests. Preflight requests (OPTIONS) always use the static configuration because they are unauthenticated by design. ## Preflight behavior Browsers send a preflight OPTIONS request before making certain cross-origin calls (typically POST requests with custom headers). The gateway handles preflight requests using the static CORS configuration only. The flow is: 1. Browser sends an OPTIONS request with `Origin` and `Access-Control-Request-Method` headers 2. Gateway checks the origin against `allowed_origins` 3. If the origin is allowed, the gateway responds with the appropriate `Access-Control-Allow-*` headers 4. Browser proceeds with the actual request If the origin is not in the allowed list, the gateway omits the CORS headers and the browser blocks the request. ## Origin matching Origin matching follows these rules: - A wildcard (`"*"`) matches any origin - Specific origins are compared case-insensitively - The `Origin` header from the request must match at least one entry in `allowed_origins` If you use a wildcard origin with `allow_credentials: true`, be aware that most browsers reject this combination. Use explicit origins when credentials are enabled. ## Common configurations ### Open development gateway Allow all origins during development: ```yaml server: cors: enabled: true allowed_origins: ["*"] allowed_methods: ["GET", "POST", "OPTIONS"] allowed_headers: ["Authorization", "Content-Type"] allow_credentials: false ``` ### Production with specific origins Lock CORS to your known frontend domains: ```yaml server: cors: enabled: true allowed_origins: - "https://app.yourproduct.com" - "https://admin.yourproduct.com" allowed_methods: ["GET", "POST", "OPTIONS"] allowed_headers: ["Authorization", "Content-Type"] allow_credentials: true ``` For endpoint details, see the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway). --- ### Load Balancing Source: https://docs.everstack.ai/getting-started/gateway/load-balancing Distribute requests across providers with round-robin, weighted, or priority strategies. #### Metadata ```yaml title: Load Balancing description: Distribute requests across providers with round-robin, weighted, or priority strategies. icon: Scale ``` Load balancing distributes LLM requests across multiple providers or provider endpoints. This helps you spread cost, avoid hitting a single provider's rate limits, and take advantage of different providers' strengths for the same model class. ## When to use load balancing Enable load balancing when you: - have API keys for multiple providers that serve comparable models - want to distribute cost across providers with different pricing tiers - need to reduce the blast radius of a single provider outage - want to gradually shift traffic between providers during a migration If you only use one provider, load balancing has no effect. ## Strategies The gateway supports three load balancing strategies: ### Priority Priority is the default strategy. It always sends requests to the first provider in the list. If that provider fails, it moves to the next one. Use priority when you have a clear first choice and only want alternatives as a safety net. This is the most predictable strategy because traffic patterns do not change unless a provider is unhealthy. ### Round robin Round robin rotates the starting provider using a hash of the request. Over many requests, traffic distributes roughly evenly across all configured providers. Use round robin when your providers have similar capabilities and pricing, and you want to spread load without manual weight tuning. ### Weighted Weighted selection lets you assign a numeric weight to each provider. The gateway uses cumulative weight selection to route requests proportionally. Use weighted when you want precise control over traffic distribution. For example, you might send 75% of traffic to OpenAI and 25% to Anthropic: ```yaml gateway: load_balancer: enabled: true strategy: "weighted" weights: openai: 3 anthropic: 1 ``` In this configuration, OpenAI receives roughly three out of every four requests. ## Configuration ```yaml gateway: load_balancer: enabled: true strategy: "round_robin" ``` Key settings: - `enabled` -- turns load balancing on or off - `strategy` -- one of `"priority"`, `"round_robin"`, or `"weighted"` - `weights` -- a map of provider names to integer weights (only used with the `"weighted"` strategy) ## Health checks The gateway tracks provider health using rate limit headers returned by each provider. It understands the header patterns used by major providers like OpenAI and Anthropic. When a provider's rate limit headers indicate it is near or at capacity, the load balancer can deprioritize it in favor of healthier alternatives. This happens automatically and does not require manual intervention. Health check state is maintained in memory and resets when the gateway restarts. ## Relationship to routing and fallback Load balancing and routing serve different purposes: - **Routing** resolves which model and provider handle a request based on the `model` field, aliases, and the catalog. - **Load balancing** distributes requests across providers after routing has determined the eligible set. - **Fallback chains** handle failures by trying alternative providers in sequence, parallel, or round-robin order. Load balancing operates on the happy path, distributing traffic across healthy providers. Fallback chains operate on the error path, recovering from individual provider failures. Both can be active at the same time. See [Routing](https://docs.everstack.ai/getting-started/gateway/routing) for details on provider selection and fallback chains. For endpoint details, see the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway). --- ### Gateway Overview Source: https://docs.everstack.ai/getting-started/gateway/overview The AI Gateway -- a unified, OpenAI-compatible proxy for 200+ LLM models. #### Metadata ```yaml title: Gateway Overview description: The AI Gateway -- a unified, OpenAI-compatible proxy for 200+ LLM models. icon: Router ``` The AI Gateway is a unified proxy that sits between your application and every LLM provider you use. It exposes a single OpenAI-compatible API, so your code talks to one endpoint regardless of whether the request ends up at OpenAI, Anthropic, Google, Mistral, Cohere, or any of the 200+ models in the catalog. ## What the gateway is The gateway is a middleware pipeline that processes every LLM request through a series of stages: - **CORS** handles preflight and cross-origin headers for browser-based clients - **Rate limiting** enforces per-key and per-tenant request budgets using a token bucket algorithm - **Authentication** validates API keys and resolves tenant context - **Provider routing** selects the right backend based on model aliases, explicit routes, and catalog lookups - **Cache lookup** checks exact and semantic caches before making a provider call - **Context compaction** trims conversation history when it exceeds the target model's context window - **Provider call** sends the request to the resolved provider with appropriate credential injection - **Response caching** stores the result for future cache hits Each stage is optional and configurable. You can run the gateway with nothing but routing enabled, or turn on every feature for full control. ## Why the gateway exists Without a gateway, every LLM integration is a direct dependency on a specific provider's SDK, auth format, rate limit behavior, and error shape. That creates problems: - switching providers means rewriting integration code - handling rate limits and outages requires custom retry logic per provider - caching, observability, and access control are bolted on per-service - multi-tenant isolation becomes an application-level concern The gateway centralizes all of that. Your application sends OpenAI-shaped requests. The gateway handles provider translation, failover, caching, rate limiting, and tenant isolation. ## Multi-tenant isolation Every tenant gets its own isolated provider registry. That means: - tenant A's API keys, model aliases, and provider configurations are invisible to tenant B - rate limits are enforced per-tenant (and optionally per-key within a tenant) - cache entries are scoped to the tenant that created them - CORS settings can be overridden per-tenant for runtime requests This isolation is automatic. If you are running Everstack in multi-tenant mode, the gateway inherits tenant boundaries from authentication. ## Provider abstraction The gateway translates between the OpenAI chat completions format and each provider's native API. This means: - you send `model: "claude-sonnet-4-20250514"` and the gateway routes to Anthropic's Messages API - you send `model: "gemini-2.0-flash"` and the gateway routes to Google's Generative Language API - streaming, tool calls, and structured output work across providers through format translation Custom model mappings let you define aliases like `model: "fast"` that resolve to any provider and model combination, with optional parameter overrides. ### Replaying provider-native reasoning Some providers require their native reasoning chunks to be sent back unchanged on the next turn. For those models, Everstack adds an optional `provider_content` field to the assistant message while keeping the standard OpenAI-compatible `content` string: ```json { "role": "assistant", "content": "The user-facing answer", "provider_content": [ { "type": "thinking", "thinking": [] }, { "type": "text", "text": "The user-facing answer" } ] } ``` Treat `provider_content` as opaque. Store it with the assistant message and include it unchanged on the next `/v1/chat/completions` request. For streaming responses, each `delta.provider_content` array contains the native chunks for that event; concatenate those arrays in arrival order. Providers that do not require native replay omit the field. This extension preserves [Mistral reasoning content across conversation turns](https://docs.mistral.ai/studio-api/conversations/reasoning) without changing the normal `content` field used for display. ## When to use the gateway Use the gateway when you want: - a single API surface for multiple LLM providers - automatic failover when a provider is down or rate-limited - response caching to reduce latency and cost on repeated queries - centralized rate limiting and access control - tenant-scoped provider isolation in a multi-tenant product - observability across all LLM traffic from one place ## Configuration The gateway is configured through the Everstack configuration file, environment variables with the `EVS_` prefix, or the admin dashboard. Core settings live under the `gateway` key: ```yaml gateway: rate_limit: enabled: true requests_per_minute: 500 burst: 100 load_balancer: enabled: true strategy: "round_robin" cache: enabled: true type: "memory" memory: ttl: "10m" max_size: 50000 server: cors: enabled: true allowed_origins: ["*"] ``` Every configuration key can also be set via environment variable. For example, `EVS_CACHE_TYPE=redis` or `EVS_SERVER_PORT=8080`. ## Next steps - [Routing](https://docs.everstack.ai/getting-started/gateway/routing) covers provider selection, model aliases, and fallback chains. - [Caching](https://docs.everstack.ai/getting-started/gateway/caching) explains exact and semantic response caching. - [Rate Limiting](https://docs.everstack.ai/getting-started/gateway/rate-limiting) walks through request budgets and key sources. - [Load Balancing](https://docs.everstack.ai/getting-started/gateway/load-balancing) describes how to distribute traffic across providers. - [CORS](https://docs.everstack.ai/getting-started/gateway/cors) covers cross-origin configuration for browser clients. - [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) documents the endpoint contracts. --- ### Rate Limiting Source: https://docs.everstack.ai/getting-started/gateway/rate-limiting Per-key and per-provider request rate limits. #### Metadata ```yaml title: Rate Limiting description: Per-key and per-provider request rate limits. icon: Gauge ``` Rate limiting protects your LLM providers from being overwhelmed and gives you control over how request budgets are distributed across tenants and API keys. The gateway uses a token bucket algorithm that provides smooth, burst-tolerant throttling. ## When to use rate limiting Enable rate limiting when you want to: - prevent a single tenant or API key from consuming all provider capacity - enforce usage tiers (free vs. paid plans with different request budgets) - protect against runaway loops or misconfigured clients that send requests too fast - stay within provider-side rate limits by throttling before requests leave the gateway ## How it works The gateway uses the token bucket algorithm (backed by `golang.org/x/time/rate`). Each rate limiter maintains a bucket that refills at a steady rate and allows short bursts up to a configured maximum. For example, with `requests_per_minute: 600` and `burst: 100`, a client can send up to 100 requests instantly, then sustain 10 requests per second as the bucket refills. ## Configuration ```yaml gateway: rate_limit: enabled: true requests_per_minute: 500 burst: 100 key_source: "correlation" ``` Key settings: - `enabled` -- turns rate limiting on or off - `requests_per_minute` -- the sustained request rate - `burst` -- the maximum number of requests allowed in a single burst - `key_source` -- determines how requests are grouped for rate limiting ## Key sources The `key_source` setting controls how the gateway identifies distinct clients for rate limiting purposes: - **correlation** (default) -- uses the correlation ID from the request context. This is the most flexible option because it respects however your application identifies request streams. - **api_key** -- rate limits by the API key used to authenticate. Each key gets its own bucket. - **user_id** -- rate limits by the user ID from the authenticated context. Useful when multiple keys belong to the same user. - **ip** -- rate limits by the client's IP address. Useful as a blunt defense against unauthenticated abuse, but less precise behind load balancers or proxies. ## Tenant isolation Rate limits are enforced per-tenant. Tenant A's traffic never counts against tenant B's budget, regardless of the key source setting. Within a tenant, the key source determines the granularity. For example, with `key_source: "api_key"`, each of tenant A's API keys gets its own independent rate limit bucket. ## Response headers When a request is rate-limited, the gateway returns HTTP 429 with headers that help clients implement backoff: - `Retry-After` -- seconds until the client should retry - `X-RateLimit-Limit` -- the configured requests-per-minute ceiling - `X-RateLimit-Remaining` -- how many requests are left in the current window - `X-RateLimit-Reset` -- Unix timestamp when the bucket fully refills Clients that respect `Retry-After` will recover gracefully without flooding the gateway with retries. ## Idle cleanup Rate limiter state is maintained in memory. To avoid unbounded memory growth, limiters that have not been used for 10 minutes are automatically cleaned up. The next request from that client creates a fresh limiter with a full bucket. ## Multi-replica note The current rate limiter is in-memory and local to each gateway replica. If you are running multiple replicas behind a load balancer, each replica maintains its own independent rate limit state. This means the effective rate limit is multiplied by the number of replicas. For strict global rate limiting across replicas, a shared Redis-backed limiter is planned but not yet available. In the meantime, you can account for this by dividing your target rate by the replica count. For endpoint details, see the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway). --- ### Routing Source: https://docs.everstack.ai/getting-started/gateway/routing Provider selection, model aliases, and fallback chains. #### Metadata ```yaml title: Routing description: Provider selection, model aliases, and fallback chains. icon: GitBranch ``` Routing determines which provider and model handle each request. The gateway resolves every incoming `model` field through a fixed resolution order, supports custom aliases, and can fall back through multiple providers when one is unavailable. ## Resolution order When a request arrives, the gateway resolves the model field in this order: 1. **Router cache** -- if this model was recently resolved, return the cached result immediately 2. **Custom models** -- tenant-scoped model mappings stored in the database (aliases like `fast` or `default`) 3. **Explicit routes** -- static routes defined in the gateway configuration file 4. **Catalog lookup** -- the built-in catalog of 200+ models with their provider mappings 5. **Error** -- if none of the above match, the request fails with a model-not-found error The first match wins. This means a custom model alias always takes priority over a catalog entry with the same name, which lets you override default routing per tenant. ## Custom model mappings Custom models let you define aliases that map to a specific provider, model, and optional parameter overrides. For example, you could create an alias called `fast` that routes to `gpt-4o-mini` on OpenAI with a lower `max_tokens` ceiling, or an alias called `smart` that routes to `claude-sonnet-4-20250514` on Anthropic with a specific `temperature`. These mappings are tenant-scoped. Each tenant can define their own aliases without affecting other tenants. ## Fallback chains Fallback chains let you define a sequence of providers to try when the primary choice fails. This is useful for handling rate limits, outages, and transient errors without application-level retry logic. ### Strategies Each fallback chain uses one of three strategies: - **priority** (default) -- tries providers in the order you list them, top to bottom. The first provider that succeeds handles the request. Use this when you have a clear preference and want the cheapest or fastest provider to handle most traffic. - **round_robin** -- rotates the starting provider using a hash of the request. Over many requests, traffic distributes roughly evenly across the chain. Use this when providers have similar capabilities and you want to spread load. - **parallel** -- sends the request to all providers concurrently and returns the first successful response. The other in-flight requests are cancelled. Use this when latency matters more than cost. ### What triggers a fallback A fallback is triggered when the current provider returns: - a rate limit error (HTTP 429) - a timeout - a server error (HTTP 5xx) Model-not-found errors do **not** trigger fallback. If a model does not exist on a provider, that is a configuration problem, not a transient failure. ### Metadata overrides Each entry in a fallback chain can override request parameters for that specific provider. This is useful because different providers have different limits and defaults. For example, a chain might use `claude-sonnet-4-20250514` as the primary with `max_tokens: 8192`, then fall back to `gpt-4o` with `max_tokens: 4096` and a lower `temperature`. Each fallback entry carries its own provider, model, and parameter overrides. ## Events The gateway emits routing events that appear in the observability pipeline. These include: - which model was requested - how the model was resolved (cache, custom, explicit, catalog) - whether fallback was triggered and which providers were attempted - the final provider that handled the request These events are useful for understanding routing patterns, diagnosing fallback frequency, and tuning your provider configuration. ## Relationship to load balancing Routing and load balancing are separate concerns. Routing decides which provider handles a request. Load balancing distributes requests across multiple instances of the same provider or across providers with similar capabilities. When both are enabled, routing resolves the model first, then load balancing selects the specific provider endpoint. See [Load Balancing](https://docs.everstack.ai/getting-started/gateway/load-balancing) for details. For full endpoint documentation, see the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway). --- ### Guardrails Configuration Source: https://docs.everstack.ai/getting-started/guardrails/configuration Configuring guardrails in gateway YAML and workflow studio nodes. #### Metadata ```yaml title: Guardrails Configuration description: Configuring guardrails in gateway YAML and workflow studio nodes. icon: Settings ``` Guardrails can be configured in two places: the gateway YAML config for API-level enforcement, and Workflow Studio nodes for per-workflow control. This page covers both approaches, the built-in templates, and how to handle violations. ## Enabling guardrails in the gateway Guardrails are disabled by default in the gateway configuration. To enable them, set `guardrails.enabled: true` in your gateway config. The default guardrail rules live in `cmd/config/gateway/defaults/guardrails.yaml`. This file defines all input guardrails, output guardrails, and templates with sensible defaults. When you enable guardrails, these defaults take effect immediately. The dedicated UI page at `/gateway/guardrails` is currently a coming-soon stub. All gateway guardrail configuration is done through YAML for now. ### Overriding defaults You can override any default by redefining it in your gateway config. For example, to disable PII detection while keeping everything else: ```yaml input_guardrails: pii_detection: enabled: false ``` To change the content filtering threshold for a specific category: ```yaml input_guardrails: content_filtering: categories: violence: threshold: 0.5 ``` To change the jailbreak detection action from flag to block: ```yaml output_guardrails: jailbreak_detection: action: "block" ``` ### Available actions Each guardrail supports one of three actions: | Action | Behavior | | --- | --- | | **block** | Stop the request or response entirely. Return an error with violation details. | | **redact** | Replace the matched content with a placeholder and continue processing. Only available for input guardrails. | | **flag** | Record the violation but allow the request or response to proceed. Useful for monitoring before enforcing. | ### Token limits Token limits are an input guardrail that prevents oversized requests from consuming excessive resources. The defaults are: ```yaml input_guardrails: token_limits: enabled: true max_input_tokens: 100000 max_total_tokens: 200000 action: "truncate" ``` Adjust these values based on your model's context window and your cost tolerance. ## Configuring in Workflow Studio In Workflow Studio, guardrails are visual nodes that you drag onto the canvas and wire into your workflow. ### Adding input guardrails 1. Open your workflow in Workflow Studio. 2. Drag an **InputGuardrailsExecutor** node onto the canvas. 3. Place it between your input node and your LLM node. 4. Configure which checks to enable (PII detection, prompt injection, content filtering) in the node's settings panel. 5. Wire the **pass** output handle to your LLM node. 6. Wire the **block** output handle to your error-handling or fallback logic. ### Adding output guardrails 1. Drag an **OutputGuardrailsExecutor** node onto the canvas. 2. Place it between your LLM node and your output node. 3. Configure which checks to enable (jailbreak detection, toxicity detection, code execution prevention) in the node's settings panel. 4. Wire the **pass** output handle to your response delivery node. 5. Wire the **block** output handle to your error-handling logic. ### Pass and block handles Every guardrail node has exactly two output handles. This makes the control flow explicit: you always define what happens on both the happy path and the violation path. There is no silent failure mode. Common patterns for the block handle: - Return a generic error message to the user - Log the violation and route to a human review queue - Retry with a modified prompt that removes the flagged content - Return a cached safe response ## Combining multiple guards You can chain multiple guardrail nodes in sequence if you want different violation handling for different checks. For example, you might want PII violations to trigger a redaction-and-continue flow while prompt injection violations trigger a hard block. In the gateway, all enabled guardrails run on every request. The request is blocked if any guardrail produces a block result. Checks run in order from cheapest to most expensive: token limits, then prompt injection, then PII detection, then content filtering. ## Handling violations When a guardrail fires, the violation is recorded in the `ExecutionContext` under `input_guardrail_violations` (for input checks) or the output equivalent. Each violation record includes: - Which guardrail fired - The matched pattern or category - The severity level (low, medium, high) - The action taken (block, redact, flag) These records are visible in: - **Workflow execution logs** -- see exactly where a workflow branched to the block path - **Observability traces** -- every guardrail check appears as a span in the request trace - **Gateway error responses** -- blocked requests include violation details in the response body ## Built-in templates The default guardrails config includes three templates for common compliance scenarios. Templates bundle input and output patterns into a named, reusable configuration. ### Financial data protection Designed for applications that handle payment information or financial records. Blocks credit card numbers and SSNs on input. Redacts financial amounts (dollar values) on output. ### Healthcare data protection Designed for applications that handle medical records or patient data. Blocks SSNs on input, redacts medical record numbers, and flags medical terminology (diagnosis, treatment, medication) on output. ### Code safety Designed for applications that generate or execute code. Blocks dangerous function calls (`exec()`, `eval()`) on input. Blocks destructive shell commands (`rm -rf`, `del /s`, `format`) on output. ### Using a template Templates are defined in the `templates` section of the guardrails YAML. To apply a template, reference its patterns in your guardrail configuration. Templates serve as a starting point -- you can customize the patterns, actions, and severity levels to match your specific requirements. ## Recommended setup For most applications, start with this approach: 1. **Enable guardrails** in your gateway config with the defaults. 2. **Set all actions to flag** initially so you can observe what gets caught without disrupting users. 3. **Review the traces** in observability to understand your violation patterns. 4. **Switch to block** for the guardrails that are catching real violations, and tune thresholds for any that produce too many false positives. 5. **Add Workflow Studio nodes** for workflows that need custom violation handling beyond the gateway defaults. This gives you visibility first and enforcement second, which reduces the risk of blocking legitimate traffic during initial rollout. --- ### Input Guardrails Source: https://docs.everstack.ai/getting-started/guardrails/input-guardrails PII detection, prompt injection prevention, and content filtering for incoming requests. #### Metadata ```yaml title: Input Guardrails description: PII detection, prompt injection prevention, and content filtering for incoming requests. icon: ShieldAlert ``` Input guardrails inspect every message before it reaches the LLM. Their job is to catch dangerous, sensitive, or policy-violating content at the point of entry, before tokens are spent and before the model has a chance to act on a bad input. Three checks make up the input guardrail layer: PII detection, prompt injection prevention, and content filtering. They can run independently or together, and each produces a pass or block result. ## PII detection PII detection scans incoming text for personally identifiable information using pattern-based heuristics. When it finds a match, the guardrail either blocks the request entirely or redacts the sensitive value before forwarding it to the model. ### What it catches | PII type | Pattern | Default action | | --- | --- | --- | | **Social Security Numbers** | `XXX-XX-XXXX` format | Block | | **Credit card numbers** | 16 digits with optional spaces or dashes | Block | | **Email addresses** | Standard `user@domain.tld` pattern | Redact | | **Phone numbers** | US format, 10 digits with optional separators | Redact | | **IP addresses** | IPv4 dotted notation | Redact | The difference between block and redact matters. Blocking stops the request entirely and returns an error. Redacting replaces the sensitive value with a placeholder and lets the request continue. SSNs and credit card numbers default to block because they should never reach a model. Email addresses and phone numbers default to redact because the surrounding context may still be useful. ### When to enable PII detection Enable PII detection when your application accepts freeform user input, especially in customer-facing chat interfaces, support tools, or any workflow where users might paste personal information without thinking. It is particularly important in regulated industries where sending PII to a third-party model could create a compliance violation. ## Prompt injection prevention Prompt injection detection scans incoming messages for patterns that attempt to override, bypass, or extract the system prompt. This is a keyword-based detector that matches against known attack patterns. ### What it catches The default configuration detects 12+ patterns including: - **Instruction override**: "ignore previous instructions", "forget everything above", "disregard all previous" - **Role impersonation**: "system:", "assistant:", "human:", "user:" -- attempts to inject fake role markers - **Prompt extraction**: patterns designed to make the model reveal its system prompt All matched patterns result in a **block** action with high severity. ### How it works The detector runs a case-insensitive scan of the user message against the configured pattern list. This is intentionally simple and fast. It does not use an LLM or classifier, which means it adds near-zero latency and works without external API calls. The tradeoff is that keyword matching can produce false positives on legitimate messages that happen to contain trigger phrases. If your use case involves discussing AI safety, prompt engineering, or security topics, you may need to tune the pattern list or adjust the sensitivity. ### When to enable prompt injection detection Enable it for any production application where untrusted users can send freeform messages. It is especially important when your system prompt contains sensitive instructions, API keys, tool definitions, or business logic that should not be exposed. ## Content filtering Content filtering delegates to the OpenAI Moderation API to classify incoming messages across five harm categories. Each category has a configurable threshold (default 0.7) and can be individually enabled or disabled. ### Categories | Category | What it covers | | --- | --- | | **Hate** | Content that expresses or promotes hate based on identity | | **Harassment** | Content that threatens, intimidates, or bullies | | **Self-harm** | Content that promotes or encourages self-harm | | **Sexual** | Sexually explicit content | | **Violence** | Content that depicts or promotes violence | When the moderation API returns a score above the configured threshold for any enabled category, the guardrail blocks the request. ### When to enable content filtering Enable content filtering when you need to prevent harmful content from reaching the model. This is relevant for consumer-facing applications, applications used by minors, and any deployment where you have a duty of care around the content your system processes. Because content filtering calls an external API, it adds a small amount of latency to the request path. For latency-critical applications, consider whether the safety tradeoff is worth the added round trip. ## How the three checks work together When multiple input guardrails are enabled, they all run on every incoming request. The request is blocked if **any** guardrail produces a block result. The evaluation order is: 1. **Token limits** -- checked first to reject oversized inputs cheaply 2. **Prompt injection** -- fast keyword scan, no external calls 3. **PII detection** -- pattern matching with block or redact actions 4. **Content filtering** -- external API call, highest latency This order is designed to fail fast. The cheapest checks run first so that obviously bad inputs are rejected before spending time on more expensive checks. When a guardrail blocks, the violation is recorded in the execution context and the block result propagates immediately. In Workflow Studio, this means the flow routes through the **block** output handle. In the gateway, the request returns an error response with violation details. --- ### Output Guardrails Source: https://docs.everstack.ai/getting-started/guardrails/output-guardrails Jailbreak detection, toxicity filtering, and output safety enforcement. #### Metadata ```yaml title: Output Guardrails description: Jailbreak detection, toxicity filtering, and output safety enforcement. icon: ShieldCheck ``` Output guardrails inspect the model's response after generation but before it reaches the user. They exist because you cannot trust a model to police its own output. Even well-configured system prompts can be bypassed, and model behavior drifts across versions. Output guardrails give you a deterministic enforcement layer on the response path. ## How output guards differ from input guards Input guardrails protect the model from bad inputs. Output guardrails protect the user from bad outputs. This distinction matters because the threat model is different. On the input side, the adversary is a user trying to manipulate the model. On the output side, the problem is a model that has been successfully manipulated, has hallucinated, or has generated content that violates your policies regardless of the input. Output guardrails also serve a compliance function. Even if the input was clean, the model might generate content that your application is not allowed to surface. Output guards are your last line of defense before content reaches the end user. ## Jailbreak detection Jailbreak detection scans model output for markers that indicate the model's safety measures have been bypassed. This covers both explicit jailbreak indicators and patterns that suggest the model is operating outside its intended boundaries. ### What it catches | Pattern type | Examples | | --- | --- | | **Explicit markers** | `[jailbreak]`, `[developer mode]`, refusal bypass strings | | **Safety refusal phrases** | "I apologize, but I cannot", "I'm not able to", "I'm not programmed to" | | **Role-breaking indicators** | "My purpose is to", "I'm designed to" -- phrases that suggest the model is narrating its own constraints | The default action is **flag** rather than block. This is intentional. Safety refusal phrases in particular can appear in legitimate responses where the model correctly declines a request. Flagging records the event for review without disrupting the user experience. If your application has stricter requirements, you can change the action to **block** in the guardrails configuration. ### When to enable jailbreak detection Enable it for any application where prompt injection is a realistic threat -- consumer chat interfaces, applications with public-facing APIs, or any system where the model has access to tools or sensitive data that a jailbroken response could expose. ## Toxicity detection Toxicity detection applies the same moderation API used by input content filtering, but on the output side. It classifies the model's response across the same five harm categories: hate, harassment, self-harm, sexual, and violence. ### Why filter outputs separately A clean input does not guarantee a clean output. Models can generate toxic content in response to benign prompts, especially when they are reasoning about sensitive topics, generating creative content, or following complex multi-turn conversations. Output toxicity filtering catches these cases. Each category uses a configurable threshold (default 0.7) and can be individually toggled. The default action is **block**, which prevents the toxic response from reaching the user. ## Code execution prevention Code execution prevention scans model output for dangerous function calls and shell commands. This is relevant when model output is executed programmatically, for example in code generation workflows or agent tool calls. ### What it catches Patterns include `exec()`, `eval()`, `system()`, `subprocess.`, `os.system`, `shell_exec`, `passthru`, and `proc_open`. The default action is **block**. This guard is most important when your application pipes model output into a code execution environment. If your application only displays output as text, the risk is lower, but enabling this guard still prevents the model from suggesting dangerous patterns that a user might copy and run. ## Hallucination detection Hallucination detection infrastructure is present in the guardrails system but is currently reserved for future use. The indicators it watches for include: - Specific dates cited without sources - Specific numbers provided without context - Claims about current events - Technical details stated without references The default action is **flag**. This check is not yet active in production, but the configuration exists so that it can be enabled as the detection methodology matures. ## The pass/block flow Every output guardrail produces one of two results: **pass** or **block** (with **flag** as a non-blocking variant that records the event without stopping the response). In **Workflow Studio**, the OutputGuardrailsExecutor node has two output handles. Wire the **pass** handle to your response delivery logic and the **block** handle to your error or fallback logic. This gives you explicit control over what happens when a guardrail fires. In the **gateway**, a blocked output returns an error response to the caller with violation details. A flagged output passes through to the caller but the flag is recorded in the trace for later review. ### Violation tracking All output guardrail violations are recorded in the `ExecutionContext`. This means they appear in traces, workflow execution logs, and observability dashboards. Use this data to: - Audit how often output guardrails intervene - Identify models or prompts that frequently trigger violations - Tune thresholds to balance safety with user experience - Build reports for compliance requirements --- ### Guardrails Overview Source: https://docs.everstack.ai/getting-started/guardrails/overview Runtime safety checks for LLM inputs and outputs. #### Metadata ```yaml title: Guardrails Overview description: Runtime safety checks for LLM inputs and outputs. icon: Shield ``` Guardrails are runtime safety checks that inspect LLM inputs before they reach a model and outputs before they reach a user. They catch prompt injection attempts, PII leaks, toxic content, jailbreak markers, and other policy violations at the boundary where your application meets the model. ## Why runtime guardrails matter Static rules and content policies only cover what you can predict in advance. LLM applications face a different problem: inputs are freeform, outputs are non-deterministic, and adversarial prompts evolve constantly. Guardrails give you a programmable safety layer that runs on every request, not just the ones you anticipated. Without guardrails, a single prompt injection can override your system prompt, a user can accidentally paste a credit card number into a chat, or a model can return content that violates your compliance requirements. Guardrails catch these at runtime so your application logic does not have to. ## Input vs output guardrails Guardrails split into two stages that map to the request lifecycle. **Input guardrails** run before the request reaches the LLM. They inspect the user's message and decide whether to allow, block, or redact before tokens are spent. This is where PII detection, prompt injection prevention, and content filtering live. **Output guardrails** run after the model responds but before the response reaches the user. They inspect the model's output for jailbreak markers, toxic content, and other policy violations. This is where you enforce output safety without trusting the model to self-police. Both stages produce a clear **pass** or **block** result. When a guardrail blocks, the violation is recorded and the request or response is stopped before it crosses the boundary. ## Where guardrails run Guardrails are available in two places depending on how you use Everstack. ### Workflow Studio nodes In Workflow Studio, guardrails are drag-and-drop nodes. You place an **InputGuardrailsExecutor** node before your LLM node and an **OutputGuardrailsExecutor** node after it. Each node has two output handles: **pass** and **block**. You wire the pass handle to the next step and the block handle to your error-handling logic. This gives you full visual control over which checks run, what order they execute in, and how your workflow responds to violations. ### Gateway YAML configuration For API-level protection, guardrails are configured in the gateway's YAML config. The defaults live in `guardrails.yaml` and cover prompt injection patterns, PII detection rules, content filtering categories, token limits, jailbreak detection, and code execution prevention. Gateway guardrails apply to every request that flows through the gateway, regardless of whether it originates from a workflow, an SDK call, or a raw HTTP request. Guardrails are disabled by default in the gateway config (`guardrails.enabled: false`). You need to explicitly enable them. The dedicated UI page at `/gateway/guardrails` is a coming-soon stub -- for now, configure guardrails through YAML or Workflow Studio. ## Available checks at a glance ### Input | Check | What it catches | Default action | | --- | --- | --- | | **PII Detection** | SSNs, credit card numbers, email addresses, phone numbers, IP addresses | Block or redact depending on type | | **Prompt Injection** | "ignore previous instructions", role impersonation, system prompt extraction | Block | | **Content Filter** | Hate, harassment, self-harm, sexual, violence (via moderation API, threshold 0.7) | Block | | **Token Limits** | Inputs exceeding configured token ceilings | Truncate | ### Output | Check | What it catches | Default action | | --- | --- | --- | | **Jailbreak Detection** | Jailbreak markers, developer mode flags, refusal bypass patterns | Flag | | **Toxicity Detection** | Same five content categories as input, applied to model output | Block | | **Code Execution Prevention** | Dangerous function calls like `exec()`, `eval()`, `os.system` | Block | | **Hallucination Detection** | Unsourced claims, specific dates/numbers without references (reserved, not yet active) | Flag | ## Availability Guardrails are available on all tiers. There is no minimum plan requirement to use them. ## How violations are tracked When a guardrail fires, the violation is recorded in the `ExecutionContext` as an `input_guardrail_violation` or output equivalent. This means violations are visible in traces and workflow execution logs. You can use this data to audit policy enforcement, tune thresholds, and understand how often your guardrails intervene. ## Next steps - [Input Guardrails](https://docs.everstack.ai/getting-started/guardrails/input-guardrails) -- PII detection, prompt injection prevention, and content filtering in detail. - [Output Guardrails](https://docs.everstack.ai/getting-started/guardrails/output-guardrails) -- Jailbreak detection, toxicity filtering, and output safety enforcement. - [Guardrails Configuration](https://docs.everstack.ai/getting-started/guardrails/configuration) -- Enabling guardrails in gateway YAML, configuring workflow nodes, and using templates. --- ### Introduction Source: https://docs.everstack.ai/getting-started Install, configure, and run Everstack -- the unified AI infrastructure platform. #### Metadata ```yaml title: Introduction description: Install, configure, and run Everstack -- the unified AI infrastructure platform. icon: Rocket ``` Welcome to Everstack. This section walks you through installation, configuration, and the core concepts you need to ship AI-powered applications on Everstack. ## Cloud URLs Everstack Cloud uses two URL patterns: - **Dashboard** (`https://app.everstack.ai`) -- the cloud admin app where you manage providers, agents, evaluations, and deployments. - **Your instance gateway** (`https://{instance}.{region}.everstack.ai`) -- the API endpoint for your dedicated managed instance. For example, `https://acme.us-east.everstack.ai`. This is what your application code sends requests to. Throughout the docs, code examples use the `https://{instance}.{region}.everstack.ai` placeholder. Replace it with your own instance URL, which you can find in the dashboard under **Settings -> Instance**. For self-hosted deployments, see [Installation](https://docs.everstack.ai/getting-started/installation) and replace the URL with your own host (e.g., `http://localhost:8089`). ## Start here Get Everstack running locally or on your own infrastructure. Send your first request through the gateway in minutes. Configure providers, auth, and platform features. Understand how Everstack's services fit together. ## Features Unified proxy for 200+ LLMs with routing, caching, and fallbacks. Build autonomous agents with tool use and human-in-the-loop. Visual builder for multi-step AI pipelines. Managed vector collections for RAG and agent memory. Isolated runtimes for safe code execution. Text-to-speech, speech-to-text, and voice cloning for AI applications. ## Data and safety S3-compatible object storage for artifacts, files, and agent-generated content. PII detection, prompt injection prevention, and content safety at runtime. LLM-as-judge scoring, built-in metrics, and regression detection for CI/CD. ## Connect and observe GitHub, Slack, Discord, and Telegram connectors for agents and workflows. Tracing, logging, and metrics powered by OpenTelemetry. --- ### Get Started Source: https://docs.everstack.ai/getting-started/installation Sign up for Everstack Cloud and install the CLI. #### Metadata ```yaml title: Get Started description: Sign up for Everstack Cloud and install the CLI. icon: Rocket ``` Everstack is a **managed cloud platform**. There's nothing to install or operate -- you get a dedicated instance with its own gateway URL, dashboard, and isolated resources. The only thing you install locally is the optional CLI for power-user workflows. ## 1. Sign up for Everstack Cloud Create your account at [app.everstack.ai](https://app.everstack.ai). During signup you choose: - A **workspace name** (used as your instance subdomain) - A **region** where your instance runs Once provisioned, you get: | Resource | URL | | --- | --- | | Dashboard | `https://app.everstack.ai` | | Your gateway | `https://{instance}.{region}.everstack.ai` | You can find your exact gateway URL in the dashboard under **Settings -> Instance**. Throughout these docs we use `{instance}.{region}` as a placeholder. Regions currently available: `us-east`, `us-west`, `eu-west`, `ap-southeast`. More regions are added as demand grows. ## 2. Add an LLM provider Open the dashboard at [app.everstack.ai](https://app.everstack.ai) and head to **Vault -> LLM Providers**. Click **Add Provider**, select OpenAI, Anthropic, Google, or any of the [22 supported providers](https://docs.everstack.ai/getting-started/providers), and paste your provider API key. Your gateway can now route requests to that provider. You can add as many providers as you want. The gateway routes requests based on the model name you send. ## 3. Create an Everstack API key Go to **Vault -> API Keys** and click **Create Key**. Give it a name, optionally set an expiry, and copy the key. **The key is only shown once.** This is the key your application will use when calling your Everstack gateway. ## 4. Install the CLI (optional) The CLI is useful for CI/CD pipelines, scripted operations, evaluation runs, and managing resources from your terminal. Everything the CLI does can also be done through the dashboard and SDKs. ### Homebrew (macOS and Linux) ```bash brew install everstacklabs/tap/evs ``` Upgrade later with `brew upgrade evs`. ### Install script ```bash curl -fsSL https://get.everstack.ai/install.sh | bash ``` The script auto-detects your OS and architecture, downloads the binary, verifies the SHA256 checksum, and installs it to `/usr/local/bin`. ```bash evs --version ``` `everstack` is also installed as a backward-compatible alias. The installer aborts if the download does not match the checksum published in the release's `SHA256SUMS.txt`. Pass `--no-verify` only if you have a specific reason to skip that check. **Options:** | Flag | Description | Default | | --- | --- | --- | | `--version` | Install a specific version (`vX.Y.Z`) or `latest` | `latest` | | `--bin-dir` | Installation directory | `/usr/local/bin` | | `--no-verify` | Skip SHA256 checksum verification | `false` | ```bash # Install a specific version curl -fsSL https://get.everstack.ai/install.sh | bash -s -- --version v0.1.22 # Install to a custom directory (no sudo needed) curl -fsSL https://get.everstack.ai/install.sh | bash -s -- --bin-dir ~/.local/bin ``` Available versions are listed at [github.com/everstacklabs/everstack](https://github.com/everstacklabs/everstack/releases). **Authenticate:** ```bash evs login ``` Opens a browser-based login flow and stores your credentials in `~/.config/everstack/credentials`. After login: ```bash evs whoami ``` ## Self-hosting If you need to self-host Everstack on your own infrastructure (regulated workloads, air-gapped environments, full control over data residency), see the [Deployment guide](https://docs.everstack.ai/deployment/docker). The self-hosted edition has the same feature set as the cloud, plus you operate the binary, database, and dependencies yourself. ## Next steps Send your first request through the gateway in under five minutes. Typed client for gateway, agents, memory, evaluations, and more. All 22 supported LLM providers and how to configure each. How the gateway, agents, sandboxes, and storage fit together. --- ### Channels Source: https://docs.everstack.ai/getting-started/integrations/channels Slack, Discord, and Telegram connectors for agent communication. #### Metadata ```yaml title: Channels description: Slack, Discord, and Telegram connectors for agent communication. icon: MessageCircle ``` Channels connect agents to messaging platforms so users can interact with them in the tools they already use. Slack, Discord, and Telegram are supported today, each with its own transport mechanism but a shared interface underneath. Channel connectors are in **beta**. The core messaging flow is stable, but the configuration API may change before the 1.0 release. ## How channels work Every channel connector implements the same `Connector` interface. This means the system above it -- the `ChannelManager` -- does not care whether a message came from Slack, Discord, or Telegram. It routes messages to agent sessions and routes agent responses back to the correct thread or conversation. The flow looks like this: 1. A user sends a message on a connected platform. 2. The connector receives the event through its platform-specific transport. 3. `ChannelManager` maps the message to an agent session (creating one if needed). 4. The agent processes the message and produces a response. 5. The response is formatted for the target platform and sent back to the original thread. This is fully bidirectional. Agents can also initiate messages when triggered by other events, not only in response to user input. ## Supported platforms ### Slack Slack uses [Socket Mode](https://api.slack.com/apis/connections/socket), which means Everstack connects to Slack over a WebSocket rather than requiring an inbound webhook URL. This is simpler to set up because you do not need to expose a public endpoint. Capabilities: - Message and interaction handling - Thread history for maintaining conversation context - Block Kit formatting for rich message layouts - Rich embeds for structured agent responses ### Discord Discord uses a full event listener that connects to the Discord gateway. It supports: - Message events in configured channels - Button interactions for human-in-the-loop (HITL) approval and denial workflows - Rich embeds and formatted responses The HITL button interactions are particularly useful for agents that need human approval before executing high-impact actions. The agent posts a message with approve/deny buttons, and the user's click is routed back to the agent session as an interaction event. ### Telegram Telegram uses a polling-based message handler. Everstack periodically polls the Telegram Bot API for new messages rather than receiving push events. Capabilities: - Text message handling - Message routing to agent sessions Telegram's polling approach is the simplest of the three transports and works well behind firewalls where inbound connections are restricted. ## Setting up a channel ## Create the platform bot or app Before connecting to Everstack, you need a bot or app on the target platform: - **Slack**: Create a Slack app at [api.slack.com/apps](https://api.slack.com/apps) with Socket Mode enabled. Note the bot token and app-level token. - **Discord**: Create a bot at [discord.com/developers](https://discord.com/developers/applications). Note the bot token and enable the required gateway intents (Message Content, Guild Messages). - **Telegram**: Create a bot through [@BotFather](https://t.me/BotFather). Note the bot token. ## Create a channel binding In the Everstack dashboard, go to **Settings > Integrations > Channels** and click **Add Channel**. Select the platform, enter the credentials from the previous step, and choose which agent should handle messages. You can also create bindings through the API: ```bash curl -X POST https://{instance}.{region}.everstack.ai/v1/channels \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "platform": "slack", "config": { "bot_token": "xoxb-...", "app_token": "xapp-..." }, "agent_id": "agent_abc123" }' ``` ## Test the connection Use the **Test Connection** button in the dashboard or call the test endpoint to verify that Everstack can reach the platform and authenticate successfully. The health check confirms transport connectivity and credential validity without sending a visible message. ## Channel discovery For platforms that support it, Everstack can discover available channels and conversations. This lets you browse Slack channels, Discord text channels, or Telegram groups from the dashboard and select which ones the agent should listen in. ## Managing channels The channel API supports the full lifecycle: | Operation | Description | | --- | --- | | Create | Bind a platform channel to an agent | | List | See all channel bindings for the tenant | | Get | Retrieve a specific binding's config and status | | Update | Change the agent, credentials, or platform config | | Delete | Remove the binding and disconnect | | Test | Verify connectivity without sending a message | | Health | Check whether the connector is currently healthy | All operations are available through both the dashboard UI and the REST API. See the [API Reference](https://docs.everstack.ai/api-reference) for endpoint details. ## Plans and limits Channels are metered by **messages, not connections**. Connecting another Slack workspace, Discord server, or Telegram group never changes what you pay, and every plan reaches every platform. | Plan | Channels | Platforms | | --- | --- | --- | | Self-hosted (Community Edition) | Unlimited | Slack, Discord, Telegram | | Starter (free, hosted) | 3 | Slack, Discord, Telegram | | Build | Unlimited | Slack, Discord, Telegram | | Scale | Unlimited | Slack, Discord, Telegram | | Enterprise | Unlimited | Slack, Discord, Telegram | Each hosted plan carries a monthly channel message allowance, which is the meter that actually prices channel usage. See [pricing](https://everstack.ai/pricing) for current allowances. A message counts when a user sends one to a connected channel. Agent replies, cron notifications, and messages refused by a limit are not counted. The meter stores no message content, only which tenant, channel, and platform the message arrived on. Creating a channel past the Starter count returns `resource_exhausted` with the current usage in the message. Channels already connected keep running; only the create is refused. Passing the monthly message allowance behaves differently by plan. On Starter, agent replies pause until the month rolls over. On paid plans nothing pauses and nothing extra is billed: the channel notes the overage once and it shows in your usage dashboard. Either way the channel says so at most once every few hours, not on every message. Self-hosted instances have no channel limit and no message allowance. A live connector costs a goroutine and an open socket for as long as it stays connected, and the messages it carries cost whoever runs the gateway, so on your own infrastructure both are yours to spend. Community Edition connects as many channels as you want across all three platforms. ## Tenant isolation Channel bindings are strictly scoped to the tenant that created them. A Slack workspace connected by one tenant is invisible to every other tenant. Connector credentials are stored encrypted and never shared. ## Next steps - [GitHub](https://docs.everstack.ai/getting-started/integrations/github) -- source control integration for repo access and webhooks - [Webhooks](https://docs.everstack.ai/getting-started/integrations/webhooks) -- trigger agents from generic HTTP events - [Agents](https://docs.everstack.ai/getting-started/agents/overview) -- build the agents that respond on your channels --- ### GitHub Source: https://docs.everstack.ai/getting-started/integrations/github GitHub App integration for repo access, branch discovery, and webhook handling. #### Metadata ```yaml title: GitHub description: GitHub App integration for repo access, branch discovery, and webhook handling. icon: Github ``` The GitHub integration creates a dedicated GitHub App for your tenant using the manifest-based OAuth flow. This gives you repo access, branch discovery, webhook handling, and PR review capabilities without sharing a single OAuth application across organizations. This integration is in **beta**. It is fully functional, but the API surface may change before the 1.0 release. ## Why a per-tenant GitHub App Most platforms use a single shared OAuth app that all customers install. Everstack takes a different approach: each tenant gets its own GitHub App, created through the [manifest flow](https://docs.github.com/en/apps/sharing-github-apps/registering-a-github-app-from-a-manifest). This matters for three reasons: 1. **Isolation** -- one tenant's credentials, webhook secret, and private key are never shared with another tenant. 2. **Granular permissions** -- each app requests only the permissions your organization approves. 3. **Auditability** -- GitHub shows the app in your organization's installed apps list with its own identity, not a generic "Everstack" entry. ## Prerequisites - Everstack running with authentication enabled - A GitHub account with permission to create apps in your organization - Feature tier: Basic or above (feature key: `GITHUB_INTEGRATION`) ## Setup ## Start the connection flow Navigate to **Settings > Integrations** in the admin dashboard. Find **GitHub** in the catalog and click **Connect**. Everstack generates a manifest describing the GitHub App (name, permissions, webhook URL) and redirects you to GitHub. ## Create the app on GitHub GitHub shows you the manifest details. Review the requested permissions and click **Create GitHub App**. GitHub creates the app, generates a private key, and redirects back to Everstack. Everstack stores the app ID, private key, client credentials, and webhook secret. These are encrypted at rest and scoped to your tenant. ## Install the app After the app is created, install it on one or more organizations or repositories. You control which repos the app can access through GitHub's standard installation UI. Back in the Everstack dashboard, the installation appears in the **GitHub > Installations** section. ## What you can do after setup ### Repository and branch discovery Once an installation is linked, Everstack can list repositories and branches through the GitHub API. This powers features like: - Selecting a repo and branch when configuring an agent's code context - Branch format configuration for naming conventions - Automatic repo suggestions in the dashboard ### Webhook handling The GitHub App registers a webhook URL during manifest creation. Everstack receives events such as `push`, `pull_request`, `installation`, and `check_suite`. Incoming webhooks are verified using HMAC signature verification against the per-tenant webhook secret. The handler enforces a 256KB body size limit and deduplicates deliveries to prevent duplicate processing if GitHub retries. You can configure which webhook events trigger agent sessions in **Settings > Integrations > GitHub > Webhooks**. ### PR review preferences The dashboard includes configuration for how agents interact with pull requests: - Whether to post review comments automatically - Branch format patterns for matching - Review style preferences These preferences are stored per tenant and apply to all agents that use the GitHub integration. ## Token management Everstack caches GitHub installation access tokens and refreshes them automatically. Tokens are refreshed with a 5-minute buffer before expiry, so API calls never fail due to an expired token under normal conditions. Token caching is in-memory with automatic eviction. You do not need to manage tokens manually. ## Managing installations ### Listing installations The **GitHub > Installations** section in the dashboard shows all installations linked to your tenant. Each entry shows the organization or user account, the repositories accessible, and the installation status. ### Removing an installation You can unlink an installation from Everstack through the dashboard. This removes the stored metadata and stops processing webhooks for that installation. It does not uninstall the GitHub App from your organization. To fully remove the app, uninstall it from GitHub's settings as well. ## Security considerations - **Webhook secrets** are unique per tenant and verified on every incoming request. - **Private keys** are stored encrypted and never exposed through the API or dashboard. - **Installation tokens** are short-lived (1 hour) and scoped to the repositories the installation has access to. - **Body size limits** (256KB) protect against oversized webhook payloads. - **Delivery deduplication** prevents replay or retry-induced double processing. ## Limitations - Only GitHub.com is supported. GitHub Enterprise Server support is not yet available. - The manifest flow requires the user to have app creation permissions in the target organization. - Webhook event filtering is configured in Everstack, not at the GitHub App level. All subscribed events are delivered, and Everstack filters them on receipt. ## Coming soon The integration catalog also shows **GitLab** and **Bitbucket** as planned source control integrations. These are on the roadmap but have no backend implementation yet. The UI placeholders are there to signal intent. ## Next steps - [Channels](https://docs.everstack.ai/getting-started/integrations/channels) -- connect Slack, Discord, or Telegram - [Webhooks](https://docs.everstack.ai/getting-started/integrations/webhooks) -- trigger agents from any HTTP source - [Agents](https://docs.everstack.ai/getting-started/agents/overview) -- build agents that use the GitHub integration --- ### Integrations Overview Source: https://docs.everstack.ai/getting-started/integrations/overview Connect Everstack to GitHub, Slack, Discord, Telegram, and external webhooks. #### Metadata ```yaml title: Integrations Overview description: Connect Everstack to GitHub, Slack, Discord, Telegram, and external webhooks. icon: Plug ``` Integrations connect Everstack to your existing development and communication tools. They let agents read repositories, respond in chat threads, react to webhook events, and participate in your team's existing workflows without requiring you to build custom glue code. ## What integrations do At the core, integrations solve two problems: 1. **Inbound triggers** -- external events (a GitHub push, a Slack message, an HTTP webhook) start or continue an agent session. 2. **Outbound actions** -- agents read repos, post messages, create pull request reviews, and interact with users on the platforms they already use. Every integration is scoped to a single tenant. Credentials, webhook secrets, and installation metadata are never shared across organizations. ## Available integrations | Integration | Status | Category | What it does | | --- | --- | --- | --- | | [GitHub](https://docs.everstack.ai/getting-started/integrations/github) | **Beta** | Source control | Per-tenant GitHub App, repo/branch discovery, PR webhooks | | [Slack](https://docs.everstack.ai/getting-started/integrations/channels) | **Beta** | Channel | Socket Mode connector for messages, threads, and interactions | | [Discord](https://docs.everstack.ai/getting-started/integrations/channels) | **Beta** | Channel | Event listener with button interactions for HITL approval | | [Telegram](https://docs.everstack.ai/getting-started/integrations/channels) | **Beta** | Channel | Polling-based message handler | | [Webhooks](https://docs.everstack.ai/getting-started/integrations/webhooks) | **Beta** | Trigger | Generic HTTP webhooks that start agent sessions | | GitLab | Coming soon | Source control | -- | | Bitbucket | Coming soon | Source control | -- | | Linear | Coming soon | Project management | -- | | Jira | Coming soon | Project management | -- | Coming-soon integrations appear in the integration catalog UI as placeholders. They have no backend implementation yet. ## How integrations are organized Integrations fall into three categories, each with a different role in the system: ### Source control Source control integrations give agents access to repositories, branches, and code review workflows. The GitHub integration is the first of these. It creates a dedicated GitHub App per tenant using the manifest flow, so each organization gets its own isolated app installation rather than sharing a single OAuth application. ### Channels Channel integrations connect agents to messaging platforms. Slack, Discord, and Telegram each use a platform-specific transport (Socket Mode, event listeners, polling), but all implement the same `Connector` interface. This means agents interact with channels through a unified API regardless of the underlying platform. Channels are bidirectional. Messages from users route to agent sessions, and agent responses route back to the correct thread or conversation. ### Webhooks Webhook integrations are the simplest trigger mechanism. Any HTTP POST to a webhook endpoint can start an agent session or continue an existing one. This is useful for connecting to systems that Everstack does not have a native integration for, such as CI pipelines, monitoring alerts, or custom internal tools. ## Feature gating Integrations require different plan tiers depending on the integration type: - **GitHub**: Available on the Basic tier and above (feature key: `GITHUB_INTEGRATION`) - **Channels**: Available on the Basic tier and above - **Webhooks**: Available on all tiers ## Setting up an integration The general workflow for any integration is: 1. Open **Settings > Integrations** in the admin dashboard. 2. Find the integration in the catalog and click **Connect**. 3. Complete the platform-specific authorization flow (OAuth, bot token, etc.). 4. Configure which agents or workflows should respond to events from that integration. Each integration page in this section covers the specifics. ## Tenant isolation Integration credentials and state are strictly tenant-scoped. This is a non-negotiable design constraint. - GitHub App installations belong to a single tenant. The webhook secret, private key, and installation tokens are never shared. - Channel connector bindings (Slack workspace, Discord guild, Telegram chat) are tied to the tenant that created them. - Webhook endpoints include tenant-scoped identifiers and verify signatures per tenant. If you are self-hosting, this isolation is enforced at the database level even when there is only one tenant. ## Architecture Integrations connect to the rest of the system through two internal subsystems: - **ChannelManager** orchestrates all channel connectors. It handles lifecycle (connect, disconnect, health checks), message routing, and the mapping between platform-specific events and agent sessions. - **Webhook handler** sits at the HTTP layer and dispatches incoming webhook payloads to the appropriate agent trigger configuration. Both subsystems emit telemetry, so you can trace integration events through the same observability pipeline as LLM requests and agent turns. ## API access All integration management is available through the API as well as the dashboard UI. See the [API Reference](https://docs.everstack.ai/api-reference) for endpoint details on: - Creating and managing channel bindings - Listing GitHub installations and repositories - Configuring webhook triggers - Testing connection health ## Next steps Set up the per-tenant GitHub App, discover repos, and handle PR webhooks. Connect Slack, Discord, or Telegram to your agents. Trigger agent sessions from any HTTP source. --- ### Webhooks Source: https://docs.everstack.ai/getting-started/integrations/webhooks HTTP webhook triggers for starting agent sessions and workflows. #### Metadata ```yaml title: Webhooks description: HTTP webhook triggers for starting agent sessions and workflows. icon: Webhook ``` Webhooks let any system that can send an HTTP POST start an agent session or continue an existing workflow. They are the simplest integration type and the most flexible, because they do not require a platform-specific connector. Webhook triggers are in **beta**. The handler is stable, but trigger configuration options may expand before the 1.0 release. ## When to use webhooks Use webhooks when you need to trigger agents from systems that Everstack does not have a native integration for. Common examples: - **CI/CD pipelines** -- trigger an agent when a build fails or a deployment completes - **Monitoring alerts** -- start a diagnostic agent when PagerDuty, Datadog, or Grafana fires an alert - **Internal tools** -- connect custom admin panels or backoffice systems to agent workflows - **Third-party SaaS** -- Stripe payment events, Twilio SMS callbacks, or any platform with outbound webhooks - **GitHub and GitLab** -- when you want a lighter-weight trigger than the full GitHub App integration If the source platform is Slack, Discord, or Telegram, use the [Channels](https://docs.everstack.ai/getting-started/integrations/channels) integration instead. Channels provide richer bidirectional messaging that webhooks cannot replicate. ## How it works 1. You create a webhook trigger in Everstack, which generates a unique endpoint URL. 2. You configure the external system to POST to that URL when the event you care about occurs. 3. Everstack receives the payload, validates it, and routes it to the configured agent or workflow. 4. The agent session starts (or continues) with the webhook payload available as context. Each webhook endpoint is scoped to a tenant and optionally to a specific agent or workflow. ## Setting up a webhook trigger ## Create the trigger In the Everstack dashboard, go to **Settings > Integrations > Webhooks** and click **Add Webhook**. Configure: - **Name** -- a human-readable label for the trigger - **Agent or workflow** -- which agent session to start when the webhook fires - **Secret** (optional) -- a shared secret for HMAC signature verification Everstack generates a unique endpoint URL for the trigger. ## Configure the source system Copy the endpoint URL and paste it into the external system's webhook configuration. If you set a secret, configure the source system to sign payloads using HMAC-SHA256 with that secret. The endpoint accepts any JSON payload. Everstack does not impose a schema on the request body. ## Test the trigger Send a test payload to verify the end-to-end flow: ```bash curl -X POST https://your-everstack-instance/webhooks/trg_abc123 \ -H "Content-Type: application/json" \ -d '{"event": "test", "message": "Hello from curl"}' ``` You should see a new agent session appear in the dashboard with the webhook payload as the initial context. ## Payload handling Webhook payloads are passed to the agent session as structured context. The agent receives: - The full JSON body - HTTP headers (filtered to safe headers) - The trigger metadata (name, source, timestamp) Agents can use this information to decide how to respond. For example, a CI failure webhook might include the build log URL, and the agent can fetch and analyze it. ## Security ### Signature verification When a secret is configured on the trigger, Everstack verifies the HMAC-SHA256 signature on every incoming request. Requests with missing or invalid signatures are rejected with a 401 response. The signature header follows the `X-Hub-Signature-256` convention (the same format GitHub uses), making it compatible with most webhook sources out of the box. ### Body size limits Webhook payloads are limited to 256KB. Requests exceeding this limit are rejected with a 413 response. If your source system sends larger payloads, include a URL to the full data instead of the data itself. ### Delivery deduplication Everstack tracks delivery IDs to prevent duplicate processing when a source system retries a failed delivery. If the same delivery ID is received twice, the second request is acknowledged but not processed again. ### Tenant scoping Every webhook endpoint includes a tenant-scoped identifier. There is no global webhook namespace. A trigger created by one tenant cannot be invoked by or confused with a trigger from another tenant. ## Managing triggers You can create, list, update, and delete webhook triggers through both the dashboard and the API. See the [API Reference](https://docs.everstack.ai/api-reference) for endpoint details. | Operation | Description | | --- | --- | | Create | Generate a new endpoint URL tied to an agent or workflow | | List | See all webhook triggers for the tenant | | Update | Change the target agent, secret, or configuration | | Delete | Remove the trigger and stop accepting requests at that URL | Deleting a trigger immediately invalidates the endpoint URL. Any subsequent requests to that URL receive a 404 response. ## Next steps - [GitHub](https://docs.everstack.ai/getting-started/integrations/github) -- richer source control integration with repo access and PR workflows - [Channels](https://docs.everstack.ai/getting-started/integrations/channels) -- bidirectional messaging with Slack, Discord, and Telegram - [Agents](https://docs.everstack.ai/getting-started/agents/overview) -- build the agents that respond to webhook triggers --- ### MCP Tools in Agents Source: https://docs.everstack.ai/getting-started/mcp/agent-tools How registered MCP server tools are named, attached, and executed inside Everstack agents. #### Metadata ```yaml title: MCP Tools in Agents description: How registered MCP server tools are named, attached, and executed inside Everstack agents. icon: Wrench ``` Registering an MCP server puts its tools in your tenant's catalog. It does not give any agent access to them. This page covers the step in between: how a catalog tool becomes a tool an agent can actually call. If you have not registered a server yet, start with [Server Management](https://docs.everstack.ai/getting-started/mcp/server-management). ## Tool naming Federated MCP tools are exposed to agents under a namespaced name so they cannot collide with built-in tools: ``` mcp____ ``` The server segment is the name you gave the server at registration, with every character outside `[A-Za-z0-9_]` replaced by an underscore. A server named `GitHub Cloud` exposing `list_repos` becomes: ``` mcp__GitHub_Cloud__list_repos ``` This is the exact string you put in an agent's tool list, and the exact string the model sees when it decides to call the tool. Renaming a server changes the generated tool names. Agents that referenced the old names lose those tools until their tool lists are updated. ## Attaching tools to an agent MCP tools are explicit opt-in. At session start, the runtime builds the list of federated tools available to your tenant, then registers only the ones whose name appears in the agent definition's `tools` array. Everything else is skipped, even if the server is healthy and enabled. There is no wildcard. Each tool is granted by name. ### From the admin UI Open the agent editor, go to the **Tools** section, and select the **MCP** tab. Tools are grouped by the server that provides them, with search across server names, tool names, and descriptions. Checking a tool adds its namespaced name to the agent's tool list. If the tab is empty, no MCP servers are registered for the tenant yet. Register one under **Gateway → MCP → Servers**. ### From the API MCP tool names go in the same `tools` array as built-in tools: ```json { "name": "release-bot", "model": "gpt-4o-mini", "tools": [ "sandbox_read_file", "mcp__GitHub_Cloud__list_repos", "mcp__GitHub_Cloud__create_issue" ] } ``` Use [`GET /v1/mcp/tools`](https://docs.everstack.ai/api-reference/mcp/list-federated-tools) to list the federated tools available to your tenant before writing the array. The response gives you the server and tool names you need to build the namespaced identifier. ## What the model sees Each attached MCP tool is presented to the model as a normal function tool: - **Name**: the namespaced `mcp____` string - **Description**: the server's own description, prefixed with `[MCP:]` so the model knows where it came from. Servers that supply no description get a generated one. - **Parameters**: the server's `inputSchema`, passed through unchanged. Servers that supply no schema get an empty object schema. The agent has no idea a network hop is involved. It calls the tool by name like any other. ## Where MCP tools work Federated MCP tools are available in both agent execution paths: | Path | Notes | | --- | --- | | Interactive sessions (chat, Studio, streaming API) | Tools resolved per session against the session's tenant | | Deployment invoke (`/v1/deploy/{id}/invoke`) | Same resolution, using the deployment's tenant and its agent config | Both paths refresh the tenant's server connections before resolving tools, so a gateway restart does not silently strip MCP access from a running deployment. Resolution keys off whether a server is **enabled**, not whether it is healthy. A server that is failing its health checks still contributes its tools, and calls to them fail at the transport. Disable the server to remove its tools from every agent at once. ## Execution and results When the model calls an MCP tool: 1. The runtime checks the tool against the agent's allowed tool list. 2. If the tool matches a [HITL approval rule](https://docs.everstack.ai/getting-started/agents/human-in-the-loop), the session pauses for approval first. 3. The call is routed to the owning server, with the tenant verified against the server's owner before the request goes out. 4. The response content blocks are flattened to text and returned to the model. Content block handling: | Block type | Returned to the model as | | --- | --- | | `text` | The text verbatim | | `image` | A placeholder, `[image: ]` | | `resource` | A placeholder, `[resource: ]` | | Anything else | The raw JSON of the block | Multiple blocks are joined with newlines. Image and resource payloads are not passed through to the model today. A tool that returns a screenshot gives the agent a placeholder, not the picture. Prefer MCP tools that return text or structured JSON. When a tool reports a failure, the error text is returned to the model as a normal tool result prefixed with `Error from MCP tool:` rather than aborting the turn. The agent can read the error and adapt, which is usually what you want for a recoverable failure like a bad argument. ## Approval rules MCP tool names match HITL patterns exactly like built-in tools. Because every federated tool shares the `mcp__` prefix, a single prefix rule gates all external tool calls: ``` mcp__* ``` Narrower rules work too. `mcp__GitHub_Cloud__*` gates one server, and a full name gates one tool. See [Human-in-the-Loop](https://docs.everstack.ai/getting-started/agents/human-in-the-loop) for match modes. ## Tenant isolation Tool resolution is scoped to the tenant that owns the session or deployment, and it fails closed: - A request with no resolved tenant gets no MCP tools at all. - A tool call is refused if the target server is not owned by the calling tenant, with the same "not found" error as a server that does not exist. - Disabled servers contribute no tools and reject calls. Servers registered by one tenant are never visible or callable from another. ## Troubleshooting ### The agent says it does not have access to MCP servers The tool name is not in the agent's `tools` array. Registering a server is not enough. Check the exact namespaced name, including the sanitized server segment, against what the agent config lists. ### A tool disappeared from an agent Either the server was disabled, deleted, or renamed, or the tool is no longer advertised by the server. Check the server's status under **Gateway → MCP → Servers** and re-run tool discovery. ### A tool call fails with "server not found" The server is not registered for this tenant, or it is disabled. The error text is deliberately identical for both cases so it cannot be used to probe other tenants' servers. ### The tool works in chat but not from a deployment Deployments resolve tools from the agent config snapshot taken when the deployment was created, not from the live agent definition. Adding an MCP tool to the agent afterwards does not reach an existing deployment. Redeploy to pick up the new tool list. ## Next steps - [Server Management](https://docs.everstack.ai/getting-started/mcp/server-management) for registering and monitoring servers. - [Everstack MCP Server](https://docs.everstack.ai/getting-started/mcp/everstack-mcp-server) for the other direction, exposing Everstack's own tools to external MCP clients. - [Agent Tools](https://docs.everstack.ai/getting-started/agents/tools) for built-in tools and custom functions. --- ### Everstack MCP Server Source: https://docs.everstack.ai/getting-started/mcp/everstack-mcp-server Connect Claude Desktop, Cursor, Google ADK, or any MCP client to Everstack and call your agents, memory, and web tools. #### Metadata ```yaml title: Everstack MCP Server description: Connect Claude Desktop, Cursor, Google ADK, or any MCP client to Everstack and call your agents, memory, and web tools. icon: Share2 ``` Everstack speaks MCP in both directions. The [MCP gateway](https://docs.everstack.ai/getting-started/mcp/overview) is the outbound half: Everstack acts as a client to servers you register. This page covers the inbound half, where Everstack itself is the MCP server and an external client calls into your tenant. That means Claude Desktop, Cursor, Google ADK, or anything else that speaks MCP can list your agents, invoke a deployed agent, search your memory, and fetch the web, all under your tenant's isolation and your API key. ## Endpoint ``` POST https://{instance}.{region}.everstack.ai/mcp ``` Self-hosted instances expose the same path on the gateway host, for example `https://private.example.example.com/mcp`. It is the same host and port as the rest of the API (default `8089`), so if the admin UI is reachable, `/mcp` is reachable. The transport is **Streamable HTTP**, protocol revision `2025-03-26`. ## Authentication Every request authenticates with an Everstack API key sent as a Bearer token: ``` Authorization: Bearer YOUR_EVERSTACK_API_KEY ``` Clients that cannot set an `Authorization` header may send the key in `x-evs-api-key` instead. The key resolves the tenant, and that tenant is the isolation boundary for the whole request. There is no anonymous mode and no fallback tenant: a request with a missing, unknown, or revoked key gets `401 Unauthorized` with a `WWW-Authenticate: Bearer` challenge. Create and revoke keys under **Vault → API Keys**. An API key handed to an MCP client grants that client everything in the tool catalog below, including invoking deployed agents. Issue a dedicated key per client so you can revoke one without disturbing the others. ## Connecting a client The admin UI generates ready-to-paste config under **Gateway → MCP → Publish**, prefilled with your instance's endpoint. The shapes are: ### Claude Desktop and Cursor ```json { "mcpServers": { "everstack": { "url": "https://{instance}.{region}.everstack.ai/mcp", "headers": { "Authorization": "Bearer YOUR_EVERSTACK_API_KEY" } } } } ``` ### Google ADK ```python from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams everstack_tools = McpToolset( connection_params=StreamableHTTPConnectionParams( url="https://{instance}.{region}.everstack.ai/mcp", headers={"Authorization": "Bearer YOUR_EVERSTACK_API_KEY"}, ) ) ``` ### Raw JSON-RPC Useful for verifying connectivity before wiring a real client: ```bash curl -X POST https://{instance}.{region}.everstack.ai/mcp \ -H "Authorization: Bearer YOUR_EVERSTACK_API_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` ## Tool catalog The catalog is assembled per request from what the instance has configured and what the tenant has enabled. Tools whose backing subsystem is not configured simply do not appear. | Tool | What it does | Available when | | --- | --- | --- | | `everstack_whoami` | Returns the tenant the API key resolved to | Always | | `everstack_echo` | Echoes its input, for connectivity checks | Always | | `memory_query` | Semantic search over the tenant's memory | Memory store and embedder configured | | `memory_store` | Writes an entry to the tenant's memory | Memory store and embedder configured | | `web_search` | Web search via the instance's SearXNG | `EVS_SEARXNG_URL` set | | `web_fetch` | Fetches a URL and returns readable content | Always | | `list_agents` | Lists the tenant's agent definitions | Agents database available | | `get_agent` | Returns one agent definition | Agents database available | | `run_agent` | Invokes a deployed agent and returns its final text | Deployment invoker wired | | `run_adk_agent` | Runs a Google ADK agent in a tenant-scoped sandbox | ADK runtime available | `everstack_whoami` is the quickest way to confirm a client is authenticated as the tenant you expect. `run_agent` requires the agent to have an active deployment. Calling it for an undeployed agent returns an error telling you to deploy it first. `web_fetch` runs behind an SSRF guard, so it cannot be used to reach internal hosts, cloud metadata endpoints, or other tenants' services. ## Choosing what to expose Every tool in the catalog can be turned off per tenant under **Gateway → MCP → Publish**. Tools without an explicit setting default to enabled. A disabled tool is hidden from `tools/list` and refused by `tools/call`, so turning one off takes effect immediately for already-connected clients on their next call. The same settings are readable and writable over the admin API: ```bash # Current overrides for the tenant, as {"tools": {"": , ...}} GET /api/interop/mcp/tools # Turn one tool off (PUT or POST) PUT /api/interop/mcp/tools/run_adk_agent { "enabled": false } ``` Only tools with an explicit override appear in the `GET` response. Anything absent is enabled. `run_adk_agent` deserves particular thought before enabling it: it runs caller-supplied code in a sandbox. On multi-tenant cloud, that sandbox is always egress-restricted to an allowlist, but the tool is still the widest-reaching thing in the catalog. ## Protocol support Supported JSON-RPC methods: | Method | Behavior | | --- | --- | | `initialize` | Advertises protocol version `2025-03-26` and the `tools` capability | | `notifications/initialized` | Accepted, no response (`202`) | | `ping` | Empty result | | `tools/list` | The tenant's enabled catalog | | `tools/call` | Executes a tool for the tenant | Known limits: - **Tools only.** Resources, prompts, and sampling are not advertised or served. - **No server-initiated stream.** A `GET` on `/mcp` returns `405` with `Allow: POST`. Clients that require an SSE channel for server-to-client messages will not get one. - **No JSON-RPC batching.** A request body starting with `[` is rejected as an invalid request. - **4 MB request cap.** Larger bodies are truncated at the read. - Unknown notifications are dropped silently; unknown calls return `-32601 method not found`. Tool failures are not transport failures. A tool that errors returns a normal result with `isError: true` and the error text in a content block, so the calling model can read it and adapt. ## Isolation guarantees Everything on this endpoint is bound to the tenant resolved from the API key: - Tool handlers are constructed per request with that tenant baked in. A handler cannot be pointed at another tenant by argument. - `list_agents`, `get_agent`, and `run_agent` query and invoke only that tenant's agents. - `memory_query` and `memory_store` read and write only that tenant's memory. - There is no "only tenant in the database" fallback. An unattributable request is rejected, not guessed. ## Related - [MCP Tools in Agents](https://docs.everstack.ai/getting-started/mcp/agent-tools) for the outbound direction, where your agents consume external MCP servers. - [API Keys](https://docs.everstack.ai/api-reference/api-keys) for creating and revoking the key an MCP client uses. Everstack also serves an Agent-to-Agent (A2A) endpoint for deployed agents, published per agent rather than per tenant. Unlike this endpoint, A2A exposes one agent as a peer rather than exposing the tenant's tool catalog. It shares the same API key authentication. --- ### MCP Gateway Overview Source: https://docs.everstack.ai/getting-started/mcp/overview Model Context Protocol server registration and federated tool calling. #### Metadata ```yaml title: MCP Gateway Overview description: Model Context Protocol server registration and federated tool calling. icon: Puzzle ``` The Model Context Protocol (MCP) is an open standard for connecting AI models to external tools and data sources. Everstack acts as an MCP gateway, letting you register MCP servers once and make their tools available to any agent or workflow in your tenant. ## Why Everstack acts as a gateway Without a gateway, every agent that needs to call an external tool must be individually configured with that tool's endpoint, authentication, and schema. This creates duplication, makes credential management harder, and means adding a new tool requires updating every agent that needs it. Everstack's MCP gateway solves this by centralizing server registration. You register an MCP server with the gateway, and its tools become discoverable by all agents in the tenant. Agents pick the tools they need from a shared catalog rather than each maintaining their own connections. ## How it works The MCP integration follows a three-step pattern: ### 1. Register servers You register MCP servers with Everstack by providing the server's URL and authentication credentials. Each server exposes a set of tools with defined input/output schemas. Everstack connects to the server, discovers its tools, and adds them to the tenant's tool catalog. ### 2. Discover tools Once a server is registered, its tools appear in the tool catalog alongside Everstack's built-in tools. You can browse available tools in the admin UI, see their descriptions and parameter schemas, and decide which ones to attach to your agents. ### 3. Federated calling When an agent needs to call an MCP tool during a conversation, Everstack routes the call to the appropriate registered server, handles authentication, waits for the response, and returns the result to the agent. The agent does not need to know which server hosts which tool. It simply calls the tool by name. ## What federated tool calling means "Federated" means tools from multiple servers are unified under a single interface. An agent might call a tool from your internal CRM server, a GitHub MCP server, and a Slack MCP server in the same conversation. From the agent's perspective, these are all just tools in its toolbox. The routing happens transparently. This is particularly useful when you have: - Multiple internal services that expose MCP tool interfaces - Third-party MCP servers (GitHub, Slack, Jira, databases) that your agents need to interact with - Different teams maintaining different MCP servers, all consumed by shared agents ## MCP vs built-in tools Everstack provides several built-in tools (shell execution, file operations, web browsing, code interpretation). These run inside Everstack's infrastructure and do not require external server registration. MCP tools extend this with access to external systems. Use the right tool for the job: | Use built-in tools when | Use MCP tools when | | --- | --- | | Running code in a sandbox | Calling external APIs (CRM, ticketing, databases) | | Reading and writing files | Interacting with third-party services | | Browsing the web | Accessing internal tools behind your firewall | | Operations that should stay inside Everstack | Operations that require external system access | You can combine both in the same agent. An agent might use built-in shell execution to process data locally and an MCP tool to push results to your CRM. ## Server health monitoring Everstack pings registered MCP servers on an interval and records the result. Health status is visible in the admin UI so you can quickly identify and resolve connectivity issues. Health is observational rather than a gate: an unhealthy server keeps its tools attached to agents, and those calls fail until it recovers. Disabling the server is what removes its tools from circulation. See [Health checks](https://docs.everstack.ai/getting-started/mcp/server-management). ## Authentication support MCP servers often require authentication. Everstack supports OAuth-based auth flows for MCP servers, so credentials are managed centrally and refreshed automatically. This means your agents never handle raw API keys or tokens for MCP server access. ## Tenant scoping MCP server registrations are scoped to a tenant. Servers registered in one tenant are not visible to other tenants. This ensures that each tenant's tool catalog and credentials remain isolated. ## When to use MCP **Use MCP when:** - You want agents to interact with external services (Slack, GitHub, Jira, databases) - You have internal tools that expose an MCP interface and want agents to use them - You want centralized management of external tool access rather than per-agent configuration - Multiple agents need access to the same external tools **You probably do not need MCP when:** - All your agent work happens inside sandboxes (use built-in tools) - You only need the LLM to generate text without calling external systems - Your integration is a simple webhook (use sandbox webhooks instead) ## Everstack as an MCP server The gateway described above is the outbound direction: Everstack connects out to servers you register. Everstack also serves the inbound direction, exposing its own tools (your agents, memory, and web tools) to external MCP clients such as Claude Desktop, Cursor, and Google ADK. The two are independent. You can register external servers without publishing anything, publish without registering anything, or do both. See [Everstack MCP Server](https://docs.everstack.ai/getting-started/mcp/everstack-mcp-server). ## Next steps - [Server Management](https://docs.everstack.ai/getting-started/mcp/server-management) -- Registering, configuring, and monitoring MCP servers. - [MCP Tools in Agents](https://docs.everstack.ai/getting-started/mcp/agent-tools) -- Naming, attaching, and executing federated tools inside agents. - [Everstack MCP Server](https://docs.everstack.ai/getting-started/mcp/everstack-mcp-server) -- Connecting external MCP clients to Everstack. - [MCP API Reference](https://docs.everstack.ai/api-reference/mcp) -- Full API documentation for server registration and tool discovery. --- ### Server Management Source: https://docs.everstack.ai/getting-started/mcp/server-management Registering, configuring, and monitoring MCP servers. #### Metadata ```yaml title: Server Management description: Registering, configuring, and monitoring MCP servers. icon: Server ``` Server management covers the full lifecycle of MCP servers in Everstack: registering new servers, configuring authentication, monitoring health, attaching tools to agents, and removing servers when they are no longer needed. ## Registering a server To register an MCP server, you provide: - **Name** -- a human-readable label for the server (e.g., "GitHub", "Internal CRM") - **URL** -- the server's MCP endpoint - **Authentication** -- credentials for connecting to the server (see OAuth configuration below) - **Description** (optional) -- notes about what tools this server provides Once registered, Everstack connects to the server, runs tool discovery, and adds the server's tools to your tenant's catalog. This initial discovery happens automatically. If the server adds or removes tools later, re-run discovery to pick up the change, either from the admin UI or with [`GET /v1/mcp/servers/{server_id}/tools`](https://docs.everstack.ai/api-reference/mcp/discover-tools). Discovery also re-runs whenever Everstack re-establishes the connection, for example after a gateway restart. Periodic health checks only ping the server; they do not re-list its tools. ## OAuth configuration Many MCP servers require OAuth for authentication. Everstack supports OAuth flows so you can configure credentials once and have them managed centrally. When registering a server that requires OAuth: 1. Provide the OAuth client ID and client secret 2. Specify the authorization and token endpoints 3. Define the required scopes 4. Complete the OAuth authorization flow Everstack stores the resulting tokens securely, handles token refresh automatically, and uses the credentials for all tool calls to that server. Individual agents never see or handle these tokens directly. For servers that use simpler auth schemes (API keys, bearer tokens), you can provide the credentials directly during registration. Everstack will include them in the appropriate header on every request. ## Health checks Everstack monitors registered servers continuously, pinging each one on a 30 second interval with a 5 second timeout. Health checks verify that the server is reachable and responding to MCP protocol requests. The health status is visible in the admin UI with three states: | Status | Meaning | | --- | --- | | **Healthy** | Server responded to the last health check | | **Unhealthy** | Server did not respond to the last health check | | **Unknown** | No health check has completed yet, for example just after registration | Health status recovers automatically when the server comes back online. You do not need to manually re-register or re-enable a server after a temporary outage. Health is a signal, not a gate. An unhealthy server keeps its discovered tools attached to agents, and calls to them fail at the transport until the server recovers. To take a failing server's tools out of circulation immediately, disable or remove the server. ## Tool listing After registration, you can view all tools exposed by a server in the admin UI. Each tool shows: - **Name** -- the tool's identifier as defined by the MCP server - **Description** -- what the tool does - **Parameters** -- input schema with types, required fields, and descriptions - **Server** -- which registered server provides this tool The tool catalog is a unified view across all registered servers. You can search and filter to find the right tool for your use case. ## Attaching MCP tools to agents Registering a server makes its tools available, but agents do not automatically have access to every tool. You explicitly attach tools to agents during agent configuration. This is done in the agent's tool configuration, where you can: - Browse the full tool catalog (built-in tools and MCP tools together) - Select which MCP tools this agent should have access to - Preview tool schemas to understand inputs and outputs Selective attachment gives you control over which agents can do what. A customer support agent might only get CRM and ticketing tools, while a DevOps agent gets GitHub and infrastructure tools. Tools are attached by their namespaced name, `mcp____`. See [MCP Tools in Agents](https://docs.everstack.ai/getting-started/mcp/agent-tools) for the naming rules and how the runtime resolves them. ## Removing a server When you remove (deregister) an MCP server: 1. All tools from that server are removed from the tenant's catalog 2. Any agents that had those tools attached lose access to them 3. Stored credentials for that server are deleted Removal is immediate. If an agent is mid-conversation and tries to call a tool from a removed server, the call will fail with a clear error indicating the tool is no longer available. Before removing a server, check which agents are using its tools. The admin UI shows tool usage across agents so you can identify dependencies. ## Troubleshooting ### Server shows as unreachable after registration Verify that the URL is correct and the server is running. Check that any firewalls or network policies allow Everstack to reach the server's endpoint. If the server is behind a private network, you may need to configure network access. ### OAuth flow fails Confirm the client ID, client secret, and endpoint URLs match what the MCP server expects. Check that the requested scopes are valid. Some OAuth providers require pre-registering redirect URIs. ### Tools are not appearing after registration If the server registered successfully but no tools appear, the server may not be exposing tools through the MCP discovery endpoint. Verify that the server implements the MCP tool listing protocol correctly. ### Agent cannot call a tool Confirm the tool is attached to the agent's configuration. Check the server's health status. If the server is healthy and the tool is attached, review the agent's tool call to ensure the parameters match the tool's expected schema. ## Next steps - [MCP Overview](https://docs.everstack.ai/getting-started/mcp/overview) -- How Everstack's MCP gateway and federated tool calling work. - [MCP Tools in Agents](https://docs.everstack.ai/getting-started/mcp/agent-tools) -- Naming, attaching, and executing federated tools inside agents. - [MCP API Reference](https://docs.everstack.ai/api-reference/mcp) -- Full API documentation for server registration, tool discovery, and tool invocation. --- ### Collections Source: https://docs.everstack.ai/getting-started/memory/collections Creating and managing vector collections for document storage. #### Metadata ```yaml title: Collections description: Creating and managing vector collections for document storage. icon: FolderOpen ``` A collection is a tenant-scoped vector store that holds documents as embeddings. You create a collection, add documents to it, and query it with natural language to retrieve the most relevant results. Collections are the foundation of both RAG pipelines and agent memory in Everstack. ## What a collection contains Each collection stores: - **Documents** -- text content split into chunks and converted to vector embeddings - **Metadata** -- key-value pairs attached to each document for filtering - **Embedding model reference** -- the model used to vectorize content, fixed at creation time Collections are isolated by tenant. A collection in one tenant is invisible to every other tenant, regardless of the underlying vector backend. ## Creating a collection You create a collection through the admin UI or the API. At creation time, you specify: - **Name** -- a human-readable identifier, unique within the tenant - **Embedding model** -- which model to use for vectorizing documents (e.g., `text-embedding-3-small`) - **Description** (optional) -- notes about what this collection contains ```yaml # Example: creating a collection via the API name: "support-docs" embedding_model: "text-embedding-3-small" description: "Customer support knowledge base articles" ``` The embedding model cannot be changed after creation. If you need a different model, create a new collection and re-ingest your documents. This constraint exists because mixing embeddings from different models in the same vector space produces meaningless similarity scores. ## Adding documents Documents are the content you want to make searchable. When you add a document, Everstack: 1. Splits the text into chunks based on the configured chunking strategy 2. Generates vector embeddings for each chunk using the collection's embedding model 3. Stores the chunks, embeddings, and metadata in the vector backend ### Text content The simplest case is raw text. You provide the content and Everstack handles the rest. ```yaml content: "Our refund policy allows returns within 30 days of purchase..." metadata: source: "policy-docs" category: "refund" updated_at: "2026-05-01" ``` ### Metadata Metadata is a flat key-value map attached to each document. It is stored alongside the embeddings and can be used as filters during queries. Common metadata fields include `source`, `category`, `author`, `created_at`, and any domain-specific labels. Metadata is not embedded. It exists purely for filtering and does not affect similarity scores. ### Chunking Long documents are split into smaller chunks before embedding. Chunking matters because embedding models have token limits, and shorter, focused chunks produce better retrieval results than large, diluted ones. Everstack handles chunking automatically. The default strategy splits on paragraph boundaries with overlap to preserve context across chunk edges. You do not need to pre-chunk your documents unless you have specific requirements. ## Embedding model selection The choice of embedding model affects both the quality and cost of your retrieval pipeline. | Consideration | Guidance | | --- | --- | | **Accuracy** | Larger models produce better embeddings but cost more per document | | **Speed** | Smaller models embed faster, which matters during bulk ingestion | | **Dimensions** | Higher-dimensional embeddings capture more nuance but use more storage | | **Consistency** | All documents in a collection must use the same model | Configure available models in your gateway config under `features.memory.embedding_models`. Only models listed there can be selected when creating a collection. ## Collection lifecycle Collections support standard CRUD operations: - **Create** -- provision a new collection with a name and embedding model - **List** -- enumerate all collections in the current tenant - **Delete** -- permanently remove a collection and all its documents Deleting a collection is irreversible. All documents, chunks, embeddings, and metadata are permanently removed from the vector backend. ## When to use multiple collections A single collection works well for a unified knowledge base. Multiple collections make sense when: - **Different embedding models** -- you want to experiment with model quality or use specialized models for different content types - **Access boundaries** -- you need to restrict which agents or workflows can query which data (each agent can be pointed at specific collections) - **Lifecycle independence** -- you want to rebuild or delete one corpus without affecting others - **Domain separation** -- support docs, product specs, and legal documents have different retrieval characteristics and benefit from separate vector spaces As a general rule, start with one collection and split when you have a concrete reason to. ## Next steps - [Querying](https://docs.everstack.ai/getting-started/memory/querying) -- How to search collections with semantic queries and metadata filters. - [Collections API Reference](https://docs.everstack.ai/api-reference/memory) -- Full API documentation for CreateCollection, ListCollections, DeleteCollection, and AddDocuments. --- ### Memory Overview Source: https://docs.everstack.ai/getting-started/memory/overview Vector memory for RAG, semantic search, and long-term agent memory. #### Metadata ```yaml title: Memory Overview description: Vector memory for RAG, semantic search, and long-term agent memory. icon: Brain ``` Memory is Everstack's managed vector storage layer. It lets you store documents as embeddings and retrieve them by meaning rather than by exact keyword match. This powers two distinct use cases: retrieval-augmented generation (RAG) for your applications, and persistent memory for your agents. ## Why memory matters LLMs have a fixed context window. Once a conversation exceeds that window, earlier content is lost. Memory solves this by storing information as vector embeddings and retrieving only the pieces that are relevant to the current request. Instead of cramming everything into the prompt, you fetch what matters. This is useful whether you are building a customer support bot that needs access to your knowledge base, or a long-running agent that should remember facts about users across sessions. ## Two use cases, one system ### RAG collections Collections are tenant-scoped vector stores. You create a collection, add documents (with optional metadata), and query it with natural language. Everstack handles chunking, embedding, storage, and retrieval. This is the standard RAG pattern: your application asks a question, the most relevant chunks come back, and you inject them into the LLM prompt for grounded answers. Use collections when you have a corpus of documents, knowledge base articles, product catalogs, or any structured content that your application needs to search semantically. ### Agent memory Agent memory is a higher-level abstraction built on top of the same vector infrastructure. When you enable memory for an agent, Everstack automatically extracts and stores facts, instructions, and session summaries from conversations. At the start of each turn, the most relevant memories are injected into the agent's system prompt. Agent memory is organized by type and scope: **Types** describe what kind of information is stored: | Type | What it captures | | --- | --- | | `fact` | Concrete information about users, preferences, or context | | `instruction` | Behavioral directives the agent should follow | | `session_summary` | Compressed summaries of past conversations | | `document` | Longer-form reference material | **Scopes** control who can see a memory: | Scope | Visibility | | --- | --- | | `agent` | Only the agent that created it | | `user` | Shared across agents for a specific user | | `global` | Visible to all agents in the tenant | This means an agent can remember that a specific user prefers concise answers (`fact`, `user` scope), that it should always respond in French (`instruction`, `agent` scope), or that the company's refund policy changed last week (`document`, `global` scope). ## Backend options Everstack supports multiple vector backends. You choose one per tenant based on your scale, latency, and infrastructure requirements. | Backend | Best for | | --- | --- | | **PgVector** (default) | Simple deployments, low operational overhead, already using Postgres | | **Qdrant** | High-throughput similarity search, large collections | | **Pinecone** | Fully managed, no infrastructure to run | | **Weaviate** | Hybrid search (vector + keyword), complex filtering | The backend is configured in your tenant's gateway config and is transparent to your application code. Switching backends does not change the API. ## Embedding models Documents are converted to vectors using embedding models. You configure which models are available in the `features.memory.embedding_models` array. Each collection uses a single embedding model, chosen at creation time. Queries against that collection use the same model automatically. ## Tenant isolation All memory data is scoped to a tenant. Collections, documents, and agent memories are never shared across tenants. This isolation is enforced at the storage layer, not just the API layer, so there is no risk of cross-tenant data leakage even with shared backend infrastructure. ## When to use memory **Use memory when:** - Your application needs to search a knowledge base by meaning, not keywords - Agents need to remember information across sessions or conversations - You want grounded LLM responses backed by your own data - Users expect personalized interactions that improve over time **Consider alternatives when:** - You need exact-match lookups on structured data (use a traditional database) - Your data changes every few seconds and stale results are unacceptable (use a live query) - You only need to pass a few static facts to the LLM (use the system prompt directly) ## Enabling memory Memory is enabled in your gateway configuration: ```yaml features: enable_memory: true memory: backend: "pgvector" embedding_models: - "text-embedding-3-small" ``` Once enabled, collections and agent memory are available through both the admin UI and the API. ## Next steps - [Collections](https://docs.everstack.ai/getting-started/memory/collections) -- Creating and managing vector stores for document storage. - [Querying](https://docs.everstack.ai/getting-started/memory/querying) -- Semantic search, filtering, and retrieval from your collections. - [Memory API Reference](https://docs.everstack.ai/api-reference/memory) -- Full API documentation for collections, documents, and agent memory. --- ### Querying Source: https://docs.everstack.ai/getting-started/memory/querying Semantic search, filtering, and retrieval from vector collections. #### Metadata ```yaml title: Querying description: Semantic search, filtering, and retrieval from vector collections. icon: Search ``` Querying is how you get information back out of a collection. Instead of matching keywords, Everstack converts your query text into an embedding and finds the documents whose vectors are closest in meaning. This is semantic search: "how do I get a refund?" matches a document about return policies even if the word "refund" never appears in it. ## How semantic search works When you send a query: 1. Everstack embeds your query text using the same embedding model the collection was created with 2. The vector backend performs a nearest-neighbor search across all stored chunk embeddings 3. The top-K most similar chunks are returned, ranked by relevance score This all happens in a single API call. You provide the query text and optionally specify how many results you want and what filters to apply. ## Query parameters | Parameter | Description | Default | | --- | --- | --- | | `query` | The natural language text to search for | Required | | `top_k` | Maximum number of results to return | 10 | | `filters` | Metadata key-value pairs to narrow the search | None | | `min_score` | Minimum relevance score threshold (0.0 to 1.0) | None | ### Top-K retrieval The `top_k` parameter controls how many chunks are returned. A higher value gives you more results but may include less relevant matches. For RAG pipelines feeding into an LLM, 3-5 chunks is usually a good starting point. You can increase this if the LLM needs more context or decrease it to reduce token usage. ### Relevance scores Each result includes a relevance score between 0.0 and 1.0, where higher means more similar to the query. Scores are cosine similarity values (or equivalent, depending on the backend). What counts as a "good" score depends on your embedding model and domain, but as a rough guide: - **0.8+** -- strong match, highly relevant - **0.6-0.8** -- moderate match, likely relevant - **Below 0.6** -- weak match, may not be useful Use the `min_score` parameter to filter out low-confidence results automatically. ## Metadata filtering Filters let you narrow the search to documents matching specific metadata criteria before the similarity search runs. This is useful when you have a mixed collection and want to restrict results to a subset. ```yaml # Only search support articles from the billing category query: "how do I update my payment method" top_k: 5 filters: category: "billing" source: "support-docs" ``` Filters are exact-match. They reduce the candidate set before the vector search executes, which means they also improve query performance on large collections. ## How agents use memory When memory is enabled for an agent, Everstack handles retrieval automatically at two points in the conversation lifecycle. ### Auto-retrieve (turn start) At the beginning of each turn, before the LLM generates a response, Everstack runs a semantic query using the user's latest message against the agent's memory stores. The top-K most relevant memories are injected into the system prompt as additional context. The agent sees these memories as part of its instructions, not as a separate retrieval step. This means the agent always has access to the most relevant facts, instructions, and past conversation context without any custom retrieval logic in your application. ### Auto-extract (turn end) After the agent responds, an asynchronous extraction process scans the conversation for new facts, instructions, and other memorable content. Extracted items are embedded and stored in the appropriate memory scope (agent, user, or global). This keeps the agent's memory up to date without explicit save calls. Auto-retrieve and auto-extract are both configurable. You can disable either one if you prefer to manage memory retrieval or storage manually through the API. ## Querying via the API The QueryCollection endpoint accepts a collection ID, query text, and optional parameters. Results include the matched text, metadata, and relevance score for each chunk. ```yaml # Example query request collection_id: "col_abc123" query: "What is the return window for electronics?" top_k: 5 filters: category: "returns" ``` The response contains an ordered list of matches: ```yaml results: - text: "Electronics can be returned within 15 days of delivery..." score: 0.87 metadata: category: "returns" source: "policy-v3" - text: "All other items have a 30-day return window..." score: 0.72 metadata: category: "returns" source: "policy-v3" ``` See the [Memory API Reference](https://docs.everstack.ai/api-reference/memory) for complete request and response schemas. ## Performance considerations - **Collection size** -- vector search is sublinear, so doubling your documents does not double query time. Most backends handle millions of vectors comfortably. - **Metadata filters** -- applying filters before vector search reduces the candidate set and speeds up queries. Use them when you can. - **Top-K** -- requesting fewer results is faster. Only ask for what you need. - **Embedding model** -- smaller models embed and search faster. If latency is critical, benchmark your model choice. ## Next steps - [Collections](https://docs.everstack.ai/getting-started/memory/collections) -- How to create and manage the vector stores you query against. - [Memory API Reference](https://docs.everstack.ai/api-reference/memory) -- Full API documentation for QueryCollection and related endpoints. --- ### Claude Code Source: https://docs.everstack.ai/getting-started/observability/coding-agents/claude-code Send Claude Code session traces, LLM requests, tool calls, and sub-agents, to your Everstack instance. #### Metadata ```yaml title: Claude Code description: Send Claude Code session traces, LLM requests, tool calls, and sub-agents, to your Everstack instance. icon: claude ``` **Claude Code** (Anthropic) has native OpenTelemetry. Metrics and events are emitted out of the box; the full **trace tree** (interaction → LLM request / tool → sub-agents) is currently behind a beta flag. See [Trace Coding Agents](https://docs.everstack.ai/docs/getting-started/observability/coding-agents) for the endpoints, API key, and what Everstack renders. Below is the Claude Code setup. ## Environment variables ```bash export CLAUDE_CODE_ENABLE_TELEMETRY=1 export CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 # trace span tree (beta) export OTEL_TRACES_EXPORTER=otlp export OTEL_METRICS_EXPORTER=otlp export OTEL_LOGS_EXPORTER=otlp export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf export OTEL_EXPORTER_OTLP_ENDPOINT=https:// export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer " export OTEL_LOG_TOOL_DETAILS=1 # include tool names/args export OTEL_LOG_TOOL_CONTENT=1 # include tool input/output ``` To apply this to **every** Claude Code session, set the same variables in the `env` block of `~/.claude/settings.json`. Telemetry initializes when Claude Code launches, so only sessions started **after** you add the config will emit. Restart the session, a new prompt in an existing session is not enough. ## Keep the key out of config (recommended) Rather than hard-coding the key in `OTEL_EXPORTER_OTLP_HEADERS`, use Claude Code's `otelHeadersHelper` so the token lives in a separate file. In `~/.claude/settings.json`: ```json { "env": { "CLAUDE_CODE_ENABLE_TELEMETRY": "1", "CLAUDE_CODE_ENHANCED_TELEMETRY_BETA": "1", "OTEL_TRACES_EXPORTER": "otlp", "OTEL_METRICS_EXPORTER": "otlp", "OTEL_LOGS_EXPORTER": "otlp", "OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf", "OTEL_EXPORTER_OTLP_ENDPOINT": "https://" }, "otelHeadersHelper": "/home/you/.claude/otel-headers.sh" } ``` The helper must print the header as **JSON** (not `key=value`): ```bash #!/bin/bash echo "{\"Authorization\": \"Bearer $(cat ~/.config/everstack/api-key)\"}" ``` Make it executable (`chmod 700`) and store the key in `~/.config/everstack/api-key` (`chmod 600`). Do **not** also set `OTEL_EXPORTER_OTLP_HEADERS`, the two conflict. ## Notes - Claude Code is the only common coding agent that reports a dollar **cost** directly; it's used as-is and never recomputed. - Pointing Claude Code at an Anthropic-compatible endpoint for a different model provider keeps this exact telemetry setup, see [GLM](https://docs.everstack.ai/docs/getting-started/observability/coding-agents/glm) and [Kimi](https://docs.everstack.ai/docs/getting-started/observability/coding-agents/kimi). --- ### Codex Source: https://docs.everstack.ai/getting-started/observability/coding-agents/codex Send OpenAI Codex CLI session traces to your Everstack instance. #### Metadata ```yaml title: Codex description: Send OpenAI Codex CLI session traces to your Everstack instance. icon: openai ``` **Codex** (OpenAI) exports OpenTelemetry via the `[otel]` table in `~/.codex/config.toml`. See [Trace Coding Agents](https://docs.everstack.ai/docs/getting-started/observability/coding-agents) for the endpoints, API key, and what Everstack renders. ## Configuration ```toml [otel] exporter = "otlp-http" endpoint = "https:///v1/traces" # headers are sent on every export headers = { Authorization = "Bearer " } ``` Codex's metrics exporter defaults to an internal sink, and OTLP coverage is uneven across subcommands, full in the interactive TUI, none in `codex mcp-server`. Confirm the exact keys against the Codex config reference for your version. ## Notes - Codex emits token counts but **no cost**, Everstack computes it from your model-catalog pricing. - Codex groups a session under a `conversation.id`; Everstack treats that as the session grouping key. --- ### Cursor Source: https://docs.everstack.ai/getting-started/observability/coding-agents/cursor Observe Cursor by routing its model traffic through your Everstack gateway. #### Metadata ```yaml title: Cursor description: Observe Cursor by routing its model traffic through your Everstack gateway. icon: cursor ``` **Cursor** does not export OpenTelemetry for its model calls. To see Cursor sessions in Everstack, route its traffic through your Everstack **gateway**, the same OpenAI-compatible surface the SDKs use, so every request lands in [Logs](https://docs.everstack.ai/docs/getting-started/observability/logs) and [Traces](https://docs.everstack.ai/docs/getting-started/observability/traces). ## Configuration In Cursor: **Settings → Models → API Keys**, set the **OpenAI API Key** to an Everstack gateway key, enable **Override OpenAI Base URL**, and point it at your instance's gateway: ```text Base URL: https:///v1 API Key: ``` Cursor then sends chat/plan requests to Everstack, which routes them to the upstream provider and records each call. The model you pick in Cursor must exist in your gateway's model catalog. Cursor only honors a custom base URL for its **Ask / Plan** (chat) modes. Agent, Composer inline edit, and Tab autocomplete run against Cursor's own backend and will not appear in Everstack. ## How Everstack attributes Cursor This is the gateway-proxy path (like [GLM](https://docs.everstack.ai/docs/getting-started/observability/coding-agents/glm) and [Kimi](https://docs.everstack.ai/docs/getting-started/observability/coding-agents/kimi)), so the provider, model, token usage, and cost come from the gateway request itself, not from Cursor telemetry. Traces whose emitter identifies as `cursor` render with the Cursor mark. ## Notes - Use a gateway key scoped to the models you want Cursor to reach; the same key authenticates and attributes the traffic to your tenant. - Cost is computed from your model-catalog pricing, matching what you are billed for the underlying provider call. - If your setup also exports OpenTelemetry for agent activity (for example via a community OTel hook), point its exporter at `https:///v1/traces` with a Bearer API key, exactly like the [other agents](https://docs.everstack.ai/docs/getting-started/observability/coding-agents). --- ### Gemini CLI Source: https://docs.everstack.ai/getting-started/observability/coding-agents/gemini-cli Send Google Gemini CLI session traces to your Everstack instance. #### Metadata ```yaml title: Gemini CLI description: Send Google Gemini CLI session traces to your Everstack instance. icon: gemini ``` **Gemini CLI** (Google) has built-in OpenTelemetry, but **traces are off by default** and it uses its own `telemetry.*` settings, it does **not** honor the standard `OTEL_EXPORTER_OTLP_ENDPOINT`. See [Trace Coding Agents](https://docs.everstack.ai/docs/getting-started/observability/coding-agents) for the endpoints, API key, and what Everstack renders. ## Configuration Enable telemetry, turn on traces, and point the OTLP target at your instance via `~/.gemini/settings.json`: ```json { "telemetry": { "enabled": true, "target": "otlp", "otlpEndpoint": "https://", "otlpHeaders": { "Authorization": "Bearer " } } } ``` Exact setting names vary by Gemini CLI version, check the Gemini CLI telemetry docs for your release. The key points are: telemetry **on**, traces **on**, and the OTLP endpoint + `Authorization` header pointed at your instance. ## Notes - Gemini CLI emits token counts but **no cost**, Everstack computes it from your model-catalog pricing, so cost still appears in Traces. - Token counts may use `input_token_count` / `output_token_count` on some records and the `gen_ai.usage.*` keys on others; Everstack coalesces both. --- ### GitHub Copilot Source: https://docs.everstack.ai/getting-started/observability/coding-agents/github-copilot Send GitHub Copilot Chat and Copilot SDK/CLI OpenTelemetry traces to your Everstack instance. #### Metadata ```yaml title: GitHub Copilot description: Send GitHub Copilot Chat and Copilot SDK/CLI OpenTelemetry traces to your Everstack instance. icon: copilot ``` **GitHub Copilot** exports OpenTelemetry natively, from Copilot Chat in VS Code and from the Copilot SDK / CLI. Point its OTLP exporter at your instance and sessions stream into [Traces](https://docs.everstack.ai/docs/getting-started/observability/traces). See [Trace Coding Agents](https://docs.everstack.ai/docs/getting-started/observability/coding-agents) for the endpoints, API key, and what Everstack renders. ## VS Code (Copilot Chat) Enable OTel export in your VS Code settings: ```json { "github.copilot.chat.otel.enabled": true, "github.copilot.chat.otel.exporterType": "otlp-http", "github.copilot.chat.otel.otlpEndpoint": "https://" } ``` The endpoint setting alone cannot carry an auth header, so pass the Everstack API key through the standard OTLP environment variable (VS Code inherits your shell environment): ```bash export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer " ``` You can also drive it entirely from the environment, `COPILOT_OTEL_ENABLED=1` plus `OTEL_EXPORTER_OTLP_ENDPOINT=https://`, which activates OTel without the settings entries. ## Copilot SDK / CLI The Copilot SDK takes a `TelemetryConfig` with an `otlpEndpoint`: ```ts const client = new CopilotClient({ telemetry: { otlpEndpoint: "https://" }, }); ``` The field name follows each SDK's casing (`otlpEndpoint`, `otlp_endpoint`, `OTLPEndpoint`, ...). Supply the Bearer API key via `OTEL_EXPORTER_OTLP_HEADERS` as above. Telemetry initializes when the process starts, so only sessions started **after** you enable it will emit. Restart VS Code or the CLI, a new prompt in an existing session is not enough. Setting names can shift between Copilot versions; confirm them against the current Copilot observability reference. ## Notes - Copilot reports token usage but **no dollar cost**, Everstack computes it from your model-catalog pricing, so trace cost matches what you are billed. - Copilot Chat and the SDK propagate W3C trace context, so your application's spans and Copilot's spans link into one trace when you instrument both. --- ### GLM Source: https://docs.everstack.ai/getting-started/observability/coding-agents/glm Trace GLM (Zhipu) models used through Claude Code. #### Metadata ```yaml title: GLM description: Trace GLM (Zhipu) models used through Claude Code. icon: zhipu ``` **GLM** (Zhipu) is a model family, not a separate CLI. The common setup is [Claude Code](https://docs.everstack.ai/docs/getting-started/observability/coding-agents/claude-code) pointed at Z.ai's Anthropic-compatible endpoint. ## Configuration Point Claude Code at Z.ai, then configure Claude Code telemetry exactly as on its own page, the base URL does not change what telemetry is emitted. ```bash export ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic export ANTHROPIC_AUTH_TOKEN= ``` Telemetry is **Claude Code's**, follow the [Claude Code](https://docs.everstack.ai/docs/getting-started/observability/coding-agents/claude-code) setup for the OTel environment variables. Nothing extra is needed here. ## How Everstack attributes GLM Claude Code reports the model name (`glm-*`) but no provider attribute when talking to Z.ai. Everstack infers the provider from the model name, `glm-*` → **Zhipu**, so GLM traces group under the right provider. ## Notes - GLM reports no dollar **cost**; Everstack computes it from your model-catalog pricing. - Some Z.ai routing can return a `claude-*` model string for GLM requests. If a trace looks mis-attributed, check the model value on the span. --- ### Trace Coding Agents Source: https://docs.everstack.ai/getting-started/observability/coding-agents Stream OpenTelemetry traces from Claude Code, Gemini CLI, Codex, GitHub Copilot, Cursor, and other coding agents into your Everstack instance, no SDK required. #### Metadata ```yaml title: Trace Coding Agents description: Stream OpenTelemetry traces from Claude Code, Gemini CLI, Codex, GitHub Copilot, Cursor, and other coding agents into your Everstack instance, no SDK required. icon: Bot ``` ## Overview Everstack ingests OpenTelemetry directly, so any coding agent that can export OTLP streams its sessions straight into your [Traces](https://docs.everstack.ai/docs/getting-started/observability/traces) view, LLM requests, tool calls, sub-agents, token usage, and cost, with **no Everstack-specific SDK or instrumentation**. Everstack normalizes each agent's attribute conventions into one schema, so they all render the same way. ## Pick your agent } title="Claude Code" href="https://docs.everstack.ai/docs/getting-started/observability/coding-agents/claude-code"> Anthropic's CLI. Native OTel; full trace tree in beta. } title="Gemini CLI" href="https://docs.everstack.ai/docs/getting-started/observability/coding-agents/gemini-cli"> Google's CLI. Uses its own telemetry settings; traces off by default. } title="Codex" href="https://docs.everstack.ai/docs/getting-started/observability/coding-agents/codex"> OpenAI's CLI. OTel configured via config.toml. } title="GLM" href="https://docs.everstack.ai/docs/getting-started/observability/coding-agents/glm"> GLM (Zhipu) via Claude Code. } title="Kimi" href="https://docs.everstack.ai/docs/getting-started/observability/coding-agents/kimi"> Kimi (Moonshot) via Claude Code. } title="Cursor" href="https://docs.everstack.ai/docs/getting-started/observability/coding-agents/cursor"> Routed through the Everstack gateway (no native OTel). } title="GitHub Copilot" href="https://docs.everstack.ai/docs/getting-started/observability/coding-agents/github-copilot"> Native OTel from Copilot Chat and the Copilot SDK/CLI. ## How it works Your agent exports OTLP/HTTP to your instance. Three signals map to three endpoints, all authenticated with an Everstack API key as a Bearer token: | Signal | Endpoint | |--------|----------| | Traces | `POST https:///v1/traces` | | Logs | `POST https:///v1/logs` | | Metrics | `POST https:///v1/metrics` | The Langfuse-compatible aliases `/api/public/otel/v1/{traces,logs,metrics}` are also accepted. The API key is resolved to your tenant and stamped onto every span, clients cannot write into another tenant's data. ### Create an API key Open your dashboard → **Settings → Vault → [API Keys](https://docs.everstack.ai/docs/getting-started/vault/api-keys)**, create a key, and copy it (shown once). The key must be created on the **same instance** you send telemetry to. ### Point your agent at the instance Most OTLP exporters take a base endpoint and append the signal path automatically: ```bash OTEL_EXPORTER_OTLP_ENDPOINT=https:// OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer " ``` Then follow the page for your agent above. ## What you get Once telemetry is flowing, every agent session renders in **Traces** with a unified schema, regardless of which agent produced it: - **Model & provider**, normalized across agents; provider is inferred from the model name when it isn't reported (e.g. `glm-*` → Zhipu, `kimi-*` → Moonshot). - **Token usage**, input, output, and cached tokens, coalesced across each agent's attribute names. - **Cost**, reported where available; otherwise computed from your model-catalog pricing. - **Tool calls & sub-agents**, tool spans and nested sub-agent runs, rendered in the trace tree. **Cost for token-only agents.** Only some agents (e.g. Claude Code) report a dollar cost. For agents that emit only token counts (Gemini CLI, Codex, GLM, Kimi), Everstack computes cost from the same model-catalog pricing used for billing, so trace cost matches what you are billed. A reported cost is never overwritten. ## Verify Send a prompt through your agent, then open **Traces**. Traces appear within a few seconds (metrics aggregate more slowly). Filter by service name or `session.id` to find a specific run; the root span expands into LLM requests, tool calls, and sub-agents. Telemetry initializes when the agent process starts, so only sessions started **after** you add the config will emit. Restart the agent, a new prompt in an existing session is not enough. ## Notes - The API key is sent as a **Bearer token** and must belong to the instance you point at, a key from another instance will not authenticate. - To expose your deployed agents as callable tools to an IDE or another agent, see the [MCP](https://docs.everstack.ai/docs/getting-started/mcp) server, that's the inbound direction (others calling your instance), complementary to tracing. --- ### Kimi Source: https://docs.everstack.ai/getting-started/observability/coding-agents/kimi Trace Kimi (Moonshot) models used through Claude Code. #### Metadata ```yaml title: Kimi description: Trace Kimi (Moonshot) models used through Claude Code. icon: moonshot ``` **Kimi** (Moonshot) is a model family, not a separate CLI. The common setup is [Claude Code](https://docs.everstack.ai/docs/getting-started/observability/coding-agents/claude-code) pointed at Moonshot's Anthropic-compatible endpoint. ## Configuration Point Claude Code at Moonshot, then configure Claude Code telemetry exactly as on its own page, the base URL does not change what telemetry is emitted. ```bash export ANTHROPIC_BASE_URL=https://api.moonshot.ai/anthropic # or api.moonshot.cn export ANTHROPIC_AUTH_TOKEN= ``` Telemetry is **Claude Code's**, follow the [Claude Code](https://docs.everstack.ai/docs/getting-started/observability/coding-agents/claude-code) setup for the OTel environment variables. Nothing extra is needed here. ## How Everstack attributes Kimi Claude Code reports the model name (`kimi-*`, `moonshot-*`) but no provider attribute when talking to Moonshot. Everstack infers the provider from the model name, `kimi-*` / `moonshot-*` → **Moonshot**, so Kimi traces group under the right provider. ## Notes - Kimi reports no dollar **cost**; Everstack computes it from your model-catalog pricing. --- ### Logs Source: https://docs.everstack.ai/getting-started/observability/logs Structured logging with ClickHouse storage and real-time querying. #### Metadata ```yaml title: Logs description: Structured logging with ClickHouse storage and real-time querying. icon: FileText ``` ## Structured JSON logging Everstack emits all logs as structured JSON. Every log entry includes a standard set of fields: ```json { "timestamp": "2026-05-27T14:32:01.003Z", "level": "info", "message": "provider call completed", "trace_id": "abc123def456", "span_id": "789ghi012", "service": "everstack-gateway", "project_id": "proj_01HX...", "provider": "openai", "model": "gpt-4o", "latency_ms": 312, "status": 200 } ``` The consistent structure means you can filter, aggregate, and correlate logs without parsing free-text messages. Every log entry that originates from a traced request includes `trace_id` and `span_id` fields, linking it directly to the corresponding trace. ## Log levels Everstack supports four log levels, from most verbose to least: | Level | When it fires | Example | |---|---|---| | `debug` | Internal processing details. High volume. | Cache key computation, routing rule evaluation steps | | `info` | Normal operations worth recording. | Request completed, agent turn started, tool executed | | `warn` | Something unexpected that did not cause a failure. | Provider rate limit approached, fallback activated, slow query | | `error` | A failure that affected the request or operation. | Provider returned 500, sandbox creation failed, timeout exceeded | Set the minimum level with `log_level` in your gateway configuration. Logs below the configured level are not emitted or stored. ```yaml observability: log_level: "info" ``` Setting `log_level` to `debug` in production generates high write volume. Use it temporarily when investigating specific issues, then revert to `info`. ## Request logging When `enable_request_logging` is `true` (the default), every gateway request produces a structured log entry containing: - Request metadata: method, path, model, provider - Response metadata: status code, latency, token counts, cost - Trace correlation: `trace_id` and `span_id` for linking to the trace view This gives you a searchable audit log of every request that flowed through the gateway, independent of whether the request was sampled for tracing. ```yaml observability: enable_request_logging: true ``` When disabled, only warning and error events from requests are logged. This reduces storage volume for high-throughput deployments where you rely primarily on traces and metrics. ## ClickHouse storage Logs are stored in ClickHouse alongside traces. This co-location provides two advantages: 1. **Unified querying** -- you can join logs and trace spans in a single query. Find all error logs for traces that exceeded a latency threshold, or find the trace for a specific error message. 2. **Columnar performance** -- ClickHouse's columnar storage and compression make it fast to scan millions of log lines. Queries like "show me all error logs from the openai provider in the last 24 hours" execute in milliseconds, not seconds. Retention and TTL policies are configurable at the ClickHouse level. By default, logs are retained for 30 days. Adjust this based on your compliance requirements and storage budget. ## Querying logs in the admin UI The admin dashboard at `/observability` includes a dedicated Logs view with: - **Full-text search** -- search across log messages and structured fields. ClickHouse's indexing makes this fast even over large time ranges. - **Field filters** -- filter by level, service, provider, model, project, or any structured field. Combine multiple filters to narrow results. - **Time range** -- select a predefined range (last 15 minutes, last hour, last 24 hours) or specify a custom range. - **Live tail** -- stream new log entries in real time as they arrive. Useful when debugging an active issue or watching a deployment roll out. Click any log entry to expand it and see all structured fields. If the entry has a `trace_id`, a single click takes you to the corresponding trace view. ## Correlating logs with traces The link between logs and traces is bidirectional: - **From a log entry**, click the trace ID to open the full span tree for that request. This is the fastest way to understand the context around an error. - **From a trace**, the span detail panel shows all log entries emitted during that span's lifetime. This surfaces debug-level context without needing to search for it separately. This correlation works because both logs and traces share the same `trace_id` and `span_id` identifiers, and both are stored in the same ClickHouse instance. ## Log formatters The `log_formatter` setting controls the output format of logs: | Formatter | Output | When to use | |---|---|---| | `json` | Structured JSON, one object per line | Default. Best for ClickHouse ingestion, log aggregators, and programmatic parsing. | | `text` | Human-readable single-line format | Local development and debugging. Easier to scan in a terminal. | ```yaml observability: log_formatter: "json" ``` The `text` formatter is intended for local development only. ClickHouse ingestion and the admin UI log viewer expect `json` format. Using `text` in production will prevent logs from appearing in the admin dashboard. ## Configuration Full logging configuration lives under the `observability` block: ```yaml observability: log_level: "info" log_formatter: "json" enable_request_logging: true ``` For the full configuration schema, see the [API reference](https://docs.everstack.ai/api-reference/gateway). --- ### Observability Overview Source: https://docs.everstack.ai/getting-started/observability/overview OpenTelemetry-native tracing, logging, and metrics for AI workloads. #### Metadata ```yaml title: Observability Overview description: OpenTelemetry-native tracing, logging, and metrics for AI workloads. icon: LineChart ``` ## Why AI workloads need specialized observability Traditional APM tools capture HTTP latency and error rates. That is not enough for AI infrastructure. A single gateway request might fan out to multiple providers, retry on fallback models, stream tokens over seconds, and accumulate costs that vary by orders of magnitude depending on the model. Agent sessions compound this further: a single turn can trigger tool calls, sandbox operations, human-in-the-loop gates, and nested LLM invocations. Everstack ships OpenTelemetry-native observability designed for these patterns. Every gateway request, agent session, and eval run produces structured traces, logs, and metrics that you can query, correlate, and alert on from a single dashboard. ## Architecture Everstack uses a hybrid storage model: - **Postgres** stores metadata: project configuration, agent definitions, eval specs, and session records. - **ClickHouse** stores high-volume telemetry: traces, spans, structured logs, and aggregated metrics. This split keeps metadata queries fast and ACID-compliant while giving you columnar analytics over millions of spans and log lines. ### Data collection Telemetry flows into ClickHouse through two paths: 1. **Embedded collector** -- the gateway and agent runtime emit spans and logs directly to ClickHouse using the OTEL protocol. No external collector infrastructure required. 2. **External collector** -- for production deployments that already run an OpenTelemetry Collector, Everstack can export via OTLP to your existing pipeline. You control sampling, batching, and routing. The service name for gateway telemetry is `everstack-gateway`. Agent telemetry is tagged with the agent definition ID and session ID for correlation. ## What gets captured ### Gateway telemetry Every request that flows through the gateway middleware pipeline emits spans for each processing stage: - **Routing** -- which provider and model were selected, and why - **Cache lookup** -- whether semantic or exact-match caching produced a hit - **Context compaction** -- if the request was compacted before forwarding - **Provider call** -- the upstream HTTP request to the LLM provider, including latency and status - **Response processing** -- token counting, cost calculation, and response transformation Each span carries token counts and cost attributes, so you can compute per-request economics without a separate billing pipeline. ### Agent telemetry Agent sessions emit a richer event stream. Each turn in a session creates a parent span containing: - `llm.start`, `llm.chunk`, `llm.end` -- the full lifecycle of each LLM call, including streaming chunks when detailed tracing is enabled - `tool_call.start`, `tool_call.end` -- tool execution with input/output capture - `approval.*` -- human-in-the-loop gate events (requested, approved, denied, timed out) - `sandbox.*` -- sandbox lifecycle events (create, exec, destroy) These nest naturally under the session and turn spans, giving you a complete picture of what an agent did and why. ### Eval telemetry Eval runs link back to the traces they exercised. When an eval suite runs, each test case references the trace ID of the underlying gateway or agent call. This lets you jump from a failing eval directly to the trace that produced the failure. ## Admin dashboard The admin UI at `/observability` provides three views: - **Traces** -- search, filter, and drill into distributed traces. See the full span tree for any gateway request or agent session. Filter by latency, cost, model, status, or custom attributes. - **Logs** -- query structured logs with ClickHouse-speed full-text search. Correlate logs with traces using shared trace and span IDs. - **Metrics** -- real-time dashboards showing request volume, latency percentiles, error rates, token usage, and cost over time. All three views share a unified time range picker and support filtering by project, agent, model, and provider. The admin dashboard queries ClickHouse directly. For large deployments, you can tune retention and aggregation policies to balance query speed against storage cost. ## Configuration at a glance Observability is configured in your gateway configuration under the `observability` block. Key settings include: | Setting | Default | Purpose | |---|---|---| | `tracing_granularity` | `"standard"` | Controls span detail: `minimal`, `standard`, or `detailed` | | `trace_provider_calls` | `true` | Emit spans for upstream provider HTTP calls | | `trace_stream_chunks` | `false` | Emit per-chunk spans during streaming (high volume) | | `trace_fallbacks` | `true` | Emit spans when fallback routing activates | | `sampling_fraction` | `0.1` | Fraction of requests to trace (0.0 to 1.0) | | `enable_request_logging` | `true` | Log every gateway request as a structured log entry | | `log_level` | `"info"` | Minimum log level: `debug`, `info`, `warn`, `error` | | `log_formatter` | `"json"` | Output format: `json` or `text` | For full configuration reference, see the [API documentation](https://docs.everstack.ai/api-reference/gateway). ## When to use each signal - **Traces** when you need to understand the lifecycle of a single request or agent turn. Start here for debugging latency, unexpected fallbacks, or cost spikes. - **Logs** when you need to search across many requests for a pattern. Use logs to find all errors from a specific provider, or all requests that hit a cache miss. - **Metrics** when you need aggregate trends. Use metrics dashboards to monitor overall health, set alerts on error rate thresholds, or track cost trends over days and weeks. ## Next steps Learn how distributed traces work, configure tracing granularity, and understand span attributes. Set up structured logging, query logs in the admin UI, and correlate logs with traces. --- ### Search (ESQL) Source: https://docs.everstack.ai/getting-started/observability/search Filter traces with ESQL, the Everstack Search Query Language. #### Metadata ```yaml title: Search (ESQL) description: Filter traces with ESQL, the Everstack Search Query Language. icon: Search ``` ESQL (Everstack Search Query Language) is a compact, filter-only language for finding traces. It is not SQL: there is no `SELECT`, `FROM`, or `JOIN`. You describe the runs you want, and Everstack returns them. The Traces search bar speaks ESQL two ways: - **Chips**, committed filters show as neutral chips you can edit or remove. - **Editor**, the `Editor` button opens a freeform ESQL editor with syntax highlighting, autocomplete, and a plain-English `Matches:` description of your query. Clauses combine with spaces (implicit AND). There is no `OR` or `NOT` yet. ## Quick examples ``` failed status:error provider:anthropic model:gpt-5.2 cost > 0.05 tool.error exists duration > 30s tokens.total > 15000 prompt contains "refund" root.status:error @campaign:summer tag:prod ``` ## Grammar | Form | Example | Meaning | | --- | --- | --- | | Free text | `checkout failed` | Full-text match on input/output | | Equality | `model:gpt-5.2` | Field equals value | | Contains | `output contains "refund"` | Substring match | | Numeric | `cost > 0.05` | Compare a number (`>`, `>=`, `<`, `<=`) | | Duration | `duration > 30s` | Units: `ms`, `s`, `m`, `h` | | Existence | `tool.error exists` | The condition is present | | Preset | `failed` | A saved shorthand (see below) | | Metadata | `@user_id:123` | Match a metadata key/value | | Scope | `root.status:error` | Restrict to a span position | Values with spaces use quotes: `prompt contains "dietary restriction"`. ## Presets Presets are one-word shorthands for common questions. They also appear as **Lenses** at the top of the search menu. | Preset | Expands to | | --- | --- | | `failed` | `status:error` | | `slow` | `duration > 30s` | | `expensive` | `cost > 0.10` | | `no_output` | empty output | | `tool_error` | `tool.error exists` | | `retry` | a fallback/retry occurred | ## Fields | Field | Aliases | Example | | --- | --- | --- | | `status` | `status_code` | `status:error` | | `model` | | `model:gpt-5.2` | | `provider` | | `provider:anthropic` | | `user` | `user_id` | `user:u_123` | | `session` | `session_id` | `session:s_9` | | `thread` | `thread_id` | `thread:t_4` | | `environment` | `env` | `env:production` | | `correlation` | | `correlation:abc` | | `tag` | | `tag:prod` | | `cost` | `price`, `spend` | `cost > 0.05` | | `duration` | `latency`, `duration_ms` | `duration > 30s` | | `tokens.total` | `tokens` | `tokens.total > 15000` | | `ttft` | | `ttft > 5s` | | `tool.name` | | `tool.name:db.fetch` | | `tool.error` | | `tool.error exists` | | `cache.hit` | | `cache.hit exists` | | `trace` | `traceId` | `trace:8628cf45` | | `agent` | `agentName` | `agent:researcher` | | `has` | | `has:sandbox` | | `output` | | `output contains "..."` | ### Filter by what ran (`has:`) `has:` matches traces that contain a span of a given kind, the agent-native filter no request log can offer: ``` has:sandbox traces that used a sandbox has:tool traces that called a tool has:agent traces with an agent span has:memory traces that read/wrote memory has:browser traces that drove a browser has:mcp traces that called an MCP tool has:voice traces with voice / audio (TTS/STT) spans has:vector traces that hit a vector store / embeddings ``` ## Scopes: filter by span position By default a filter matches a trace that contains **any** span meeting the condition. Prefix a field to be explicit: - `any.model:gpt-5.2`, any span used gpt-5.2 (the default). - `root.status:error`, the trace's root span errored. `tool.error exists`, `cache.hit exists`, and `ttft` let you filter on what the agent actually did across its spans -- not just the top-line request. This is the difference between a request log and a trace store. ## Saving and reusing queries Every query you run is recorded under **Observability -> Saved Queries**, where you can name and pin the ones you reuse. Running a saved query jumps back into Traces with it applied. ## Coming soon - Boolean `OR` / `NOT`. - `sequence(llm -> tool:error -> llm)`, match traces by the ordered shape of the run. - Parent/child span relationships. --- ### Traces Source: https://docs.everstack.ai/getting-started/observability/traces Distributed tracing for gateway requests and agent sessions. #### Metadata ```yaml title: Traces description: Distributed tracing for gateway requests and agent sessions. icon: Activity ``` ## What a trace contains Every gateway request and agent turn produces a distributed trace -- a tree of spans that records exactly what happened, how long each step took, and what it cost. A single trace might look like this for a gateway request: ``` gateway.request (12ms total, $0.003) ├── routing.resolve (0.2ms) ├── cache.lookup (1.1ms, miss) ├── provider.call (9.8ms, gpt-4o, 312 tokens) │ ├── provider.http (9.4ms, 200 OK) │ └── provider.response_parse (0.3ms) └── response.finalize (0.5ms) ``` Each span carries structured attributes: model name, token counts (prompt, completion, total), cost, provider, cache status, and any error details. These attributes are indexed in ClickHouse for fast filtering. ## Gateway traces The gateway middleware pipeline creates spans for each processing stage, in order: 1. **`routing.resolve`** -- Evaluates routing rules and selects the target provider and model. Attributes include the matched route, the selected model, and whether a fallback was activated. 2. **`cache.lookup`** -- Checks the semantic or exact-match cache. Records hit/miss status and, on a hit, the cache key and age. 3. **`context.compaction`** -- If the request exceeds the model's context window, this span covers the compaction step. Records the original and compacted token counts. 4. **`provider.call`** -- The upstream HTTP call to the LLM provider. Contains the full round-trip latency, HTTP status, and any retry attempts. 5. **`response.finalize`** -- Post-processing: token counting, cost calculation, and response transformation. When a request triggers a fallback (primary provider error, rate limit, timeout), the trace shows both the failed attempt and the fallback attempt as sibling spans under the parent request. The `trace_fallbacks` option controls whether fallback spans are emitted. ## Agent traces Agent sessions produce deeper trace trees. Each session creates a root span, and each turn within the session creates a child span. Within a turn, you will see: - **`llm.start` / `llm.end`** -- Brackets the LLM call. Attributes include model, token usage, and cost. When `tracing_granularity` is set to `detailed`, individual `llm.chunk` spans appear for each streamed token batch. - **`tool_call.start` / `tool_call.end`** -- Brackets a tool execution. Captures the tool name, input arguments, output, and execution duration. - **`approval.requested` / `approval.resolved`** -- Human-in-the-loop gates. Records what action required approval, who approved or denied it, and how long the gate was open. - **`sandbox.create` / `sandbox.exec` / `sandbox.destroy`** -- Sandbox lifecycle events. Records the sandbox ID, command executed, exit code, and resource usage. This nesting gives you a complete, chronological record of an agent's decision-making process within each turn. ## Tracing granularity The `tracing_granularity` setting controls how much detail traces capture: | Level | What it captures | When to use | |---|---|---| | `minimal` | Request-level spans only. One span per gateway request or agent turn. No internal pipeline spans. | Production workloads where you need basic latency and error tracking with minimal overhead. | | `standard` | Pipeline-stage spans (routing, cache, provider call, etc.) plus agent event spans. | Default for most deployments. Good balance of detail and performance. | | `detailed` | Everything in `standard`, plus per-chunk streaming spans and full tool input/output capture. | Debugging specific issues. Not recommended for high-throughput production use. | ## Sampling Not every request needs a full trace. The `sampling_fraction` setting controls what fraction of requests are traced: ```yaml observability: sampling_fraction: 0.1 # Trace 10% of requests ``` A value of `1.0` traces everything. A value of `0.0` disables tracing entirely. The default of `0.1` (10%) works well for most production deployments. Setting `sampling_fraction` to `1.0` with `tracing_granularity: detailed` on a high-throughput gateway will produce significant ClickHouse write volume. Start with `standard` granularity and 10% sampling, then increase as needed. Sampling decisions propagate through the trace. If a gateway request is sampled, the downstream agent session spans are also captured, keeping the trace complete. ## Cost and token tracking Every LLM-related span carries cost and token attributes: - `llm.tokens.prompt` -- number of input tokens - `llm.tokens.completion` -- number of output tokens - `llm.tokens.total` -- sum of prompt and completion tokens - `llm.cost.usd` -- estimated cost in USD based on the model's pricing These attributes are aggregated in the admin dashboard's metrics view, so you can see cost breakdowns by model, provider, agent, or time range without a separate billing system. ## Trace context propagation Everstack propagates trace context using the [W3C Traceparent](https://www.w3.org/TR/trace-context/) standard. When a gateway request calls an upstream provider, the `traceparent` header is forwarded so external systems can correlate their spans with your Everstack traces. If your application sends a `traceparent` header to the gateway, Everstack will join that trace context rather than creating a new root trace. This lets you see Everstack spans as part of your application's broader distributed trace. ## Configuration Full tracing configuration lives under the `observability` block in your gateway config: ```yaml observability: tracing_granularity: "standard" trace_provider_calls: true trace_stream_chunks: false trace_fallbacks: true sampling_fraction: 0.1 ``` - **`trace_provider_calls`** (`true`) -- Emit spans for upstream provider HTTP calls. Disable if you only need aggregate request-level data. - **`trace_stream_chunks`** (`false`) -- Emit a span for each streamed chunk. Only meaningful when `tracing_granularity` is `detailed`. Generates high span volume. - **`trace_fallbacks`** (`true`) -- Emit spans when fallback routing activates, capturing both the failed primary and the successful fallback. For the full configuration schema, see the [API reference](https://docs.everstack.ai/api-reference/gateway). ## Searching traces Filter the trace list with **ESQL**, the Everstack Search Query Language: `status:error provider:anthropic cost > 0.05`, `tool.error exists`, `root.status:error`. See the [ESQL search reference](https://docs.everstack.ai/getting-started/observability/search). --- ### Providers Source: https://docs.everstack.ai/getting-started/providers LLM provider setup -- configure, sync, and manage 22 providers and 200+ models. #### Metadata ```yaml title: Providers description: LLM provider setup -- configure, sync, and manage 22 providers and 200+ models. icon: Plug ``` Everstack ships with a built-in **model catalog** containing 22 LLM providers and 200+ models. You can configure providers through the Admin Dashboard or YAML config, and the catalog syncs automatically to keep models up to date. ## Supported Providers }> GPT-4o, GPT-4o-mini, o3-mini, text-embedding-3-small, and more. Chat, vision, function calling, embeddings, fine-tuning. }> Claude Opus 4, Claude Sonnet 4, Claude Haiku 3.5. Chat, vision, function calling, streaming. }> Gemini 2.5 Pro, Gemini 2.0 Flash, and more. Chat, vision, function calling, embeddings. }> OpenAI models hosted on Azure with deployment-based routing and Azure AD auth. }> Claude, Titan, Llama, and more via AWS Bedrock. Uses AWS SigV4 authentication. }> Google Cloud-hosted models with OAuth2 authentication and project-based routing. }> Ultra-fast inference for Llama, Mixtral, and Gemma models on Groq LPU hardware. }> Open-source models -- Llama, Mixtral, CodeLlama, Qwen, and more. Chat, embeddings, function calling. }> High-performance inference for open-source models with function calling and streaming. }> DeepSeek-V3, DeepSeek-R1, and Coder models. Chat, function calling, streaming. }> Mistral Large, Medium, Small, Codestral, and embedding models. }> Command R+, Command R, and Embed models. Chat, embeddings, RAG-optimized. }> Grok models with chat, vision, and function calling support. }> Sonar models optimized for search-augmented generation. }> Ultra-fast inference on Cerebras wafer-scale hardware. }> NVIDIA-optimized models via the NIM inference microservice. }> Meta-provider routing to 200+ models across multiple providers. }> Run open-source models locally. Auto-discovers installed models. }> Inference API access to thousands of open-source models. }> Alibaba's Qwen family -- chat, vision, and code models. }> Minimax chat and generation models. }> Moonshot AI models with long-context support. ## Configuring a Provider Providers can be configured through the Admin Dashboard or the YAML config file. ### Admin Dashboard Go to **Vault → LLM Providers** and click **Add Provider**. Select a provider from the catalog, enter your API key, and choose which models to enable. The dashboard shows each provider as a card with its status, model count, and configuration. You can toggle providers on/off, set a default provider, and manage multiple API keys per provider. ### YAML Config Add providers directly in your config file under `gateway.models`: ```yaml gateway: models: - provider: openai model: - gpt-4o - gpt-4o-mini api_key: sk-your-openai-key default: true - provider: anthropic model: - claude-sonnet-4-6 - claude-haiku-4-5-20251001 api_key: sk-ant-your-anthropic-key - provider: google model: - gemini-2.0-flash - gemini-2.5-pro api_key: AIza-your-google-key ``` Set `default: true` on one provider to make it the fallback when a request doesn't match any specific model name. ### Provider-Specific Configuration Some providers require additional configuration beyond an API key: Azure OpenAI uses deployment-based routing. The base URL must point to your specific deployment: ```yaml - provider: azure-openai api_key: your-azure-key base_url: "https://{resource}.openai.azure.com/openai/deployments/{deployment}" model: - gpt-4o ``` AWS Bedrock uses SigV4 authentication instead of API keys. Configure your AWS credentials: ```yaml - provider: aws-bedrock base_url: "https://bedrock-runtime.{region}.amazonaws.com" model: - anthropic.claude-3-sonnet-20240229-v1:0 ``` Set `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, and `AWS_REGION` environment variables. Vertex AI uses OAuth2 authentication with Google Cloud project-based routing: ```yaml - provider: vertex-ai base_url: "https://{location}-aiplatform.googleapis.com/v1/projects/{project}/locations/{location}" model: - gemini-2.0-flash ``` Authenticate via `GOOGLE_APPLICATION_CREDENTIALS` or workload identity. Ollama runs locally and supports **automatic model discovery**, Everstack detects installed models without manual configuration: ```yaml - provider: ollama base_url: "http://localhost:11434" model: - llama3 - codellama ``` Ollama is the only provider with `supports_model_discovery: true`, querying `http://localhost:11434/api/tags` to list available models. ## Model Catalog The model catalog is a versioned registry of all known models across every supported provider. It includes metadata like context window sizes, capabilities, pricing, and deprecation status. ### How It Works The catalog operates in three layers: 1. **Embedded catalog**, bundled into the Everstack binary at build time. Always available as a fallback. 2. **Remote catalog** -- fetched from the [model-catalog](https://github.com/everstacklabs/model-catalog) repository. Contains the latest models and pricing. 3. **Merged catalog**, the embedded and remote catalogs are merged at runtime, with remote data taking precedence. ### Catalog Structure Each provider in the catalog includes: ```yaml # provider.yaml name: "openai" display_name: "OpenAI" base_url: "https://api.openai.com/v1" provider_type: "static" # static or meta supports_model_discovery: false capabilities: chat: true embeddings: true function_calling: true vision: true streaming: true model_families: gpt-4: description: "GPT-4 family models" capabilities: ["chat", "function_calling", "vision"] max_tokens: 128000 ``` Individual models are defined in separate YAML files with detailed metadata, context window, pricing per token, deprecation dates, and supported features. ### Provider Types | Type | Behavior | Examples | | --- | --- | --- | | `static` | Fixed model list defined in the catalog | OpenAI, Anthropic, Google, DeepSeek | | `meta` | Aggregates models from multiple sources or discovers them dynamically | Groq, Together, Fireworks, OpenRouter, Ollama, NVIDIA NIM | Meta-providers may offer hundreds of models from various upstream providers. The catalog tracks which models are available through each meta-provider. ## Syncing Everstack keeps the model catalog up to date through automatic and manual sync. ### Automatic Sync The catalog sync service runs in the background: 1. **Initial sync**, runs 5 minutes after startup 2. **Periodic sync**, runs daily to check for updates 3. **Version check**, compares local and remote `manifest.yaml` versions 4. **Atomic updates**, downloads are written atomically with SHA verification 5. **Graceful fallback**, if the remote is unavailable, the embedded catalog is used ### Manual Sync Trigger a sync from the Admin Dashboard: 1. Go to **Vault → LLM Providers** 2. Click the **Sync** button in the toolbar 3. The dashboard shows sync status, new models, new providers, and deprecated items Or trigger via the API: ```bash curl -X POST https://{instance}.{region}.everstack.ai/api/providers/reload \ -H "Authorization: Bearer YOUR_API_KEY" ``` ### What Gets Synced | Data | Source | Frequency | | --- | --- | --- | | Provider definitions | Remote catalog repo | Daily | | Model metadata | Remote catalog repo | Daily | | Pricing & token limits | Remote catalog repo | Daily | | Provider configuration | Admin Dashboard → YAML | On change (debounced 5s) | ### Config Sync (YAML ↔ Database) When you configure a provider through the Admin Dashboard, the configuration is stored in the database **and** synced to YAML config files. This two-way sync ensures: - Dashboard changes are reflected in the config file - Config file changes can be loaded on restart - The sync worker uses a debounce window (5 seconds) to batch rapid changes ## Capabilities Reference Each provider supports a different set of capabilities. Here's a summary: | Provider | Chat | Embeddings | Vision | Function Calling | Streaming | Fine-tuning | | --- | --- | --- | --- | --- | --- | --- | | OpenAI | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | Anthropic | ✓ |, | ✓ | ✓ | ✓ |, | | Google | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | Azure OpenAI | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | AWS Bedrock | ✓ | ✓ | ✓ | ✓ | ✓ |, | | Vertex AI | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | Groq | ✓ |, | ✓ | ✓ | ✓ |, | | Together AI | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | Fireworks AI | ✓ | ✓ | ✓ | ✓ | ✓ |, | | DeepSeek | ✓ |, |, | ✓ | ✓ |, | | Mistral | ✓ | ✓ |, | ✓ | ✓ | ✓ | | Cohere | ✓ | ✓ |, | ✓ | ✓ | ✓ | | xAI | ✓ |, | ✓ | ✓ | ✓ |, | | Perplexity | ✓ |, |, |, | ✓ |, | | Cerebras | ✓ |, |, | ✓ | ✓ |, | | NVIDIA NIM | ✓ | ✓ | ✓ | ✓ | ✓ |, | | OpenRouter | ✓ | ✓ | ✓ | ✓ | ✓ |, | | Ollama | ✓ | ✓ | ✓ | ✓ | ✓ |, | | HuggingFace | ✓ | ✓ | ✓ |, | ✓ |, | | Qwen | ✓ | ✓ | ✓ | ✓ | ✓ |, | | Minimax | ✓ |, |, |, | ✓ |, | | Moonshot | ✓ |, |, | ✓ | ✓ |, | ## Authentication Methods Most providers use API key authentication, but some require different auth mechanisms: | Method | Providers | Configuration | | --- | --- | --- | | API Key (Bearer) | OpenAI, Groq, Together, Fireworks, DeepSeek, xAI, Perplexity, Cerebras, NVIDIA NIM, OpenRouter, HuggingFace, Qwen, Minimax, Moonshot | `Authorization: Bearer {api_key}` | | API Key (Custom Header) | Anthropic | `x-api-key: {api_key}` | | API Key (Query Param) | Google | `?key={api_key}` | | API Key (Header) | Azure OpenAI, Cohere, Mistral | `api-key: {api_key}` | | AWS SigV4 | AWS Bedrock | AWS credentials via env vars | | OAuth2 / Service Account | Vertex AI | Google Cloud credentials | | No Auth | Ollama | Local-only, no key needed | ## Next Steps - [Configuration](https://docs.everstack.ai/getting-started/configuration), full config file reference - [Gateway Overview](https://docs.everstack.ai/getting-started/gateway/overview), routing, load balancing, and fallbacks - [Provider Keys](https://docs.everstack.ai/getting-started/vault/provider-keys), key management and rotation - [Quick Start](https://docs.everstack.ai/getting-started/quickstart), configure your first provider and send a request --- ### Quick Start Source: https://docs.everstack.ai/getting-started/quickstart Configure providers and send your first request. #### Metadata ```yaml title: Quick Start description: Configure providers and send your first request. icon: Rocket ``` This guide picks up where [Installation](https://docs.everstack.ai/getting-started/installation) left off. By the end you'll have an LLM provider configured, an API key issued, and your first request routed through the gateway. Make sure Everstack is running and the health check passes before continuing: ```bash curl https://{instance}.{region}.everstack.ai/debug/healthz ``` ## Open the Admin Dashboard Navigate to `https://{instance}.{region}.everstack.ai` in your browser. If authentication is enabled, you'll be prompted to create an account. **The first user to register automatically becomes the owner** with full admin access. ## Add an LLM Provider Go to **Vault → LLM Providers** and click **Add Provider**. Enter your credentials for the provider you want to use: | Field | Value | | --- | --- | | Provider | `openai` | | API Key | `sk-…` | Supported models: `gpt-4o`, `gpt-4o-mini`, `o3-mini`, and more. | Field | Value | | --- | --- | | Provider | `anthropic` | | API Key | `sk-ant-…` | Supported models: `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-haiku-4-5`, and more. | Field | Value | | --- | --- | | Provider | `google` | | API Key | `AIza…` | Supported models: `gemini-2.0-flash`, `gemini-2.5-pro`, and more. | Field | Value | | --- | --- | | Provider | `azure` | | API Key | your Azure key | | Base URL | `https://.openai.azure.com/openai/deployments/` | The base URL must point to a specific deployment endpoint. You can add multiple providers. The gateway routes requests to the right provider based on the model name in the request. ## Create an API Key Go to **Vault → API Keys** and click **Create Key**. Give it a name, set an optional expiry, and copy the key, **it's only shown once**. This is the key your applications will use when calling the gateway. ## Send Your First Request Everstack is OpenAI API-compatible, any existing OpenAI SDK or tool works by changing the base URL and API key. ```bash curl -X POST https://{instance}.{region}.everstack.ai/openai/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_EVERSTACK_API_KEY" \ -d '{ "model": "gpt-4o-mini", "messages": [ {"role": "user", "content": "Hello!"} ] }' ``` ```python from openai import OpenAI client = OpenAI( base_url="https://{instance}.{region}.everstack.ai/openai/v1", api_key="YOUR_EVERSTACK_API_KEY", ) response = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": "Hello!"}], ) print(response.choices[0].message.content) ``` ```typescript import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://{instance}.{region}.everstack.ai/openai/v1", apiKey: "YOUR_EVERSTACK_API_KEY", }); const response = await client.chat.completions.create({ model: "gpt-4o-mini", messages: [{ role: "user", content: "Hello!" }], }); console.log(response.choices[0].message.content); ``` You should get a response from the provider within a few hundred milliseconds. The request is routed, logged, and traced automatically. ## View the Trace Go to **Observability → Traces** in the dashboard. You'll see your request listed with its full trace, latency breakdown, token counts, cost estimate, and the raw provider response. Every request is traced automatically with no SDK or instrumentation required in your application. ## What's Next? Set up the YAML config file, environment variables, database modes, and more. Integrate chat, memory, agents, sandboxes, datasets, and evaluations from Node.js. Routing rules, fallbacks, load balancing, and rate limiting. Build autonomous AI agents with tools, memory, and sandboxed execution. Design visual AI pipelines with the drag-and-drop studio. --- ### Automation Source: https://docs.everstack.ai/getting-started/sandboxes/automation Use crons, webhooks, and isolated workers to automate workloads inside sandboxes. #### Metadata ```yaml title: Automation description: Use crons, webhooks, and isolated workers to automate workloads inside sandboxes. icon: Clock3 ``` Sandboxes are a strong fit for automation because they combine runtime isolation with just enough control plane to run real jobs safely. Instead of provisioning a full service for every small workflow, you can create a sandbox and turn it into: - a scheduled worker with crons - an HTTP-triggered worker with webhooks - a file-processing runtime - a customer-specific integration environment - a temporary background job runner with clear lifecycle controls ## Why automation belongs in sandboxes Most automation workloads need more than raw execution. They usually also need: - dependency isolation - filesystem access - environment-specific debugging - network restrictions - logs, metrics, and execution history - a clean way to stop, revive, or terminate the runtime That is exactly what sandboxes provide. ## Cron-based automation Use crons when a command should run on a schedule inside a sandbox. Good fits include: - hourly data syncs - nightly report generation - health checks and cleanup jobs - polling third-party APIs - recurring enrichment or indexing work Typical pattern: 1. Create a sandbox with the right image and dependencies. 2. Verify the command manually in shell. 3. Add a cron expression and timeout. 4. Monitor runs through logs, metrics, events, and run counts. If the job is important, prefer `whitelist` networking and allow only the domains it actually needs. ## Webhook-based automation Use webhooks when an external system should trigger work inside the sandbox. Good fits include: - GitHub push or PR handlers - Stripe billing callbacks - custom SaaS event processing - inbound file-processing triggers - internal platform hooks Each webhook can run a command in response to an HTTP request, with: - a path - a secret for verification - rate limiting - timeout controls - optional auto-recreate behavior This is a practical way to build isolated event handlers without standing up a separate long-lived service. ## Automation examples ### Nightly CSV import Use a Python sandbox with a cron that fetches a CSV, validates it, writes outputs to disk, and posts results to your internal API. ### GitHub webhook processor Create a webhook-driven sandbox that receives repository events and runs a command such as `python sync_repo.py` or `node handle_event.js`. ### Customer-specific connector Run one sandbox per customer integration. Schedule a cron for periodic syncs and keep outbound access whitelisted to only that customer's required endpoints. ### Temporary migration worker Create a sandbox for a one-off migration or backfill, monitor resource usage, and terminate it once the task finishes. ## Operational guidance - Use shell to validate commands before scheduling them. - Keep timeouts realistic so stuck jobs do not run forever. - Prefer `whitelist` network mode for production automations. - Use events and execution history to understand failures. - Terminate stale sandboxes when the automation no longer needs a dedicated runtime. ## Crons vs webhooks vs ports - Use `Crons` for scheduled execution. - Use `Webhooks` for request-driven execution. - Use `Ports` when you need a continuously running interactive service. These features can also be combined. For example, a sandbox might expose a status UI on one port, accept incoming webhooks, and run a nightly cron. ## Related pages - [Sandboxes Overview](https://docs.everstack.ai/getting-started/sandboxes/overview) - [Networking](https://docs.everstack.ai/getting-started/sandboxes/networking) - [Shell & Files](https://docs.everstack.ai/getting-started/sandboxes/shell-and-files) - [Sandbox API](https://docs.everstack.ai/api-reference/sandbox) --- ### Computer Use Source: https://docs.everstack.ai/getting-started/sandboxes/computer-use Screenshot, mouse, keyboard, and screen recording for GUI automation inside sandboxes. #### Metadata ```yaml title: Computer Use description: Screenshot, mouse, keyboard, and screen recording for GUI automation inside sandboxes. icon: Monitor ``` Computer Use gives vision-capable agents a full desktop environment to work with. When enabled, the sandbox boots Xvfb (virtual display) and XFCE4, exposing HTTP endpoints for screenshot capture, mouse and keyboard control, and screen recording. ## Enable Computer Use Set `computerUse: true` on `CreateSandbox`: ```bash POST /v1/sandbox { "computerUse": true, "image": "ghcr.io/everstacklabs/sandbox:base" } ``` The sandbox installs and starts `Xvfb :99` + `startxfce4` at boot. Your image needs `xdotool`, `scrot` or ImageMagick, and `ffmpeg` for the full feature set. ## The GUI agent loop The canonical loop for a vision-capable agent: 1. **Screenshot** -- capture current screen state 2. **Send to Claude vision** -- describe what to do next 3. **Mouse/keyboard action** -- execute the decision 4. **Screenshot** -- verify the result 5. Repeat All three steps are single API calls. ## Screenshot ```bash POST /v1/sandbox/{sandboxId}/computer/screenshot { "format": "jpeg", "quality": 85 } ``` Response: `Content-Type: image/jpeg` binary body. JPEG is typically 50-100KB -- small enough to include in every agent turn without significant token cost. Also available: ```bash GET /v1/sandbox/{sandboxId}/computer/displays # list available displays GET /v1/sandbox/{sandboxId}/computer/windows # list open windows with position and size ``` ## Mouse control ```bash # Click at position POST /v1/sandbox/{sandboxId}/computer/mouse/click { "x": 640, "y": 400, "button": "left" } # Double click { "x": 640, "y": 400, "button": "left", "double": true } # Right-click (context menu) { "x": 640, "y": 400, "button": "right" } # Move without clicking POST /v1/sandbox/{sandboxId}/computer/mouse/move { "x": 640, "y": 400 } # Scroll POST /v1/sandbox/{sandboxId}/computer/mouse/scroll { "x": 640, "y": 400, "direction": "down", "amount": 3 } # Drag POST /v1/sandbox/{sandboxId}/computer/mouse/drag { "from": { "x": 100, "y": 100 }, "to": { "x": 500, "y": 300 } } ``` ## Keyboard control ```bash # Type text (handles uppercase, symbols, non-ASCII) POST /v1/sandbox/{sandboxId}/computer/keyboard/type { "text": "Hello, world!" } # Key combination POST /v1/sandbox/{sandboxId}/computer/keyboard/key { "key": "ctrl+c" } # Other key examples { "key": "Return" } # Enter { "key": "ctrl+shift+t" } # New tab in browser { "key": "F5" } # Refresh { "key": "alt+F4" } # Close window ``` Key syntax follows xdotool conventions. ## Screen recording Record a session for audit trails, debugging, or visual regression testing: ```bash # Start recording POST /v1/sandbox/{sandboxId}/computer/recording/start { "label": "agent-run-42", "fps": 15 } # → { "recording_id": "rec_..." } # Stop recording POST /v1/sandbox/{sandboxId}/computer/recording/stop { "recording_id": "rec_..." } # List recordings GET /v1/sandbox/{sandboxId}/computer/recordings # Download as MP4 GET /v1/sandbox/{sandboxId}/computer/recordings/{id}/download # Delete DELETE /v1/sandbox/{sandboxId}/computer/recordings/{id} ``` ## VNC browser access For human-in-the-loop observation -- watching what an agent does in real time or intervening manually: Deploy `x11vnc` and NoVNC in your sandbox image: ```bash apt-get install x11vnc novnc ``` NoVNC is then served on port 6080. Access via signed preview URL: ```bash POST /v1/sandbox/instances/{sandboxId}/preview-url { "port": 6080, "expires_in_seconds": 3600 } ``` This lets you watch the agent's screen in a browser without installing any VNC client. ## Capability info ```bash GET /v1/sandbox/{sandboxId}/computer ``` Returns the available operations for this sandbox and whether Computer Use is enabled. ## Image requirements Your sandbox image needs these tools: | Tool | Purpose | Install | |------|---------|---------| | `Xvfb` | Virtual display | `apt-get install xvfb` | | `xfce4` | Desktop environment | `apt-get install xfce4` | | `xdotool` | Mouse and keyboard | `apt-get install xdotool` | | `scrot` or `imagemagick` | Screenshot | `apt-get install scrot` | | `ffmpeg` | Screen recording | `apt-get install ffmpeg` | | `x11vnc` + `novnc` | VNC access (optional) | `apt-get install x11vnc novnc` | | `wmctrl` | Window listing (optional) | `apt-get install wmctrl` | ## Use cases - **Browser testing** -- open Chromium, navigate, click, verify - **Form automation** -- fill forms in apps that don't have APIs - **GUI debugging** -- see exactly what the agent saw when something went wrong (recording) - **Visual regression** -- compare screenshots before and after a change - **Desktop app testing** -- anything that runs in a window ## Recommendations - Use JPEG format for screenshots (smaller, adequate for vision models) - Take a screenshot after every action to verify the result - Use recordings for debugging -- store and review when something unexpected happens - Set `autoDeleteAfterDays: 1` on Computer Use sandboxes to prevent recording storage buildup --- ### Lifecycle Webhooks Source: https://docs.everstack.ai/getting-started/sandboxes/lifecycle-webhooks Receive outgoing notifications when sandbox state changes. #### Metadata ```yaml title: Lifecycle Webhooks description: Receive outgoing notifications when sandbox state changes. icon: Webhook ``` Lifecycle webhooks notify your system when a sandbox's state changes -- started, stopped, archived, deleted, or error. This enables async agent orchestration patterns that don't require polling. > **Note:** These are **outgoing** lifecycle events from Everstack to your system. They are distinct from the incoming trigger webhooks (`/v1/sandbox/webhooks`) that invoke sandbox execution. ## Why webhooks Without lifecycle webhooks, you must poll `GET /v1/sandbox/instances/{id}` to know when a sandbox is ready. With webhooks: 1. Start a sandbox 2. Your endpoint receives `sandbox.started` when it's ready 3. Dispatch work immediately No polling loop. No race conditions. ## Events | Event | When | |-------|------| | `sandbox.started` | Sandbox transitions to `running` | | `sandbox.stopped` | Sandbox transitions to `sleeping` | | `sandbox.archived` | Sandbox transitions to `archived` | | `sandbox.deleted` | Sandbox is terminated | | `sandbox.error` | Sandbox enters `failed` state | ## Register an endpoint ```bash POST /v1/sandbox-webhooks { "url": "https://your-system.com/webhooks/sandbox", "events": ["sandbox.started", "sandbox.stopped"], "secret": "your-signing-secret" } ``` Omit `events` (or pass `["*"]`) to subscribe to all events. ## Payload format ```json { "event": "sandbox.started", "timestamp": "2026-06-01T12:00:00Z", "sandbox_id": "sbx_abc123", "tenant_id": "org_456", "state": "running", "status": "running" } ``` ## Verifying the signature Every delivery includes an `X-Everstack-Signature` header: ``` X-Everstack-Signature: sha256= ``` Verify with your secret: ```python import hmac, hashlib def verify(body: bytes, header: str, secret: str) -> bool: expected = "sha256=" + hmac.new( secret.encode(), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, header) ``` Always verify before trusting the payload. ## Reliability - **At-least-once delivery** -- every event is delivered at least once - **3 retries** with backoff: 0s → 5s → 30s - **Delivery log** -- the last 100 attempts per endpoint are stored (timestamp, HTTP status, duration) - **Test endpoint** -- send a test payload without waiting for a real event ## Managing endpoints ```bash GET /v1/sandbox-webhooks # list endpoints DELETE /v1/sandbox-webhooks/{id} # remove endpoint GET /v1/sandbox-webhooks/{id}/deliveries # delivery log (last 100) POST /v1/sandbox-webhooks/{id}/test # send test payload ``` ## Async orchestration pattern The most common pattern when using webhooks with agents: ```python # 1. Create sandbox and register a webhook (one-time setup) # webhook fires when sandbox reaches "running" # 2. On sandbox.started webhook: def handle_webhook(payload): if payload["event"] == "sandbox.started": sandbox_id = payload["sandbox_id"] # dispatch agent work into this sandbox start_agent_run(sandbox_id) # 3. On sandbox.stopped webhook: elif payload["event"] == "sandbox.stopped": # sandbox went idle -- record completion log_completion(payload["sandbox_id"]) ``` ## Recommendations - Subscribe to `sandbox.started` + `sandbox.error` at minimum - Always verify the signature before processing - Return `2xx` from your handler within 5 seconds -- webhooks time out - Use the test endpoint to verify your handler before deploying - Check the delivery log when events seem missing --- ### Networking Source: https://docs.everstack.ai/getting-started/sandboxes/networking Port exposure, edge access, signed preview URLs, and outbound network controls for sandboxes. #### Metadata ```yaml title: Networking description: Port exposure, edge access, signed preview URLs, and outbound network controls for sandboxes. icon: Wifi ``` Sandbox networking has two sides: - **inbound access** -- you deliberately expose a service running inside the sandbox - **outbound access** -- you control which hosts the sandbox can reach Together, those capabilities let you run edge-style workloads safely. ## Exposing a service at the edge If your sandbox runs a web server, API, dashboard, or preview app, you can expose a listening port and get a public URL. Typical flow: 1. Start a process inside the sandbox, such as `npm run dev`, `python app.py`, or `uvicorn main:app --port 8080`. 2. Detect or manually expose the listening port. 3. Open the generated URL to test, demo, or share the service. This works well for: - preview environments - QA and product review links - internal tools and temporary dashboards - customer-specific demos - isolated callback handlers ## Port exposure The **Ports** tab in the admin UI is the runtime control surface for edge exposure. You can: - see detected listening ports - expose a port over TCP - copy the generated public URL - generate a signed shareable URL (see below) - open the URL directly in a browser - close the port again when you are done Only expose the ports you actually need. Everything else remains private inside the sandbox. ## Signed preview URLs Standard preview URLs require an `x-everstack-preview-token` header. This works for programmatic callers (the SDK sets it automatically) but not for: - shareable links you send via chat or email - iframe embeds - third-party tools that can't set custom headers **Signed preview URLs** solve this. The auth token is embedded in the URL itself, so no headers are needed. Generate one via the API or the **Share** button in the Ports tab: ```bash POST /v1/sandbox/instances/{sandboxId}/preview-url { "port": 3000, "expires_in_seconds": 3600 } ``` Response: ```json { "url": "https://xK3p9q2A-3000.preview.everstack.ai?_preview_token=...", "expires_at": "2026-06-01T13:00:00Z" } ``` - Expiry: 1 second to 24 hours (default 1 hour) - The token is HMAC-SHA256 signed -- tamper-proof - A short-lived browser cookie is set after the first validation so subsequent same-tab requests (JS imports, images) don't re-verify on every hit ## Outbound network policy Every sandbox can have an egress policy set at creation time: ### Standard modes - `allow` (default) -- all outbound traffic permitted - `whitelist` -- only explicitly approved hostnames allowed - `deny` -- most outbound blocked (allows package registries by default) ### Block-all mode with CIDR allow-list For complete egress isolation with surgical exceptions: ```json { "networkBlockAll": true, "networkAllowCidrs": ["10.0.0.0/8", "192.168.1.100/32"] } ``` Always-allowed even with `networkBlockAll: true`: loopback (127.0.0.0/8), link-local (169.254.0.0/16), and DNS (port 53). These are needed for the sandbox-agent itself to function. ### When to use block-all - sandboxed code execution (prevent data exfiltration) - data processing pipelines with sensitive inputs - enterprise compliance requirements - any workload where the exact egress surface must be declared ## Tailscale VPN For access to private services (databases, internal APIs, self-hosted LLMs) by IP, join the sandbox to your Tailnet at creation: ```json { "tailscaleAuthKey": "tskey-auth-xxxx" } ``` The sandbox runs `tailscale up` at boot and gets a Tailscale IP. Use ephemeral auth keys so the device auto-removes from your Tailnet when the sandbox is destroyed. ## External storage mounts Mount S3, Cloudflare R2, GCS, or Azure Blob as local directories inside the sandbox: ```json { "mounts": [ { "type": "s3", "bucket": "my-models", "mountPath": "/models", "endpoint": "https://xxx.r2.cloudflarestorage.com" } ] } ``` Credentials are passed via environment variables (`AWS_ACCESS_KEY_ID`, etc.) on the same `CreateSandbox` request. The mount appears as a normal directory -- existing tools and scripts work without modification. FUSE mounts are optimized for large sequential reads (model weights, datasets). They are slower than local disk and not suitable for random-access workloads like databases. ## Observing egress The **Network** tab gives you visibility into DNS egress activity so you can see: - which domains the sandbox tried to reach - whether the request was allowed or blocked - the query type and timestamp This is especially useful for debugging webhook handlers, scheduled jobs, agents, and customer-specific integrations. ## Edge examples ### Shareable preview link Run a React app, expose port `3000`, click **Share** in the Ports tab. Send the signed URL to a stakeholder -- they open it in a browser with no headers or extensions required. ### Isolated API callback handler Run a small API service inside the sandbox, expose a single port, and let a third-party system call it while keeping the rest of the environment private. ### Air-gapped data processing Set `networkBlockAll: true` and allow only your data warehouse IP (`networkAllowCidrs: ["10.0.1.50/32"]`). The sandbox can reach the warehouse but nothing else -- no accidental exfiltration. ### ML inference with private model weights Mount your S3 bucket at `/models`, enable Tailscale to reach your inference endpoint, and block all other egress. The sandbox reads model weights from S3 and sends results only to your private service. ## Recommendations - Prefer `whitelist` mode for real workloads; use `networkBlockAll` when you need full control. - Expose the smallest number of ports possible. - Use signed preview URLs for any link you share externally. - Terminate preview sandboxes after use, or set `autoDeleteAfterDays: 1` to auto-clean. - Check egress events when debugging blocked outbound calls. - Use ephemeral Tailscale auth keys so devices auto-remove on sandbox destroy. --- ### Sandboxes Overview Source: https://docs.everstack.ai/getting-started/sandboxes/overview Isolated runtimes for code, jobs, apps, agents, and automations. #### Metadata ```yaml title: Sandboxes Overview description: Isolated runtimes for code, jobs, apps, agents, and automations. icon: Container ``` Sandboxes are isolated runtimes you can create on demand to run code, host temporary services, execute scheduled jobs, receive webhooks, and give agents a safe place to work. The important framing is this: agents are one consumer of sandboxes, not the definition of sandboxes. ## What a sandbox is A sandbox is a disposable or semi-persistent compute environment with its own: - container image, template, or named snapshot - CPU, memory, disk, and timeout limits - shell access and filesystem - outbound network policy with CIDR-level egress control - optional SSH access and temporary SSH tokens - exposed ports with signed shareable preview URLs - optional full desktop (Xvfb + XFCE4) for Computer Use - optional Tailscale VPN to join your private network - optional external storage mounts (S3, R2, GCS, Azure) - scheduled crons, inbound webhooks, and outgoing lifecycle events In practice, that makes a sandbox feel like a lightweight, isolated dev box or worker. ## Why sandboxes exist Sandboxes let you run untrusted, experimental, tenant-scoped, or transient workloads without giving them access to your host machine or main application runtime. Use them when you need: - safe code execution for AI agents or users - per-task or per-customer isolation - temporary app hosting for previews or QA - event-driven or scheduled automation without provisioning a full service - a controlled place to debug, inspect logs, and terminate cleanly - IDE-quality code intelligence (LSP diagnostics and symbols) inside the runtime - GUI automation for browser testing or visual agent workflows ## Product narrative Think of sandboxes as a small compute control plane built into Everstack. - **Overview** shows fleet health, utilization, and capacity. - **Instances** gives lifecycle control over each runtime. - **Snapshots** lets you save and reuse pre-built environments instantly. - **Volumes** gives persistent shared storage across sandbox restarts and parallel runs. - **Shell**, **Logs**, and **Metrics** make every sandbox debuggable. - **Events** gives you an audit trail of what happened. - **Ports** pushes a service to the edge with a public URL; signed URLs let you share them. - **Computer Use** gives agents screenshot and GUI control. - **LSP** gives agents structured code diagnostics without parsing terminal output. - **Crons** turns a sandbox into a scheduled worker. - **Webhooks** turns it into an HTTP-triggered worker. - **Lifecycle Webhooks** notify your system when sandbox state changes. - **Network** makes outbound policy and DNS activity visible; block-all mode isolates completely. ## The edge story Sandboxes are useful at the edge because they can run a process and expose only the surface you choose. For example, you can: - start a Next.js, FastAPI, or Express app inside a sandbox - expose port `3000` or `8080` - generate a signed preview URL to share with your team (no auth headers needed) - lock outbound traffic to specific CIDRs with `networkBlockAll` - inspect all DNS egress events and close access when you are done ## Examples ### Preview app for QA Create a Node.js sandbox, run your app, expose port `3000`, and generate a signed preview URL to share with your team. The URL is valid for 1 hour (configurable) and embeds auth in the link itself, so no custom headers are needed for iframes or link sharing. When QA is done, stop or terminate the sandbox. ### Scheduled data sync Create a Python sandbox, install your dependencies, and add a cron to pull data from an API every hour. Keep network access whitelisted to only the required domains. ### Webhook-driven worker Create a sandbox that accepts incoming webhooks, verifies the signature, and runs a command such as `python process_event.py`. This is a good fit for GitHub, Stripe, or internal event handlers. ### Safe agent execution Run an agent with sandbox access so tool calls, code execution, file writes, and shell commands stay inside the sandbox boundary instead of your host environment. Use labels to tag sandboxes by run ID or agent ID for easy filtering. ### Coding agent with IDE intelligence Run a coding agent in a sandbox with LSP enabled. The agent can call `sandbox_lsp_diagnostics` to get structured error lists, `sandbox_lsp_symbols` to understand file structure, and `sandbox_screenshot` to verify GUI output -- all as native tool calls. ### Reproducible bug investigation Spin up a sandbox with the same image, dependencies, and limits as production-adjacent workloads. Use shell, logs, metrics, and events to reproduce the issue in isolation. ### Customer-isolated compute Use one sandbox per tenant workflow for stronger isolation. This works well for file processing, report generation, or customer-specific connectors. Use labels (`{ "customer_id": "cust_123" }`) to group sandboxes and lifecycle webhooks to receive alerts when they finish. ### Long-running agent with cost control Set `autoArchiveAfterDays: 7` so stopped sandboxes archive automatically after a week (VM terminated, workspace preserved). Set `autoDeleteAfterDays: 30` so old archived sandboxes clean up. Fire-and-forget agent runs can use `autoDeleteAfterDays: 0` to self-destruct on stop. ## Lifecycle model Sandboxes have an extended lifecycle with archive support: | State | Description | |-------|-------------| | `running` | Active and reachable | | `sleeping` | VM stopped, workspace preserved. Can be revived. | | `archived` | VM terminated, workspace in cold storage. Restorable. | | `terminated` | Permanently deleted | - **Stop** → `sleeping`. Workspace is preserved. Revivable. - **Revive** → back to `running` from `sleeping`. - **Auto-archive** → `archived` after `autoArchiveAfterDays` (default 7). Restorable via `/restore`. - **Restore** → back to `running` from `archived`. - **Auto-delete** → `terminated` after `autoDeleteAfterDays` (default never). - **Terminate** → permanently destroys the sandbox. ## Creation options When creating a sandbox, you typically choose: - a **template** (Node.js, Python, Go, Rust, Ubuntu) or **snapshot** (your pre-built environment) - a custom Docker image or declarative build spec when you need your own runtime - machine sizing for CPU, memory, and disk - timeout and retention behavior - network mode: `allow`, `whitelist`, `deny`, or `networkBlockAll` with specific CIDRs - optional SSH access and labels for tagging - optional Computer Use (`computerUse: true`) for GUI automation - optional Tailscale VPN (`tailscaleAuthKey`) for private network access - optional storage mounts for S3, R2, GCS, or Azure Blob ## Snapshots and volumes **Snapshots** are named, reusable environment templates. Create one from a public image and reference it by name when creating sandboxes. The `everstack-python` and `everstack-node` catalog images include pre-installed LSP servers. **Volumes** are persistent FUSE-backed storage shared across sandbox restarts and parallel runs. Use them for pip/npm caches, datasets, or shared artifacts. ## Sandboxes and functions Use sandboxes when you need a live environment with shell access, stateful inspection, port exposure, or long-running workflows. Use functions when you want a narrower, reusable action with a clearer contract. Read [Functions vs Sandboxes](https://docs.everstack.ai/getting-started/functions-vs-sandboxes) for the full comparison. ## Next steps - Use [Automation](https://docs.everstack.ai/getting-started/sandboxes/automation) to design cron-driven and webhook-driven workers. - Use [Networking](https://docs.everstack.ai/getting-started/sandboxes/networking) to expose ports, use signed URLs, and understand egress policy. - Use [Shell & Files](https://docs.everstack.ai/getting-started/sandboxes/shell-and-files) to work interactively inside a sandbox. - Use the [Sandbox API](https://docs.everstack.ai/api-reference/sandbox) to automate lifecycle, snapshots, volumes, ports, events, and more. --- ### Shell & Files Source: https://docs.everstack.ai/getting-started/sandboxes/shell-and-files Terminal access, filesystems, uploads, and direct debugging inside sandboxes. #### Metadata ```yaml title: Shell & Files description: Terminal access, filesystems, uploads, and direct debugging inside sandboxes. icon: Terminal ``` One of the biggest advantages of sandboxes is that they are not black boxes. You can open a shell, inspect files, stream logs, watch metrics, and understand exactly what the runtime is doing. ## Shell access Use shell access when you want to work inside a running sandbox like a lightweight remote machine. Common tasks: - inspect the working directory - install or verify dependencies - run scripts manually - reproduce failures interactively - inspect environment-specific behavior This is useful for agents, but it is just as useful for human operators debugging a preview app, data pipeline, or webhook processor. ## SSH access Sandboxes can optionally enable SSH so you can connect using your own terminal. This is most useful when you want: - a familiar local terminal workflow - direct troubleshooting for a long-running sandbox - controlled access for developers or operators Keep SSH disabled unless you actually need it. ## Files and uploads Sandboxes support working with files as part of the runtime. You can: - upload files into the sandbox workflow - browse files through the API - search within sandbox files - download outputs and generated artifacts - use files as inputs for scripts, agents, or preview apps Good examples include CSV processing, report generation, code patch review, document conversion, and temporary build artifacts. ## Logs, metrics, and events Interactive access works best together with the other sandbox views: - `Logs` shows process output in real time - `Metrics` shows CPU, memory, network, and execution history - `Events` shows lifecycle actions and runtime activity Taken together, these make a sandbox feel like a debuggable runtime instead of a fire-and-forget job. ## Examples ### Debug a failing cron job Open a shell in the same sandbox the cron uses, run the command manually, inspect files, and compare logs with runtime metrics. ### Validate generated code safely Upload or clone code into a sandbox, run tests or build commands, inspect outputs, and discard the environment when finished. ### Investigate a customer-specific issue Create a sandbox with the same dependencies and limits as the customer workflow, reproduce the issue, and debug without touching shared infrastructure. --- ### Snapshots & Volumes Source: https://docs.everstack.ai/getting-started/sandboxes/snapshots Pre-built environments and persistent storage for sandboxes. #### Metadata ```yaml title: Snapshots & Volumes description: Pre-built environments and persistent storage for sandboxes. icon: Database ``` Two features that fundamentally change how you think about sandbox startup cost and statefulness: - **Snapshots** -- save a pre-built environment once, spin up identical sandboxes instantly - **Volumes** -- persistent storage that survives sandbox restarts and is shareable across parallel runs ## Snapshots A snapshot is a named environment template. Instead of reinstalling dependencies on every sandbox creation (which can take minutes), you build once and reference by name. ### Create from a public image ```bash POST /v1/snapshots { "name": "my-python-env", "image": "ghcr.io/everstacklabs/sandbox:python" } ``` The snapshot is immediately `active`. Cold start for sandboxes created from it is under 3 seconds. ### Create from an existing sandbox ```bash POST /v1/snapshots { "name": "my-custom-env", "from_sandbox_id": "sbx_abc123" } ``` This captures the sandbox's base image as the snapshot reference. Full filesystem snapshotting (isolated runtime-level) is coming in a follow-up release. ### Use a snapshot when creating sandboxes ```bash POST /v1/sandbox { "snapshotId": "snap_def456" } ``` The sandbox starts from the snapshot's base image. ### Catalog images Everstack maintains pre-built catalog images rebuilt weekly: | Image | Contents | |-------|----------| | `everstack-base` | Debian bookworm-slim, git, curl, wget, tmux, ripgrep, python3 | | `everstack-python` | Base + pylsp, pylint, numpy, pandas, requests, black, mypy | | `everstack-node` | Base + Node.js 20, pnpm, typescript, typescript-language-server | | `everstack-fullstack` | Python + Node + both LSP servers | Reference them by image name in `CreateSnapshot` or directly as the `image` field on `CreateSandbox`. ### Snapshot lifecycle Snapshots have a `state` field: `pending` → `active` | `error`. Inactive after 2 weeks of no use (reactivated on next use, not deleted). ### Managing snapshots ```bash GET /v1/snapshots # list all snapshots GET /v1/snapshots/{id} # get a specific snapshot DELETE /v1/snapshots/{id} # delete a snapshot ``` ## Declarative image builder Build a sandbox environment from a spec in code, without needing a Docker registry: ```json POST /v1/images/build { "spec": { "base": "debian:bookworm-slim", "apt": ["python3", "git"], "pip": ["numpy", "pandas", "fastapi"], "run": ["pip install -r requirements.txt"], "env": { "PYTHONPATH": "/app" }, "workdir": "/app" } } ``` The same spec within 24 hours returns the cached result instantly (`cached: true`). Use the returned `imageRef` as the `image` field on `CreateSandbox`. > **Preview:** Phase 1 maps specs to the nearest catalog image. Custom package installation via Kaniko is in Phase 2. --- ## Volumes Volumes are persistent, FUSE-backed storage units that live independently of any sandbox. They are backed by S3-compatible object storage. ### Create a volume ```bash POST /v1/volumes { "name": "pip-cache" } ``` ### List and delete volumes ```bash GET /v1/volumes # list volumes DELETE /v1/volumes/{id} # delete a volume ``` ### Attach at sandbox creation Attach one or more volumes via the `mounts` field: ```json { "mounts": [ { "type": "s3", "bucket": "vol_pip_cache", "mountPath": "/cache/pip" } ] } ``` The volume is FUSE-mounted inside the sandbox at the specified path before the user shell starts. It appears as a regular directory. ### Subpath isolation Multiple sandboxes can share the same volume at different subpaths: ```json { "mounts": [ { "type": "s3", "bucket": "shared-data", "mountPath": "/data", "subpath": "tenant-42" } ] } ``` Each sandbox sees only its `subpath` prefix -- no cross-sandbox contamination. ### Performance FUSE mounts are optimized for large sequential reads and writes (model weights, datasets, build artifacts). They are slower than local disk for random-access workloads. Do not use volumes as database storage. ### Use cases | Use case | Volume name | Mount path | |----------|-------------|------------| | Shared pip cache | `pip-cache` | `/root/.cache/pip` | | Shared npm cache | `npm-cache` | `/root/.npm` | | ML dataset | `training-data` | `/data` | | Build artifacts | `build-artifacts` | `/artifacts` | ## Recommendations - Use catalog snapshots for the fastest cold start - Use volumes for caches -- `pip install` from a warm cache is 10x faster - Set `autoArchiveAfterDays` on sandboxes that use volumes so the volume outlives the compute - Create snapshots from sandboxes that have run `pip install` or `npm install` to bake dependencies in --- ### Agent Artifacts Source: https://docs.everstack.ai/getting-started/storage/agent-artifacts How agents store and retrieve files during sessions. #### Metadata ```yaml title: Agent Artifacts description: How agents store and retrieve files during sessions. icon: Bot ``` Agents can read and write files through three built-in storage tools. These tools use the tenant's default storage configuration and presigned URLs, so agents never handle raw bucket credentials. ## Available tools ### upload_artifact Stores a file in the tenant's bucket with purpose `ARTIFACT`. The tool accepts: - **content** -- the file body, either as base64-encoded binary or plain text - **filename** -- the desired filename - **content_type** -- the MIME type (e.g. `text/plain`, `application/json`, `image/png`) The platform encodes the content, uploads it to the bucket, records metadata (size, checksum, content type), and returns confirmation with the stored object key. Use this when an agent generates a report, writes code output, produces a chart, or creates any file that should persist beyond the current message. ### download_artifact Retrieves a presigned download URL for a previously stored artifact. The tool accepts: - **key** -- the object key returned by `upload_artifact` or discovered through `list_artifacts` The platform returns a presigned GET URL with a 15-minute expiry. The agent can include this URL in its response so the user can download the file directly from the bucket. Use this when an agent needs to reference or share a file it created earlier in the session, or when a user asks for a file the agent produced in a previous turn. ### list_artifacts Queries all artifacts stored for the current tenant. The tool returns a list of objects with their keys, filenames, sizes, and content types. This lets an agent discover what files already exist before deciding whether to create new ones or reference existing ones. Use this when an agent needs to check whether a file already exists, enumerate available artifacts for a user, or decide which previous outputs to build on. ## How it works end to end A typical artifact flow during an agent session looks like this: 1. The agent performs some work -- runs code, analyzes data, generates a document. 2. The agent calls `upload_artifact` with the output content, a filename, and the appropriate content type. 3. The platform uploads the file to the tenant's default storage bucket, computes a SHA256 checksum, and records metadata. 4. The agent receives the stored object key as confirmation. 5. The agent calls `download_artifact` to get a presigned URL and includes it in the response to the user. 6. The user clicks the link and downloads the file directly from the bucket. The link expires after 15 minutes. The user never needs to configure anything. The platform handles signing, quota checks, and metadata tracking transparently. ## What gets stored Agent artifacts are stored with: - **Purpose** set to `ARTIFACT`, which distinguishes them from datasets, manual uploads, eval results, and voice recordings - **Key** prefixed with tenant and session identifiers for easy filtering - **SHA256 checksum** computed at upload time for integrity verification - **Back-reference** to the agent session, so you can trace which session produced which files You can browse agent artifacts in the admin UI's Objects tab by filtering on the `ARTIFACT` purpose. ## Quota considerations Agent artifact uploads count against the tenant's storage quotas (total bytes and object count). If an upload would exceed either limit, the tool call fails and the agent receives a quota error. This means agents cannot fill a tenant's storage unboundedly. Set quotas that match your expected artifact volume and monitor usage through the admin UI's Usage tab. ## Practical patterns ### Report generation An agent runs a data analysis workflow, formats the results as a PDF or CSV, and uploads it with `upload_artifact`. The agent includes the download link in its response so the user can grab the file immediately. ### Iterative file building An agent uses `list_artifacts` to check what files already exist from earlier turns, downloads a previous version with `download_artifact`, modifies it, and uploads the updated version. This works well for multi-turn document editing. ### Code output persistence An agent writes code to a sandbox, runs it, captures the output (logs, charts, exported files), and stores each output as an artifact. The user gets a set of download links at the end of the conversation. ### Cross-session artifact access Because artifacts are stored by tenant, not by session, an agent in a later session can use `list_artifacts` to discover files produced by a previous session. This lets agents build on prior work without the user re-uploading anything. ## Recommendations - Set content types accurately. A file uploaded as `application/octet-stream` when it is actually `text/csv` will confuse downstream consumers and the admin UI's preview behavior. - Use descriptive filenames. The filename is displayed in the admin UI and returned to users in download links. - Monitor artifact quota usage for tenants with heavy agent workloads. Agents that generate many files per session can consume quota quickly. - Use `list_artifacts` before creating duplicate files. An agent that checks existing artifacts first avoids unnecessary storage consumption. - Presigned download URLs expire after 15 minutes. If a user needs to access a file later, the agent (or the user through the admin UI) can generate a fresh URL at any time. --- ### Storage Backends Source: https://docs.everstack.ai/getting-started/storage/backends Using Everstack Storage or configuring S3, R2, MinIO, and GCS storage providers. #### Metadata ```yaml title: Storage Backends description: Using Everstack Storage or configuring S3, R2, MinIO, and GCS storage providers. icon: Server ``` Everstack supports a system-managed cloud option and four customer-managed, S3-compatible backends. Each option uses the same object storage API, so application code, agent tools, and upload flows do not need provider-specific changes. When managed storage is enabled for an Everstack Cloud deployment, each tenant receives one stable **Everstack Storage** connection. Everstack owns its physical storage cell, bucket, tenant prefix, and credentials. Those placement details are not returned by the tenant API or shown in the admin UI. ## Supported providers | Provider | When to use it | | --- | --- | | **Everstack Storage** | Your Everstack Cloud deployment provides storage and you do not want to supply object-store credentials. This connection is created and maintained by Everstack. | | **AWS S3** | You already run on AWS or need the broadest ecosystem of tooling and regions. | | **Cloudflare R2** | You want zero egress fees and your workloads are latency-tolerant to Cloudflare's edge. | | **MinIO** | You want a self-hosted option, on-prem storage, or a local dev setup. | | **Google Cloud Storage** | You already run on GCP and want to keep everything in one cloud. | The four customer-managed providers expose the same capabilities through the platform. Everstack Storage uses the same logical API while keeping its physical backend private. ## Customer-managed configuration fields When you bring your own backend, the storage configuration requires: - **Provider** -- one of `S3`, `R2`, `MINIO`, or `GCS` - **Endpoint** -- the S3-compatible endpoint URL (e.g. `https://s3.us-east-1.amazonaws.com`, `https://.r2.cloudflarestorage.com`) - **Region** -- the bucket region (use `auto` for R2) - **Bucket** -- the target bucket name - **Access key** -- your access key ID - **Secret key** -- your secret access key (write-only, never returned by the API after creation) Everstack Storage does not accept these fields. Its connection is system-managed, and attempts to create, edit, or delete it through the tenant API are rejected. ## AWS S3 Use the standard S3 endpoint for your region: ``` Endpoint: https://s3..amazonaws.com Region: us-east-1 Bucket: my-everstack-bucket ``` Create an IAM user or role with `s3:PutObject`, `s3:GetObject`, `s3:DeleteObject`, and `s3:ListBucket` permissions scoped to the bucket. Avoid using root credentials. S3 uses virtual-hosted-style addressing by default. No special flags are needed. ## Cloudflare R2 R2 uses S3-compatible APIs with a few differences: ``` Endpoint: https://.r2.cloudflarestorage.com Region: auto Bucket: my-everstack-bucket ``` R2 always uses `auto` as the region. The platform automatically enables path-style addressing, which R2 requires. Generate an R2 API token in the Cloudflare dashboard with read and write permissions on the target bucket. R2 has no egress fees, which makes it a strong default for workloads that serve many downloads, like agent artifacts and shared reports. ## MinIO MinIO is a self-hosted S3-compatible server. It works well for local development, air-gapped environments, and on-prem deployments. ``` Endpoint: https://private.example Region: us-east-1 Bucket: everstack ``` The platform automatically enables path-style addressing for MinIO configurations. MinIO does not support virtual-hosted-style by default. Create a service account or access key pair in the MinIO console. Scope permissions to the target bucket. For local development, you can run MinIO in Docker: ```bash docker run -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=minioadmin \ -e MINIO_ROOT_PASSWORD=minioadmin \ minio/minio server /data --console-address ":9001" ``` Then create a bucket and use `minioadmin` / `minioadmin` as the access and secret key during development. ## Google Cloud Storage GCS exposes an S3-compatible endpoint through its XML API: ``` Endpoint: https://storage.googleapis.com Region: auto Bucket: my-everstack-bucket ``` Create an HMAC key for a service account with `Storage Object Admin` permissions on the bucket. Use the HMAC access ID and secret as the access key and secret key in the configuration. ## Multiple configurations Each tenant can have multiple storage configurations. This is useful when you need: - separate buckets for different workloads (e.g. one for datasets, one for artifacts) - a secondary bucket in another region for compliance or redundancy - a MinIO backend for development alongside an S3 backend for production One configuration is always marked as the default. Agent tools and platform internals use the default configuration automatically. When managed storage is enabled, Everstack Storage is the immutable default. Customer-managed configurations can coexist with it, but cannot replace it as the default. In deployments without managed storage, you can switch the customer-managed default from the admin UI or through the `UpdateStorageConfig` RPC. ## Creating a configuration ### Through the admin UI Everstack Storage is provisioned by the cloud deployment and cannot be added manually. To add a customer-managed backend: 1. Open **Storage** in the sidebar, then go to the **Configurations** tab. 2. Click **Add Configuration**. 3. Select the provider and fill in endpoint, region, bucket, access key, and secret key. 4. Save. The platform will validate connectivity before persisting the configuration. ### Through the API Use the `ConfigureStorage` RPC. See the [Storage API reference](https://docs.everstack.ai/getting-started/storage/overview) for the full request schema. ## Security notes - Secret keys are write-only. Once saved, the API never returns them in responses. - Everstack Storage responses do not contain its physical endpoint, region, bucket, prefix, or platform credentials. - Use scoped credentials with the minimum permissions needed (put, get, delete, list on a single bucket). - Rotate access keys periodically and update the configuration through the admin UI or `UpdateStorageConfig` RPC. - For production deployments, prefer IAM roles or service account keys over long-lived static credentials when your provider supports it. ## Recommendations - Use Everstack Storage when it is enabled for your cloud tenant and you do not need to bring your own bucket. - For deployments without managed storage, start with a single default configuration for your primary provider. - Use R2 if egress costs are a concern. - Use MinIO for local development and testing so you do not incur cloud costs during iteration. - Test connectivity from the admin UI before relying on the configuration in agent workflows. - Keep bucket names short and descriptive. The platform prefixes object keys with tenant and purpose metadata. --- ### Storage Overview Source: https://docs.everstack.ai/getting-started/storage/overview S3-compatible object storage for artifacts, files, and agent-generated content. #### Metadata ```yaml title: Storage Overview description: S3-compatible object storage for artifacts, files, and agent-generated content. icon: Archive ``` Storage gives every tenant a managed object storage layer backed by any S3-compatible provider. Agents, users, and automations can upload files, download them through presigned URLs, and query usage without ever touching raw cloud credentials. The important framing is this: storage is not just for agents. It is a general-purpose file layer that agents, evaluations, datasets, and your own application code can all use. ## What storage does Storage provides: - an abstraction over S3, Cloudflare R2, MinIO, and Google Cloud Storage - presigned URLs for secure, time-limited uploads and downloads - a direct upload proxy for files up to 100 MB - per-object metadata tracking including filename, content type, size, and SHA256 checksum - quota enforcement per tenant (total bytes and object count) - soft deletes with reference tracking back to datasets, agent sessions, and other resources - CQRS event sourcing so every state change is auditable In practice, that means you configure a bucket once and let the platform handle signing, validation, quota checks, and lifecycle. ## Why storage exists Running AI workloads produces files constantly. Agents generate code, logs, reports, and intermediate artifacts. Evaluations produce result sets. Datasets need a home before they reach a model. Voice sessions produce audio. Without a first-class storage layer, every one of those use cases ends up with a bespoke upload path, its own credential management, and no unified visibility. Storage solves that by giving you: - one configuration surface for bucket credentials - one quota model across all file types - one set of presigned URLs that work the same way regardless of the underlying provider - one admin UI to browse, inspect, and manage objects ## Object purposes Every stored object has a purpose that describes why it exists: - `DATASET` -- files backing a dataset resource - `ARTIFACT` -- files produced by agent tool calls - `UPLOAD` -- files uploaded manually through the UI or API - `EVAL_RESULT` -- output from evaluation runs - `VOICE_AUDIO` -- audio recordings from voice sessions Purposes drive filtering in the admin UI and let you build retention or cleanup policies around specific categories. ## How it fits together Storage connects to several other parts of the platform: - **Agents** use the `upload_artifact`, `download_artifact`, and `list_artifacts` tools to read and write files during sessions. - **Datasets** reference stored objects so training and eval data lives in your own bucket. - **Evaluations** write result files back to storage with the `EVAL_RESULT` purpose. - **Voice** persists audio recordings for playback and transcription review. - **Admin UI** provides a hierarchical folder browser, usage dashboard, and configuration manager. ## Configuration model Each tenant can have multiple storage configurations pointing to different buckets or providers. One configuration is marked as the default and is used automatically by agent tools and platform internals. A configuration captures: - the provider (S3, R2, MinIO, or GCS) - endpoint, region, and bucket name - access key and secret key (secret key is write-only and never returned by the API) - provider-specific settings like path-style addressing for MinIO and R2 You manage configurations through the admin UI or the `ConfigureStorage`, `UpdateStorageConfig`, and `DeleteStorageConfig` RPCs. ## Quota enforcement Every tenant has storage quotas for total bytes and total object count. The platform checks quotas before every upload and rejects requests that would exceed the limit. You can monitor current usage through the admin UI's Usage tab or the `GetStorageUsage` RPC. ## The upload and download flow There are two ways to get files into storage: 1. **Presigned upload** -- request a presigned PUT URL, upload directly to the bucket from a client or agent, then call `CompleteUpload` to finalize metadata and quota accounting. 2. **Direct proxy** -- POST the file to `/api/v1/storage/upload` (up to 100 MB, multipart). The platform streams it to the bucket and handles metadata in one step. Downloads always go through presigned GET URLs with a configurable expiry. Agent artifact downloads default to 15 minutes. ## Admin UI The Storage section in the admin dashboard has three tabs: - **Configurations** -- add, edit, and remove backend configurations. Test connectivity before saving. - **Objects** -- browse stored files in a hierarchical folder view. Inspect metadata, copy download URLs, or delete objects. - **Usage** -- see current quota consumption, object counts, and storage trends. ## Examples ### Dataset storage for evaluations Upload a CSV dataset through the UI, reference it in an evaluation run, and let the eval framework write results back to the same bucket under the `EVAL_RESULT` purpose. ### Agent-generated reports An agent runs a data analysis task, writes the output to storage using `upload_artifact`, and returns a presigned download link in the conversation. The user clicks the link and gets the file immediately. ### Multi-region backup Configure two storage backends pointing to buckets in different regions. Use the default for everyday operations and the secondary for archival or compliance copies. ### Temporary file sharing Upload a file through the direct proxy, generate a presigned download URL, and share it with a collaborator. The URL expires after the configured window. ## Next steps - Use [Backends](https://docs.everstack.ai/getting-started/storage/backends) to configure your S3, R2, MinIO, or GCS provider. - Use [Uploads and Downloads](https://docs.everstack.ai/getting-started/storage/uploads-and-downloads) to understand presigned URLs and the direct upload proxy. - Use [Agent Artifacts](https://docs.everstack.ai/getting-started/storage/agent-artifacts) to learn how agents interact with storage during sessions. - Use the [Storage API](https://docs.everstack.ai/getting-started/storage/overview) to automate configuration, uploads, and object management. --- ### Uploads and Downloads Source: https://docs.everstack.ai/getting-started/storage/uploads-and-downloads Presigned URLs, direct uploads, and object management. #### Metadata ```yaml title: Uploads and Downloads description: Presigned URLs, direct uploads, and object management. icon: Upload ``` Everstack provides two ways to upload files and one way to download them. Both paths handle metadata tracking, quota enforcement, and checksum validation automatically. ## Presigned uploads Presigned uploads are the recommended path for large files and browser-based uploads. The flow has three steps: 1. **Request a presigned URL**: call `GetPresignedUploadURL` with the filename, content type, expected size, and an idempotency key. The platform reserves quota before returning a time-limited PUT URL. 2. **Upload directly**: send the file to the presigned URL using an HTTP PUT. The request goes straight to the bucket, not through the Everstack server. 3. **Complete the upload**: call `CompleteUpload` with the returned object ID. Everstack streams the provider object, verifies its exact size, computes SHA-256, and only then publishes it and commits the reservation as usage. This pattern keeps large file transfers off the application server and lets you upload from browsers, CLIs, or agent runtimes without proxying bytes through the platform. ### When to use presigned uploads - Files larger than a few megabytes - Browser-based uploads where you want progress indicators - Environments where the client can make direct HTTP requests to the bucket endpoint ## Direct upload proxy For smaller files or environments where direct bucket access is inconvenient, the platform provides a proxy endpoint: ``` POST /api/v1/storage/upload ``` This accepts multipart form data with a maximum file size of 100 MB. The platform reserves quota, streams the file to the configured bucket, reads it back for size and SHA-256 verification, and publishes it in one request. Send `Idempotency-Key` as an HTTP header when you need safe request replay. Older clients remain compatible and receive a generated `idempotencyKey` in the JSON response. ### When to use the direct proxy - Files under 100 MB where simplicity matters more than throughput - Environments behind restrictive firewalls that cannot reach bucket endpoints directly - Quick uploads from scripts or internal tools ## Downloads All downloads go through presigned GET URLs. Call `GetPresignedDownloadURL` with the object key, and the platform returns a time-limited URL that the client can use to fetch the file directly from the bucket. Presigned download URLs have a configurable expiry. Agent artifact downloads default to 15 minutes. Once expired, the URL stops working and you need to request a new one. This approach keeps download traffic off the application server and gives you fine-grained control over access duration. ## Object metadata Every stored object tracks: - **Key**: the full path in the bucket, typically prefixed with tenant and purpose segments - **Filename**: the original filename provided at upload time - **Content type**: the MIME type (e.g. `application/pdf`, `text/csv`) - **Size**: the file size in bytes - **SHA256 checksum**: computed at upload time for integrity verification - **Purpose**: one of `DATASET`, `ARTIFACT`, `UPLOAD`, `EVAL_RESULT`, or `VOICE_AUDIO` Metadata is stored in the platform database alongside a reference to the bucket object. This lets you query, filter, and browse objects without listing the bucket directly. ## Quota enforcement Every upload reserves the expected bytes against the tenant's resolved plan limit before exposing an upload capability or writing through the proxy. Current usage reports committed and reserved bytes separately, plus committed and reserved object counts. If an upload would exceed either limit, the request is rejected with a quota error. You can check current usage through the admin UI's Usage tab or the `GetStorageUsage` RPC. ## Object management ### Listing objects Use `ListObjects` to query stored objects. You can filter by prefix (for folder-style browsing), purpose, or other metadata fields. The admin UI's Objects tab uses this under the hood to render the hierarchical folder browser. ### Deleting objects Use `DeleteObject` to remove a stored object. Everstack records `deleting` before contacting the provider. Provider failures keep usage charged and schedule a visible retry. Only a confirmed delete or provider `not_found` result moves the object to `deleted` and releases its accounting. The platform also tracks back-references from objects to the resources that use them (datasets, agent sessions, evaluation runs). This lets you understand dependencies before deleting. ### Browsing in the admin UI The Objects tab provides a folder-style browser built on key prefixes. You can: - navigate the folder hierarchy - inspect metadata for any object - copy a presigned download URL - delete individual objects ## Error handling Common errors you may encounter: - **Quota exceeded**: the tenant's committed and reserved bytes leave insufficient capacity. Delete unused objects or request a quota increase. - **Object not found**: the object ID is not ready or no longer exists. Check `GetUploadStatus` for its lifecycle state. - **Presigned URL expired**: the time window has passed. Initiate a new upload request. - **Upload too large**: the direct proxy rejects files over 100 MB. Use presigned uploads for larger files. ## Recommendations - Use presigned uploads for anything over a few megabytes. - Call `CompleteUpload` promptly after the presigned PUT succeeds. Until verification completes, the provider bytes are reserved but not visible as a ready object. - Set sensible expiry windows for download URLs. Shorter windows reduce the risk of URL sharing. - Monitor quota usage in the admin UI and set alerts before limits are reached. - Use the `purpose` field consistently so filtering and retention policies work as expected. --- ### Building Workflows Source: https://docs.everstack.ai/getting-started/studio/building-workflows Composing nodes, connecting handles, and configuring workflow logic. #### Metadata ```yaml title: Building Workflows description: Composing nodes, connecting handles, and configuring workflow logic. icon: GitBranch ``` This page walks through the mechanics of building a workflow in Studio: creating a new workflow, placing nodes, connecting handles, passing variables, adding branching and loops, wiring guardrails, and testing your pipeline before deployment. ## Creating a workflow Navigate to `/deployments/studio` and click **New Workflow**. Give it a name and an optional description. The canvas opens with an empty graph. Every workflow starts as a draft. Drafts are editable and testable but do not respond to triggers until you deploy them. ## Adding nodes Open the node palette on the left side of the canvas. Nodes are grouped by category: AI, Code, Integration, Logic, Safety, Voice, and Data. Drag a node from the palette onto the canvas to add it. Once placed, click the node to open the config panel on the right. Each node type has its own configuration form. Fill in the required fields. Optional fields have sensible defaults. You can reposition nodes freely on the canvas. The layout is visual only and does not affect execution order. Execution order is determined entirely by the directed edges between nodes. ## Connecting handles Every node has at least one handle. Handles are the small circles on the edges of a node. Output handles sit on the right side, input handles on the left. To connect two nodes, click and drag from an output handle on the upstream node to an input handle on the downstream node. The canvas draws a directed edge. This edge tells the execution engine that the downstream node depends on the upstream node and should receive its output. The canvas validates connections in real time: - You cannot create a cycle. The graph must remain a DAG. - You cannot connect two output handles or two input handles together. - Handle type mismatches are flagged with a warning. To remove a connection, click the edge and press delete. ## Variable flow between nodes Data moves between nodes through handles. When a node completes, its output is available to any downstream node connected to that output handle. Inside node configuration, you reference upstream values using variable interpolation. For example, if an LLM node is connected downstream from an HTTP node, the LLM's user prompt field can reference the HTTP response body using the upstream node's handle name. Variable names follow the pattern `{{nodeName.handleName}}`. The config panel shows available variables based on what is connected upstream, so you do not need to memorize handle names. ## Conditional branching Use a **Condition** node to create if/else branches. The Condition node evaluates an expression against incoming data and routes execution to one of two output handles: **true** or **false**. A typical pattern: 1. Connect an upstream node's output to the Condition node's input. 2. Configure the expression (e.g., `{{classifier.output}}` equals `"urgent"`). 3. Connect the **true** handle to the urgent-processing branch. 4. Connect the **false** handle to the standard-processing branch. Both branches can rejoin later by connecting to a shared downstream node. The execution engine waits for whichever branch was taken to complete before proceeding. You can chain multiple Condition nodes to build more complex routing logic. Each condition produces its own true/false split, so you can model multi-way branching by nesting conditions. ## Loops Use a **Loop** node when you need to repeat a set of steps over a list of items or a fixed number of times. In `for-each` mode, the Loop node iterates over a list from an upstream handle. Each iteration passes the current item and its index to the nodes connected inside the loop body. Results are aggregated into a list on the loop's output handle. In `count` mode, the loop runs a fixed number of times. This is useful for retry-like patterns or generating multiple variations. The `max parallel` setting controls how many iterations run concurrently. Set it to 1 for sequential processing or higher for parallel throughput. ## Guardrail routing Guardrail nodes (Input Guardrails and Output Guardrails) are different from most nodes because they produce two output handles instead of one: **pass** and **block**. The recommended pattern for input safety: 1. Place an **Input Guardrails** node before your LLM node. 2. Connect upstream data to the guardrail's input handle. 3. Connect the **pass** handle to the LLM node. 4. Connect the **block** handle to an error-handling node, a Transform node that returns a safe response, or an Output node that stops the workflow. The same pattern applies to output safety: 1. Place an **Output Guardrails** node after your LLM node. 2. Connect the LLM output to the guardrail's input handle. 3. Route **pass** to the next step. 4. Route **block** to your violation-handling logic. This gives you explicit, visual control over what happens when a guardrail fires. You can see the safe and blocked paths directly on the canvas. ## Transform nodes for data shaping When the output format of one node does not match the expected input of the next, place a **Transform** node between them. Transforms let you reshape JSON, extract fields, map arrays, or format strings. This is commonly needed when: - An HTTP node returns a deeply nested response and the LLM node expects a flat string. - A Loop node aggregates results into a list and the next node expects a single summary. - Two branches rejoin and you need to merge their outputs. ## Testing in the editor Before deploying, use the execution panel at the bottom of the canvas to test your workflow. 1. Click **Run** in the execution panel. 2. Provide test input values. The panel shows input fields based on the workflow's entry points (Webhook nodes, or the first nodes with no upstream connections). 3. Watch execution progress in real time. Each node highlights as it runs, and streaming events appear in the panel. 4. When execution completes, inspect the output of each node by clicking on it. The config panel switches to show execution results for that node. If a node fails, the error is shown inline on the canvas and in the execution panel. Fix the configuration and re-run without redeploying. ## Tips for readable workflows - Name your nodes descriptively. "Classify intent" is better than "LLM 1". - Keep the graph flowing left to right or top to bottom. The layout does not affect execution, but consistent direction makes the graph easier to read. - Use Transform nodes to make data flow explicit rather than relying on complex interpolation expressions. - Group related guardrail-LLM-guardrail sequences visually so safety checks are obvious. - Add comments to nodes using the description field in the config panel. ## Next steps - [Node Reference](https://docs.everstack.ai/getting-started/studio/node-reference) -- details on every node type and its configuration. - [Execution](https://docs.everstack.ai/getting-started/studio/execution) -- running, triggering, and monitoring deployed workflows. - [Guardrails Overview](https://docs.everstack.ai/getting-started/guardrails/overview) -- deeper detail on the safety checks available in guardrail nodes. --- ### Execution Source: https://docs.everstack.ai/getting-started/studio/execution Running, triggering, and monitoring workflow executions. #### Metadata ```yaml title: Execution description: Running, triggering, and monitoring workflow executions. icon: Play ``` This page covers how the workflow execution engine works, how to trigger workflow runs, how to monitor them in real time, and how error handling, versioning, and observability fit together. ## Execution model The engine processes a workflow graph in topological order. It starts with nodes that have no upstream dependencies (entry points) and works forward along the directed edges until all reachable nodes have completed. When the DAG structure allows it, independent branches run in parallel. If two nodes have no dependency between them, the engine starts both at the same time rather than waiting for one to finish. You do not need to configure this -- parallelism is automatic wherever the graph permits it. Each node receives an `ExecutionContext` that carries: - Variables from upstream nodes, resolved through named handles. - Metadata about the current execution (run ID, workflow version, trigger source). - Configuration values set in the node's config panel. When a node completes, its output is written to the context and becomes available to any downstream node connected to that output handle. ## Trigger types Workflows can be triggered three ways. Each trigger type passes input data that flows into the workflow's entry nodes. ### Webhook triggers A deployed workflow with a webhook trigger exposes an HTTP endpoint. When a POST request hits that endpoint, the engine starts a new execution with the request body as input. Webhook triggers are good for event-driven pipelines: a payment webhook from Stripe, a push event from GitHub, or a notification from an internal service. Each webhook trigger has a configurable secret for signature verification. This prevents unauthorized callers from starting workflow runs. ### Cron triggers A cron trigger runs the workflow on a recurring schedule defined by a cron expression. This is useful for batch processing, periodic data enrichment, nightly report generation, or any pipeline that should run at regular intervals. Cron executions receive the current timestamp and any static input values configured on the trigger. ### API triggers You can start a workflow run programmatically through the Everstack SDK or REST API. Pass input variables in the request body. The API returns a run ID that you can use to poll for status or stream events. API triggers are the right choice when your application code decides when and why to start a workflow, rather than relying on external events or schedules. See the [Workflows API](https://docs.everstack.ai/api-reference/workflows) for endpoint details and SDK examples. ## Streaming events Workflow executions emit events as they progress. You can consume these events in three places: - **Execution panel** in Studio -- real-time event stream during test runs and live executions. - **SDK streaming** -- subscribe to execution events programmatically when triggering via the API. - **Observability traces** -- full event history is recorded and viewable after execution completes. Events include: | Event | When it fires | | --- | --- | | `execution.started` | Workflow run begins | | `node.started` | A node begins processing | | `node.streaming` | A streaming node (LLM, Agent) emits partial output | | `node.completed` | A node finishes successfully | | `node.failed` | A node fails (before retry, if retries are configured) | | `node.retrying` | A node is retrying after a failure | | `guardrail.blocked` | A guardrail node produced a block result | | `execution.completed` | All nodes finished, workflow run is done | | `execution.failed` | The workflow run failed and cannot continue | ## Error handling Error handling is configured per node. Each node supports three settings: - **Retry count** -- how many times to retry on failure before giving up. Default is 0 (no retries). - **Retry delay** -- how long to wait between retries (fixed or exponential backoff). - **Fallback behavior** -- what happens when retries are exhausted: - **Stop** -- the entire workflow execution fails. - **Skip** -- the node is skipped and downstream nodes receive no output from it. - **Route** -- execution routes to a designated error-handling branch (connect an error output handle to your fallback logic). For critical nodes, use the **Stop** fallback so failures surface immediately. For optional enrichment steps, **Skip** lets the workflow continue without the enriched data. For nodes where you want graceful degradation, **Route** gives you full control over the error path. When a node fails, the failure details (error message, attempt count, timing) are recorded in the execution trace. This makes debugging straightforward because you can see exactly which node failed, what input it received, and what went wrong. ## Execution history Every workflow run is recorded. The execution history is accessible from the workflow detail page in Studio and shows: - Run ID and status (running, completed, failed). - Trigger type and source (which webhook, cron schedule, or API call started it). - Start time, end time, and duration. - Node-by-node execution timeline with individual durations. - Input and output payloads for each node. You can filter execution history by status, trigger type, and time range. Click any run to open its full trace. ## Observability integration Every workflow execution produces a trace in the Everstack observability layer. The trace captures: - The complete execution graph with node-level timing. - Input and output payloads at each node boundary. - Token usage and cost for LLM and Agent nodes. - Guardrail evaluation results, including any violations. - Error details and retry attempts. This means workflow executions are not a black box. You can correlate a workflow run with the underlying LLM calls, function executions, and agent turns that it triggered. If an LLM node in a workflow produces an unexpected response, the trace lets you inspect the exact prompt, model parameters, and response. Traces are accessible from the execution history panel in Studio or from the main observability tab. ## Versioning Workflows are versioned automatically. Every save creates a new version. This gives you a full history of changes to the workflow definition over time. Key versioning behaviors: - **Draft vs deployed** -- editing a workflow creates draft versions. Triggers (webhooks, crons) always execute the currently deployed version, not the latest draft. This means you can iterate on a workflow without affecting live traffic. - **Deploy** -- publishing a draft makes it the active version. All triggers switch to the new version on the next execution. - **Rollback** -- you can deploy any previous version to roll back a bad change. This restores the full node graph and all configuration. - **Comparison** -- the version history panel lets you compare two versions side by side to see what changed. ## Practical patterns ### Safety-wrapped LLM call Input Guardrails (pass) -> LLM -> Output Guardrails (pass) -> downstream. Both guardrail block handles route to a shared error response node. ### Fan-out classification A single LLM classifies an input. A Condition node routes to different processing branches based on the classification. Each branch can have its own LLM, HTTP calls, or function executions. ### Periodic enrichment pipeline A cron trigger fires hourly. An HTTP node fetches new data. A Loop node iterates over the results. Each iteration runs an LLM for summarization, then a Memory Store node persists the summary. ## Related pages - [Workflow Studio Overview](https://docs.everstack.ai/getting-started/studio/overview) -- what Studio is and when to use workflows. - [Node Reference](https://docs.everstack.ai/getting-started/studio/node-reference) -- every node type and its configuration. - [Building Workflows](https://docs.everstack.ai/getting-started/studio/building-workflows) -- composing nodes and connecting handles. - [Workflows API](https://docs.everstack.ai/api-reference/workflows) -- programmatic workflow and execution management. --- ### Node Reference Source: https://docs.everstack.ai/getting-started/studio/node-reference Available node types for building workflows. #### Metadata ```yaml title: Node Reference description: Available node types for building workflows. icon: Blocks ``` Every node in Workflow Studio belongs to one of seven categories. This page documents each node type, what it does, its key configuration options, and its handle types. Handles are the connection points on a node. **Input handles** accept data from upstream nodes. **Output handles** emit data to downstream nodes. Some nodes have multiple output handles for branching (for example, guardrail nodes produce both a **pass** and a **block** handle). ## AI ### LLM Sends a prompt to a language model and returns the response. | Config | Description | | --- | --- | | **Provider** | Which provider and model to use (e.g., OpenAI GPT-4, Anthropic Claude) | | **System prompt** | The system message sent with the request | | **User prompt** | Template for the user message, supports variable interpolation from upstream handles | | **Temperature** | Sampling temperature for the model response | | **Max tokens** | Maximum tokens in the response | | **Streaming** | Whether to stream tokens as they arrive | **Handles:** One input (prompt variables), one output (model response). ### Agent Spawns an Everstack agent and waits for or streams its result. Use this when a step requires autonomous multi-turn reasoning with tool use rather than a single model call. | Config | Description | | --- | --- | | **Agent definition** | Which agent configuration to use | | **Input message** | The message sent to the agent, supports variable interpolation | | **Timeout** | Maximum time the agent is allowed to run | | **Async** | Whether to wait for completion or continue and check later | **Handles:** One input (message and context), one output (agent response). ## Code ### Function Executes a registered Everstack function. Functions can run as webhook handlers, proxy handlers, or in isolated sandbox runtimes depending on their configuration. | Config | Description | | --- | --- | | **Function** | Which registered function to execute | | **Input mapping** | Map upstream handle values to function input parameters | | **Timeout** | Maximum execution time | **Handles:** One input (function parameters), one output (function return value). ## Integration ### HTTP Makes an HTTP request to an external API and returns the response. Use this for calling third-party services, internal APIs, or any REST endpoint. | Config | Description | | --- | --- | | **Method** | GET, POST, PUT, PATCH, DELETE | | **URL** | The endpoint URL, supports variable interpolation | | **Headers** | Request headers, supports variable interpolation | | **Body** | Request body template for POST/PUT/PATCH | | **Timeout** | Maximum time to wait for a response | | **Retry** | Number of retries on failure | **Handles:** One input (request parameters), one output (response body, status code, headers). ### Webhook Defines an inbound webhook trigger point within the workflow. When the workflow is triggered by a webhook, this node receives the incoming request payload and makes it available to downstream nodes. | Config | Description | | --- | --- | | **Path** | The webhook path suffix | | **Secret** | Shared secret for request signature verification | | **Method filter** | Which HTTP methods to accept | **Handles:** No input handle (this is a trigger node), one output (request payload, headers, method). ## Logic ### Condition Evaluates an expression and routes execution to one of two branches. This is how you build if/else logic in a workflow. | Config | Description | | --- | --- | | **Expression** | The condition to evaluate, supports variable references from upstream handles | | **Operator** | Comparison operator (equals, not equals, contains, greater than, less than, regex match, etc.) | **Handles:** One input (variables to evaluate), two outputs -- **true** and **false**. Connect downstream nodes to the appropriate output handle. ### Loop Iterates over a list or repeats a subgraph a fixed number of times. Each iteration passes the current item and index to the loop body. | Config | Description | | --- | --- | | **Mode** | `for-each` (iterate over a list) or `count` (repeat N times) | | **Source** | The list variable to iterate over (for-each mode) | | **Count** | Number of iterations (count mode) | | **Max parallel** | How many iterations can run concurrently | **Handles:** One input (the list or context), one output (aggregated results from all iterations). ### Transform Applies a data transformation to reshape, filter, or map values between nodes. Use this when the output format of one node does not match the input format of the next. | Config | Description | | --- | --- | | **Expression** | A transformation expression or template | | **Output format** | Expected output shape (JSON schema or freeform) | **Handles:** One input (source data), one output (transformed data). ## Safety ### Input Guardrails Runs input safety checks (PII detection, prompt injection prevention, content filtering) on data flowing through the workflow. Produces two output handles so you can route safe and blocked content differently. | Config | Description | | --- | --- | | **Checks** | Which guardrail checks to enable (PII, prompt injection, content filter) | | **PII action** | Block or redact when PII is detected | | **Sensitivity** | Threshold for content filtering (0.0 to 1.0) | **Handles:** One input (content to check), two outputs -- **pass** (content is safe, continues to next step) and **block** (violation detected, routes to error handling or alternative path). See [Input Guardrails](https://docs.everstack.ai/getting-started/guardrails/input-guardrails) for details on each check. ### Output Guardrails Runs output safety checks (jailbreak detection, toxicity filtering, code execution prevention) on model responses before they reach downstream nodes or the end user. | Config | Description | | --- | --- | | **Checks** | Which output checks to enable (jailbreak, toxicity, code execution) | | **Sensitivity** | Threshold for toxicity detection (0.0 to 1.0) | **Handles:** One input (model output to check), two outputs -- **pass** and **block**. See [Output Guardrails](https://docs.everstack.ai/getting-started/guardrails/output-guardrails) for details on each check. ## Voice ### TTS (Text-to-Speech) Converts text to audio using a configured voice provider. | Config | Description | | --- | --- | | **Provider** | TTS provider and voice model | | **Voice** | Voice selection or voice ID | | **Speed** | Playback speed multiplier | | **Output format** | Audio format (mp3, wav, opus) | **Handles:** One input (text content), one output (audio data and metadata). ### STT (Speech-to-Text) Transcribes audio input to text using a configured speech recognition provider. | Config | Description | | --- | --- | | **Provider** | STT provider and model | | **Language** | Expected language for transcription | | **Timestamps** | Whether to include word-level timestamps | **Handles:** One input (audio data), one output (transcribed text and metadata). ### Voice Clone Creates or uses a cloned voice profile for TTS synthesis. Combine with the TTS node for personalized voice output. | Config | Description | | --- | --- | | **Source audio** | Reference audio for voice cloning | | **Voice name** | Label for the cloned voice profile | | **Provider** | Voice cloning provider | **Handles:** One input (reference audio or voice ID), one output (cloned voice profile for use by TTS nodes). ## Data ### Memory Query Queries the Everstack memory layer to retrieve stored context, facts, or embeddings. Use this to give downstream LLM or Agent nodes access to relevant stored knowledge. | Config | Description | | --- | --- | | **Query** | The search query, supports variable interpolation | | **Limit** | Maximum number of results to return | | **Filter** | Optional metadata filters to narrow results | **Handles:** One input (query parameters), one output (retrieved memory entries). ### Memory Store Writes data to the Everstack memory layer. Use this to persist outputs from earlier workflow steps for future retrieval. | Config | Description | | --- | --- | | **Content** | The content to store, supports variable interpolation | | **Metadata** | Key-value metadata to attach to the memory entry | **Handles:** One input (content to store), one output (confirmation and stored entry ID). ## Custom nodes Beyond the built-in types, you can register custom node types by wrapping an Everstack function as a node. Custom nodes appear in the node palette alongside built-in types and follow the same handle and configuration conventions. ## Related pages - [Building Workflows](https://docs.everstack.ai/getting-started/studio/building-workflows) -- connecting nodes and configuring workflow logic. - [Execution](https://docs.everstack.ai/getting-started/studio/execution) -- running and monitoring workflow executions. - [Guardrails Overview](https://docs.everstack.ai/getting-started/guardrails/overview) -- deeper detail on safety checks. - [Workflows API](https://docs.everstack.ai/api-reference/workflows) -- programmatic node and workflow management. --- ### Workflow Studio Overview Source: https://docs.everstack.ai/getting-started/studio/overview Visual builder for multi-step AI pipelines and DAG orchestration. #### Metadata ```yaml title: Workflow Studio Overview description: Visual builder for multi-step AI pipelines and DAG orchestration. icon: Workflow ``` Workflow Studio is a visual DAG builder for composing multi-step AI pipelines. You drag nodes onto a canvas, connect them with handles, and the execution engine runs the resulting directed acyclic graph. The admin UI lives at `/deployments/studio`. Studio exists because not every AI workload is a single LLM call or a single agent loop. When you need to chain multiple models, run safety checks, call external APIs, branch on conditions, and transform data between steps, a visual pipeline gives you a clearer picture of what is happening than nested code or YAML definitions. ## What Studio is Studio is three things in one screen: - **Visual canvas** -- a drag-and-drop node editor where you compose the workflow graph. Nodes represent units of work (LLM calls, agent spawns, HTTP requests, guardrails, logic gates). Handles on each node define inputs and outputs. You connect handles with directed edges to describe data flow. - **Config panel** -- a sidebar that opens when you select a node. It exposes the node's configuration: model selection, prompt templates, function code, HTTP endpoints, condition expressions, retry policies, and more. - **Execution panel** -- a bottom panel that shows live execution state when you run or test the workflow. It streams events as each node completes, surfaces errors inline, and links to the full trace in observability. The underlying execution model is a DAG. Nodes are vertices, connections are directed edges, and the engine processes them in topological order. Where the graph allows it, independent branches run in parallel automatically. ## When to use workflows Workflows solve a different problem than agents and functions. Here is when each fits. ### Use workflows when - You need a multi-step pipeline with explicit control flow. - The steps involve different tools, models, or external systems. - You want conditional branching, loops, or parallel execution paths. - You need input and output guardrails at specific points in the pipeline. - You want a visual representation of the pipeline that non-engineers can read. - The pipeline should be versioned, deployed, and triggered by webhooks, crons, or API calls. ### Use agents when - The task is open-ended and the number of steps is not known in advance. - The model should decide which tools to call and in what order. - You want autonomous reasoning with tool use, not a fixed pipeline. ### Use functions when - You need a single, reusable action with a clear input/output contract. - The action does not need multi-step orchestration. - You want the function to be callable from workflows, agents, or the API independently. In practice, workflows often call agents and functions as nodes. Studio is the orchestration layer that ties them together. ## Trigger types Workflows can be triggered three ways: - **Webhook** -- an HTTP endpoint that accepts a POST request and starts a workflow run. Good for event-driven pipelines triggered by external systems. - **Cron** -- a schedule expression that triggers the workflow on a recurring interval. Good for batch processing, periodic enrichment, or reporting. - **API call** -- a direct call through the Everstack SDK or REST API. Good for application-driven orchestration where your code decides when to start a run. All three trigger types support passing input variables that flow into the first nodes of the graph. ## Execution model at a glance The execution engine processes nodes in topological order. Each node receives an `ExecutionContext` that carries variables from upstream nodes, resolved through named handles. When two or more nodes have no dependency between them, the engine runs them in parallel. Each node produces outputs on its handles. Downstream nodes read those outputs as input variables. This means data flows through the graph along the edges you draw, and the engine handles the scheduling. Error handling is configurable per node. You can set retry count, retry delay, and a fallback behavior. When a node fails and exhausts its retries, the execution can stop, skip the node, or route to an error-handling branch. Every execution produces a trace that is viewable in the observability tab. The trace includes timing, input/output payloads, token usage for LLM nodes, and any guardrail violations. ## The admin UI The Studio interface is organized around a single workflow at a time. 1. **Workflow list** -- browse, search, and create workflows. Each workflow shows its name, trigger type, version, and last execution status. 2. **Canvas view** -- the main editor. Nodes are placed on an infinite canvas with zoom and pan. Edges snap to handles. The canvas validates connections in real time and prevents cycles. 3. **Node palette** -- a sidebar with all available node types, grouped by category (AI, Code, Integration, Logic, Safety, Voice, Data). Drag from the palette onto the canvas. 4. **Config panel** -- opens on node selection. Every node type has a specific config form. 5. **Execution panel** -- run the workflow with test inputs, watch streaming events, and inspect results. Links to the full trace. 6. **Version history** -- view previous versions, compare changes, and roll back. ## Node categories Studio ships with nodes organized into seven categories: | Category | Nodes | Purpose | | --- | --- | --- | | **AI** | LLM, Agent | Model calls and autonomous agent spawns | | **Code** | Function | Execute registered functions | | **Integration** | HTTP, Webhook | Call external APIs, receive inbound events | | **Logic** | Condition, Loop, Transform | Branching, iteration, data transformation | | **Safety** | Input Guardrails, Output Guardrails | Runtime safety checks with pass/block routing | | **Voice** | TTS, STT, Voice Clone | Text-to-speech, speech-to-text, voice synthesis | | **Data** | Memory Query, Memory Store | Read from and write to the memory layer | Each node type is documented in detail on the [Node Reference](https://docs.everstack.ai/getting-started/studio/node-reference) page. ## Versioning and deployment Workflows are versioned. Every save creates a new version. You can inspect the version history, compare node layouts and configurations between versions, and deploy a specific version. Deployed workflows are the ones that triggers (webhooks, crons, API calls) execute. Draft changes do not affect running triggers until you explicitly deploy. ## Next steps - [Node Reference](https://docs.everstack.ai/getting-started/studio/node-reference) -- every node type, its configuration, and its handles. - [Building Workflows](https://docs.everstack.ai/getting-started/studio/building-workflows) -- creating workflows, connecting nodes, and configuring logic. - [Execution](https://docs.everstack.ai/getting-started/studio/execution) -- running, triggering, and monitoring workflow executions. - [Workflows API](https://docs.everstack.ai/api-reference/workflows) -- programmatic workflow management and execution. --- ### API Keys Source: https://docs.everstack.ai/getting-started/vault/api-keys Key creation, rotation, types, and access controls. #### Metadata ```yaml title: API Keys description: Key creation, rotation, types, and access controls. icon: Key ``` ## Overview API keys authenticate programmatic and external access to the Everstack API. They are required when making requests from outside the admin dashboard, for example, from scripts, CI/CD pipelines, reverse-proxied deployments, or third-party integrations. ### When You Need an API Key - **Programmatic access**: calling the API from scripts, SDKs, or external services - **Reverse proxy setups**: when the admin UI is served through nginx, Caddy, or another proxy - **Cross-origin requests**: when the client origin differs from the Everstack server origin ### When You Don't Need an API Key - **Same-origin access**: when the admin dashboard is served directly by the Everstack instance (e.g., accessing `http://localhost:8080` where Everstack is running), the same-origin bypass automatically authenticates requests - **Session-based auth**: when logged in via the built-in authentication system, session cookies authenticate requests, even behind a reverse proxy ## Creating an API Key 1. Open the Everstack dashboard 2. Navigate to **Settings > Vault > API Keys** 3. Click **Create API Key** 4. Give the key a descriptive name (e.g., "CI/CD Pipeline" or "Production Integration") 5. Copy the key immediately, it will only be shown once ## Using API Keys Include the API key in the `x-evs-api-key` header: ```bash curl -X POST https://your-instance.example.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "x-evs-api-key: evs_your_api_key_here" \ -d '{ "model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}] }' ``` ### Python ```python import requests response = requests.post( "https://your-instance.example.com/v1/chat/completions", headers={ "Content-Type": "application/json", "x-evs-api-key": "evs_your_api_key_here", }, json={ "model": "gpt-4", "messages": [{"role": "user", "content": "Hello"}], }, ) ``` ### OpenAI SDK Everstack is compatible with the OpenAI SDK. Point the base URL to your instance and use your API key: ```python from openai import OpenAI client = OpenAI( base_url="https://{instance}.{region}.everstack.ai/openai/v1", api_key="evs_your_api_key_here", # passed via x-evs-api-key internally ) ``` ## Production: Reverse Proxy Configuration When running behind a reverse proxy, ensure the proxy forwards the `x-evs-api-key` header and session cookies to Everstack. ### Nginx ```nginx location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Forward API key header and session cookies proxy_pass_header x-evs-api-key; proxy_pass_header Cookie; } ``` ### Caddy ```txt your-instance.example.com { reverse_proxy localhost:8080 } ``` Caddy forwards all headers (including `x-evs-api-key` and cookies) by default. ## Security Best Practices - **Rotate keys regularly**: revoke old keys and create new ones on a schedule - **Use descriptive names**: name keys after their purpose so you know which to revoke - **Revoke unused keys**: delete API keys that are no longer in use from the dashboard - **Don't commit keys to source control**: use environment variables or secret management tools - **One key per integration**: avoid sharing a single key across multiple services, use separate keys for easier auditing and revocation --- ### Provider Keys Source: https://docs.everstack.ai/getting-started/vault/provider-keys Managing LLM provider API keys and credentials. #### Metadata ```yaml title: Provider Keys description: Managing LLM provider API keys and credentials. icon: Key ``` Provider keys are the API credentials that let Everstack call LLM providers on your behalf. When an agent or workflow sends a request to OpenAI, Anthropic, Google, or any other supported provider, Everstack uses the provider keys you have configured in the Vault to authenticate that request. ## Why Vault manages your keys Storing API keys directly in application code, environment variables, or agent configurations creates security and operational problems. Keys get committed to repos, duplicated across services, and are hard to rotate without downtime. Vault centralizes credential management. You add your keys once, Everstack encrypts and stores them, and every agent and workflow in the tenant uses them transparently. This gives you a single place to rotate, disable, or audit key usage. ## Adding keys via the admin UI To add a provider key: 1. Navigate to **Vault** in the admin sidebar 2. Select the provider (e.g., OpenAI, Anthropic, Google, Mistral) 3. Click **Add Key** 4. Paste your API key 5. Optionally set a label (e.g., "production", "dev-team", "high-priority") 6. Save The key is encrypted immediately and never displayed in full again. You can verify a key is configured by its label and last-four characters, but Everstack will not show you the complete key after creation. ## Multiple keys per provider You can add more than one key for the same provider. This is useful when you want: - **Separate billing** -- different keys for different teams, projects, or cost centers - **Rate limit distribution** -- spread requests across multiple keys to avoid hitting a single key's rate limits - **Gradual rotation** -- add a new key before removing the old one, with no downtime When multiple keys exist for a provider, Everstack selects which key to use for each request based on weight-based rotation. ## Weight-based rotation Each key has a configurable weight that determines how often it is selected relative to other keys for the same provider. Weights are integers. The probability of a key being selected is its weight divided by the total weight of all active keys for that provider. | Key | Weight | Selection probability | | --- | --- | --- | | key-A | 3 | 60% | | key-B | 2 | 40% | This lets you ramp up a new key gradually. Start with a low weight, monitor for errors, then increase it. Or assign a higher weight to a key with a larger rate limit quota. If all keys have the same weight (or only one key exists), selection is uniform. ## Toggling active and inactive Each key can be toggled between active and inactive states. An inactive key is never selected for requests, but it is not deleted. This is useful when: - A key is approaching its rate limit and you want to temporarily stop using it - You suspect a key may be compromised and want to stop using it while you investigate - You are debugging and want to isolate which key is causing an issue Toggling a key inactive is immediate. Any in-flight request that already selected that key will complete, but no new requests will use it. If you deactivate all keys for a provider, requests to that provider will fail. Make sure at least one active key exists for every provider your agents and workflows depend on. ## Encryption at rest All provider keys are encrypted at rest using AES-256. Keys are decrypted only at the moment a request needs to be authenticated, held in memory for the duration of the API call, and never written to disk in plaintext. Encryption keys are managed separately from the application database. ## When to rotate keys Rotate your provider keys when: - A team member who had access to the key leaves the organization - You suspect a key may have been exposed (logs, screenshots, shared configs) - Your security policy requires periodic rotation (e.g., every 90 days) - A provider recommends rotation due to a security incident on their side The rotation process with Vault is straightforward: add the new key, set its weight, verify it works, then deactivate or delete the old key. There is no downtime because both keys can be active simultaneously during the transition. ## Supported providers Vault supports keys for all providers that Everstack's gateway can route to. Adding a new provider to the gateway automatically makes it available in Vault. See [Providers](https://docs.everstack.ai/getting-started/providers) for the full list of supported LLM providers. ## Next steps - [Providers](https://docs.everstack.ai/getting-started/providers) -- Supported LLM providers and how to configure them. - [Vault API Reference](https://docs.everstack.ai/getting-started/vault/api-keys) -- Full API documentation for managing provider keys programmatically. --- ### Voice Overview Source: https://docs.everstack.ai/getting-started/voice/overview Text-to-speech, speech-to-text, and voice cloning for AI applications. #### Metadata ```yaml title: Voice Overview description: Text-to-speech, speech-to-text, and voice cloning for AI applications. icon: Mic ``` Everstack Voice adds audio capabilities to the gateway. You can generate speech from text, transcribe audio to text, translate spoken audio between languages, and create custom voice profiles from reference recordings. All of it works through the same OpenAI-compatible API surface as the rest of the gateway. ## What Voice includes Voice is three capabilities behind one set of endpoints: - **Text-to-Speech (TTS)** converts text into audio. You send a string, pick a model and voice, and get back an audio file in your chosen format. Long text is automatically chunked and stitched together. - **Speech-to-Text (STT)** transcribes audio into text. You send an audio file and get back a transcript, optionally with word-level timing, segment boundaries, and language detection. - **Voice Cloning** lets you create a custom voice profile from a reference audio sample. Once enrolled, that profile can be used in any TTS request to generate speech that matches the reference voice. Audio translation is a variant of STT that transcribes and translates the audio into English in one step. ## Why Voice exists Adding audio to an AI application usually means integrating a separate TTS service, a separate STT service, managing API keys for each, handling audio format conversion, and building your own chunking logic for long text. Voice folds all of that into the gateway so you get: - one endpoint for TTS, one for STT, one for translation - provider abstraction across Qwen/DashScope and OpenAI - automatic text chunking for inputs that exceed model limits - tenant-scoped voice clone profiles with the same isolation as the rest of Everstack - workflow studio integration through dedicated executor nodes ## Providers Voice ships with two provider backends: | Provider | TTS | STT | Voice Cloning | |----------|-----|-----|---------------| | **Qwen / DashScope** | Yes | No | Yes | | **OpenAI** | Yes | Yes | No | Qwen is the primary provider for TTS and the only provider that supports voice cloning. OpenAI covers both TTS and STT through the Whisper model family. Provider selection happens through the model you specify in each request. ## Models ### Text-to-Speech | Model | Provider | Notes | |-------|----------|-------| | `qwen3-tts-flash` | Qwen | Fast general-purpose TTS | | `qwen3-tts-vc-2026-01-22` | Qwen | Voice clone variant, requires a voice clone profile | ### Speech-to-Text | Model | Provider | Notes | |-------|----------|-------| | `whisper-1` | OpenAI | Default STT model, supports language detection | ## How it fits into the gateway Voice endpoints follow the same pattern as chat completions and embeddings. They live under the gateway's `/v1/audio/` path, authenticate with the same API key, respect the same tenant boundaries, and appear in the same observability pipeline. The three endpoints are: - `POST /v1/audio/speech` for text-to-speech - `POST /v1/audio/transcriptions` for speech-to-text - `POST /v1/audio/translations` for audio translation to English See the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) for full request and response schemas. ## Workflow studio integration Voice capabilities are available as nodes inside the workflow studio: - **TTSExecutor** generates speech from text produced by upstream nodes - **STTExecutor** transcribes audio from file references or upstream outputs - **VoiceCloneExecutor** runs TTS using a cloned voice profile These nodes accept the same parameters as their API counterparts and can be wired into any workflow graph alongside LLM calls, function executions, and conditional logic. ## Feature gating Voice is available on the **Pro tier**. Free-tier deployments will receive a 403 when calling voice endpoints. Upgrade through the Everstack dashboard or contact the team for enterprise pricing. ## Request model Voice is request/response only. You send a request, wait for the full audio or transcript, and receive the complete result. There is no realtime streaming, no WebSocket connection, and no voice activity detection. This keeps the integration simple and predictable for batch and on-demand use cases. ## Frontend The Everstack dashboard includes a voice management interface at `/deployments/voice`. From there you can: - create and manage voice clone profiles - upload reference audio samples - test TTS output with different models and parameters - view profile enrollment status ## Examples ### Generate speech for a notification Send a short text string to the TTS endpoint with `qwen3-tts-flash`, get back an MP3 file, and play it in your application's notification system. ### Transcribe a customer call Upload a WAV recording to the STT endpoint with `whisper-1` and `response_format: verbose_json`. You get back the full transcript with word-level timestamps, which you can use for search indexing, summarization, or compliance review. ### Build a branded voice experience Record a 10-second reference clip, create a voice clone profile, enroll it with Qwen, and then use that profile in all TTS requests. Every audio output sounds like your brand voice instead of a generic model voice. ### Workflow-driven podcast generation Build a studio workflow that takes a blog post as input, runs it through an LLM to create a conversational script, then pipes each segment through TTSExecutor nodes with different voice profiles for host and guest. The output is a ready-to-publish audio file. ## Next steps - [Text-to-Speech](https://docs.everstack.ai/getting-started/voice/text-to-speech) covers models, formats, parameters, and chunking behavior. - [Speech-to-Text](https://docs.everstack.ai/getting-started/voice/speech-to-text) explains transcription, translation, language detection, and timing data. - [Voice Cloning](https://docs.everstack.ai/getting-started/voice/voice-cloning) walks through creating profiles, enrolling with a provider, and using cloned voices in TTS. - [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) documents the full endpoint contracts. --- ### Speech-to-Text Source: https://docs.everstack.ai/getting-started/voice/speech-to-text Transcribe and translate audio with language detection and timing data. #### Metadata ```yaml title: Speech-to-Text description: Transcribe and translate audio with language detection and timing data. icon: AudioLines ``` The STT endpoints convert audio into text. Transcription produces a text representation of what was spoken. Translation does the same but also translates the result into English, regardless of the source language. Both endpoints accept an audio file and return structured text output. ## Endpoints ``` POST /v1/audio/transcriptions POST /v1/audio/translations ``` The transcription endpoint preserves the original language. The translation endpoint always outputs English. Both use the same request shape and parameter set. See the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) for full request and response schemas. ## Models | Model | Provider | Notes | |-------|----------|-------| | `whisper-1` | OpenAI | Default model for both transcription and translation. Supports automatic language detection. | ## Response formats The `response_format` parameter controls the shape of the output: | Format | What you get | |--------|-------------| | `json` | A JSON object with a single `text` field containing the full transcript. | | `text` | Plain text string with no wrapper. | | `verbose_json` | A JSON object with the transcript, detected language, duration, and detailed timing segments. | | `srt` | SubRip subtitle format. Each segment has an index, timestamp range, and text. | | `vtt` | WebVTT subtitle format. Similar to SRT but used natively in HTML5 video players. | Use `json` or `text` when you only need the words. Use `verbose_json` when you need timing data for search indexing, alignment, or analytics. Use `srt` or `vtt` when the transcript will be displayed as subtitles. ## Language handling STT supports two approaches to language: - **Automatic detection**: Omit the `language` parameter and the model identifies the spoken language from the audio content. The detected language code is included in `verbose_json` responses. - **Explicit specification**: Set the `language` parameter to an ISO 639-1 code (for example, `en`, `es`, `fr`, `ja`). This can improve accuracy when you already know the source language, especially for shorter audio clips where detection has less signal. For the translation endpoint, the source language is detected or specified the same way, but the output is always English. ## Timing data When you use `verbose_json` as the response format, the output includes: - **Segment-level timing**: Each logical segment of speech includes `start` and `end` timestamps in seconds, plus the transcribed text for that segment. - **Word-level timing**: Individual words include their own `start` and `end` timestamps, giving you precise alignment between audio and text. This timing data is useful for: - building searchable audio indexes where you can jump to the exact moment a word was spoken - syncing transcripts with video or audio playback - measuring speaking pace, pause duration, and turn-taking patterns - generating highlights or clips from longer recordings ## When to use STT - **Call transcription** for support, sales, or compliance workflows that need a written record of conversations - **Meeting notes** where you want a searchable, time-aligned transcript alongside the recording - **Content indexing** to make audio and video libraries searchable by spoken content - **Accessibility** for generating captions or subtitles from audio tracks - **Agent input** where users speak to an agent and the audio needs to be converted to text before the LLM processes it - **Multilingual translation** when you receive audio in one language and need the content in English ## Translation vs. transcription Use transcription (`/v1/audio/transcriptions`) when you want the text in the same language as the audio. Use translation (`/v1/audio/translations`) when you want English output regardless of the source language. If the source audio is already in English, both endpoints produce the same result. ## Next steps - [Text-to-Speech](https://docs.everstack.ai/getting-started/voice/text-to-speech) covers the reverse direction, generating audio from text. - [Voice Cloning](https://docs.everstack.ai/getting-started/voice/voice-cloning) explains custom voice profiles for personalized TTS output. - [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) has the full endpoint schema. --- ### Text-to-Speech Source: https://docs.everstack.ai/getting-started/voice/text-to-speech Generate audio from text using multiple models and voices. #### Metadata ```yaml title: Text-to-Speech description: Generate audio from text using multiple models and voices. icon: Volume2 ``` The TTS endpoint converts text into spoken audio. You send a string, choose a model and output format, and receive an audio file. Long inputs are automatically split into chunks and concatenated so you do not need to manage text length yourself. ## Endpoint ``` POST /v1/audio/speech ``` See the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) for the full request and response schema. ## Models | Model | Provider | When to use | |-------|----------|-------------| | `qwen3-tts-flash` | Qwen / DashScope | General-purpose TTS. Fast, good quality, no reference audio needed. | | `qwen3-tts-vc-2026-01-22` | Qwen / DashScope | Voice clone variant. Requires a `voice_clone_profile_id`. Use when you need output that matches a custom voice. | ## Output formats | Format | Notes | |--------|-------| | `mp3` | Compressed, widely supported. Good default for web and mobile. | | `opus` | Low-latency compressed format. Good for real-time playback over networks. | | `aac` | Compressed, native on Apple platforms. | | `flac` | Lossless compression. Use when quality matters more than file size. | | `wav` | Uncompressed PCM in a WAV container. Largest files, no quality loss. | | `pcm` | Raw PCM samples with no header. Use when you are feeding audio into another processing pipeline. | ## Parameters Beyond the required `input` (text) and `model`, TTS accepts several optional parameters that control voice characteristics: | Parameter | Type | Description | |-----------|------|-------------| | `speed` | float | Playback speed multiplier. Values below 1.0 slow down, above 1.0 speed up. | | `temperature` | float | Controls randomness in speech generation. Lower values produce more consistent output. | | `topP` | float | Nucleus sampling threshold. Restricts token selection to the most probable candidates. | | `stability` | float | How consistent the voice stays across the generated audio. Higher values reduce variation. | | `similarity` | float | How closely the output should match the target voice. More relevant with voice cloning. | | `style` | float | Expressiveness of the delivery. Higher values produce more animated speech. | | `enhancement` | bool | Applies post-processing to improve audio clarity. | | `speakerBoost` | bool | Amplifies the speaker's presence in the mix. | Not every parameter is supported by every model. When an unsupported parameter is passed, it is ignored rather than causing an error. ## Text chunking TTS models have a per-request text limit of approximately 500 characters. When your input exceeds this limit, Everstack automatically: 1. Splits the text into chunks at sentence boundaries (or at the 500-character limit if no boundary is found) 2. Sends each chunk to the provider as a separate synthesis request 3. Concatenates the resulting audio segments into a single output file This happens transparently. You send the full text, and you receive one audio file back. The chunking logic preserves natural sentence breaks so the stitched output sounds continuous. ## When to use TTS - **Notifications and alerts** that need an audio component alongside text - **Accessibility** for visually impaired users or screen-reader alternatives - **Content production** where you need to convert articles, documentation, or scripts into audio - **Agent responses** where a voice interface is more natural than text - **Workflow automation** where audio is an output artifact, such as podcast generation or voiceover creation ## Using a cloned voice To generate speech with a custom voice, set the `voice_clone_profile_id` field in your request and use the `qwen3-tts-vc-2026-01-22` model. The profile must already be enrolled with the provider. See [Voice Cloning](https://docs.everstack.ai/getting-started/voice/voice-cloning) for setup instructions. ## Next steps - [Speech-to-Text](https://docs.everstack.ai/getting-started/voice/speech-to-text) covers the reverse direction, turning audio into text. - [Voice Cloning](https://docs.everstack.ai/getting-started/voice/voice-cloning) explains how to create and use custom voice profiles. - [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) has the full endpoint schema. --- ### Voice Cloning Source: https://docs.everstack.ai/getting-started/voice/voice-cloning Create custom voice profiles from reference audio for personalized synthesis. #### Metadata ```yaml title: Voice Cloning description: Create custom voice profiles from reference audio for personalized synthesis. icon: Copy ``` Voice cloning lets you create a reusable voice profile from a short reference audio sample. Once a profile is enrolled with a provider, any TTS request can use it to generate speech that sounds like the reference voice instead of a default model voice. ## How it works The cloning workflow has three steps: 1. **Create a profile** with a name, reference audio file, and reference text (the transcript of what is spoken in the audio). 2. **Enrollment** happens automatically when the profile is created. Everstack sends the reference audio to the provider, which analyzes the voice characteristics and returns a `provider_voice_id`. 3. **Use the profile** by setting `voice_clone_profile_id` in any TTS request along with the clone-capable model (`qwen3-tts-vc-2026-01-22`). After enrollment, the provider retains the voice embedding. You do not need to send the reference audio again on each TTS request. ## Provider support | Provider | Cloning supported | Clone model | |----------|-------------------|-------------| | **Qwen / DashScope** | Yes | `qwen3-tts-vc-2026-01-22` | | **OpenAI** | No | N/A | Qwen is currently the only provider that supports voice cloning. Profiles are always enrolled with Qwen regardless of which provider you use for standard TTS. ## Profile structure A voice clone profile stores: | Field | Description | |-------|-------------| | `name` | Human-readable identifier. Must be unique within your organization. | | `description` | Optional notes about the voice, its source, or intended use. | | `provider` | The cloning provider (currently `dashscope`). | | `model` | The clone model used for enrollment. | | `reference_audio_object_id` | Reference to the uploaded audio file in Everstack storage. | | `provider_voice_id` | The ID returned by the provider after enrollment. Used internally for TTS requests. | Profiles are scoped to your organization. The uniqueness constraint is `(org_id, name)`, so two different organizations can have profiles with the same name without conflict. ## Creating a profile ### From the dashboard Navigate to `/deployments/voice` in the Everstack dashboard. Click "Create Profile" and provide: - a name for the profile - an optional description - the reference audio file (a short recording of the target voice) - the reference text (an accurate transcript of what is spoken in the recording) The dashboard handles the upload, enrollment, and status tracking. ### From the API Use the voice clone profile CRUD endpoints to create, list, update, and delete profiles programmatically. See the [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) for the full schema. ## Reference audio guidelines The quality of the cloned voice depends on the reference audio. For best results: - **Duration**: 5 to 15 seconds of clear speech. Too short gives the model insufficient signal. Too long introduces noise and variation without improving quality. - **Content**: Choose a sentence or two that covers a range of phonemes. Avoid single words or very repetitive phrases. - **Quality**: Record in a quiet environment with minimal background noise. A decent microphone matters more than expensive studio gear. - **Format**: Standard audio formats (WAV, MP3, FLAC) are accepted. Uncompressed formats preserve more detail for enrollment. - **Reference text**: Must accurately match what is spoken in the audio. Mismatches between the audio and text degrade enrollment quality. ## Using a cloned voice in TTS Once a profile is enrolled, reference it in TTS requests: - Set the `model` to `qwen3-tts-vc-2026-01-22` - Set `voice_clone_profile_id` to the profile's ID The gateway resolves the profile, injects the `provider_voice_id`, and routes the request to Qwen. All other TTS parameters (format, speed, stability, and so on) work the same as with standard TTS. ## Workflow studio The **VoiceCloneExecutor** node wraps this flow for use inside workflows. It accepts a text input and a voice clone profile reference, then produces audio using the cloned voice. Wire it after any node that produces text, such as an LLM call or a template renderer. ## Tenant isolation Voice clone profiles follow the same tenant isolation model as the rest of Everstack. Profiles belong to one organization, are invisible to other organizations, and cannot be accessed across tenant boundaries. This applies to both the dashboard and the API. ## Next steps - [Text-to-Speech](https://docs.everstack.ai/getting-started/voice/text-to-speech) covers all TTS parameters and output formats. - [Speech-to-Text](https://docs.everstack.ai/getting-started/voice/speech-to-text) explains transcription, translation, and timing data. - [Voice Overview](https://docs.everstack.ai/getting-started/voice/overview) has the full feature summary and provider matrix. - [Gateway API Reference](https://docs.everstack.ai/api-reference/gateway) documents the profile CRUD and TTS endpoints. --- ### Introduction Source: https://docs.everstack.ai/ The unified AI infrastructure platform for building, deploying, and managing AI-powered applications. #### Metadata ```yaml title: Introduction description: The unified AI infrastructure platform for building, deploying, and managing AI-powered applications. icon: Layers ``` Welcome to the Everstack documentation. Everstack is an open-source, unified AI infrastructure platform that brings together everything you need to build production-grade AI applications -- from LLM gateways and agent orchestration to workflow studios, vector memory, and sandboxed execution environments. ## What is Everstack? Everstack provides a complete platform for AI application development: - **AI Gateway** -- A unified proxy for 200+ LLM models across providers (OpenAI, Anthropic, Google, etc.) with built-in load balancing, caching, rate limiting, and fallback routing. - **Agent Runtime** -- Build, deploy, and manage autonomous AI agents with tool use, human-in-the-loop approval, and persistent memory. - **Workflow Studio** -- A visual workflow builder for designing multi-step AI pipelines with conditional logic, branching, and provider chaining. - **Vector Memory** -- Managed vector collections for RAG, semantic search, and long-term agent memory backed by pgvector. - **Sandbox Environments** -- Isolated runtimes for agents, jobs, preview apps, webhook workers, and safe code execution with shell access, filesystems, networking controls, and port exposure. - **Observability** -- Full-stack tracing, logging, and metrics powered by OpenTelemetry and ClickHouse. - **Vault** -- Centralized API key management with rotation, spend limits, and per-key access controls. ## Quick Start ## Choose Your Path Whether you're setting up your first AI gateway or orchestrating complex multi-agent workflows, Everstack scales with your needs. | Use Case | Start Here | | --------------------------------------------- | ----------------------------------------------------------- | | Route LLM requests with fallbacks and caching | [AI Gateway](https://docs.everstack.ai/getting-started/gateway/overview) | | Build autonomous AI agents | [Agents](https://docs.everstack.ai/getting-started/agents/overview) | | Design visual AI workflows | [Workflow Studio](https://docs.everstack.ai/getting-started/studio/overview) | | Add semantic search / RAG | [Vector Memory](https://docs.everstack.ai/getting-started/memory/overview) | | Execute code in isolated sandboxes | [Sandboxes](https://docs.everstack.ai/getting-started/sandboxes/overview) | | Monitor and debug AI requests | [Observability](https://docs.everstack.ai/getting-started/observability/overview) | ## More Resources Deploy to Docker, Kubernetes, or bare metal. OpenAI-compatible REST API and platform APIs. Command-line interface for server and database management. --- ### Go Source: https://docs.everstack.ai/sdks/go Official Everstack Go SDK with streaming support and typed responses. #### Metadata ```yaml title: Go description: Official Everstack Go SDK with streaming support and typed responses. icon: Code2 ``` The official Go SDK provides an idiomatic Go client for every Everstack API with generic streaming support. OpenAI-managed sessions are available through `client.OpenAIAgents`, including capability discovery, durable event pagination, approvals, usage, and retained files. See the [OpenAI Agents API guide](https://docs.everstack.ai/getting-started/agents/openai-agents-api). ## Installation ```bash go get github.com/everstacklabs/everstack-go ``` Requires Go 1.22+. ## Initialize the client ```go import everstack "github.com/everstacklabs/everstack-go" client := everstack.NewClient("pk_...") ``` With options: ```go client := everstack.NewClient("pk_...", everstack.WithBaseURL("https://{instance}.{region}.everstack.ai"), everstack.WithProvider("@openai"), everstack.WithOrgID("org_123"), everstack.WithTimeout(30 * time.Second), ) ``` Available options: - `WithBaseURL(url)` -- gateway URL (defaults to `https://{instance}.{region}.everstack.ai`) - `WithProvider(provider)` -- default provider for routing - `WithOrgID(orgID)` -- organization ID for multi-tenant setups - `WithUserID(userID)` -- user ID for tracking - `WithHeaders(headers)` -- additional default headers - `WithHTTPClient(client)` -- custom `*http.Client` - `WithTimeout(duration)` -- request timeout (default: 60s) ## Gateway APIs ### Chat completions ```go ctx := context.Background() resp, err := client.Chat.Completions.Create(ctx, &everstack.ChatCompletionParams{ Model: "@openai/gpt-4o", Messages: []everstack.Message{ {Role: "user", Content: "Hello!"}, }, }) if err != nil { log.Fatal(err) } fmt.Println(*resp.Choices[0].Message.Content) ``` Streaming: ```go stream, err := client.Chat.Completions.CreateStream(ctx, &everstack.ChatCompletionParams{ Model: "@anthropic/claude-sonnet-4-20250514", Messages: []everstack.Message{ {Role: "user", Content: "Tell me a joke"}, }, }) if err != nil { log.Fatal(err) } defer stream.Close() for stream.Next() { chunk := stream.Current() if len(chunk.Choices) > 0 && chunk.Choices[0].Delta.Content != nil { fmt.Print(*chunk.Choices[0].Delta.Content) } } if err := stream.Err(); err != nil { log.Fatal(err) } ``` ### Embeddings ```go resp, err := client.Embeddings.Create(ctx, &everstack.EmbeddingsParams{ Model: "@openai/text-embedding-3-small", Input: "Hello world", }) ``` ### Models ```go models, err := client.Models.List(ctx) ``` ### Audio Text-to-speech: ```go audio, err := client.Audio.Speech.Create(ctx, &everstack.SpeechParams{ Model: "tts-1", Input: "Hello from Everstack.", Voice: "alloy", }) ``` Speech-to-text: ```go transcription, err := client.Audio.Transcriptions.Create(ctx, &everstack.TranscriptionParams{ Model: "whisper-1", File: audioBytes, }) ``` ### Images ```go images, err := client.Images.Generate(ctx, &everstack.ImageGenerateParams{ Model: "@openai/dall-e-3", Prompt: "A sunset over the ocean", }) ``` ### Moderations ```go result, err := client.Moderations.Create(ctx, &everstack.ModerationParams{ Input: "Text to check", }) ``` ### Reranking ```go result, err := client.Rerank.Create(ctx, &everstack.RerankParams{ Model: "rerank-v1", Query: "What is Everstack?", Documents: []string{"Everstack is an AI platform.", "Unrelated text."}, }) ``` ### Responses (agentic orchestration) ```go resp, err := client.Responses.Create(ctx, &everstack.ResponseCreateParams{ Model: "@openai/gpt-4o", Input: "Summarize this document", }) // Streaming stream, err := client.Responses.CreateStream(ctx, &everstack.ResponseCreateParams{ Model: "@openai/gpt-4o", Input: "Summarize this document", }) defer stream.Close() for stream.Next() { event := stream.Current() // handle response stream events } ``` ## Platform APIs ### Agents ```go agent, err := client.Agents.Create(ctx, map[string]any{ "name": "support-agent", "systemPrompt": "You are a concise support assistant.", }) session, err := client.Agents.Sessions.Create(ctx, map[string]any{ "agentId": agent["id"], }) result, err := client.Agents.Sessions.RunTurn(ctx, map[string]any{ "sessionId": session["id"], "input": "Summarize open tickets.", }) ``` Agent sub-resources: `Sessions`, `Reviews`, `Sandboxes`, `Lifecycle`, `Memories`, `Deployments`, `Triggers`, `Links`, `Channels`. ### Datasets and evaluations ```go dataset, err := client.Datasets.Create(ctx, map[string]any{ "name": "support-regression", }) run, err := client.Evaluations.Runs.Create(ctx, map[string]any{ "datasetId": dataset["id"], "name": "nightly-regression", }) summary, err := client.Evaluations.Runs.GetSummary(ctx, run["id"].(string)) ``` ### Observability ```go dashboard, err := client.Observability.Metrics.GetDashboard(ctx, nil) sessions, err := client.Observability.Sessions.List(ctx, nil) ``` ## Streaming The SDK uses a generic `Stream[T]` type for streaming responses: ```go type Stream[T any] struct { ... } func (s *Stream[T]) Next() bool // advance to next event func (s *Stream[T]) Current() T // get current decoded event func (s *Stream[T]) Err() error // get any error encountered func (s *Stream[T]) Close() error // release connection ``` Available for chat completions (`CreateStream`), responses (`CreateStream`), and agent sessions (`RunTurnStream`). ## Error handling ```go import "errors" resp, err := client.Chat.Completions.Create(ctx, params) if err != nil { var authErr *everstack.AuthenticationError var rateLimitErr *everstack.RateLimitError var notFoundErr *everstack.NotFoundError var apiErr *everstack.APIError switch { case errors.As(err, &authErr): log.Fatal("Invalid API key") case errors.As(err, &rateLimitErr): log.Fatal("Rate limited, retry later") case errors.As(err, ¬FoundErr): log.Fatal("Resource not found") case errors.As(err, &apiErr): log.Fatalf("API error %d: %s", apiErr.StatusCode, apiErr.Message) default: log.Fatal(err) } } ``` ## Full resource map ``` client.Chat.Completions.Create(), .CreateStream() client.Embeddings.Create() client.Models.List() client.Audio.Speech.Create() client.Audio.Transcriptions.Create() client.Audio.Translations.Create() client.Images.Generate(), .Edit(), .CreateVariation() client.Moderations.Create() client.Rerank.Create() client.Responses.Create(), .CreateStream(), .Get(), .Cancel(), .Delete(), .List() client.Agents.Create(), .Get(), .List(), .Update(), .Delete() client.Agents.Sessions.Create(), .RunTurn(), .RunTurnStream(), .Cancel(), .Complete() client.Agents.Reviews.Submit(), .Get(), .List() client.Agents.Sandboxes.Create(), .ListInstances(), .Stop(), .Revive(), .Terminate() client.Agents.Lifecycle.Provision(), .Sleep(), .Wake() client.Agents.Memories.List(), .Create(), .Update(), .Deactivate(), .Delete() client.Agents.Deployments.Deploy(), .List(), .Get(), .Update() client.Agents.Triggers.Create(), .List(), .Get(), .Update(), .Delete() client.Agents.Links.Create(), .List(), .Delete() client.Agents.Channels.Bind(), .Unbind(), .List() client.Datasets.Create(), .Get(), .List(), .Update(), .Delete() client.Datasets.Items.Create(), .CreateBatch(), .Get(), .List(), .Update(), .Delete() client.Datasets.ScoreConfigs.Create(), .Get(), .List(), .Update(), .Delete() client.Evaluations.Runs.Create(), .Get(), .List(), .Cancel(), .Delete(), .Retry() client.Evaluations.Runs.GetItems(), .GetSummary(), .Compare(), .SetBaseline() client.Evaluations.Schedules.Create(), .Get(), .List(), .Update(), .Delete() client.Observability.Metrics.GetDashboard(), .GetTimeSeries() client.Observability.Sessions.List(), .Get() client.Observability.Users.List(), .Get() client.Observability.Outcomes.GetDashboard(), .GetTimeSeries() ``` ## Resources - [Go SDK source](https://github.com/everstacklabs/everstack-go) - [pkg.go.dev](https://pkg.go.dev/github.com/everstacklabs/everstack-go) --- ### SDKs Source: https://docs.everstack.ai/sdks Official Everstack SDKs for gateway and platform integration. #### Metadata ```yaml title: SDKs description: Official Everstack SDKs for gateway and platform integration. icon: Boxes ``` Everstack SDKs provide typed clients for every platform API -- gateway, agents, memory, evaluations, observability, and more. ## Available SDKs Full-featured SDK covering gateway, agents, memory, evaluations, audio, traces, and channels. Sync and async clients with Pydantic models for gateway and platform APIs. Idiomatic Go client with streaming support and typed responses. ## OpenAI compatibility The Everstack gateway is OpenAI-compatible, so you can also use the official OpenAI SDK by pointing it at your Everstack gateway URL. The Everstack SDK adds typed access to platform-specific features like agents, memory, evaluations, and observability that the OpenAI SDK does not cover. For OpenAI-managed agent sessions, all three Everstack SDKs expose the instance-owned OpenAI Agents resources for connections, sessions, durable event history, approvals, usage, and retained files. See the [OpenAI Agents API guide](https://docs.everstack.ai/getting-started/agents/openai-agents-api) and [RPC reference](https://docs.everstack.ai/api-reference/openai-agents). --- ### Python Source: https://docs.everstack.ai/sdks/python Official Everstack Python SDK with sync and async clients. #### Metadata ```yaml title: Python description: Official Everstack Python SDK with sync and async clients. icon: Code2 ``` The official Python SDK provides both synchronous and asynchronous clients for every Everstack API. OpenAI-managed sessions are available through `client.openai_agents` on both clients, including capability discovery, durable event pagination, approvals, usage, and retained files. See the [OpenAI Agents API guide](https://docs.everstack.ai/getting-started/agents/openai-agents-api). ## Installation ```bash pip install everstack ``` Requires Python 3.9+. Uses httpx for HTTP transport and Pydantic v2 for typed responses. ## Initialize the client Synchronous: ```python from everstack import Everstack client = Everstack(api_key="pk_...") ``` Asynchronous: ```python from everstack import AsyncEverstack async with AsyncEverstack(api_key="pk_...") as client: response = await client.chat.completions.create(...) ``` Both clients accept the same options: - `api_key` (required) -- authentication token - `base_url` -- gateway URL (defaults to `https://{instance}.{region}.everstack.ai`) - `provider` -- default provider for routing (e.g., `"@openai"`) - `org_id` -- organization ID for multi-tenant setups - `user_id` -- user ID for tracking - `headers` -- additional default headers - `timeout` -- request timeout in seconds (default: 60) ## Gateway APIs ### Chat completions ```python response = client.chat.completions.create( model="@openai/gpt-4o", messages=[{"role": "user", "content": "Hello!"}], ) print(response.choices[0].message.content) ``` Streaming: ```python for chunk in client.chat.completions.create( model="@anthropic/claude-sonnet-4-20250514", messages=[{"role": "user", "content": "Tell me a joke"}], stream=True, ): if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True) ``` ### Embeddings ```python response = client.embeddings.create( model="@openai/text-embedding-3-small", input=["Hello world", "How are you?"], ) ``` ### Models ```python models = client.models.list() ``` ### Audio Text-to-speech: ```python audio = client.audio.speech.create( model="tts-1", input="Hello from Everstack.", voice="alloy", ) ``` Speech-to-text: ```python transcription = client.audio.transcriptions.create( file=audio_bytes, model="whisper-1", ) ``` ### Images ```python images = client.images.generate( prompt="A sunset over the ocean", model="@openai/dall-e-3", size="1024x1024", ) ``` ### Moderations ```python result = client.moderations.create(input="Text to check") ``` ### Reranking ```python result = client.rerank.create( model="rerank-v1", query="What is Everstack?", documents=["Everstack is an AI platform.", "Unrelated text."], ) ``` ### Responses (agentic orchestration) ```python response = client.responses.create( model="@openai/gpt-4o", input="Summarize this document", ) # Streaming for event in client.responses.create( model="@openai/gpt-4o", input="Summarize this document", stream=True, ): print(event) ``` ## Platform APIs ### Agents ```python agent = client.agents.create( name="support-agent", systemPrompt="You are a concise support assistant.", ) session = client.agents.sessions.create(agent_id=agent["id"]) response = client.agents.sessions.run_turn( session_id=session["id"], input="Summarize open tickets.", ) ``` Agent sub-resources: `sessions`, `reviews`, `sandboxes`, `lifecycle`, `memories`, `deployments`, `triggers`, `links`, `channels`, `crons`, `webhooks`, `github`, `ssh_keys`. ### Datasets and evaluations ```python dataset = client.datasets.create(name="support-regression") client.datasets.items.create_batch( dataset_id=dataset["id"], items=[{"input": {"query": "How do I reset my password?"}}], ) run = client.evaluations.runs.create( dataset_id=dataset["id"], name="nightly-regression", ) summary = client.evaluations.runs.get_summary(run_id=run["id"]) ``` ### Observability and traces ```python dashboard = client.observability.metrics.get_dashboard() sessions = client.observability.sessions.list() traces = client.traces.list_rich(limit=50, environment="production") client.traces.scores.create( trace_id="abc123", name="quality", source="ANNOTATION", data_type="NUMERIC", numeric_value=0.9, ) ``` ## Error handling ```python from everstack import ( AuthenticationError, RateLimitError, NotFoundError, APIError, ) try: response = client.chat.completions.create(...) except AuthenticationError: print("Invalid API key") except RateLimitError: print("Rate limited, retry later") except NotFoundError: print("Resource not found") except APIError as e: print(f"API error: {e}") ``` ## Full resource map ``` client.chat.completions.create() client.embeddings.create() client.models.list() client.audio.speech.create() client.audio.transcriptions.create() client.audio.translations.create() client.images.generate(), .edit(), .create_variation() client.moderations.create() client.rerank.create() client.responses.create(), .get(), .list(), .cancel(), .delete() client.agents.create(), .get(), .list(), .update(), .delete() client.agents.sessions.create(), .run_turn(), .run_turn_stream(), .steer(), .cancel(), .complete() client.agents.reviews.submit(), .get(), .list() client.agents.sandboxes.create(), .list_instances(), .stop(), .revive(), .terminate() client.agents.lifecycle.provision(), .sleep(), .wake() client.agents.memories.list(), .create(), .update(), .deactivate(), .delete() client.agents.deployments.create(), .list(), .get(), .update() client.agents.triggers.create(), .list(), .get(), .update(), .delete() client.agents.links.create(), .list(), .delete() client.agents.channels.bind(), .unbind(), .list() client.datasets.create(), .get(), .list(), .update(), .delete() client.datasets.items.create(), .create_batch(), .get(), .list(), .update(), .delete() client.datasets.score_configs.create(), .get(), .list(), .update(), .delete() client.evaluations.runs.create(), .get(), .list(), .cancel(), .delete(), .retry() client.evaluations.runs.get_items(), .get_summary(), .compare(), .set_baseline() client.evaluations.schedules.create(), .get(), .list(), .update(), .delete() client.observability.metrics.get_dashboard(), .get_time_series() client.observability.sessions.list(), .get() client.observability.users.list(), .get() client.observability.outcomes.get_dashboard(), .get_time_series() client.traces.get(), .get_spans(), .get_tree(), .get_rich(), .list_rich(), .get_analytics() client.traces.scores.list(), .create(), .delete() client.traces.performance.breakdown(), .utilization() ``` ## Resources - [Python SDK source](https://github.com/everstacklabs/everstack-python) - [PyPI package](https://pypi.org/project/everstack/) --- ### TypeScript / Node.js Source: https://docs.everstack.ai/sdks/typescript Official Everstack Node.js SDK for gateway and platform APIs. #### Metadata ```yaml title: TypeScript / Node.js description: Official Everstack Node.js SDK for gateway and platform APIs. icon: Code2 ``` The official TypeScript SDK provides typed access to every Everstack API from Node.js and TypeScript applications. OpenAI-managed sessions are available through `client.openaiAgents` or the exported `OpenAIAgents` resource. They use bearer authentication for mutations and preserve caller-supplied idempotency keys. See the [OpenAI Agents API guide](https://docs.everstack.ai/getting-started/agents/openai-agents-api). ## Installation ```bash pnpm add @everstack/node ``` Or with npm: ```bash npm install @everstack/node ``` ## Initialize the client ```typescript import Everstack from "@everstack/node"; const client = new Everstack({ apiKey: process.env.EVERSTACK_API_KEY!, baseUrl: "https://{instance}.{region}.everstack.ai", }); ``` The client accepts these options: - `apiKey` (required) -- your Everstack API key - `baseUrl` -- gateway URL (defaults to `https://{instance}.{region}.everstack.ai`) - `provider` -- default provider for routing (e.g., `"@openai"`) - `orgId` -- organization ID for multi-tenant setups - `userId` -- user ID for tracking and attribution - `headers` -- additional default headers - `timeout` -- request timeout in milliseconds - `maxRetries` -- maximum retry attempts You can also use the async factory method to validate the connection on initialization: ```typescript const client = await Everstack.init({ apiKey: process.env.EVERSTACK_API_KEY!, }); ``` ## Gateway APIs ### Chat completions ```typescript const completion = await client.chat.completions.create({ model: "@openai/gpt-4o-mini", messages: [{ role: "user", content: "Hello" }], }); ``` Streaming: ```typescript const stream = await client.chat.completions.create({ model: "@anthropic/claude-sonnet-4-20250514", messages: [{ role: "user", content: "Write a haiku" }], stream: true, }); for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? ""); } ``` ### Embeddings ```typescript const embeddings = await client.embeddings.create({ model: "@openai/text-embedding-3-small", input: "Everstack routes requests across providers.", }); ``` ### Models ```typescript const models = await client.models.list(); ``` ### Audio Text-to-speech: ```typescript const audio = await client.audio.speech.create({ model: "tts-1", input: "Hello from Everstack.", voice: "alloy", }); ``` Speech-to-text: ```typescript const transcription = await client.audio.transcriptions.create({ model: "whisper-1", file: audioBuffer, }); ``` Translation (audio to English): ```typescript const translation = await client.audio.translations.create({ model: "whisper-1", file: audioBuffer, }); ``` ### Images ```typescript const image = await client.images.generate({ model: "dall-e-3", prompt: "A cat wearing a tiny hat", }); ``` ### Moderations ```typescript const moderation = await client.moderations.create({ input: "Some text to check for policy violations", }); ``` ### Reranking ```typescript const reranked = await client.rerank.create({ model: "rerank-v1", query: "What is Everstack?", documents: ["Everstack is an AI platform.", "Unrelated document."], }); ``` ### Responses (agentic orchestration) ```typescript const response = await client.responses.create({ model: "@openai/gpt-4o", input: "Summarize this document", }); // Streaming const stream = await client.responses.create({ model: "@openai/gpt-4o", input: "Summarize this document", stream: true, }); for await (const event of stream) { // handle response stream events } ``` ## Platform APIs ### Memory ```typescript await client.memory.collections.create({ name: "docs", embedding_model: "text-embedding-3-small", embedding_dimension: 1536, }); await client.memory.collections.addDocuments("docs", { documents: [{ content: "Everstack routes requests across providers." }], }); const results = await client.memory.collections.query("docs", { query: "How does routing work?", }); ``` ### Agents ```typescript const agent = await client.agents.definitions.create({ name: "support-agent", systemPrompt: "You are a concise support assistant.", }); const session = await client.agents.sessions.create({ agentId: agent.agent?.id, }); await client.agents.sessions.runTurn({ sessionId: session.session?.id, input: "Summarize open tickets.", }); ``` ### Datasets and evaluations ```typescript const dataset = await client.datasets.create({ name: "support-regression", }); await client.datasets.items.createBatch({ datasetId: dataset.dataset?.id, items: [{ input: { query: "How do I reset my password?" } }], }); const run = await client.evaluations.runs.create({ datasetId: dataset.dataset?.id, name: "nightly-regression", }); const summary = await client.evaluations.runs.getSummary({ id: run.evalRun?.id ?? "", }); ``` ### Scores ```typescript await client.scores.submit({ traceId: "trace-123", name: "relevancy", value: 0.95, dataType: 1, // NUMERIC source: 2, // API }); const scores = await client.scores.getByTrace({ traceId: "trace-123", }); ``` ### Traces ```typescript const traces = client.traces.list({ limit: 50, }); for await (const trace of traces) { console.log(trace.id, trace.name); } const tree = await client.traces.getTree({ traceId: "trace-123", }); const rich = await client.traces.getRich({ traceId: "trace-123", }); ``` ### Observability ```typescript const dashboard = await client.observability.getMetricsDashboard({}); const sessions = await client.observability.listSessions({}); const timeseries = await client.observability.getMetricsTimeSeries({ metric: "latency", }); ``` ### Channels ```typescript const channels = await client.channels.list({}); await client.channels.create({ platform: "slack", // ... channel config }); await client.channels.test({ id: "channel-id" }); ``` ## Full resource map ``` client.chat.completions.create() client.embeddings.create() client.models.list() client.audio.speech.create() client.audio.transcriptions.create() client.audio.translations.create() client.images.generate(), .edit(), .createVariation() client.moderations.create() client.rerank.create() client.responses.create(), .get(), .cancel(), .del(), .list() client.memory.collections.create(), .list(), .addDocuments(), .query() client.agents.definitions.create(), .list(), .get(), .update(), .delete() client.agents.sessions.create(), .runTurn(), .list(), .get() client.agents.reviews.* client.agents.sandboxes.* client.agents.crons.* client.agents.webhooks.* client.agents.triggers.* client.agents.memories.* client.agents.integrations.github.* client.agents.ssh.* client.agents.lifecycle.* client.agents.links.* client.agents.channels.* client.agents.deployments.* client.datasets.create(), .list(), .get(), .update(), .delete() client.datasets.items.createBatch(), .list() client.datasets.scoreConfigs.* client.datasets.metrics.* client.evaluations.runs.create(), .list(), .get(), .getSummary(), .compare() client.evaluations.schedules.* client.scores.submit(), .submitBatch(), .getByTrace() client.traces.list(), .get(), .getSpans(), .getTree(), .getRich(), .listRich() client.traces.scores.list(), .create(), .delete() client.traces.performance.breakdown(), .utilization() client.traces.workflow.getMetrics() client.traces.observations.listByStep(), .getIO() client.observability.getMetricsDashboard(), .getMetricsTimeSeries() client.observability.listSessions(), .getSession() client.observability.listUsers(), .getUser() client.observability.getOutcomeDashboard(), .getOutcomeTimeSeries() client.channels.create(), .get(), .update(), .delete(), .list(), .test() client.channels.listStatuses(), .listSessions(), .listPlatformChannels() ``` ## OpenAI SDK compatibility You can use the official OpenAI SDK with the Everstack gateway for basic chat, embeddings, and audio: ```typescript import OpenAI from "openai"; import { createOpenAIConfig } from "@everstack/node/compat"; const openai = new OpenAI( createOpenAIConfig({ apiKey: process.env.EVERSTACK_API_KEY!, baseURL: "https://{instance}.{region}.everstack.ai/openai/v1", }) ); ``` This gives you OpenAI SDK ergonomics while routing through Everstack's gateway for caching, rate limiting, and provider failover. For platform features like agents, memory, evaluations, and observability, use the Everstack SDK directly. ## Resources - [Node SDK source](https://github.com/everstacklabs/everstack/tree/main/packages/sdks/everstack-node) - [npm package](https://www.npmjs.com/package/@everstack/node) - [SDK examples](https://github.com/everstacklabs/everstack/tree/main/packages/sdks/everstack-node/examples) --- ## API specification directory Machine-readable OpenAPI files are published by the documentation app. The human-readable API reference above remains the preferred source for model context. Browse the current reference at https://docs.everstack.ai/api-reference. - Agents API: 62 documented paths (agents.json) - Api Keys API: 5 documented paths (api-keys.json) - Auth API: 15 documented paths (auth.json) - Config API: 9 documented paths (config.json) - Functions API: 4 documented paths (functions.json) - Gateway API: 19 documented paths (gateway.json) - Mcp API: 6 documented paths (mcp.json) - Memory API: 7 documented paths (memory.json) - Openai Agents Rest API: 16 documented paths (openai-agents-rest.json) - Openai Agents Rest.source API: 16 documented paths (openai-agents-rest.source.json) - Openai Agents API: 21 documented paths (openai-agents.json) - Providers API: 12 documented paths (providers.json) - Workflows API: 11 documented paths (workflows.json)