URL shortener API

A REST API for links, folders, tags and click analytics

Bearer-token authentication, a per-plan rate limit on each key, and a published list of exactly which endpoints a key can reach. On every plan, including Free — create a key in the dashboard and start calling.

On every plan, including Free · No credit card required

app.clik.so/settings
API ManagementGenerate New Key
CI/CD RunnerRead, Write
clik_live_4f8Xq2…9dLm
Active · created 02/09/2026
The API Management screen, where keys are created and revoked

Quick answer

What is the ClikSo URL shortener API?

The ClikSo API is a REST interface for creating and managing short links, folders and tags and reading their click analytics, on every plan including Free. Requests authenticate with a Bearer key that begins clik_live_ and is pinned to one workspace, at 30 to 500 requests a minute depending on the plan. Anything outside the published allowlist returns 403.

Requests per API key per minute, rising with the plan
30–500Requests per API key per minute, rising with the plan
The prefix every live ClikSo API key carries
clik_live_The prefix every live ClikSo API key carries
Read, write and admin, chosen when you create a key
3 scopesRead, write and admin, chosen when you create a key
Every key is pinned to a single workspace
1 workspaceEvery key is pinned to a single workspace
  • Every plan, including Free — 3 keys on Free, 10 on Starter, 20 on Pro, 30 on Business
  • Authorization: Bearer clik_live_… — an X-API-Key header is not supported
  • 30 requests per minute per key on Free, 100 on Starter, 300 on Pro, 500 on Business; 30 failed authentications per minute per IP
  • Click analytics through three POST endpoints, with a daily quota per workspace: 100 on Free up to 20,000 on Business
  • Scopes read, write and admin; a key never exceeds the workspace role of whoever created it

How to use the ClikSo API

Four steps from an empty settings page to a link created from code.

  1. Create a key at Settings → API

    Workspace admins can generate a key, give it a name of up to 30 characters and choose its scopes: read, write or admin. The scopes stack — write includes read, and admin includes both.

  2. Copy it once

    The full secret is shown exactly once, at creation, and cannot be retrieved afterwards. Put it in your secrets manager there and then. A key can later be renamed, revoked so it stops working, or deleted outright.

  3. Send it as a Bearer token

    Every request carries Authorization: Bearer clik_live_… — there is no X-API-Key header, and a request without a valid Bearer value is rejected. Each key is pinned to one workspace, so the key decides which workspace you are writing to.

  4. Stay inside the allowlist and the rate limit

    Keys reach the link, folder, tag and analytics endpoints listed below; anything else returns 403 before a single database query runs. The rate limit is per key, per minute, and rises with the plan — 30 on Free, 100 on Starter, 300 on Pro, 500 on Business. The analytics endpoints also have their own quota per workspace, and repeated failed authentication is throttled separately, at 30 a minute per IP address.

One request, and what comes back

Create a key at Settings → API and this is the call you make first. Every endpoint, field and error is in the API reference, and the quickstart walks through it step by step.

$ curl -X POST https://app.clik.so/api/links \ -H "Authorization: Bearer clik_live_4f8Xq2…9dLm" \ -H "Content-Type: application/json" \ -d '{"destination_url":"https://example.com/spring-sale","short_code":"spring26"}'HTTP/2 201{ "status": 201, "success": true, "message": "Link created successfully", "data": { "id": "0d1f7c3a-…", "domain": "clik.is", "short_code": "spring26", "destination_url": "https://example.com/spring-sale", "click_count": 0, "created_at": "2026-09-16T09:41:22.184Z" }}
Authorization: Bearer — no X-API-Key30–500 requests / minute, per key
The same request in JavaScript
const res = await fetch("https://app.clik.so/api/links", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CLIKSO_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    destination_url: "https://example.com/spring-sale",
    short_code: "spring26",
  }),
});

const link = await res.json();
The same request in Python
import os
import requests

res = requests.post(
    "https://app.clik.so/api/links",
    headers={"Authorization": f"Bearer {os.environ['CLIKSO_API_KEY']}"},
    json={
        "destination_url": "https://example.com/spring-sale",
        "short_code": "spring26",
    },
)

