Short Links API — Značkové URL a analytika | YEB

Vytvárajte značkové krátke odkazy s vlastnými aliasmi, dátumami expirácie, ochranou heslom, limitmi kliknutí a podrobnou analytikou. Sledujte kampane, affiliátov a dočasné prístupové odkazy.

Populárne prípady použitia
Sledovanie kampaní

Krátke, značkové odkazy pre UTM-tagované kampane. Unikátne aliasy na partnera na porovnanie výkonu.

QR kódy

Tlačové kódy, ktoré môžete neskôr zmeniť.

Chránené heslom

Chráňte citlivé dokumenty jednoduchým heslom.

99.9 % Dostupnosť
Odpoveď
25 req/s
0.002 Kredity / požiadavka

Create Short Link (Basic)


POST https://api.yeb.to/v1/short-links/create-basic
ParameterTypPovinnýPopis
api_key string áno Your API key
original_url string áno Target URL (scheme auto-added if missing)
alias string voliteľný Human alias (1–100, [A-Za-z0-9\-_])
short_code string voliteľný Custom short code (else auto 7 chars)
password string voliteľný Optional access password
expires_at ISO 8601 voliteľný Expiry timestamp
click_limit int voliteľný Max total clicks
one_time bool voliteľný Allow only a single click
settings array<{key,value}> voliteľný Custom metadata

Príklad

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"
}'

Príklad odpovede

Kódy odpovedí

KódPopis
200 SuccessPožiadavka spracovaná OK.
400 Bad RequestValidácia vstupu zlyhala.
401 UnauthorizedChýbajúci / nesprávny API kľúč.
403 ForbiddenKľúč neaktívny alebo nepovolený.
429 Rate LimitPríliš veľa požiadaviek.
500 Server ErrorNeočakávaná chyba.

Create Short Link (Advanced)


POST https://api.yeb.to/v1/short-links/create-advanced
ParameterTypPovinnýPopis
api_key string áno Your API key
original_url string áno Target URL (scheme auto-added if missing)
alias string voliteľný Human alias (1–100, [A-Za-z0-9\-_])
short_code string voliteľný Custom short code (else auto 7 chars)
password string voliteľný Optional access password
expires_at ISO 8601 voliteľný Expiry timestamp
click_limit int voliteľný Max total clicks
one_time bool voliteľný Allow only a single click
settings array<{key,value}> voliteľný Custom metadata

Príklad

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"
}'

Príklad odpovede

Kódy odpovedí

KódPopis
200 SuccessPožiadavka spracovaná OK.
400 Bad RequestValidácia vstupu zlyhala.
401 UnauthorizedChýbajúci / nesprávny API kľúč.
403 ForbiddenKľúč neaktívny alebo nepovolený.
429 Rate LimitPríliš veľa požiadaviek.
500 Server ErrorNeočakávaná chyba.

Get Short Link


POST https://api.yeb.to/v1/short-links/get
ParameterTypPovinnýPopis
api_key string áno Your API key
code string áno Alias or short_code

Príklad

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

Príklad odpovede

Kódy odpovedí

KódPopis
200 SuccessPožiadavka spracovaná OK.
400 Bad RequestValidácia vstupu zlyhala.
401 UnauthorizedChýbajúci / nesprávny API kľúč.
403 ForbiddenKľúč neaktívny alebo nepovolený.
429 Rate LimitPríliš veľa požiadaviek.
500 Server ErrorNeočakávaná chyba.

Update Short Link


POST https://api.yeb.to/v1/short-links/update
ParameterTypPovinnýPopis
api_key string áno Your API key
code string áno Alias or short_code to update
original_url string voliteľný New target URL
alias string voliteľný New alias
short_code string voliteľný New short code
password string voliteľný Set password (empty string to clear)
expires_at ISO 8601 voliteľný New expiry
click_limit int voliteľný New limit
one_time bool voliteľný Enable/disable single-use
advanced_analytics bool voliteľný Enable/disable advanced analytics
settings array<{key,value}> voliteľný Replace settings

Príklad

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"
}'

Príklad odpovede

Kódy odpovedí

KódPopis
200 SuccessPožiadavka spracovaná OK.
400 Bad RequestValidácia vstupu zlyhala.
401 UnauthorizedChýbajúci / nesprávny API kľúč.
403 ForbiddenKľúč neaktívny alebo nepovolený.
429 Rate LimitPríliš veľa požiadaviek.
500 Server ErrorNeočakávaná chyba.

Delete Short Link


POST https://api.yeb.to/v1/short-links/delete
ParameterTypPovinnýPopis
api_key string áno Your API key
code string áno Alias or short_code

Príklad

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

Príklad odpovede

Kódy odpovedí

