Elido
Elige el enfoque que se adapte a tu equipo
For developers

The shortener you can read the source of.

Mides la latencia, las tasas de error y el tiempo hasta MTTR. Elido es el acortador del que puedes leer el código fuente.

  • 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
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
Formato de especificación
3
SDKs oficiales
5 ms
Redirección p50 (cache HIT)
Apache 2.0
Licencia de auto-hospedaje

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.

Trace · 7f3a91 · GET / → 302
5 spans · 5.2 ms wall
edge.redirect
fasthttp · server
4.8 ms
cache.lookup (L1 → L2)
in-process LRU + Redis
0.6 ms
rule.evaluate
smart-link first-match
0.3 ms
response.write
302 + click_id header
1.0 ms
click.publish (async)
Redpanda · fire-and-forget
0.4 ms
Wall time
5.2 ms
Cache
L1 hit
Exporter
OTLP/gRPC

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 truth
    Spec checked in. SDKs regenerated on every release.
  • Typed error responses
    Rate-limit, validation, conflict — all typed, never stringly-caught.
  • Idempotency keys
    Header-based on every write endpoint, replayed on retry.
  • Built-in retries
    Exponential backoff with Retry-After honoured per language.
All 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)
sdk-ts@2.4 · sdk-go@2.4 · sdk-py@2.4 in sync

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.

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.

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

Lo que la API de Elido ofrece realmente

Una especificación OpenAPI y un token Bearer son lo básico. Las características a continuación son las que distinguen a un acortador sobre el cual puedes construir de uno con el que estarás luchando a las 2 AM.

REST predecible
01

OpenAPI 3.1 con 44 endpoints documentados — sin superficies no documentadas

Cada endpoint en producción está descrito en la especificación OpenAPI 3.1. Sin rutas ocultas, ni parámetros no documentados que el equipo de documentación olvidó. La especificación se incluye en el repositorio y se versiona junto con la API; los cambios disruptivos siguen SemVer y cuentan con un periodo de depreciación de al menos 90 días. La especificación se renderiza interactivamente con Scalar en la documentación — pega tu API key y prueba llamadas sin salir del navegador. Tres SDKs oficiales (TypeScript, Python, Go) se generan desde la misma especificación en cada lanzamiento, por lo que no pueden diferir de lo que el servidor realmente acepta. Los métodos de los SDKs aceptan objetos de solicitud tipados y devuelven objetos de respuesta tipados; los errores están tipados, no se capturan como simples cadenas. Las claves de idempotencia son compatibles en los endpoints de escritura — pasa un encabezado `Idempotency-Key` y la respuesta se repite al reintentar sin crear un duplicado.

Control programático de slugs
02

Slugs deterministas, creación masiva e idempotencia para pipelines de CI

POST /v1/workspaces/{ws}/links acepta un campo slug — obtienes el slug que solicitaste, o un error de conflicto con el ID del enlace existente para que tu pipeline pueda decidir qué hacer. La creación masiva (POST .../links/bulk) acepta hasta 100 especificaciones de enlaces por llamada; la respuesta incluye un resultado por fila de entrada con un enlace creado o un error, para que los fallos parciales no se oculten. Ambos endpoints aceptan claves de idempotencia: vuelve a enviar la misma solicitud con la misma clave y obtendrás la misma respuesta, sin filas duplicadas. Este es el patrón para pipelines de CI/CD que generan enlaces cortos al desplegar — determinista, seguro de reintentar, consistente en todos los entornos. El espacio de nombres de los slugs es por dominio personalizado: el mismo slug en dos dominios diferentes son dos enlaces diferentes, no un conflicto.

Webhooks y firehose
03

Webhooks firmados con HMAC con reintento automático y una dead-letter queue

Cada evento del espacio de trabajo (enlace creado, enlace clickeado, enlace eliminado, entrada de auditoría, conversión atribuida) está disponible como un webhook. Los payloads están firmados con HMAC-SHA256 utilizando un secreto rotable; la clave de firma es independiente de tu API key para que la rotación de una no invalide la otra. Semántica de entrega: al menos una vez, con backoff exponencial (1s, 5s, 30s, 5m, 30m) y una ventana de reintento configurable (por defecto 24h). Los eventos que agotan los reintentos terminan en una dead-letter queue visible en el dashboard; puedes retransmitirlos desde allí. Para pipelines de eventos de alto volumen, el firehose de Kafka/Redpanda omite la entrega por HTTP por completo — consume eventos de clics y registros de auditoría directamente desde el flujo. El firehose es una característica de Business; la entrega de webhooks está disponible en Pro y superiores.

