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
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 - 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.
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 truthSpec ingecheckt. SDK's opnieuw gegenereerd bij elke release.
- Getypeerde foutresponsesRate-limit, validatie, conflict - allemaal getypeerd, nooit stringly-caught.
- Idempotency-keysOp basis van headers bij elk write-endpoint, herhaald bij een retry.
- Ingebouwde retriesExponentiële backoff waarbij Retry-After in elke taal wordt gerespecteerd.
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
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.
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.
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.
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.
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.
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.
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.
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.”
“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.”
“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.”
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.
| Mogelijkheid | Elido | Bitly API | Eigen shortener |
|---|---|---|---|
| API-specformaat | OpenAPI 3.1, ingecheckt in de repo | Eigen v4-docs (geen OpenAPI) | Wat je zelf schrijft |
| Eigen SDK's | TypeScript, Python, Go - gegenereerd uit de spec | JavaScript, Python, Ruby, Java | Die bouw je zelf |
| Idempotency-keys bij writes | Ja - op basis van headers, alle write-endpoints | Niet gedocumenteerd | Implementeer je zelf |
| Bulk-aanmaak | 100 per aanroep, gedeeltelijke mislukking per rij | Geen native bulk-endpoint gedocumenteerd | Jouw schema, jouw regels |
| Aflevering van webhooks | At-least-once, HMAC-SHA256, DLQ | Beschikbaar op Enterprise | Bouw je zelf |
| MCP-server | MIT open-source, installatie in 30s | Niet beschikbaar | Bouw je zelf |
| Self-host redirect-laag | Apache 2.0 Helm-chart | Niet beschikbaar | Volledige controle, volledige kosten |
| p50-redirectlatency | 5 ms bij cache HIT | Vergelijkbaar (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.
Leeslijst voor developers
OpenAPI 3.1-spec, zes eigen SDK's, en wat elk daarvan biedt.
HMAC-ondertekende events, retrybeleid, dead-letter-queue, Kafka-firehose.
Edge-regel-engine - handig wanneer je routeringslogica niet in je eigen service thuishoort.
Handleidingen, referenties en architectuurnotities - geschreven door het team dat de code uitbrengt.
Interactieve, met Scalar weergegeven OpenAPI-spec, alle 44 endpoints.
Slack, Zapier, Make, n8n, en de broncode van elke connector.
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.