URL Shortening
Overview
A short link is an alias that points at an existing dynamic link. It lives on the same project subdomain ({subdomain}.linksense.net/{slug}) and inherits the parent link's routing, social preview, deep-link config, and analytics. The only difference is the path: shorter, brandable, memorable.
acme.linksense.net/spring-promo-2026 into acme.linksense.net/promo.Short Links vs Custom Paths
Both feel similar but serve different roles:
- Custom paths are part of a dynamic link's identity. One per link.
- Short links are campaign-style aliases. A link can have many; delete and recreate to rotate.
Both share the slug namespace within a project — you cannot have a short link with the same path as a sibling custom path (or vice versa).
Creating in the Dashboard
Find the dynamic link you want to alias and open its action menu in the links list.
Pick the new Short links action to open the manager dialog.
Enter a custom slug (3–20 characters) or leave it blank — we'll auto-generate a 4-character one.
The short URL is copied to your clipboard automatically. Share it anywhere.
REST API
Short link CRUD is available under the project-scoped REST API. Authenticate with an API key (ls_live_…). All endpoints require the Pro plan; calls from Starter accounts return 403 FORBIDDEN_PLAN.
Create
curl -X POST https://linksense.net/api/v1/projects/$PROJECT_ID/short-links \ -H "Authorization: Bearer $LINKSENSE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "dynamic_link_id": "00000000-0000-0000-0000-000000000000", "slug": "promo" }'| Field | Type | Required | Description |
|---|---|---|---|
dynamic_link_id | uuid | Yes | The parent dynamic link this slug aliases. Must belong to the same project. |
slug | string | No | 3–20 chars, lowercase a–z, 0–9, hyphens and underscores allowed (not leading/trailing). Auto-generated when omitted. |
Successful responses return 201 Created with the new short link plus its fully-formed short_url:
{ "data": { "id": "11111111-1111-1111-1111-111111111111", "project_id": "00000000-0000-0000-0000-000000000000", "dynamic_link_id": "00000000-0000-0000-0000-000000000000", "slug": "promo", "short_url": "https://acme.linksense.net/promo", "source": "api", "created_by": "...", "created_by_api_key_id": "...", "created_at": "2026-05-25T12:00:00Z", "updated_at": "2026-05-25T12:00:00Z" }}List
curl "https://linksense.net/api/v1/projects/$PROJECT_ID/short-links?page=1&limit=10&dynamic_link_id=$LINK_ID" \ -H "Authorization: Bearer $LINKSENSE_API_KEY"Optional query params: page (default 1), limit (default 10, max 100), dynamic_link_id to filter to a single parent.
Get / Delete
# Fetchcurl https://linksense.net/api/v1/projects/$PROJECT_ID/short-links/$ID \ -H "Authorization: Bearer $LINKSENSE_API_KEY" # Delete (slugs are immutable — delete and recreate to rename)curl -X DELETE https://linksense.net/api/v1/projects/$PROJECT_ID/short-links/$ID \ -H "Authorization: Bearer $LINKSENSE_API_KEY"SDK Resolve
Native apps can expand a short URL into its parent dynamic link payload via the SDK resolve endpoint. The wire contract is live today; convenience methods (resolve(shortURL)) ship in the next minor SDK release per platform.
curl -X POST https://linksense.net/api/sdk/v1/short-links/resolve \ -H "Authorization: Bearer $LINKSENSE_SDK_KEY" \ -H "Content-Type: application/json" \ -d '{ "slug": "promo" }'The response contains the slug echo plus the parent dynamic link in the same shape returned by GET /api/sdk/v1/links/{linkId} — so SDKs can feed it straight into existing routing logic.
404 NOT_FOUND — never 403 — so existence is not leakable across projects.Analytics
Clicks on a short URL roll up to the parent dynamic link's analytics. The Top Links table shows a "Via short" badge per row with the count and most-used slug, so you can see which campaigns are driving traffic without breaking apart the parent link's totals.
via_short_slug shipped show as ungrouped.Slug Rules & Collisions
- 3–20 characters
- Lowercase
a–z, digits0–9, single-or_between alphanumerics - No leading or trailing separators
- Reserved words (e.g.
dashboard,api) are rejected - Unique within a project across both
short_linksanddynamic_links.custom_path
Collisions return 409 SLUG_EXISTS. Auto-generated slugs retry on collision; the keyspace (1.6M combinations per project at length 4) keeps that practically free.
Pricing
URL shortening is a Pro feature. There is no per-link cap beyond the standard project link limit. Starter accounts see an upgrade prompt in the dashboard and receive 403 FORBIDDEN_PLAN from the REST API.