Google Antigravity API sandbox

Google Antigravity

Point a client for the Gemini Interactions API at https://antigravity.sandboxapis.dev, a base-URL swap. Paths are /v1beta/… exactly as on generativelanguage.googleapis.com. The JavaScript SDK (@google/genai) takes `httpOptions: { baseUrl }`; the Python SDK (google-genai) takes `http_options={"base_url": ...}`; both also read the GOOGLE_GEMINI_BASE_URL environment variable. Auth: any x-goog-api-key value, any ?key= value, any 'Authorization: Bearer' token, or none at all. WHAT IS RENDERED: the Antigravity managed agent's runs in this data set, read-only: the scheduled triggers, each trigger's executions, the interaction every execution started (status, usage, environment and its steps: the shell commands the agent ran and a short fact-only summary, never a thought step), the agent environments with a file listing at the commit the run worked on, and the credentials (ids, type, status and times only; no secret field exists). HOW TO FIND AN INTERACTION ID: there is no list of interactions (the real API answers "Method not found."), so walk GET /v1beta/triggers, then GET /v1beta/triggers/{id}/executions, and take trigger_executions[].interaction_id to GET /v1beta/interactions/{id}; Trigger.previous_interaction_id names a trigger's newest one. WHAT IS NOT: inference of any kind (POST /v1beta/interactions, models/...:generateContent and every other Gemini model path answer a refusal or a coverage 404), streaming (?stream=true), webhooks, voices, and every write (a 403 saying this universe is read-only). Live host only: no pinned snapshot exists for this provider yet. Check https://sandboxapis.dev/providers/antigravity for the row-by-row picture.

REST · 15 endpointsMCP-ready

Coverage badge

Deep13/15 · 87%

The share of read rows with a final answer — served and verified, a deviation, retired upstream, or a reviewed empty/refusal. Computed in the coverage manifest, copied here.

Live host
antigravity.sandboxapis.dev
Pinned hosts
None yet
Serving since
2026-10-22
Lifecycle
Live

Served & verified

12 / 80%

Answering with real universe data, each response checked against Google Antigravity's published spec by the conformance suite on this build. 4 of them are marked a deviation — served faithfully, but failing the vendored spec.

The full read API

15

Every read surface Google Antigravity publishes, deferred long tail included, minus the rows excluded by policy. Writes are out of scope: this universe is read-only.

Not served yet

3

Each returns an explicit, provider-shaped coverage error naming the gap — never invented data.

01 / The swap

Point your client at a different base URL.

No SDK of ours, no shim, no recorded fixtures. The same client library you already use, one environment variable different.

shell
curl "https://antigravity.sandboxapis.dev/v1beta/triggers"

Verified drop-in clients

  • @google/genai2.30.0

The versions the conformance suite drives against this host on every build — pinned in coverage/client-pins.yaml, and watched weekly for upstream releases, because a client library moving without us is how a shipped integration breaks silently.

02 / Coverage by family

Every read surface, grouped the way Google Antigravity groups it.

All 15 rows the coverage manifest carries for Google Antigravity, deferred long tail included and nothing capped. Open a family, or filter by path to find the exact endpoint your client calls.

Status — what a conformance test found

served & verified
answers with real universe data, and this build checked that response against the vendor's spec.
deviation
served and faithful to the real provider, but failing the vendored spec — usually a bug in the spec.
retired
the vendor removed the endpoint; snapshots pinned before that date still serve it.
planned / deferred
not served yet — an explicit coverage error naming the gap, never invented data.
excluded
out of the claim by policy (writes, and surfaces we refuse); not in any denominator on this page.

Mode — what kind of answer a row gets

derive
the response is computed from artifact rows that already exist
generate
canon does not carry this yet; the generator will produce it, then derive
empty
the true answer for this universe is an empty collection — reason + reviewed date required
refuse
mirror the provider's OWN refusal (e.g. its 403 for a non-admin token) — reason + reviewed date required
read-only
a write named in the manifest because clients probe it; the read-only 403 IS its final response, and it never joins the badge denominator
scratch
a write this replica ACCEPTS, into a per-key 24-hour overlay, answering with the provider's own success shape - reason + reviewed date required. The compiled artifact is unchanged and no other caller ever sees the row; a caller WITHOUT a scratch-enabled key gets the read-only refusal on the identical path. Like read-only it never joins the badge denominator (founder ruling 5, 2026-09-17: the published figure has meant READ operations served since A0.1), and unlike read-only it ANSWERS, so the generation report counts it in its own `scratch` column rather than in (excluded). Scratch never creates a pull request, a branch, a commit or a diff - those are canon structure the overlay cannot invent

A row with no mode shown has not been judged yet. Modes are the manifest's own words, from coverage/MODES.yaml; every empty and refuse carries a written reason and a review date before it counts as final.

Held — buildable, deliberately not built yet

data-licensing
the values are VENDOR reference data this project holds no grant to redistribute. Serving needs an independently licensed source, so the outstanding work is a licensing answer, not code.

held is a label, not a mode and not a status. A held row is one somebody looked at, judged buildable, and left with the blocker named — so it is not covered, counts against the ratio above exactly like any other unbuilt row, and still answers the coverage 404. It buys nothing; it only tells you why.

