Elido
Wählen Sie den Blickwinkel, der zu Ihrem Team passt
For developers

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
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
Spezifikationsformat
3
First-Party-SDKs
5 ms
p50 Redirect (Cache-HIT)
Apache 2.0
Self-Host-Lizenz

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

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.

Vorhersehbares REST
01

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.

Programmatische Slug-Kontrolle
02

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.

Webhooks und Firehose
03

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.

MCP-Protokoll
04

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.

Self-Host
05

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.

P
Platform Engineering Team, Mid-Market SaaS, Vilnius
Staff Engineer

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.

D
DevRel Team, Developer Tools Unternehmen, Berlin
Head of Developer Relations

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.

B
Backend Platform Team, Fintech, Amsterdam
Senior Backend Engineer

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.

CapabilityElidoBitly APIEigener Shortener
API-SpezifikationsformatOpenAPI 3.1, im Repo eingechecktEigene v4-Docs (kein OpenAPI)Was auch immer du schreibst
First-Party-SDKsTypeScript, Python, Go – aus Spezifikation generiertJavaScript, Python, Ruby, JavaDu baust sie selbst
Idempotenz-Keys bei SchreibvorgängenJa – Header-basiert, alle Schreib-EndpunkteNicht dokumentiertDu implementierst es
Bulk Create100 pro Aufruf, Teilfehler pro ZeileKein nativer Bulk-Endpunkt dokumentiertDein Schema, deine Regeln
Webhook-ZustellungAt-Least-Once, HMAC-SHA256, DLQIn Enterprise verfügbarDu baust es selbst
MCP ServerMIT Open-Source, 30s InstallationNicht verfügbarDu baust es selbst
Redirect-Tier selbst hostenApache 2.0 Helm-ChartNicht verfügbarVolle Kontrolle, volle Kosten
p50 Redirect-Latenz5 ms Cache-HITVergleichbar (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.

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.

Für Entwickler — Reine REST. Drei SDKs. Ein Self-Host Helm Chart. · Elido