API حوالہ

REST API
اپنے لنکس کی بنیاد پر بنائیں۔

API ٹوکن سے توثیق کریں، لنکس کی فہرست دیکھیں اور بنائیں، وزٹس پڑھیں، اور ویب ہُکس کو سبسکرائب کریں۔

بیس URL https://letl.ink/api/v1 صرف HTTPS

پلانز Growth Ultimate
اس صفحے پر

آغاز

REST API Growth اور Ultimate پر دستیاب ہے۔ درخواستیں HTTPS پر https://letl.ink/api/v1 کو جاتی ہیں۔ Free یا Solo پر ورک اسپیس کو /api/v1 سے 403 plan_required ملتا ہے؛ MCP اینڈ پوائنٹ الگ سے Ultimate تک محدود ہے۔

  1. Integrations ← REST API کھولیں (صرف ورک اسپیس کے مالکان اور ایڈمنز)۔
  2. ٹوکن بنائیں۔ اس کی میعاد ختم نہیں ہوتی۔
  3. اسے پاس ورڈ کی طرح محفوظ رکھیں۔ ایک ہی ٹوکن REST API، MCP سرور اور اس ورک اسپیس سے منسلک ہر آٹومیشن پلیٹ فارم کے لیے کام کرتا ہے، اس لیے اسے دوبارہ بنانے سے یہ سب ایک ساتھ غیر مؤثر ہو جاتے ہیں۔

اگر ٹوکن بنایا جا چکا ہو تو اراکین اسے کاپی کر سکتے ہیں؛ صرف مالکان اور ایڈمنز اسے تبدیل کر سکتے ہیں۔

توثیق

ٹوکن X-API-KEY یا Authorization: Bearer کے طور پر بھیجیں۔ دونوں /api/v1 اور /mcp پر قبول ہیں۔ بغیر کسی ٹوکن کے درخواست 401 unauthenticated واپس کرتی ہے۔

GET میں کون ہوں؟
curl -H "X-API-KEY: YOUR_TOKEN" \
  https://letl.ink/api/v1/auth/me

مساوی ہیڈر: Authorization: Bearer YOUR_TOKEN

روایات

یہ نیچے کے ہر اینڈ پوائنٹ پر لاگو ہوتے ہیں۔

ریسپانس کا لفافہ

ہر کامیاب جواب ایک JSON آبجیکٹ ہے جس میں data کلید ہوتی ہے، اور meta کلید جب نتیجے کے بارے میں کچھ بتانا ہو — پیجینیشن، حل شدہ تاریخ کی مدت، آیا جغرافیہ شامل تھا۔ ہر ناکامی ایک آبجیکٹ ہے جس میں error کلید ہوتی ہے جس میں مستقل code، انسانی message، اور کبھی کبھی details ہوتے ہیں۔ فیصلہ code پر کریں، پیغام کے متن پر کبھی نہیں۔

شکلیں
// success
{ "data": { … }, "meta": { … } }

// failure
{ "error": { "code": "invalid_parameter",
             "message": "sort must be one of: created_at, clicks.",
             "details": { "parameter": "sort" } } }

پیجینیشن

فہرست والے اینڈ پوائنٹس limit (1–200، طے شدہ 50) اور offset قبول کرتے ہیں۔ meta بلاک total، has_more اور next_offset بتاتا ہے، تاکہ آپ حساب کیے بغیر صفحات دیکھ سکیں: جب تک has_more false نہ ہو، offset = meta.next_offset کے ساتھ کال کرتے رہیں۔

ہر لنک کے صفحات سے گزرنا
offset=0
while [ "$offset" != "null" ]; do
  page=$(curl -s -H "X-API-KEY: $TOKEN" \
    "https://letl.ink/api/v1/links?limit=200&offset=$offset")
  echo "$page" | jq -c '.data[]'
  offset=$(echo "$page" | jq -r '.meta.next_offset')
done

ترتیب، فلٹرنگ اور تلاش

GET /links یہ قبول کرتا ہے: sort (created_at، clicks، short_code، title، updated_at)، direction (asc/desc)، search (مختصر کوڈ، عنوان اور منزل سے مماثلت)، type، archived، favorite اور domain۔ نامعلوم اقدار خاموشی سے نظرانداز کرنے کے بجائے invalid_parameter اور اجازت یافتہ اقدار کی فہرست کے ساتھ مسترد کر دی جاتی ہیں۔

تاریخ کی مدتیں