print(res.json())

Exactly what an API key can reach

The allowlist is published rather than discovered. A key that calls anything not on this list gets a 403 before a single database query runs — and so does the route that reveals a link's password, even though it sits under /api/links.

/api/linksAll methods — list, create, read, update, delete
/api/links/bulkBulk delete, archive or unarchive, and move to folder — up to 100 links
/api/links/slug-checkIs this back-half available?
/api/links/ai-slugThree AI-suggested back-halves for a destination
/api/links/og-previewFetch the destination’s own preview card
/api/foldersAll methods
/api/tagsAll methods
/api/domainsGET only — list your custom domains
/api/workspace/domain-prefsGET only
/api/system-domainsThe free branded domains, such as clik.is
/api/workspace/bootstrapWorkspace and plan context
/api/workspace/usageLinks and clicks used against your plan
/api/extensionEndpoints the ClikSo browser extension uses
/api/analytics/summaryPOST only — click totals, and breakdowns by country, city, device, browser, OS, referrer and UTM
/api/analytics/timeseriesPOST only — clicks over time
/api/analytics/filterPOST only — recent raw clicks, up to 1,000 rows

The analytics quota

The three analytics endpoints share one allowance per workspace, on top of each key's rate limit. They only return clicks inside your plan's data retention window, and the AI analytics chat is not part of the API.

PlanPer minutePer day
Free5100
Starter101,000
Pro305,000
Business6020,000

Enterprise quotas are set per contract. Every number is also on the limits page of the docs.

What people build with it

Everything below maps to an endpoint on the allowlist above — no roadmap features.

Links created by your own product

Generate a branded short link at the moment a record is created — an order, a ticket, an invoice — instead of making someone paste URLs into a dashboard afterwards.

Checking a slug before you commit to it

The slug-check endpoint answers whether a back-half is free, so your own form can validate it before your user hits save rather than after.

Letting AI name the link

The AI-slug endpoint returns three suggested back-halves for a destination, already availability-checked, so an automated pipeline can pick a readable slug instead of a random one.

Keeping folders and tags in step

Folders and tags are full read-write resources. A client onboarded in your CRM can get its folder in ClikSo in the same script, with the tags your reporting expects.

Housekeeping scripts

The bulk endpoint archives, deletes or moves up to 100 links per call — the practical way to retire a campaign’s links at the end of a quarter without clicking through a list.

Click stats on your own dashboard

The analytics endpoints return click totals, breakdowns by country, device, browser, referrer and UTM, and clicks over time, and the usage endpoint reports where you are against your plan’s allowances — enough for an internal report without copying numbers out of the dashboard.

Link APIs compared

Free API access and a public reference are table stakes, and ClikSo has both. The row we lose is volume: Dub.co and Short.io publish higher ceilings than our per-key limits, and our analytics endpoints carry a daily quota per workspace.

Link APIs compared
CapabilityClikSoBitlyDub.coShort.ioTinyURL
Published rate limit30–500 req/min1k–50k req/month60–3,000 req/min~1,000 links / 5 s10k calls/month
API access on the free plan
Endpoints for click analyticsEvery planPro and aboveNot documented
Public API reference published

Competitor details taken from each provider's own published pricing and documentation, last verified 16 September 2026. Bitly and TinyURL publish monthly API request quotas rather than a per-minute rate; Dub.co and ClikSo publish a per-minute limit.

Good to know

  • Analytics has its own quota. On top of the per-key rate limit, the analytics endpoints allow 5 requests a minute and 100 a day per workspace on Free, up to 60 a minute and 20,000 a day on Business, and they only return clicks inside your plan’s retention window. The AI analytics chat is not part of the API.
  • Plan-gated features stay plan-gated. A password, tracking pixels or a custom social preview needs Starter, and geo targeting, device targeting or A/B testing needs Pro — through the API as well as the dashboard. A key on a lower plan gets a 402 error that names the plan required.
  • Some things stay in the dashboard. Custom domains are read-only to a key, the route that reveals a link’s password is refused, and keys cannot manage members, billing or other keys. There are no webhooks.
  • The bulk endpoint is not an importer. It deletes, archives, unarchives and moves up to 100 existing links per call — there is no bulk link creation and no CSV import anywhere in ClikSo.
  • Only the Bearer header works, and a key never outranks its creator. Authorization: Bearer clik_live_… is the single supported method; an X-API-Key header is rejected. The effective permission is the lower of the key’s scope and the workspace role of the admin who created it, and the secret is shown once.

