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

# Revalidate payload

> JSON body Enad sends to your revalidate endpoint for each content item.

Each revalidate request contains a single JSON object. The `type` field is a discriminator (`product`, `category`, or `collection`); remaining fields depend on the content type.

All UUIDs are serialized as strings. Translation fields are arrays of `{ locale, value }` objects converted from Enad's locale maps.

## Common types

### Translation

| Field    | Type     | Description                          |
| -------- | -------- | ------------------------------------ |
| `locale` | `string` | Locale code (for example `en`, `sv`) |
| `value`  | `string` | Translated string for that locale    |

Non-string values in the source locale map are serialized as an empty string.

## Product

Sent when a product (or its channel content) changes.

```json theme={null}
{
  "type": "product",
  "id": "0195a1b2-c3d4-7890-abcd-ef1234567890",
  "name": "Base Product",
  "slug": "base-product",
  "sku": "SKU-1",
  "translations_name": [
    { "locale": "en", "value": "Base EN" },
    { "locale": "sv", "value": "Base SV" }
  ],
  "translations_slug": [
    { "locale": "en", "value": "base-en" },
    { "locale": "sv", "value": "base-sv" }
  ]
}
```

| Field               | Type            | Description                                                 |
| ------------------- | --------------- | ----------------------------------------------------------- |
| `type`              | `"product"`     | Content discriminator                                       |
| `id`                | `string` (UUID) | Product ID                                                  |
| `name`              | `string`        | Display name (channel override when endpoint has a channel) |
| `slug`              | `string`        | URL slug (channel override when endpoint has a channel)     |
| `sku`               | `string`        | Stock keeping unit (always from base product)               |
| `translations_name` | `Translation[]` | Localized names                                             |
| `translations_slug` | `Translation[]` | Localized slugs                                             |

### Channel override example

When the endpoint is tied to a channel and channel content exists:

```json theme={null}
{
  "type": "product",
  "id": "0195a1b2-c3d4-7890-abcd-ef1234567890",
  "name": "Channel Product",
  "slug": "channel-product",
  "sku": "SKU-1",
  "translations_name": [
    { "locale": "en", "value": "Channel Product EN" }
  ],
  "translations_slug": [
    { "locale": "en", "value": "channel-product-en" }
  ]
}
```

## Category

Sent when a category changes.

```json theme={null}
{
  "type": "category",
  "id": "0195a1b2-c3d4-7890-abcd-ef1234567890",
  "name": "Base Category",
  "slug": "base-category",
  "uri": "/base-category",
  "translations_name": [
    { "locale": "en", "value": "Category EN" }
  ],
  "translations_slug": [
    { "locale": "en", "value": "category-en" }
  ],
  "translations_uri": [
    { "locale": "en", "value": "/category-en" }
  ]
}
```

| Field               | Type            | Description           |
| ------------------- | --------------- | --------------------- |
| `type`              | `"category"`    | Content discriminator |
| `id`                | `string` (UUID) | Category ID           |
| `name`              | `string`        | Display name          |
| `slug`              | `string`        | URL slug              |
| `uri`               | `string`        | Canonical path or URI |
| `translations_name` | `Translation[]` | Localized names       |
| `translations_slug` | `Translation[]` | Localized slugs       |
| `translations_uri`  | `Translation[]` | Localized URIs        |

## Collection

Sent when a collection changes.

```json theme={null}
{
  "type": "collection",
  "id": "0195a1b2-c3d4-7890-abcd-ef1234567890",
  "name": "Base Collection",
  "slug": "base-collection",
  "uri": "/base-collection",
  "translations_name": [
    { "locale": "en", "value": "Collection EN" }
  ],
  "translations_slug": [
    { "locale": "en", "value": "collection-en" }
  ],
  "translations_uri": [
    { "locale": "en", "value": "/collection-en" }
  ]
}
```

| Field               | Type            | Description           |
| ------------------- | --------------- | --------------------- |
| `type`              | `"collection"`  | Content discriminator |
| `id`                | `string` (UUID) | Collection ID         |
| `name`              | `string`        | Display name          |
| `slug`              | `string`        | URL slug              |
| `uri`               | `string`        | Canonical path or URI |
| `translations_name` | `Translation[]` | Localized names       |
| `translations_slug` | `Translation[]` | Localized slugs       |
| `translations_uri`  | `Translation[]` | Localized URIs        |

## Batch delivery

When multiple items are pending for the same endpoint, Enad sends **one HTTP request per item**, not a batch array. Requests may arrive concurrently. Your endpoint should be idempotent per `type` + `id`.
