Free URL Shortener API With No Key

August 14, 2026 | URLVanish Team | 10 min read

The short version: send a GET request to https://urlvanish.com/api/shorten?format=simple&url=YOUR_URL and read the short link out of the response body as plain text. No API key, no token, no account, no Authorization header. The same query-string shape as is.gd, so existing code usually works by changing the host.

1. The endpoint

There is one endpoint for creating a link and one for resolving it. Both answer an ordinary GET request, which means you can test them in a browser address bar before writing a line of code.

GET https://urlvanish.com/api/shorten?format=simple&url=https://example.com/a/very/long/address
GET https://urlvanish.com/api/expand?format=simple&url=https://urlvanish.com/abc123

The first returns https://urlvanish.com/abc123 as plain text with no quotes, no JSON wrapper and no trailing newline to strip. The second returns the original address the same way.

There is no API key to request, no OAuth dance, no client secret, no bearer token and no sign-up form standing between you and a working call. That is the whole point of this endpoint, and it is the reason people search for a URL shortener API with no key in the first place: for a deploy script, a webhook, a spreadsheet or a one-off migration, the authentication ceremony costs more than the feature is worth.

Why a GET endpoint and not only POST? A GET request is the one thing every environment can make. A shell script, a spreadsheet formula, a database trigger, a smart-home automation, a game server plugin, a CI job, a 2009 codebase with no JSON parser — all of them can fetch a URL. Requiring a POST body with a JSON content type excludes a surprising amount of real software.

2. Every parameter it accepts

The API is deliberately forgiving about parameter names, because the whole reason you are reading a page like this is that you would rather not debug someone else’s naming convention.

ParameterAcceptsNotes
urlThe address to shortenAlso accepted as u, long_url, longUrl or originalUrl. Percent-encode it if it contains & or #.
formatsimple, json, textDefaults to json. simple and text both return a bare string.
shorturlA custom aliasAlso alias, customAlias or custom. Letters, numbers, hyphens and underscores, up to 50 characters.
actionshorten, expandImplied by the path, so you rarely need it.

The URL parameter and percent-encoding

This is where most first attempts fail. If your long address contains its own query string, the & separating its parameters will be read as the end of the url parameter and everything after it will be silently dropped.

# Wrong: utm_source is parsed as a parameter of the API call, not part of the URL
?url=https://example.com/p?id=9&utm_source=news

# Right: the whole address is percent-encoded
?url=https%3A%2F%2Fexample.com%2Fp%3Fid%3D9%26utm_source%3Dnews

Every language has a function for this: urllib.parse.quote in Python, encodeURIComponent in JavaScript, rawurlencode in PHP, --data-urlencode in curl. Use it and this class of bug disappears.

Base64 input

If percent-encoding is awkward in your environment — a spreadsheet, a template language, a shell one-liner with nested quoting — you can pass the address base64-encoded instead. The API detects base64 input and decodes it before validating, so a base64 url parameter with no key works exactly like a plain one.

?format=simple&url=aHR0cHM6Ly9leGFtcGxlLmNvbS9wP2lkPTk=

Path parameter style

There is no path-parameter form such as /api/shorten/https://example.com, and that is intentional rather than an omission. A URL nested inside a path has to be double-encoded to survive, most web servers normalise repeated slashes before the application ever sees them, and the result breaks in ways that are painful to diagnose. A query-string parameter is the form that actually works.

3. Response formats

format=simple

The response body is the short URL and nothing else. No JSON, no XML, no envelope. This is the format to use from a shell script or a spreadsheet, where parsing anything would mean writing a parser.

https://urlvanish.com/abc123

format=json

The default. A flat object with no nesting to walk.

{
  "shorturl": "https://urlvanish.com/abc123",
  "alias": "abc123",
  "originalUrl": "https://example.com/a/very/long/address"
}

Errors

In json, errors arrive as an object with errorcode and errormessage and a matching HTTP status. In simple, the body begins with Error: so a script can test the first six characters without parsing anything.

CodeMeans
400Missing or invalid url. Only http and https are accepted — javascript:, data: and ftp: are rejected.
404On expand: no link with that alias.
409The custom alias you asked for is already taken.
429Rate limited. Check the X-RateLimit-Reset header.

4. Expanding and unshortening

The reverse direction is the same shape. A URL expander API with no key is genuinely useful for link-checking, for archiving, and for showing people where a link goes before they follow it.

GET https://urlvanish.com/api/expand?format=simple&url=https://urlvanish.com/abc123
→ https://example.com/a/very/long/address

Two things worth knowing. Expanding does not count as a click, so you can resolve a link as often as you like without corrupting its statistics. And the endpoint only resolves URLVanish links: it is not a general unshortener for bit.ly or t.co, and asking it to resolve one returns a 400 rather than silently following a redirect chain to somewhere unexpected.

Checking a link without an API: add a + to the end of any URLVanish link — urlvanish.com/abc123+ — and you get a preview page showing the destination without going there. The link checker does the same thing from a form.

