Aller au contenu

Types d’événements

L’enveloppe

{ id, type, apiVersion, createdAt, workspaceId, actor, data }. id est l’identifiant de l’événement (evt_…), aussi envoyé comme webhook-id. apiVersion est la version de contenu avec laquelle l’endpoint a été créé (2026-09-01).

actor indique qui a provoqué l’événement : user (quelqu’un dans l’application), api_key (avec son id), staff ou system (scans, tâches, vérifications de domaine). Une intégration qui écrit en retour via l’API peut ignorer les événements causés par sa propre clé, ce qui évite les boucles.

De nouveaux types d’événements et de nouveaux champs peuvent apparaître à tout moment : ignorez ce que vous ne connaissez pas. Un changement qui casserait un analyseur est livré comme une nouvelle apiVersion que les endpoints existants choisissent d’adopter.

Événements

code.createdUn code a été créé dans l’application ou via l’API. Les séries en masse envoient bulk.completed.
code.updatedLa destination, le contenu, le nom, le design, les règles, le slug, le dossier ou le domaine a changé.
code.status_changedMis en pause, repris, ou désactivé puis réactivé par Dotwick.
code.deletedUn code a été supprimé ; son lien court répond 410.
scan.createdUne personne a scanné un code. Les robots et les aperçus de liens ne sont jamais envoyés.
bulk.completedUne série en masse est terminée : un événement par série avec ses compteurs.
export.completedUn export ZIP est terminé ou a échoué. Récupérez l’export pour obtenir un nouveau lien de téléchargement.
domain.status_changedUn domaine personnalisé a changé de statut (verified, active, failed, released).
form.submittedQuelqu’un a répondu à un formulaire hébergé. Contient les réponses (données personnelles).
gs1.recall_changedUn lot, une variante ou un numéro de série GS1 a été rappelé, retiré de la vente ou remis en vente.
alert.firedUne alerte de scans s’est déclenchée : un scan, N scans en M minutes ou aucun scan pendant D jours.
webhook.testEnvoyé uniquement par Send test event. Vous ne pouvez pas vous y abonner.

Contenus

Un exemple de chaque événement, tel qu’il est envoyé.

code.created

