Alege unghiul potrivit pentru echipa ta
Pentru dezvoltatori

Shortener-ul căruia îi poți citi sursa.

Măsori latența, ratele de eroare și timpul până la MTTR. Elido este shortener-ul căruia îi poți citi sursa - REST + gRPC, SDK-uri în patru limbaje (TypeScript, Go, Python, Ruby), spans OpenTelemetry la fiecare redirecționare și o cale de self-host sub licență Apache 2.0, pentru ziua în care decizi că SaaS nu mai e forma potrivită.

  • REST + gRPC: alege suprafața preferată de service mesh-ul tău
  • Spans OpenTelemetry la fiecare redirecționare, la fiecare apel API
  • Șase SDK-uri: TypeScript, Go, Python, Ruby, PHP, .NET
  • Self-host Apache 2.0 cu un Helm chart dintr-o singură comandă
POST /v1/links
201 Created · 38 ms
Request
curl -X POST https://api.elido.app/v1/links
  -H "Authorization: Bearer $ELIDO_API_KEY"
  -H "Idempotency-Key: ci-2026-05-08-build-4419"
  -d '{
    "destination_url": "https://shop.example.com/launch",
    "slug": "q2-launch",
    "workspace_id": "ws_8f3c"
  }'
Response
{
  "id": "link_01HQ3X...",
  "short_url": "https://b.elido.me/q2-launch",
  "click_tracker": "https://api.elido.app/v1/links/link_01HQ3X/clicks",
  "expires_at": "2026-08-08T00:00:00Z",
  "created_at": "2026-05-08T11:24:01Z"
}
Idempotent · safe to retry Live spec
OpenAPI 3.1
Format specificație
3
SDK-uri proprii
5 ms
Redirecționare p50 (cache HIT)
Apache 2.0
Licență self-host

Observabilitate - integrată din start, nu adăugată ulterior

Fiecare redirecționare emite un span OpenTelemetry. Fiecare span ajunge în colectorul tău.

Serviciul edge este instrumentat capăt-la-capăt cu OTel. Îndreaptă colectorul tău OTLP către nivelul de redirecționare și obții întregul waterfall - căutare în cache, evaluarea regulilor, răspunsul și publicarea asincronă a evenimentului de click - fără să scrii tu însuți nicio linie de instrumentare.

Trace · 7f3a91 · GET / → 302
5 spans · 5.2 ms wall
edge.redirect
edge service · server
4.8 ms
cache.lookup (L1 → L2)
in-process LRU + hot cache
0.6 ms
rule.evaluate
smart-link first-match
0.3 ms
response.write
302 + click_id header
1.0 ms
click.publish (async)
event stream · fire-and-forget
0.4 ms
Wall time
5.2 ms
Cache
L1 hit
Exporter
OTLP/gRPC

SDK-uri

Același apel canonic. Șase limbaje. Toate generate dintr-o singură specificație.

Fiecare SDK este generat din aceeași specificație OpenAPI 3.1. Un endpoint nou adăugat pe server? Rulezi generatorul, livrezi SDK-urile, gata. Niciun client întreținut manual care se abate de la API. Cheile de idempotență, reîncercările cu backoff exponențial și răspunsurile de eroare tipate apar consecvent în toate cele șase limbaje.

  • OpenAPI 3.1 ca sursă unică de adevăr
    Specificație inclusă în repo. SDK-uri regenerate la fiecare lansare.
  • Răspunsuri de eroare tipate
    Limitare de rată, validare, conflict - toate tipate, niciodată prinse prin șiruri de caractere.
  • Chei de idempotență
    Bazate pe header pe fiecare endpoint de scriere, redate identic la reîncercare.
  • Reîncercări integrate
    Backoff exponențial, cu Retry-After respectat pentru fiecare limbaj.
Toate cele șase SDK-uri →
Canonical create - same call, three SDKs
generated from spec
TypeScriptcreate-link.ts
1import { Elido } from
2 "@elido/sdk";
3 
4const elido = new Elido({
5 apiKey: process.env.ELIDO_API_KEY!,
6});
7 
8const link = await elido.links.create({
9 destinationUrl: dest,
10 slug: "q2-launch",
11});
Gocreate-link.go
1import "github.com/elido/sdk-go"
2 
3client := elido.NewClient(
4 elido.WithAPIKey(key),
5)
6 
7link, err := client.Links.Create(ctx,
8 &elido.CreateLinkRequest{
9 DestinationURL: dest,
10 Slug: "q2-launch",
11 })
Pythoncreate_link.py
1from elido import Elido
2 
3elido = Elido(
4 api_key=os.environ["ELIDO_API_KEY"],
5)
6 
7link = elido.links.create(
8 destination_url=dest,
9 slug="q2-launch",
10 idempotency_key=build_id,
11)

Contract gRPC