API access by plan

The API is on every plan, including Free. What rises with the plan is how many keys the workspace can hold, how fast each key can call, and how many analytics requests the workspace can make in a day — all of it on the limits page of the docs. Keys are created by admins of a shared workspace and can manage custom short links.

FreeIncluded · 3 keys · 30 req/min per key · 100 analytics requests a day
StarterIncluded · 10 keys · 100 req/min per key · 1,000 analytics requests a day
ProIncluded · 20 keys · 300 req/min per key · 5,000 analytics requests a day
BusinessIncluded · 30 keys · 500 req/min per key · 20,000 analytics requests a day
EnterpriseIncluded · keys, rate limit and analytics quota set per contract

Frequently asked questions

Go to Settings → API in the dashboard and generate a key. Only workspace admins can create or manage keys. You give the key a name and choose its scopes — read, write or admin — and the full secret is shown exactly once, at creation.

Send the key as a Bearer token: Authorization: Bearer clik_live_… on every request. An X-API-Key header is not supported. Each key is pinned to a single workspace, and its effective permission is the lower of the key’s scope and the workspace role of the person who created it.

They are per key, per minute, and rise with the plan: 30 requests on Free, 100 on Starter, 300 on Pro and 500 on Business, with Enterprise limits set per contract. The analytics endpoints also share a quota per workspace, from 5 a minute and 100 a day on Free to 60 a minute and 20,000 a day on Business. Failed authentication attempts are separately limited to thirty a minute per IP address.

Links, folders and tags with all methods, including the bulk, slug-check, AI-slug and preview endpoints under links; the summary, timeseries and filter analytics endpoints as POST only; custom domains and workspace domain preferences as GET only; plus the system-domains, workspace bootstrap, workspace usage and extension endpoints. Anything outside that allowlist returns 403 before any database query runs, and so does the route that reveals a link’s password.

Create, edit and delete short links, manage the folders and tags that organise them, and read their click analytics, from your own code. The same key can check whether a slug is free, ask for AI slug suggestions, preview a destination’s social card, and delete, archive, unarchive or move up to 100 links to a folder in one call. It can also read your custom domains and your workspace usage.

Yes, on every plan. Three POST endpoints return click totals and breakdowns by country, city, device, browser, operating system, referrer and UTM, clicks over time, and up to 1,000 recent raw clicks. They share a quota per workspace, from 100 requests a day on Free to 20,000 on Business, and only return clicks inside your plan’s retention window. The AI analytics chat is not part of the API.

Revoke it at Settings → API. A revoked key is refused, and because every key is separate, your other integrations keep running while you create a replacement. Each key also carries its own scope — read, write or admin — so a key handed to a script never needs more access than that script does.

Any plan, including Free. What rises with the plan is the number of keys (3 on Free, 10 on Starter, 20 on Pro, 30 on Business), the per-key rate limit and the daily analytics quota. Link features that need a paid plan need it through the API too: a password, tracking pixels or a custom social preview needs Starter, and geo targeting, device targeting or A/B testing needs Pro.

Yes, through the ClikSo MCP server at https://app.clik.so/mcp rather than an API key. Claude, ChatGPT, Gemini, Cursor, VS Code and other AI apps that support remote MCP servers sign in to ClikSo with OAuth and follow the same plan limits as API keys, on every plan including Free. Changes and deletes wait for your approval by default.

At clik.so/docs. It has a quickstart that takes you from a new key to your first short link, step-by-step guides, and a reference for every endpoint an API key can call.

Last reviewed 16 September 2026 against the live product. Competitor details come from each provider's own published pricing and developer documentation. See the full feature list, the developer docs or ClikSo vs Dub.co.

Ready to get started?

Join the marketers and developers building the future of link sharing.

Free forever plan. No credit card required.