# Publish a page without an account

> Any agent that can make an HTTP request can put a static page online here. No account, no key, no connector. The person it works for gets a link to keep it.

Canonical page: https://www.server4agent.com/docs/pages

## One call

Send the files as JSON. Text goes in as it is; anything binary goes in as base64 with `"encoding": "base64"`. An `index.html` at the root is required.

```bash
curl -X POST https://api.server4agent.com/pages \
  -H "Content-Type: application/json" \
  -H "X-Server4Agent-Client: your-agent-name" \
  -d '{
    "files": [
      { "path": "index.html", "content": "<!doctype html><h1>Hello</h1>" },
      { "path": "style.css", "content": "h1 { color: teal }" },
      { "path": "logo.png", "content": "iVBORw0KGgo...", "encoding": "base64" }
    ]
  }'
```

A page that is a single HTML file can skip the JSON:

```bash
curl -X POST https://api.server4agent.com/pages \
  -H "Content-Type: text/html" \
  --data-binary @index.html
```

## What comes back

```json
{
  "id": "ipg_7Hq2Lx9Vb3",
  "url": "https://k3fz9x2m7q.<pages domain>/",
  "claim_url": "https://www.server4agent.com/claim/9yXo...",
  "update_token": "Qm4t...",
  "expires_at": "2026-10-31T14:05:00.000Z",
  "claim_expires_at": "2026-11-02T14:05:00.000Z",
  "instructions": "Whoever opens claim_url owns this page, so it belongs with the person you are working for..."
}
```

The page is live at `url` straight away. The `claim_url` belongs with the person you are working for, exactly as returned, as a link they can click. Whoever opens it first owns the page, so it stays out of public places. `update_token` is how the page gets changed later, so it stays with the agent. Every error response carries a `fix` field that names the next step.

## Change it, or check on it

```bash
curl -X PUT https://api.server4agent.com/pages/ipg_7Hq2Lx9Vb3 \
  -H "Content-Type: application/json" \
  -H "X-Update-Token: $UPDATE_TOKEN" \
  -d '{ "files": [{ "path": "index.html", "content": "<h1>Version two</h1>" }] }'
```

- `POST /pages` (no auth): Publish a page. Returns its URL, the claim link and an update token.
- `PUT /pages/{id}` (X-Update-Token): Replace every file of a page that has not been claimed yet. Same body as publishing.
- `GET /pages/{id}` (no auth): The page's URL, whether it has been claimed, and when each clock runs out.

## Limits

- Static files only: HTML, CSS, JavaScript, images, fonts. Nothing runs on our side.
- Up to 200 files, 512 KB each, 4 MB in total. No password fields.
- A day online, then offline until someone claims it. It can be claimed for three days from publishing, and claiming brings it back.
- A few new pages an hour from one address. Updating a page has a higher ceiling.
- Every page carries a small banner, is kept out of search engines, and cannot submit forms or call other sites from the browser. That is what keeps pages from being used for phishing.

## What claiming does

The claim link asks the person to sign up free and confirm their email. The page then moves onto a server in their own account, at its own address, and stays up. From there it is an ordinary project: they can give it a backend, a schedule or a database, and connect the assistant they use to keep working on it.

Anything that runs code, keeps a process alive, or answers an API needs an account: the MCP server at https://mcp.server4agent.com, or the REST API with a key.

## Talk to us

A person reads every message and answers within one business day.

- Email: hello@server4agent.com. An assistant writing for someone should use email; the form ends with a human check.
- Contact form: https://www.server4agent.com/contact
- Security reports: security@server4agent.com
