Documentation

WebhookLens, c'est l'observabilité des webhooks hébergée dans l'UE. Recevez, inspectez, rejouez et transmettez des webhooks avec une visibilité totale.

Démarrage rapide Opérationnel en moins de 60 secondes. Aucune infrastructure à gérer — créez un compte, ajoutez un endpoint et pointez le webhook de votre fournisseur vers l'URL générée.
  1. Créez un compte gratuit
    Inscrivez-vous sur app.webhooklens.cloud — aucune carte bancaire requise pour démarrer.
  2. Ajoutez un endpoint
    Dans le tableau de bord, créez un endpoint avec l'URL cible vers laquelle vos webhooks doivent être transmis. WebhookLens génère une URL de proxy unique.
  3. Pointez votre fournisseur et envoyez un webhook de test
    Configurez votre fournisseur pour qu'il envoie vers l'URL générée, puis : curl -X POST https://proxy.webhooklens.cloud/wh/your-tenant/your-endpoint -H "Content-Type: application/json" -d '{"test": true}'

Proxy Webhook

WebhookLens agit comme un proxy inverse pour vos webhooks. Pointez vos fournisseurs vers l'URL du proxy et WebhookLens reçoit, journalise, valide et transmet chaque requête vers votre endpoint réel.

Réception des webhooks

L'URL du proxy suit ce schéma :

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

Lorsqu'un webhook arrive, WebhookLens :

  1. Reçoit la requête HTTP complète (méthode, en-têtes, corps, paramètres de requête)
  2. Stocke l'événement dans ClickHouse pour l'analytique et PostgreSQL pour l'inspection
  3. Valide la signature (si un fournisseur est configuré sur l'endpoint)
  4. Applique les transforms (si configurés)
  5. Transmet la requête à l'URL cible configurée
  6. Enregistre le code de réponse, la latence et les éventuelles erreurs

Politique de relance

Les livraisons échouées (réponses 5xx ou timeouts) sont relancées avec un backoff exponentiel :

TentativeDélai
1re relance1 seconde
2e relance5 secondes
3e relance30 secondes
4e relance5 minutes
5e relance30 minutes

Après 5 échecs consécutifs, l'événement est marqué comme failed. Vous pouvez le rejouer manuellement depuis le tableau de bord ou l'API à tout moment.

Validation de signature

Lorsque vous configurez un fournisseur sur un endpoint, WebhookLens peut vérifier cryptographiquement la signature du webhook à l'aide de l'algorithme de signature du fournisseur. La vérification de signature (contrôle du HMAC par rapport à votre secret de signature) est actuellement disponible pour Stripe et GitHub. En cas d'échec de vérification, l'événement est signalé mais reste stocké et transmis (sauf si vous activez le mode strict).

Pour 9 fournisseurs supplémentaires, WebhookLens détecte et étiquette automatiquement la source en inspectant les en-têtes de signature courants — aucun secret requis. Cela vous permet de filtrer et d'inspecter les événements par fournisseur, même sans vérification cryptographique complète.

Exemple : vérification de signature Stripe

# Lors de la création de l'endpoint, définissez le fournisseur et le secret de signature
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_..."
  }'

Fournisseurs supportés

FournisseurEn-tête de signatureAlgorithmeSupport
StripeStripe-SignatureHMAC-SHA256 (timestamp + payload)Vérification
GitHubX-Hub-Signature-256HMAC-SHA256Vérification
ShopifyX-Shopify-Hmac-SHA256HMAC-SHA256 (Base64)Détection auto
SlackX-Slack-SignatureHMAC-SHA256 (timestamp + body)Détection auto
TwilioX-Twilio-SignatureHMAC-SHA1Détection auto
SendGridX-Twilio-Email-Event-Webhook-SignatureECDSADétection auto
PayPalPAYPAL-TRANSMISSION-SIGHMAC-SHA256Détection auto
PaddlePaddle-SignatureHMAC-SHA256 (timestamp + payload)Détection auto
LinearLinear-SignatureHMAC-SHA256Détection auto
AtlassianX-Hub-SignatureHMAC-SHA256Détection auto
DiscordX-Signature-Ed25519Ed25519Détection auto

Tableau de bord

Événements & Inspecteur

La page des événements affiche tous les webhooks entrants en temps réel avec actualisation automatique. Chaque ligne indique :

Cliquez sur un événement pour ouvrir l'inspecteur :

Endpoints

Les endpoints sont l'abstraction centrale. Chaque endpoint possède :

Analytique

Le tableau de bord analytique fournit des métriques en temps réel propulsées par ClickHouse :

Alertes

Configurez des alertes pour être notifié en cas de problème :

Les notifications peuvent être envoyées à Slack (via webhook entrant) ou à une URL webhook personnalisée.

# Créer une alerte
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/..."
  }'

Transforms & Routage

Transforms de payload

Les transforms vous permettent de modifier les payloads des webhooks avant leur transmission vers la cible. Utile pour enrichir des données, supprimer des champs sensibles ou adapter les payloads à votre format d'API.

Types de transforms

TypeDescriptionExemple
set_fieldDéfinir ou écraser un champ JSONAjouter source: "stripe" au corps
remove_fieldSupprimer un champ JSONSupprimer data.object.metadata
rename_fieldRenommer un champ JSONRenommer id en external_id
add_headerAjouter un en-tête de requêteAjouter X-Source: webhooklens
remove_headerSupprimer un en-tête de requêteSupprimer X-Internal-Token

Exemple : ajouter un champ et un en-tête

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"}
    ]
  }'

Test à blanc (dry-run)

