klipo .link
Developers

API documentation

The klipo.link REST API lets you create, read, list, update and delete your short links, view their statistics, manage their redirect rules, and download their QR code. It's included in every paid plan (monthly, yearly, lifetime).

Base URL

https://klipo.link/api/v1

Authentication

Create a token from Settings → API Tokens (account owner only). The token is shown only once, when it's created — keep it somewhere safe.

Send it in the Authorization header of every request:

Authorization: Bearer <your_token>

A token created by an invited member (editor) acts on the same links as the account owner — tokens themselves can only be created by the owner.

Errors

Application errors have the following shape:

{
  "error": {
    "code": "short_url_not_found",
    "message": "No short URL found for code "abc12"."
  }
}

Validation errors for submitted fields follow Laravel's standard format: {"message": "...", "errors": {"champ": ["..."]}}.

Status Code Meaning
401-Token missing, invalid, or revoked.
403api_access_requires_paid_planThe account is on the free plan.
404short_url_not_foundNo link found for this code.
409slug_takenThe requested custom code already exists.
422link_limit_reachedThe plan's link limit has been reached.
422invalid_dataThe destination URL was rejected.
403feature_not_availableExpiration or redirect rules aren't included in the plan.

Short links

GET /short-urls

Lists your links, paginated by 20.

Query parameters

  • page — page number (default 1)
  • q — free-text search

Example

curl https://klipo.link/api/v1/short-urls?page=1 \
  -H "Authorization: Bearer $TOKEN"
{
  "data": [
    {
      "shortCode": "promo-ete",
      "shortUrl": "https://klipo.link/promo-ete",
      "longUrl": "https://exemple.com/collections/ete",
      "title": "Campagne été",
      "tags": ["campagne", "été"],
      "dateCreated": "2026-06-12T14:03:00+00:00",
      "validUntil": null,
      "visitsSummary": { "total": 4812, "nonBots": 4680 }
    }
  ],
  "meta": { "currentPage": 1, "pagesCount": 8, "totalItems": 148 }
}
POST /short-urls

Creates a new short link.

Request body (JSON)

  • long_url (required) — the destination URL
  • title — free-form title
  • custom_slug — custom code (letters, digits, dashes; can't be a word reserved by klipo.link, e.g. login)
  • tags — array of strings
  • expires_at — ISO 8601 date - paid plans with expiration only

Example

curl -X POST https://klipo.link/api/v1/short-urls \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"long_url": "https://exemple.com/page", "custom_slug": "promo-ete"}'

Response: 201 with the created link, same shape as above (without meta).

GET /short-urls/{'{shortCode}'}

Link details.

curl https://klipo.link/api/v1/short-urls/promo-ete \
  -H "Authorization: Bearer $TOKEN"
PUT /short-urls/{'{shortCode}'}

Updates an existing link. Fully replaces the title, tags, and expiration date - an omitted field is removed, not kept.

Request body (JSON)

  • long_url (required) — the destination URL
  • title — free-form title
  • tags — array of strings
  • expires_at — ISO 8601 date - paid plans with expiration only

Example

curl -X PUT https://klipo.link/api/v1/short-urls/promo-ete \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"long_url": "https://exemple.com/nouvelle-page", "title": "Nouveau titre"}'

Response: 200 with the updated link, same shape as above.

DELETE /short-urls/{'{shortCode}'}

Deletes a link. Response 204 with no content.

curl -X DELETE https://klipo.link/api/v1/short-urls/promo-ete \
  -H "Authorization: Bearer $TOKEN"
GET /short-urls/{'{shortCode}'}/visits

Click statistics for the last 30 days (fixed window). Detected bots are excluded.

curl https://klipo.link/api/v1/short-urls/promo-ete/visits \
  -H "Authorization: Bearer $TOKEN"
{
  "data": {
    "daily": { "2026-08-15": 12, "2026-08-16": 8, "...": 0 },
    "referrers": { "newsletter.exemple.fr": 2140, "instagram.com": 842 },
    "countries": { "France": 3104, "Belgique": 612 },
    "browsers": { "Chrome": 2890, "Safari": 1204 },
    "totalNonBot": 4680
  }
}

referrers, countries and browsers are limited to the 5 most frequent values.

Redirect rules

Available on paid plans that include redirect rules. A rule redirects to another URL based on the visitor's device, country, or language - the link's default destination applies when no rule matches.

GET /short-urls/{'{shortCode}'}/redirect-rules

Lists a link's redirect rules, in priority order.

curl https://klipo.link/api/v1/short-urls/promo-ete/redirect-rules \
  -H "Authorization: Bearer $TOKEN"
{
  "data": [
    {
      "priority": 1,
      "longUrl": "https://exemple.com/mobile",
      "conditions": [{ "type": "device", "matchValue": "mobile", "matchKey": null }]
    }
  ]
}
POST /short-urls/{'{shortCode}'}/redirect-rules

Adds a redirect rule (the new rule is added after the existing ones).

Request body (JSON)

  • condition_type (required)device, country or language
  • condition_value (required) — device (android, ios, mobile, windows, macos, linux, chromeos, desktop), 2-letter ISO country code (e.g. FR), or language code
  • destination_url (required) — Redirect URL when the condition matches

Example

curl -X POST https://klipo.link/api/v1/short-urls/promo-ete/redirect-rules \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"condition_type": "device", "condition_value": "mobile", "destination_url": "https://exemple.com/mobile"}'

Response: 201 with the full list of rules, same shape as above.

DELETE /short-urls/{'{shortCode}'}/redirect-rules/{'{priority}'}

Deletes a rule by its priority (the number returned by the list above). Response: 204 with no content.

curl -X DELETE https://klipo.link/api/v1/short-urls/promo-ete/redirect-rules/1 \
  -H "Authorization: Bearer $TOKEN"

QR code

GET /short-urls/{'{shortCode}'}/qr-code

Generates the short link's QR code and returns the image directly (no JSON).

On paid plans, if a logo has been added in the account settings, it's automatically placed in the center of the QR code — no extra parameter required.

Query parameters

  • formatpng or svg (default png)
  • download — set to 1 to receive a Content-Disposition attachment header instead of an inline response

Example

curl "https://klipo.link/api/v1/short-urls/promo-ete/qr-code?format=svg&download=1" \
  -H "Authorization: Bearer $TOKEN" \
  -o promo-ete.svg