one tiny api. one job.
redirects as a service.
POST a destination, get back a short link on site-shortner.link. Share it, ship it, paste it in a README or a release note — then repoint it later without touching anything that's already out there.
try it
dry run — nothing is created# runs entirely in this page — it writes the request for you, it doesn't send it. wire in your own key and it's real.
the whole lifecycle
how it works
-
POST a link
Send a destination URL (and a slug, if you care). You get back
site-shortner.link/<slug>— a stable address that answers with an HTTP redirect to wherever it currently points. -
Ship it anywhere
App release notes, READMEs, email footers, support macros, config files, social bios. Anywhere a long ugly URL would go, the short one goes instead — and keeps working when the long one doesn't.
-
PATCH it later
Docs moved? Campaign over? One
PATCHand the very next request lands on the new destination. Nothing already shipped has to change, because the address never did.
a design decision, explained
why our links answer 307
A 301 tells browsers "this moved forever" — and they take that personally. Many will cache it indefinitely and never ask again, which means a 301'd link can never truly change its mind.
A 307 says "go here, for now" — every request checks back with us, so an edit takes effect on the next hit, for everyone, everywhere. Editability is the entire point of this service, so 307 is the default. Want a permanent 301 for SEO reasons? It's one field in the API.
what's in the box
small surface, sharp edges
Five endpoints
Create, read, update, delete, stats. JSON in, JSON out, sensible errors. You'll be done reading the docs before your coffee is.
A real CLI
shortner new, shortner edit, shortner stats. Scriptable, CI-friendly, quiet on success like a good tool should be.
Slugs you choose
Vanity slugs for things humans will read aloud, random ones for everything else — generated without 0/O and 1/l/I lookalikes.
Hit counts, not humans
Per-link totals, daily series, coarse geo, device class. We count requests; we don't profile the people making them.
Expiry & fallbacks
Give a link an end date and a place to send people after. Retired links point somewhere deliberate, not at a 404.
Bulk import
A CSV in, a column of short links out — one per row, each individually editable afterward. Built for the 400-link migration day.
keys
want in?
Keys go out in small batches while the service grows at a pace one pager rotation can handle. Email a line about what you're building and you'll hear back within a couple of days.