Links
Create a link
Section titled “Create a link”curl -X POST https://qck.sh/public-api/v1/links \ -H "X-API-Key: qck_your_api_key_here" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com/my-page", "title": "My Page", "description": "A landing page for the campaign", "og_image": "https://example.com/og-banner.png", "custom_alias": "my-page", "tags": ["marketing", "q1"], "expires_at": "2026-12-31T23:59:59Z" }'| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | The destination URL |
title | string | No | OG title (auto-extracted if omitted) |
description | string | No | OG description (auto-extracted if omitted) |
og_image | string | No | OG image URL (auto-extracted if omitted) |
custom_alias | string | No | Custom short code (3+ chars, Basic tier or higher) |
tags | string[] | No | Tags for organization |
expires_at | ISO 8601 | No | Auto-expire at this time |
is_password_protected | boolean | No | Must be true for password to take effect |
password | string | No | Password-protect the link (requires is_password_protected: true, otherwise silently ignored) |
utm_source | string | No | UTM source appended to destination |
utm_medium | string | No | UTM medium appended to destination |
utm_campaign | string | No | UTM campaign appended to destination |
utm_term | string | No | UTM term appended to destination |
utm_content | string | No | UTM content appended to destination |
domain_id | string | No | Custom domain ID for the short URL |
campaign_id | string | No | Campaign to assign the link to (Growth tier or higher) |
To password-protect a link, set both fields:
{ "url": "https://example.com", "is_password_protected": true, "password": "s3cret" }If you omit title, description, or og_image, they are automatically extracted from the destination URL in the background.
OG image upload
Section titled “OG image upload”For custom OG images (instead of a URL), upload the image file directly. Requires Growth ($49/mo) or higher.
curl -X PUT https://qck.sh/public-api/v1/links/{id}/og-image \ -H "X-API-Key: qck_your_api_key_here" \ -H "Content-Type: image/png" \ --data-binary @image.png- Supported formats: JPEG, PNG, WebP, GIF
- Max file size: 5 MB
- Images are resized to 1200x630 and converted to WebP
Delete an uploaded OG image:
curl -X DELETE https://qck.sh/public-api/v1/links/{id}/og-image \ -H "X-API-Key: qck_your_api_key_here"Update a link
Section titled “Update a link”curl -X PATCH https://qck.sh/public-api/v1/links/{id} \ -H "X-API-Key: qck_your_api_key_here" \ -H "Content-Type: application/json" \ -d '{"title": "Updated Title", "tags": ["new-tag"]}'You can update title, description, og_image, tags, alias, expiration, password, and active status. The destination URL cannot be changed. Create a new link instead.
Delete a link
Section titled “Delete a link”curl -X DELETE https://qck.sh/public-api/v1/links/{id} \ -H "X-API-Key: qck_your_api_key_here"Bulk create
Section titled “Bulk create”Create multiple links in one request:
curl -X POST https://qck.sh/public-api/v1/links/bulk \ -H "X-API-Key: qck_your_api_key_here" \ -H "Content-Type: application/json" \ -d '[ {"url": "https://example.com/page-1", "title": "Page 1"}, {"url": "https://example.com/page-2", "title": "Page 2"} ]'Maximum links per batch depends on your tier: Free (25), Basic (100), Growth (500), Pro (2,500), Business (10,000), Scale (25,000).
Bulk creation is not all-or-nothing. If some links fail, the response is 207 Multi-Status with a failed[] array describing each failure (index, URL, and error), while the rest are created normally. See the Links API reference for the full response shape.
List links
Section titled “List links”curl "https://qck.sh/public-api/v1/links?page=1&per_page=20" \ -H "X-API-Key: qck_your_api_key_here"Supports page and per_page query parameters (max 250 per page).
Limits
Section titled “Limits”New links per month by tier: Free (25), Basic (500), Growth (2,500), Pro (10,000), Business (50,000), Scale (200,000).
All created links stay active forever. The limit only caps how many new links you can create each calendar month.
Custom aliases require Basic ($19/mo) or higher. Aliases must be 3+ characters and are unique across the platform.