Wybierz perspektywę, która pasuje do Twojego zespołu
Dla deweloperów

Skracacze, którego kod źródłowy możesz przeczytać.

Mierzysz opóźnienia, wskaźniki błędów i czas do MTTR. Elido to skracacz, którego źródło możesz czytać.

  • REST + gRPC: wybierz interfejs preferowany przez Twój service mesh
  • Spany OpenTelemetry przy każdym przekierowaniu i każdym wywołaniu API
  • Sześć SDK: TypeScript, Go, Python, Ruby, PHP, .NET
  • Self-host Apache 2.0 z jednokomendowym wykresem Helm
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 specyfikacji
3
Oficjalne SDK
5 ms
p50 przekierowania (trafienie w cache)
Apache 2.0
Licencja self-host

Obserwowalność - wbudowana, nie doklejona

Każde przekierowanie emituje span OpenTelemetry. Każdy span trafia do Twojego kolektora.

Serwis krawędziowy jest instrumentowany od końca do końca za pomocą OTel. Wskaż kolektor OTLP na warstwę przekierowań i uzyskujesz pełny waterfall - wyszukiwanie w pamięci podręcznej, ewaluacja reguł, odpowiedź oraz asynchroniczna publikacja zdarzenia kliknięcia - bez pisania ani jednej linii instrumentacji.

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

To samo kanoniczne wywołanie. Sześć języków. Wszystkie generowane z jednej specyfikacji.

Każde SDK jest generowane z tej samej specyfikacji OpenAPI 3.1. Dodano nowy endpoint na serwerze? Uruchom generator, wyślij SDK - gotowe. Żadnego ręcznie utrzymywanego klienta, który dryfuje od API. Klucze idempotentności, ponowne próby z wykładniczym cofnięciem i typowane odpowiedzi błędów są udostępniane spójnie we wszystkich sześciu językach.

  • OpenAPI 3.1 jako źródło prawdy
    Specyfikacja sprawdzana w repozytorium. SDK regenerowane przy każdym wydaniu.
  • Typowane odpowiedzi błędów
    Limit szybkości, walidacja, konflikt - wszystkie typowane, nigdy catch jako string.
  • Klucze idempotentności
    Oparte na nagłówkach przy każdym endpoincie zapisu, odtwarzane przy ponowieniu.
  • Wbudowane ponowne próby
    Wykładnicze cofnięcie z respektowaniem Retry-After per język.
Wszystkie sześć SDK →
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)

Kontrakt gRPC

Ten sam interfejs w protobuf - dla natywnych użytkowników service mesh.

Nasze API obsługuje zarówno REST, jak i gRPC z tych samych handlerów. Jeśli Twoja platforma mówi natywnie w proto (Envoy, Istio, Linkerd, Connect-Go), pomiń warstwę JSON. Pliki .proto są opublikowane; generuj klientów w dowolnym języku obsługiwanym przez buf lub 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.

Co dostajesz od razu

  • REST + gRPC: wybierz interfejs preferowany przez Twój service mesh
  • Spany OpenTelemetry przy każdym przekierowaniu i każdym wywołaniu API
  • Sześć SDK: TypeScript, Go, Python, Ruby, PHP, .NET
  • Self-host Apache 2.0 z jednokomendowym wykresem Helm
  • Firehose webhooków z podpisywaniem HMAC-SHA256
  • Endpoint Prometheus /metrics w każdym serwisie

Co tak naprawdę oferuje API Elido

Specyfikacja OpenAPI i token Bearer to standard. Poniższe funkcje odróżniają skracacz, na którym można budować, od takiego, z którym będziesz walczyć o 2 rano.

Przewidywalny REST
01

OpenAPI 3.1 z 44 udokumentowanymi punktami końcowymi - brak niejawnych interfejsów

