Документация

WebhookLens — это наблюдаемость вебхуков, размещённая в ЕС. Принимайте, инспектируйте, воспроизводите и пересылайте вебхуки с полной видимостью.

Быстрый старт Запуск менее чем за 60 секунд. Никакой инфраструктуры — создайте аккаунт, добавьте эндпоинт и направьте вебхук вашего провайдера на сгенерированный URL.
  1. Создайте бесплатный аккаунт
    Зарегистрируйтесь на app.webhooklens.cloud — для начала кредитная карта не требуется.
  2. Добавьте эндпоинт
    В панели управления создайте эндпоинт с целевым URL, куда должны пересылаться ваши вебхуки. WebhookLens сгенерирует уникальный URL прокси.
  3. Направьте провайдера и отправьте тестовый вебхук
    Настройте провайдера на отправку на сгенерированный URL, затем: curl -X POST https://proxy.webhooklens.cloud/wh/your-tenant/your-endpoint -H "Content-Type: application/json" -d '{"test": true}'

Прокси Webhook

WebhookLens работает как обратный прокси для ваших вебхуков. Настройте провайдеров на URL прокси — и WebhookLens будет принимать, логировать, валидировать и пересылать каждый запрос на ваш реальный эндпоинт.

Приём вебхуков

URL прокси соответствует шаблону:

POST https://proxy.webhooklens.cloud/wh/{tenant-slug}/{endpoint-slug}

При поступлении вебхука WebhookLens:

  1. Принимает полный HTTP-запрос (метод, заголовки, тело, параметры запроса)
  2. Сохраняет событие в ClickHouse для аналитики и в PostgreSQL для инспекции
  3. Проверяет подпись (если провайдер настроен для эндпоинта)
  4. Применяет трансформации (если настроены)
  5. Пересылает запрос на настроенный целевой URL
  6. Записывает код ответа, задержку и возможные ошибки

Политика повторных попыток

Неудавшиеся доставки (ответы 5xx или таймауты) повторяются с экспоненциальной задержкой:

ПопыткаЗадержка
1-я попытка1 секунда
2-я попытка5 секунд
3-я попытка30 секунд
4-я попытка5 минут
5-я попытка30 минут

После 5 неудачных попыток событие помечается как failed. Вы можете воспроизвести его вручную из панели управления или через API в любое время.

Проверка подписи

Если для эндпоинта настроен провайдер, WebhookLens может криптографически верифицировать подпись вебхука с использованием алгоритма подписи провайдера. Верификация подписи (проверка HMAC по вашему секрету подписи) на данный момент доступна для Stripe и GitHub. При неудаче верификации событие помечается флагом, но по-прежнему сохраняется и пересылается (если не включён строгий режим).

Для 9 дополнительных провайдеров WebhookLens автоматически определяет и маркирует источник, анализируя характерные заголовки подписи — секрет не требуется. Это позволяет фильтровать и просматривать события по провайдеру даже без полной криптографической верификации.

Пример: проверка подписи Stripe

# При создании эндпоинта укажите провайдера и секрет подписи
curl -X POST https://app.webhooklens.cloud/api/endpoints \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "stripe-payments",
    "target_url": "https://api.example.com/webhooks/stripe",
    "provider": "stripe",
    "signing_secret": "whsec_..."
  }'

Поддерживаемые провайдеры

ПровайдерЗаголовок подписиАлгоритмПоддержка
StripeStripe-SignatureHMAC-SHA256 (timestamp + payload)Верификация
GitHubX-Hub-Signature-256HMAC-SHA256Верификация
ShopifyX-Shopify-Hmac-SHA256HMAC-SHA256 (Base64)Авто-определение
SlackX-Slack-SignatureHMAC-SHA256 (timestamp + body)Авто-определение
TwilioX-Twilio-SignatureHMAC-SHA1Авто-определение
SendGridX-Twilio-Email-Event-Webhook-SignatureECDSAАвто-определение
PayPalPAYPAL-TRANSMISSION-SIGHMAC-SHA256Авто-определение
PaddlePaddle-SignatureHMAC-SHA256 (timestamp + payload)Авто-определение
LinearLinear-SignatureHMAC-SHA256Авто-определение
AtlassianX-Hub-SignatureHMAC-SHA256Авто-определение
DiscordX-Signature-Ed25519Ed25519Авто-определение

Панель управления

События & Инспектор

Страница событий отображает все входящие вебхуки в реальном времени с автообновлением. В каждой строке показано:

Нажмите на событие, чтобы открыть инспектор:

Эндпоинты

Эндпоинты — основная абстракция. Каждый эндпоинт содержит:

Аналитика