Badge — where Deep starts

Full
every published read row has a final answer
Deep
60% up to 100%
Partial
25% up to 60%
Preview
under 25%

REST + GraphQL + git rows that are not `excluded`. Write operations are NOT rows (DECISIONS 2026-09-01 decision 9): they are counted in meta.write_operations and never enter this ratio.

15 read surfaces in 9 families

agents1 of 2 served & verified
GET
/{api_version}/agents

this data set saved no custom agent: every Antigravity run uses the managed agent id (antigravity-preview-09-2026), and the Interactions API's own answer for a project with none is CAPTURED as {"agents":[]} at 200 (2026-10-22), the one list on this API that keeps its empty array. True on every generation, so it is served even on an artifact without the agent-run canon

served & verified
Long tail
GET
/{api_version}/agents/{agentsId}

refuse — ENTAILED by the empty beside it: no custom agent exists, so no id resolves, and the real API's own answer is the agents service's compact 404, CAPTURED for an unknown id on 2026-10-22: {"error":{"message":"Requested entity was not found.","code":"not_found"}}, not array-wrapped. `x-sandboxapis-refusal` is the whole wire difference

deferred
Long tail
credentials2 of 2 served & verified
GET
/{api_version}/credentials
served & verified
Next
GET
/{api_version}/credentials/{id}
served & verified
Next
environments2 of 2 served & verified
GET
/{api_version}/environments
served & verified
Next
GET
/{api_version}/environments/{id}
served & verified
Next
triggers0 of 2 served & verified · 2 deviations
GET
/{api_version}/triggers
deviation
Core
GET
/{api_version}/triggers/{id}
deviation
Core
voices0 of 2 served & verified
GET
/{api_version}/voices

generateheld · data-licensing — after this data set's custom voices, of which there are none, ListVoices returns Google's own prebuilt voice catalogue (50 entries on the first page, captured 2026-10-22), so every entry would be vendor content this project holds no grant to redistribute (the ToS ruling of 2026-10-22: shapes only), and `{}` would be false because the real list is never empty. Answers the coverage 404 (decisions/2026-10-27-2139-antigravity-voices.md)

deferred
Long tail
GET
/{api_version}/voices/{voicesId}

generate — GetVoice resolves only a custom stored voice (the operation says prebuilt catalogue voices cannot be retrieved through it), and canon carries no stored voice, so the row derives the day a later canon wave stores one. Until then the true answer would be the API's own not-found, and that is not captured for the voices service: this API speaks two 404 dialects, the compact service form on agents and environments and the google.rpc form on triggers, and which one voices uses is unknown, so the row is not armed as a refusal and answers the coverage 404 (decisions/2026-10-27-2139-antigravity-voices.md)

deferred
Long tail
webhooks2 of 2 served & verified
GET
/{api_version}/webhooks

SERVED 2026-10-27 (hello-23 agentWebhooks; decisions/2026-10-27-2306-hello-23-serving-rest.md): the one registration the team made when it started running agents unattended, a webhook_subscription row of kind agent_reference created with the first trigger. subscribed_events are exactly the outcomes the agent runs hold (interaction.completed and interaction.failed at seed 42), never a batch or video event; state enabled; signing_secrets omitted (orchestrator ruling F9: canon generated no secret). Delivery stays a standing non-goal. An artifact before hello-23 answers the generation gap

served & verified
Long tail
GET
/{api_version}/webhooks/{id}

SERVED 2026-10-27 (hello-23 agentWebhooks; decisions/2026-10-27-2306-hello-23-serving-rest.md): the registration the list serves, by id; an unknown id is the google.rpc 404 the trigger and credential reads answer (the webhook id format and its 404 dialect are capture-pending, coverage/provider-pins.yaml). An artifact before hello-23 answers the generation gap

served & verified
Long tail
environment-files0 of 1 served & verified · 1 deviation
GET
/{api_version}/environments/{environment}/files/{path}
deviation
Next
interactions0 of 1 served & verified · 1 deviation
GET
/{api_version}/interactions/{interactionsId}
deviation
Core
trigger-executions1 of 1 served & verified
GET
/{api_version}/triggers/{triggerId}/executions
served & verified
Core

03 / What's simulated

One data set, rendered in Google Antigravity's dialect.

What another provider has to agree with, and the test that makes it

Each line below is one assertion in the conformance suite named beside it — run on every build, over one artifact, through the real renderers. Nothing is claimed here that no expect checks.

04 / Known deviations

4 rows are served but do not validate.

These answer with real data and match what Google Antigravity actually returns, but fail the spec we vendor from Google Antigravity — nearly always a bug in that published description. They are listed rather than counted so you can see whether one of them is the endpoint your client calls, and they are never counted as verified.

05 / Pinned snapshots

Universes that never change, on their own hostnames.

No snapshot is pinned for Google Antigravity yet — the live host is the only way to reach it, and its data moves. Pin a provider you test against before you depend on exact values.

Need an endpoint that is not served yet?

Every row Google Antigravity's manifest carries is on this page, so “not here” is an answer rather than a gap in the rendering. Tell us which path and which client, and it moves up the queue — the order is set by what people ask for.

Request coverage