5. Rate limits and fair use

No key does not mean no limits, because an endpoint with neither would last about a week before it was full of spam.

Requests per hour
No key100
With a free API key1,000

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, so a well-behaved client never has to guess. A key is free, needs only a username and password to obtain, and is sent as Authorization: Bearer YOUR_KEY when you want the higher ceiling.

Links created through the API go through the same validation and abuse scanning as links created on the website. Creating a link does not make it exempt from suspension if it is reported and turns out to point somewhere harmful.

6. Copy-paste examples

curl

curl -s --get https://urlvanish.com/api/shorten \
     --data-urlencode "format=simple" \
     --data-urlencode "url=https://example.com/p?id=9&ref=x"

Python

import urllib.parse, urllib.request

def shorten(long_url):
    q = urllib.parse.urlencode({"format": "simple", "url": long_url})
    with urllib.request.urlopen("https://urlvanish.com/api/shorten?" + q) as r:
        return r.read().decode().strip()

print(shorten("https://example.com/a/very/long/address"))

JavaScript

const shorten = async (url) => {
  const q = new URLSearchParams({ format: 'simple', url });
  const res = await fetch(`https://urlvanish.com/api/shorten?${q}`);
  return (await res.text()).trim();
};

PHP

function shorten(string $url): string {
    $q = http_build_query(['format' => 'simple', 'url' => $url]);
    return trim(file_get_contents("https://urlvanish.com/api/shorten?$q"));
}

Bash

shorten() { curl -s --get https://urlvanish.com/api/shorten \
  --data-urlencode format=simple --data-urlencode "url=$1"; }

Google Sheets

=IMPORTDATA("https://urlvanish.com/api/shorten?format=simple&url="&ENCODEURL(A2))

That last one is worth a moment. It turns a column of long addresses into a column of short links with no script, no add-on and no key — which for a marketing team is often the entire requirement.

7. Migrating from is.gd, v.gd or a dead shortener

The query-string shape deliberately matches the is.gd convention, because a large amount of existing code already speaks it and rewriting that code is nobody’s idea of a good afternoon. Both of these work:

https://urlvanish.com/api/shorten?format=simple&url=...
https://urlvanish.com/create.php?format=simple&url=...

In most cases the migration is a hostname change in one constant. The parameter names, the format=simple convention and the plain-text response all behave the way the code already expects.

Before you migrate anything: your existing short links keep pointing wherever they already point. Changing which service you create new links with does nothing to the old ones. If the old service shuts down, its links stop resolving and there is no way to recover them from the new provider — which is the argument for keeping your own record of destination addresses rather than trusting any shortener to be your database.

8. When you actually want a key

The keyless endpoint is the right default. There are three cases where a free key earns its keep:

If none of those apply, do not bother. An endpoint you can call with no credentials is less to configure, less to leak in a repository and less to rotate later.

Frequently asked questions

Is there a URL shortener API with no key?

Yes. https://urlvanish.com/api/shorten?format=simple&url=YOUR_URL answers a plain GET request with no API key, no token and no account. The keyless tier allows 100 requests an hour; a free key raises that to 1,000.

How do I create a short URL with a GET request and no authentication?

Percent-encode your long address and request https://urlvanish.com/api/shorten?format=simple&url=ENCODED. The response body is the short link as plain text. No Authorization header is sent or required.

What is the URL parameter for the shorten endpoint?

url. For compatibility with existing code the endpoint also accepts u, long_url, longUrl and originalUrl. The value should be percent-encoded, or base64-encoded if that is easier in your environment.

Can I pass the URL as a base64 parameter?

Yes. Base64 input is detected and decoded before validation, which avoids percent-encoding problems in spreadsheets, templates and shell one-liners where nested quoting gets awkward.

Is there a path-parameter version of the endpoint?

No, and that is deliberate. A URL nested in a path needs double encoding to survive, and most web servers normalise repeated slashes before the application sees the request. A query-string parameter is the form that reliably works.

Is the API is.gd compatible?

The query-string convention matches: ?format=simple&url= behaves the same way and returns the short link as plain text. create.php answers the same shape, so existing is.gd code usually works by changing the hostname.

Is there a free URL expander or unshortener API?

Yes. https://urlvanish.com/api/expand?format=simple&url=SHORT_LINK returns the destination without counting a click. It resolves URLVanish links only, not links from other shorteners.

What are the rate limits without an API key?

100 requests an hour without a key and 1,000 with one. Every response includes X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset so a client can back off correctly rather than guessing.

Do links created through the API expire?

Not unless you ask for that. A link has no scheduled expiry by default. Expiry dates and click limits are optional per-link settings, and a link can be suspended if it is reported for abuse and the report is upheld.

Try it without writing any code

Paste the endpoint into your browser address bar and you will get a short link back as plain text.

Shorten a URL free

Published August 14, 2026 by the URLVanish Team.

Related reading: Full API reference • Build your own URL shortener • How to shorten a URL • Compare shorteners