Панель аналитики предоставляет метрики в реальном времени на базе ClickHouse:

Оповещения

Настройте оповещения, чтобы быть в курсе проблем:

Уведомления могут отправляться в Slack (через входящий вебхук) или на произвольный URL вебхука.

# Создать оповещение
curl -X POST https://app.webhooklens.cloud/api/alerts \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "High failure rate",
    "type": "failure_rate",
    "threshold": 10,
    "window_minutes": 5,
    "channel": "slack",
    "slack_webhook_url": "https://hooks.slack.com/services/..."
  }'

Трансформации & Маршрутизация

Трансформации payload

Трансформации позволяют изменять payload вебхуков перед их пересылкой на цель. Это удобно для обогащения данных, удаления чувствительных полей или адаптации payload к формату вашего API.

Типы трансформаций

ТипОписаниеПример
set_fieldУстановить или перезаписать JSON-полеДобавить source: "stripe" в тело
remove_fieldУдалить JSON-полеУдалить data.object.metadata
rename_fieldПереименовать JSON-полеПереименовать id в external_id
add_headerДобавить заголовок запросаДобавить X-Source: webhooklens
remove_headerУдалить заголовок запросаУдалить X-Internal-Token

Пример: добавить поле и заголовок

curl -X PATCH https://app.webhooklens.cloud/api/endpoints/EP_ID \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "transforms": [
      {"type": "set_field", "path": "meta.source", "value": "stripe"},
      {"type": "add_header", "key": "X-Source", "value": "webhooklens"},
      {"type": "remove_field", "path": "data.object.metadata.internal"}
    ]
  }'

Тестирование без применения (dry-run)

Протестируйте трансформации без реальной пересылки:

curl -X POST https://app.webhooklens.cloud/api/transforms/test \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "transforms": [
      {"type": "set_field", "path": "enriched", "value": true}
    ],
    "payload": {"event": "payment.completed", "amount": 4999}
  }'

# Ответ:
# {"event": "payment.completed", "amount": 4999, "enriched": true}

Умная маршрутизация

Направляйте один вебхук на несколько целей по условиям. Это обеспечивает веерную рассылку, условную обработку и резервные цели.

Условия маршрутизации

УсловиеОписание
allВсегда пересылать на эту цель (веерная рассылка)
on_successПересылать только если основная цель вернула 2xx
on_failureПересылать только если основная цель вернула не-2xx или произошёл таймаут

Пример: веерная рассылка на 3 цели

curl -X PATCH https://app.webhooklens.cloud/api/endpoints/EP_ID \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "target_url": "https://primary.example.com/webhook",
    "routes": [
      {"url": "https://analytics.example.com/ingest", "condition": "all"},
      {"url": "https://backup.example.com/webhook", "condition": "all"},
      {"url": "https://alerts.example.com/failure", "condition": "on_failure"}
    ]
  }'

Справочник API

Базовый URL API — https://app.webhooklens.cloud. Для аутентифицированных эндпоинтов требуется Bearer-токен — либо JWT, полученный при входе, либо API-ключ, созданный в разделе Настройки → API-ключи (передаётся через Authorization: Bearer whl_<ключ>).

Аутентификация

POST /api/auth/signup

Создать новый аккаунт и тенант.

curl -X POST https://app.webhooklens.cloud/api/auth/signup \
  -H "Content-Type: application/json" \
  -d '{
    "email": "вы@пример.com",
    "password": "надёжныйпароль",
    "tenant_name": "мой-проект"
  }'

# Ответ: {"token": "eyJhbG...", "tenant": {"id": "...", "slug": "мой-проект"}}
POST /api/auth/login

Аутентификация и получение JWT-токена.

curl -X POST https://app.webhooklens.cloud/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "вы@пример.com", "password": "надёжныйпароль"}'

# Ответ: {"token": "eyJhbG..."}

API Эндпоинтов

GET /api/endpoints

Получить список всех эндпоинтов текущего тенанта.

curl https://app.webhooklens.cloud/api/endpoints \
  -H "Authorization: Bearer YOUR_TOKEN"

# Ответ: [{"id": "...", "slug": "stripe-prod", "target_url": "https://...", ...}]
POST /api/endpoints

Создать новый эндпоинт.

curl -X POST https://app.webhooklens.cloud/api/endpoints \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "stripe-prod",
    "target_url": "https://api.example.com/webhooks/stripe",
    "provider": "stripe",
    "signing_secret": "whsec_..."
  }'
PATCH /api/endpoints/:id

Обновить эндпоинт (целевой URL, провайдер, трансформации, маршруты).

