Сокращатель, исходный код которого можно прочитать.
Вы измеряете задержку, частоту ошибок и время до MTTR. Elido - это сокращатель, исходный код которого вы можете прочитать.
- REST + gRPC: выбирайте поверхность, которую предпочитает ваша сервисная сеть
- Спаны OpenTelemetry для каждого редиректа и каждого API-вызова
- Шесть SDK: TypeScript, Go, Python, Ruby, PHP, .NET
- Self-host Apache 2.0 с однокомандным Helm-чартом
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" }
Наблюдаемость - встроенная, а не прикрученная
Каждый редирект генерирует спан OpenTelemetry. Каждый спан попадает в ваш коллектор.
Edge-сервис инструментирован сквозным образом с помощью OTel. Направьте свой OTLP-коллектор на уровень редиректа - и вы получите полный водопад: поиск в кеше, оценка правил, ответ и асинхронная публикация события клика - без написания ни одной строки инструментации самостоятельно.
SDK
Один канонический вызов. Шесть языков. Все сгенерированы из одной спецификации.
Каждый SDK поставляется из одной и той же спецификации OpenAPI 3.1. Добавили новый эндпоинт на сервере? Запустите генератор, отгрузите SDK - готово. Никакого клиента с ручным обслуживанием, который расходится с API. Ключи идемпотентности, повторные попытки с экспоненциальным откатом и типизированные ответы на ошибки реализованы единообразно на всех шести языках.
- Спецификация OpenAPI 3.1 как единый источник истиныСпецификация зафиксирована. SDK перегенерируются при каждом релизе.
- Типизированные ответы на ошибкиЛимит скорости, валидация, конфликт - всё типизировано, без строкового перехвата.
- Ключи идемпотентностиНа основе заголовка для каждого эндпоинта записи, повторяется при повторной попытке.
- Встроенные повторные попыткиЭкспоненциальный откат с соблюдением Retry-After на каждом языке.
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-контракт
Та же поверхность в protobuf - для нативных сервисных сетей.
Сервис api-core обслуживает и REST, и gRPC из одних и тех же обработчиков. Если ваша платформа нативно говорит proto (Envoy, Istio, Linkerd, Connect-Go) - пропустите JSON-уровень. Файлы .proto опубликованы; генерируйте клиенты на любом языке, который поддерживает buf или protoc.
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.
Что вы получаете из коробки
- REST + gRPC: выбирайте поверхность, которую предпочитает ваша сервисная сеть
- Спаны OpenTelemetry для каждого редиректа и каждого API-вызова
- Шесть SDK: TypeScript, Go, Python, Ruby, PHP, .NET
- Self-host Apache 2.0 с однокомандным Helm-чартом
- Вебхук-файрхоз с подписью HMAC-SHA256
- Эндпоинт Prometheus /metrics на каждом сервисе
Что на самом деле предлагает API Elido
Спецификация OpenAPI и Bearer-токен - это лишь база. Описанные ниже возможности - это то, что отличает сервис коротких ссылок, на котором можно строить системы, от того, с которым придется бороться в 2 часа ночи.
OpenAPI 3.1 с 44 документированными эндпоинтами - никаких скрытых методов
Каждый эндпоинт в продакшене описан в спецификации OpenAPI 3.1. Никаких «теневых» маршрутов или недокументированных параметров, о которых забыла команда документации. Спецификация хранится в репозитории и версионируется вместе с API; любые критические изменения следуют SemVer и имеют период устаревания не менее 90 дней. Спецификация интерактивно отображается в документации через Scalar - просто вставьте свой API-ключ и тестируйте вызовы прямо в браузере. Три SDK (TypeScript, Python, Go) генерируются из этой же спецификации при каждом релизе, поэтому они не могут расходиться с тем, что фактически принимает сервер. Методы SDK принимают типизированные объекты запросов и возвращают типизированные ответы; ошибки типизированы, а не просто перехватываются как строки. Поддерживаются ключи идемпотентности для методов записи - передайте заголовок `Idempotency-Key`, и ответ будет воспроизведен при повторной попытке без создания дубликата.
Детерминированные слаги, массовое создание и идемпотентность для CI-пайплайнов
POST /v1/workspaces/{ws}/links принимает поле slug - вы получаете именно тот слаг, который запросили, или ошибку конфликта с ID существующей ссылки, чтобы ваш пайплайн мог решить, что делать дальше. Массовое создание (POST .../links/bulk) принимает до 100 спецификаций ссылок за один вызов; ответ содержит по одному результату для каждой входной строки с созданной ссылкой или описанием ошибки, поэтому частичные сбои не остаются незамеченными. Оба эндпоинта поддерживают ключи идемпотентности: повторно отправьте тот же запрос с тем же ключом и получите тот же ответ без создания дубликатов. Это стандартный паттерн для CI/CD пайплайнов, создающих короткие ссылки при деплое - детерминировано, безопасно для повторных попыток и консистентно между средами. Пространство имен слагов привязано к кастомному домену: один и тот же слаг на двух разных доменах - это две разные ссылки, а не конфликт.
Вебхуки с подписью HMAC, автоматическими повторами и dead-letter queue
Каждое событие воркспейса (создание, клик, удаление ссылки, запись в аудите, атрибуция конверсии) доступно через вебхук. Данные подписываются с помощью HMAC-SHA256 с использованием ротируемого секрета; ключ подписи отделен от вашего API-ключа, поэтому ротация одного не аннулирует другой. Семантика доставки: at-least-once с экспоненциальной задержкой (1с, 5с, 30с, 5м, 30м) и настраиваемым окном повторов (по умолчанию 24ч). События, исчерпавшие попытки, попадают в dead-letter queue, видимую в дашборде; оттуда их можно воспроизвести повторно. Для высоконагруженных пайплайнов событий Kafka-совместимый firehose полностью обходит HTTP-доставку - потребляйте события кликов и логи аудита напрямую из стрима. Firehose доступен в тарифе Business; доставка вебхуков доступна в тарифе Pro и выше.
Сервер Model Context Protocol: инструменты Elido в любом MCP-клиенте
Open-source сервер Elido MCP (лицензия MIT) предоставляет эндпоинты ссылок, QR и аналитики как типизированные инструменты MCP. Установка занимает 30 секунд: добавьте блок сервера в конфигурацию Claude Desktop или Cursor, установите ELIDO_API_KEY и перезапустите. Каталог инструментов обнаруживается автоматически - никаких ручных определений, которые могут устареть. По умолчанию доступен только режим чтения; операции записи требуют явного разрешения в настройках воркспейса. Каждый вызов инструмента отображается в логе аудита с указанием вызывающего ключа и аргументов, поэтому изменения, внесенные агентами, всегда можно отследить. Сервер работает через stdio и SSE; он использует те же лимиты и коды ошибок, что и REST API, включая заголовок Retry-After при ошибке 429, чтобы ваш агент мог корректно снизить нагрузку. Исходный код доступен на GitHub; популярные форки позволяют добавлять специфические инструменты или обогащать метаданные без необходимости слияния с основным репозиторием Elido.
Helm-чарт (Apache 2.0): запустите уровень редиректов в собственном VPC
Уровень редиректов - это единственный компонент на критическом пути каждого перехода. Это один самодостаточный бинарный файл - без зависимостей времени выполнения, кроме in-memory hot cache для L2-уровня. Helm-чарт поставляется с оптимальными настройками для горизонтального автоскалирования Kubernetes; он масштабируется по нагрузке на CPU и частоте запросов. Конфигурация осуществляется через переменные окружения; чарт включает values.yaml с документированным списком всех переменных. Остальная часть стека (API и дашборд) может оставаться в SaaS-версии Elido - вам не нужно хостить всё самостоятельно. Распространенная схема: уровень редиректов в вашем VPC (меньшая задержка для пользователей, отсутствие затрат на исходящий трафик), а дашборд и аналитика в облаке Elido. Используйте собственную KMS для шифрования локального hot cache, если того требует ваша политика безопасности. В отличие от Bitly (где нет опции self-host) и разработки собственного сервиса, наш Helm-чарт дает производительность редиректов и управляемое API без необходимости начинать с нуля.
Используемый стек
- TypeScript SDK
- Python SDK
- Go SDK
- Поток вебхуков
- Спецификация OpenAPI 3.1
- Helm-график для самостоятельного размещения
Что вы будете измерять
- p50 задержка перенаправления
- 5 ms при попадании в кэш
- SLA работоспособности API
- 99.95% на Business
- RTO для самостоятельного хостинга
- <1 часа
Инженерные команды, которые строят на базе Elido
Названия пока являются плейсхолдерами - реальные имена клиентов появятся здесь по мере публикации кейсов.
“Мы сами хостим уровень редиректов в своем кластере Kubernetes, а для всего остального используем управляемое API. Задержка редиректа p50 упала с 45 мс до 6 мс после переноса edge-сервиса в тот же регион, где находятся наши пользователи. Helm-чарт оказался настолько понятным, что мы внедрили его без обращения в поддержку.”
“Сервер MCP стал решающим фактором. Наша команда весь день работает в Cursor; возможность создавать короткие ссылки с тегами для чейнджлогов прямо внутри IDE, не прерывая рабочий процесс, - это именно тот уровень DX, который действительно важен.”
“Ключи идемпотентности при массовом создании позволяют нам генерировать короткие ссылки в CI, не опасаясь дублей при повторных попытках. Типизированный SDK для Go гарантирует, что код пайплайна либо компилируется, либо нет - никаких скрытых некорректных запросов во время выполнения.”
API Elido vs API Bitly vs разработка собственного сервиса
Два внешних варианта и альтернатива в виде собственной разработки. Честно о том, где API Bitly более зрелый, а где собственное решение дает больше контроля.
| Возможность | Elido | API Bitly | Свой сервис |
|---|---|---|---|
| Формат спецификации API | OpenAPI 3.1, хранится в репозитории | Кастомная документация v4 (не OpenAPI) | Всё, что вы напишете |
| Собственные SDK | TypeScript, Python, Go - генерируются из спецификации | JavaScript, Python, Ruby и Java | Вы создаете их сами |
| Ключи идемпотентности для записи | Да - через заголовки, для всех эндпоинтов записи | Не задокументировано | Вы реализуете это сами |
| Массовое создание | 100 за вызов, обработка частичных сбоев для каждой строки | Нативный эндпоинт для массового создания не описан | Ваша схема, ваши правила |
| Доставка вебхуков | Доставка не реже одного раза, HMAC-SHA256, DLQ | Доступно в тарифе Enterprise | Вы строите это сами |
| Сервер MCP | MIT open-source, установка 30 сек | Недоступно | Вы строите это сами |
| Self-host уровня редиректов | Helm-чарт Apache 2.0 | Недоступно | Полный контроль, полная стоимость |
| p50 задержки редиректа | 5 мс при попадании в кэш (HIT) | Сопоставимо (edge-served) | Зависит от вашей инфраструктуры |
Вопросы разработчиков
Где найти спецификацию OpenAPI?
По адресу /docs/api-reference - Scalar отображает её интерактивно. Исходный YAML доступен в /openapi.yaml. Это та же спецификация, на основе которой генерируются SDK, а не отдельно поддерживаемый документ.
Как получить детерминированный слаг в CI?
Передайте `slug` в теле запроса. Если слаг уже занят другой ссылкой, API вернет 409 с ID конфликтующей ссылки. Если он занят той же ссылкой (идемпотентное создание), вернется существующая ссылка. Используйте заголовок Idempotency-Key для безопасности повторных попыток.
Что включает в себя Helm-чарт для self-host?
Бинарный файл уровня редиректа, конфигурацию hot cache, настройки HPA и values.yaml со всеми задокументированными переменными. В него не входят наш API или дашборд - они могут оставаться в SaaS Elido. Лицензия Apache 2.0; для форков не требуется CLA.
Как получать события кликов без поллинга?
Два варианта: вебхуки (HTTPS, подпись HMAC, доставка at-least-once) или Kafka-совместимый firehose (прямое потребление, тариф Business). Вебхуки подходят для аудита и алертинга; firehose - верное решение для высоконагруженных пайплайнов, где важны накладные расходы на HTTP-доставку.
Какой лимит запросов (rate limit)?
100 запр/сек стабильно, 200 кратковременно (burst) на один API-ключ, с ошибкой 429 и заголовком Retry-After. Эндпоинты записи считаются отдельно от чтения. Сервер MCP передает 429 ошибку как ошибку инструмента; SDK предоставляют значение Retry-After как типизированное поле в ошибке лимита.
Можно ли использовать сервер MCP для автоматизации в продакшене, а не только интерактивно?
Да, сервер MCP - это стандартный процесс stdio или SSE. Его можно вызывать из скрипта, шага CI или пайплайна агентов. По умолчанию доступно только чтение; для записи требуется явная настройка воркспейса. Каждый вызов логируется.
Какова политика внесения критических изменений (breaking changes)?
Мы используем SemVer в префиксе версии API (/v1/, /v2/). Для критических изменений предусмотрено 90-дневное окно устаревания, когда обе версии доступны одновременно. Не критические дополнения (новые поля, эндпоинты) происходят без смены версии. Чейнджлог по адресу /changelog фиксирует каждое изменение.
Есть ли локальный режим разработки без обращения к реальному API?
SDK для TypeScript и Python позволяют переопределить baseUrl, указав на ваш собственный экземпляр - это полезно для self-host. Официального мок-сервера пока нет; для локального тестирования рекомендуется использовать тестовый воркспейс с отдельным API-ключом. Это есть в планах развития.
Чтение для разработчика
Спецификация OpenAPI 3.1, шесть собственных SDK и описание каждого.
HMAC-подписанные события, политика повторных попыток, очередь мёртвых писем, Kafka-файрхоз.
Движок правил на границе - полезен, когда логика маршрутизации не должна находиться в вашем сервисе.
Руководства, справочники и заметки по архитектуре - написаны командой, которая отгружает код.
Интерактивная спецификация OpenAPI, отрендеренная Scalar, все 44 эндпоинта.
Slack, Zapier, Make, n8n и исходный код каждого коннектора.
Не уверены, какой ракурс подходит?
Большинство команд начинают с одного и развиваются до всех четырех. Наша команда продаж может обсудить ваш конкретный стек за 20 минут.