Aceeași suprafață în protobuf - pentru cei nativi în service mesh.

Serviciul api-core servește atât REST, cât și gRPC din aceiași handleri. Dacă platforma ta vorbește proto nativ (Envoy, Istio, Linkerd, Connect-Go), sari peste nivelul JSON. Fișierele .proto sunt publicate; generezi clienți în orice limbaj suportat de buf sau protoc.

link_service.proto
buf · v1
1syntax = "proto3";
2 
3package elido.api.v1;
4 
5option go_package = "github.com/elido/proto/api/v1;apiv1";
6 
7service LinkService {
8 rpc Create(CreateLinkRequest) returns (Link);
9 rpc Resolve(ResolveLinkRequest) returns (ResolveLinkResponse);
10 rpc List(ListLinksRequest) returns (ListLinksResponse);
11 rpc Delete(DeleteLinkRequest) returns (google.protobuf.Empty);
12}
13 
14message CreateLinkRequest {
15 string workspace_id = 1;
16 string destination_url = 2;
17 optional string slug = 3;
18 optional google.protobuf.Timestamp expires_at = 4;
19 repeated KeyValue tags = 5;
20}
21 
22message Link {
23 string id = 1;
24 string short_url = 2;
25 string destination_url = 3;
26 google.protobuf.Timestamp created_at = 4;
27}
served from api-core:9090 stable
mTLSservice-mesh native

Authenticate with workload identity via SPIFFE/SPIRE or your mesh's built-in mTLS. API keys still work for non-mesh callers.

Same handlersREST and gRPC

One implementation in api-core. Connect-Go transcoding means the REST surface is generated, not separately maintained.

Streamingserver-side events

ResolveLinkResponse streams click events for hot links - useful for internal dashboards without webhook plumbing.

Ce primești din start

  • REST + gRPC: alege suprafața preferată de service mesh-ul tău
  • Spans OpenTelemetry la fiecare redirecționare, la fiecare apel API
  • Șase SDK-uri: TypeScript, Go, Python, Ruby, PHP, .NET
  • Self-host Apache 2.0 cu un Helm chart dintr-o singură comandă
  • Firehose webhook cu semnare HMAC-SHA256
  • Endpoint Prometheus /metrics pe fiecare serviciu

Ce livrează, de fapt, API-ul Elido

O specificație OpenAPI și un token Bearer sunt un standard minim. Funcționalitățile de mai jos sunt cele care deosebesc un shortener pe care poți construi de unul cu care te vei lupta la 2 dimineața.

REST predictibil
01

OpenAPI 3.1 cu 44 de endpoint-uri documentate - nicio suprafață nedocumentată

Fiecare endpoint din producție este descris în specificația OpenAPI 3.1. Fără rute ascunse, fără parametri nedocumentați pe care echipa de documentație i-a uitat. Specificația este inclusă în repo și versionată alături de API; modificările incompatibile respectă SemVer și primesc o fereastră de depreciere de cel puțin 90 de zile. Specificația se redă interactiv cu Scalar în documentație - lipești cheia API și testezi apeluri fără să ieși din browser. Trei SDK-uri generate automat (TypeScript, Python, Go) sunt generate din aceeași specificație la fiecare lansare, astfel încât nu se pot abate de la ce acceptă efectiv serverul. Metodele SDK-ului acceptă obiecte de cerere tipate și returnează obiecte de răspuns tipate; erorile sunt tipate, nu prinse prin șiruri de caractere. Cheile de idempotență sunt acceptate pe endpoint-urile de scriere - trimiți un header `Idempotency-Key`, iar răspunsul este redat identic la reîncercare, fără o creare duplicată.

Control programatic al slug-urilor
02

Slug-uri deterministe, creare în masă și idempotență pentru pipeline-uri CI

POST /v1/workspaces/{ws}/links acceptă un câmp slug - primești slug-ul cerut sau o eroare de conflict cu ID-ul linkului existent, astfel încât pipeline-ul tău poate decide ce să facă. Crearea în masă (POST .../links/bulk) acceptă până la 100 de specificații de link per apel; răspunsul include un rezultat pentru fiecare rând de intrare, fie un link creat, fie o eroare, astfel încât eșecurile parțiale nu rămân ascunse. Ambele endpoint-uri acceptă chei de idempotență: retrimiți aceeași cerere cu aceeași cheie și primești același răspuns, fără rânduri duplicate. Acesta este tiparul pentru pipeline-urile CI/CD care emit linkuri scurte la fiecare deploy - determinist, sigur la reîncercare, consecvent între medii. Spațiul de nume al slug-urilor este per domeniu personalizat: același slug pe două domenii diferite înseamnă două linkuri diferite, nu un conflict.

Webhook-uri și firehose
03

Webhook-uri semnate HMAC, cu reîncercare automată și o coadă dead-letter