Każdy punkt końcowy w środowisku produkcyjnym jest opisany w specyfikacji OpenAPI 3.1. Brak ukrytych tras czy nieudokumentowanych parametrów, o których zapomniał zespół dokumentacji. Specyfikacja jest sprawdzana w repozytorium i wersjonowana wraz z API; zmiany przełamujące są zgodne z SemVer i mają co najmniej 90-dniowy okres przejściowy. Specyfikacja jest renderowana interaktywnie za pomocą Scalar w dokumentacji - wklej swój klucz API i testuj wywołania bez opuszczania przeglądarki. Trzy oficjalne SDK (TypeScript, Python, Go) są generowane z tej samej specyfikacji przy każdym wydaniu, więc nie mogą odbiegać od tego, co faktycznie akceptuje serwer. Metody SDK przyjmują typowane obiekty żądań i zwracają typowane obiekty odpowiedzi; błędy są typowane, a nie przechwytywane jako ciągi znaków. Klucze idempotencji są obsługiwane w punktach zapisu - przekaż nagłówek `Idempotency-Key`, a odpowiedź zostanie powtórzona przy ponownej próbie bez tworzenia duplikatu.

Programowa kontrola slugów
02

Deterministyczne slugi, masowe tworzenie i idempotencja dla potoków CI

POST /v1/workspaces/{ws}/links akceptuje pole slug - otrzymujesz taki slug, o jaki prosiłeś, lub błąd konfliktu z ID istniejącego linku, aby Twój potok mógł zdecydować, co zrobić. Masowe tworzenie (POST .../links/bulk) akceptuje do 100 specyfikacji linków na wywołanie; odpowiedź zawiera jeden wynik dla każdego wiersza wejściowego z utworzonym linkiem lub błędem, więc częściowe niepowodzenia nie są ukryte. Oba punkty końcowe akceptują klucze idempotencji: wyślij ponownie to samo żądanie z tym samym kluczem, a otrzymasz tę samą odpowiedź, bez duplikowania rekordów. To wzorzec dla potoków CI/CD, które generują krótkie linki podczas wdrożenia - deterministyczny, bezpieczny przy powtórzeniach i spójny między środowiskami. Przestrzeń nazw slugów jest definiowana dla każdej domeny niestandardowej: ten sam slug w dwóch różnych domenach to dwa różne linki, a nie konflikt.

Webhooki i firehose
03

Webhooki podpisane HMAC z automatycznymi ponowieniami i kolejką dead-letter

Każde zdarzenie w przestrzeni roboczej (utworzenie linku, kliknięcie, usunięcie, wpis w audycie, atrybucja konwersji) jest dostępne jako webhook. Dane są podpisane HMAC-SHA256 przy użyciu rotacyjnego sekretu; klucz podpisu jest oddzielony od klucza API, więc rotacja jednego nie unieważnia drugiego. Semantyka dostarczania: co najmniej raz (at-least-once), z wykładniczym czasem oczekiwania (1s, 5s, 30s, 5m, 30m) i konfigurowalnym oknem ponowień (domyślnie 24h). Zdarzenia, które wyczerpią limity ponowień, trafiają do kolejki dead-letter widocznej w panelu; możesz je stamtąd ponowić. Dla potoków zdarzeń o dużej objętości firehose zgodny z Kafką całkowicie pomija dostarczanie przez HTTP - konsumuj zdarzenia kliknięć i logi audytowe bezpośrednio ze strumienia. Firehose jest funkcją planu Business; dostarczanie webhooków jest dostępne w planie Pro i wyższych.

Protokół MCP
04

Serwer Model Context Protocol: narzędzia Elido w każdym kliencie MCP

Serwer Elido MCP o otwartym kodzie źródłowym (licencja MIT) udostępnia punkty końcowe linków, QR i analityki jako typowane narzędzia MCP. Instalacja trwa 30 sekund: dodaj blok serwera do konfiguracji Claude Desktop lub Cursor, ustaw ELIDO_API_KEY i zrestartuj. Katalog narzędzi jest automatycznie wykrywany z serwera - brak ręcznie pisanych definicji, które mogą stać się nieaktualne. Domyślnym zakresem jest tylko odczyt; operacje zapisu wymagają wyraźnej zgody w ustawieniach przestrzeni roboczej. Każde wywołanie narzędzia pojawia się w logu audytu wraz z kluczem wywołującym i argumentami, dzięki czemu zmiany wprowadzane przez agentów są łatwe do śledzenia. Serwer komunikuje się przez stdio i SSE; stosuje te same limity zapytań i kody błędów co API REST, w tym nagłówek Retry-After przy błędzie 429, aby Twój agent mógł płynnie zwolnić tempo. Kod źródłowy jest dostępny na GitHub; popularne forki dodają specyficzne dla przestrzeni roboczej narzędzia lub wzbogacanie metadanych bez konieczności wprowadzania zmian w głównym projekcie Elido.

