API reference

The action API

One operation contract, projected into MCP and REST.

What the contract covers

Provision domains, DNS, TLS, hosting, and email through one canonical operation contract. Agents can propose bounded multi-operation jobs; SproutPad executes them as durable tasks, rechecks authority at each lasting step, and records the real result. This page is the human-readable companion to the machine-readable contract at /openapi.json.

MCP REST SDK · contract preview CLI · not publicly released

MCP and REST are the live public transports. The generated SDK and CLI remain repository-local contract previews; there is no supported public npm install path for either package today.

Don't take the architecture on faith

Inspect the contract and the current evidence. The isolated fake-money sandbox is live; the signed self-conformance page reports the production system's current state and fails closed when evidence is unavailable.

One request: see compensation in about thirty seconds

This convenience tier invokes the real isolated fake-money policy, two-phase budget, ledger, AP2, compensation, and proof engine. The server simulates the holder in the same request, so it explicitly reports holderSeparation: false and makes no human-decision claim. It is not the rigorous holder-separated path.

guided demobash
IDEMPOTENCY_KEY="guided-demo-$(openssl rand -hex 16)"
curl -fsS -X POST https://api.sproutpad.ai/v1/sandbox/simulations \
  -H 'content-type: application/json' \
  -H "Idempotency-Key: ${IDEMPOTENCY_KEY}" \
  --data '{"scenario":"simulated_failure"}' | jq

Generate a new key for every different request body. Reuse the captured key only when retrying this exact request after an ambiguous network failure. To see atomic budget serialization, run the snippet again with a fresh key and concurrent_race. The approval scenario remains exclusive to the browser or the separate headless-holder protocol.

Verification recipes and proof limits

verify_sandbox_proof({}) first resolves the shared reference-state manifest. It independently checks a durable shared proof only when the manifest says state: available; state: unavailable is not evidence. It accepts no caller-selected proof ID. verify_architecture checks the current signed state and fails closed unless both required profiles are passing, fresh, and bound to the current build. Unavailable is not evidence and must not be treated as a pass.

Loading the MCP-only verify map from the canonical machine catalog. If scripts or discovery are unavailable, use the generated agent map; never guess a /v1/verify_* path.

To verify a downloaded proof without MCP or a repository checkout, follow the manifest-hash-anchored recipe. It checks the raw verifier hash before execution. The standalone Node 22 verifier is available for inspection and then runs with the separately published sandbox proof and AP2 JWKS files. Its --tamper-check mode alters the local copy and confirms that the altered artifact is rejected. A proof establishes its presented fake payment and signed AP2 chain; cumulative cap enforcement depends on atomic sandbox ledger/session state, not a caller-supplied or externally complete history.

The reference state is explicit at /.well-known/sandbox-reference.json. The headless-holder recipe runs the same mandate and gate signatures without a browser while keeping the P-256 private key outside the agent process. Key control alone is not a claim that a human reviewed the decision.

What we run on

Payments

Stripe

Stripe Checkout collects card details; card numbers never touch our code, logs, or database. SproutPad enforces budget caps on the server before any charge.

Edge

Cloudflare

The API and this site sit behind Cloudflare — DDoS absorption, WAF, TLS with HSTS. The origin accepts only traffic that came through the edge. Check any response's headers to verify.

Your sites

Two deploy targets

Server-backed services run on their own isolated virtual machine — not shared hosting — from $3/mo. Static sites can instead deploy to a global edge network at $0/mo. HTTPS is provisioned automatically either way, and teardown stops the meter the same day.

Registrars

Cloudflare and name.com

Domains are fulfilled through accredited registrar channels — about 40 popular TLDs near wholesale via Cloudflare Registrar, hundreds more via name.com. Transfer-out is a signed-in action per domain.

Ownership

You own what you buy

Domains, sites, and mailboxes your agent buys belong to you. By default we hold the registrant paperwork on your behalf; for supported name.com domains you can opt in to be the ICANN registrant of record. There is no exit fee. See exit paths.

Evidence

Verifiable budgets

Every mutation appears in an append-only ledger you can export. In verifiable budget mode you sign an AP2 payment mandate in your browser, and every committed spend produces a proof anyone can verify at POST /v1/ap2/verify against /.well-known/jwks.json, without database access.

Registrar conversion is different. Importing an existing domain into name.com is currently unavailable. It does not block transfer-out. export_project reads bounded, source-labelled project metadata and export_dns_zone is the separate BIND zone read; raw asset files, provider references, and raw ledger rows are not exposed.

Deploy sources & targets

SproutPad does not ship a catalog of service starters. A Fly container launch names an explicit public image pinned to @sha256; its exact digest is reviewed and approved before it can run. A Cloudflare edge static-assets launch (target: "cloudflare") serves authored HTML, CSS, and JavaScript from a global edge network with no cold starts at $0/mo.

upload_assets Returns a bundleId. Requires a root index.html; limited to static content types. 200 files · 10 MB
launch_service Call with that bundleId. Baseline security headers (HSTS, nosniff, referrer trimming) are added by the platform on edge deploys. $0.00/mo
Edge hosting fair use Comfortably covers typical sites. If a site sustains far more we contact you before changing terms; traffic is not throttled automatically. ~1M req/mo

Not available yet. Future multi-service arrangements will use separately versioned stack recipes with an explicit plan and approval boundary. They are not public today.

Reference

Rendered live from /openapi.json, and covered by a test that fails the build if an endpoint ships undocumented. Dashboard, session, and operator surfaces are internal and not part of the public API.

Loading the reference…

Changes

The API evolves additively under /v1 — existing fields and endpoints don't break. Spec version dates mark when the reference last meaningfully changed.

2026-07-16 Clarified descriptions across signup, project lifecycle, AP2, email, and approval surfaces. No endpoint, schema, auth, or error contract changed.
2026-07-07 First complete public reference: all agent-facing endpoints documented with request/response schemas, auth schemes (agent keys + OAuth 2.1), idempotency semantics, and the error/resolution model. This page went live.