Testez vos transforms sans effectuer la transmission :

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}
  }'

# Réponse :
# {"event": "payment.completed", "amount": 4999, "enriched": true}

Routage intelligent

Routez un seul webhook vers plusieurs destinations selon des conditions. Permet la distribution en éventail, le traitement conditionnel et les cibles de secours.

Conditions de routage

ConditionDescription
allToujours transmettre vers cette cible (éventail)
on_successTransmettre uniquement si la cible principale a retourné 2xx
on_failureTransmettre uniquement si la cible principale a retourné non-2xx ou a eu un timeout

Exemple : distribution vers 3 cibles

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"}
    ]
  }'

Référence API

L'URL de base de l'API est https://app.webhooklens.cloud. Les endpoints authentifiés nécessitent un token Bearer — soit un JWT obtenu lors de la connexion, soit une clé API créée dans Paramètres → Clés API (transmise via Authorization: Bearer whl_<clé>).

Authentification

POST /api/auth/signup

Créer un nouveau compte et un tenant.

curl -X POST https://app.webhooklens.cloud/api/auth/signup \
  -H "Content-Type: application/json" \
  -d '{
    "email": "vous@exemple.com",
    "password": "motdepassesecurise",
    "tenant_name": "mon-projet"
  }'

# Réponse : {"token": "eyJhbG...", "tenant": {"id": "...", "slug": "mon-projet"}}
POST /api/auth/login

S'authentifier et recevoir un token JWT.

curl -X POST https://app.webhooklens.cloud/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "vous@exemple.com", "password": "motdepassesecurise"}'

# Réponse : {"token": "eyJhbG..."}

API Endpoints

GET /api/endpoints

Lister tous les endpoints du tenant courant.

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

# Réponse : [{"id": "...", "slug": "stripe-prod", "target_url": "https://...", ...}]
POST /api/endpoints

Créer un nouvel endpoint.

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

Mettre à jour un endpoint (URL cible, fournisseur, transforms, routes).

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://nouvelle-cible.example.com/hook"}'

API Événements

GET /api/events

Lister les événements avec des filtres optionnels. Supporte la pagination.

# Lister les événements récents
curl "https://app.webhooklens.cloud/api/events?limit=50&status=failed" \
  -H "Authorization: Bearer YOUR_TOKEN"

# Filtrer par endpoint
curl "https://app.webhooklens.cloud/api/events?endpoint_id=EP_ID&limit=20" \
  -H "Authorization: Bearer YOUR_TOKEN"
POST /api/events/:id/replay

Rejouer un événement — renvoyer la requête originale à la cible.

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

# Réponse : {"status": "replayed", "response_code": 200, "latency_ms": 142}

API Analytique

GET /api/analytics/overview

Obtenir les statistiques agrégées du tenant.

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

# Réponse :
# {
#   "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 Facturation

Disponible en mode cloud uniquement.

GET /api/billing/quota

Obtenir l'utilisation actuelle et le quota du forfait.

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

# Réponse : {"plan": "starter", "events_used": 12847, "events_limit": 100000, ...}
POST /api/billing/checkout

Créer une session Stripe Checkout pour une mise à niveau.

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

# Réponse : {"checkout_url": "https://checkout.stripe.com/..."}
POST /api/billing/portal

Créer une session Stripe Billing Portal pour gérer les abonnements.

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

# Réponse : {"portal_url": "https://billing.stripe.com/..."}
POST /api/transforms/test

Tester un ensemble de transforms à blanc sur un payload d'exemple.


Serveur MCP

WebhookLens expose un serveur Model Context Protocol pour interroger vos données de webhooks directement depuis des assistants IA comme Claude. Posez vos questions en langage naturel — « qu'est-ce qui a échoué dans la dernière heure ? », « montre-moi le dernier événement Stripe », « rejoue l'événement EVT_123 » — et l'assistant appelle WebhookLens pour vous. Chaque outil est limité à votre espace de travail : un assistant ne voit jamais que vos propres données.

Connexion

Le serveur se trouve à l'adresse https://app.webhooklens.cloud/mcp et s'authentifie via OAuth. Aucune clé API à copier : vous vous connectez avec votre compte WebhookLens habituel et approuvez l'accès une seule fois.

Claude Code (CLI)

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

À la première utilisation, votre navigateur s'ouvre pour vous connecter à WebhookLens (mot de passe ou GitHub) et approuver l'accès. Ensuite, l'assistant peut appeler les outils ci-dessous.

Claude.ai (web)

Ajoutez un connecteur personnalisé avec l'URL https://app.webhooklens.cloud/mcp et effectuez la même connexion. Le connecteur web fonctionne uniquement via OAuth.

Outils disponibles

OutilDescription
list_endpointsListe tous les endpoints de webhooks de votre espace de travail
list_eventsListe les événements récents (résumés) — filtrage par endpoint, statut, fournisseur, type, recherche ou plage de temps
get_eventRécupère un événement complet : corps de la requête, en-têtes, réponse et dernière erreur
analytics_overviewStatistiques de livraison sur une période : totaux, taux de succès/échec, percentiles de latence
analytics_errorsErreurs de livraison récurrentes les plus fréquentes, groupées par endpoint et message
list_retriesÉvénements actuellement en file d'attente pour une nouvelle tentative automatique
replay_eventRe-livre un événement stocké vers l'URL cible de son propre endpoint (journalisé)

replay_event est le seul outil qui écrit quoi que ce soit ; les six autres sont en lecture seule.


Besoin d'aide ? Contactez-nous à support@webhooklens.cloud.