contenu
{  "id": "evt_018f3k2m9q4x7c1v",  "type": "code.created",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "api_key",    "userId": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",    "apiKeyId": "key_4f2a9c1e7b3d5a60"  },  "data": {    "code": {      "id": "qr_8841ce2mxk",      "workspaceId": "ws_8f21ac4e9d0b7c11",      "name": "Van fleet – unit 14",      "type": "url",      "dynamic": true,      "status": "active",      "slug": "Xq7mK2p",      "domainId": null,      "shortUrl": "https://dotwick.co/Xq7mK2p",      "content": {        "type": "url",        "url": "https://example.com/fleet/van-014"      },      "design": {        "pattern": "rounded",        "eyes": {          "frame": "circle",          "ball": "circle"        },        "colors": {          "fg": "#18181B",          "bg": "#FFFFFF"        }      },      "rules": {        "routes": [],        "expiresAt": null,        "scanLimit": null,        "inactiveUrl": null,        "passwordProtected": false      },      "folderId": "fld_8k2m4q7x",      "templateId": null,      "createdBy": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",      "createdAt": "2026-09-10T09:41:08.000Z",      "updatedAt": "2026-09-10T09:41:08.000Z",      "scans": 0    }  }}

code.updated

contenu
{  "id": "evt_028f3k2m9q4x7c1v",  "type": "code.updated",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "user",    "userId": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",    "apiKeyId": null  },  "data": {    "code": {      "id": "qr_8841ce2mxk",      "workspaceId": "ws_8f21ac4e9d0b7c11",      "name": "Van fleet – unit 14",      "type": "url",      "dynamic": true,      "status": "active",      "slug": "Xq7mK2p",      "domainId": null,      "shortUrl": "https://dotwick.co/Xq7mK2p",      "content": {        "type": "url",        "url": "https://example.com/fleet/van-014-spring"      },      "design": {        "pattern": "rounded",        "eyes": {          "frame": "circle",          "ball": "circle"        },        "colors": {          "fg": "#18181B",          "bg": "#FFFFFF"        }      },      "rules": {        "routes": [],        "expiresAt": null,        "scanLimit": null,        "inactiveUrl": null,        "passwordProtected": false      },      "folderId": "fld_8k2m4q7x",      "templateId": null,      "createdBy": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",      "createdAt": "2026-09-10T09:41:08.000Z",      "updatedAt": "2026-09-12T14:03:51.000Z",      "scans": 0    },    "changed": [      "content"    ],    "previousDestination": "https://example.com/fleet/van-014"  }}

code.status_changed

contenu
{  "id": "evt_038f3k2m9q4x7c1v",  "type": "code.status_changed",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "user",    "userId": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",    "apiKeyId": null  },  "data": {    "code": {      "id": "qr_8841ce2mxk",      "workspaceId": "ws_8f21ac4e9d0b7c11",      "name": "Van fleet – unit 14",      "type": "url",      "dynamic": true,      "status": "paused",      "slug": "Xq7mK2p",      "domainId": null,      "shortUrl": "https://dotwick.co/Xq7mK2p",      "content": {        "type": "url",        "url": "https://example.com/fleet/van-014"      },      "design": {        "pattern": "rounded",        "eyes": {          "frame": "circle",          "ball": "circle"        },        "colors": {          "fg": "#18181B",          "bg": "#FFFFFF"        }      },      "rules": {        "routes": [],        "expiresAt": null,        "scanLimit": null,        "inactiveUrl": null,        "passwordProtected": false      },      "folderId": "fld_8k2m4q7x",      "templateId": null,      "createdBy": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",      "createdAt": "2026-09-10T09:41:08.000Z",      "updatedAt": "2026-09-12T14:03:51.000Z",      "scans": 0    },    "from": "active",    "to": "paused",    "reason": "user"  }}

code.deleted

contenu
{  "id": "evt_048f3k2m9q4x7c1v",  "type": "code.deleted",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "api_key",    "userId": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",    "apiKeyId": "key_4f2a9c1e7b3d5a60"  },  "data": {    "codeId": "qr_8841ce2mxk",    "name": "Van fleet – unit 14",    "slug": "Xq7mK2p",    "deletedAt": "2026-09-12T14:03:51.000Z"  }}

scan.created

contenu
{  "id": "evt_058f3k2m9q4x7c1v",  "type": "scan.created",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "system",    "userId": null,    "apiKeyId": null  },  "data": {    "ts": "2026-09-12T14:03:51.000Z",    "codeId": "qr_8841ce2mxk",    "codeName": "Van fleet – unit 14",    "country": "US",    "city": "Portland",    "device": "mobile",    "os": "iOS 18",    "browser": "Safari 18",    "source": "qr",    "isBot": false  }}

bulk.completed

contenu
{  "id": "evt_068f3k2m9q4x7c1v",  "type": "bulk.completed",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "system",    "userId": null,    "apiKeyId": null  },  "data": {    "bulkImportId": "blk_9f24ab7c3e1d5f80",    "status": "partially_succeeded",    "total": 50,    "created": 47,    "failed": 1,    "invalid": 2,    "canceled": 0,    "folderId": "fld_8k2m4q7x",    "exportId": "exp_2m7x4k9q1c8v3b6n"  }}

export.completed

contenu
{  "id": "evt_078f3k2m9q4x7c1v",  "type": "export.completed",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "system",    "userId": null,    "apiKeyId": null  },  "data": {    "exportId": "exp_2m7x4k9q1c8v3b6n",    "status": "succeeded",    "counts": {      "total": 47,      "succeeded": 47,      "failed": 0    },    "formats": [      "svg",      "pdf"    ],    "expiresAt": "2026-09-19T14:03:51.000Z",    "bulkImportId": "blk_9f24ab7c3e1d5f80"  }}

domain.status_changed

contenu
{  "id": "evt_088f3k2m9q4x7c1v",  "type": "domain.status_changed",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "system",    "userId": null,    "apiKeyId": null  },  "data": {    "domainId": "dom_5q8w2e7r4t1y9u3i",    "hostname": "qr.example.com",    "from": "ssl_issuing",    "to": "active"  }}

