URL Shorteners — entry 003 of 11

CleanURI

Verified Aug 2026

CleanURI is a minimal, free URL shortener with a single documented endpoint: POST /api/v1/shorten takes a (URL-encoded) long URL and returns a short cleanuri.com link as JSON. It needs no account or API key, making it one of the simplest shorteners to call programmatically, though it offers no analytics, custom aliases, or link management beyond creation.

CleanURI is a single-endpoint URL shortener: POST /shorten takes a long URL and hands back a short cleanuri.com link as JSON. A live POST this run went through with no account, no key, and no signup — the entire surface is that one route.

url-shortenerno-authfreerest
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSDisabledBrowser calls need a server-side proxy.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/cleanuri/"><img src="https://greatapis.com/badge/cleanuri.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required — a live POST this run against /api/v1/shorten with just a form-encoded url field returned a real short link with no Authorization header and no prior registration step.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Shorten a long URL

POSThttps://cleanuri.com/api/v1/shorten

Content-Type: application/x-www-form-urlencoded

url=https%3A%2F%2Fgithub.com%2Fanthropics%2Fclaude-code

200 application/json;charset=utf-8

{"result_url":"https:\/\/cleanuri.com\/nmA8Oz"}

The response echoes the escaped-slash JSON exactly as the API sends it (\/ rather than /) — that's the live wire format, not a rendering artifact. The short link's path segment is a fixed-length random string, not sequential or derived from the input.

Developer reference

Rate limit

2 requests/second per IP

Gotchas & limits

  • CORS is not supported — a live POST this run with Origin: https://example.com returned 200 with no Access-Control-Allow-Origin header at all, and a follow-up OPTIONS preflight on the same path didn't get CORS treatment either: it came back 405 Method not allowed (POST is the only method the route accepts, so the preflight itself is rejected before any CORS headers would apply). Calling this from client-side JavaScript on another origin will fail.
  • A malformed url value doesn't 500 — a live POST this run with url=not-a-valid-url returned a clean 400 {"error":"API Error: URL is invalid (check #1)"}.
  • A bare hostname with no scheme is rejected, not auto-prefixed — a live POST this run with url=example.com (no http:///https://) returned the identical 400 "URL is invalid" error rather than guessing a scheme.
  • There is no expand, lookup, or stats endpoint — a live GET this run against /api/v1/expand 404'd, and the API's own docs page lists exactly one route, POST /api/v1/shorten. Once you have a short link, this API gives no way to look up or reverse it.
  • Plain curl with no User-Agent header gets a 404 on the site's own HTML pages (home, /docs) from what looks like a bot-mitigation rule scoped to GET routes — the API route itself is unaffected, but don't be fooled if you're also scraping the docs page: add a browser-like User-Agent there.