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

# Search Response

Every product in the catalog conforms to the same schema, with high-quality images, rich metadata, and offers across merchants.

## The response shape

<ResponseField name="products" type="Product[]" required>
  Canonical catalog items matching the request.

  <Expandable title="properties" defaultOpen>
    <ResponseField name="id" type="string" required>
      Unique Channel3 product ID.
    </ResponseField>

    <ResponseField name="title" type="string" required>
      Display name for the product.
    </ResponseField>

    <ResponseField name="description" type="string | null">
      Product description when available.
    </ResponseField>

    <ResponseField name="brands" type="ProductBrand[]">
      Ordered list of brands behind the product (`id`, `name`).
    </ResponseField>

    <ResponseField name="images" type="ProductImage[]">
      Product images with metadata. Prefer `is_cleaned_image` for grids — see
      [Cleaned Images](/guides/cleaned-images).

      <Expandable title="properties">
        <ResponseField name="url" type="string" required>
          Image URL.
        </ResponseField>

        <ResponseField name="is_main_image" type="boolean">
          Whether this is the primary product image.
        </ResponseField>

        <ResponseField name="is_cleaned_image" type="boolean">
          Square aspect ratio with a uniform background — ideal for product
          grids.
        </ResponseField>

        <ResponseField name="shot_type" type="string | null">
          Image type when known (e.g. on-model, flat lay).
        </ResponseField>

        <ResponseField name="alt_text" type="string | null">
          Accessibility text for the image.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="category" type="CategorySummary | null">
      Taxonomy placement (`slug`, `title`, `path`, `has_children`).
    </ResponseField>

    <ResponseField name="gender" type="string | null">
      `male`, `female`, or `unisex`.
    </ResponseField>

    <ResponseField name="age" type="string | null">
      Target age group: `newborn`, `infant`, `toddler`, `kids`, or `adult`.
    </ResponseField>

    <ResponseField name="materials" type="string[] | null">
      Material composition when known.
    </ResponseField>

    <ResponseField name="key_features" type="string[] | null">
      Highlighted product features.
    </ResponseField>

    <ResponseField name="offers" type="ProductOffer[]">
      Retailer listings for this product. Price and buy links live here — not on
      the product. See [Offer](/concepts/offer).

      <Expandable title="properties">
        <ResponseField name="url" type="string" required>
          Buy link / product page at that retailer.
        </ResponseField>

        <ResponseField name="domain" type="string" required>
          Store domain (e.g. `retailer.com`).
        </ResponseField>

        <ResponseField name="price" type="Price" required>
          Current price for this listing.

          <Expandable title="properties">
            <ResponseField name="price" type="number" required>
              Current price, including any discounts.
            </ResponseField>

            <ResponseField name="compare_at_price" type="number | null">
              Original price before discounts, when on sale.
            </ResponseField>

            <ResponseField name="currency" type="string" required>
              ISO currency code (e.g. `USD`, `EUR`).
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="availability" type="string" required>
          `InStock` or `OutOfStock`.
        </ResponseField>

        <ResponseField name="condition" type="string | null">
          `new`, `used`, or `refurbished`. Null when unknown.
        </ResponseField>

        <ResponseField name="max_commission_rate" type="number">
          Max commission from partner brands (decimal: `0.08` = 8%).
        </ResponseField>

        <ResponseField name="dimensions" type="Dimensions | null">
          Physical size and weight for this offer when known.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="variants" type="Variants | null">
      Variant selector state when the product has options. Absent for single-SKU
      products.

      <Expandable title="properties">
        <ResponseField name="options" type="VariantOption[]">
          Available option dimensions (e.g. Color, Size) and their values.
        </ResponseField>

        <ResponseField name="selected" type="SelectedOption[]">
          Currently selected option values (`name`, `label`).
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="structured_attributes" type="object">
      Category-specific attributes keyed by handle (e.g. `color`, `material`).
      Values are canonical strings for that handle.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="next_page_token" type="string | null">
  Opaque token to fetch the next page of results. Null when there are no more
  results. See [pagination](/sdk/pagination).
</ResponseField>

For the full schema, see the [Search API reference](/api-reference/v1/search) or the [Product model](/product-model).
