The shortener you can read the source of.
Sie messen Latenz, Fehlerraten und MTTR. Elido ist der Shortener, dessen Quellcode Sie lesen können.
- 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
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" }
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.
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 truthSpec checked in. SDKs regenerated on every release.
- Typed error responsesRate-limit, validation, conflict — all typed, never stringly-caught.
- Idempotency keysHeader-based on every write endpoint, replayed on retry.
- Built-in retriesExponential backoff with Retry-After honoured per language.
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 "github.com/elido/sdk-go"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)
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.
1syntax = "proto3";23package elido.api.v1;45option go_package = "github.com/elido/proto/api/v1;apiv1";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.
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
Was die Elido API tatsächlich bietet
Eine OpenAPI-Spezifikation und ein Bearer-Token sind Standard. Diese Features unterscheiden einen Shortener, auf dem man aufbauen kann, von einem, mit dem man um 2 Uhr morgens kämpft.
OpenAPI 3.1 mit 44 dokumentierten Endpunkten – keine undokumentierten Bereiche
Jeder Endpunkt in der Produktion ist in der OpenAPI 3.1 Spezifikation beschrieben. Keine Schatten-Routen, keine undokumentierten Parameter, die das Dokumentationsteam vergessen hat. Die Spezifikation ist im Repository eingecheckt und wird zusammen mit der API versioniert; Breaking Changes folgen SemVer und haben ein Deprecation-Fenster von mindestens 90 Tagen. Die Spezifikation wird interaktiv mit Scalar in den Docs gerendert – füge deinen API-Key ein und teste Aufrufe direkt im Browser. Drei automatisch generierte SDKs (TypeScript, Python, Go) werden bei jedem Release aus derselben Spezifikation erstellt, sodass sie nicht vom tatsächlichen Server-Status abweichen können. Die SDK-Methoden akzeptieren typisierte Request-Objekte und geben typisierte Response-Objekte zurück; Fehler sind typisiert, nicht nur als Strings abgefangen. Idempotenz-Keys werden an Schreib-Endpunkten unterstützt – sende einen `Idempotency-Key`-Header und die Antwort wird bei einer Wiederholung ohne Dubletten-Erstellung erneut ausgegeben.
Deterministische Slugs, Bulk Create und Idempotenz für CI-Pipelines
POST /v1/workspaces/{ws}/links akzeptiert ein Slug-Feld – du erhältst genau den Slug, den du angefordert hast, oder einen Conflict-Error mit der ID des bestehenden Links, damit deine Pipeline entscheiden kann, was zu tun ist. Bulk Create (POST .../links/bulk) akzeptiert bis zu 100 Link-Spezifikationen pro Aufruf; die Antwort enthält ein Ergebnis pro Eingabezeile, entweder mit einem erstellten Link oder einem Fehler, damit Teilfehler nicht unbemerkt bleiben. Beide Endpunkte unterstützen Idempotenz-Keys: Sende dieselbe Anfrage mit demselben Key erneut und du erhältst dieselbe Antwort, ohne doppelte Zeilen. Dies ist das Muster für CI/CD-Pipelines, die bei jedem Deploy Kurzlinks generieren – deterministisch, sicher bei Wiederholungen und konsistent über Umgebungen hinweg. Slug-Namespacing erfolgt pro Custom-Domain: Derselbe Slug auf zwei verschiedenen Domains sind zwei unterschiedliche Links, kein Konflikt.
HMAC-signierte Webhooks mit automatischen Wiederholungsversuchen und einer Dead-Letter-Queue
Jedes Workspace-Event (Link erstellt, Link geklickt, Link gelöscht, Audit-Eintrag, Conversion zugeordnet) ist als Webhook verfügbar. Payloads werden mit HMAC-SHA256 unter Verwendung eines rotierbaren Secrets signiert; der Signing-Key ist von deinem API-Key getrennt, sodass die Rotation des einen den anderen nicht ungültig macht. Zustellungssemantik: At-Least-Once, mit exponentiellem Backoff (1s, 5s, 30s, 5m, 30m) und einem konfigurierbaren Retry-Fenster (Standard 24h). Events, die alle Versuche erschöpft haben, landen in einer Dead-Letter-Queue, die im Dashboard sichtbar ist; von dort aus kannst du sie erneut abspielen. Für Hochvolumen-Event-Pipelines umgeht der Kafka/Redpanda Firehose die HTTP-Zustellung komplett – konsumiere Click-Events und Audit-Logs direkt aus dem Stream. Der Firehose ist ein Business-Feature; Webhook-Zustellung ist ab Pro verfügbar.
Model Context Protocol Server: Elido-Tools in jedem MCP-Client
Der Open-Source Elido MCP Server (MIT-Lizenz) stellt Link-, QR- und Analytics-Endpunkte als typisierte MCP-Tools bereit. Die Installation dauert 30 Sekunden: Füge den Server-Block zu deiner Claude Desktop- oder Cursor-Konfiguration hinzu, setze ELIDO_API_KEY, starte neu. Der Tool-Katalog wird automatisch vom Server erkannt – keine handgeschriebenen Tool-Definitionen, die veralten. Read-only ist der Standard-Scope; Schreiboperationen erfordern eine explizite Freigabe in den Workspace-Einstellungen. Jeder Tool-Aufruf erscheint im Workspace-Audit-Log mit dem aufrufenden Key und den Argumenten, sodass Agent-gesteuerte Änderungen nachvollziehbar sind. Der Server spricht stdio und SSE; er nutzt dieselben Rate-Limits und Fehlercodes wie die REST API, einschließlich Retry-After bei 429, damit dein Agent sauber pausieren kann. Der Quellcode ist auf GitHub; häufige Forks fügen Workspace-spezifische Tools oder Metadaten-Anreicherung hinzu, ohne dass Elido dies upstream mergen muss.
Helm-Chart (Apache 2.0): Betreibe den Redirect-Tier in deiner eigenen VPC
Der Redirect-Tier (edge-redirect Service) ist die einzige Komponente im Hot-Path jedes Redirects. Es ist ein einzelnes Go-Binary – keine Laufzeitabhängigkeiten außer Redis für den L2-Cache. Das Helm-Chart wird mit sinnvollen Standardwerten für Kubernetes Horizontal Pod Autoscaling ausgeliefert; es skaliert basierend auf CPU und Anfragerate. Die Konfiguration erfolgt über Umgebungsvariablen; das Chart enthält eine values.yaml mit sinnvollen Voreinstellungen und einer dokumentierten Liste jeder Variable. Der Rest des Stacks (api-core, Dashboard) kann auf dem von Elido verwalteten SaaS bleiben – du musst nicht alles selbst hosten. Der übliche Split ist: Redirect-Tier selbst gehostet in deiner VPC (geringere Latenz für deine Nutzer, keine Egress-Kosten), Dashboard und Analytics in der Elido-Cloud. Nutze deinen eigenen KMS für die At-Rest-Verschlüsselung des lokalen Redis-Caches, falls deine Sicherheitsrichtlinien dies erfordern. Im Vergleich zu Bitly (keine Self-Host-Option) und dem Bau eines eigenen Shorteners bietet die Helm-Chart-Option die Redirect-Performance und die verwaltete API-Oberfläche, ohne bei Null anfangen zu müssen.
Stack you'll touch
- TypeScript SDK
- Python SDK
- Go SDK
- Webhook Firehose
- OpenAPI 3.1 Spezifikation
- Self-Host Helm Chart
Was Sie messen werden
- p50 Weiterleitungs-Latenz
- 5 ms Cache HIT
- API Uptime SLA
- 99.95% auf Business
- Self-Host RTO
- <1 Stunde
Engineering-Teams, die darauf aufbauen
Namen sind vorerst Platzhalter – echte Kundennamen werden hier erscheinen, sobald Fallstudien veröffentlicht werden.
“Wir hosten den Redirect-Tier selbst in unserem eigenen Kubernetes-Cluster und nutzen die verwaltete API für alles andere. Die p50 Redirect-Latenz sank von 45ms auf 6ms, nachdem wir den Edge-Service in dieselbe Region wie unsere Nutzer verschoben haben. Das Helm-Chart war so gut lesbar, dass wir ohne Support-Anfrage live gehen konnten.”
“Der MCP Server war der entscheidende Faktor. Unser Team arbeitet den ganzen Tag in Cursor; die Möglichkeit, getaggte Kurzlinks für Release-Notes direkt aus der IDE zu erstellen, ohne den Workflow zu verlassen, ist der Typ von DX-Gewinn, der wirklich hängen bleibt.”
“Idempotenz-Keys beim Bulk Create lassen uns Kurzlinks in der CI generieren, ohne Paranoia vor Dubletten bei Wiederholungsversuchen. Das typisierte Go SDK bedeutet, dass unser Pipeline-Code kompiliert oder fehlschlägt – keine lautlosen fehlerhaften Anfragen zur Laufzeit.”
Elido API vs. Bitly API vs. Eigenbau eines Shorteners
Zwei externe Optionen und die Build-it-yourself-Alternative. Ehrlich darüber, wo Bitlys API ausgereifter ist und wo ein eigener Shortener in Sachen Kontrolle punktet.
| Capability | Elido | Bitly API | Eigener Shortener |
|---|---|---|---|
| API-Spezifikationsformat | OpenAPI 3.1, im Repo eingecheckt | Eigene v4-Docs (kein OpenAPI) | Was auch immer du schreibst |
| First-Party-SDKs | TypeScript, Python, Go – aus Spezifikation generiert | JavaScript, Python, Ruby, Java | Du baust sie selbst |
| Idempotenz-Keys bei Schreibvorgängen | Ja – Header-basiert, alle Schreib-Endpunkte | Nicht dokumentiert | Du implementierst es |
| Bulk Create | 100 pro Aufruf, Teilfehler pro Zeile | Kein nativer Bulk-Endpunkt dokumentiert | Dein Schema, deine Regeln |
| Webhook-Zustellung | At-Least-Once, HMAC-SHA256, DLQ | In Enterprise verfügbar | Du baust es selbst |
| MCP Server | MIT Open-Source, 30s Installation | Nicht verfügbar | Du baust es selbst |
| Redirect-Tier selbst hosten | Apache 2.0 Helm-Chart | Nicht verfügbar | Volle Kontrolle, volle Kosten |
| p50 Redirect-Latenz | 5 ms Cache-HIT | Vergleichbar (Edge-served) | Abhängig von deiner Infrastruktur |
Entwickler-Fragen
Wo finde ich die OpenAPI-Spezifikation?
Unter /docs/api-reference – Scalar rendert sie interaktiv. Die Roh-YAML liegt unter /openapi.yaml. Es ist dieselbe Spezifikation, aus der die SDKs generiert werden, keine separat gepflegte Dokumentation.
Wie erhalte ich einen deterministischen Slug in der CI?
Übergib `slug` im Request-Body. Wenn der Slug bereits von einem anderen Link belegt ist, gibt die API 409 mit der ID des widersprüchlichen Links zurück. Wenn er von derselben Ziel-URL belegt ist (idempotentes Re-Create), wird der bestehende Link zurückgegeben. Nutze den Idempotency-Key Header, um Wiederholungsversuche sicher zu machen.
Was beinhaltet das Self-Host Helm-Chart?
Den edge-redirect Service (Go-Binary), Redis-Konfiguration, HPA-Einstellungen und eine values.yaml, in der alle Konfigurationsvariablen dokumentiert sind. Es enthält nicht api-core oder das Dashboard – diese können auf dem Elido SaaS bleiben. Apache 2.0 Lizenz; kein CLA für Forks erforderlich.
Wie konsumiere ich Click-Events ohne Polling?
Zwei Optionen: Webhooks (HTTPS, HMAC-signiert, At-Least-Once) oder der Kafka/Redpanda Firehose (direkter Consumer, Business-Tier). Webhooks eignen sich gut für Audits und Alerting; der Firehose ist der richtige Weg für Hochvolumen-Event-Pipelines, bei denen der Overhead der HTTP-Zustellung pro Event ins Gewicht fällt.
Wie hoch ist das Rate-Limit?
100 Anfr./Sek. dauerhaft, 200 Burst pro API-Key, mit einem 429 und Retry-After Header. Schreib-Endpunkte zählen separat von Lesezugriffen. Der MCP Server gibt 429 als Tool-Fehler weiter; die SDKs stellen den Retry-After Wert als typisiertes Feld im Rate-Limit-Fehler bereit.
Kann ich den MCP Server in der Produktionsautomatisierung nutzen, nicht nur interaktiv?
Ja – der MCP Server ist ein Standard-stdio- oder SSE-Prozess. Du kannst ihn aus einem Skript, einem CI-Schritt oder einer Agent-Pipeline aufrufen. Standardmäßig schreibgeschützt (Read-only); der Schreib-Scope erfordert eine explizite Workspace-Einstellung. Jeder Aufruf wird protokolliert.
Welche Richtlinie gilt für Breaking Changes?
SemVer beim API-Versions-Präfix (/v1/, /v2/). Breaking Changes erhalten ein 90-tägiges Deprecation-Fenster, in dem beide Versionen gleichzeitig live sind. Nicht-brechende Ergänzungen (neue Felder, neue Endpunkte) erfolgen ohne Versionssprung. Das Changelog unter /changelog dokumentiert jede Änderung mit dem betroffenen Endpunkt.
Gibt es einen lokalen Dev-Modus, ohne die echte API zu nutzen?
Die TypeScript- und Python-SDKs akzeptieren einen baseUrl-Override, der auf deine eigene Instanz zeigt – nützlich für Self-Hoster. Es gibt noch keinen offiziellen Mock-Server; für lokale Tests ist das Muster ein Test-Workspace mit einem separaten API-Key, kein Mock. Es steht auf der Roadmap.
Developer's reading list
OpenAPI 3.1 spec, six first-party SDKs, and what each one ships.
HMAC-signed events, retry policy, dead-letter queue, Kafka firehose.
Edge rule engine — useful when your routing logic doesn't belong in your service.
Guides, references, and architecture notes — written by the team that ships the code.
Interactive Scalar-rendered OpenAPI spec, all 44 endpoints.
Slack, Zapier, Make, n8n, and the source of every connector.
Nicht sicher, welcher Winkel passt?
Die meisten Teams beginnen als eins und wachsen in alle vier hinein. Unser Vertriebsteam kann in 20 Minuten Ihren spezifischen Stack durchgehen.