start_date اور end_date میں YYYY-MM-DD استعمال ہوتا ہے اور دونوں دن شامل ہوتے ہیں۔ مدت آپ کے پلان کی ریٹینشن حد تک محدود کر دی جاتی ہے — 30 دن کی ریٹینشن والے پلان سے ایک سال کی تاریخ مانگنے پر اس کے پاس موجود 30 دن ملتے ہیں، اور meta.date_range بتاتا ہے کہ اصل میں کون سی مدت استعمال ہوئی۔

ریٹ کی حدود

فی اکاؤنٹ 600 درخواستیں فی منٹ، سلائیڈنگ ونڈو پر۔ ہر جواب میں X-RateLimit-Limit، X-RateLimit-Remaining اور X-RateLimit-Reset (Unix ٹائم اسٹیمپ) شامل ہوتے ہیں۔ حد سے تجاوز پر 429 rate_limited ملتا ہے، ساتھ ہی سیکنڈز میں Retry-After ہیڈر۔ فوراً دوبارہ کوشش کرنے کے بجائے Retry-After کے مطابق انتظار کریں۔

ہر جواب پر ہیڈرز
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 586
X-RateLimit-Reset: 1789000816

ورژننگ

پاتھ میں ورژن ہوتا ہے۔ ریسپانس میں نئی فیلڈ یا نیا اختیاری پیرامیٹر شامل کرنا بریکنگ تبدیلی نہیں اور کسی بھی وقت ہو سکتا ہے، اس لیے احتیاط سے پارس کریں اور نامعلوم کلیدوں کو نظر انداز کریں۔ جو کچھ بھی موجودہ فیلڈ کو بدلے یا ہٹائے وہ نئے ورژن پری فکس کے تحت آتا ہے۔

اینڈ پوائنٹس

اکاؤنٹ

GET /me کنکشن ٹیسٹ

شناخت، ورک اسپیس، پلان اور اس پلان کی ہر سہولت۔ ٹوکن کی تصدیق کرنے اور کوشش سے پہلے یہ جاننے کا سب سے آسان طریقہ کہ اکاؤنٹ کو کیا کرنے کی اجازت ہے۔

GET cURL
curl -H "X-API-KEY: YOUR_TOKEN" \
  https://letl.ink/api/v1/me
ریسپانس 200
{
  "data": {
    "user": { "id": 1, "email": "[email protected]", "name": "You" },
    "workspace": { "id": 12, "name": "My Workspace", "block_bots": true },
    "plan": {
      "id": "growth",
      "name": "Growth",
      "limits": {
        "links": 200,
        "monthly_clicks": 100000,
        "custom_domains": 3,
        "qr_codes": 30,
        "retention_days": 365
      },
      "features": {
        "api": true,
        "webhooks": true,
        "integrations": true,
        "ai_access": false,
        "geo_analytics": false,
        "smart_link_types": true
      }
    },
    "base_domain": "letl.ink"
  }
}
GET /usage

اس بلنگ مہینے ہر حد کا کتنا حصہ استعمال ہوا۔ اسے ٹریک شدہ کلکس کی حد تک پہنچنے سے پہلے صارف کو خبردار کرنے کے لیے استعمال کریں — اس سے آگے ری ڈائریکٹ پھر بھی کام کرتا ہے، لیکن کلکس ریکارڈ ہونا بند ہو جاتے ہیں۔

ریسپانس 200
{
  "data": {
    "links": { "used": 42, "limit": 200, "remaining": 158, "percent_used": 21.0 },
    "clicks_this_month": { "used": 8140, "limit": 100000, "remaining": 91860, "percent_used": 8.1 },
    "custom_domains": { "used": 1, "limit": 3, "remaining": 2, "percent_used": 33.3 },
    "qr_codes": { "used": 4, "limit": 30, "remaining": 26, "percent_used": 13.3 }
  },
  "meta": { "plan": "growth", "period": "2026-09" }
}
GET /domains

ورک اسپیس کے کسٹم ڈومینز اور یہ کہ ہر ایک کی DNS تصدیق مکمل ہوئی یا نہیں۔ لنک بناتے وقت domain فیلڈ میں صرف تصدیق شدہ ڈومینز استعمال ہو سکتے ہیں۔

GET /integrations

پروڈکٹ کی ہر انٹیگریشن، آیا آپ کے پلان میں شامل ہے، آیا اس ورک اسپیس نے اسے جوڑا ہے، اور ڈیلیوری کیسی چل رہی ہے — آخری حیثیت، آخری خرابی اور مسلسل ناکامیوں کی تعداد۔ بہت سی ورک اسپیسز کی نگرانی کے لیے مفید۔

لنکس

اینالیٹکس

GET /analytics/summary

