Kies de invalshoek die bij jouw team past
Voor developers

De shortener waarvan je de broncode kunt lezen.

Je meet latency, foutpercentages en time-to-MTTR. Elido is de shortener waarvan je de broncode kunt lezen - REST + gRPC, SDK's in vier talen (TypeScript, Go, Python, Ruby), OpenTelemetry-spans bij elke redirect, en een Apache 2.0 self-host-pad voor de dag dat je besluit dat SaaS niet de juiste vorm is.

  • REST + gRPC: kies het oppervlak dat jouw service mesh verkiest
  • OpenTelemetry-spans bij elke redirect, elke API-aanroep
  • Zes SDK's: TypeScript, Go, Python, Ruby, PHP, .NET
  • Apache 2.0 self-host met een Helm-chart in één commando
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
Specformaat
3
Eigen SDK's
5 ms
p50-redirect (cache HIT)
Apache 2.0
Self-host-licentie

Observability - ingebouwd, niet achteraf toegevoegd

Elke redirect zendt een OpenTelemetry-span uit. Elke span komt terecht in jouw collector.

De edge-service is end-to-end geïnstrumenteerd met OTel. Richt je OTLP-collector op de redirect-laag en je krijgt de volledige waterfall - cache-lookup, regelevaluatie, response en de asynchrone click-event-publicatie - zonder zelf ook maar één regel instrumentatie te schrijven.

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

SDK's

Dezelfde canonieke aanroep. Zes talen. Allemaal gegenereerd uit één spec.

Elke SDK wordt uitgebracht vanuit dezelfde OpenAPI 3.1-spec. Nieuw endpoint toegevoegd op de server? Draai de generator, breng de SDK's uit, klaar. Geen handmatig onderhouden client die afwijkt van de API. Idempotency-keys, retries met exponentiële backoff en getypeerde foutresponses worden consistent aangeboden in alle zes talen.

  • OpenAPI 3.1 als single source of truth
    Spec ingecheckt. SDK's opnieuw gegenereerd bij elke release.
  • Getypeerde foutresponses
    Rate-limit, validatie, conflict - allemaal getypeerd, nooit stringly-caught.
  • Idempotency-keys
    Op basis van headers bij elk write-endpoint, herhaald bij een retry.
  • Ingebouwde retries
    Exponentiële backoff waarbij Retry-After in elke taal wordt gerespecteerd.
Alle zes SDK's →
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)

gRPC-contract

Hetzelfde oppervlak in protobuf - voor wie thuis is in service mesh.

De api-core-service bedient zowel REST als gRPC vanuit dezelfde handlers. Als jouw platform van huis uit proto spreekt (Envoy, Istio, Linkerd, Connect-Go), sla dan de JSON-laag over. De .proto-bestanden zijn gepubliceerd; genereer clients in elke taal die buf of protoc ondersteunt.

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.

Wat je out of the box krijgt

  • REST + gRPC: kies het oppervlak dat jouw service mesh verkiest
  • OpenTelemetry-spans bij elke redirect, elke API-aanroep
  • Zes SDK's: TypeScript, Go, Python, Ruby, PHP, .NET
  • Apache 2.0 self-host met een Helm-chart in één commando
  • Webhook firehose met HMAC-SHA256-ondertekening
  • Prometheus-/metrics-endpoint op elke service

Wat de Elido API daadwerkelijk levert

Een OpenAPI-spec en een Bearer-token zijn basisvoorzieningen. De onderstaande functies maken het verschil tussen een shortener waarop je kunt bouwen en een waar je om 2 uur 's nachts tegen vecht.

Voorspelbare REST
01

OpenAPI 3.1 met 44 gedocumenteerde endpoints - geen ongedocumenteerd oppervlak

