Short Links API

צרו קישורים קצרים ממותגים עם כינויים, תפוגה, סיסמאות, מגבלות לחיצות וניתוח נתונים.

מקרי שימוש פופולריים
מעקב קמפיינים

קישורים קצרים וממותגים לקמפיינים עם תגיות UTM. כינויים ייחודיים לכל שותף להשוואת ביצועים.

קודי QR

קודים ידידותיים להדפסה שניתן לשנות מאוחר יותר.

מוגן בסיסמה

הגנו על מסמכים רגישים באמצעות סיסמה פשוטה.

99.9 % זמן פעילות
תגובה
25 req/s
0.002 קרדיטים / בקשה

Create Short Link (Basic)


POST https://api.yeb.to/v1/short-links/create-basic
פרמטרסוגנדרשתיאור
api_key string כן Your API key
original_url string כן Target URL (scheme auto-added if missing)
alias string אופציונלי Human alias (1–100, [A-Za-z0-9\-_])
short_code string אופציונלי Custom short code (else auto 7 chars)
password string אופציונלי Optional access password
expires_at ISO 8601 אופציונלי Expiry timestamp
click_limit int אופציונלי Max total clicks
one_time bool אופציונלי Allow only a single click
settings array<{key,value}> אופציונלי Custom metadata

דוגמה

curl -X POST https://api.yeb.to/v1/short-links/create-basic \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "original_url": "https://example.com/pricing",
  "alias": "docs-demo"
}'

דוגמת תגובה

קודי תגובה

קודתיאור
200 Successהבקשה עובדה בהצלחה.
400 Bad Requestאימות קלט נכשל.
401 Unauthorizedמפתח API חסר או שגוי.
403 Forbiddenמפתח לא פעיל או לא מורשה.
429 Rate Limitיותר מדי בקשות.
500 Server Errorכשל בלתי צפוי.

Create Short Link (Advanced)


POST https://api.yeb.to/v1/short-links/create-advanced
פרמטרסוגנדרשתיאור
api_key string כן Your API key
original_url string כן Target URL (scheme auto-added if missing)
alias string אופציונלי Human alias (1–100, [A-Za-z0-9\-_])
short_code string אופציונלי Custom short code (else auto 7 chars)
password string אופציונלי Optional access password
expires_at ISO 8601 אופציונלי Expiry timestamp
click_limit int אופציונלי Max total clicks
one_time bool אופציונלי Allow only a single click
settings array<{key,value}> אופציונלי Custom metadata

דוגמה

curl -X POST https://api.yeb.to/v1/short-links/create-advanced \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "original_url": "https://example.com/pricing",
  "alias": "docs-demo",
  "click_limit": 100,
  "expires_at": "2025-12-31T23:59:00Z"
}'

דוגמת תגובה

קודי תגובה

קודתיאור
200 Successהבקשה עובדה בהצלחה.
400 Bad Requestאימות קלט נכשל.
401 Unauthorizedמפתח API חסר או שגוי.
403 Forbiddenמפתח לא פעיל או לא מורשה.
429 Rate Limitיותר מדי בקשות.
500 Server Errorכשל בלתי צפוי.

Get Short Link


POST https://api.yeb.to/v1/short-links/get
פרמטרסוגנדרשתיאור
api_key string כן Your API key
code string כן Alias or short_code

דוגמה

curl -X POST https://api.yeb.to/v1/short-links/get \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "code": "docs-demo"
}'

דוגמת תגובה

קודי תגובה

קודתיאור
200 Successהבקשה עובדה בהצלחה.
400 Bad Requestאימות קלט נכשל.
401 Unauthorizedמפתח API חסר או שגוי.
403 Forbiddenמפתח לא פעיל או לא מורשה.
429 Rate Limitיותר מדי בקשות.
500 Server Errorכשל בלתי צפוי.

Update Short Link


