Choisissez l'angle qui convient à votre équipe
Pour les développeurs

Le raccourcisseur dont vous pouvez lire le code source.

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 : choisissez la surface que préfère votre service mesh
  • Spans OpenTelemetry sur chaque redirection, chaque appel API
  • Six SDKs : TypeScript, Go, Python, Ruby, PHP, .NET
  • Auto-hébergement Apache 2.0 avec un chart Helm en une commande
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
Format de spécification
3
SDK natifs
5 ms
Redirection p50 (cache HIT)
Apache 2.0
Licence auto-hébergée

Observabilité - intégrée, pas ajoutée après coup

Chaque redirection émet un span OpenTelemetry. Chaque span arrive dans votre collecteur.

Le service edge est instrumenté de bout en bout avec OTel. Pointez votre collecteur OTLP vers le tier de redirection et vous obtenez la cascade complète - recherche en cache, évaluation de règles, réponse, et la publication asynchrone de l'événement de clic - sans écrire une seule ligne d'instrumentation vous-même.

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

Même appel canonique. Six langages. Tous générés depuis une seule spec.

Chaque SDK est généré depuis la même spec OpenAPI 3.1. Un endpoint ajouté côté serveur ? Lancez le générateur, livrez les SDKs, c'est fait. Pas de client maintenu manuellement qui dérive de l'API. Les clés d'idempotence, les relances avec backoff exponentiel, et les réponses d'erreur typées sont exposées de manière cohérente dans les six langages.

  • Source de vérité OpenAPI 3.1
    Spec versionnée. SDKs régénérés à chaque release.
  • Réponses d'erreur typées
    Rate-limit, validation, conflit - tous typés, jamais capturés comme chaînes.
  • Clés d'idempotence
    Basées sur les en-têtes pour chaque endpoint d'écriture, rejouées lors des relances.
  • Relances intégrées
    Backoff exponentiel avec Retry-After respecté dans chaque langage.
Les 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)

Contrat gRPC

Même surface en protobuf - pour les natifs du service mesh.

Notre API sert REST et gRPC depuis les mêmes handlers. Si votre plateforme parle nativement proto (Envoy, Istio, Linkerd, Connect-Go), passez la couche JSON. Les fichiers .proto sont publiés ; générez des clients dans n'importe quel langage supporté par buf ou protoc.

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.

Ce que vous obtenez d'emblée

  • REST + gRPC : choisissez la surface que préfère votre service mesh
  • Spans OpenTelemetry sur chaque redirection, chaque appel API
  • Six SDKs : TypeScript, Go, Python, Ruby, PHP, .NET
  • Auto-hébergement Apache 2.0 avec un chart Helm en une commande
  • Firehose de webhooks avec signature HMAC-SHA256
  • Endpoint Prometheus /metrics sur chaque 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.

REST prévisible
01

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.

Contrôle programmatique des slugs
02

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 et firehose
03

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 compatible Kafka 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.

Protocole MCP
04

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.

Auto-hébergement
05

Chart Helm (Apache 2.0) : exécutez le niveau de redirection dans votre propre VPC

Le niveau de redirection est le seul composant sur le chemin critique de chaque redirection. C'est un binaire autonome unique - aucune dépendance d'exécution au-delà d'un cache mémoire rapide pour la couche 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 (l'API et le 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 mémoire rapide 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 que vous utiliserez

  • 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.

É
Équipe d'ingénierie de plateforme, SaaS mid-market, Vilnius
Ingénieur Staff

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.

É
Équipe DevRel, entreprise d'outils pour développeurs, Berlin
Responsable des Relations Développeurs

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.

É
Équipe plateforme backend, fintech, Amsterdam
Ingénieur Backend Senior

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.

CapacitéElidoAPI BitlyRaccourcisseur personnalisé
Format de spécification APIOpenAPI 3.1, intégré au dépôtDocumentation personnalisée v4 (pas OpenAPI)Ce que vous écrivez
SDK natifsTypeScript, Python, Go - générés à partir de la spécificationJavaScript, Python, Ruby et JavaVous les construisez
Clés d'idempotence sur les écrituresOui - basées sur l'en-tête, tous les points de terminaison d'écritureNon documentéVous l'implémentez
Création en masse100 par appel, échec partiel par ligneAucun point de terminaison en masse natif documentéVotre schéma, vos règles
Livraison de webhookAu moins une fois, HMAC-SHA256, DLQDisponible sur EnterpriseVous le construisez
Serveur MCPOpen-source MIT, installation en 30sNon disponibleVous le construisez
Auto-hébergement du niveau de redirectionChart Helm Apache 2.0Non disponibleContrôle total, coût total
Latence de redirection p505 ms cache HITComparable (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 binaire du niveau de redirection, la configuration du cache mémoire rapide, les paramètres HPA et un fichier values.yaml avec toutes les variables de configuration documentées. Il n'inclut pas l'API 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 compatible Kafka (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.

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.