form.submitted

contenu
{  "id": "evt_098f3k2m9q4x7c1v",  "type": "form.submitted",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "system",    "userId": null,    "apiKeyId": null  },  "data": {    "codeName": "Open house – RSVP",    "submission": {      "id": "fsb_6h3j8k1l4z7x2c5v",      "codeId": "qr_8841ce2mxk",      "submittedAt": "2026-09-12T14:03:51.000Z",      "data": {        "name": "Sam Okafor",        "email": "sam@example.com",        "guests": "2"      },      "country": "US"    }  }}

gs1.recall_changed

contenu
{  "id": "evt_108f3k2m9q4x7c1v",  "type": "gs1.recall_changed",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "user",    "userId": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",    "apiKeyId": null  },  "data": {    "codeId": "qr_8841ce2mxk",    "gtin14": "09506000134352",    "qualifier": {      "id": "gsq_4v8n2k7m1x5c9b3q",      "codeId": "qr_8841ce2mxk",      "key": "10:LOT-42",      "level": "batch",      "cpv": null,      "batch": "LOT-42",      "serial": null,      "links": [],      "defaultLinkType": null,      "state": "recalled",      "recall": {        "title": "Do not use batch LOT-42",        "body": "Northwind withdrew this batch after a supplier issue. Return the jar for a full refund.",        "date": "2026-09-12",        "contact": "recalls@example.com"      },      "expiry": "271231",      "printed": 5000,      "note": null,      "stateChangedAt": "2026-09-12T14:03:51.000Z",      "createdAt": "2026-09-10T09:41:08.000Z",      "updatedAt": "2026-09-12T14:03:51.000Z"    },    "from": "clear",    "to": "recalled"  }}

alert.fired

contenu
{  "id": "evt_128f3k2m9q4x7c1v",  "type": "alert.fired",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "system",    "userId": null,    "apiKeyId": null  },  "data": {    "ruleId": "alr_3d9k2m7q4x8c1v5n",    "ruleName": "Spring menu: 50 scans in 10 minutes",    "kind": "threshold",    "scope": {      "kind": "folder",      "codeId": null,      "folderId": "fld_8k2m4q7x"    },    "codeId": null,    "codeName": null,    "scans": 50,    "windowStart": "2026-09-12T13:53:51.000Z",    "windowEnd": "2026-09-12T14:03:51.000Z",    "firedAt": "2026-09-12T14:03:51.000Z"  }}

webhook.test

contenu
{  "id": "evt_118f3k2m9q4x7c1v",  "type": "webhook.test",  "apiVersion": "2026-09-01",  "createdAt": "2026-09-12T14:03:51.000Z",  "workspaceId": "ws_8f21ac4e9d0b7c11",  "actor": {    "kind": "user",    "userId": "u8Hk2LmN0pQ4rS6tV8wX0yZ2aB4cD6eF",    "apiKeyId": null  },  "data": {    "endpointId": "whe_3k8m2q9x7c4v1b6n",    "message": "Test event from Dotwick"  }}

Champs de bulk.completed

Un événement par série terminée, quelle que soit sa taille, et non un code.created par code. Il ne contient que des compteurs : récupérez les codes depuis la série.

data.bulkImportIdstringIdentifiant de la série (blk_…).
data.status"succeeded" | "partially_succeeded" | "failed" | "canceled"Comment la série s’est terminée.
data.totalnumberÉléments de la requête (lignes d’un fichier).
data.creatednumberCodes créés.
data.failednumberÉléments valides dont le code n’a pas pu être créé pendant la série : réessayable.
data.invalidnumberÉléments ignorés avant le début de la série, pour données incorrectes ou manquantes.
data.cancelednumberÉléments non traités parce que la série a été annulée.
data.folderIdstring | nullDossier dans lequel les codes ont été rangés, ou null pour la racine de l’espace de travail.
data.exportIdstring | nullIdentifiant de l’export ZIP quand la série en a demandé un, sinon null.