Elido
Wybierz perspektywę, która pasuje do Twojego zespołu
For developers

The shortener you can read the source of.

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: pick the surface your service mesh prefers
  • OpenTelemetry spans on every redirect, every API call
  • Six SDKs: TypeScript, Go, Python, Ruby, PHP, .NET
  • Apache 2.0 self-host with a one-command Helm chart
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

Observability — built in, not bolted on

Every redirect emits an OpenTelemetry span. Every span lands in your collector.

The edge service is instrumented end-to-end with OTel. Point your OTLP collector at the redirect tier and you get the full waterfall — cache lookup, rule evaluation, response, and the async click-event publish — without writing a single instrumentation line yourself.

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

SDKs

Same canonical call. Six languages. All generated from one spec.

Every SDK ships from the same OpenAPI 3.1 spec. New endpoint added on the server? Run the generator, ship the SDKs, done. No hand-maintained client that drifts from the API. Idempotency keys, retries with exponential backoff, and typed error responses are surfaced consistently across all six languages.

  • OpenAPI 3.1 source of truth
    Spec checked in. SDKs regenerated on every release.
  • Typed error responses
    Rate-limit, validation, conflict — all typed, never stringly-caught.
  • Idempotency keys
    Header-based on every write endpoint, replayed on retry.
  • Built-in retries
    Exponential backoff with Retry-After honoured per language.
All six SDKs →
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)
sdk-ts@2.4 · sdk-go@2.4 · sdk-py@2.4 in sync

gRPC contract

Same surface in protobuf — for service-mesh natives.

The api-core service serves both REST and gRPC from the same handlers. If your platform speaks proto natively (Envoy, Istio, Linkerd, Connect-Go), skip the JSON layer. The .proto files are published; generate clients in any language buf or protoc supports.

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.

What you get out of the box

  • REST + gRPC: pick the surface your service mesh prefers
  • OpenTelemetry spans on every redirect, every API call
  • Six SDKs: TypeScript, Go, Python, Ruby, PHP, .NET
  • Apache 2.0 self-host with a one-command Helm chart
  • Webhook firehose with HMAC-SHA256 signing
  • Prometheus /metrics endpoint on every service

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 Kafka/Redpanda 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ń (usługa edge-redirect) jest jedynym komponentem na ścieżce krytycznej każdego przekierowania. To pojedynczy plik binarny Go — bez zależności uruchomieniowych poza Redis dla pamięci podręcznej 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-core, 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 cache Redis 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.

Stack you'll touch

  • 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.

CapabilityElidoAPI 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, 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?

Usługę edge-redirect (plik binarny Go), konfigurację Redis, ustawienia HPA oraz plik values.yaml z udokumentowanymi wszystkimi zmiennymi konfiguracyjnymi. Nie zawiera api-core 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 Kafka/Redpanda (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.

Dla deweloperów — Czysty REST. Trzy SDK. Wykres Helm do samodzielnego hostingu. · Elido