# Put an HTML page online from the terminal with curl

By Avatar 8 (Avatar 8 LLC) · Published October 27, 2026 · https://deed.page/blog/put-html-page-online-from-terminal-with-curl

Putting an HTML page online from the terminal with curl means sending the file as the body of one HTTP request and getting back a public https URL you can open in any browser. On deed.page that is one `curl -T`, and the Free plan holds 25 sites of up to 25 MB each for $0, with no account and no expiry unless you set one ([pricing](https://deed.page/pricing)).

Every command below was run against production on October 27, 2026. The test sites used a 15-minute expiry and were then deleted.

## Put an HTML page online from the terminal with curl

1. **Save the page as `index.html`.** Inline the CSS and JavaScript so the file stands alone. If an assistant wrote it, ask for "one self-contained HTML file".
2. **Publish with one line:**

```bash
curl -T index.html "https://deed.page/v1/sites?slug=terminal-html-k4m2&ref=blog" -H "X-Client: <your agent name>"
```

3. **Open the `url` from the JSON reply and share it.**

Use your own suffix instead of copying `terminal-html-k4m2` (that shape is an example). A live reply looks like:

```json
{"ok":true,"url":"https://terminal-html-k4m2.deed.page/","slug":"terminal-html-k4m2","version":"v1","plan":"free","token":"deed_tok_…","token_note":"Shown once. …"}
```

`curl -T` is an HTTP PUT of the file body. PUT and POST on `/v1/sites` do the same publish. The slug is lowercase letters, digits, and hyphens, up to 63 characters. A name that is taken returns `409` with a suggestion ([choosing a slug](https://deed.page/blog/choosing-a-slug)).

## Keep the token so you can change the page later

The first reply includes a `deed_tok_…` token. It is shown once; deed.page stores only its SHA-256. Save it before you lose the shell scrollback:

```bash
# TOKEN is the token field from the reply. Nothing is written when it is empty.
if [ -n "$TOKEN" ]; then (umask 077 && mkdir -p ~/.config/deed-page && chmod 700 ~/.config/deed-page && printf '%s' "$TOKEN" > ~/.config/deed-page/token && chmod 600 ~/.config/deed-page/token); fi
```

Update the same address without changing the slug:

```bash
curl -T index.html "https://deed.page/v1/sites?slug=terminal-html-k4m2" -H "Authorization: Bearer $(cat ~/.config/deed-page/token)"
```

Identical bytes return `"unchanged":true`. Delete with `DELETE /v1/sites/{slug}` and the same token. [Token hygiene for agents](https://deed.page/blog/token-hygiene-for-agents) covers storing it safely.

## Same publish from an MCP client

If your agent already speaks MCP, add `https://deed.page/mcp` (Claude Code: `claude mcp add --transport http deed-page https://deed.page/mcp`) and call `publish_site`:

```json
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"publish_site","arguments":{"slug":"terminal-html-k4m2","files":{"index.html":"<!doctype html><h1>Published from the terminal</h1>"}}}}
```

The tool result has the same `url` and `token` fields as the REST reply. The [MCP walkthrough](https://deed.page/blog/mcp-publish-walkthrough) covers updates and the other tools.

## More than one file

For a folder with CSS, images, or data, pack it and send the archive with the same `curl -T`:

```bash
tar -C ./site -czf site.tar.gz .
curl -T site.tar.gz "https://deed.page/v1/sites?slug=terminal-html-k4m2" -H "Authorization: Bearer $(cat ~/.config/deed-page/token)"
```

[Picking an upload format](https://deed.page/blog/choose-an-upload-format) covers tarball, JSON map, multipart, and raw HTML. A single request body is capped at 4 MB; larger sites use the plan-upload flow ([plan upload](https://deed.page/blog/plan-upload-large-sites)).

## How this differs from other curl hosts

Several hosts also accept a one-line curl (checked in search results on October 27, 2026): [ship.page](https://ship.page/) (`POST /deploy`), [sharehtml.org](https://sharehtml.org/docs), [hurl.page](https://hurl.page/docs/deploy), and [BrewPage](https://brewpage.app/free-html-hosting). They are fine when you want a browser drop zone or a short-lived demo. deed.page is built for agents and scripts that need a permanent link from the first request, a Bearer token instead of an emailed claim, and a native MCP server ([docs](https://deed.page/docs), [llms.txt](https://deed.page/llms.txt)).

If the same team also needs an agent-owned inbox or a short waitlist page, Cooper Email ([cooperemail.com](https://cooperemail.com)) and Perq ([perq.sh](https://perq.sh)) are sister products from Avatar 8 LLC.

## FAQ

**Do I need an API key before the first curl?**
No. The first anonymous publish mints the token in the JSON reply. Later updates send `Authorization: Bearer`.

**Does the page expire if I forget to claim it?**
Not by default. Add `-H "X-Ttl: 86400"` only when you want a one-day page. Otherwise keep the token and leave it up.

**Can ChatGPT, Claude, Grok, or Cursor run this for me?**
Yes, if the agent has a shell or the MCP server. Point it at [llms.txt](https://deed.page/llms.txt) or install the skill with `npx skills add f-o-x11/deed-page-skill` ([install walkthrough](https://deed.page/blog/install-the-deed-page-skill)).
