---
canonical: https://amplience.com/developers/docs/workforce/flows/action-reference/commerce-actions/scayle-actions/
title: SCAYLE actions
description: Explore the SCAYLE extension actions for Workforce flows, enabling you to retrieve products and categories from SCAYLE as part of automated content processes.
audience: Business User
date_published: 2026-04-09
date_modified: 2026-05-20
---

# SCAYLE actions

The SCAYLE extension provides actions for retrieving product and category data from SCAYLE within Workforce Flows. Use these actions to fetch individual products or search and browse products by keyword or category as part of your automated content processes.

The SCAYLE action extension can be installed from the [Workforce integration marketplace](https://amplience.com/developers/docs/workforce/setup/integrations/).

See [SCAYLE configuration](https://amplience.com/developers/docs/workforce/setup/integrations/scayle/) for details of how to obtain the credentials you need to configure the SCAYLE action extension.

> **Tip:** These action descriptions cover the most commonly used inputs and outputs. When designing flows, you may also notice additional input and output variables.

## Shared inputs

Several actions support the following optional inputs.

### Shop and pricing inputs

| Input | Type | Description |
|---|---|---|
| `shopId` | string | Shop ID to query. Defaults to the `SCAYLE_SHOP_ID` environment variable if not provided |
| `campaignKey` | string | Adjusts prices based on the specified campaign key. If the campaign does not exist, the default price is returned |
| `pricePromotionKey` | string | Adjusts variant prices based on the specified price promotion key. If a variant has no matching promotion, the default price is returned |

### Include and filter inputs

| Input | Type | Description |
|---|---|---|
| `with` | string | Specifies related data to include. For example, `with=attributes`, `with=attributes:key(plusSize)`, `with=variants.attributes`. Multiple values are comma-separated, for example `with=siblings,variants` |
| `includeSoldOut` | boolean | When set to `true`, includes sold out products in results. Default: `false` |
| `referenceKey` | string | Fetches products by reference key (e.g. `014901100002-Blue`) |
| `disableFuzziness` | boolean | Disables typo tolerance for search. When not provided, typo tolerance is applied according to the SCAYLE panel configuration. Default: `false` |

### Pagination inputs

| Input | Type | Description |
|---|---|---|
| `pagination.page` | string | Page number. Default: `1` |
| `pagination.perPage` | string | Number of products per page. Default: `20`. Values above `20` are ignored |
| `pagination.sort` | string | Sort field. When not specified, results are sorted by `productId` |
| `pagination.sortDir` | string | Sort direction. Accepted values: `asc`, `desc` |
| `pagination.sortingKey` | string | Overrides `sort` and sorts results by the specified sorting key instead. Accepts a comma-separated list of predefined Smart Sorting Keys and custom sorting values |

## Get product by ID

Retrieves full product data for a single product by its ID from SCAYLE.

**Inputs**

| Input | Type | Required | Description |
|---|---|---:|---|
| `id` | string | Yes | The unique identifier of the product |
| `shopId` | string | No | See [shared inputs](#shared-inputs) |
| `with` | string | No | See [shared inputs](#shared-inputs) |
| `campaignKey` | string | No | See [shared inputs](#shared-inputs) |
| `pricePromotionKey` | string | No | See [shared inputs](#shared-inputs) |

**Outputs**

| Output | Type | Description |
|---|---|---|
| `product` | object | The full product object. See [product object](#product-object) below |

## Get basic product by ID

Retrieves a simplified set of product data for a single product by its ID from SCAYLE. Intended for use with commerce repositories.

**Inputs**

| Input | Type | Required | Description |
|---|---|---:|---|
| `id` | string | Yes | The unique identifier of the product |
| `shopId` | string | No | See [shared inputs](#shared-inputs) |

**Outputs**

| Output | Type | Description |
|---|---|---|
| `product.id` | string | Product ID |
| `product.name` | string | Product name |
| `product.description` | string | Product description |
| `product.images` | array | List of image objects, each with a `url` field |

## Get products by search term

Retrieves a paginated list of products matching a search term from SCAYLE. Products whose names or attribute values match the provided text are returned.

**Inputs**

| Input | Type | Required | Description |
|---|---|---:|---|
| `searchTerm` | string | Yes | Search term used to return products whose names or attribute values match the provided text |
| `shopId` | string | No | See [shared inputs](#shared-inputs) |
| `with` | string | No | See [shared inputs](#shared-inputs) |
| `campaignKey` | string | No | See [shared inputs](#shared-inputs) |
| `pricePromotionKey` | string | No | See [shared inputs](#shared-inputs) |
| `includeSoldOut` | boolean | No | See [shared inputs](#shared-inputs). Default: `false` |
| `referenceKey` | string | No | See [shared inputs](#shared-inputs) |
| `disableFuzziness` | boolean | No | See [shared inputs](#shared-inputs). Default: `false` |
| `pagination` | object | No | See [shared inputs](#shared-inputs) |

**Outputs**

| Output | Type | Description |
|---|---|---|
| `total` | number | Total number of matching products |
| `perPage` | number | Number of products per page |
| `page` | number | Current page number |
| `sort` | string | Sort field applied |
| `sortDir` | string | Sort direction applied |
| `sortingKey` | string | Sorting key applied |
| `nextPage` | number | Next page number |
| `products` | array | List of full product objects. See [product object](#product-object) below |

## Get basic products by keyword

Retrieves a cursor-paginated list of products matching an optional keyword from SCAYLE. Intended for use with commerce repositories.

**Inputs**

| Input | Type | Required | Description |
|---|---|---:|---|
| `keyword` | string | No | The search phrase used to find matching products. If omitted, returns all products |
| `before` | string | No | A Base64-encoded pagination cursor to retrieve the page of products before a given position. Use the `startCursor` value from a previous response |
| `after` | string | No | A Base64-encoded pagination cursor to retrieve the page of products after a given position. Use the `endCursor` value from a previous response |

**Outputs**

| Output | Type | Description |
|---|---|---|
| `products` | array | List of basic product objects, each with `id`, `name`, `description`, and `images` (array of objects with a `url` field) |
| `pageInfo.startCursor` | string | Cursor for the first item in the current page |
| `pageInfo.endCursor` | string | Cursor for the last item in the current page |
| `pageInfo.hasPreviousPage` | boolean | Whether a previous page exists |
| `pageInfo.hasNextPage` | boolean | Whether a next page exists |

## Get products by category ID

Retrieves a paginated list of products belonging to a category from SCAYLE.

**Inputs**

| Input | Type | Required | Description |
|---|---|---:|---|
| `id` | string | Yes | The unique identifier of the category |
| `shopId` | string | No | See [shared inputs](#shared-inputs) |
| `with` | string | No | See [shared inputs](#shared-inputs) |
| `campaignKey` | string | No | See [shared inputs](#shared-inputs) |
| `pricePromotionKey` | string | No | See [shared inputs](#shared-inputs) |
| `includeSoldOut` | boolean | No | See [shared inputs](#shared-inputs). Default: `false` |
| `referenceKey` | string | No | See [shared inputs](#shared-inputs) |
| `disableFuzziness` | boolean | No | See [shared inputs](#shared-inputs). Default: `false` |
| `pagination` | object | No | See [shared inputs](#shared-inputs) |

**Outputs**

| Output | Type | Description |
|---|---|---|
| `total` | number | Total number of matching products |
| `perPage` | number | Number of products per page |
| `page` | number | Current page number |
| `sort` | string | Sort field applied |
| `sortDir` | string | Sort direction applied |
| `sortingKey` | string | Sorting key applied |
| `nextPage` | number | Next page number |
| `products` | array | List of full product objects. See [product object](#product-object) below |

## Get category by ID

Retrieves a single category by its ID from SCAYLE.

**Inputs**

| Input | Type | Required | Description |
|---|---|---:|---|
| `id` | string | Yes | The unique identifier of the category |
| `shopId` | string | No | See [shared inputs](#shared-inputs) |
| `depth` | string | No | Depth for category tree traversal |
| `with` | string | No | Specifies related data to include (e.g. `with=attributes:key(name)`). Defaults to the `SCAYLE_CATEGORY_FIELDS` environment variable if not provided |

**Outputs**

| Output | Type | Description |
|---|---|---|
| `category` | object | The category object. See [category object](#category-object) below |

## Get categories by search term

Retrieves a list of categories matching a search term from SCAYLE. All categories are fetched and then filtered by the search term.

**Inputs**

| Input | Type | Required | Description |
|---|---|---:|---|
| `searchTerm` | string | Yes | The search query string used to find matching categories |
| `shopId` | string | No | See [shared inputs](#shared-inputs) |
| `showHidden` | boolean | No | When set to `true`, hidden categories are included in results |
| `with` | string | No | Specifies optional fields to include in the response. Defaults to the `SCAYLE_CATEGORY_FIELDS` environment variable if not provided |

**Outputs**

| Output | Type | Description |
|---|---|---|
| `categories` | array | List of category objects. See [category object](#category-object) below |

## Product object

The full product object returned by [Get product by ID](#get-product-by-id), [Get products by search term](#get-products-by-search-term), and [Get products by category ID](#get-products-by-category-id) contains the following fields.

### Core fields

| Field | Type | Description |
|---|---|---|
| `id` | string | Product ID |
| `isActive` | boolean | Whether the product is active |
| `isSoldOut` | boolean | Whether the product is sold out |
| `isNew` | boolean | Whether the product is new |
| `createdAt` | string | Created date |
| `updatedAt` | string | Last updated date |
| `indexedAt` | string | Last indexed date |
| `firstLiveAt` | string | Date the product first went live |
| `masterKey` | string | Master key |
| `referenceKey` | string | Reference key |
| `customData` | object | Custom data |
| `sellableTimeFrame.sellableFrom` | string | Start of the sellable time frame |
| `sellableTimeFrame.sellableTo` | string | End of the sellable time frame |

### Attributes

The `attributes` object contains localized product attributes. The standard attributes are:

| Field | Type | Description |
|---|---|---|
| `attributes.name` | object | Name attribute with `id`, `key`, `label`, `type`, `multiSelect`, and `values` (id, label, value) |
| `attributes.description` | object | Description attribute with `id`, `key`, `label`, `type`, `multiSelect`, and `values` (id, label, value) |
| `advancedAttributes` | object | Additional advanced attributes |

### Images

The `images` array contains image objects, each with:

| Field | Type | Description |
|---|---|---|
| `hash` | string | Image hash |
| `attributes` | object | Image attributes |
| `customData` | object | Custom data |

> **Note:** SCAYLE images are identified by a `hash` rather than a direct URL. The image URL is constructed using the hash and your SCAYLE CDN configuration.

### Variants

The `variants` array contains variant objects, each with:

| Field | Type | Description |
|---|---|---|
| `id` | number | Variant ID |
| `referenceKey` | string | Reference key |
| `firstLiveAt` | string | Date the variant first went live |
| `createdAt` | string | Created date |
| `updatedAt` | string | Last updated date |
| `customData` | object | Custom data |

**Variant price fields** (`price` object):

| Field | Type | Description |
|---|---|---|
| `price.currencyCode` | string | Currency code |
| `price.withTax` | number | Price including tax |
| `price.withoutTax` | number | Price excluding tax |
| `price.recommendedRetailPrice` | number | Recommended retail price |
| `price.tax.vat.amount` | number | VAT amount |
| `price.tax.vat.rate` | number | VAT rate |
| `price.appliedReductions` | array | Applied price reductions, each with `category` (`sale`, `campaign`, or `promotion`), `type`, and `amount` (absoluteWithTax, relative) |

**Variant stock fields** (`stock` object):

| Field | Type | Description |
|---|---|---|
| `stock.supplierId` | number | Supplier ID |
| `stock.warehouseId` | number | Warehouse ID |
| `stock.quantity` | number | Stock quantity |
| `stock.isSellableWithoutStock` | boolean | Whether the variant can be sold without stock |
| `stock.expectedAvailabilityAt` | string | Expected restocking date |

**Variant merchant fields** (`merchant` object):

| Field | Type | Description |
|---|---|---|
| `merchant.id` | number | Merchant ID |
| `merchant.key` | string | Merchant key |
| `merchant.name` | string | Merchant name |
| `merchant.customData` | object | Custom data |
| `merchant.legal` | object | Legal information |

### Categories

| Field | Type | Description |
|---|---|---|
| `categories` | array of arrays | Each entry is a category path array. Each item in the path is a category object with `categoryId`, `categoryHidden`, `categoryName`, `categoryUrl`, and `categorySlug` |
| `masterCategories` | array | Master categories, each with `categoryId` and `categoryName` |
| `baseCategories` | array | Base categories, each with `categoryId` and `categoryName` |
| `searchCategoryIds` | array of numbers | IDs of searchable categories |

### Pricing summary

| Field | Type | Description |
|---|---|---|
| `priceRange.min` | object | Minimum price in the product's price range |
| `priceRange.max` | object | Maximum price in the product's price range |
| `reductionRange.min` | object | Minimum reduction applied across variants |
| `reductionRange.max` | object | Maximum reduction applied across variants |
| `lowestPriorPrice.withTax` | number | Lowest prior price including tax |
| `lowestPriorPrice.relativeDifferenceToPrice` | number | Relative difference between the lowest prior price and the current price |

### Siblings

| Field | Type | Description |
|---|---|---|
| `siblings` | array | Simplified references to sibling products (other colour or style variants of the same master product). Only populated when `with=siblings` is specified |

## Category object

The category object returned by [Get category by ID](#get-category-by-id) and [Get categories by search term](#get-categories-by-search-term) contains the following fields.

### Get category by ID fields

| Field | Type | Description |
|---|---|---|
| `id` | number | Category ID |
| `name` | string | Category name |
| `slug` | string | URL slug |
| `url` | string | Category URL |
| `parentId` | number | Parent category ID |
| `children` | array | Child category objects (same structure) |
| `attributes` | object | Category attributes |
| `createdAt` | string | Created date |
| `updatedAt` | string | Last updated date |
| `customData` | object | Custom data |
| `path` | string | Full category path |
| `depth` | number | Depth in the category tree |
| `isHidden` | boolean | Whether the category is hidden |
| `masterCategoryId` | number | Master category ID |
| `baseCategoryId` | number | Base category ID |

### Get categories by search term fields

| Field | Type | Description |
|---|---|---|
| `id` | number | Category ID |
| `name` | string | Category name |
| `slug` | string | URL slug |
| `path` | string | Full category path |
| `parentId` | number | Parent category ID |
| `rootlineIds` | array of numbers | IDs of all ancestor categories |
| `childrenIds` | array of numbers | IDs of direct child categories |
| `properties` | array | Category properties, each with `name` and `value` |
| `isHidden` | boolean | Whether the category is hidden |
| `depth` | number | Depth in the category tree |
| `supportedFilter` | array of strings | Supported filter keys for the category |
| `shopLevelCustomData` | object | Custom data at shop level |
| `countryLevelCustomData` | object | Custom data at country level |
| `productSorting.smartSortingKey` | string | Smart sorting key |
| `productSorting.customSortingKey` | string | Custom sorting key |
| `children` | array | Shallow list of direct child categories, each with `id`, `name`, `slug`, `path`, `parentId`, `isHidden`, and `depth` |

## Related pages

[Adding actions to flows](https://amplience.com/developers/docs/workforce/flows/action-reference/#adding-actions-to-flows)

[Inputs, outputs and ports](https://amplience.com/developers/docs/workforce/flows/action-reference/#inputs-outputs-and-ports)

[Input field variables](https://amplience.com/developers/docs/workforce/flows/action-reference/#input-field-variables)

[Developing extensions](https://amplience.com/developers/docs/workforce/flows/developing-extensions/)
