Links are the core resource in linq. Each link pairs a slug on a domain with a destination URL, and optionally a set of routing rules, OG metadata, preset query parameters, and an expiry time. All link endpoints require a valid API key sent asDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/org-quicko/linq/llms.txt
Use this file to discover all available pages before exploring further.
Authorization: Bearer <key> or X-Api-Key: <key>. Roles are ordered viewer < editor < admin; each operation below states the minimum it requires.
Archiving vs. purging.
DELETE /api/v1/links/{id} archives a link — it stops redirecting but its row, visit history, and slug reservation all remain intact. The only way to permanently destroy a link and release its slug is to purge it via DELETE /api/v1/links/{id}/purge (single) or DELETE /api/v1/links/purge (bulk). Archiving is reversible with PATCH { "status": "active" }; purging is not.GET /api/v1/links
List links, paginated and filterable. Every role may call this endpoint. Minimum role:viewer
Query parameters
Maximum records to return per page. Defaults to the server’s configured page size.
Zero-based offset into the result set for pagination.
Substring match (case-insensitive) across
slug, name, and destination. Minimum 1 character, maximum 200.Comma-separated tag list. A link matches when it carries any of the provided tags. Example:
launch,press.Comma-separated UUID(s). Filters links to one or more domains.
One of
active, archived, or all.Sort column:
created_at, updated_at, or visits.Sort direction:
asc or desc.Filter by expiry state relative to now:
any, live (never-expiring or future expiry), or expired.Response — 200
Array of link objects matching the query.
Total count of matching records across all pages.
Page size used for this response.
Offset used for this response.
POST /api/v1/links
Create a new short link. Omitslug to have one generated automatically. A custom slug that is already taken on that domain — even by an archived link — returns 409 Conflict.
Minimum role: editor
Request body
UUID of the domain this link belongs to. The domain must be active.
The long URL visitors are sent to. Must be a valid URL.
Custom slug (1–64 characters,
[A-Za-z0-9_-]). Omit for a server-generated slug. Immutable after creation.Human-readable label (max 200 chars). When absent, the server attempts to fetch the destination page’s
<title>, falling back to the destination host.Optional description (max 500 chars). When absent, the server attempts to fetch the destination page’s meta description.
Up to 20 tag strings (each up to 50 chars). Used for filtering; tags are derived from active links — there is no separate tag table.
When
true, the incoming query string is merged onto the destination URL. Also gates preset_params: when false, neither forwarded query nor preset params are applied.Key-value pairs (up to 20 entries; keys max 64 chars, values max 512 chars) set on the destination at redirect time. They override both the destination’s own query and any forwarded query on collision. Applied only when
forward_query is true.ISO-8601 datetime. After this moment the link resolves like an unknown slug.
null or absent means it never expires.When
true, the link appears in the domain’s public /llms.txt catalogue.Initial routing rules. An ordered array of rule objects (up to 50). See the Rules API for the rule input shape. Positions are assigned from array order.
Response — 201
Returns the created Link object.GET /api/v1/links/count
Return only the total count of links matching astatus filter, without fetching any link rows. Useful for sidebar badges and counters that have no need for full link data.
Minimum role: viewer
Query parameters
One of
active, archived, or all.Response — 200
Number of links matching the given status filter.
GET /api/v1/links/
Fetch a single link by its UUID. Includes denormalizeddomain_host, short_url, visit totals, and rule_count.
Minimum role: viewer
Path parameters
UUID of the link.
Response — 200
Returns the Link object.PATCH /api/v1/links/
Update one or more mutable fields on a link. The request body is strict:slug and domain_id are immutable and sending either returns 400. Status changes (archiving or restoring) require admin; all other field updates require editor.
Minimum role: editor (or admin for status changes)
Path parameters
UUID of the link to update.
Request body
All fields are optional. Send only the fields you want to change.New destination URL. Triggers a fresh metadata fetch for
name, description, and icon_url if the caller does not also supply them.New label (max 200 chars).
null clears it (the server will re-derive it on the next metadata fetch).New description (max 500 chars).
null clears it.Replaces the full tag list (up to 20 entries).
Toggle query forwarding and preset-params application.
Replaces the full preset-params map (up to 20 key-value pairs).
active or archived. Admin only. Restoring an archived link does not reclaim any visits that occurred while it was archived.ISO-8601 datetime, or
null to remove the expiry.Toggle
/llms.txt visibility.Replaces the full rules list atomically. Send
[] to clear all rules.Response — 200
Returns the updated Link object.DELETE /api/v1/links/
Archive a link (soft delete). The link stops redirecting — its slug becomes an orphan — but its row, visit history, and slug reservation are preserved. Reversible viaPATCH { "status": "active" }.
Minimum role: admin
Path parameters
UUID of the link to archive.
Response — 200
Returns the updated Link object withstatus: "archived".
DELETE /api/v1/links//purge
Permanently destroy an archived link. Its rules are deleted with it (ON DELETE CASCADE). Its visits survive as orphan visits — their analytics history is preserved but attribution to this link is removed. This operation releases the slug for reuse on that domain.
Minimum role: admin
Path parameters
UUID of the archived link to purge.
Response — 204
No content on success.DELETE /api/v1/links/purge
Bulk-purge every archived link in one call — the “Empty archive” operation. Equivalent to callingDELETE /api/v1/links/{id}/purge for every archived link, but done server-side in a single query. Each link’s rules go with it. Takes no filters: this always means every archived link.
Minimum role: admin
Response — 200
Number of links that were permanently destroyed.
Link object
The full Link response shape returned by all link endpoints.UUID (v7) of the link.
UUID of the domain this link belongs to.
Denormalized hostname (e.g.
links.example.com). Included so list rows render without a second request.The path segment after the host. Pattern
[A-Za-z0-9_-]{1,64}. Immutable.The full short URL, assembled from
domain_host and slug at read time. Uses https:// for non-localhost hosts.The long URL this link redirects to by default.
Human-readable label (max 200 chars). Auto-derived from the destination page title when not supplied.
Optional description (max 500 chars).
Favicon or OG image URL fetched from the destination page.
Up to 20 tag strings.
Whether the incoming query string is merged onto the destination. Also gates
preset_params.active or archived.Count of non-bot visits. Sourced from the
visit_counts materialized counter kept in sync by a database trigger.Count of bot visits.
ISO-8601 datetime after which the link resolves like an unknown slug.
null means it never expires.Whether this link appears in the domain’s public
/llms.txt catalogue.Number of routing rules attached to this link. When greater than zero, the link uses dynamic routing; see the Rules API.
ISO-8601 creation timestamp.
ISO-8601 last-updated timestamp.