Sign In

API Reference

Programmatic access to create and manage links

Access qklnk programmatically using our REST API. Create links, retrieve analytics, and manage your account.

Authentication

All API requests require authentication using a Bearer token. Generate an API token from your API Tokens page.

cURL
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
     -H "Accept: application/json" \
     https://qklnk.cc/api/v1/...

Token Permissions

When creating an API token, you can select which permissions to grant:

Permission Description
readList and view links and analytics
createCreate new links and record events
updateUpdate existing links
deleteDelete links

Requests made without the required permission will receive a 403 Forbidden response.

Base URL

https://qklnk.cc/api/v1

Endpoints

Get Current User

GET /api/v1/user

Returns information about the authenticated user.

Create Link

POST /api/v1/links

Create a new quick link. Requires create permission.

Request Body:
JSON
{
    "destination": "https://example.com/page",
    "utm_source": "api",
    "utm_medium": "email",
    "utm_campaign": "winter-sale",
    "utm_content": "body_button",
    "utm_term": "deal",
    "domain": "example.com"
}
Parameters:
Parameter Type Required Description
destinationstringYesTarget URL to redirect to
utm_sourcestringNoUTM source parameter
utm_mediumstringNoUTM medium parameter
utm_campaignstringNoUTM campaign parameter
utm_contentstringNoUTM content parameter
utm_termstringNoUTM term parameter
domainstringNoCustom domain (e.g. "example.com"). Uses team default if not specified
Response (201):
JSON
{
    "data": {
        "id": 123,
        "slug": "abc123",
        "short_url": "https://qklnk.cc/abc123",
        "destination": "https://example.com/page",
        "clicks": 0,
        "created_at": "2024-01-15T10:30:00Z"
    }
}

List Links

GET /api/v1/links

Retrieve a paginated list of all quick links for the current team. Requires read permission.

Response (200):
JSON
{
    "data": [...],
    "meta": {
        "current_page": 1,
        "total": 50
    }
}

Get Link

GET /api/v1/links/{slug}

Retrieve a single quick link with statistics. Requires read permission.

Response (200):
JSON
{
    "data": {
        "id": 123,
        "slug": "abc123",
        "destination": "https://example.com/page",
        "clicks": 150,
        "unique_visitors": 89
    }
}

Update Link

PUT /api/v1/links/{slug}

Update an existing quick link. Requires update permission.

Request Body:
JSON
{
    "destination": "https://example.com/new-page",
    "utm_source": "api",
    "utm_medium": "email",
    "utm_campaign": "updated-campaign",
    "utm_content": "footer_link",
    "utm_term": "promo"
}
Parameters:
Parameter Type Required Description
destinationstringYesTarget URL to redirect to
utm_sourcestringNoUTM source parameter
utm_mediumstringNoUTM medium parameter
utm_campaignstringNoUTM campaign parameter
utm_contentstringNoUTM content parameter
utm_termstringNoUTM term parameter
Response (200):
JSON
{
    "data": {
        "id": 123,
        "slug": "abc123",
        "destination": "https://example.com/new-page",
        "utm_source": "api",
        "utm_medium": "email",
        "utm_campaign": "updated-campaign",
        "utm_content": "footer_link",
        "utm_term": "promo",
        ...
    }
}

Get Analytics

GET /api/v1/analytics?days=7

Retrieve analytics summary for the current team.

Query Parameters:
Parameter Type Default Description
daysinteger7Number of days to include in analytics
Response (200):
JSON
{
    "data": {
        "total_clicks": 1500,
        "unique_visitors": 890,
        "conversions": 120,
        "revenue": 2999.99,
        "top_links": [
            {
                "id": 123,
                "slug": "abc123",
                "destination": "https://example.com/page",
                "clicks": 450
            }
        ]
    }
}

Record Event

POST /api/v1/events/record

Record an event for conversion tracking.

Request Body:
JSON
{
    "visitor_id": "v_abc123xyz",
    "event_name": "purchase",
    "revenue": 99.99,
    "name": "Premium Package",
    "metadata": {
        "product_id": "SKU-12345"
    }
}
Parameters:
Parameter Type Required Description
visitor_idstringYesUnique visitor identifier
event_namestringYesType of conversion event
revenuenumberNoMonetary value
namestringNoDisplay name for the event (max 255 chars)
metadataobjectNoAdditional data

Response Format

All responses are in JSON format:

Success Response:
JSON
{
    "data": {
        "id": 123,
        "visitor_id": "v_abc123xyz",
        "event_name": "purchase",
        "revenue": 99.99,
        "occurred_at": "2024-01-15T10:30:00Z",
        "is_conversion": true
    }
}
Error Response:
JSON
{
    "message": "Validation failed",
    "errors": {
        "visitor_id": ["The visitor_id field is required."]
    }
}

Rate Limiting

API requests are rate limited to 60 requests per minute. The following headers are included in responses:

  • X-RateLimit-Limit - Maximum requests per minute
  • X-RateLimit-Remaining - Remaining requests this minute

Getting Help

If you need additional API endpoints or have questions, please contact support.