> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bold-factory.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Datos enviados

> Interpreta la estructura de los datos enviados por webhooks.

Cada webhook envía un cuerpo JSON con un sobre común y un campo `payload` específico del evento. El contrato concreto depende de `eventName`, `majorVersion` y `minorVersion`.

## Campos que debes esperar

| Campo           | Uso                                                           |
| --------------- | ------------------------------------------------------------- |
| `attemptId`     | Identifica el intento de entrega.                             |
| `workspace`     | Identifica el espacio de trabajo que emitió el evento.        |
| `eventId`       | Permite deduplicar el evento de negocio entre reintentos.     |
| `eventName`     | Indica qué ocurrió.                                           |
| `entity`        | Entidad principal afectada por el evento.                     |
| `entityId`      | Identificador de la entidad principal.                        |
| `occurredOn`    | Fecha y hora en que ocurrió el evento.                        |
| `majorVersion`  | Versión mayor del contrato.                                   |
| `minorVersion`  | Versión menor del contrato.                                   |
| `payload`       | Datos concretos del evento.                                   |
| `attemptNumber` | Número de intento de entrega.                                 |
| `isLastAttempt` | Indica si Bold considera que es el último intento automático. |

<Info>
  No todos los eventos incluyen una copia completa de la entidad. Diseña tu consumidor para llamar a la API cuando necesite el estado actual.
</Info>

## Ejemplo orientativo

```json theme={null}
{
  "attemptId": "whatt_01J1D4Y7KTX8N8Y3H7A0",
  "workspace": "acme-industrial",
  "eventId": "7db3a285-87f0-4b78-a312-493a2e280f2d",
  "eventName": "Planning.SalesOrder.LineConfirmed",
  "entity": "Planning.SalesOrder",
  "entityId": "sales-order-123",
  "occurredOn": "2026-06-25T10:30:00Z",
  "majorVersion": 1,
  "minorVersion": 0,
  "payload": {
    "orderId": "sales-order-123",
    "lineId": "sales-order-line-456",
    "skuId": "sku-789",
    "quantity": 24,
    "pendingQuantity": 24
  },
  "attemptNumber": 1,
  "isLastAttempt": false
}
```

## Buenas prácticas

<Accordion title="Versiona por majorVersion">
  Mantén validadores separados si consumes más de una versión mayor del mismo evento. No asumas que dos versiones tienen los mismos campos.
</Accordion>

<Accordion title="Usa identificadores, no nombres">
  Los nombres visibles pueden cambiar. Usa `id` o `reference` para reconciliar datos entre sistemas.
</Accordion>

<Accordion title="Guarda los datos originales">
  Conserva el JSON recibido durante el tiempo necesario para auditoría. Facilita depuración si un sistema externo falla.
</Accordion>

<Warning>
  Trata los datos enviados como información sensible. Pueden contener referencias operativas, clientes, proveedores o cantidades de producción.
</Warning>

## Deduplicación

Usa `eventId` para evitar procesar dos veces el mismo evento de negocio. Usa `attemptId` solo para auditar una entrega concreta. Un reintento conserva el mismo `eventId`, pero genera un nuevo `attemptId`.

<Tip>
  Si recibes el mismo `eventId` con otro `attemptNumber`, devuelve `2xx` después de confirmar que ya lo procesaste.
</Tip>