پوری ورک اسپیس کے اہم اعداد: کل وقتی اور مدت کے اندر کلکس، منفرد وزیٹرز، QR اسکینز، مصروف ترین دن، اور گھنٹے اور ہفتے کے دن کے لحاظ سے تقسیم۔ days قبول کرتا ہے (ڈیفالٹ 30، آپ کی ریٹینشن تک محدود)۔

ریسپانس 200 (مختصر)
{
  "data": {
    "window_days": 30,
    "clicks": {
      "total": 24592, "window": 8140, "last_7_days": 2103,
      "daily_average": 271,
      "peak_day": { "date": "Sep 02", "clicks": 612 }
    },
    "visitors": { "unique_total": 18204, "unique_window": 6021 },
    "qr": { "scans_total": 940, "scans_window": 310 },
    "timing": {
      "by_hour": [12, 4, 2, …],
      "by_weekday": [1420, 1610, 1585, 1490, 1310, 480, 245],
      "peak_hour": { "peakHour": 14, "peakValue": 812, "label": "14:00–14:59" },
      "peak_weekday": { "peakDay": 1, "peakValue": 1610, "label": "Tuesday" }
    },
    "links": { "active": 42, "limit": 200 }
  },
  "meta": { "plan": "growth", "geo_included": true, "retention_days": 365 }
}
GET /analytics/timeseries

روزانہ کلکس کی تعداد، چارٹ کے لیے تیار۔ اسے ایک لنک تک محدود کرنے کے لیے link_id دیں، اور مدت مقرر کرنے کے لیے days۔ بغیر ٹریفک والے دن چھوڑنے کے بجائے صفر کے طور پر لوٹائے جاتے ہیں، اس لیے سیریز ہمیشہ مسلسل رہتی ہے۔

ریسپانس 200
{
  "data": [
    { "date": "Sep 04", "clicks": 22 },
    { "date": "Sep 05", "clicks": 11 }
  ],
  "meta": { "window_days": 7, "total": 33, "link_id": null }
}
GET /analytics/breakdown

ایک پیمانے کے لحاظ سے گروپ کیے گئے کلکس، ہر قطار کے کل حصے کے ساتھ۔

کوئری پیرامیٹرز

  • dimension string

    channel، referrer، device، browser، os، brand، variation یا country۔ browser، os، brand اور variation کے لیے link_id درکار ہے۔

    لازمی
  • link_id integer

    ایک لنک تک محدود کریں۔ پوری ورک اسپیس کے لیے چھوڑ دیں۔

    اختیاری
  • limit integer

    1–100۔ طے شدہ 10۔

    اختیاری
ریسپانس 200
{
  "data": [
    { "label": "Search", "value": 215, "share": 33.1 },
    { "label": "Social", "value": 201, "share": 30.9 },
    { "label": "Direct / none", "value": 142, "share": 21.8 }
  ],
  "meta": { "dimension": "channel", "link_id": 49, "total": 650 }
}
GET /events صفحہ بند

ورک اسپیس کے ہر لنک کی خام وزٹ فیڈ، تازہ ترین پہلے۔ یہ GET /visits کا جدید متبادل ہے: وہی ڈیٹا، معیاری لفافہ، limit اور offset کی سپورٹ۔

ریسپانس 200
{
  "data": [
    {
      "id": 2691,
      "link_id": 49,
      "short_code": "spring",
      "occurred_at": "2026-09-10T22:45:33+00:00",
      "ip_address": "203.0.113.7",
      "referrer": "https://twitter.com/",
      "browser": "Chrome",
      "os": "iOS",
      "device_type": "mobile",
      "device_brand": "Apple",
      "country": "US",
      "variation": "control"
    }
  ],
  "meta": { "limit": 50, "returned": 50, "geo_included": true }
}

ویب ہُکس

GET /hooks

اس اکاؤنٹ پر رجسٹرڈ ویب ہُک اینڈ پوائنٹس۔

POST /hooks

ہر ریکارڈ شدہ کلک پر JSON پے لوڈ وصول کرنے کے لیے HTTPS اینڈ پوائنٹ رجسٹر کریں۔ فی اکاؤنٹ 25 تک۔ ناکام ڈیلیوریز خودبخود دوبارہ کوشش کی جاتی ہیں۔

JSON باڈی

  • target_url

    https:// ہونا چاہیے۔

    لازمی
  • event

    طے شدہ link_visited، جو فی الحال واحد ایونٹ ہے۔

    اختیاری
POST cURL
curl -X POST https://letl.ink/api/v1/hooks \
  -H "X-API-KEY: YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target_url": "https://example.com/hooks/clicks"}'
DELETE /hooks/{id}