Self-host
05

Helm chart (Apache 2.0): uruchom warstwę przekierowań we własnym VPC

Warstwa przekierowań jest jedynym komponentem na ścieżce krytycznej każdego przekierowania. To pojedynczy samodzielny plik binarny - bez zależności uruchomieniowych poza pamięcią podręczną hot cache dla warstwy L2. Helm chart dostarczany jest z optymalnymi ustawieniami dla horyzontalnego skalowania podów w Kubernetes; skaluje się na podstawie zużycia procesora i liczby żądań. Konfiguracja odbywa się za pomocą zmiennych środowiskowych; arkusz zawiera plik values.yaml z rozsądnymi domyślnymi wartościami i dokumentacją każdej zmiennej. Reszta stosu (API i dashboard) może pozostać w zarządzanym SaaS Elido - nie musisz hostować wszystkiego samodzielnie. Typowy podział to: warstwa przekierowań hostowana samodzielnie w Twoim VPC (niższe opóźnienia dla użytkowników, brak opłat za transfer wychodzący), a panel i analityka w chmurze Elido. Użyj własnego KMS do szyfrowania lokalnego hot cache w spoczynku, jeśli wymagają tego Twoje standardy bezpieczeństwa. W porównaniu do Bitly (brak opcji self-host) i budowania własnego rozwiązania, opcja Helm chart daje wydajność przekierowań i zarządzaną powierzchnię API bez konieczności budowania wszystkiego od zera.

Stos, z którym pracujesz

  • TypeScript SDK
  • Python SDK
  • Go SDK
  • Strumień webhooków
  • Specyfikacja OpenAPI 3.1
  • Wykres Helm do samodzielnego hostingu

Co będziesz mierzyć

Opóźnienie przekierowania p50
5 ms trafienie w pamięć podręczną
Uptime API SLA
99.95% na poziomie Business
Samodzielny hosting RTO
<1 godzina

Zespoły inżynierskie budujące na naszym rozwiązaniu

Nazwy są tymczasowe - prawdziwe nazwy klientów pojawią się wraz z publikacją studiów przypadku.

Samodzielnie hostujemy warstwę przekierowań w naszym klastrze Kubernetes, a do wszystkiego innego używamy zarządzanego API. Opóźnienie przekierowania p50 spadło z 45ms do 6ms po przeniesieniu usługi edge do tego samego regionu, w którym są nasi użytkownicy. Helm chart był na tyle czytelny, że wdrożyliśmy go bez kontaktu ze wsparciem.

Z
Zespół inżynierii platformy, średniej wielkości SaaS, Wilno
Główny Inżynier

Serwer MCP był decydującym czynnikiem. Nasz zespół pracuje w Cursor przez cały dzień; możliwość tworzenia otagowanych krótkich linków do notatek z wydania bezpośrednio w IDE, bez przerywania pracy, to rodzaj wygranej w obszarze DX, która naprawdę robi różnicę.

Z
Zespół DevRel, firma tworząca narzędzia dla programistów, Berlin
Szef działu Developer Relations

Klucze idempotencji przy masowym tworzeniu pozwalają nam generować krótkie linki w CI bez obaw o duplikaty przy ponownych próbach. Typowane SDK Go sprawia, że nasz kod potoku albo się kompiluje, albo nie - brak cichych błędów żądań w czasie rzeczywistym.

Z
Zespół platformy backendowej, fintech, Amsterdam
Starszy Inżynier Backendu

API Elido vs API Bitly vs budowa własnego skracacza

Dwie opcje zewnętrzne i alternatywa w postaci własnego rozwiązania. Szczerze o tym, gdzie API Bitly jest bardziej dojrzałe, a gdzie własny skracacz wygrywa pod względem kontroli.

