hurl.page

Hurl HTML at an API. Get an unguessable URL back. That's it.

no signup 128-bit slugs multi-file drops zip uploads proper MIME
Drop an HTML file, a zip, or a bunch of files here
or browse

Got a folder? Zip it. Your URL appears instantly — no account, nothing.

One file

curl -X POST https://hurl.page/deploy \
  -H "Content-Type: text/html" \
  --data-binary @report.html
# →
{
  "url": "https://e6ofnodp3eapksqzpnnzbylzfm.hurled.page/",
  "files": ["index.html"]
}

Multiple files

curl -X POST https://hurl.page/deploy \
  -H "Content-Type: application/json" \
  -d '{"files":{
    "index.html": "<link rel=stylesheet href=css/app.css><h1>hi</h1>",
    "css/app.css": "h1{color:hotpink}",
    "logo.png": {"encoding":"base64","content":"iVBOR..."}
  }}'

Directory-style paths work, index.html defaults like CF Pages, content types resolved from extensions.

Whole site as a zip

curl -X POST https://hurl.page/deploy \
  -H "Content-Type: application/zip" \
  --data-binary @dist.zip

Your whole build folder in one shot — unpacked and hosted as-is, up to 500 files / 25 MB. A single top-level folder inside the zip is stripped automatically.

GitHub Actions

- name: Publish report
  run: |
    URL=$(curl -fsS -X POST https://hurl.page/deploy \
      -H "Content-Type: text/html" \
      --data-binary @build/report.html | jq -r .url)
    echo "### 📄 Report: $URL" >> "$GITHUB_STEP_SUMMARY"

No tokens, no secrets, no setup. Test reports, coverage, visual diffs, preview builds — one URL away.

Why unguessable beats auth

Every drop lives on its own subdomain with 128 bits of CSPRNG entropy. No accounts to view, no cookies, no expiring share links — the URL is the capability. Paste it in a PR comment and everyone can open it.