لوگوی کوکلی — کوتاه کننده لینک
کوکلی
kok.li
REST API · v1

API کوتاه کننده لینک کوکلی

با REST API کوکلی لینک کوتاه را از داخل اپلیکیشن، سایت، ربات تلگرام یا CRM خودتان بسازید، ویرایش کنید و آمار کلیک‌ها را بگیرید. خروجی JSON است و احراز هویت با کلید API انجام می‌شود.

شروع سریع

  1. ۱
    پلن دارای API را فعال کنید

    دسترسی API در پلن‌هایی که در صفحهٔ پلن‌ها با «دسترسی API» مشخص شده‌اند فعال است.

  2. ۲
    کلید API بسازید

    در داشبورد به بخش «کلیدهای API» بروید، نام و دسترسی‌های کلید را انتخاب کنید. کلید فقط یک‌بار نمایش داده می‌شود.

  3. ۳
    اولین درخواست را بفرستید

    کلید را در هدر Authorization: Bearer بفرستید و با POST /links اولین لینک کوتاه را بسازید.

ساخت یک لینک کوتاه با زبان دلخواه — آدرس پایه: https://kok.li/api/v1

curl -X POST https://kok.li/api/v1/links \
  -H "Authorization: Bearer kk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"longUrl": "https://example.com/very/long/url"}'

احراز هویت

همهٔ درخواست‌ها (به‌جز معرفی و فایل OpenAPI) کلید API لازم دارند. کلید را در هدر Authorization: Bearer kk_live_… یا X-API-Key بفرستید. کلید را فقط در سمت سرور نگه دارید و هرگز در کد مرورگر یا اپ موبایل قرار ندهید.

  • برای هر کلید می‌توانید تاریخ انقضا و فهرست IPهای مجاز (IP تکی یا بازهٔ CIDR) تعیین کنید.
  • کلید باطل‌شده یا منقضی بلافاصله با خطای ۴۰۱ رد می‌شود.
  • مدیر سایت می‌تواند در صورت سوءاستفاده دسترسی یک کلید یا حساب را غیرفعال کند.

دسترسی‌ها (Scopes)

هنگام ساخت کلید مشخص می‌کنید کلید به کدام بخش‌ها دسترسی داشته باشد. اصل «کمترین دسترسی لازم» را رعایت کنید؛ مثلاً کلید داشبورد گزارش‌گیری فقط به links:read و analytics:read نیاز دارد.

Scopeکاربردمسیرها
links:readخواندن لینک‌هاGET /links، GET /links/{code}
links:writeساخت و ویرایش لینکPOST /links، POST /links/bulk، PATCH /links/{code}
links:deleteحذف لینکDELETE /links/{code}
analytics:readمشاهده آمار کلیکGET /links/{code}/stats، GET /analytics
qr:readدریافت QR کدGET /links/{code}/qr
account:readاطلاعات حساب و مصرفGET /me

مسیرهای API

همهٔ مسیرها نسبت به https://kok.li/api/v1 هستند. پاسخ‌ها JSON و زمان‌ها ISO 8601 (UTC) هستند.

POST/api/v1/links/bulk

ساخت گروهی لینک

تا ۵۰ لینک را در یک درخواست می‌سازد. هر آیتم همان فیلدهای «ساخت لینک» را دارد و نتیجهٔ هر آیتم جداگانه برمی‌گردد؛ خطای یک آیتم مانع ساخت بقیه نمی‌شود.

دسترسی لازم: links:write

بدنهٔ JSON
linksالزامیarrayآرایه‌ای از ۱ تا ۵۰ شیء با فیلدهای ساخت لینک
نمونه درخواست
{
  "links": [
    { "longUrl": "https://example.com/a" },
    { "longUrl": "https://example.com/b", "alias": "promo-b" }
  ]
}
نمونه پاسخ
{
  "created": 1,
  "failed": 1,
  "results": [
    { "index": 0, "ok": true, "link": { "code": "x7Kp2q", "shortUrl": "https://kok.li/x7Kp2q" } },
    { "index": 1, "ok": false, "status": 409, "code": "alias_taken", "error": "این alias قبلاً استفاده شده." }
  ]
}
GET/api/v1/analytics

آمار کل حساب

همان خروجی آمار لینک، ولی برای مجموع همهٔ لینک‌های حساب. پارامترهای range یا from/to را می‌پذیرد.

دسترسی لازم: analytics:read

GET/api/v1/links/{code}/qr

تصویر QR کد

تصویر PNG یا SVG کد QR لینک کوتاه را برمی‌گرداند (پاسخ تصویر است، نه JSON).

دسترسی لازم: qr:read

پارامترهای query
formatstringpng (پیش‌فرض) یا svg
sizeintegerعرض تصویر بین ۶۴ تا ۱۰۲۴ پیکسل (پیش‌فرض ۳۲۰)
color / bgColorhexرنگ نقش و پس‌زمینه، مثل 000000 و ffffff
marginintegerحاشیه ۰ تا ۱۰
eccstringسطح تصحیح خطا: L، M، Q یا H
GET/api/v1/me

