← Wählen Sie den Blickwinkel, der zu Ihrem Team passt
Für Entwickler

Eine Link-Plattform mit einer schlichten REST-API.

Sie messen Latenz, Fehlerraten und MTTR. Elido bietet Ihnen REST + gRPC, SDKs in vier Sprachen (TypeScript, Go, Python, Ruby), OpenTelemetry-Spans bei jeder Weiterleitung und Self-Hosting per Vertrag (Enterprise), falls SaaS die falsche Form ist.

  • REST + gRPC: wählen Sie die Oberfläche, die Ihr Service-Mesh bevorzugt
  • OpenTelemetry-Spans für jeden Redirect und jeden API-Aufruf
  • Vier SDKs: TypeScript, Go, Python, Ruby
  • Self-Hosting per Vertrag (Enterprise)
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)
MCP
Offizieller MCP-Server

Observability - eingebaut, nicht nachgerüstet

Jeder Redirect erzeugt einen OpenTelemetry-Span. Jeder Span landet in Ihrem Collector.

Der Edge-Service ist durchgängig mit OTel instrumentiert. Richten Sie Ihren OTLP-Collector auf den Redirect-Tier - und Sie erhalten den vollständigen Waterfall: Cache-Lookup, Rule-Evaluation, Antwort und das asynchrone Click-Event-Publish - ohne eine einzige Instrumentierungszeile selbst schreiben zu müssen.

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

SDKs

Derselbe kanonische Aufruf. Sechs Sprachen. Alle aus einer Spezifikation generiert.

Jedes SDK wird aus derselben OpenAPI-3.1-Spezifikation ausgeliefert. Neuer Endpunkt auf dem Server hinzugefügt? Generator ausführen, SDKs ausliefern, fertig. Kein manuell gepflegter Client, der von der API abweicht. Idempotenz-Keys, Retries mit exponentiellem Backoff und typisierte Fehlerantworten sind konsistent über alle sechs Sprachen implementiert.

  • OpenAPI-3.1 als Single Source of Truth
    Spec eingecheckt. SDKs werden bei jedem Release neu generiert.
  • Typisierte Fehlerantworten
    Rate-Limit, Validierung, Konflikt - alles typisiert, nie per String abgefangen.
  • Idempotenz-Keys
    Header-basiert auf jedem Schreib-Endpunkt, beim Retry wiederholt.
  • Eingebaute Retries
    Exponentieller Backoff mit sprachspezifischer Retry-After-Beachtung.
Alle vier 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 "elido"
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)

gRPC-Vertrag

Dieselbe Oberfläche in Protobuf - für Service-Mesh-Native.

Unsere API bedient sowohl REST als auch gRPC aus denselben Handlern. Wenn Ihre Plattform nativ Proto spricht (Envoy, Istio, Linkerd, Connect-Go), überspringen Sie die JSON-Schicht. Die .proto-Dateien sind veröffentlicht; generieren Sie Clients in jeder Sprache, die buf oder protoc unterstützt.

link_service.proto
buf · v1
1syntax = "proto3";
2 
3package elido.api.v1;
4 
5option java_multiple_files = true;
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.

Was Sie out of the box erhalten

  • REST + gRPC: wählen Sie die Oberfläche, die Ihr Service-Mesh bevorzugt
  • OpenTelemetry-Spans für jeden Redirect und jeden API-Aufruf
  • Vier SDKs: TypeScript, Go, Python, Ruby
  • Self-Hosting per Vertrag (Enterprise)
  • Webhook-Firehose mit HMAC-SHA256-Signierung
  • Prometheus-/metrics-Endpunkt auf jedem 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 die Kafka-kompatible 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 Elido MCP Server 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 Server ist noch nicht öffentlich veröffentlicht: öffentliche Veröffentlichung in Kürze; kontaktiere den Support für frühen Zugang.

Self-Hosting
05

Self-Hosting per Vertrag (Enterprise)

Ein Helm-Chart für Kubernetes ist im Repository vorhanden. Lizenzbedingungen und das unterstützte Self-Hosting-Modell werden vertraglich festgelegt; wenden Sie sich an [email protected], bevor Sie auf Self-Hosting setzen.

Stack, mit dem Sie arbeiten

  • TypeScript SDK
  • Python SDK
  • Go SDK
  • Webhook Firehose
  • OpenAPI 3.1 Spezifikation

Was Sie messen werden

p50 Weiterleitungs-Latenz
5 ms Cache HIT
API Uptime SLA
99.95% auf Business

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.

FunktionElidoBitly 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 und 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 ServerOffizieller MCP-Server, 30s InstallationNicht verfügbarDu baust es selbst
Self-HostingPer Vertrag (Enterprise)Nicht 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.

Gibt es eine Self-Host-Option?

Ein Helm-Chart für Kubernetes ist im Repository vorhanden. Lizenzbedingungen und das unterstützte Self-Hosting-Modell werden vertraglich festgelegt; wenden Sie sich an [email protected], bevor Sie auf Self-Hosting setzen.

Wie konsumiere ich Click-Events ohne Polling?

Zwei Optionen: Webhooks (HTTPS, HMAC-signiert, At-Least-Once) oder die Kafka-kompatible 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. 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.