curl -X PATCH https://app.webhooklens.cloud/api/endpoints/EP_ID \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target_url": "https://новая-цель.example.com/hook"}'

API Событий

GET /api/events

Список событий с необязательными фильтрами. Поддерживает пагинацию.

# Список последних событий
curl "https://app.webhooklens.cloud/api/events?limit=50&status=failed" \
  -H "Authorization: Bearer YOUR_TOKEN"

# Фильтр по эндпоинту
curl "https://app.webhooklens.cloud/api/events?endpoint_id=EP_ID&limit=20" \
  -H "Authorization: Bearer YOUR_TOKEN"
POST /api/events/:id/replay

Воспроизвести событие — повторно отправить исходный запрос на цель.

curl -X POST https://app.webhooklens.cloud/api/events/EVT_ID/replay \
  -H "Authorization: Bearer YOUR_TOKEN"

# Ответ: {"status": "replayed", "response_code": 200, "latency_ms": 142}

API Аналитики

GET /api/analytics/overview

Получить агрегированную аналитику по тенанту.

curl "https://app.webhooklens.cloud/api/analytics/overview?period=24h" \
  -H "Authorization: Bearer YOUR_TOKEN"

# Ответ:
# {
#   "total_events": 12847,
#   "success_rate": 99.2,
#   "p50_ms": 45,
#   "p95_ms": 210,
#   "p99_ms": 890,
#   "by_provider": [{"provider": "stripe", "count": 8420}, ...],
#   "by_status": {"forwarded": 12744, "failed": 62, "replayed": 41}
# }

API Биллинга

Доступен только в облачном режиме.

GET /api/billing/quota

Получить текущее использование и квоту плана.

curl https://app.webhooklens.cloud/api/billing/quota \
  -H "Authorization: Bearer YOUR_TOKEN"

# Ответ: {"plan": "starter", "events_used": 12847, "events_limit": 100000, ...}
POST /api/billing/checkout

Создать сессию Stripe Checkout для обновления плана.

curl -X POST https://app.webhooklens.cloud/api/billing/checkout \
  -H "Authorization: Bearer YOUR_TOKEN"

# Ответ: {"checkout_url": "https://checkout.stripe.com/..."}
POST /api/billing/portal

Создать сессию Stripe Billing Portal для управления подписками.

curl -X POST https://app.webhooklens.cloud/api/billing/portal \
  -H "Authorization: Bearer YOUR_TOKEN"

# Ответ: {"portal_url": "https://billing.stripe.com/..."}
POST /api/transforms/test

Протестировать набор трансформаций без применения на примере payload.


MCP-сервер

WebhookLens предоставляет сервер Model Context Protocol, чтобы вы могли запрашивать данные о вебхуках прямо из ИИ-ассистентов, таких как Claude. Спрашивайте на естественном языке — «что не доставилось за последний час?», «покажи последнее событие Stripe», «повтори событие EVT_123» — и ассистент сам обратится к WebhookLens. Каждый инструмент ограничен вашим рабочим пространством, поэтому ассистент видит только ваши данные.

Подключение

Сервер доступен по адресу https://app.webhooklens.cloud/mcp и использует аутентификацию OAuth. Никаких API-ключей копировать не нужно: вы входите под своей обычной учётной записью WebhookLens и один раз подтверждаете доступ.

Claude Code (CLI)

claude mcp add --transport http webhooklens https://app.webhooklens.cloud/mcp

При первом использовании в браузере откроется вход в WebhookLens (пароль или GitHub) и запрос на подтверждение доступа. После этого ассистент сможет вызывать инструменты ниже.

Claude.ai (веб)

Добавьте пользовательский коннектор с URL https://app.webhooklens.cloud/mcp и выполните тот же вход. Веб-коннектор работает только через OAuth.

Доступные инструменты

ИнструментОписание
list_endpointsСписок всех эндпоинтов вебхуков в вашем рабочем пространстве
list_eventsСписок последних событий (сводки) — фильтр по эндпоинту, статусу, провайдеру, типу, поиску или диапазону времени
get_eventПолучить одно событие целиком: тело запроса, заголовки, ответ и последнюю ошибку
analytics_overviewСтатистика доставки за период: итоги, доля успехов/ошибок, перцентили задержки
analytics_errorsНаиболее частые повторяющиеся ошибки доставки, сгруппированные по эндпоинту и сообщению
list_retriesСобытия, ожидающие автоматической повторной отправки
replay_eventПовторно доставляет сохранённое событие на целевой URL его собственного эндпоинта (с записью в журнал аудита)

replay_event — единственный инструмент, который что-либо записывает; остальные шесть доступны только для чтения.


Нужна помощь? Напишите нам на support@webhooklens.cloud.