Elk endpoint in productie is beschreven in de OpenAPI 3.1-spec. Geen schaduwroutes, geen ongedocumenteerde parameters die het docs-team is vergeten. De spec is ingecheckt in de repo en wordt samen met de API geversioneerd; breaking changes volgen SemVer en krijgen een deprecation-venster van minstens 90 dagen. De spec wordt interactief weergegeven met Scalar in de docs - plak je API-key en probeer aanroepen zonder de browser te verlaten. Drie automatisch gegenereerde SDK's (TypeScript, Python, Go) worden bij elke release uit dezelfde spec gegenereerd, zodat ze nooit kunnen afwijken van wat de server daadwerkelijk accepteert. De SDK-methoden accepteren getypeerde requestobjecten en retourneren getypeerde responseobjecten; fouten zijn getypeerd, niet stringly-caught. Idempotency-keys worden ondersteund op write-endpoints - geef een `Idempotency-Key`-header mee en de response wordt bij een retry herhaald zonder dubbele aanmaak.

Programmatische controle over slugs
02

Deterministische slugs, bulk-aanmaak en idempotency voor CI-pipelines

POST /v1/workspaces/{ws}/links accepteert een slug-veld - je krijgt de slug die je hebt aangevraagd, of een conflictfout met de ID van de bestaande link, zodat jouw pipeline kan beslissen wat er gebeurt. Bulk-aanmaak (POST .../links/bulk) accepteert tot 100 linkspecificaties per aanroep; de response bevat één resultaat per invoerrij, met ofwel een aangemaakte link ofwel een fout, zodat gedeeltelijke mislukkingen niet verborgen blijven. Beide endpoints accepteren idempotency-keys: dien hetzelfde verzoek opnieuw in met dezelfde key en je krijgt dezelfde response, zonder dubbele rijen. Dit is het patroon voor CI/CD-pipelines die bij elke deploy verkorte links aanmaken - deterministisch, veilig om opnieuw te proberen, consistent over omgevingen heen. Slug-naamgeving is per aangepast domein: dezelfde slug op twee verschillende domeinen zijn twee verschillende links, geen conflict.

Webhooks en firehose
03

HMAC-ondertekende webhooks met automatische retry en een dead-letter-queue

Elk workspace-event (link aangemaakt, link geklikt, link verwijderd, audit-item, conversie toegeschreven) is beschikbaar als webhook. Payloads worden ondertekend met HMAC-SHA256 via een roteerbaar secret; de ondertekeningssleutel staat los van je API-key, zodat het roteren van de ene sleutel de andere niet ongeldig maakt. Afleversemantiek: at-least-once, met exponentiële backoff (1s, 5s, 30s, 5m, 30m) en een instelbaar retry-venster (standaard 24u). Events waarvan de retries zijn uitgeput, komen terecht in een dead-letter-queue die zichtbaar is in het dashboard; van daaruit kun je ze opnieuw afspelen. Voor event-pipelines met een hoog volume omzeilt de Kafka-compatibele firehose HTTP-aflevering volledig - consumeer click-events en auditlogs rechtstreeks vanuit de stream. De firehose is een Business-functie; aflevering via webhooks is beschikbaar vanaf Pro.

MCP-protocol
04

Model Context Protocol-server: Elido-tools in elke MCP-client

De open-source Elido MCP-server (MIT-licentie) stelt link-, QR- en analytics-endpoints beschikbaar als getypeerde MCP-tools. Installatie duurt 30 seconden: voeg het serverblok toe aan je Claude Desktop- of Cursor-configuratie, stel ELIDO_API_KEY in, herstart. De toolcatalogus wordt automatisch ontdekt vanaf de server - geen handgeschreven tooldefinities die uit de pas gaan lopen. Alleen-lezen is de standaardscope; schrijfbewerkingen vereisen expliciete toestemming in de workspace-instellingen. Elke tool-aanroep verschijnt in het audit-log van de workspace met de aanroepende key en argumenten, zodat door agents aangestuurde mutaties traceerbaar zijn. De server spreekt stdio en SSE; hij geeft dezelfde rate limits en foutcodes door als de REST API, inclusief Retry-After bij 429, zodat je agent netjes kan terugschakelen. De broncode staat op GitHub; veelvoorkomende forks voegen workspace-specifieke tools of metadata-verrijking toe zonder dat Elido dit upstream hoeft samen te voegen.