MożliwośćElidoAPI BitlyWłasny skracacz
Format specyfikacji APIOpenAPI 3.1, sprawdzane w repoNiestandardowa dokumentacja v4 (nie OpenAPI)Taki, jaki napiszesz
Oficjalne SDKTypeScript, Python, Go - generowane ze specyfikacjiJavaScript, Python, Ruby i JavaMusisz je zbudować
Klucze idempotencji przy zapisieTak - oparte na nagłówkach, wszystkie punkty zapisuBrak dokumentacjiMusisz to zaimplementować
Masowe tworzenie100 na wywołanie, częściowe błędy dla wierszyBrak udokumentowanego natywnego punktu masowegoTwój schemat, Twoje zasady
Dostarczanie webhookówCo najmniej raz, HMAC-SHA256, DLQDostępne w planie EnterpriseMusisz to zbudować
Serwer MCPOpen-source MIT, 30s instalacjiNiedostępneMusisz to zbudować
Self-host warstwy przekierowańHelm chart na licencji Apache 2.0NiedostępnePełna kontrola, pełny koszt
Opóźnienie przekierowania p505 ms (trafienie w cache)Porównywalne (obsługiwane na brzegu sieci)Zależy od Twojej infrastruktury

Pytania programistów

Gdzie znajdę specyfikację OpenAPI?

Pod adresem /docs/api-reference - Scalar renderuje ją interaktywnie. Surowy plik YAML znajduje się pod /openapi.yaml. To ta sama specyfikacja, z której generowane są SDK, a nie oddzielnie utrzymywany dokument.

Jak uzyskać deterministyczny slug w CI?

Przekaż pole `slug` w treści żądania. Jeśli slug jest już zajęty przez inny link, API zwróci błąd 409 z ID kolidującego linku. Jeśli jest zajęty przez ten sam docelowy URL (idempotentne ponowne utworzenie), zwróci istniejący link. Użyj nagłówka Idempotency-Key, aby powtórzenia były bezpieczne.

Co zawiera Helm chart do samodzielnego hostowania?

Plik binarny warstwy przekierowań, konfigurację hot cache, ustawienia HPA oraz plik values.yaml z udokumentowanymi wszystkimi zmiennymi konfiguracyjnymi. Nie zawiera API ani dashboardu - te mogą pozostać w SaaS Elido. Licencja Apache 2.0; brak wymogu CLA dla forków.

Jak konsumować zdarzenia kliknięć bez odpytywania (polling)?

Dwie opcje: webhooki (HTTPS, podpisane HMAC, dostarczanie co najmniej raz) lub firehose zgodny z Kafką (bezpośredni konsument, plan Business). Webhooki są odpowiednie dla audytu i alertów; firehose to właściwa droga dla potoków danych o dużej objętości, gdzie narzut HTTP na każde zdarzenie ma znaczenie.

Jakie są limity zapytań (rate limits)?

Stałe 100 zap./sek., 200 w piku na klucz API, z błędem 429 i nagłówkiem Retry-After. Punkty końcowe zapisu są liczone oddzielnie od odczytów. Serwer MCP przekazuje błąd 429 jako błąd narzędzia; SDK udostępniają wartość Retry-After jako typowane pole w błędzie limitu zapytań.

Czy mogę używać serwera MCP w automatyzacji produkcyjnej, a nie tylko interaktywnie?

Tak - serwer MCP to standardowy proces stdio lub SSE. Możesz go wywołać ze skryptu, kroku CI lub potoku agenta. Domyślnie tylko do odczytu; zakres zapisu wymaga wyraźnego ustawienia w przestrzeni roboczej. Każde wywołanie podlega audytowi.

Jaką politykę wprowadzania zmian przełamujących stosujecie?

Używamy SemVer dla prefiksu wersji API (/v1/, /v2/). Zmiany przełamujące mają 90-dniowy okres przejściowy, w którym obie wersje są dostępne jednocześnie. Nieprzełamujące dodatki (nowe pola, nowe punkty końcowe) pojawiają się bez zmiany wersji. Changelog pod adresem /changelog dokumentuje każdą zmianę wraz z dotkniętym punktem końcowym.

Czy istnieje lokalny tryb programistyczny bez uderzania w prawdziwe API?

SDK TypeScript i Python akceptują nadpisanie baseUrl wskazujące na własną instancję - przydatne dla osób korzystających z self-host. Nie mamy jeszcze oficjalnego serwera mocków; dla testów lokalnych zalecanym wzorcem jest testowa przestrzeń robocza z oddzielnym kluczem API. Mamy to w planach rozwoju.

Nie wiesz, która perspektywa pasuje?

Większość zespołów zaczyna od jednej, a potem rozszerza się na wszystkie cztery. Nasz zespół sprzedaży może omówić Twój konkretny stos w 20 minut.