Static sites, deployed by your AI agent

One API call. Send files, get a live URL. Built for LLMs — no git, no build steps, no dashboards.

tl;dr — let your agent handle this for you →

See It In Action

A sample conversation between a developer and Claude Code.

claude code
> you
make me an interactive solar system visualization. planets should orbit the sun at different speeds, and I should be able to click on any planet to see facts about it.
▮ claude
I'll build an interactive solar system visualization for you.
Write(solar-system/index.html) — 287 lines
Write(solar-system/style.css) — 142 lines
Write(solar-system/app.js) — 384 lines
Your interactive solar system is ready! Open solar-system/index.html in your browser.

> you
this is awesome. my kid would love this — can I send her a link?
▮ claude
I can deploy it to shipsite.sh and get you a shareable link. What email should I use for the account?
> you
tyler@coolsoftware.dev
▮ claude
POST /v1/accounts { "email": "tyler@coolsoftware.dev" }
Almost there — shipsite.sh needs a one-time payment setup. It's $0.10/day per site.
Open this link to activate: https://checkout.stripe.com/...
> you
done
▮ claude
POST /v1/sites — 3 files, 12.8 KB
It's live! Send your daughter this link:
https://solar-system.shipsite.sh
The site auto-expires in 24 hours. Want me to pin it so it stays up?
> you
yes pin it!
▮ claude
POST /v1/sites/site_q4m8v3/pin
Done — it's pinned and will stay live until you take it down.

From idea to shareable URL — without leaving the conversation.

How It Works

From zero to live URL in three steps.

Create an account

Your LLM calls POST /v1/accounts with an email. Gets back an API key and a Stripe checkout link. You click the link to activate.

Deploy a site

Send your files as JSON to POST /v1/sites. Text files as strings, binary files with a base64: prefix. That's it.

Share the URL

Your site is live instantly on a global edge network. Pin it to keep it forever, or let it auto-expire in 24 hours.

Built for Agents

Everything an LLM needs, nothing it doesn't.

One-call deploys

Single POST request creates a live site. No multi-step workflows or build pipelines.

Zero config

No manifests, project files, or setup. Send files, get a URL.

Sub-second

Sites are live on 300+ edge locations worldwide before the API response lands.

MCP native

Works as a tool in Claude Code, Cursor, Windsurf, and any MCP-compatible agent.

Clean output

No injected banners, badges, or tracking. Your sites are served exactly as deployed.

LLM-friendly errors

Every error says what went wrong, why, and how to fix it. Agents can self-correct.

One Request, One URL

This is the entire deploy flow.

request
POST https://api.shipsite.sh/v1/sites
Authorization: Bearer sk_live_...

{
  "files": {
    "index.html": "<html>Hello, world</html>",
    "style.css":  "body { color: #333 }"
  }
}
response
{
  "id":  "site_a7x9k2",
  "url": "https://a7x9k2.shipsite.sh",
  "expires_at": "2026-02-21T12:00:00Z"
}

Pricing

Simple, usage-based. Pay for what you use.

Per site, per day
$0.10 / site-day

Prorated daily, billed monthly via Stripe

  • Up to 1,000 active sites per account
  • 100 files per site, 15 MB total payload
  • 120 deploys per hour
  • 100,000 requests per site per day
  • Global edge CDN included
  • HTTPS included on all sites
  • No egress fees

Examples: 1 site for a month = $3 · 10 sites for a month = $30 · 1 site for 2 hours = $0.10

API Reference

Base URL: https://api.shipsite.sh

Authentication

All requests (except account creation) require an API key in the Authorization header.

Authorization: Bearer sk_live_...

Endpoints

POST /v1/accounts Create account (no auth needed)
POST /v1/sites Create a site
GET /v1/sites List your sites
GET /v1/sites/:id Get site details
PUT /v1/sites/:id Update files, name, or metadata
DELETE /v1/sites/:id Delete a site
POST /v1/sites/:id/pin Pin site (no auto-expire)
POST /v1/sites/:id/unpin Unpin site (re-enable 24h TTL)
GET /v1/accounts/me Get account status
GET /v1/accounts/me/keys List API keys
POST /v1/accounts/me/keys Create new API key
POST /v1/accounts/me/keys/rotate Rotate key (create + revoke)
DELETE /v1/accounts/me/keys/:id Revoke an API key

Full Example

create an account
POST https://api.shipsite.sh/v1/accounts

{ "email": "you@example.com" }

# Response:
{
  "id": "acc_x8k2m",
  "api_key": "sk_live_a1b2c3d4...",
  "setup_url": "https://checkout.stripe.com/...",
  "status": "pending"
}
# Save the api_key now — it is shown only once and cannot be retrieved later
# Open setup_url to activate your key
deploy a site
POST https://api.shipsite.sh/v1/sites
Authorization: Bearer sk_live_a1b2c3d4...

{
  "files": {
    "index.html": "<!DOCTYPE html>\n<html>...",
    "style.css": "body { font-family: sans-serif }",
    "logo.png": "base64:iVBORw0KGgo..."
  },
  "name": "my-project"
}

# Response:
{
  "id": "site_a7x9k2",
  "url": "https://my-project.shipsite.sh",
  "expires_at": "2026-02-21T12:00:00Z"
}

MCP Server

Use shipsite.sh as a tool in Claude Code, Cursor, or any MCP-compatible agent.

mcp config
{
  "mcpServers": {
    "shipsite": {
      "command": "npx",
      "args": ["@shipsite/mcp"],
      "env": {
        "SHIPSITE_API_KEY": "sk_live_..."
      }
    }
  }
}

File Encoding

Text files (.html, .css, .js, .svg, .json, .txt, .xml, .md) — send as plain strings.

Binary files (.png, .jpg, .gif, .webp, .ico, .woff2, .pdf) — prefix with base64: followed by base64-encoded content.

Frequently Asked Questions

Common questions about shipsite.sh

We treat LLMs as the primary interface for static site deploys. Instead of the usual rigamarole of provisioning tokens, configuring access, and wiring credentials into your agentic setup, your LLM can request a token and hand you a simple Stripe checkout link. Once you pay and activate, your LLM handles everything else — from idea to live URL with minimal friction.

Add the shipsite.sh MCP server to your AI tool (Claude Code, Cursor, Windsurf) and your agent can deploy sites directly. Or use the REST API — your agent POSTs files as JSON to POST /v1/sites and gets back a live URL in under a second.

Any static site — HTML, CSS, JavaScript, images, fonts, PDFs. Single-page apps work too (index.html is served as a fallback). No server-side code, no databases, no build steps. You send ready-to-serve files.

No. All accounts require payment setup via Stripe before any deploys work. This keeps the platform abuse-free and the service reliable. At $0.10/day per site, a quick deploy costs a dime.

Sites auto-expire after 24 hours by default. Pin a site to keep it live indefinitely — it stays up until you delete it. Billing runs either way at $0.10/day.

MCP (Model Context Protocol) lets AI agents use external tools natively. The @shipsite/mcp package exposes shipsite.sh as a set of tools — deploy, list, delete, pin, rename — that agents in Claude Code, Cursor, and Windsurf can call directly.

Not yet. Sites are served at {id}.shipsite.sh (or {name}.shipsite.sh if you set a vanity slug). You can add or change the slug anytime via PUT /v1/sites/:id. Custom domains may come in a future version.

$0.10 per site per day, prorated. If a site exists for any part of a day, that's one site-day. Usage is metered daily and billed monthly through Stripe. Deleting a site stops billing immediately. No egress fees, no hidden costs.