Мониторинг endpoint приёма webhooks в SaaS
Stripe, GitHub и маркетплейсы шлют POST на /webhooks/stripe, а не на публичный GET /api/v1/users. Если ingestion отдаёт 500 или таймаут, биллинг встаёт, а маркетинговый /health зелёный.
StillOnline выполняет внешние HTTP GET (или выбранный метод) по зарегистрированным URL. Webhook-маршруты обычно только POST — ниже паттерны, как доказать работу ingestion без неподписанного трафика.
Краткий ответ
Не вешайте StillOnline на URL, который принимает только POST с подписью — проба по умолчанию GET и увидит 405 или 401. Сделайте GET /webhooks/health или включите готовность ingestion в /api/health. Free — одна проверка раз в пять минут, две неудачи подряд → DOWN и алерт. Для Stripe — платформенный гайд. Pro — до 10 проверок.
2xx, 401 и 405
| Ответ | Проба | Смысл |
|---|---|---|
| 200 на health | Зелёный | Стек ingestion доступен |
| 401 на POST без подписи | Красный, если так пробуете | Норма для unsigned GET — неверный URL |
| 405 | Красный | GET не реализован — нужен health |
| 500 | Красный | Handler или БД |
Webhooks Stripe требуют POST и Stripe-Signature — внешний монитор не подделает событие.
Паттерн — отдельный health ingestion
GET /api/webhooks/health
{ "status": "ok", "last_event_at": "2026-06-08T12:00:00Z" }
- Без секретов в JSON.
- 503 при переполнении очереди (опционально).
- Полный HTTPS URL в StillOnline.
curl -sS -o /dev/null -w "%{http_code}\n" https://api.yourproduct.com/api/webhooks/health
Синтетический POST (не в StillOnline)
Cron или GitHub Actions с тестовой подписью — в CI; StillOnline держит health URL, от которого зависят клиенты.
Component на странице статуса
Webhooks или Интеграции отдельно от API — API-only.
Настройка StillOnline
- Проект.
- HTTP-проверка → health URL → 200.
- Текст для Платежей при сбое Stripe — сторонние статусы.
- Telegram-алерты.
Связанные материалы
- Webhook и страница статуса
- Мониторинг API-only SaaS
- Дизайн health endpoint
- Stripe, Auth0, SendGrid на status page
FAQ
Может ли StillOnline POST с моим signing secret?
Нет. Нужен GET health или синтетика в CI.
Почему webhook URL красный?
Часто 405/401 на GET. Добавьте /webhooks/health.
Одна проверка с публичным REST API?
На Free один URL — объедините в /health или Pro.
StillOnline валидирует тело webhook?
Нет — только код и время ответа по RFC 9110.