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

# Get All Products

> Returns all products from a merchant's catalog

Retrieves a paginated list of all products from a merchant's store. This endpoint returns product summaries with links to retrieve full details for each product.

## Path Parameters

<ParamField path="merchant-domain" type="string" required>
  The domain of the merchant website (e.g., `staging.luma.gift`)
</ParamField>

## Query Parameters

<ParamField query="page" default="1" type="number">
  Page number for pagination
</ParamField>

<ParamField query="size" default="2000" type="string">
  Number of products per page. Valid values: `100`, `500`, `1000`, `2000`
</ParamField>

<ParamField query="countryCode" default="us" type="string">
  Country code for regional product availability
</ParamField>

## Response

Returns an array of product summaries, each containing:

<ResponseField name="loc" type="string">
  Full URL to retrieve detailed product information
</ResponseField>

<ResponseField name="handle" type="string">
  Product handle/identifier
</ResponseField>

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

<ResponseField name="image" type="object">
  Primary product image

  <Expandable title="Image">
    <ResponseField name="url" type="string">
      URL of the product image
    </ResponseField>
  </Expandable>
</ResponseField>

## Expected Errors

<ResponseField name="AllProductsNotImplemented" type="404">
  The merchant's platform doesn't support product catalog browsing
</ResponseField>

<ResponseField name="Size Invalid" type="400">
  The size parameter contains an invalid value. Valid values are: 100, 500, 1000, 2000
</ResponseField>

<RequestExample>
  ```bash theme={null}
  curl --request GET \
    --url 'https://api.firmly.work/api/v1/domains-products/staging.luma.gift?page=1&size=100' \
    --header 'x-firmly-authorization: YOUR_AUTH_TOKEN'
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  [
    {
      "loc": "https://api.firmly.work/api/v1/domains-products/staging.luma.gift/radiant-tee",
      "handle": "radiant-tee",
      "title": "Radiant Tee",
      "image": {
        "url": "https://cdn.staging.luma.gift/products/radiant-tee-main.jpg"
      }
    },
    {
      "loc": "https://api.firmly.work/api/v1/domains-products/staging.luma.gift/hero-hoodie",
      "handle": "hero-hoodie",
      "title": "Hero Hoodie",
      "image": {
        "url": "https://cdn.staging.luma.gift/products/hero-hoodie-main.jpg"
      }
    },
    {
      "loc": "https://api.firmly.work/api/v1/domains-products/staging.luma.gift/breathe-easy-tank",
      "handle": "breathe-easy-tank",
      "title": "Breathe-Easy Tank",
      "image": {
        "url": "https://cdn.staging.luma.gift/products/breathe-easy-tank-main.jpg"
      }
    }
  ]
  ```
</ResponseExample>

## Usage Notes

<Note>
  The `loc` field contains the full URL to retrieve detailed product information. You can either:

  * Extract the handle from the URL and use the [Get a Product](/api-reference/catalog/get-product) endpoint
  * Make a direct GET request to the `loc` URL with your authentication header
</Note>

<Warning>
  This endpoint may return a large amount of data. Use pagination parameters to control response size and improve performance.
</Warning>

## Example: Product Browsing Implementation

```javascript theme={null}
// Fetch first page of products
const response = await fetch(
  'https://api.firmly.work/api/v1/domains-products/staging.luma.gift?page=1&size=100',
  {
    headers: {
      'x-firmly-authorization': authToken
    }
  }
);

const products = await response.json();

// Display product grid
products.forEach(product => {
  // Extract handle from loc URL or use the handle field
  const handle = product.handle;
  
  // Create product card with:
  // - product.title
  // - product.image.url
  // - Link to product details using handle
});

// When user clicks a product, fetch full details
const productDetails = await fetch(
  `https://api.firmly.work/api/v1/domains-products/staging.luma.gift/${selectedHandle}`,
  {
    headers: {
      'x-firmly-authorization': authToken
    }
  }
);
```