Protocolo MCP
04

Servidor Model Context Protocol: herramientas de Elido en cualquier cliente MCP

El servidor MCP de Elido de código abierto (licencia MIT) expone los endpoints de enlaces, QR y analíticas como herramientas MCP tipadas. La instalación toma 30 segundos: añade el bloque del servidor a tu configuración de Claude Desktop o Cursor, establece ELIDO_API_KEY y reinicia. El catálogo de herramientas se auto-descubre desde el servidor — sin definiciones de herramientas escritas a mano que se desincronicen. El acceso de solo lectura es el alcance predeterminado; las operaciones de escritura requieren una concesión explícita en la configuración del espacio de trabajo. Cada llamada a una herramienta aparece en el registro de auditoría del espacio de trabajo con la clave de llamada y los argumentos, por lo que las mutaciones impulsadas por agentes son trazables. El servidor utiliza stdio y SSE; aplica los mismos límites de tasa y códigos de error que la API REST, incluyendo Retry-After en 429 para que tu agente pueda retroceder limpiamente. El código fuente está en GitHub; los forks comunes añaden herramientas específicas del espacio de trabajo o enriquecimiento de metadatos sin necesidad de que Elido los integre.

Auto-hospedaje
05

Helm chart (Apache 2.0): ejecuta la capa de redirección en tu propia VPC

La capa de redirección (servicio edge-redirect) es el único componente en la ruta crítica de cada redirección. Es un binario único en Go — sin dependencias de tiempo de ejecución más allá de Redis para la caché L2. El Helm chart se entrega con configuraciones predeterminadas lógicas para el autoescalado horizontal de pods de Kubernetes; escala según el uso de CPU y la tasa de solicitudes. La configuración se realiza mediante variables de entorno; el chart incluye un archivo values.yaml con valores predeterminados lógicos y una lista documentada de cada variable. El resto del stack (api-core, dashboard) puede permanecer en el SaaS gestionado por Elido — no tienes que auto-hospedarlo todo. La división común es: capa de redirección auto-hospedada en tu VPC (menor latencia para tus usuarios, sin facturación por salida de datos), dashboard y analíticas en la nube de Elido. Trae tu propio KMS para el cifrado en reposo de la caché local de Redis si tu postura de seguridad lo requiere. En comparación con Bitly (sin opción de auto-hospedaje) y la construcción de un acortador personalizado, la opción del Helm chart te brinda el rendimiento de redirección y la superficie de API gestionada sin empezar desde cero.

Stack you'll touch

  • SDK de TypeScript
  • SDK de Python
  • SDK de Go
  • Flujo de webhooks
  • Especificación OpenAPI 3.1
  • Helm chart autoalojado

Qué vas a medir

Latencia p50 de redireccionamiento
5 ms HIT de caché
SLA de tiempo de actividad de la API
99.95% en Business
RTO de autoalojamiento
<1 hora

Equipos de ingeniería construyendo sobre esto

Los nombres son marcadores de posición por ahora — los nombres de clientes reales aparecerán aquí a medida que se publiquen los casos de estudio.

Auto-hospedamos la capa de redirección en nuestro propio clúster de Kubernetes y usamos la API gestionada para todo lo demás. La latencia p50 de redirección bajó de 45ms a 6ms después de mover el servicio edge a la misma región que nuestros usuarios. El Helm chart fue lo suficientemente legible como para que hiciéramos el despliegue sin consultar a soporte.

E
Equipo de ingeniería de plataforma, SaaS de mercado medio, Vilna
Staff Engineer

El servidor MCP fue el factor decisivo. Nuestro equipo trabaja en Cursor todo el día; poder crear enlaces cortos etiquetados para notas de lanzamiento desde dentro del IDE sin salir del flujo de trabajo es el tipo de mejora en DX que realmente perdura.

E
Equipo de DevRel, empresa de herramientas para desarrolladores, Berlín
Head of Developer Relations

Las claves de idempotencia en la creación masiva nos permiten generar enlaces cortos en CI sin la paranoia de que los reintentos creen duplicados. El SDK de Go tipado significa que nuestro código de pipeline compila o falla — sin solicitudes incorrectas silenciosas en tiempo de ejecución.

E
Equipo de plataforma backend, fintech, Ámsterdam
Senior Backend Engineer

API de Elido vs API de Bitly vs construir tu propio acortador