ویب ہُک اینڈ پوائنٹ ہٹائیں۔ POST /hooks/subscribe اور DELETE /hooks/unsubscribe/{id} Zapier کے REST Hook فلو کے لیے دستیاب رہتے ہیں۔

پرانا

GET /auth/me پرانا

اصل کنکشن ٹیسٹ: آپ کی یوزر id، ای میل اور ورک اسپیس id/نام ایک سادہ آبجیکٹ کے طور پر واپس کرتا ہے۔ GET /me یہی شناخت آپ کے پلان کی حدوں اور فیچر فلیگز کے ساتھ واپس کرتا ہے، اور نئے کوڈ کے لیے بہتر انتخاب ہے۔

GET cURL
curl -H "X-API-KEY: YOUR_TOKEN" \
  https://letl.ink/api/v1/auth/me
ریسپانس 200
{
  "id": 1,
  "email": "[email protected]",
  "workspace_id": 12,
  "workspace_name": "My Workspace"
}
GET /visits پرانا

پوری ورک اسپیس کے 50 تازہ ترین وزٹس، سادہ JSON array کی شکل میں — بغیر لفافے کے — visit_id، visit_time، link_shortcode اور visitor_* فیلڈ ناموں کے ساتھ۔ Zapier کا REST Hook "perform list" اسٹیپ یہی پڑھتا ہے، اس لیے اس کی شکل منجمد ہے۔ نئے کام کے لیے GET /events استعمال کریں۔

POST /hooks/subscribe Zapier

REST Hook سبسکرائب۔ target_url اور ایک اختیاری event (ڈیفالٹ link_visited) لیتا ہے اور بنائی گئی سبسکرپشن کو لفافے کے بغیر، سیدھا واپس کرتا ہے۔ POST /hooks معیاری شکل میں یہی عمل ہے۔

DELETE /hooks/unsubscribe/{id} Zapier

REST Hook ان سبسکرائب، جو {"success": true} واپس کرتا ہے۔ DELETE /hooks/{id} معیاری شکل میں اس کا مساوی ہے۔

خرابیاں

  • 400 invalid_request

    باڈی JSON آبجیکٹ نہیں تھی، یا کوئی لازمی فیلڈ موجود نہیں تھی۔

  • 400 invalid_parameter

    کوئی کوئری پیرامیٹر غلط تھا یا اپنے اجازت یافتہ دائرے سے باہر تھا۔ details.parameter غلط پیرامیٹر کا نام بتاتا ہے۔

  • 401 unauthenticated

    کوئی ٹوکن نہیں بھیجا گیا۔ X-API-KEY یا Authorization: Bearer شامل کریں۔

  • 401 invalid_token

    ٹوکن کسی اکاؤنٹ سے میل نہیں کھاتا۔ ممکن ہے اسے دوبارہ بنایا گیا ہو۔

  • 403 plan_required

    اکاؤنٹ کے پلان میں یہ اینڈ پوائنٹ یا فیچر شامل نہیں۔ details.upgrade_url بلنگ کی طرف اشارہ کرتا ہے۔

  • 403 forbidden

    توثیق ہو گئی، لیکن اجازت نہیں — مثلاً کوئی رکن صرف مالک والا عمل کرنے کی کوشش کرے۔

  • 404 not_found

    اس ورک اسپیس میں ایسا کوئی ریسورس نہیں۔ کسی دوسری ورک اسپیس کی IDs کو ممنوع کے بجائے نہیں ملا کے طور پر رپورٹ کیا جاتا ہے۔

  • 409 conflict

    درخواست موجودہ حالت سے ٹکراتی ہے — ویب ہُک کی حد پوری ہو چکی ہے، یا اکاؤنٹ کی ابھی کوئی ورک اسپیس نہیں۔

  • 422

    POST /links/bulk سے واپس آتا ہے جب بیچ کی ہر قطار ناکام ہو جائے۔ meta.errors دیکھیں۔

  • 429 rate_limited

    گزشتہ منٹ میں 600 سے زیادہ درخواستیں۔ Retry-After سیکنڈز انتظار کریں۔

پرانے GET /visits اور GET /links/{id}/visits اینڈ پوائنٹس اپنے فیلڈ ناموں کے ساتھ سادہ JSON array واپس کرتے ہیں اور ان پر بنی Zapier انٹیگریشنز کے لیے منجمد ہیں۔ نیا کوڈ GET /events اور GET /links/{id}/events استعمال کرے، جو معیاری لفافہ استعمال کرتے ہیں اور pagination سپورٹ کرتے ہیں۔

مزید سوالات ہیں؟

ہم مدد کے لیے حاضر ہیں۔ رابطہ کریں اور ہم جلد از جلد آپ کو جواب دیں گے۔