Documentation 40
Mock Google Antigravity API quickstart · 3 min read
The coding agent's runs, read-only. Compatible with the Gemini Interactions API.
Scheduled triggers, their executions, the interaction each execution started, the environments those runs worked in and the credentials they used, for one simulated data set. Every pull request a run opened is a real, fetchable pull request on the git hosts.
Coverage, hosts and pinned snapshots for Google Antigravity — 12 of 15 read surfaces served and verified.
Import it instead
Both files list exactly what this host serves — generated from our own coverage manifest, not from Google Antigravity's published specification — and carry no vendor schema: paths, methods and what each one answers, with the base URL and auth header already set. One folder holds a write, so the read-only refusal is something you can press.
Try it — a real request to antigravity.sandboxapis.dev
01 / Base URL + auth
A base-URL swap, nothing else.
Point requests at https://antigravity.sandboxapis.dev. Paths keep their /v1beta prefix, and envelopes, pagination (page_size and page_token, with next_page_token absent on the last page) and error bodies follow the published OpenAPI description of the Interactions API. Auth is any x-goog-api-key value, any ?key= value, any Bearer token, or none at all.
curl -H 'x-goog-api-key: any-key' \
"https://antigravity.sandboxapis.dev/v1beta/triggers"Both official SDKs take a base URL, or read it from GOOGLE_GEMINI_BASE_URL:
from google import genai
client = genai.Client(api_key="any-key", http_options={"base_url": "https://antigravity.sandboxapis.dev"})
for trigger in client.triggers.list().triggers:
print(trigger.id, trigger.display_name, trigger.status)import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({ apiKey: "any-key", httpOptions: { baseUrl: "https://antigravity.sandboxapis.dev" } });
const { triggers } = await client.triggers.list();
for (const t of triggers ?? []) console.log(t.id, t.display_name, t.status);Using a key? Keys & rate limits → A SandboxAPIs key rides the x-goog-api-key slot and lifts the anonymous limit. The Python walk is a verified quickstart →
02 / Finding an interaction
Triggers, then executions, then the run.
The Interactions API has no list of interactions: a real client holds the ids its own create calls returned, and GET /v1beta/interactions answers "Method not found." there as it does here. The read-only way to an id is the trigger walk.
# The scheduled triggers, with their cron schedule and time zone
curl "https://antigravity.sandboxapis.dev/v1beta/triggers"
# One trigger's executions; each names the interaction it started
curl "https://antigravity.sandboxapis.dev/v1beta/triggers/<trigger_id>/executions"
# The run itself: status, usage, environment and its steps
curl "https://antigravity.sandboxapis.dev/v1beta/interactions/<interaction_id>"
# The environment the run worked in, and its files at that commit
curl "https://antigravity.sandboxapis.dev/v1beta/environments/<environment_id>/files/workspace"03 / What is not served
Reads only, and no inference.
Starting a run is inference, and this replica runs no model: POST /v1beta/interactions and every other write answer a 403 saying this universe is read-only. The Gemini model paths on the same version prefix (models/…:generateContent and the rest), streaming (?stream=true), webhooks and voices answer a 404 with an X-SandboxAPIs-Coverage header pointing at the manifest. A step is never a thought: what a run shows is the commands it ran and a short summary of facts the data set already holds.
Both SDKs retry a 429 four times with backoff, so an anonymous caller over the hourly limit sends five requests per call and waits for each. The refusal is not charged, so the cost is time, not budget. A key lifts the limit; a read-only 403 is never retried.
Live host only for now: no pinned snapshot exists for this provider yet, so the data rolls with the live universe. Coverage manifest → · Versioning & pinning →