The shortener you can read the source of.
Vous mesurez la latence, les taux d'erreur et le temps moyen de résolution. Elido est le raccourcisseur dont vous pouvez lire la source.
- 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
Ce que l'API Elido offre réellement
Une spécification OpenAPI et un jeton Bearer sont le minimum syndical. Les fonctionnalités ci-dessous sont ce qui distingue un raccourcisseur sur lequel on peut bâtir d'un outil contre lequel vous vous battrez à 2 heures du matin.
OpenAPI 3.1 avec 44 points de terminaison documentés — aucune surface non documentée
Chaque point de terminaison en production est décrit dans la spécification OpenAPI 3.1. Pas de routes fantômes, pas de paramètres non documentés oubliés par l'équipe de documentation. La spécification est intégrée au dépôt et versionnée aux côtés de l'API ; les changements de rupture suivent SemVer et bénéficient d'une fenêtre de dépréciation d'au moins 90 jours. La spécification est rendue de manière interactive avec Scalar dans la documentation — collez votre clé API et testez les appels sans quitter le navigateur. Trois SDK (TypeScript, Python, Go) sont générés à partir de la même spécification à chaque version, ils ne peuvent donc pas diverger de ce que le serveur accepte réellement. Les méthodes des SDK acceptent des objets de requête typés et renvoient des objets de réponse typés ; les erreurs sont typées, pas simplement capturées comme des chaînes. Les clés d'idempotence sont prises en charge sur les points de terminaison d'écriture — passez un en-tête `Idempotency-Key` et la réponse est rejouée en cas de nouvelle tentative sans création de doublon.
Slugs déterministes, création en masse et idempotence pour les pipelines CI
POST /v1/workspaces/{ws}/links accepte un champ slug — vous obtenez le slug demandé ou une erreur de conflit avec l'ID du lien existant pour que votre pipeline puisse décider quoi faire. La création en masse (POST .../links/bulk) accepte jusqu'à 100 spécifications de liens par appel ; la réponse inclut un résultat par ligne d'entrée avec soit un lien créé, soit une erreur, afin que les échecs partiels ne soient pas masqués. Les deux points de terminaison acceptent des clés d'idempotence : soumettez à nouveau la même requête avec la même clé et vous obtiendrez la même réponse, sans doublons de lignes. C'est le modèle pour les pipelines CI/CD qui génèrent des liens courts lors du déploiement — déterministe, sûr à rejouer, cohérent entre les environnements. L'espace de noms des slugs est par domaine personnalisé : le même slug sur deux domaines différents correspond à deux liens différents, pas à un conflit.
Webhooks signés par HMAC avec tentative automatique et file d'attente de messages non distribués
Chaque événement d'espace de travail (lien créé, lien cliqué, lien supprimé, entrée d'audit, conversion attribuée) est disponible via un webhook. Les charges utiles sont signées avec HMAC-SHA256 à l'aide d'un secret rotatif ; la clé de signature est distincte de votre clé API afin que la rotation de l'une n'invalide pas l'autre. Sémantique de livraison : au moins une fois, avec un backoff exponentiel (1s, 5s, 30s, 5m, 30m) et une fenêtre de tentative configurable (24h par défaut). Les événements qui épuisent les tentatives atterrissent dans une file d'attente de messages non distribués (DLQ) visible dans le tableau de bord ; vous pouvez les rejouer à partir de là. Pour les pipelines d'événements à haut volume, le firehose Kafka/Redpanda contourne entièrement la livraison HTTP — consommez les événements de clic et les journaux d'audit directement depuis le flux. Le firehose est une fonctionnalité Business ; la livraison par webhook est disponible sur Pro et supérieur.
Serveur Model Context Protocol : les outils Elido dans n'importe quel client MCP
Le serveur Elido MCP open-source (licence MIT) expose les points de terminaison de liens, QR et analytics en tant qu'outils MCP typés. L'installation prend 30 secondes : ajoutez le bloc serveur à votre configuration Claude Desktop ou Cursor, définissez ELIDO_API_KEY, redémarrez. Le catalogue d'outils est auto-découvert à partir du serveur — pas de définitions d'outils écrites à la main qui dérivent. La lecture seule est la portée par défaut ; les opérations d'écriture nécessitent une autorisation explicite dans les paramètres de l'espace de travail. Chaque appel d'outil apparaît dans le journal d'audit de l'espace de travail avec la clé d'appel et les arguments, de sorte que les mutations pilotées par agent sont traçables. Le serveur communique via stdio et SSE ; il applique les mêmes limites de débit et codes d'erreur que l'API REST, y compris Retry-After sur 429 pour que votre agent puisse ralentir proprement. La source est sur GitHub ; les forks courants ajoutent des outils spécifiques à l'espace de travail ou un enrichissement de métadonnées sans avoir besoin qu'Elido fusionne en amont.
Chart Helm (Apache 2.0) : exécutez le niveau de redirection dans votre propre VPC
Le niveau de redirection (service edge-redirect) est le seul composant sur le chemin critique de chaque redirection. C'est un binaire Go unique — aucune dépendance d'exécution au-delà de Redis pour le cache L2. Le chart Helm est livré avec des paramètres par défaut sains pour l'autoscaling horizontal de pods Kubernetes ; il s'adapte en fonction du CPU et du taux de requêtes. La configuration se fait par variables d'environnement ; le chart inclut un fichier values.yaml avec des valeurs par défaut saines et une liste documentée de chaque variable. Le reste de la pile (api-core, tableau de bord) peut rester sur le SaaS géré par Elido — vous n'avez pas besoin de tout auto-héberger. Le découpage courant est : niveau de redirection auto-hébergé dans votre VPC (latence plus faible pour vos utilisateurs, pas de facturation de sortie), tableau de bord et analytics sur le cloud d'Elido. Utilisez votre propre KMS pour le chiffrement au repos du cache Redis local si votre posture de sécurité l'exige. Comparé à Bitly (pas d'option d'auto-hébergement) et à la création d'un raccourcisseur personnalisé, l'option du chart Helm vous offre les performances de redirection et la surface d'API gérée sans repartir de zéro.
Stack you'll touch
- SDK TypeScript
- SDK Python
- SDK Go
- Flux de webhooks
- Spécification OpenAPI 3.1
- Chart Helm auto-hébergé
Ce que vous allez mesurer
- Latence de redirection p50
- 5 ms cache HIT
- SLA de disponibilité API
- 99,95 % sur Business
- RTO auto-hébergé
- <1 heure
Les équipes d'ingénierie qui bâtissent sur Elido
Les noms sont des espaces réservés pour le moment — les noms réels des clients seront affichés au fur et à mesure de la publication des études de cas.
“Nous auto-hébergeons le niveau de redirection dans notre propre cluster Kubernetes et utilisons l'API gérée pour tout le reste. La latence de redirection p50 est passée de 45 ms à 6 ms après avoir déplacé le service edge dans la même région que nos utilisateurs. Le chart Helm était suffisamment clair pour que nous puissions déployer sans consulter le support.”
“Le serveur MCP a été le facteur décisif. Notre équipe travaille dans Cursor toute la journée ; pouvoir créer des liens courts tagués pour les notes de mise à jour depuis l'IDE sans quitter le flux de travail est le genre de gain de DX qui fait vraiment la différence.”
“Les clés d'idempotence sur la création en masse nous permettent de générer des liens courts en CI sans paranoïa quant aux doublons lors des tentatives. Le SDK Go typé signifie que notre code de pipeline compile ou échoue — pas de mauvaises requêtes silencieuses au moment de l'exécution.”
API Elido vs API Bitly vs construire votre propre raccourcisseur
Deux options externes et l'alternative de construction interne. Honnête sur les points où l'API de Bitly est plus mature et où un raccourcisseur personnalisé gagne en contrôle.
| Capability | Elido | API Bitly | Raccourcisseur personnalisé |
|---|---|---|---|
| Format de spécification API | OpenAPI 3.1, intégré au dépôt | Documentation personnalisée v4 (pas OpenAPI) | Ce que vous écrivez |
| SDK natifs | TypeScript, Python, Go — générés à partir de la spécification | JavaScript, Python, Ruby, Java | Vous les construisez |
| Clés d'idempotence sur les écritures | Oui — basées sur l'en-tête, tous les points de terminaison d'écriture | Non documenté | Vous l'implémentez |
| Création en masse | 100 par appel, échec partiel par ligne | Aucun point de terminaison en masse natif documenté | Votre schéma, vos règles |
| Livraison de webhook | Au moins une fois, HMAC-SHA256, DLQ | Disponible sur Enterprise | Vous le construisez |
| Serveur MCP | Open-source MIT, installation en 30s | Non disponible | Vous le construisez |
| Auto-hébergement du niveau de redirection | Chart Helm Apache 2.0 | Non disponible | Contrôle total, coût total |
| Latence de redirection p50 | 5 ms cache HIT | Comparable (servi à l'edge) | Dépend de votre infrastructure |
Questions des développeurs
Où se trouve la spécification OpenAPI ?
Sur /docs/api-reference — Scalar la rend de manière interactive. Le YAML brut est sur /openapi.yaml. C'est la même spécification que celle utilisée pour générer les SDK, pas un document maintenu séparément.
Comment obtenir un slug déterministe en CI ?
Passez `slug` dans le corps de la requête. Si le slug est déjà pris par un lien différent, l'API renvoie 409 avec l'ID du lien en conflit. S'il est pris par la même URL de destination (re-création idempotente), elle renvoie le lien existant. Utilisez l'en-tête Idempotency-Key pour sécuriser les tentatives.
Que comprend le chart Helm pour l'auto-hébergement ?
Le service edge-redirect (binaire Go), la configuration Redis, les paramètres HPA et un fichier values.yaml avec toutes les variables de configuration documentées. Il n'inclut pas api-core ni le tableau de bord — ceux-ci peuvent rester sur le SaaS d'Elido. Licence Apache 2.0 ; pas de CLA requis pour les forks.
Comment consommer les événements de clic sans polling ?
Deux options : les webhooks (HTTPS, signés HMAC, au moins une fois) ou le firehose Kafka/Redpanda (consommateur direct, niveau Business). Les webhooks conviennent parfaitement pour l'audit et l'alerte ; le firehose est la solution adaptée aux pipelines d'événements à haut volume où la surcharge de livraison HTTP par événement est critique.
Quelle est la limite de débit ?
100 requêtes/sec en continu, 200 en rafale par clé API, avec une erreur 429 et un en-tête Retry-After. Les points de terminaison d'écriture sont comptés séparément des lectures. Le serveur MCP transmet l'erreur 429 comme une erreur d'outil ; les SDK exposent la valeur Retry-After comme un champ typé dans l'erreur de limite de débit.
Puis-je utiliser le serveur MCP dans l'automatisation de production, pas seulement de manière interactive ?
Oui — le serveur MCP est un processus stdio ou SSE standard. Vous pouvez l'invoquer depuis un script, une étape CI ou un pipeline d'agent. Lecture seule par défaut ; la portée d'écriture nécessite un paramètre explicite dans l'espace de travail. Chaque appel est audité.
Quelle politique de changement de rupture utilisez-vous ?
SemVer sur le préfixe de version de l'API (/v1/, /v2/). Les changements de rupture bénéficient d'une fenêtre de dépréciation de 90 jours avec les deux versions actives simultanément. Les ajouts non disruptifs (nouveaux champs, nouveaux points de terminaison) se font sans changement de version. Le journal des modifications sur /changelog documente chaque changement avec le point de terminaison concerné.
Existe-t-il un mode de développement local sans interroger l'API réelle ?
Les SDK TypeScript et Python acceptent une surcharge de baseUrl pointant vers votre propre instance — utile pour l'auto-hébergement. Il n'y a pas encore de serveur de simulation officiel ; pour les tests locaux, le modèle est d'utiliser un espace de travail de test avec une clé API séparée, pas un mock. C'est sur la feuille de route.
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.
Pas sûr de l'angle qui convient ?
La plupart des équipes commencent par un et évoluent vers les quatre. Notre équipe commerciale peut examiner votre pile spécifique en 20 minutes.