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

# Look webhooks

> Shoppable-look creation and deletion event payloads.

Look webhooks deliver shoppable-look snapshots, including the products attached
to the look at the time of the event.

<Warning>
  Look events use the original event envelope. Use `eventId` and `eventType`;
  `schemaVersion`, `subject`, and `resourceVersion` are not present.
</Warning>

## Events

| Event          | Semantics                                           |
| -------------- | --------------------------------------------------- |
| `look.created` | Full look snapshot immediately after creation       |
| `look.deleted` | Final available snapshot before the look is removed |

There is no public `look.updated` event today.

## Envelope

| Field            | Type             | Meaning                                          |
| ---------------- | ---------------- | ------------------------------------------------ |
| `eventId`        | string           | Stable recipient idempotency key                 |
| `eventType`      | look event key   | `look.created` or `look.deleted`                 |
| `organizationId` | string           | Tenant boundary                                  |
| `lookId`         | string           | Stable OmniCommerce look ID                      |
| `changedFields`  | string array     | Empty for creation; deletion marker for deletion |
| `occurredAt`     | ISO timestamp    | Time the event occurred                          |
| `source`         | string, optional | Internal workflow provenance                     |
| `data.look`      | object           | Complete look snapshot                           |

## Look snapshot

The snapshot includes look identity and creative fields (`title`, `status`,
`subject`, `style`, `season`, `timeOfDay`, `city`, prompts and notes), hero image
identity and URL, creator and lifecycle timestamps, `productCount`, and the
attached `products` array.

Each attached product contains `id`, `name`, `sku`, `brand`, `price`, `currency`,
and `imageUrl`. Product price values use the look contract's existing JSON-number
representation and must always be interpreted with their currency.

## Example creation

```json theme={null}
{
  "eventId": "evt_e8b3214bea5446d39eaeef321a5cad17",
  "eventType": "look.created",
  "organizationId": "org_123",
  "lookId": "look_456",
  "changedFields": [],
  "occurredAt": "2026-08-29T03:30:00.000Z",
  "source": "looks.create",
  "data": {
    "look": {
      "id": "look_456",
      "organizationId": "org_123",
      "title": "Spring edit",
      "status": "draft",
      "subject": "model",
      "style": "Chic",
      "season": "Spring",
      "timeOfDay": "Day",
      "city": "Paris",
      "additionalNotes": null,
      "stylePrompt": "Create a polished shoppable look.",
      "heroImageTagId": null,
      "heroImageUrl": "https://cdn.example.com/look.png",
      "createdBy": "user_1",
      "createdAt": "2026-08-29T03:30:00.000Z",
      "updatedAt": "2026-08-29T03:30:00.000Z",
      "publishedAt": null,
      "productCount": 1,
      "products": [
        {
          "id": "prod_1",
          "name": "Bag",
          "sku": "BAG-1",
          "brand": "Omni",
          "price": 175.7,
          "currency": "EUR",
          "imageUrl": "https://cdn.example.com/bag.png"
        }
      ]
    }
  }
}
```

Deduplicate by `eventId`, partition by `organizationId` and `lookId`, and remove
or tombstone the local record on `look.deleted`.
