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

# Generate or publish a product catalog feed for ChatGPT, TikTok Shop, Google…

> Catalog feed generated or delivered

### Path parameters

<ParamField path="tenant_id" type="string" required>
  Tenant identifier
</ParamField>

### Request body

`object`

<ParamField body="channel" type="string">
  Catalog feed channel (default `chat_gpt`)
</ParamField>

<ParamField body="format" type="string">
  Catalog feed format (default `json`)
</ParamField>

<ParamField body="merchant" type="string" />

<ParamField body="maxProducts" type="integer" />

<ParamField body="target" type="object" />

### Response

`object`

<ResponseField name="tenantId" type="string" required />

<ResponseField name="success" type="boolean" required />

<ResponseField name="channel" type="string" required>
  Catalog feed channel (default `chat_gpt`)
</ResponseField>

<ResponseField name="format" type="string" required>
  Catalog feed format (default `json`)
</ResponseField>

<ResponseField name="productCount" type="integer" required />

<ResponseField name="totalAvailable" type="integer" required />

<ResponseField name="generatedAt" type="string (date-time)" required />

<ResponseField name="delivery" type="object">
  Delivery result when a `target` was supplied; null otherwise
</ResponseField>

<ResponseField name="feed" type="object" required>
  <Expandable title="feed">
    <ResponseField name="feedMetadata" type="object" required />

    <ResponseField name="channel" type="string" required>
      Catalog feed channel (default `chat_gpt`)
    </ResponseField>

    <ResponseField name="format" type="string" required>
      Catalog feed format (default `json`)
    </ResponseField>

    <ResponseField name="tenantId" type="string" required />

    <ResponseField name="generatedAt" type="string (date-time)" required />

    <ResponseField name="totalAvailable" type="integer" required />

    <ResponseField name="products" type="object[]" required>
      <Expandable title="products">
        <ResponseField name="id" type="string" required />

        <ResponseField name="sku" type="string" required />

        <ResponseField name="title" type="string" required />

        <ResponseField name="description" type="string" />

        <ResponseField name="brand" type="string" />

        <ResponseField name="productCategory" type="string" />

        <ResponseField name="gtin" type="string" />

        <ResponseField name="mpn" type="string" />

        <ResponseField name="price" type="string" />

        <ResponseField name="availability" type="string" required />

        <ResponseField name="itemGroupId" type="string" />

        <ResponseField name="sellerName" type="string" />

        <ResponseField name="channelAttributes" type="object" required />
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

### Status codes

| Code  | Meaning                             |
| ----- | ----------------------------------- |
| `200` | Catalog feed generated or delivered |
| `401` | Unauthorized                        |
| `424` | Database not configured             |

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url 'https://api.sync.stateset.com/v1/tenants/{tenant_id}/products/catalog-feed' \
    --header 'x-stateset-api-key: YOUR_API_KEY' \
    --header 'Content-Type: application/json' \
    --data '{
    "channel": "chat_gpt",
    "format": "json",
    "merchant": "Acme Outdoors",
    "maxProducts": 1,
    "target": {
      "endpoint": "https://example.com/webhooks/stateset",
      "bearerToken": "YOUR_API_KEY",
      "headers": {}
    }
  }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "tenantId": "acme-outdoors",
    "success": true,
    "channel": "chat_gpt",
    "format": "json",
    "productCount": 1,
    "totalAvailable": 1,
    "generatedAt": "2026-08-31T14:22:05Z",
    "delivery": {},
    "feed": {
      "feedMetadata": {},
      "channel": "chat_gpt",
      "format": "json",
      "tenantId": "acme-outdoors",
      "generatedAt": "2026-08-31T14:22:05Z",
      "totalAvailable": 1,
      "products": [
        {
          "id": null,
          "sku": null,
          "title": null,
          "description": null,
          "brand": null,
          "productCategory": null,
          "gtin": null,
          "mpn": null,
          "price": null,
          "availability": null,
          "itemGroupId": null,
          "sellerName": null,
          "channelAttributes": null
        }
      ]
    }
  }
  ```
</ResponseExample>