حساب، کلید و مصرف

اطلاعات حساب، پلن، دسترسی‌ها و سقف نرخ کلید فعلی و میزان مصرف ماه جاری را برمی‌گرداند.

دسترسی لازم: account:read

نمونه پاسخ
{
  "user": { "id": "66f1…", "name": "علی" },
  "plan": { "tier": "pro", "label": "حرفه‌ای" },
  "key": { "prefix": "kk_live_3fa9c1", "scopes": ["links:read", "links:write"], "rateLimitPerMinute": 60 },
  "limits": { "maxKeys": 10, "maxLinks": -1, "monthlyLinkLimit": 1000 },
  "usage": { "period": "2026-09", "monthlyLinksCreated": 42, "totalLinks": 318 }
}

محدودیت نرخ و سهمیه

  • هر کلید سقف درخواست در دقیقه دارد (پیش‌فرض ۶۰). مقدار باقی‌مانده در هدرهای RateLimit-Limit، RateLimit-Remaining و RateLimit-Reset برمی‌گردد.
  • پس از عبور از سقف، پاسخ ۴۲۹ با کد rate_limited می‌گیرید؛ چند ثانیه صبر و دوباره تلاش کنید.
  • لینک‌های ساخته‌شده با API از همان سقف کل و سهمیهٔ ماهانهٔ پلن شما کم می‌شوند.
  • ساخت گروهی حداکثر ۵۰ لینک در هر درخواست را می‌پذیرد.

خطاها

پاسخ خطا همیشه یک پیام فارسی در error و یک کد ثابت انگلیسی در code دارد؛ منطق برنامه را بر اساس code بنویسید.

{ "error": "این API key دسترسی «links:write» را ندارد.", "code": "insufficient_scope", "requiredScope": "links:write" }
کدHTTPمعنی
missing_api_key401کلید در هدر Authorization یا X-API-Key ارسال نشده است.
invalid_api_key401کلید نامعتبر است یا باطل شده است.
key_expired401تاریخ انقضای کلید گذشته است؛ کلید جدید بسازید.
key_disabled403کلید توسط مدیر سایت موقتاً غیرفعال شده است.
ip_not_allowed403IP شما در فهرست IPهای مجاز این کلید نیست.
api_access_denied403پلن یا حساب شما دسترسی API ندارد (فیلد reason دلیل را می‌گوید).
insufficient_scope403کلید دسترسی لازم برای این مسیر را ندارد (فیلد requiredScope).
validation_error400بدنهٔ درخواست نامعتبر است (فیلد field نام فیلد مشکل‌دار است).
not_found404لینک یا مسیر پیدا نشد.
alias_taken409کد اختصاصی قبلاً استفاده شده است.
url_rejected422آدرس مقصد به دلایل امنیتی پذیرفته نشد.
limit_reached403به سقف کل لینک‌های پلن رسیده‌اید.
quota_exceeded429سهمیهٔ ساخت لینک ماهانهٔ پلن تمام شده است.
rate_limited429تعداد درخواست در دقیقه از سقف کلید بیشتر شده است.

سوالات متداول API

پاسخ کوتاه به پرسش‌های رایج توسعه‌دهندگان.

API کوکلی رایگان است؟

دسترسی API در پلن‌هایی فعال است که در صفحهٔ پلن‌ها با «دسترسی API» مشخص شده‌اند. تعداد لینک‌هایی که با API می‌سازید از همان سهمیهٔ پلن شما کم می‌شود.

کلید API را کجا بسازم و اگر لو رفت چه کنم؟

از داشبورد، بخش «کلیدهای API» کلید بسازید. کلید فقط یک‌بار نمایش داده می‌شود و ما فقط هش آن را نگه می‌داریم. اگر کلید لو رفت، همان‌جا آن را باطل کنید و کلید جدید بسازید؛ باطل‌کردن فوراً اعمال می‌شود.

سقف تعداد درخواست API چقدر است؟

هر کلید به‌طور پیش‌فرض ۶۰ درخواست در دقیقه دارد. سقف دقیق کلید شما در پاسخ GET /me و در هدرهای RateLimit-Limit و RateLimit-Remaining هر پاسخ آمده است. با پیام rate_limited کمی صبر کنید و دوباره تلاش کنید.

چطور دسترسی یک کلید را محدود کنم؟

هنگام ساخت یا ویرایش کلید فقط دسترسی‌های لازم را انتخاب کنید (مثلاً فقط links:read برای گزارش‌گیری). می‌توانید استفاده از کلید را به IPهای سرور خودتان محدود کنید و برایش تاریخ انقضا بگذارید.

آیا مشخصات OpenAPI (Swagger) دارید؟

بله. فایل OpenAPI 3 در آدرس https://kok.li/api/v1/openapi.json در دسترس است و می‌توانید آن را در Postman، Insomnia یا Swagger UI ایمپورت کنید.

آماده‌اید؟

اولین کلید API را بسازید و در کمتر از یک دقیقه لینک کوتاه بسازید.

رفتن به کلیدهای API