POST https://api.yeb.to/v1/short-links/update
פרמטרסוגנדרשתיאור
api_key string כן Your API key
code string כן Alias or short_code to update
original_url string אופציונלי New target URL
alias string אופציונלי New alias
short_code string אופציונלי New short code
password string אופציונלי Set password (empty string to clear)
expires_at ISO 8601 אופציונלי New expiry
click_limit int אופציונלי New limit
one_time bool אופציונלי Enable/disable single-use
advanced_analytics bool אופציונלי Enable/disable advanced analytics
settings array<{key,value}> אופציונלי Replace settings

דוגמה

curl -X POST https://api.yeb.to/v1/short-links/update \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "code": "docs-demo",
  "click_limit": 100,
  "expires_at": "2025-12-31T23:59:00Z"
}'

דוגמת תגובה

קודי תגובה

קודתיאור
200 Successהבקשה עובדה בהצלחה.
400 Bad Requestאימות קלט נכשל.
401 Unauthorizedמפתח API חסר או שגוי.
403 Forbiddenמפתח לא פעיל או לא מורשה.
429 Rate Limitיותר מדי בקשות.
500 Server Errorכשל בלתי צפוי.

Delete Short Link


POST https://api.yeb.to/v1/short-links/delete
פרמטרסוגנדרשתיאור
api_key string כן Your API key
code string כן Alias or short_code

דוגמה

curl -X POST https://api.yeb.to/v1/short-links/delete \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "code": "docs-demo"
}'

דוגמת תגובה

קודי תגובה

קודתיאור
200 Successהבקשה עובדה בהצלחה.
400 Bad Requestאימות קלט נכשל.
401 Unauthorizedמפתח API חסר או שגוי.
403 Forbiddenמפתח לא פעיל או לא מורשה.
429 Rate Limitיותר מדי בקשות.
500 Server Errorכשל בלתי צפוי.

Short Link Stats


POST https://api.yeb.to/v1/short-links/stats
פרמטרסוגנדרשתיאור
api_key string כן Your API key
code string כן Alias or short_code
period enum אופציונלי `7d` | `30d` | `90d` (default: `30d`)
tz string אופציונלי Timezone label (informational)
limit_recent int אופציונלי Recent clicks to return (0–200, default 20)

דוגמה

curl -X POST https://api.yeb.to/v1/short-links/stats \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "YOUR_KEY",
  "code": "docs-demo",
  "period": "30d",
  "limit_recent": 10
}'

דוגמת תגובה

קודי תגובה

קודתיאור
200 Successהבקשה עובדה בהצלחה.
400 Bad Requestאימות קלט נכשל.
401 Unauthorizedמפתח API חסר או שגוי.
403 Forbiddenמפתח לא פעיל או לא מורשה.
429 Rate Limitיותר מדי בקשות.
500 Server Errorכשל בלתי צפוי.

Short Links API — Practical Guide

Create branded short links with optional password and expiry, manage aliases/codes safely, and read rich stats — without guessing which fields matter in production.

#What this API solves

Teams usually need more than “shorten this URL”. You want safe naming (alias vs code), campaign controls (expiry, one-time, click limits, password), and readable stats that answer “what’s working?”. This suite provides exactly that — with two creation modes (basic vs advanced) so you only pay for analytics you actually use.

#Endpoints & when to use them

#POST /v1/short-links/create-basic — Create link (cheaper)

  • Best for: Operational links where you only need totals & last click (fast & low cost).
  • Output: advanced_analytics=false, total_clicks may be present; no per-country/device buckets.

#POST /v1/short-links/create-advanced — Create link with rich analytics

  • Best for: Campaigns where you’ll later slice by country, device, browser, OS.
  • Output: advanced_analytics=true. The stats endpoint returns buckets.

#POST /v1/short-links/get — Fetch by alias or short_code

  • Ownership enforced: You’ll only see links owned by your API key/user.

#POST /v1/short-links/update — Change URL/alias/code/limits

  • Conflicts handled: Server rejects duplicate alias/short_code across live & soft-deleted rows.
  • Settings: Passing settings replaces the whole key/value set (idempotent).

#POST /v1/short-links/delete — Soft delete by code

  • Tip: Deleted aliases/codes still count for conflict checks to prevent accidental reuse collisions.

