Скорочувач, вихідний код якого ви можете прочитати.
Ви вимірюєте затримку, частоту помилок та час до MTTR. Elido - це скорочувач, вихідний код якого ви можете прочитати.
- REST + gRPC: обирайте поверхню, яку надає перевагу ваша сервісна мережа
- Спани OpenTelemetry для кожного редиректу та кожного API-виклику
- Шість SDK: TypeScript, Go, Python, Ruby, PHP, .NET
- Самостійний хостинг 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 обслуговує і 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
- Самостійний хостинг Apache 2.0 з однокомандним Helm-чартом
- Вебхук-файрхоз із підписом HMAC-SHA256
- Ендпоінт Prometheus /metrics на кожному сервісі
Що насправді пропонує Elido API
Специфікація 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 чергою
Кожна подія робочого простору (створення посилання, клік, видалення, запис аудиту, атрибуція конверсії) доступна як вебхук. Дані підписуються за допомогою HMAC-SHA256 з секретом, який можна ротувати; ключ підпису відокремлений від вашого API-ключа, тому ротація одного не анулює інший. Семантика доставки: принаймні один раз (at-least-once) з експоненціальною витримкою (1с, 5с, 30с, 5хв, 30хв) і вікном повторів, що налаштовується (типово 24 години). Події, для яких вичерпано ліміт спроб, потрапляють у dead-letter чергу, яку видно на панелі керування; ви можете перезапустити їх звідти. Для високонавантажених конвеєрів подій Kafka-сумісний firehose повністю оминає доставку через HTTP - споживайте події кліків та логи аудиту безпосередньо зі стріму. Firehose - це функція плану Business; доставка вебхуків доступна в плані Pro і вище.
Сервер Model Context Protocol: інструменти Elido у будь-якому MCP-клієнті
Сервер 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 гарячого кешу для рівня L2. Helm-чарт постачається з розумними налаштуваннями для горизонтального автоштабування подів Kubernetes; він масштабується залежно від навантаження на CPU та частоти запитів. Конфігурація здійснюється через змінні середовища; чарт містить файл values.yaml з типовими значеннями та задокументованим списком кожної змінної. Решта стека (наш API, панель керування) може залишатися на SaaS-платформі Elido - вам не потрібно хостити все самостійно. Поширений розподіл: рівень перенаправлення хоститься самостійно у вашому VPC (нижча затримка для користувачів, відсутність витрат на вихідний трафік), а панель керування та аналітика - у хмарі Elido. Використовуйте власний KMS для шифрування локального гарячого кешу, якщо цього вимагають ваші стандарти безпеки. Порівняно з Bitly (немає варіанту self-host) та створенням власного скорочувача, варіант із Helm-чартом дає вам продуктивність перенаправлення та керований API без необхідності розробки з нуля.
Стек, з яким ви працюєте
- TypeScript SDK
- Python SDK
- Go SDK
- Webhook firehose
- OpenAPI 3.1 spec
- Самостійний хостинг Helm chart
Що ви будете вимірювати
- Затримка редиректу p50
- 5 мс при попаданні в кеш
- SLA безвідмовної роботи API
- 99.95% на Business
- Self-host RTO
- <1 година
Інженерні команди, що будують на цій платформі
Імена наразі є плейсхолдерами - реальні назви клієнтів з'являться тут після публікації кейсів.
“Ми хостимо рівень перенаправлення у власному кластері Kubernetes, а для всього іншого використовуємо керований API. Затримка перенаправлення p50 впала з 45 мс до 6 мс після перенесення edge-сервісу в той самий регіон, де знаходяться наші користувачі. Helm-чарт був настільки зрозумілим, що ми запустилися без консультацій із техпідтримкою.”
“Сервер MCP став вирішальним фактором. Наша команда працює в Cursor весь день; можливість створювати теговані короткі посилання для приміток до релізу прямо з IDE, не перериваючи робочий процес, - це той тип покращення DX, який дійсно працює.”
“Ключі ідемпотентності при масовому створенні дозволяють нам генерувати короткі посилання в CI, не боячись, що повторні спроби створять дублікати. Типізований Go SDK гарантує, що код нашого пайплайна або компілюється, або видає помилку - жодних прихованих некоректних запитів під час виконання.”
Elido API проти Bitly API проти створення власного сервісу
Два зовнішні варіанти та альтернатива у вигляді власної розробки. Чесно про те, де Bitly API є зрілішим, а де власне рішення перемагає в питанні контролю.
| Можливість | Elido | Bitly API | Власний скорочувач |
|---|---|---|---|
| Формат специфікації API | OpenAPI 3.1, додана в репозиторій | Власна документація v4 (не OpenAPI) | Будь-який, який ви напишете |
| Власні SDK | TypeScript, Python, Go - згенеровані зі специфікації | JavaScript, Python, Ruby та Java | Ви створюєте їх самі |
| Ключі ідемпотентності для запису | Так - на основі заголовків, для всіх ендпоінтів запису | Не задокументовано | Ви реалізуєте це самі |
| Масове створення | 100 за виклик, статус помилки для кожного рядка | Немає задокументованого нативного ендпоінту | Ваша схема, ваші правила |
| Доставка вебхуків | Доставка не рідше одного разу, HMAC-SHA256, DLQ | Доступно в Enterprise | Ви будуєте це самі |
| Сервер MCP | Відкритий код MIT, встановлення 30 секунд | Недоступно | Ви будуєте це самі |
| Self-host рівня перенаправлення | Helm-чарт Apache 2.0 | Недоступно | Повний контроль, повна вартість |
| Затримка перенаправлення p50 | 5 мс при попаданні в кеш | Порівнянна (через edge) | Залежить від вашої інфраструктури |
Запитання для розробників
Де знайти специфікацію OpenAPI?
За адресою /docs/api-reference - Scalar рендерить її інтерактивно. Сирий YAML-файл знаходиться за адресою /openapi.yaml. Це та сама специфікація, на основі якої генеруються SDK, а не окрема документація.
Як отримати детермінований слаг у CI?
Передайте `slug` у тілі запиту. Якщо слаг уже зайнятий іншим посиланням, API поверне 409 з ID конфліктного посилання. Якщо він зайнятий тим самим цільовим URL (ідемпотентне повторне створення), він поверне існуюче посилання. Використовуйте заголовок Idempotency-Key, щоб зробити повторні спроби безпечними.
Що містить Helm-чарт для self-host?
Бінарний файл рівня перенаправлення, конфігурацію гарячого кешу, налаштування HPA та файл values.yaml із документацією всіх змінних конфігурації. Він не включає наш API або панель керування - вони можуть залишатися на SaaS Elido. Ліцензія Apache 2.0; для форків не потрібен CLA.
Як отримувати події кліків без опитування (polling)?
Є два варіанти: вебхуки (HTTPS, підпис HMAC, доставка at-least-once) або Kafka-сумісний firehose (пряме споживання, рівень Business). Вебхуки підходять для аудиту та сповіщень; firehose - це правильний шлях для високонавантажених конвеєрів подій, де накладні витрати на доставку через HTTP мають значення.
Який ліміт запитів (rate limit)?
100 зап/сек стабільно, 200 піково на один API-ключ, з помилкою 429 та заголовком Retry-After. Ендпоінти запису рахуються окремо від читання. Сервер MCP передає помилку 429 як помилку інструменту; SDK надають доступ до значення Retry-After як до типізованого поля в помилці ліміту запитів.
Чи можна використовувати сервер MCP у продакшн-автоматизації, а не лише інтерактивно?
Так - сервер MCP є стандартним процесом stdio або SSE. Ви можете викликати його зі скрипту, кроку CI або конвеєра агентів. Типово доступ тільки для читання; область дії для запису потребує явного налаштування робочого простору. Кожен виклик проходить аудит.
Якої політики внесення критичних змін ви дотримуєтесь?
SemVer для префікса версії API (/v1/, /v2/). Критичні зміни отримують 90-денне вікно застарівання, коли обидві версії працюють одночасно. Некритичні доповнення (нові поля, нові ендпоінти) відбуваються без зміни версії. Журнал змін за адресою /changelog документує кожну зміну із зазначенням відповідного ендпоінту.
Чи є режим локальної розробки без звернення до реального API?
SDK для TypeScript та Python підтримують перевизначення baseUrl, що вказує на ваш власний екземпляр - корисно для тих, хто використовує self-host. Офіційного mock-сервера поки немає; для локального тестування рекомендується використовувати тестовий робочий простір з окремим API-ключем, а не mock. Це є в планах розробки.
Читання для розробника
Специфікація OpenAPI 3.1, шість власних SDK і опис кожного.
HMAC-підписані події, політика повторних спроб, черга мертвих листів, Kafka-файрхоз.
Рушій правил на межі - корисний, коли логіка маршрутизації не повинна бути у вашому сервісі.
Посібники, довідники та нотатки з архітектури - написані командою, яка відвантажує код.
Інтерактивна специфікація OpenAPI, відрендерена Scalar, всі 44 ендпоінти.
Slack, Zapier, Make, n8n та вихідний код кожного конектора.
Не впевнені, який кут підходить?
Більшість команд починають з одного і розвиваються у всі чотири. Наша команда продажів може розглянути ваш конкретний стек за 20 хвилин.