Fiecare eveniment de workspace (link creat, link accesat, link șters, intrare de audit, conversie atribuită) este disponibil ca webhook. Payload-urile sunt semnate cu HMAC-SHA256 folosind un secret rotativ; cheia de semnare este separată de cheia ta API, astfel încât rotirea uneia nu o invalidează pe cealaltă. Semantica livrării: cel puțin o dată (at-least-once), cu backoff exponențial (1s, 5s, 30s, 5m, 30m) și o fereastră de reîncercare configurabilă (implicit 24h). Evenimentele care epuizează reîncercările ajung într-o coadă dead-letter vizibilă în dashboard; poți relua de acolo. Pentru pipeline-uri de evenimente cu volum mare, firehose-ul compatibil Kafka ocolește complet livrarea HTTP - consumi evenimentele de click și jurnalele de audit direct din flux. Firehose-ul este o funcționalitate Business; livrarea prin webhook este disponibilă de la Pro în sus.

Protocol MCP
04

Server Model Context Protocol: instrumentele Elido în orice client MCP

Serverul Elido MCP open-source (licență MIT) expune endpoint-urile de linkuri, QR și analiză ca instrumente MCP tipate. Instalarea durează 30 de secunde: adaugi blocul de server în configurația Claude Desktop sau Cursor, setezi ELIDO_API_KEY, repornești. Catalogul de instrumente este descoperit automat de pe server - fără definiții de instrumente scrise manual, care se abat în timp. Scope-ul implicit este doar-citire; operațiunile de scriere necesită acordare explicită în setările workspace-ului. Fiecare apel de instrument apare în jurnalul de audit al workspace-ului, cu cheia apelantă și argumentele, astfel încât mutațiile conduse de agent sunt trasabile. Serverul vorbește stdio și SSE; trece prin aceleași limite de rată și coduri de eroare ca API-ul REST, inclusiv Retry-After la 429, astfel încât agentul tău se poate retrage curat. Sursa este pe GitHub; fork-urile obișnuite adaugă instrumente specifice workspace-ului sau îmbogățire de metadate, fără să fie nevoie ca Elido să le integreze upstream.

Self-host
05

Helm chart (Apache 2.0): rulează nivelul de redirecționare în propriul tău VPC

Nivelul de redirecționare este singura componentă aflată pe calea critică (hot path) a fiecărei redirecționări. Este un binar unic, autonom - fără dependențe de runtime, în afara unui cache activ în memorie pentru nivelul L2. Helm chart-ul vine cu valori implicite sensate pentru autoscalarea orizontală a pod-urilor Kubernetes; scalează în funcție de CPU și de rata cererilor. Configurarea se face prin variabile de mediu; chart-ul include un values.yaml cu valori implicite sensate și o listă documentată a fiecărei variabile. Restul stack-ului (API și dashboard) poate rămâne pe SaaS-ul gestionat de Elido - nu trebuie să faci self-host la tot. Împărțirea obișnuită este: nivelul de redirecționare în self-host, în propriul tău VPC (latență mai mică pentru utilizatorii tăi, fără facturare de egress), dashboard și analiză pe cloud-ul Elido. Adu-ți propriul KMS pentru criptarea la repaus a cache-ului activ local, dacă poziția ta de securitate o cere. Comparativ cu Bitly (fără opțiune de self-host) și cu construirea unui shortener personalizat, opțiunea Helm chart îți oferă performanța de redirecționare și suprafața de API gestionată, fără să pornești de la zero.

Stack-ul cu care vei lucra

  • SDK TypeScript
  • SDK Python
  • SDK Go
  • Firehose webhook
  • Specificație OpenAPI 3.1
  • Helm chart pentru self-host

Ce vei măsura

Latență redirecționare p50
5 ms la cache HIT
SLA de disponibilitate API
99,95% pe Business
RTO pentru self-host
<1 oră

Echipe de inginerie care construiesc pe această platformă

Numele sunt deocamdată substituenți - numele reale ale clienților vor apărea aici pe măsură ce studiile de caz sunt publicate.

Facem self-host la nivelul de redirecționare în propriul nostru cluster Kubernetes și folosim API-ul gestionat pentru restul. Latența p50 de redirecționare a scăzut de la 45ms la 6ms după ce am mutat serviciul edge în aceeași regiune cu utilizatorii noștri. Helm chart-ul a fost suficient de lizibil încât am lansat fără să consultăm suportul.

E
Echipă de inginerie de platformă, SaaS mid-market, Vilnius
Staff Engineer

Serverul MCP a fost factorul decisiv. Echipa noastră lucrează în Cursor toată ziua; posibilitatea de a crea linkuri scurte etichetate pentru note de lansare direct din IDE, fără să ieșim din flux, este genul de câștig de DX care rămâne cu adevărat.