#POST /v1/short-links/stats — Summary & buckets

  • Period: 7d | 30d | 90d (default 30d).
  • Recent clicks: up to 200 latest (limit_recent).
  • Buckets: Country/Device/Browser/OS (when advanced_analytics=true).
  • Password metrics: When derivable, returns password_page_views_* and password_attempts_total.
  • Debug mode: Include "debug":true to surface query diagnostics in the response.

#Quick start

# Create a basic link
curl -sX POST "https://api.yeb.to/v1/short-links/create-basic" \
 -H "Accept: application/json" -H "Content-Type: application/json" \
 -d '{ "api_key":"<YOUR_KEY>", "original_url":"https://example.com/pricing", "alias":"docs-demo" }'
# Retrieve stats (30d default) with 10 recent clicks
curl -sX POST "https://api.yeb.to/v1/short-links/stats" \
 -H "Accept: application/json" -H "Content-Type: application/json" \
 -d '{ "api_key":"<YOUR_KEY>", "code":"docs-demo", "limit_recent":10 }'

#Full “everything on” request (covers most options)

Turn features on, then trim to your needs.

POST /v1/short-links/create-advanced
{
  "api_key": "YOUR_KEY",
  "original_url": "https://example.com/launch?utm_source=short",
  "alias": "docs-advanced-demo",
  "short_code": "AB12CDE",
  "password": "letmein",
  "expires_at": "2025-12-31T23:59:00Z",
  "click_limit": 1000,
  "one_time": false,
  "advanced_analytics": true,
  "settings": [
    {"key":"campaign","value":"winter-2025"},
    {"key":"owner","value":"growth-team"}
  ]
}

#Parameters that actually matter

Create / Update

ParamTypeRequiredPractical guidance
original_urlstring (URL)Yes (create)Scheme auto-added if missing; keep UTM here for external analytics.
aliasstringNoReadable path (e.g., /l/black-friday). Great for campaigns.
short_codestringNoFixed-length code. If omitted, server generates 7 chars. Use for printed collateral.
passwordstringNoGate sensitive pages. On update, send empty string to clear.
expires_atISO 8601NoHard stop for promo windows. Combine with stats to prune stale links.
click_limitintNoCap total visits (e.g., limited seats). Pair with one_time for single-use passes.
one_timeboolNoFirst successful click consumes the link.
advanced_analyticsboolNoEnable per-country/device/browser/OS buckets in /stats.
settingsarray<{key,value}>NoFree-form metadata. On update, the set is replaced atomically.

Stats request

ParamTypeRequiredNotes
codestringYesEither the alias or the short_code.
periodenumNo7d | 30d | 90d (default 30d).
limit_recentintNo0–200 (default 20). Returns latest clicks with IP/UA timestamped.
tzstringNoInformational field echoed back (visualization hint).
debugboolNotrue adds query diagnostics to response (helpful in staging).

#Reading & acting on responses

Create (basic vs advanced)

{
  "data": {
    "original_url": "https://example.com/pricing",
    "short_code": "AB12CDE",
    "alias": "docs-demo",
    "public_url": "https://yeb.to/l/docs-demo",
    "expires_at": null,
    "click_limit": null,
    "one_time": false,
    "advanced_analytics": false,
    "total_clicks": 0,
    "created_at": "2025-01-01T12:00:00Z",
    "updated_at": "2025-01-01T12:00:00Z"
  }
}
  • Print/embed: Use public_url on sites or QR codes.
  • Auditing: Keep alias and short_code in your DB for future updates.

Get / Update

{
  "data": {
    "original_url": "https://example.com/pricing",
    "short_code": "AB12CDE",
    "alias": "docs-demo",
    "public_url": "https://yeb.to/l/docs-demo",
    "expires_at": "2025-12-31T23:59:00Z",
    "click_limit": 100,
    "one_time": false,
    "advanced_analytics": false,
    "total_clicks": 0,
    "created_at": "2025-01-01T12:00:00Z",
    "updated_at": "2025-01-10T12:00:00Z"
  }
}
  • Conflicts: If you change alias or short_code to one that exists (even soft-deleted), you’ll get a 422 explaining the conflict.
  • Password: On update, send empty string to clear. Non-empty strings are stored hashed.

