API Documentation

Everything you need to integrate with YeetIt.

Quick Start

Publish a site with a single HTTP request. No account or API key required.

# Publish a site in one command curl -X POST https://yeetit.site/v1/publish \ -H "Content-Type: application/json" \ -d '{"html":"<h1>Hello World</h1>"}'

The response includes a live URL, an edit key for updates, and a claim URL to keep the site permanently.

Authentication

YeetIt supports two authentication methods depending on your use case.

Edit Key

Pass via the X-Edit-Key header. A unique per-site key returned in the publish response. Use it to update or delete that specific site. Anyone with the edit key can modify the site.

API Key

Pass via the X-API-Key header. An account-wide key available from your dashboard after claiming a site. Works for all sites owned by your account.

No authentication is needed for publishing new sites (free tier) or checking site status.

Endpoints

POST /v1/publish

Create a new site. No authentication required.

Request body

FieldTypeDescription
html requiredstringThe HTML content of your site
title optionalstringPage title (extracted from HTML if omitted)
assets optionalobjectMap of filename to content (CSS, JS, images)

Response

FieldDescription
urlLive URL of the published site
slugUnique identifier for the site
edit_keyKey for updating or deleting this site
claim_urlURL to claim ownership of the site
expires_atISO 8601 expiration timestamp
assets_publishedNumber of assets stored
# Create a new site curl -X POST https://yeetit.site/v1/publish \ -H "Content-Type: application/json" \ -d '{ "html": "<h1>Hello World</h1>", "title": "My Site" }' # Response { "url": "https://yeetit.site/my-site-k3m", "slug": "my-site-k3m", "edit_key": "ek_9c4d2e7f...", "claim_url": "https://yeetit.site/claim/ct_8f3a2b...", "expires_at": "2025-02-07T12:00:00Z", "assets_published": 0 }

PUT /v1/publish/:slug

Update an existing site. Requires X-Edit-Key or X-API-Key header.

Request body

FieldTypeDescription
html requiredstringUpdated HTML content
title optionalstringUpdated page title
assets optionalobjectUpdated assets map

Response

FieldDescription
urlLive URL of the site
slugSite identifier
updatedtrue
assets_publishedNumber of assets stored
# Update a site curl -X PUT https://yeetit.site/v1/publish/my-site-k3m \ -H "Content-Type: application/json" \ -H "X-Edit-Key: ek_9c4d2e7f..." \ -d '{ "html": "<h1>Updated Site</h1>" }' # Response { "url": "https://yeetit.site/my-site-k3m", "slug": "my-site-k3m", "updated": true, "assets_published": 0 }

DELETE /v1/publish/:slug

Delete a site. Requires X-Edit-Key or X-API-Key header.

Response

FieldDescription
slugSite identifier
deletedtrue
# Delete a site curl -X DELETE https://yeetit.site/v1/publish/my-site-k3m \ -H "X-Edit-Key: ek_9c4d2e7f..." # Response { "slug": "my-site-k3m", "deleted": true }

GET /v1/publish/:slug/status

Get information about a site. No authentication required.

Response

FieldDescription
slugSite identifier
titlePage title
tierAccount tier (free, pro, business)
viewsTotal page views
html_sizeSize of the HTML content in bytes
asset_countNumber of assets
total_sizeTotal size including assets in bytes
created_atISO 8601 creation timestamp
expires_atISO 8601 expiration timestamp (null if permanent)
claimedWhether the site has been claimed
activeWhether the site is currently live
# Check site status curl https://yeetit.site/v1/publish/my-site-k3m/status # Response { "slug": "my-site-k3m", "title": "My Site", "tier": "free", "views": 42, "html_size": 1024, "asset_count": 2, "total_size": 15360, "created_at": "2025-01-31T12:00:00Z", "expires_at": "2025-02-07T12:00:00Z", "claimed": false, "active": true }

Assets

Include CSS, JavaScript, images, and other files alongside your HTML using the assets object.

Text assets

Pass CSS, JS, or any text file as a plain string value in the assets object.

{ "html": "<link rel=\"stylesheet\" href=\"./style.css\">...", "assets": { "style.css": "body { font-family: sans-serif; }", "app.js": "console.log('hello');" } }

Binary assets

Upload images and other binary files using data URIs.

{ "html": "<img src=\"./logo.png\">...", "assets": { "logo.png": "data:image/png;base64,iVBORw0KGgo..." } }

Multi-page sites

Include additional HTML pages as assets. Reference them with relative paths.

{ "html": "<a href=\"./about.html\">About</a>...", "assets": { "about.html": "<h1>About Us</h1>...", "contact.html": "<h1>Contact</h1>..." } }

Limits

Reference all assets using relative paths: ./style.css, ./images/logo.png

MCP Integration

YeetIt supports the Model Context Protocol for seamless AI agent integration.

Endpoint

Send JSON-RPC 2.0 requests to:

POST https://yeetit.site/mcp

Discovery

MCP-compatible agents can auto-discover available tools at:

GET https://yeetit.site/.well-known/mcp.json

Available tools

Configuration

Add to your Claude Desktop or Cursor MCP config:

{ "mcpServers": { "yeetit": { "url": "https://yeetit.site/mcp" } } }

Limits

YeetIt is currently in Beta. Free tier includes 5.0MB uploads. Paid plans are coming soon.
Free Pro ($8/mo) Business ($25/mo)
Max size 5.0MB 10 MB 10 MB
Assets 10 50 50
Expiry 24 hours (7 days after claim) Permanent Permanent
Active sites 5 25 Unlimited
Footer badge Yes No No
Custom slugs No Yes Yes

Error Codes

All error responses include a JSON body with an error field describing the issue.

Status Meaning
400Invalid request — missing or malformed fields
401Invalid API key
403Invalid edit key for this site
404Site not found
409Slug already taken
413Content too large
422Content policy violation
429Rate limit exceeded
500Internal server error