Uma plataforma de links com uma API REST simples.
Você mede latência, taxas de erro e tempo para MTTR. O Elido oferece REST + gRPC, SDKs em quatro linguagens (TypeScript, Go, Python, Ruby), spans de OpenTelemetry em cada redirect e self-host por contrato (Enterprise) se o SaaS não for o formato certo.
- REST + gRPC: escolha a superfície que o seu service mesh prefere
- Spans OpenTelemetry em cada redirecionamento e cada chamada de API
- Quatro SDK: TypeScript, Go, Python, Ruby
- Auto-hospedagem por contrato (Enterprise)
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" }
Observabilidade - integrada, não adicionada à força
Cada redirecionamento emite um span OpenTelemetry. Cada span chega ao seu collector.
O serviço de edge está instrumentado de ponta a ponta com OTel. Aponte o seu collector OTLP para o nível de redirecionamento e obterá o fluxo completo - pesquisa em cache, avaliação de regras, resposta e a publicação assíncrona do evento de clique - sem escrever uma única linha de instrumentação.
SDKs
A mesma chamada canónica. Seis linguagens. Todas geradas a partir de uma especificação.
Cada SDK é gerado a partir da mesma especificação OpenAPI 3.1. Foi adicionado um novo endpoint no servidor? Execute o gerador, lance os SDKs, concluído. Sem clientes mantidos manualmente que divergem da API. Chaves de idempotência, retries com backoff exponencial e respostas de erro com tipos são apresentados de forma consistente nas seis linguagens.
- OpenAPI 3.1 como fonte de verdadeEspecificação em repositório. SDKs regenerados em cada lançamento.
- Respostas de erro com tiposLimite de taxa, validação, conflito - todos tipificados, nunca capturados como string.
- Chaves de idempotênciaBaseadas em cabeçalho em cada endpoint de escrita, reproduzidas no retry.
- Retries integradosBackoff exponencial com Retry-After respeitado por linguagem.
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 "elido"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)
Contrato gRPC
A mesma superfície em protobuf - para usuários nativos de service mesh.
A nossa API serve REST e gRPC a partir dos mesmos handlers. Se a sua plataforma fala proto nativamente (Envoy, Istio, Linkerd, Connect-Go), ignore a camada JSON. Os arquivos .proto estão publicados; gere clientes em qualquer linguagem que o buf ou o protoc suportem.
1syntax = "proto3";23package elido.api.v1;45option java_multiple_files = true;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.
O que recebe de imediato
- REST + gRPC: escolha a superfície que o seu service mesh prefere
- Spans OpenTelemetry em cada redirecionamento e cada chamada de API
- Quatro SDK: TypeScript, Go, Python, Ruby
- Auto-hospedagem por contrato (Enterprise)
- Firehose de webhooks com assinatura HMAC-SHA256
- Endpoint Prometheus /metrics em cada serviço
O que a API do Elido realmente entrega
Uma especificação OpenAPI e um token Bearer são o básico. Os recursos abaixo são o que separa um encurtador que você pode usar para construir de um que você terá que combater às 2 da manhã.
OpenAPI 3.1 com 44 endpoints documentados - sem superfícies não documentadas
Cada endpoint em produção é descrito na especificação OpenAPI 3.1. Sem rotas fantasmas, sem parâmetros não documentados que a equipe de documentação esqueceu. A especificação é incluída no repositório e versionada junto com a API; alterações que quebram a compatibilidade seguem o SemVer e recebem uma janela de depreciação de pelo menos 90 dias. A especificação é renderizada de forma interativa com Scalar na documentação - cole sua chave de API e teste as chamadas sem sair do navegador. Três SDKs gerados automaticamente (TypeScript, Python, Go) são criados a partir da mesma especificação a cada lançamento, para que não haja divergência do que o servidor realmente aceita. Os métodos do SDK aceitam objetos de requisição tipados e retornam objetos de resposta tipados; os erros são tipados, não capturados como strings. Chaves de idempotência são suportadas em endpoints de escrita - envie um cabeçalho `Idempotency-Key` e a resposta será repetida na nova tentativa sem criar uma duplicata.
Slugs determinísticos, criação em lote e idempotência para pipelines de CI
POST /v1/workspaces/{ws}/links aceita um campo slug - você recebe o slug que solicitou ou um erro de conflito com o ID do link existente para que sua pipeline possa decidir o que fazer. A criação em lote (POST .../links/bulk) aceita até 100 especificações de link por chamada; a resposta inclui um resultado por linha de entrada com um link criado ou um erro, para que falhas parciais não fiquem ocultas. Ambos os endpoints aceitam chaves de idempotência: reenvie a mesma requisição com a mesma chave e você receberá a mesma resposta, sem linhas duplicadas. Este é o padrão para pipelines de CI/CD que geram links curtos no deploy - determinístico, seguro para repetir e consistente entre ambientes. O namespacing de slugs é por domínio personalizado: o mesmo slug em dois domínios diferentes representa dois links distintos, não um conflito.
Webhooks assinados com HMAC com retentativa automática e fila de mensagens mortas (DLQ)
Cada evento do workspace (link criado, link clicado, link excluído, entrada de auditoria, conversão atribuída) está disponível como um webhook. As cargas úteis são assinadas com HMAC-SHA256 usando um segredo rotacionável; a chave de assinatura é separada da sua chave de API, portanto, rotacionar uma não invalida a outra. Semântica de entrega: pelo menos uma vez (at-least-once), com backoff exponencial (1s, 5s, 30s, 5m, 30m) e uma janela de retentativa configurável (padrão 24h). Eventos que esgotam as tentativas vão para uma fila de mensagens mortas visível no dashboard; você pode reproduzi-los de lá. Para pipelines de eventos de alto volume, o firehose compatível com Kafka ignora completamente a entrega HTTP - consuma eventos de clique e logs de auditoria diretamente da stream. O firehose é um recurso Business; a entrega de webhooks está disponível no Pro e superior.
Servidor Model Context Protocol: ferramentas do Elido em qualquer cliente MCP
O servidor MCP do Elido expõe endpoints de links, QR e analytics como ferramentas MCP tipadas. A instalação leva 30 segundos: adicione o bloco do servidor à sua configuração do Claude Desktop ou Cursor, defina ELIDO_API_KEY e reinicie. O catálogo de ferramentas é descoberto automaticamente a partir do servidor - sem configurações de ferramentas escritas à mão que divergem da realidade. O escopo padrão é somente leitura; operações de escrita exigem concessão explícita nas configurações do workspace. Cada chamada de ferramenta aparece no log de auditoria do workspace com a chave de chamada e os argumentos, para que as mutações orientadas por agentes sejam rastreáveis. O servidor fala stdio e SSE; ele repassa os mesmos limites de taxa (rate limits) e códigos de erro da API REST, incluindo Retry-After no 429 para que seu agente possa recuar de forma limpa. O servidor ainda não está publicado: o lançamento público chega em breve; entre em contato com o suporte para acesso antecipado.
Auto-hospedagem por contrato (Enterprise)
Existe um chart Helm para Kubernetes no repositório. Os termos de licença e o modelo de self-hosting suportado são definidos por contrato; entre em contato com [email protected] antes de contar com self-hosting.
Stack que você usará
- SDK TypeScript
- SDK Python
- SDK Go
- Firehose de webhooks
- Spec OpenAPI 3.1
O que você vai medir
- Latência de redirect p50
- 5 ms cache HIT
- SLA de uptime da API
- 99.95% em Business
API do Elido vs API do Bitly vs construir seu próprio encurtador
Duas opções externas e a alternativa de construir você mesmo. Honestidade sobre onde a API do Bitly é mais madura e onde um encurtador customizado vence no controle.
Dúvidas de desenvolvedores
Onde está a especificação OpenAPI?
Em /docs/api-reference - o Scalar a renderiza de forma interativa. O YAML bruto está em /openapi.yaml. É a mesma especificação da qual os SDKs são gerados, não uma documentação mantida separadamente.
Como obtenho um slug determinístico no CI?
Passe `slug` no corpo da requisição. Se o slug já estiver sendo usado por um link diferente, a API retorna 409 com o ID do link conflitante. Se estiver sendo usado pela mesma URL de destino (recriação idempotente), ela retorna o link existente. Use o cabeçalho Idempotency-Key para tornar as retentativas seguras.
Existe opção self-host?
Existe um chart Helm para Kubernetes no repositório. Os termos de licença e o modelo de self-hosting suportado são definidos por contrato; entre em contato com [email protected] antes de contar com self-hosting.
Como consumo eventos de clique sem fazer polling?
Duas opções: webhooks (HTTPS, assinado com HMAC, at-least-once) ou o firehose compatível com Kafka (consumidor direto, nível Business). Webhooks são adequados para auditoria e alertas; o firehose é o caminho correto para pipelines de eventos de alto volume onde o overhead de entrega HTTP por evento importa.
Qual é o rate limit?
100 req/seg sustentado, 200 de pico por chave de API, com um 429 e cabeçalho Retry-After. Endpoints de escrita contam separadamente das leituras. O servidor MCP repassa o 429 como um erro de ferramenta; os SDKs expõem o valor de Retry-After como um campo tipado no erro de rate limit.
Posso usar o servidor MCP em automação de produção, não apenas interativamente?
Sim - o servidor MCP é um processo stdio ou SSE padrão. Você pode invocá-lo de um script, uma etapa de CI ou uma pipeline de agente. Somente leitura por padrão; o escopo de escrita exige configuração explícita no workspace. Cada chamada é auditada.
Qual política de mudanças que quebram a compatibilidade vocês usam?
SemVer no prefixo da versão da API (/v1/, /v2/). Mudanças que quebram a compatibilidade recebem uma janela de depreciação de 90 dias com ambas as versões ativas simultaneamente. Adições que não quebram a compatibilidade (novos campos, novos endpoints) ocorrem sem alteração de versão. O changelog em /changelog documenta cada mudança com o endpoint afetado.
Existe um modo de desenvolvimento local sem atingir a API real?
Os SDKs de TypeScript e Python aceitam uma substituição de baseUrl. Ainda não há um servidor de mock oficial; para testes locais, o padrão é um workspace de teste com uma chave de API separada, não um mock. Está no roadmap.
Lista de leitura do developer
Especificação OpenAPI 3.1, quatro SDK oficiais e o que cada um inclui.
Eventos assinados com HMAC, política de retry, fila de dead-letter, firehose Kafka.
Motor de regras no edge - útil quando a sua lógica de encaminhamento não pertence ao seu serviço.
Guias, referências e notas de arquitetura - escritos pela equipe que cria o código.
Especificação OpenAPI interactiva renderizada em Scalar, todos os 44 endpoints.
Slack, Zapier, Make, n8n e mais.
Não tem certeza de qual abordagem se encaixa melhor?
A maioria das equipes começa com uma e evolui para todas as quatro. Nossa equipe de vendas pode analisar sua stack específica em 20 minutos.