← Elige el enfoque que se adapte a tu equipo
Para desarrolladores

Una plataforma de enlaces con una API REST pura.

Mides la latencia, las tasas de error y el tiempo hasta MTTR. Elido te ofrece REST + gRPC, SDKs en cuatro lenguajes (TypeScript, Go, Python, Ruby), spans de OpenTelemetry en cada redirección y autoalojamiento por contrato (Enterprise) si el SaaS no es la forma adecuada.

  • REST + gRPC: elige la interfaz que prefiera tu service mesh
  • Trazas OpenTelemetry en cada redireccionamiento y cada llamada a la API
  • Cuatro SDK: TypeScript, Go, Python, Ruby
  • Autoalojamiento por contrato (Enterprise)
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)
MCP
Servidor MCP oficial

Observabilidad - integrada, no añadida

Cada redireccionamiento emite una traza OpenTelemetry. Cada traza llega a tu collector.

El servicio de edge está instrumentado de extremo a extremo con OTel. Apunta tu collector OTLP al nivel de redireccionamiento y obtienes la cascada completa - búsqueda en caché, evaluación de reglas, respuesta y la publicación asíncrona del evento de clic - sin escribir ni una sola línea de instrumentación tú mismo.

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

La misma llamada canónica. Seis idiomas. Todos generados desde una única especificación.

Cada SDK se genera desde la misma especificación OpenAPI 3.1. ¿Se añadió un nuevo endpoint en el servidor? Ejecuta el generador, publica los SDKs, listo. Sin cliente mantenido a mano que diverge de la API. Las claves de idempotencia, los reintentos con backoff exponencial y las respuestas de error tipadas se presentan de forma coherente en los seis idiomas.

  • OpenAPI 3.1 como fuente de verdad
    Especificación versionada. SDKs regenerados en cada publicación.
  • Respuestas de error tipadas
    Límite de tasa, validación, conflicto - todos tipados, nunca capturados como string.
  • Claves de idempotencia
    Basadas en cabecera en cada endpoint de escritura, reproducidas en el reintento.
  • Reintentos integrados
    Backoff exponencial con Retry-After respetado por idioma.
Los cuatro SDK →
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 "elido"
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)

Contrato gRPC

La misma interfaz en protobuf - para los nativos del service mesh.

Nuestra API sirve tanto REST como gRPC desde los mismos handlers. Si tu plataforma habla proto de forma nativa (Envoy, Istio, Linkerd, Connect-Go), omite la capa JSON. Los archivos .proto están publicados; genera clientes en cualquier idioma que buf o protoc soporten.

link_service.proto
buf · v1
1syntax = "proto3";
2 
3package elido.api.v1;
4 
5option java_multiple_files = true;
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.

Lo que obtienes desde el primer momento

  • REST + gRPC: elige la interfaz que prefiera tu service mesh
  • Trazas OpenTelemetry en cada redireccionamiento y cada llamada a la API
  • Cuatro SDK: TypeScript, Go, Python, Ruby
  • Autoalojamiento por contrato (Enterprise)
  • Firehose de webhooks con firma HMAC-SHA256
  • Endpoint Prometheus /metrics en cada servicio

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 compatible con Kafka 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 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 servidor aún no está publicado: el lanzamiento público llegará pronto; contacta con soporte para acceso anticipado.

Autoalojamiento
05

Autoalojamiento por contrato (Enterprise)

Existe un chart de Helm para Kubernetes en el repositorio. Las condiciones de licencia y el modelo de autoalojamiento admitido se fijan por contrato; contacte con [email protected] antes de depender del autoalojamiento.

Stack con el que trabajarás

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

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

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.

CapacidadElidoAPI 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 y 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 MCPServidor MCP oficial, instalación en 30sNo disponibleTú lo construyes
AutoalojamientoPor contrato (Enterprise)No 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.

¿Hay opción self-host?

Existe un chart de Helm para Kubernetes en el repositorio. Las condiciones de licencia y el modelo de autoalojamiento admitido se fijan por contrato; contacte con [email protected] antes de depender del autoalojamiento.

¿Cómo consumo eventos de clics sin polling?

Dos opciones: webhooks (HTTPS, firmados con HMAC, al menos una vez) o el firehose compatible con Kafka (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. 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.