Developers

Webhook events

Events sent as POST to a subscription URL.

The reference text comes from the contract and is written in French.

revision.processing.completed

Une révision est entièrement traitée

Livraison au format Standard Webhooks : en-têtes webhook-id (stable entre les essais), webhook-timestamp (secondes Unix) et webhook-signature (v1,<base64 HMAC-SHA256(clé, id.timestamp.corps)>, la clé étant le secret whsec_ décodé du base64). Les bibliothèques Standard Webhooks vérifient tout cela. Refuser un horodatage de plus de 5 minutes. Répondre 2xx en moins de 10 s ; sinon nouvel essai à délai croissant (1 min, 5 min, 30 min, 2 h), 5 essais en tout. Un 4xx autre que 408 et 429 arrête les essais ; une redirection n'est jamais suivie. job_id, quand il est présent, est celui que GET /api/v1/jobs/{job_id} suit.

Example
{
  "type": "revision.processing.completed",
  "timestamp": "2026-10-18T08:55:00Z",
  "data": {
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "model_id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
    "job_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "status": "COMPLETE"
  }
}

revision.processing.failed

Le traitement d'une révision a échoué

Envoyé quand une étape passe en ERROR, comme le montre GET /api/v1/revisions/{revision_id}. Une relance automatique qui réussit ensuite donne revision.processing.completed.

Example
{
  "type": "revision.processing.failed",
  "timestamp": "2026-10-18T08:55:00Z",
  "data": {
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "model_id": "9d2e7f10-6c4b-4f2a-8e11-2a7c5b3d9e01",
    "job_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "status": "ERROR",
    "error_message": "Fichier IFC illisible"
  }
}

ids_check.completed

Un contrôle IDS est terminé

Example
{
  "type": "ids_check.completed",
  "timestamp": "2026-10-18T09:02:11Z",
  "data": {
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
    "requirement_revision_id": "3d4e5f6a-7b8c-4d9e-8f0a-1b2c3d4e5f6a",
    "job_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
    "status": "COMPLETE",
    "score_percent": 87.5
  }
}

ids_check.failed

Un contrôle IDS a échoué

Example
{
  "type": "ids_check.failed",
  "timestamp": "2026-10-18T09:02:11Z",
  "data": {
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b",
    "requirement_set_id": "2c3d4e5f-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
    "requirement_revision_id": "3d4e5f6a-7b8c-4d9e-8f0a-1b2c3d4e5f6a",
    "status": "ERROR",
    "error_message": "Le contrôle n'a pas produit de résultat dans le délai"
  }
}

export.ready

Un export est prêt à télécharger

Example
{
  "type": "export.ready",
  "timestamp": "2026-10-21T07:59:40Z",
  "data": {
    "job_id": "1f2e3d4c-5b6a-4978-8a1b-2c3d4e5f6a7b",
    "revision_id": "4f6a1b2c-3d4e-4f50-8a6b-7c8d9e0f1a2b"
  }
}