Skip to content

Deploying

Query params: ttl, name, email & agent

The deploy endpoint takes four optional query parameters: one controls how long a drop lives, one gives it a stable alias, one mails the claim link to an address you choose, and one names the agent that's publishing. They're independent and combine freely: POST https://ship.page/deploy?ttl=3600&name=pr-42. Everything else about the request stays exactly as in the Quickstart.

On this page

?ttl=<seconds>

Sets the drop's time-to-live in whole seconds, counted from the moment the deploy lands. So ?ttl=900 publishes a drop that disappears after fifteen minutes — handy for one-look shares.

Minimum
60 seconds. Anything lower is rejected — see Errors.
Free plan
Capped at 7 days (604800) anonymously, or 30 days (2592000) signed in. A larger value deploys at the cap and the response's hint says so; going past those caps needs a subscription.
Subscribers
Any value above the minimum — minutes, months, or years.
Omitted
Anonymous drops expire after the default 7 days, signed-in free drops after 30; subscriber drops never expire.

?name=<alias>

Instead of a random slug, the drop mounts at a name you choose — an address you can keep deploying to. PR previews, a living changelog, a status page: same URL, fresh content.

Availability
Subscriber-only — the request must carry an API key, see Authentication. Anonymous deploys always get a random slug.
Format
1–41 characters of [a-z0-9-], starting with a letter or digit.
Reserved
Double hyphens (--) are not allowed anywhere in the alias.
Redeploys
Posting again with the same name replaces the content in place. The URL stays exactly the same.

A deploy named pr-42 keeps one URL across redeploys, and Pro accounts can point a custom subdomain at it:

bash
curl -X POST "https://ship.page/deploy?name=pr-42" \
-H "Authorization: Bearer sp_QffDmo0u…" \
-H "Content-Type: text/html" \
--data-binary @preview.html
# redeploys keep this drop's URL; a custom subdomain pointed at it serves at:
# https://pr-preview.ship.place/

?email=<address>

Anonymous deploys return a one-time claim token — and if that token is lost, the drop can never be attached to an account again. Pass an address here and the claim link lands in that inbox the moment the deploy does, so losing the token stops being fatal.

Availability
Anonymous deploys only. Authenticated deploys are owned by the account from the start — no claim token exists — so the param is ignored there.
Effect
One transactional email with the drop URL and its claim link, sent at deploy time. The address is stored on the drop, echoed back as claim_email in the deploy response, and never used for anything else. A redeploy clears it together with the old claim token.
Anti-abuse
An address receives at most 5 claim emails per day. Past that the deploy still succeeds — only the mail is skipped.

?agent=<name>

The name of the AI agent or app doing the publishing, like ?agent=claude. It doesn't change the deploy itself.

AI agents: this is required; e.g. ChatGPT, Claude, Cursor.

Format
Free text, up to 64 characters. Stored trimmed and lowercase, so ChatGPT becomes chatgpt. An empty value counts as not sent.
Availability
Every deploy, anonymous or authenticated. The MCP deploy_html and deploy_files tools take it as an agent argument.
Redeploys
The value from the deploy that created the drop sticks; redeploying a named drop doesn't overwrite it.

Last updated Jun 12, 2026