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

# Filter by Sales Channel

> Return only products published on specific Shopify sales channels, such as Point of Sale or a headless storefront.

By default, recommendations only include products published to your **Online Store**. If you also sell through other Shopify sales channels, such as **Point of Sale (POS)** or a **headless** storefront, you can ask the recommendation APIs to return only the products published on one of those channels instead.

This takes two steps: enable the channels in the app, then pass their ids on the API.

## 1. Enable the channels you want to filter by

#### Open Settings → Sales channels

In the Glood.AI app, go to **Settings → Sales channels**. The section lists every sales channel installed on your store (Online Store, Point of Sale, Headless, Google & YouTube, and so on).

#### Select channels and save

Tick the channels you want to be able to filter by and click **Save**.

<Note>
  Saving a new selection re-indexes the publication ids of every product. This runs in the background and can take a few minutes on large catalogs. Requests that pass a `publicationIds` value for a channel that is not enabled here are rejected with `400`.
</Note>

## 2. Pass `publicationIds` on the API

Every product-returning endpoint accepts an optional `publicationIds` field:

* Headless: `/v3/headless/sections`, `/v3/headless/recommendations`, `/v3/headless/recommendations/automatic`, `/v3/headless/recommendations/top`
* Theme and checkout: `/v3/sections`, `/v3/sections/paginated`, `/recommendations/checkout`, `/post-checkout`, `/recommendations/customer-account`

<Note>
  The filter applies to V3 recommendations. `/v3/headless/init` returns no products and rejects the field with `400`, and the legacy V2 widget endpoints (`/widgets/template`, `/v2/headless/widgets`, `/v2/headless/recommendations`) do not accept `publicationIds` either.
</Note>

A publication id is the numeric part of a Shopify publication GID (`gid://shopify/Publication/30085840999` → `30085840999`). You can read it from the Shopify Admin GraphQL `publications` query, and POS and headless integrations can store it once per shop.

```json POST /api/storefront/v3/headless/sections theme={null}
{
  "client_id": "a1b2c3",
  "page_url": "https://your-store.com/products/running-shoe",
  "page_type": "product",
  "product_id": "7441211883623",
  "locale": "en",
  "publicationIds": ["30085840999"]
}
```

A single id may be sent without the array wrapper. Up to 50 ids are accepted; a product matches if it is published on **any** of them.

## What the filter does

| Request | Products returned |
| - | - |
| No `publicationIds` | Published to the Online Store (unchanged behaviour) |
| `publicationIds` present | Published on at least one of the given channels; the Online Store condition no longer applies |
| `publicationIds` with `market` or a B2B company location | Both apply: on the channel **and** in that catalog |
| Id not enabled in Settings | `400` with `publicationIds not configured for this shop: <id>` |

Every recommendation strategy honours the filter, including fallbacks such as trending and recently launched, on both the default host and Edge regions.

## Good to know

* Bundle component lookups and the email recommendation fallback are not channel-filtered.
* Products published to a channel but **not** to the Online Store are not indexed yet, so a POS filter returns the products that are on both. Ask us if you need channel-only products indexed.
* Publishing or unpublishing a product on a channel in Shopify updates the index through the normal product webhooks; no re-save is needed in the app.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.