E
Echipă DevRel, companie de instrumente pentru dezvoltatori, Berlin
Head of Developer Relations

Cheile de idempotență la crearea în masă ne permit să emitem linkuri scurte în CI fără paranoia că reîncercările vor crea duplicate. SDK-ul Go tipat înseamnă că codul nostru din pipeline fie compilează, fie eșuează - fără cereri greșite silențioase la runtime.

E
Echipă de platformă backend, fintech, Amsterdam
Senior Backend Engineer

Elido API vs Bitly API vs construirea propriului shortener

Două opțiuni externe și alternativa de a-l construi singur. Onești despre unde API-ul Bitly este mai matur și unde un shortener personalizat câștigă la control.

CapabilitateElidoBitly APIShortener personalizat
Format specificație APIOpenAPI 3.1, inclusă în repoDocumentație v4 personalizată (nu OpenAPI)Ce scrii tu
SDK-uri propriiTypeScript, Python, Go - generate din specificațieJavaScript, Python, Ruby, JavaTu le construiești
Chei de idempotență la scriereDa - bazate pe header, pe toate endpoint-urile de scriereNedocumentatTu o implementezi
Creare în masă100 per apel, eșec parțial per rândNiciun endpoint nativ de creare în masă documentatSchema ta, regulile tale
Livrare webhookCel puțin o dată, HMAC-SHA256, DLQDisponibil pe EnterpriseTu o construiești
Server MCPOpen-source MIT, instalare în 30sIndisponibilTu îl construiești
Self-host pentru nivelul de redirecționareHelm chart Apache 2.0IndisponibilControl total, cost total
Latență redirecționare p505 ms la cache HITComparabil (servit din edge)Depinde de infrastructura ta

Întrebări de dezvoltatori

Unde este specificația OpenAPI?

La /docs/api-reference - Scalar o redă interactiv. YAML-ul brut este la /openapi.yaml. Este aceeași specificație din care sunt generate SDK-urile, nu un document întreținut separat.

Cum obțin un slug determinist în CI?

Trimiți `slug` în corpul cererii. Dacă slug-ul este deja folosit de un alt link, API-ul returnează 409 cu ID-ul linkului aflat în conflict. Dacă este folosit de același URL de destinație (recreare idempotentă), returnează linkul existent. Folosește header-ul Idempotency-Key pentru a face reîncercările sigure.

Ce include Helm chart-ul pentru self-host?

Binarul nivelului de redirecționare, configurarea cache-ului activ, setările HPA și un values.yaml cu toate variabilele de configurare documentate. Nu include API-ul sau dashboard-ul - acestea pot rămâne pe SaaS-ul Elido. Licență Apache 2.0; niciun CLA necesar pentru fork-uri.

Cum consum evenimentele de click fără polling?

Două opțiuni: webhook-uri (HTTPS, semnate HMAC, cel puțin o dată) sau firehose-ul compatibil Kafka (consumator direct, plan Business). Webhook-urile sunt suficiente pentru audit și alertare; firehose-ul este calea potrivită pentru pipeline-uri de evenimente cu volum mare, unde contează overhead-ul livrării HTTP per eveniment.

Care este limita de rată?

100 cereri/sec susținute, 200 în burst per cheie API, cu un 429 și header Retry-After. Endpoint-urile de scriere se contorizează separat de cele de citire. Serverul MCP transmite 429 ca eroare de instrument; SDK-urile expun valoarea Retry-After ca un câmp tipat în eroarea de limitare a ratei.

Pot folosi serverul MCP în automatizări de producție, nu doar interactiv?

Da - serverul MCP este un proces standard stdio sau SSE. Îl poți invoca dintr-un script, un pas CI sau un pipeline de agent. Doar-citire în mod implicit; scope-ul de scriere necesită o setare explicită la nivel de workspace. Fiecare apel este auditat.

Ce politică de modificări incompatibile folosiți?

SemVer pe prefixul versiunii API (/v1/, /v2/). Modificările incompatibile primesc o fereastră de depreciere de 90 de zile, cu ambele versiuni active simultan. Adăugările compatibile (câmpuri noi, endpoint-uri noi) se fac fără o creștere de versiune. Changelog-ul de la /changelog documentează fiecare modificare, împreună cu endpoint-ul afectat.

Există un mod de dezvoltare locală, fără să apelezi API-ul real?

SDK-urile TypeScript și Python acceptă o suprascriere de baseUrl care indică spre propria ta instanță - util pentru cei care fac self-host. Nu există încă un server mock oficial; pentru testarea locală, tiparul este un workspace de test cu o cheie API separată, nu un mock. Este pe roadmap.

Nu ești sigur ce unghi ți se potrivește?

Majoritatea echipelor încep dintr-un singur unghi și cresc spre toate cele patru. Echipa noastră de vânzări poate trece prin stack-ul tău specific în 20 de minute.