shiply.now

Quick start

Publish a site in three steps — no account needed

A site is not live until finalize succeeds. The whole flow is three HTTP calls.

1. Create

Send a manifest of the files you want to publish:

curl -X POST https://shiply.now/api/v1/publish \
  -H "content-type: application/json" \
  -d '{
    "files": [
      { "path": "index.html", "size": 128, "contentType": "text/html" }
    ]
  }'

The response contains everything you need:

{
  "slug": "plucky-otter-4x2j",
  "siteUrl": "https://plucky-otter-4x2j.shiply.now/",
  "upload": {
    "versionId": "01KTVKX3QN…",
    "uploads": [
      { "path": "index.html", "method": "PUT", "url": "https://…", "headers": { "Content-Type": "text/html" } }
    ],
    "finalizeUrl": "https://shiply.now/api/v1/publish/plucky-otter-4x2j/finalize",
    "expiresInSeconds": 3600
  },
  "claimToken": "…",
  "claimUrl": "https://shiply.now/claim?slug=…&token=…",
  "expiresAt": "2026-06-13T00:00:00.000Z",
  "anonymous": true
}

Save the claimToken — it is returned only once.

2. Upload

PUT each file's raw bytes to its presigned URL (parallel uploads are fine):

curl -X PUT "<upload.uploads[0].url>" \
  -H "Content-Type: text/html" \
  --data-binary @index.html

3. Finalize

curl -X POST "<upload.finalizeUrl>" \
  -H "content-type: application/json" \
  -d '{"versionId": "<upload.versionId>"}'

Your site is now live at the siteUrl. Anonymous sites expire after 24 hours — open the claimUrl (or sign in and claim) to keep it forever.