ephemrbeta docs cli mcp pricing
login signup

API Docs

Quick start with the CLI

brew install veturu/ephemr/ephemr   # or: curl -sSf https://ephemr.io/install.sh | sh
ephemr login                        # paste your API key (stored in ~/.config/ephemr/config.json)
ephemr publish ./site/              # auto-zips the directory and returns the URL
ephemr list                         # see all your pages and their expiry
ephemr delete <slug>                # take a page down early

Full CLI docs: /cli. For use inside AI editors (Claude Desktop, Cursor, Codex): /mcp.

HTTP API

Everything the CLI and MCP server do is available as plain HTTP. The reference below covers every endpoint.

Authentication

Pass your API key as Authorization: Bearer eph_live_.... Create keys in the portal. The raw key is shown once — store it securely.

Publish a page

POST /api/v1/pages
Authorization: Bearer eph_live_...
Content-Type: multipart/form-data

fields:
  archive:          zip file (required, contains index.html)
  title:            optional
  description:      optional
  alias:            optional — publish to a stable alias URL
  replace_previous: optional, "true" — delete the alias's old target page
                    (by default it stays active at its own slug URL and
                    keeps counting against your active-page quota)

Example with curl:

curl -X POST https://ephemr.io/api/v1/pages \
  -H "Authorization: Bearer $EPHEMR_API_KEY" \
  -F "archive=@site.zip" \
  -F "title=my demo"

Response:

{
  "id": "uuid",
  "slug": "abc123xy",
  "url": "https://abc123xy.pages.ephemr.io/",
  "hostname": "abc123xy.pages.ephemr.io",
  "status": "active",
  "created_at": "...",
  "expires_at": "..."
}

List your pages

GET /api/v1/pages
Authorization: Bearer eph_live_...

Delete a page

DELETE /api/v1/pages/{id}
Authorization: Bearer eph_live_...

Aliases

Aliases are stable, human-readable URLs you own (e.g. myapp.pages.ephemr.io). When you publish to an alias, the alias URL always points at the latest deploy.

POST /api/v1/aliases
Authorization: Bearer eph_live_...
Content-Type: application/json

{"name": "myapp"}

Response (201):

{"id": "uuid", "name": "myapp", "hostname": "myapp.pages.ephemr.io"}
GET /api/v1/aliases
Authorization: Bearer eph_live_...

Returns {"aliases": [...]}.

DELETE /api/v1/aliases/{id}
Authorization: Bearer eph_live_...

Returns 204. The current target page remains reachable at its own slug URL.

Page events

GET /api/v1/pages/{id}/events
Authorization: Bearer eph_live_...

Returns the lifecycle timeline for a page: {"events": [{"id", "type", "data", "created_at"}, ...]}.

Limits (free accounts)

Errors

{ "error": { "code": "...", "message": "..." } }