Platforma linków z prostym API REST.
Mierzysz opóźnienia, wskaźniki błędów i czas do MTTR. Elido oferuje REST + gRPC, SDK w czterech językach (TypeScript, Go, Python, Ruby), spany OpenTelemetry przy każdym przekierowaniu oraz self-hosting na podstawie umowy (Enterprise), jeśli SaaS okaże się niewłaściwą formą.
- REST + gRPC: wybierz interfejs preferowany przez Twój service mesh
- Spany OpenTelemetry przy każdym przekierowaniu i każdym wywołaniu API
- Cztery SDK: TypeScript, Go, Python, Ruby
- Self-hosting na podstawie umowy (Enterprise)
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" }'
{ "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" }
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.
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 prawdySpecyfikacja sprawdzana w repozytorium. SDK regenerowane przy każdym wydaniu.
- Typowane odpowiedzi błędówLimit szybkości, walidacja, konflikt - wszystkie typowane, nigdy catch jako string.
- Klucze idempotentnościOparte na nagłówkach przy każdym endpoincie zapisu, odtwarzane przy ponowieniu.
- Wbudowane ponowne próbyWykładnicze cofnięcie z respektowaniem Retry-After per język.
create-link.ts1import { Elido } from2 "@elido/sdk";34const elido = new Elido({5 apiKey: process.env.ELIDO_API_KEY!,6});78const link = await elido.links.create({9 destinationUrl: dest,10 slug: "q2-launch",11});
create-link.go1import "elido"23client := elido.NewClient(4 elido.WithAPIKey(key),5)67link, err := client.Links.Create(ctx,8 &elido.CreateLinkRequest{9 DestinationURL: dest,10 Slug: "q2-launch",11 })
create_link.py1from elido import Elido23elido = Elido(4 api_key=os.environ["ELIDO_API_KEY"],5)67link = 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.
1syntax = "proto3";23package elido.api.v1;45option java_multiple_files = true;67service 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}1314message 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}2122message Link {23 string id = 1;24 string short_url = 2;25 string destination_url = 3;26 google.protobuf.Timestamp created_at = 4;27}
Authenticate with workload identity via SPIFFE/SPIRE or your mesh's built-in mTLS. API keys still work for non-mesh callers.
One implementation in api-core. Connect-Go transcoding means the REST surface is generated, not separately maintained.
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
- Cztery SDK: TypeScript, Go, Python, Ruby
- Self-hosting na podstawie umowy (Enterprise)
- 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.
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.
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 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.
Serwer Model Context Protocol: narzędzia Elido w każdym kliencie MCP
Serwer Elido MCP 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. Serwer nie został jeszcze publicznie opublikowany: publiczne wydanie wkrótce; skontaktuj się z pomocą techniczną, aby uzyskać wczesny dostęp.
Self-hosting na podstawie umowy (Enterprise)
W repozytorium istnieje chart Helm dla Kubernetes. Warunki licencji i obsługiwany model self-hostingu są ustalane w umowie; skontaktuj się z [email protected], zanim zaczniesz polegać na self-hostingu.
Stos, z którym pracujesz
- TypeScript SDK
- Python SDK
- Go SDK
- Strumień webhooków
- Specyfikacja OpenAPI 3.1
Co będziesz mierzyć
- Opóźnienie przekierowania p50
- 5 ms trafienie w pamięć podręczną
- Uptime API SLA
- 99.95% na poziomie Business
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.
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.
Czy istnieje opcja self-host?
W repozytorium istnieje chart Helm dla Kubernetes. Warunki licencji i obsługiwany model self-hostingu są ustalane w umowie; skontaktuj się z [email protected], zanim zaczniesz polegać na self-hostingu.
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. 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.
Lista lektur dla dewelopera
Specyfikacja OpenAPI 3.1, cztery własne SDK i co zawiera każdy z nich.
Zdarzenia podpisane HMAC, polityka ponownych prób, kolejka martwych wiadomości, firehose Kafka.
Silnik reguł na krawędzi - przydatny, gdy logika routingu nie należy do Twojego serwisu.
Przewodniki, referencje i notatki architektoniczne - napisane przez zespół, który dostarcza kod.
Interaktywna specyfikacja OpenAPI renderowana przez Scalar, wszystkie 44 endpointy.
Slack, Zapier, Make, n8n i inne.
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.