Self-host
05

Helm-chart (Apache 2.0): draai de redirect-laag in je eigen VPC

De redirect-laag is het enige onderdeel op het hot path van elke redirect. Het is één zelfstandige binary - geen runtime-afhankelijkheden buiten een in-memory hot cache voor de L2-laag. Het Helm-chart wordt geleverd met verstandige standaardwaarden voor horizontale pod-autoscaling van Kubernetes; het schaalt op CPU en request-rate. Configuratie verloopt via omgevingsvariabelen; het chart bevat een values.yaml met verstandige standaardwaarden en een gedocumenteerde lijst van elke variabele. De rest van de stack (API en dashboard) kan op de door Elido beheerde SaaS blijven draaien - je hoeft niet alles zelf te hosten. De gangbare verdeling is: redirect-laag self-hosted in je eigen VPC (lagere latency naar je gebruikers, geen egress-kosten), dashboard en analytics in de cloud van Elido. Gebruik je eigen KMS voor at-rest-versleuteling van de lokale hot cache als je beveiligingsbeleid dat vereist. Vergeleken met Bitly (geen self-host-optie) en het zelf bouwen van een shortener, geeft de Helm-chart-optie je de redirect-performance en het beheerde API-oppervlak zonder helemaal opnieuw te beginnen.

Stack waarmee je te maken krijgt

  • TypeScript SDK
  • Python SDK
  • Go SDK
  • Webhook firehose
  • OpenAPI 3.1-spec
  • Self-host Helm-chart

Wat je gaat meten

p50-redirectlatency
5 ms bij cache HIT
API-uptime-SLA
99,95% op Business
Self-host-RTO
<1 uur

Engineeringteams die hierop bouwen

Namen zijn voorlopig plaatshouders - echte klantnamen komen hier zodra de casestudy's worden gepubliceerd.

We hosten de redirect-laag zelf in ons eigen Kubernetes-cluster en gebruiken de beheerde API voor al het overige. De p50-redirectlatency daalde van 45ms naar 6ms nadat we de edge-service naar dezelfde regio als onze gebruikers hadden verplaatst. Het Helm-chart was overzichtelijk genoeg dat we konden uitrollen zonder support te raadplegen.

P
Platform-engineeringteam, mid-market SaaS, Vilnius
Staff Engineer

De MCP-server gaf de doorslag. Ons team werkt de hele dag in Cursor; getagde verkorte links kunnen aanmaken voor release notes vanuit de IDE, zonder de workflow te verlaten, is precies het soort DX-winst dat blijft hangen.

D
DevRel-team, ontwikkelaarstoolsbedrijf, Berlijn
Head of Developer Relations

Idempotency-keys bij bulk-aanmaak laten ons verkorte links aanmaken in CI zonder paranoia dat retries dubbels creëren. Dankzij de getypeerde Go-SDK compileert onze pipelinecode óf mislukt hij - geen stille foutieve requests tijdens runtime.

B
Backend-platformteam, fintech, Amsterdam
Senior Backend Engineer

Elido API versus Bitly API versus je eigen shortener bouwen

Twee externe opties en het alternatief om het zelf te bouwen. Eerlijk over waar de API van Bitly volwassener is en waar een aangepaste shortener wint op controle.

