Agent platforms — OpenAI Agents API · Claude Managed Agents · xAI Responses loop + Grok Build · Gemini Interactions agents
Status: endpoint inventory and statuses from generated/endpoints.json (OpenAI agents-platform/agents 34 + vaults 9 + chatkit 6 + workspace-agents 2; Anthropic managed-agents 96; xAI responses 5 + skills 5 (ACCOUNT_RESTRICTED); Gemini interactions 9 + agents 4 + environments 7 + triggers 7 + credentials 5 + webhooks 7), events from generated/streaming-events.json and generated/webhook-events.json, parameters from generated/parameters.json (OpenAI agents 396 rows, Anthropic managed-agents 1,122, xAI POST /v1/responses 281, Gemini POST /v1beta/interactions 147, environments 14). Live: OpenAI 23/47 operations LIVE_VERIFIED (gpt-5.6-luna); Anthropic 20/96 (claude-haiku-4-5-20251001); xAI Responses agentic loop with web search / code interpreter / MCP LIVE_VERIFIED (grok-4.3); Gemini Interactions create/get/cancel/delete + Deep Research background run + environments CRUD LIVE_VERIFIED, custom agents / triggers / credentials / webhooks not tested. OpenAI and Anthropic are BETA; Gemini agents are PREVIEW; xAI's loop is GA with a BETA multi-agent model.
Sources: https://developers.openai.com/api/docs/guides/agents-api/overview · https://platform.claude.com/docs/en/managed-agents/overview · https://docs.x.ai/developers/tools/overview · https://docs.x.ai/build (Grok Build) · https://ai.google.dev/gemini-api/docs/interactions · https://ai.google.dev/gemini-api/docs/deep-research · https://ai.google.dev/gemini-api/docs/antigravity · docs/openai/agents-api.md · docs/anthropic/managed-agents.md · docs/xai/responses.md · docs/xai/grok-build.md · docs/gemini/interactions-api.md
Last verified: 2026-09-18
1. Positioning
| OpenAI Agents API | Claude Managed Agents | xAI Responses agentic loop (+ Grok Build) | Gemini Interactions agents | |
|---|---|---|---|---|
| What runs where | OpenAI hosts the Codex harness (model + tool loop + compaction + recovery); you supply tools, input and optionally your own execution environment | Anthropic hosts a pre-built agent harness (model loop, built-in tools in a Linux sandbox, compaction, persisted history); you handle only custom tools |
No agent resource. One POST /v1/responses runs the model and its server-side tools (web/x search, code interpreter, collections, MCP, image generation) in a loop bounded by max_turns; the stored response is the session. Grok Build (grok CLI, BETA) is a client-side coding harness with MCP, hooks, skills, subagents and a local sandbox |
Google hosts agents as models: POST /v1beta/interactions {agent: …} runs Deep Research (research loop with search/URL/code tools, background) or Antigravity (coding agent in a Linux sandbox) or a custom managed agent you define with POST /v1beta/agents; environments, credentials, triggers, webhooks are separate resources |
| Gate | OpenAI-Beta: agents=v1; restricted keys need api.agents.* scopes |
anthropic-beta: managed-agents-2026-04-01 (+ agent-memory-2026-07-22, dreaming-2026-04-21, mcp-tunnels-2026-06-22) |
none (no beta headers); grok-4.20-multi-agent-0309 BETA; Skills API 404 (ACCOUNT_RESTRICTED); tool_search alpha (403) |
/v1beta path; agents PREVIEW; GET /v1beta/interactions (list) 404; /v1/interactions GA but UNVERIFIED |
| Models | Responses-capable current models; live gpt-5.4-nano rejected, gpt-5.6-luna accepted |
Claude 4.5+ (Fable 5.1/5, Sonnet 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 4.6, Haiku 4.5) | any Grok text model (grok-4.6, grok-4.5, grok-4.3, 4.20 ids, grok-build-0.1); multi-agent model for fan-out |
Deep Research agents (deep-research-preview-04-2026, -max-, -pro-preview-12-2025), Antigravity (antigravity-preview-09-2026, model gemini-3.8-flash default / 3.7 / 3.6 / 3.5 Flash / 3.5 Flash-Lite), custom agents built on base_agent: antigravity-preview-09-2026 |
| Billing | model tokens at Responses rates + hosted-tool rates + container rates; harness base instructions ≈ 6k input tokens per turn observed | model tokens at list price + $0.08 per session-hour + $10 / 1k web searches | model tokens (incl. intermediate steps and reasoning) + per-call tool fees ($5/1k web/x/code, $2.50/1k collections, $10/1k attachments); usage.cost_in_usd_ticks per call; $0.05 fee per pre-generation policy violation |
model inference at list rates incl. intermediate/reasoning tokens + tool fees; sandbox compute unbilled during preview; Deep Research est. $1–3 / $3–7 per task; Antigravity est. $0.25–3.25 per interaction |
| Data retention | server-side sessions/items; hosted sandbox ~1 h idle | stateful by design → not ZDR / HIPAA eligible; sandbox state 30 days | stored responses 30 days (store: true; ZDR teams cannot store) |
interactions 55 days paid / 1 day free (store: false = stateless, no id); environments idle 15 min, deleted 7 days |
| Also on | api.openai.com only | Claude API and Claude Platform on AWS | api.x.ai (+ Vertex Model Garden / Foundry for the model, not the loop) | Gemini Developer API only (not Vertex AI) |
2. Resource model side by side
| Concept | OpenAI | Anthropic | xAI | Gemini | Notes |
|---|---|---|---|---|---|
| Agent definition | POST /v1/agents (model, name, instructions, reasoning, text, service_tier, tools[] ≤2000, multi_agent, metadata); not versioned |
POST /v1/agents (name, model, system ≤100k, tools[] ≤128, mcp_servers[] ≤20, skills[], multiagent); versioned; archive |
none — the request body (model, instructions, tools[], max_turns) is the definition; Grok Build stores agent config in ~/.grok/config.toml |
POST /v1beta/agents {id, base_agent, agent_config, system_instruction, tools[], base_environment} (≤1,000/project, no versioning, reserved id prefixes); built-in agents need no definition |
|
| Execution environment | per session environment: none | openai_hosted{…} | self_hosted{…}; templates /v1/agents/environments/templates |
POST /v1/environments (cloud sandbox Ubuntu 24.04, 8 GB RAM, 10 GB disk | self_hosted work queue); reusable |
none (Python code interpreter has no container object); shell {environment: local} runs on your machine |
POST /v1beta/environments {sources[] (repository ≤500 MB | gcs ≤2 GB | inline), network (unrestricted | disabled | allowlist + credentials), from_environment}; Antigravity sandbox 4 vCPU / 16 GB (Python 3.12, Node 22); referenced by interaction.environment {environment_id} |
|
| Session | POST /v1/agents/sessions {agent|agent_id, environment*, input, stream, vault_ids} → 201 agent.session; statuses idle → in_progress → requires_action → … |
POST /v1/sessions {agent*, environment_id*, initial_events, resources[], vault_ids[], budget, title} → 200 session; idle/running/rescheduling/terminated |
POST /v1/responses {…, store: true} → response (completed | in_progress | incomplete); continue with previous_response_id |
POST /v1beta/interactions {agent|model, input, background, store, environment, tools, webhook_config} → interaction (queued, in_progress, requires_action, completed, incomplete, failed, cancelled); chain with previous_interaction_id |
|
| Unit of work | turn (GET …/turns[/{id}]) |
model requests (spans) | one POST /v1/responses (up to max_turns server-side iterations) |
one interaction (Deep Research runs ≤60 min in background) | |
| History | items (GET …/items) |
events (GET …/events) |
GET /v1/responses/{id}/input_items + output[] |
GET /v1beta/interactions/{id} → steps[] (user_input, thought, model_output, function_call/result, *_call/*_result) |
|
| Live stream | SSE on POST /sessions {stream:true} or GET …/events?stream=true; 31 events |
GET /v1/sessions/{id}/events/stream; 37 events |
the Responses SSE stream (24 events) or wss://api.x.ai/v1/responses |
stream: true → 15 event types; resume GET …?stream=true&last_event_id= |
|
| Client → server events | agent.session.input.message | tool_result | cancel |
user.message, user.interrupt, user.tool_confirmation, user.custom_tool_result, user.tool_result, user.define_outcome, system.message |
a new POST /v1/responses (function_call_output, shell_call_output, user message) |
a new POST /v1beta/interactions with previous_interaction_id (function_result steps, text); POST …/cancel |
|
| Tool execution | function tools → required_actions[]; MCP; web_search; tool_search; programmatic_tool_calling; sandbox shell |
built-in agent_toolset_20260401 in the sandbox; custom tools; MCP via mcp_servers + vaults; permission_policy |
server tools run inside the loop; function/shell calls end the request; MCP without approvals |
Deep Research default tools google_search, url_context, code_execution (+ mcp_server, file_search); Antigravity built-ins (code_execution bash/python/node, view_file, write_to_file, replace_file_content, list_dir, find_by_name, grep_search) + custom function tools; hooks .agents/hooks.json |
|
| Skills | environment.skills[] ≤200 |
agent.skills[] ≤500 |
shell.environment.skills[] (Skills API 404); Grok Build loads skills locally |
custom agents mount .agents/skills/<name>/SKILL.md from environment sources |
|
| Files in / out | files[], POST /v1/agents/environments/{id}/files; artifacts |
resources[] {type: file, mount_path}; outputs → Files API scope_id |
input_file (attachment search $10/1k); outputs via include / Files API |
environment sources[], PUT /upload/v1beta/environments/{env}/files/{path} (≤2 GiB); outputs GET …/files/{path}?alt=media; Deep Research reports as model_output steps |
|
| Secrets | Vaults + mcp.credential_id |
Vaults (mcp_oauth, environment_variable) |
inline authorization/headers on the mcp tool |
Credentials (bearer_token, oauth2, environment_variable; injection_location, trusted_domains) referenced by environment network allowlists |
|
| Multi-agent | multi_agent.enabled; subagents /sessions/{id}/subagents… |
multiagent {coordinator, agents[]}; threads ≤25 |
grok-4.20-multi-agent-0309: 4 or 16 agents inside one call (reasoning.effort) |
none for custom agents (docs); Deep Research orchestrates internally | |
| Budgets | none (session_budget_exceeded error exists) |
budget {max_list_cost}; session.budget_reached |
max_turns (turns) |
Antigravity agent_config.max_total_tokens → incomplete |
|
| Quality loop | — | user.define_outcome → grader iterations |
— | — | |
| Memory | — | memory stores /v1/memory_stores, dreams |
— | — | |
| Scheduling | — | /v1/deployments (cron) → /v1/deployment_runs |
— | /v1beta/triggers {schedule, time_zone, interaction}; PATCH {status: paused|active}; POST …/executions |
|
| Private MCP | Secure MCP Tunnel (tunnel_id) |
/v1/tunnels |
— | — (credentials + allowlists) | |
| Webhooks | agent.session.* via /v1/webhook_endpoints |
44 Managed Agents events (Console-registered) | SIP realtime.call.incoming only |
/v1/webhooks (create/list/get/update/delete/rotate_secret) + per-request webhook_config {uris[], user_metadata}; events interaction.completed|failed|cancelled|requires_action, batch.succeeded|failed; JWKS-signed |
|
| Observability | items, turns, traces (404 live) | events, session.usage, Console viewer, ant beta:sessions connect |
usage.cost_in_usd_ticks, server_side_tool_usage_details, num_server_side_tools_used |
usage {total_*_tokens, *_by_modality, grounding_tool_count[]}, steps[] timeline |
|
| UI kit | ChatKit (Agent Builder shutdown 2026-11-30) | — | — | AI Studio (builder, free) |
3. Endpoint inventory (counts from generated/endpoints.json)
| Family | OpenAI (34 + 9 + 6 + 2) | Anthropic (96) | xAI (5 + 5) | Gemini (9 + 4 + 7 + 7 + 5 + 7) |
|---|---|---|---|---|
| agents | /v1/agents[/{id}] (5) |
/v1/agents[/{id}], /archive, /versions (6) |
— | /v1beta/agents[/{id}] (4; POST/GET/GET/DELETE) |
| sessions / runs | /v1/agents/sessions… (20) |
/v1/sessions…, /threads… (19) |
POST /v1/responses, GET/DELETE /v1/responses/{id}, GET …/input_items, POST /v1/responses/compact (5) |
POST /v1beta/interactions, GET/DELETE /v1beta/interactions/{id}, POST …/cancel, /v1/interactions… (GA, UNVERIFIED) (9) |
| environments | /v1/agents/environments/{id}[/files], /templates[/{id}] (7) |
/v1/environments…, /work… (14) |
— | /v1beta/environments[/{id}], …/files/{path}, PUT /upload/v1beta/environments/{env}/files/{path}, legacy GET /v1beta/files/environment-{env}:download (7) |
| secrets | /v1/vaults… (9) |
/v1/vaults… (13) |
— | /v1beta/credentials[/{id}] (5) |
| memory / dreams | — | 14 + 5 | — | — |
| scheduling | — | /v1/deployments… (7), /v1/deployment_runs… (2) |
— | /v1beta/triggers[/{id}], …/executions (7) |
| tunnels / profiles | — | 10 + 5 | — | — |
| skills | /v1/skills… (11) |
/v1/skills… (9) |
/v1/skills… (5, all 404 → ACCOUNT_RESTRICTED) |
— |
| webhooks | /v1/webhook_endpoints… (8) |
Console only | POST /v2/phone-numbers (SIP webhook) |
/v1/webhooks… (7) |
| UI / workspace | /v1/chatkit/… (6), api.chatgpt.com/v1/workspace_agents/… (2) |
— | — | — |
4. The same task on all four providers — run one agentic turn and stream it
# OpenAI (LIVE_VERIFIED shapes; header OpenAI-Beta: agents=v1)
curl https://api.openai.com/v1/agents -H "Authorization: Bearer $OPENAI_API_KEY" -H "OpenAI-Beta: agents=v1" -H "Content-Type: application/json" \
-d '{"model":"gpt-5.6-luna","name":"atlas-demo","instructions":"Reply with OK.","reasoning":{"effort":"low"}}'
curl -N https://api.openai.com/v1/agents/sessions -H "Authorization: Bearer $OPENAI_API_KEY" -H "OpenAI-Beta: agents=v1" -H "Content-Type: application/json" \
-d '{"agent_id":"agent_…","environment":{"type":"none"},"input":"Reply with OK.","stream":true}'
# SSE: agent.session.created → agent.session.turn.created → …output_text.delta → agent.session.turn.completed → agent.session.idle# Anthropic (LIVE_VERIFIED shapes; header anthropic-beta: managed-agents-2026-04-01)
H=(-H "x-api-key: $ANTHROPIC_API_KEY" -H "anthropic-version: 2023-06-01" -H "anthropic-beta: managed-agents-2026-04-01" -H "content-type: application/json")
curl https://api.anthropic.com/v1/agents "${H[@]}" -d '{"name":"atlas-demo","model":"claude-haiku-4-5-20251001","system":"Reply with OK."}'
curl https://api.anthropic.com/v1/environments "${H[@]}" -d '{"name":"atlas-env","config":{"type":"cloud"}}'
curl https://api.anthropic.com/v1/sessions "${H[@]}" -d '{"agent":"agent_…","environment_id":"env_…","initial_events":[{"type":"user.message","content":[{"type":"text","text":"Reply with OK."}]}]}'
curl -N "https://api.anthropic.com/v1/sessions/sesn_…/events/stream" "${H[@]}"
# SSE: session.status_running → span.model_request_start → agent.message → span.model_request_end → session.usage → session.status_idle# xAI (LIVE_VERIFIED shapes; no agent resource — the Responses call is the agentic loop)
curl -N https://api.x.ai/v1/responses -H "Authorization: Bearer $XAI_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"grok-4.3","input":"What is the latest xAI release note? Reply in one line.",
"tools":[{"type":"web_search"},{"type":"code_interpreter"}],"max_turns":3,"store":true,"stream":true}'
# SSE: response.created → response.output_item.added(reasoning) → … → response.output_item.added(web_search_call) → response.output_item.done
# → response.output_item.added(message) → response.output_text.delta… → response.completed (usage.server_side_tool_usage_details, cost_in_usd_ticks)
# follow-up: POST /v1/responses {"model":"grok-4.3","previous_response_id":"resp_…","input":"Summarise in 5 words."}# Gemini (LIVE_VERIFIED shapes; snake_case body; header x-goog-api-key)
curl -N https://generativelanguage.googleapis.com/v1beta/interactions -H "x-goog-api-key: $GEMINI_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"gemini-3.5-flash-lite","input":"Reply with OK.","tools":[{"type":"code_execution"}],"stream":true}'
# SSE: interaction.created → interaction.status_update → step.start(thought) → step.delta{thought_signature} → step.stop → step.start(model_output) → step.delta{text} → step.stop → interaction.completed → done
# agent run (background, LIVE_VERIFIED create → in_progress → cancel):
curl https://generativelanguage.googleapis.com/v1beta/interactions -H "x-goog-api-key: $GEMINI_API_KEY" -H "Content-Type: application/json" \
-d '{"agent":"deep-research-preview-04-2026","input":"Summarise the four providers'"'"' agent APIs.","background":true,"agent_config":{"type":"deep-research","thinking_summaries":"auto"}}'
# poll GET /v1beta/interactions/{id} · stop POST /v1beta/interactions/{id}/cancelFollow-up input: OpenAI POST /v1/agents/sessions/{id}/events {"events":[{"type":"agent.session.input.message","content":"…"}]}; Anthropic POST /v1/sessions/{id}/events {"events":[{"type":"user.message","content":[{"type":"text","text":"…"}]}]}; xAI POST /v1/responses {"previous_response_id":"resp_…","input":"…"}; Gemini POST /v1beta/interactions {"model":"…","previous_interaction_id":"v1_…","input":"…"}.
5. Function-tool round trip inside a session
| Step | OpenAI | Anthropic | xAI | Gemini |
|---|---|---|---|---|
| declare | agent.tools: [{type: function, name, description, parameters}] |
agent.tools: [{type: custom, name, description, input_schema}] |
tools: [{type: function, name, description, parameters}] on the Responses call |
tools: [{type: function, name, description, parameters}] (Interactions) / functionDeclarations (generateContent); custom agents: tools[] in the agent definition |
| call surfaces | stream agent.session.requires_action; session.required_actions[{type: function_call, turn_id, call_id, name, arguments}]; webhook agent.session.action_required |
stream agent.custom_tool_use {id, name, input} then session.status_idle {stop_reason: {type: requires_action}}; webhook session.requires_action |
output[] {type: function_call, call_id, name, arguments}; the server loop ends and the response completes |
status: requires_action; steps[] {type: function_call, id, name, arguments}; stream interaction.requires_action (DOCUMENTATION_INCOMPLETE); webhook interaction.requires_action |
| answer | POST …/events {type: agent.session.input.tool_result, turn_id, call_id, success, output} |
POST …/events {type: user.custom_tool_result, custom_tool_use_id, content} |
POST /v1/responses {previous_response_id, input: [{type: function_call_output, call_id, output}]} (fresh max_turns) |
POST /v1beta/interactions {previous_interaction_id, input: [{type: function_result, call_id, name, result}]} |
| approvals | MCP require_approval |
permission_policy: always_ask → user.tool_confirmation |
none | computer use safety_decision → safety_acknowledgement |
| self-hosted commands | codex exec-server runs shell; command_execution items |
worker claims work items, posts user.tool_result |
shell {environment: local} → shell_call → shell_call_output; Grok Build runs locally |
— |
6. Sandboxes and self-hosting
| OpenAI hosted | Anthropic cloud | Gemini environment (Antigravity / custom agents) | OpenAI self-hosted | Anthropic self-hosted | xAI | |
|---|---|---|---|---|---|---|
| Base | /workspace; packages, ≤16 setup commands, network enabled|disabled|restricted, env vars |
Ubuntu 24.04, 8 GB RAM, 10 GB disk, /workspace, /mnt/session/{uploads,outputs}, /mnt/memory |
Linux, 4 vCPU / 16 GB, Python 3.12, Node 22; sources[] repository/GCS/inline; network unrestricted / disabled / allowlist (+ credentials); hooks .agents/hooks.json |
codex exec-server --remote …, outbound-only, CODEX_API_KEY |
work queue poll/ack/heartbeat/stop; ant beta:worker; sk-ant-oat01-… |
no hosted sandbox for agents (code interpreter runs Python without a container object; shell local; Grok Build Landlock/Seatbelt sandbox on your machine) |
| Lifetime | ~1 h idle | checkpointed; 30 days | idle after 15 min, deleted after 7 days; from_environment clones |
your compute | your compute | your compute |
| Outputs | artifacts from /workspace/outputs (≤200 MiB) |
files from /mnt/session/outputs (Files API) |
GET /v1beta/environments/{env}/files/{path}?alt=media (bytes or tar) |
never published as artifacts | posted as tool results | code_interpreter_call.outputs via include; Files API |
| Templates / reuse | /v1/agents/environments/templates |
environments are reusable resources | base_environment on custom agents; from_environment |
— | — | — |
| Compute price | container rates | $0.08 / session-hour | not billed during preview | — | — | $5 / 1k code-interpreter calls |
7. Limits (documented)
| Limit | OpenAI | Anthropic | xAI | Gemini |
|---|---|---|---|---|
| tools per agent / request | 2,000 | 128 (across toolsets); 20 MCP servers | ≤350 (Chat); MCP servers: multiple allowed, no cap documented | 512 function declarations (SDK); custom agents ≤1,000 per project |
| skills | 200 per environment | 500 per session | Skills API inaccessible (404) | via environment sources (≤500 MB repo / 2 GB GCS / 1 MB inline files) |
| files | 50 per create; inline 5 MiB; artifact 200 MiB | 500 per session; body 32 MB | Files 50 MB (spec) / 512 MB (guide); attachments $10/1k | environment upload ≤2 GiB per file; Files API 2 GB / 20 GB project |
| concurrency | max_concurrent_subagents 6 |
25 threads; roster 20 | multi-agent model 4 or 16 agents; RPS 9→56 for that model | Deep Research ≤60 min per run; environments per project quota (storage.tier: free, 1 GiB observed) |
| rate limits | none documented for Agents endpoints | create 300 / read 1,200 req/min/org | Responses share the model's RPS/TPM tiers; Batch bypasses | per-project RPM/TPM/RPD; agents not on the free tier (Deep Research LIVE_VERIFIED here on create/cancel) |
| retention | sessions server-side; sandbox ~1 h | sandbox 30 days | stored responses 30 days | interactions 55 d paid / 1 d free; environments 7 days |
| webhook delivery | Standard Webhooks retries | ≤3 attempts, 5-min freshness | HMAC-SHA256 Standard Webhooks (SIP only) | JWKS-signed; webhook_config.uris[] per request or /v1/webhooks resources |
8. Where the other building blocks sit
| Need | OpenAI | Anthropic | xAI | Gemini |
|---|---|---|---|---|
| Client-side agent loop library | Agents SDK (openai-agents, @openai/agents) |
Claude Agent SDK; ant CLI; SDK tool_runner |
Grok Build CLI (grok, grok -p … --output-format json, grok agent stdio ACP; api_backend = chat_completions|responses|messages); xai-sdk Python; OpenAI SDK with baseURL |
google-genai automatic function calling, mcpToTool(); Genkit, Firebase AI Logic, Vercel AI SDK, LangGraph/CrewAI/LlamaIndex |
| Durable chat state without a harness | Conversations API + Responses | Messages (stateless) — none | stored Responses + previous_response_id |
Interactions with model + previous_interaction_id |
| Visual builder / embedded UI | Agent Builder (shutdown 2026-11-30) + ChatKit; Workspace Agents in ChatGPT | Console visual builder, session viewer | Grok Apps / Grok Bot (consumer products) | AI Studio (free), Antigravity IDE product |
| Research agent product | deep-research models retired; Responses web_search + background |
web search + web fetch on Messages; Managed Agents | Responses with web_search + x_search + code_interpreter, max_turns 10+ |
Deep Research agents (background: true, collaborative_planning, visualization) |
| Retired predecessor | Assistants API (RETIRED 2026-08-26) | — | Live Search on Chat (410); /v1/messages compat (deprecated) |
Interactions legacy schema (outputs, content.* events) removed 2026-06-08; antigravity-preview-05-2026 → 2026-10-05 |
Related: features · state-management · tool-execution · streaming · docs/openai/agents-api.md · docs/anthropic/managed-agents.md · docs/xai/responses.md · docs/xai/grok-build.md · docs/gemini/interactions-api.md.