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.
API reference
One operation contract, projected into MCP and REST.
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.
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.
Fake money · bounded · no real providers.
Operations, authority, receipts, and conformance.
Signed · build-bound · append-only state.
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.
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.
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.
Stripe Checkout collects card details; card numbers never touch our code, logs, or database. SproutPad enforces budget caps on the server before any charge.
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.
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.
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.
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.
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.
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
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.
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…
The API evolves additively under /v1 — existing
fields and endpoints don't break. Spec version dates mark when the
reference last meaningfully changed.