MogelijkheidElidoBitly APIEigen shortener
API-specformaatOpenAPI 3.1, ingecheckt in de repoEigen v4-docs (geen OpenAPI)Wat je zelf schrijft
Eigen SDK'sTypeScript, Python, Go - gegenereerd uit de specJavaScript, Python, Ruby, JavaDie bouw je zelf
Idempotency-keys bij writesJa - op basis van headers, alle write-endpointsNiet gedocumenteerdImplementeer je zelf
Bulk-aanmaak100 per aanroep, gedeeltelijke mislukking per rijGeen native bulk-endpoint gedocumenteerdJouw schema, jouw regels
Aflevering van webhooksAt-least-once, HMAC-SHA256, DLQBeschikbaar op EnterpriseBouw je zelf
MCP-serverMIT open-source, installatie in 30sNiet beschikbaarBouw je zelf
Self-host redirect-laagApache 2.0 Helm-chartNiet beschikbaarVolledige controle, volledige kosten
p50-redirectlatency5 ms bij cache HITVergelijkbaar (edge-served)Hangt af van je eigen infrastructuur

Vragen van developers

Waar vind ik de OpenAPI-spec?

Op /docs/api-reference - Scalar geeft deze interactief weer. De ruwe YAML staat op /openapi.yaml. Het is dezelfde spec waaruit de SDK's worden gegenereerd, geen apart bijgehouden document.

Hoe krijg ik een deterministische slug in CI?

Geef `slug` mee in de request body. Als de slug al in gebruik is door een andere link, retourneert de API 409 met de ID van de conflicterende link. Als deze in gebruik is door dezelfde bestemmings-URL (idempotente heraanmaak), wordt de bestaande link geretourneerd. Gebruik de Idempotency-Key-header om retries veilig te maken.

Wat bevat het self-host Helm-chart?

De binary van de redirect-laag, hot-cache-configuratie, HPA-instellingen en een values.yaml met alle configuratievariabelen gedocumenteerd. De API of het dashboard zijn niet inbegrepen - die kunnen op de SaaS van Elido blijven draaien. Apache 2.0-licentie; geen CLA vereist voor forks.

Hoe consumeer ik click-events zonder te pollen?

Twee opties: webhooks (HTTPS, HMAC-ondertekend, at-least-once) of de Kafka-compatibele firehose (directe consumer, Business-tier). Webhooks volstaan prima voor audit en alerting; de firehose is de juiste keuze voor event-pipelines met een hoog volume, waar de HTTP-overhead per event van belang is.

Wat is de rate limit?

100 req/sec continu, 200 in burst per API-key, met een 429 en Retry-After-header. Write-endpoints tellen apart van reads. De MCP-server geeft 429 door als een tool-fout; de SDK's stellen de Retry-After-waarde beschikbaar als getypeerd veld in de rate-limit-fout.

Kan ik de MCP-server gebruiken in productie-automatisering, niet alleen interactief?

Ja - de MCP-server is een standaard stdio- of SSE-proces. Je kunt hem aanroepen vanuit een script, een CI-stap of een agent-pipeline. Standaard alleen-lezen; schrijfscope vereist een expliciete workspace-instelling. Elke aanroep wordt geauditeerd.

Welk beleid voor breaking changes hanteren jullie?

SemVer op het API-versieprefix (/v1/, /v2/). Breaking changes krijgen een deprecation-venster van 90 dagen waarin beide versies gelijktijdig live staan. Niet-breaking toevoegingen (nieuwe velden, nieuwe endpoints) gebeuren zonder versie-verhoging. De changelog op /changelog documenteert elke wijziging met het betreffende endpoint.

Is er een lokale dev-modus zonder de echte API te raken?

De TypeScript- en Python-SDK's accepteren een baseUrl-override die naar je eigen instantie wijst - handig voor self-hosters. Er is nog geen officiële mock-server; voor lokaal testen is het patroon een testworkspace met een aparte API-key, geen mock. Het staat op de roadmap.

Niet zeker welke invalshoek past?

De meeste teams beginnen met één invalshoek en groeien naar alle vier. Ons salesteam neemt in 20 minuten je specifieke stack met je door.