{"provider":{"title":"Host Website (Free)","description":"Host a static website by submitting HTML or Markdown content. Returns a live public URL instantly. Free to use (proof intent). Each upload is owner-tagged with the caller's wallet — owners can edit, delete, or attach custom domains via the management routes. Surface map: proof `POST /run` (upload), `PUT /sites/:slug` (owner-only edit), `DELETE /sites/:slug` (owner-only delete), `GET /sites` (list caller-owned slugs), `POST /sites/:slug/domains` (attach a domain bought via domain-buy), `DELETE /sites/:slug/domains/:domain` (detach), `GET /sites/:slug/domains` (list attached domains).","paidRoutes":[{"method":"POST","path":"/run","protocol":"mpp","sku":"host-site-post-run","priceUsdcMicro":"0","pricingVersion":1,"description":"Upload a static website. Returns the live URL. Caller wallet is stamped as the slug owner; owners can edit/delete or attach custom domains via the other routes."},{"method":"PUT","path":"/sites/:slug","protocol":"mpp","sku":"host-site-put-sites-slug","priceUsdcMicro":"0","pricingVersion":1,"description":"Replace the content of an existing slug. Owner-only. Refreshes the TTL if `ttlHours` is supplied; otherwise preserves the existing one."},{"method":"DELETE","path":"/sites/:slug","protocol":"mpp","sku":"host-site-delete-sites-slug","priceUsdcMicro":"0","pricingVersion":1,"description":"Delete a hosted site early. Owner-only. Also detaches any custom domains attached to this slug (CUSTOM_DOMAINS KV entries removed; Worker Custom Domain attachments at Cloudflare are NOT automatically torn down — call DELETE /sites/:slug/domains/:domain first if you want a clean removal)."},{"method":"GET","path":"/sites","protocol":"mpp","sku":"host-site-get-sites","priceUsdcMicro":"0","pricingVersion":1,"description":"List slugs owned by the caller. R2 list-scan filtered by owner customMetadata (O(N) — fine for the per-wallet upload volumes we expect, but not designed for unbounded scaling)."},{"method":"POST","path":"/sites/:slug/domains","protocol":"mpp","sku":"host-site-post-sites-slug-domains","priceUsdcMicro":"0","pricingVersion":1,"description":"Attach a custom domain (bought via domain-buy) to this slug. The caller must own both the slug and the domain. Calls Cloudflare to register the hostname as a Worker Custom Domain on the sites worker (SSL is auto-provisioned). Sub-paths on the custom domain serve the slug's index.html — single-file hosting model."},{"method":"DELETE","path":"/sites/:slug/domains/:domain","protocol":"mpp","sku":"host-site-delete-sites-slug-domains-domain","priceUsdcMicro":"0","pricingVersion":1,"description":"Detach a custom domain from this slug. Owner-only. Removes the CUSTOM_DOMAINS KV mapping AND tears down the Cloudflare Worker Custom Domain attachment (so the hostname no longer routes to the sites worker)."},{"method":"GET","path":"/sites/:slug/domains","protocol":"mpp","sku":"host-site-get-sites-slug-domains","priceUsdcMicro":"0","pricingVersion":1,"description":"List custom domains attached to this slug. Owner-only. Reads from CUSTOM_DOMAINS KV (the same source the sites worker resolves at request time) — does not cross-check Cloudflare state."}],"freeRoutes":[{"method":"GET","path":"/"},{"method":"GET","path":"/contract"},{"method":"GET","path":"/openapi.json"},{"method":"GET","path":"/health"}]}}