KódPopis
200 SuccessPožiadavka spracovaná OK.
400 Bad RequestValidácia vstupu zlyhala.
401 UnauthorizedChýbajúci / nesprávny API kľúč.
403 ForbiddenKľúč neaktívny alebo nepovolený.
429 Rate LimitPríliš veľa požiadaviek.
500 Server ErrorNeočakávaná chyba.

Short Link Stats


POST https://api.yeb.to/v1/short-links/stats
ParameterTypPovinnýPopis
api_key string áno Your API key
code string áno Alias or short_code
period enum voliteľný `7d` | `30d` | `90d` (default: `30d`)
tz string voliteľný Timezone label (informational)
limit_recent int voliteľný Recent clicks to return (0–200, default 20)

Príklad

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
}'

Príklad odpovede

Kódy odpovedí

KódPopis
200 SuccessPožiadavka spracovaná OK.
400 Bad RequestValidácia vstupu zlyhala.
401 UnauthorizedChýbajúci / nesprávny API kľúč.
403 ForbiddenKľúč neaktívny alebo nepovolený.
429 Rate LimitPríliš veľa požiadaviek.
500 Server ErrorNeočakávaná chyba.

Short Links API — Značkové URL a analytika | YEB — 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"}'

Často kladené otázky

Údaje MaxMind GeoLite2 sú zvyčajne presné na úrovni mesta pre 65–70 % adries IPv4 celosvetovo.

Z dôvodu ochrany súkromia a jednoduchosti normalizujeme všetky stavy „nedostupné" (expirované, spotrebované, deaktivované, dosiahnutý limit kliknutí) na 404.

Áno, ak je nový alias/short_code unikátny v oboch stĺpcoch. API vynucuje globálnu jedinečnosť.

Predvolený burst je 20 požiadaviek/s na API kľúč (môže sa líšiť podľa plánu). Môžu platiť aj denné a mesačné kvóty.

Vytvorenie odkazu spotrebúva kredity. Zobrazenie štatistík tiež. Zobrazenia/pokusy hesla sú zaznamenané, ale nie sú účtované jednotlivo.

Unikátne kliknutia sú odhadované na základe rôznych IP adries pozorovaných pred aktuálnou udalosťou.

Iba vy. Kontroly prístupu zodpovedajú vášmu user_id (web) alebo akémukoľvek API kľúču, ktorý vlastníte (API). Požiadavky od iných sa zobrazujú ako 404.

Áno. Každá požiadavka, aj tá s chybou, spotrebúva kredity. Vaše kredity sú viazané na počet požiadaviek, bez ohľadu na úspech alebo neúspech. Ak je chyba jasne spôsobená problémom platformy na našej strane, obnovíme dotknuté kredity (bez peňažných refundácií).

Kontaktujte nás na [email protected]. Spätnú väzbu berieme vážne—ak je váš report chyby alebo žiadosť o funkciu zmysluplná, môžeme API rýchlo opraviť alebo vylepšiť a poskytnúť vám 50 bezplatných kreditov ako poďakovanie.

Závisí od API a niekedy aj od endpointu. Niektoré endpointy používajú dáta z externých zdrojov, ktoré môžu mať prísnejšie limity. Limity tiež vynucujeme, aby sme zabránili zneužitiu a udržali stabilitu platformy. Konkrétny limit pre každý endpoint nájdete v dokumentácii.

Fungujeme na kreditovom systéme. Kredity sú predplatené, nevratné jednotky, ktoré míňate na API volania a nástroje. Kredity sa spotrebúvajú FIFO (najstaršie prvé) a sú platné 12 mesiacov od dátumu nákupu. Dashboard zobrazuje dátum každého nákupu a jeho expirácie.

Áno. Všetky zakúpené kredity (vrátane zlomkových zostatkov) sú platné 12 mesiacov od nákupu. Nevyužité kredity automaticky expirujú a sú trvalo vymazané na konci obdobia platnosti. Expirované kredity nemožno obnoviť ani previesť na hotovosť alebo inú hodnotu. Prechodné pravidlo: kredity zakúpené pred 22. 9. 2025 sa považujú za zakúpené 22. 9. 2025 a expirujú 22. 9. 2026 (pokiaľ nebola pri nákupe uvedená skoršia expirácia).

Áno—v rámci obdobia platnosti. Nevyužité kredity zostávajú dostupné a prevádzajú sa z mesiaca na mesiac, kým neexpirujú 12 mesiacov po nákupe.

Kredity sú nevratné. Kupujte len to, čo potrebujete—vždy si môžete dobiť neskôr. Ak chyba na strane platformy spôsobí neúspešné strhnutie, môžeme po prešetrení obnoviť dotknuté kredity. Žiadne peňažné refundácie.

Ceny sú stanovené v kreditoch, nie v dolároch. Každý endpoint má svoju vlastnú cenu—pozrite si odznačok „Kredity / požiadavka" vyššie. Vždy presne viete, koľko míňate.
← Späť na API