Stats

{
  "data": {
    "code": "docs-demo",
    "from": "2025-01-01T00:00:00Z",
    "to":   "2025-01-31T00:00:00Z",
    "tz": "UTC",
    "summary": {
      "total_clicks": 42,
      "last_click_at": "2025-01-30T20:05:00Z",
      "unique_countries": 8,
      "password_page_views_total": 12,
      "password_page_views_unique": 10,
      "password_attempts_total": 3
    },
    "recent_clicks": [
      {"ip":"1.2.3.4","user_agent":"...","ts":"2025-01-30T20:05:00Z"}
    ],
    "by_country": [{"key":"US","count":20}],
    "by_device":  [{"key":"mobile","count":30}],
    "by_browser": [{"key":"Chrome","count":25}],
    "by_os":      [{"key":"Android","count":18}]
  }
}
  • Basic vs Advanced: Buckets populate only when the link was created with advanced_analytics=true and underlying tables exist.
  • Recent list: Use it for moderation/debugging; don’t store full UA/IP long-term if you don’t need them.

#Practical recipes

  • Campaign naming: Use alias for human-readable slugs (/l/summer-sale), keep short_code for printed QR where length matters.
  • Time-boxed promos: Set expires_at and click_limit. After the window, update the link to a “campaign over” page.
  • Single-use access: Combine one_time=true with a password. Track attempts via /stats password metrics.
  • Attribution: Include UTMs in original_url. The API doesn’t change your query string.
  • Governance: Store settings like campaign, owner, cost_center for internal reporting.

#Errors & safeguards

  • 422 — Validation (missing original_url, code, or alias/code conflict).
  • 404 — Not found (wrong code or not owned by your key/user).
  • Ownership: All read/write endpoints scope by API key/user; non-owned links behave as “not found”.

#API Changelog (Short Links)

2025-11-05
Stats diagnostics. Added optional debug flag to /stats response for query introspection.
2025-11-03
Password telemetry. Surfacing password_page_views_* and password_attempts_total when derivable.
2025-10-28
Conflict hardening. Update now checks duplicates across live & soft-deleted links; clearer 422 messages.
2025-10-20
Advanced analytics path. Split creation into create-basic and create-advanced with bucketed stats support.

Use the endpoint playgrounds on this page to test payloads and lock defaults (alias pattern, expiry policy, analytics mode).

#Copy-ready cURL (common flows)

# Create (basic)
curl -sX POST "https://api.yeb.to/v1/short-links/create-basic" -H "Content-Type: application/json" \
 -d '{"api_key":"YOUR_KEY","original_url":"https://example.com/pricing","alias":"docs-demo"}'

# Create (advanced)
curl -sX POST "https://api.yeb.to/v1/short-links/create-advanced" -H "Content-Type: application/json" \
 -d '{"api_key":"YOUR_KEY","original_url":"https://example.com/pricing","alias":"docs-demo","click_limit":100,"expires_at":"2025-12-31T23:59:00Z"}'

# Get
curl -sX POST "https://api.yeb.to/v1/short-links/get" -H "Content-Type: application/json" \
 -d '{"api_key":"YOUR_KEY","code":"docs-demo"}'

# Update
curl -sX POST "https://api.yeb.to/v1/short-links/update" -H "Content-Type: application/json" \
 -d '{"api_key":"YOUR_KEY","code":"docs-demo","click_limit":100,"expires_at":"2025-12-31T23:59:00Z"}'

# Stats
curl -sX POST "https://api.yeb.to/v1/short-links/stats" -H "Content-Type: application/json" \
 -d '{"api_key":"YOUR_KEY","code":"docs-demo","period":"30d","limit_recent":10}'

# Delete
curl -sX POST "https://api.yeb.to/v1/short-links/delete" -H "Content-Type: application/json" \
 -d '{"api_key":"YOUR_KEY","code":"docs-demo"}'

שאלות נפוצות

