Skip to content

API Webhooks

Recevez des notifications en temps réel pour les événements CyberOrigen.

Professionnel et Entreprise

Les webhooks sont disponibles sur les plans Professionnel et Entreprise.

Vue d'ensemble

Les webhooks vous permettent de recevoir des rappels HTTP lorsque des événements se produisent dans CyberOrigen. Configurez des points de terminaison pour recevoir des notifications sur les analyses, les découvertes, les changements de conformité, et plus encore.

Points de terminaison

MéthodePoint de terminaisonDescription
GET/api/v1/webhooksLister les webhooks
POST/api/v1/webhooksCréer un webhook
GET/api/v1/webhooks/{id}Obtenir les détails d'un webhook
PATCH/api/v1/webhooks/{id}Mettre à jour un webhook
DELETE/api/v1/webhooks/{id}Supprimer un webhook
POST/api/v1/webhooks/{id}/testEnvoyer un événement de test
GET/api/v1/webhooks/{id}/deliveriesLister l'historique des livraisons

Créer un webhook

bash
POST /api/v1/webhooks
Content-Type: application/json

{
  "name": "Security Alerts",
  "url": "https://your-server.com/webhooks/cyberorigen",
  "events": [
    "scan.completed",
    "vulnerability.critical",
    "vulnerability.high"
  ],
  "secret": "your-webhook-secret",
  "active": true
}

Paramètres

ChampTypeRequisDescription
namestringOuiNom descriptif
urlstringOuiURL du point de terminaison HTTPS
eventsarrayOuiÉvénements auxquels s'abonner
secretstringNonSecret de signature pour la vérification
activebooleanNonActiver/désactiver le webhook

Réponse

json
{
  "id": "webhook_abc123",
  "name": "Security Alerts",
  "url": "https://your-server.com/webhooks/cyberorigen",
  "events": ["scan.completed", "vulnerability.critical", "vulnerability.high"],
  "active": true,
  "created_at": "2025-12-21T10:00:00Z"
}

Événements disponibles

Événements d'analyse

ÉvénementDescription
scan.createdNouvelle analyse initiée
scan.startedExécution de l'analyse démarrée
scan.progressPhase d'analyse terminée
scan.completedAnalyse terminée avec succès
scan.failedÉchec de l'analyse avec erreur

Événements de vulnérabilité

ÉvénementDescription
vulnerability.foundNouvelle vulnérabilité découverte
vulnerability.criticalDécouverte de sévérité critique
vulnerability.highDécouverte de sévérité élevée
vulnerability.status_changedStatut de la découverte mis à jour
vulnerability.resolvedDécouverte marquée comme résolue

Événements de conformité

ÉvénementDescription
control.status_changedStatut du contrôle mis à jour
evidence.uploadedNouvelle preuve ajoutée
evidence.expiringPreuve approchant de l'expiration
framework.score_changedScore de conformité modifié
audit.request_createdNouvelle demande d'auditeur

Événements de sécurité

ÉvénementDescription
quarantine.threat_detectedMalware détecté dans le téléchargement
user.login_failedTentative de connexion échouée
user.mfa_disabledMFA désactivé sur le compte

Charge utile du webhook

Toutes les livraisons de webhook incluent :

json
{
  "id": "delivery_xyz789",
  "event": "scan.completed",
  "timestamp": "2025-12-21T15:30:00Z",
  "data": {
    // Données spécifiques à l'événement
  }
}

Exemple : Analyse terminée

json
{
  "id": "delivery_xyz789",
  "event": "scan.completed",
  "timestamp": "2025-12-21T15:30:00Z",
  "data": {
    "scan_id": "scan_abc123",
    "target": "example.com",
    "status": "completed",
    "duration_seconds": 2700,
    "findings": {
      "total": 12,
      "critical": 1,
      "high": 3,
      "medium": 5,
      "low": 3
    }
  }
}

Exemple : Vulnérabilité critique

json
{
  "id": "delivery_abc456",
  "event": "vulnerability.critical",
  "timestamp": "2025-12-21T15:35:00Z",
  "data": {
    "finding_id": "finding_xyz789",
    "title": "Remote Code Execution",
    "severity": "critical",
    "cvss_score": 9.8,
    "target": "example.com",
    "affected_component": "https://example.com/api/upload",
    "cve_ids": ["CVE-2024-1234"],
    "scan_id": "scan_abc123"
  }
}

Vérification de signature

Si vous fournissez un secret, CyberOrigen signe chaque livraison avec HMAC-SHA256.

En-têtes

X-CyberOrigen-Signature: sha256=abc123...
X-CyberOrigen-Event: scan.completed
X-CyberOrigen-Delivery: delivery_xyz789

Exemple de vérification (Node.js)

javascript
const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

// Express middleware
app.post('/webhooks/cyberorigen', (req, res) => {
  const signature = req.headers['x-cyberorigen-signature'];
  const payload = JSON.stringify(req.body);

  if (!verifySignature(payload, signature, process.env.WEBHOOK_SECRET)) {
    return res.status(401).send('Invalid signature');
  }

  // Process webhook...
  res.status(200).send('OK');
});

Exemple de vérification (Python)

python
import hmac
import hashlib

def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = 'sha256=' + hmac.new(
        secret.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, expected)

# Flask route
@app.route('/webhooks/cyberorigen', methods=['POST'])
def webhook():
    signature = request.headers.get('X-CyberOrigen-Signature')

    if not verify_signature(request.data, signature, WEBHOOK_SECRET):
        return 'Invalid signature', 401

    # Process webhook...
    return 'OK', 200

Tester un webhook

Envoyer un événement de test pour vérifier votre point de terminaison :

bash
POST /api/v1/webhooks/{webhook_id}/test

Réponse

json
{
  "delivery_id": "delivery_test123",
  "status": "success",
  "response_code": 200,
  "response_time_ms": 145
}

Historique des livraisons

Voir les tentatives de livraison de webhook :

bash
GET /api/v1/webhooks/{webhook_id}/deliveries

Réponse

json
{
  "items": [
    {
      "id": "delivery_xyz789",
      "event": "scan.completed",
      "status": "success",
      "response_code": 200,
      "response_time_ms": 145,
      "attempts": 1,
      "created_at": "2025-12-21T15:30:00Z",
      "delivered_at": "2025-12-21T15:30:00Z"
    },
    {
      "id": "delivery_abc456",
      "event": "vulnerability.critical",
      "status": "failed",
      "response_code": 500,
      "response_time_ms": 2000,
      "attempts": 3,
      "error": "Connection timeout",
      "created_at": "2025-12-21T15:35:00Z",
      "next_retry": "2025-12-21T16:35:00Z"
    }
  ],
  "total": 156
}

Politique de nouvelle tentative

Les livraisons échouées sont automatiquement retentées :

TentativeDélai
1Immédiat
25 minutes
330 minutes
42 heures
58 heures

Après 5 tentatives échouées, la livraison est marquée comme échouée et le webhook est désactivé si les échecs persistent.

Bonnes pratiques

  1. Toujours vérifier les signatures pour garantir l'authenticité
  2. Répondre rapidement (dans les 30 secondes) pour éviter les délais d'attente
  3. Retourner un statut 2xx pour accuser réception
  4. Traiter de manière asynchrone pour les opérations de longue durée
  5. Implémenter l'idempotence en utilisant les identifiants de livraison
  6. Surveiller l'état des livraisons et corriger rapidement les points de terminaison défaillants

Limites de taux

PlanWebhooksÉvénements/Heure
Professional51 000
EnterpriseIllimité10 000

Updated at:

Agentic AI-Powered Security & Compliance