Random URLs are perfect for one-offs and terrible for anything iterative. Named drops give you one stable URL per name — redeploy as often as you like, the content changes, the link doesn't.
Links rot faster than reviews
The failure mode is always the same. You push a fix, CI mints a fresh preview URL, and your reviewer — who bookmarked the link from Tuesday — spends ten minutes confused about why the bug is "still there." Multiply by every push on every PR and you get channel archaeology: scrolling Slack to find whichever link is the real one.
The fix isn't more links. It's one link whose content moves.
How named drops work
Add ?name= to the deploy you already have. First deploy creates the drop; every redeploy of the same name replaces the content and keeps the URL:
deploy.sh
curl -X POST "https://hurl.page/deploy?name=pr-42" \ -H "Authorization: Bearer $HURL_TOKEN" \ -H "Content-Type: text/html" \ --data-binary @index.html→ same URL, every time
- Names are 1–41 chars of
[a-z0-9-](no--), scoped to your account — yourpr-42never collides with anyone else's - The response includes
nameandreplaced, so scripts can tell a create from an update - Redeploys bump
redeploy_countandupdated_at— visible in the dashboard andGET /drops
Named drops are a subscriber feature (Pro, $4/mo) because a permanent URL is a promise, and promises cost more to keep than 24-hour confetti.
Vanity subdomains
On the Team plan you can claim a permanent prefix for your account — once acme is yours, named drops serve at acme--pr-42.hurled.page instead of a random slug. Subs are 3–20 chars of [a-z0-9-], one per account, first come first served. Existing named drops migrate onto the vanity sub on their next redeploy.
Migration retires the old URL
When a named drop moves onto your vanity sub, its old random URL stops working. Links you posted before claiming the sub will 404 after the next redeploy — repost them once and you're done.
Bookkeeping
Everything is inspectable from the dashboard or the API: GET /drops lists every drop with its name, redeploy count and expiry; DELETE /drops/<slug> removes one permanently — files and index entry both, with up to 60 seconds of edge cache as the only afterlife. If you wire named drops into CI, the natural pattern is one name per PR (pr-<number>) and a delete step when the PR closes.