Dos opciones externas y la alternativa de construirlo tú mismo. Honestidad sobre dónde la API de Bitly es más madura y dónde un acortador personalizado gana en control.

CapabilityElidoAPI de BitlyAcortador personalizado
Formato de especificación de APIOpenAPI 3.1, incluido en el repositorioDocumentación v4 personalizada (no OpenAPI)Lo que tú escribas
SDKs oficialesTypeScript, Python, Go — generados desde la especificaciónJavaScript, Python, Ruby, JavaTú los construyes
Claves de idempotencia en escriturasSí — basadas en encabezados, todos los endpoints de escrituraNo documentadoTú lo implementas
Creación masiva100 por llamada, fallo parcial por filaSin endpoint nativo masivo documentadoTu esquema, tus reglas
Entrega de webhooksAl menos una vez, HMAC-SHA256, dead-letter queueDisponible en EnterpriseTú lo construyes
Servidor MCPCódigo abierto MIT, instalación en 30sNo disponibleTú lo construyes
Auto-hospedar capa de redirecciónHelm chart Apache 2.0No disponibleControl total, coste total
Latencia p50 de redirección5 ms cache HITComparable (servido desde el edge)Depende de tu infraestructura

Preguntas de desarrolladores

¿Dónde está la especificación OpenAPI?

En /docs/api-reference — Scalar la renderiza de forma interactiva. El YAML sin procesar está en /openapi.yaml. Es la misma especificación desde la que se generan los SDKs, no un documento mantenido por separado.

¿Cómo obtengo un slug determinista en CI?

Pasa `slug` en el cuerpo de la solicitud. Si el slug ya está ocupado por un enlace diferente, la API devuelve 409 con el ID del enlace en conflicto. Si está ocupado por la misma URL de destino (recreación idempotente), devuelve el enlace existente. Usa el encabezado Idempotency-Key para que los reintentos sean seguros.

¿Qué incluye el Helm chart de auto-hospedaje?

El servicio edge-redirect (binario Go), configuración de Redis, ajustes de HPA y un archivo values.yaml con todas las variables de configuración documentadas. No incluye api-core ni el dashboard — esos pueden permanecer en el SaaS de Elido. Licencia Apache 2.0; no se requiere CLA para forks.

¿Cómo consumo eventos de clics sin polling?

Dos opciones: webhooks (HTTPS, firmados con HMAC, al menos una vez) o el firehose de Kafka/Redpanda (consumidor directo, nivel Business). Los webhooks son adecuados para auditoría y alertas; el firehose es el camino correcto para pipelines de eventos de alto volumen donde la sobrecarga de entrega HTTP por evento importa.

¿Cuál es el límite de tasa?

100 req/seg sostenidos, ráfaga de 200 por API key, con un 429 y encabezado Retry-After. Los endpoints de escritura cuentan por separado de los de lectura. El servidor MCP pasa el 429 como un error de herramienta; los SDKs exponen el valor Retry-After como un campo tipado en el error de límite de tasa.

¿Puedo usar el servidor MCP en automatización de producción, no solo de forma interactiva?

Sí — el servidor MCP es un proceso estándar stdio o SSE. Puedes invocarlo desde un script, un paso de CI o un pipeline de agentes. Solo lectura por defecto; el alcance de escritura requiere una configuración explícita del espacio de trabajo. Cada llamada es auditada.

¿Qué política de cambios disruptivos utilizan?

SemVer en el prefijo de versión de la API (/v1/, /v2/). Los cambios disruptivos tienen una ventana de depreciación de 90 días con ambas versiones activas simultáneamente. Las adiciones no disruptivas (nuevos campos, nuevos endpoints) ocurren sin un cambio de versión. El registro de cambios en /changelog documenta cada cambio con el endpoint afectado.

¿Existe un modo de desarrollo local sin consultar la API real?

Los SDKs de TypeScript y Python aceptan una anulación de baseUrl que apunta a tu propia instancia — útil para quienes optan por el auto-hospedaje. Todavía no hay un servidor de simulación (mock) oficial; para pruebas locales, el patrón es un espacio de trabajo de prueba con una API key independiente, no un simulacro. Está en el mapa de ruta.

¿No estás seguro de qué enfoque se adapta?

La mayoría de los equipos comienzan como uno y crecen hasta abarcar los cuatro. Nuestro equipo de ventas puede revisar tu stack específico en 20 minutos.

Para desarrolladores — REST puro. Tres SDKs. Un Helm chart autoalojado. · Elido