# Cross-provider comparisons — OpenAI ↔ Anthropic ↔ xAI ↔ Gemini **Status:** synthesis layer over the atlas, extended from two to four providers on 2026-09-18/19. Nothing on these pages was measured independently: every cell points back to a record in `generated/*.json` (statuses copied verbatim) or to a domain page under `docs/openai/`, `docs/anthropic/`, `docs/xai/`, `docs/gemini/`, `docs/tools/`, `docs/models/`, `docs/errors/`. When two sources disagree the disagreement is stated, not resolved. Generators: `scripts/generators/synth/{features,endpoints,pricing,faq}.py` (re-runnable; the other pages are hand-written from the same data). **Sources:** `generated/{models,endpoints,parameters,tools,streaming-events,errors,headers,pricing,deprecations,objects,sdks,webhook-events,rate-limits}.json`, `generated/compatibility/*.json`, `generated/fragments/headers/*.json`, `generated/examples-manifest.json`; vendor documentation as cited on each domain page (https://developers.openai.com/api/docs/… · https://platform.claude.com/docs/en/… · https://docs.x.ai/developers/… · https://ai.google.dev/gemini-api/docs/…). **Last verified:** 2026-09-18 ## Pages | Page | What it answers | Machine-readable twin | |---|---|---| | [models.md](models.md) | Which GPT / Claude / Grok / Gemini model corresponds to which for a given job; context, output, modalities, reasoning modes, tools, prices (incl. xAI ≥200k tier, Gemini >200k tier and free tier), cutoffs, lifecycle; naming (snapshots vs aliases vs `-latest` vs xAI redirect aliases vs Gemini `-preview`); deprecation policies; 29 data inconsistencies | `generated/models.json`, `generated/pricing.json`, `generated/deprecations.json`, `generated/compatibility/model-capability-matrix.json` | | [features.md](features.md) | 125-row Feature × Provider matrix with four columns (how / endpoint / params / status each), coverage count per row, portable yes/no, differences | `generated/compatibility/cross-provider-feature-matrix.json` (`openai`/`anthropic`/`xai`/`gemini` objects, `providers_supporting[]`, `provider_count`) | | [state-management.md](state-management.md) | Stateless replay vs `previous_response_id` / Conversations / xAI stored Responses / Gemini Interactions `previous_interaction_id`; items vs blocks vs parts; system prompt; roles; prefill; storage & retention; compaction | `parameters.json` (`POST /v1/responses` ×2 providers, `POST /v1/messages`, `generateContent`, `interactions`) | | [tool-execution.md](tool-execution.md) | Client tools, hosted/server tools (web/x/Google search, Maps, URL context, code execution, file search / collections / file-search stores, MCP), tool choice, parallel calls, thought signatures, computer use — parameter mapping and the same task on all four | `generated/tools.json`, `generated/compatibility/{model-tool-matrix,gemini-tool-model-matrix}.json` | | [streaming.md](streaming.md) | Four wire formats (OpenAI Responses / xAI Responses, Anthropic Messages / xAI Messages, Chat Completions, Gemini array-or-SSE), event-name mapping table, Interactions events, Realtime / xAI realtime / Live / Lyria WebSocket message families | `generated/streaming-events.json` | | [agents-platforms.md](agents-platforms.md) | OpenAI Agents API vs Claude Managed Agents vs xAI Responses agentic loop (+ Grok Build) vs Gemini Interactions agents (Deep Research, Antigravity, custom agents, environments, triggers) | `endpoints.json` (`agents-platform/*`, `managed-agents`, xai `responses`, gemini `interactions`, `agents`, `environments`, `triggers`, `credentials`, `webhooks`) | | [pricing.md](pricing.md) | Side-by-side price tables for four providers, tier structure, cost models (1M in + 100k out; cached prefix; batch), tool prices | `generated/models.json` (pricing blocks), `generated/pricing.json` | | [caching-and-reasoning.md](caching-and-reasoning.md) | Implicit vs explicit caching (OpenAI, Anthropic `cache_control`, xAI automatic, Gemini implicit + `cachedContents`), TTLs, minimums, multipliers; `reasoning.effort` vs `thinking`+`effort` vs `reasoning_effort`+`reasoning_content` vs `thinkingConfig`+`thoughtSignature` | `parameters.json`, `generated/compatibility/anthropic-feature-model-matrix.json`, `gemini-feature-model-matrix.json` | | [realtime-and-media.md](realtime-and-media.md) | Realtime/Live voice (OpenAI, xAI realtime, Gemini Live), TTS/STT, image / video / music generation, embeddings, moderation — and what Anthropic offers instead | `endpoints.json`, `models.json`, `pricing.json`, `streaming-events.json` | | [responses-vs-chat-completions.md](responses-vs-chat-completions.md) | (existing) OpenAI-internal comparison of the two chat surfaces (xAI mirrors both; see state-management.md) | — | | [../endpoints/index.md](../endpoints/index.md) · [../endpoints/by-status.md](../endpoints/by-status.md) | Full endpoint catalogue (870 rows: OpenAI 359, Anthropic 282, xAI 104, Gemini 125) grouped by provider → family, and grouped by status | `generated/endpoints.json`, `generated/endpoints.csv` | | [../faq.md](../faq.md) | The owner's questions answered with computed tables for four providers (which model accepts X+Y+Z, SSE/WebSocket events, which endpoint creates a session, beta headers vs `/v1beta` paths vs alpha gates, which provider offers X at what price…) | all of the above | ## Feature coverage summary (from `cross-provider-feature-matrix.json`, 125 features) | Coverage | Count | Examples | |---|---|---| | On all four providers | 45 | primary generation endpoint, system prompt, multi-turn, token counting, structured outputs, strict tool arguments, sampling params, stop sequences, refusal signalling, function calling, tool choice, parallel calls, web search, code execution, remote MCP, citations, image & PDF input, Files API, batch, prompt/context caching, reasoning control, reasoning visibility & replay, context window, max output, service tiers, end-user id, rate-limit tiers, overload error, error envelope, authentication, SDKs, webhooks, usage reporting, cloud availability, ZDR/data-use, agent harness / session / input / stream, client agent framework | | On three | 34 | OpenAI + xAI + Gemini (14: chat-completions surface, response storage, background/deferred, JSON mode, managed RAG, image generation, TTS, STT, realtime voice, video, resumable upload, pro/extended compute, OpenAI-compat layer…) · OpenAI + Anthropic + xAI (12: tool search, shell, skills, stand-alone compaction, rate-limit headers, request id, admin API, audit, spend limits, data residency, self-hosted execution, multi-agent) · OpenAI + Anthropic + Gemini (6: computer use, tunnels/credentials, in-flight compaction, hosted sandbox, vaults, artifacts) · Anthropic + xAI + Gemini (2: task/session budgets) | | On two | 16 | OpenAI + Anthropic (6: programmatic tool calling, file editing tool, cache diagnostics, mid-conversation effort/tool changes, beta header) · OpenAI + Gemini (5: safety thresholds, async tools, container/environment API, audio-video input, embeddings) · Anthropic + Gemini (3: web fetch / URL context, version header/path, scheduled runs) · xAI + Gemini (1: X search / Maps grounding) · Anthropic + xAI (1: Anthropic-compatible `/v1/messages`) | | Unique to OpenAI | 15 | legacy completions that still answer, verbosity, logprobs, grammar tools, tool namespaces, SaaS connectors, Live delegation, moderation endpoint, content provenance, ChatKit/workspace agents, fine-tuning, evals, graders, stored completions, prompt templates | | Unique to Anthropic | 8 | assistant prefill (deprecated), server-side fallback, memory tool, browser toolset, advisor, server-side context editing, outcome grading, memory stores/dreams | | Unique to xAI | 2 | per-request dollar cost (`cost_in_usd_ticks`), retired-model redirect aliases (`x_search` is grouped with Gemini Maps under "social / vertical search") | | Unique to Gemini | 1 | music generation (Lyria) — Google Search/Maps grounding, URL context, native audio/video input, free tier and Interactions agents are counted in shared rows | | On none (legacy/absent) | 4 | idempotency keys, retired agent APIs, retired media models, retired text models | | Marked portable | 86 | same task expressible on every provider that offers it | Per-provider supported rows: OpenAI 103 · Anthropic 83 · xAI 77 · Gemini 77. ## Methodology 1. **Objective differences only.** Pages describe what each API accepts, returns and charges. No "winner", no quality judgement about model outputs. Where a capability exists on a subset of providers it is marked "— not offered" on the others. 2. **Statuses are inherited, never upgraded.** A cell says `LIVE_VERIFIED` only if the underlying record was called successfully with this atlas's keys on 2026-09-18/19. `DOCUMENTED` = in current official docs, not tested; `ACCOUNT_RESTRICTED` = documented but our key was refused — for **xAI** that means the Management API (separate key), the Skills API, `/v1/embeddings` and alpha `tool_search`; for **Gemini** it means paid-tier-only models and features probed with a **free-tier key** (Pro models, image/video/music generation, `cachedContents`, Batch, Google Search grounding quota). A 403/404/429-with-limit-0 never means "does not exist". `BETA`/`PREVIEW` = gated by header (Anthropic, OpenAI), by `/v1beta` path or `-preview` id (Gemini), or by product stage (xAI multi-agent, Grok Build). `GA` appears only on Gemini fragments. 3. **Current models only in the model table.** OpenAI: GPT-6 Astra, GPT-5.6 Sol/Terra/Luna, GPT-5.5(-pro), GPT-5.4(-pro/-mini/-nano), GPT-5.3-codex, GPT-5.2, GPT-5.1, GPT-5 family, o3/o3-pro/o4-mini (deprecated), GPT-4.1/4o lines. Anthropic: Fable 5.1 / 5, Mythos 5.1 / 5 (invite), Opus 5 / 4.8 / 4.7 / 4.6 / 4.5, Sonnet 5 / 4.6 / 4.5, Haiku 4.5. xAI: grok-4.6, grok-4.5, grok-4.3, grok-4.20-0309-reasoning / -non-reasoning / multi-agent (beta), grok-build-0.1 (preview), Imagine image/video, voice models. Gemini: 3.8 / 3.7 / 3.6 / 3.5 Flash, 3.5 Flash-Lite, 3.1 Pro Preview, 3.1 Flash-Lite (deprecated), 3 Flash Preview, 2.5 family (blocked for new users), Gemma 4, Live / TTS / transcribe / image / Veo / Lyria / embedding models, Interactions agents. Retired ids appear only in the lifecycle sections. 4. **Equivalence ≠ identity.** "Portable" means the same *task* can be expressed with an equivalent parameter on **every provider that offers the feature**; a single-provider feature is never portable. The per-topic pages give the exact parameter mapping and a JSON quad ("the same task on all four providers"); the differences column lists what does not carry over (defaults, limits, billing, gating). xAI's Responses/Chat/Realtime surfaces reuse OpenAI's wire formats, so OpenAI↔xAI mappings are often literal; Gemini's `generateContent` (camelCase parts) and Interactions (snake_case steps) are distinct shapes. 5. **Prices** come from `generated/pricing.json` and the `pricing` block of `generated/models.json` (vendor pricing and model pages retrieved 2026-09-18; xAI also from the live catalogue price ticks). Cost models are arithmetic on those list prices; no invoice was reconciled. Provider-specific rules that change the arithmetic are stated next to each table: xAI bills reasoning tokens on every call and applies its ≥200k-token tier to the whole request; Gemini 3.6–3.8 Flash prices are introductory until 2026-12-31 and Gemini has a $0 tier; only Anthropic and GPT-5.6+ charge cache writes. 6. **Traceability.** The JSON twin of the feature matrix carries a `ref` per row (file or docs page). The FAQ shows the `jq` used for each computed table. Endpoint pages are rendered from `generated/endpoints.json` without manual edits. 7. **Known data inconsistencies** found while synthesising are listed at the end of [models.md](models.md#9-data-inconsistencies-found-during-synthesis) (29 items, 13 new for xAI/Gemini) so the fragment owners can fix them at the source (`generated/fragments/**`), never in the merged files. ## Vocabulary map (the same idea, four names) | Concept | OpenAI | Anthropic | xAI | Gemini | |---|---|---|---|---| | One model call | Response (`resp_…`) | Message (`msg_…`) | Response (`resp_…`) / Chat Completion | `GenerateContentResponse` (`responseId`) / Interaction (`v1_…`) | | Unit of context | Item (`message`, `function_call`, `reasoning`, …) | Content block (`text`, `tool_use`, `thinking`, …) | Item (OpenAI shapes; `custom_tool_call` for x_search) | Part inside a `Content` (`text`, `inlineData`, `functionCall`, `thoughtSignature`, …) / Step (Interactions) | | Assistant role | `assistant` | `assistant` | `assistant` | `model` | | System prompt | `instructions` / `developer` message | `system` | `instructions` / `system` message | `systemInstruction` / `system_instruction` | | Your tool | `function` / `custom` tool → `function_call` → `function_call_output` | custom tool → `tool_use` → `tool_result` | `function` → `function_call` → `function_call_output` (Chat: `tool_calls` → `role: tool`) | `functionDeclarations[]` → `functionCall` (+ `thoughtSignature`) → `functionResponse` | | Vendor-run tool | hosted tool (`web_search`, `code_interpreter`, `file_search`, `mcp`, `shell`, `image_generation`) | server tool (`web_search_*`, `web_fetch_*`, `code_execution_*`, `tool_search_*`, `advisor_*`, `mcp_toolset`) | server-side tool (`web_search`, `x_search`, `code_interpreter`, `file_search`/`collections_search`, `mcp`, `image_generation`, attachment search) | built-in tool (`googleSearch`, `googleMaps`, `urlContext`, `codeExecution`, `fileSearch`, `mcpServers`) | | Vendor-defined, you-run tool | `computer`, `apply_patch`, `shell` (local) | `bash_*`, `text_editor_*`, `memory_*`, `computer_*`, `browser_toolset_*` | `shell` (local) | `computerUse` (predefined `functionCall`s) | | Hidden reasoning | reasoning item, `reasoning_tokens`, `encrypted_content` | `thinking` block, `thinking_tokens`, `signature` | `reasoning` item / `reasoning_content` text, `reasoning_tokens`, `encrypted_content` | `thought: true` parts, `thoughtsTokenCount`, `thoughtSignature` | | Reasoning depth | `reasoning.effort` | `output_config.effort` (+ `thinking.type`) | `reasoning.effort` / `reasoning_effort` | `thinkingConfig.thinkingLevel` (+ legacy `thinkingBudget`) | | Cache control | implicit prefix cache, `prompt_cache_key`, `prompt_cache_breakpoint` (5.6+) | `cache_control {type: ephemeral, ttl}` | automatic; `prompt_cache_key` / `x-grok-conv-id` routing | implicit; explicit `cachedContents` + `cachedContent` | | Structured output | `text.format {type: json_schema}` | `output_config.format {type: json_schema}` | `text.format` / `response_format.json_schema` | `responseMimeType` + `responseJsonSchema` / `responseFormat.text.schema` | | Async discount | Batch API (JSONL file) / `flex` tier | Message Batches (inline `requests[]`) | Batch API (inline or JSONL; −20 %, three models) | Batch (`:batchGenerateContent`) / `flex` tier | | Faster tier | `service_tier: fast` | `speed: fast` | `service_tier: priority` | `serviceTier: priority` | | Context shrink | `context_management` compaction / `POST /v1/responses/compact` | `context_management.edits` / `compaction` param | `POST /v1/responses/compact` | Live `contextWindowCompression`; Antigravity auto-compaction | | Beta gate | `OpenAI-Beta: =v1` | `anthropic-beta: -` | none (account ACL / alpha) | `/v1beta` path, `-preview` model id | | Managed harness | Agents API (agent, session, turn, item, environment) | Managed Agents (agent version, session, thread, event, environment) | Responses agentic loop (`max_turns`, stored response) · Grok Build CLI | Interactions API (`agent`, environment, trigger, credential) | | Secrets for agents | Vaults | Vaults | inline `authorization`/`headers` | Credentials | | Per-org admin | Admin API key (`sk-admin-…`), org/projects | Admin API key (`sk-ant-admin01-…`), org/workspaces | Management key (`management-api.x.ai`), team | Google Cloud project / IAM (no Developer-API admin surface) | | Overload | HTTP 503 `server_is_overloaded` | HTTP 529 `overloaded_error` | HTTP 429 / 5xx `internal` | HTTP 503 `UNAVAILABLE` | | Exact cost of a call | Admin costs report | cost report | `usage.cost_in_usd_ticks` in the response | Cloud Billing |