Resources · Quickstart

Quickstart

From an empty directory to a live, governed site — publish static files, or plan and launch a service.

Quickstart

Publish authored static files

If the result is a landing page, portfolio, document collection, or existing static build, use this path after connecting the project. It keeps upload separate from the consequential launch.

1 · upload_assets Upload the authored HTML, CSS, JavaScript, and assets. The response returns a bundleId; it does not launch anything. staged
2 · Choose the public address Use the preview URL first, attach an existing domain, or review a separately priced domain purchase. your choice
3 · launch_service Pass the bundleId with target: "cloudflare". Current budget, policy, price, and approval rules are checked at launch. $0.00/mo
4 · Follow the durable task Poll the returned task until the preview or domain reports HTTPS-ready, then keep its receipt with the project. receipt
  1. 01

    Create an account

    Loading the exact signup request, replay, expiry, and output contract from the live OpenAPI document.

    POST /v1/signup returns a SproutPad human-review URL, signupSessionId, and claimSecret. Send only the returned human-review URL to the human; keep capability fields private. On that page the human reviews account authority, pricing, budget limits, and approval rules before continuing to Stripe. After the human completes both steps, follow the returned typed poll action. For a scratch account or an expired card, POST /v1/billing/setup-link + /v1/billing/poll provide a separate card flow for existing accounts.

  2. 02

    Connect your agent

    Paste the MCP config from the claim page into Claude, Cursor, or anything that speaks MCP — or call REST directly with Authorization: Bearer agk_…. OAuth 2.1 (PKCE + dynamic registration) also works.

    Cursor · OAuth · .cursor/mcp.jsonjson
    {
      "mcpServers": {
        "sproutpad": {
          "type": "http",
          "url": "https://api.sproutpad.ai/mcp"
        }
      }
    }

    In Cursor, choose Connect for sproutpad under Settings → Tools & MCP, or run cursor-agent mcp login sproutpad. For a bearer key instead, add "headers": { "Authorization": "Bearer agk_...<secret>" } to the server object locally; never commit the key.

    Claude Code · OAuthshell
    claude mcp add --transport http --scope user sproutpad https://api.sproutpad.ai/mcp

    Run /mcp inside Claude Code to complete OAuth. Claude-compatible hosts without remote OAuth support can use an HTTP server entry with "Authorization": "Bearer ${SPROUTPAD_AGENT_KEY}".

    Streamable HTTP · raw initializeshell
    curl -i -X POST https://api.sproutpad.ai/mcp \
      -H 'Content-Type: application/json' \
      -H 'Accept: application/json, text/event-stream' \
      --data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'

    Both Accept media types are required; omitting the header or sending JSON-only returns 406. SproutPad currently returns JSON, negotiates protocol 2025-03-26, and is stateless: it does not issue Mcp-Session-Id. Authenticate each protected request independently and initialize again after a reconnect.

  3. 03

    Plan, then launch a service

    MCP search_domains maps to GET /v1/domains/search; MCP estimate maps to POST /v1/estimate. Both need no auth and create no hold. An authenticated ALLOW quote (POST /v1/quotes) reserves project budget for 15 minutes; launch_service (POST /v1/projects/{id}/launch) creates a named service, then carries domain registration, DNS, deploy, and TLS through a durable task. The HTTP method is part of the contract; every operation below shows its MCP name beside the REST route.

    For estimate, omit target to choose the cheapest capable option and declare workload as static_site, dynamic_service, worker, database_backed_app, or mail_enabled_app. The response returns the selected target, every considered target, the selection reason, and explicit pricing assumptions. An explicit target override remains authoritative and is called out in that evidence.

    Domain discovery uses the common-launch catalog by default. The same canonical input on MCP, REST, the generated SDK, and the CLI supports an ordered tldAllowlist, tldDenylist, maxFirstYearPriceUsd, maxRenewalPriceUsd, and the explicit includeExotic: true full-catalog escape hatch. Every result returns appliedFilters, including the effective ordered TLD list, so an agent can verify what the server actually applied. Price ceilings exclude candidates whose required price is missing; renewal ceilings compare the annualized renewal price.

    For a bounded multi-operation job, prepare_workflow validates, canonicalizes, signs, and persists the exact finite operation graph without reserving budget, creating a task, or calling a provider. Inspect the safe plan projection, then cross the separate apply_workflow boundary. Apply rechecks the current caller, policy, budget, price, versions, and state; the signature proves unchanged plan bytes, not permission to execute.

New to the model? The resources pages explain two-phase budgets, approval gates, durable execution, and retry semantics before you write any code against them.