נתוני MaxMind GeoLite2 מדויקים בדרך כלל ברמת העיר עבור 65–70% מכתובות IPv4 ברחבי העולם.

למען הפרטיות והפשטות, אנו מנרמלים את כל מצבי "לא זמין" (פג תוקף, נוצל, מושבת, הגיע למגבלת לחיצות) ל-404.

כן, אם ה-alias/short_code החדש ייחודי בשתי העמודות. ה-API אוכף ייחודיות גלובלית.

ברירת המחדל היא 20 בקשות/שנייה לכל API key (עשוי להשתנות לפי תוכנית). ייתכנו גם מכסות יומיות וחודשיות.

יצירת קישור צורכת קרדיטים. צפייה בסטטיסטיקות גם כן. צפיות/ניסיונות סיסמה נרשמים אך אינם מחויבים בנפרד.

ייחודיות מוערכת על פי כתובות IP שונות שנצפו לפני האירוע הנוכחי.

רק אתם. בדיקות גישה מתאימות ל-user_id שלכם (אינטרנט) או לכל API key שבבעלותכם (API). בקשות מאחרים מוחזרות כ-404.

כן. כל בקשה, גם כאלה שמובילות לשגיאות, צורכת קרדיטים. הקרדיטים שלך קשורים למספר הבקשות, ללא קשר להצלחה או כישלון. אם השגיאה נובעת בבירור מבעיה בפלטפורמה מצידנו, נשחזר את הקרדיטים המושפעים (ללא החזר כספי).

צרו איתנו קשר ב-[email protected]. אנחנו מתייחסים למשוב ברצינות—אם דוח הבאג או בקשת הפיצ'ר שלכם משמעותיים, נוכל לתקן או לשפר את ה-API במהירות ולהעניק לכם 50 קרדיטים חינם כתודה.

זה תלוי ב-API ולפעמים אפילו ב-endpoint. חלק מה-endpoints משתמשים בנתונים ממקורות חיצוניים, שעשויים להיות בעלי מגבלות מחמירות יותר. אנחנו גם אוכפים מגבלות כדי למנוע שימוש לרעה ולשמור על יציבות הפלטפורמה. בדקו את התיעוד למגבלה הספציפית של כל endpoint.

אנחנו פועלים על מערכת קרדיטים. קרדיטים הם יחידות ששולמו מראש ואינן ניתנות להחזר, שאתם מוציאים על קריאות API וכלים. קרדיטים נצרכים בשיטת FIFO (הישנים ביותר קודם) ותקפים ל-12 חודשים מתאריך הרכישה. לוח הבקרה מציג כל תאריך רכישה ותפוגתו.

כן. כל הקרדיטים שנרכשו (כולל יתרות חלקיות) תקפים ל-12 חודשים מהרכישה. קרדיטים שלא נוצלו פגים אוטומטית ונמחקים לצמיתות בסוף תקופת התוקף. קרדיטים שפגו לא ניתנים לשחזור או להמרה למזומן או ערך אחר. כלל מעבר: קרדיטים שנרכשו לפני 22 בספט׳ 2025 מטופלים כאילו נרכשו ב-22 בספט׳ 2025 ופגים ב-22 בספט׳ 2026 (אלא אם צוין תאריך תפוגה מוקדם יותר ברכישה).

כן—בתוך חלון התוקף שלהם. קרדיטים שלא נוצלו נשארים זמינים ומועברים מחודש לחודש עד שהם פגים 12 חודשים לאחר הרכישה.

קרדיטים הם לא ניתנים להחזר. קנו רק מה שאתם צריכים—תמיד תוכלו לטעון שוב מאוחר יותר. אם שגיאת פלטפורמה גורמת לחיוב כושל, אנו עשויים לשחזר את הקרדיטים המושפעים לאחר בדיקה. ללא החזר כספי.

המחירים נקבעים בקרדיטים, לא בדולרים. לכל endpoint יש עלות משלו—ראו את תג "קרדיטים / בקשה" למעלה. תמיד תדעו בדיוק כמה אתם מוציאים.
← חזרה ל-APIs