Saltar al contenido

Tipos de evento

El envoltorio

{ id, type, apiVersion, createdAt, workspaceId, actor, data }. id es el id del evento (evt_…), que también se envía como webhook-id. apiVersion es la versión de la carga útil con la que se creó el endpoint (2026-09-01).

actor indica quién causó el evento: user (alguien en la app), api_key (con su id), staff o system (escaneos, tareas, comprobaciones de dominio). Una integración que escribe de vuelta a través de la API puede omitir los eventos que causó su propia clave, lo que evita bucles.

Pueden aparecer en cualquier momento tipos de evento y campos nuevos: ignora lo que no conozcas. Un cambio que rompería un analizador se publica como una apiVersion nueva a la que los endpoints existentes deciden unirse.

Eventos

code.createdSe creó un código en la app o a través de la API. Las tandas en lote envían bulk.completed.
code.updatedCambió el destino, el contenido, el nombre, el diseño, las reglas, el slug, la carpeta o el dominio.
code.status_changedPausado, reanudado, o desactivado y reactivado por Dotwick.
code.deletedSe eliminó un código; su enlace corto responde 410.
scan.createdUna persona escaneó un código. Los bots y las vistas previas de enlaces nunca se envían.
bulk.completedTerminó una tanda en lote: un evento por tanda con sus recuentos.
export.completedUna exportación en ZIP terminó o falló. Consulta la exportación para obtener un enlace de descarga nuevo.
domain.status_changedUn dominio personalizado pasó a otro estado (verified, active, failed, released).
form.submittedAlguien respondió un formulario alojado. Incluye las respuestas (datos personales).
gs1.recall_changedUn lote, una variante o un número de serie GS1 se retiró, se retiró de la venta o se levantó la retirada.
alert.firedSe activó una alerta de escaneos: un escaneo, N escaneos en M minutos o ningún escaneo durante D días.
webhook.testSolo lo envía Send test event. No puedes suscribirte a él.

Cargas útiles

Un ejemplo de cada evento, tal como se entrega.

code.created

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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

carga útil
{  "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"  }}

Campos de bulk.completed

Un evento por cada tanda terminada, sea cual sea su tamaño: no un code.created por código. Lleva solo recuentos: obtén los códigos de la tanda.

data.bulkImportIdstringID de la tanda (blk_…).
data.status"succeeded" | "partially_succeeded" | "failed" | "canceled"Cómo terminó la tanda.
data.totalnumberElementos de la solicitud (filas de un archivo).
data.creatednumberCódigos creados.
data.failednumberElementos válidos cuyo código no se pudo crear durante la ejecución: se pueden reintentar.
data.invalidnumberElementos omitidos antes de empezar la tanda, por datos incorrectos o ausentes.
data.cancelednumberElementos sin procesar porque se canceló la tanda.
data.folderIdstring | nullCarpeta en la que se archivaron los códigos, o null para la raíz del espacio de trabajo.
data.exportIdstring | nullID de la exportación en ZIP cuando la tanda pidió una; si no, null.