Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Andr21Da16/Quikko/llms.txt

Use this file to discover all available pages before exploring further.

Quikko provides two plans — Free and Pro — enforced server-side on every API call. The active URL limit and analytics time range are the primary differentiators between them. Plan enforcement happens entirely in the Go backend; no client-side trust is involved. The plan a user holds is read from the database on each operation, so it is never embedded in a JWT and cannot be spoofed by a tampered token.

Plan comparison

FeatureFreePro
Active URLsUp to 5Unlimited
Analytics range24 hours24h, 7d, 30d
CSV export
QR codes
Real-time dashboard
Custom aliases

Free plan limits enforced

The backend enforces two hard limits for Free plan users. Active URL quota — A Free account may hold at most 5 simultaneously active URLs. Attempting to exceed this quota in either of the following ways returns HTTP 403:
  • Creating a new URL via POST /api/v1/urls when the active URL count is already at the limit.
  • Re-activating a previously deactivated URL via PATCH /api/v1/urls/{id}/active — reactivation is treated the same as creation and consumes quota.
The 403 response body carries the error code PLAN_LIMIT_EXCEEDED:
{
  "success": false,
  "data": null,
  "error": {
    "code": "PLAN_LIMIT_EXCEEDED",
    "message": "Plan limit exceeded."
  }
}
Analytics range — Free accounts may only query analytics for the 24h range. Requesting the 7d or 30d range via GET /api/v1/analytics/stats (or the CSV export endpoint) returns HTTP 403 with error code PLAN_RANGE_NOT_ALLOWED:
{
  "success": false,
  "data": null,
  "error": {
    "code": "PLAN_RANGE_NOT_ALLOWED",
    "message": "Analytics range not allowed for your plan."
  }
}

Changing plans

Use PATCH /api/v1/auth/me/plan with a JSON body to switch plans:
curl -X PATCH https://<your-domain>/api/v1/auth/me/plan \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{"plan": "pro"}'
Accepted values for plan are "free" and "pro". The endpoint returns the updated user object.
This is a test/demo endpoint. No payment gateway is integrated in Quikko. Any authenticated user can freely switch between plans.

Account summary

GET /api/v1/auth/me/summary returns the current plan alongside quota counters, making it ideal for building a quota progress UI:
curl https://<your-domain>/api/v1/auth/me/summary \
  -H "Authorization: Bearer <accessToken>"
A typical response for a Free user with 3 active URLs and 142 total clicks:
{
  "success": true,
  "data": {
    "email": "user@example.com",
    "plan": "free",
    "createdAt": "2024-11-01T10:00:00Z",
    "activeUrlsCount": 3,
    "activeUrlsLimit": 5,
    "totalClicks": 142
  },
  "error": null
}
For Pro accounts, activeUrlsLimit is null (no limit applies).
FieldTypeDescription
plan"free" | "pro"Current plan
activeUrlsCountintegerNumber of currently active URLs
activeUrlsLimitinteger | nullQuota ceiling; null for Pro
totalClicksintegerLifetime click count across all URLs
The active URL quota is controlled by the FREE_PLAN_MAX_ACTIVE_URLS environment variable, which defaults to 5. You can raise or lower it without redeploying by updating the variable and restarting the server.
Call GET /api/v1/auth/me/summary before rendering a “Create URL” form. The activeUrlsCount and activeUrlsLimit fields give you everything you need to show a quota indicator (e.g., “3 / 5 active URLs”) and to disable the form preemptively for Free users who are at their limit — avoiding a round-trip 403 on submission.

Build docs developers (and LLMs) love