# Filter Attribute Set Products

Filters and returns a paginated collection of Product resources scoped to the given Attribute Set, using OData query options.
            
## Authentication
            
Requires a valid API key in the X-API-KEY header.
            
## Headers
            
### Accept-Language
            
Indicates the preferred natural language and locale for localized content.
- omitted / null: content in the tenant's default culture.
- culture-code (e.g. en-US, es): content localized in the specified culture.
- * and q-factor weighting are currently not supported.
            
## OData Query Support
            
### $select
            
Comma-separated list of root-resource property names to include in the response.
See /Products/$metadata for the available properties.
Selecting properties of embedded resources is not supported.
            
Example: $select=prod_description,prod_tags
            
### $expand
            
Comma-separated list of embedded collections to include (e.g. Variants).
By default, embedded collections are not included.
Only embedded collections (not embedded resources) are supported.
            
Example: $expand=Variants
            
### $filter
            
OData v4.01 URI conventions. Filtering is restricted to properties of the root resource (Product).
            
Comparison operators: eq, ne, gt, ge, lt, le
            
Logical operators: and, or, not
            
Set operator: in
            
String functions: contains, startswith, endswith
            
Examples:
- $filter=prod_ref eq 'SKU-001'
- $filter=contains(prod_description, 'pro')
- $filter=prod_id gt 100 and contains(prod_description, 'pro')
            
### $orderby
            
Single property, ascending by default. Multi-property ordering and ordering on embedded
properties are not supported.
            
Examples:
- $orderby=prod_description
- $orderby=prod_ref desc
            
### Pagination — $top, $skip, $skipToken
            
- $top — maximum number of items returned.
- $skip — number of items to skip (offset paging).
- $skipToken — continuation-token paging. Recommended when no $orderby is applied
  (faster than offset paging).
            
Paging applies only to the root resource (Product), never to embedded collections.
            
## Response
            
200 OK — CollectionRepresentation with the matching Product resources, pagination
metadata (Count, Skip, Top, HasNext, continuation token) and the cultures echoed
from Accept-Language.
            
## Error Responses
            
- 400 Bad Request — Invalid OData expression or unsupported $orderby/$filter field
  (returns ValidationFailureRepresentation).
- 401 Unauthorized — Missing or invalid API key. Returned by the API gateway as
  { "message": "Unauthorized", "request_id": "d8aafa5b8f3e400b60bea0123dd33317" }.
- 404 Not Found — Attribute Set with the given identifier does not exist.
- 500 Internal Server Error — Unexpected technical error.
            
## Example
            
Request:
http
GET /AttributeSets(7)/Products?$filter=contains(prod_description,'pro')&$top=20 HTTP/1.1
X-API-KEY: your-api-key-here
Accept-Language: en-US

            
Response:
http
HTTP/1.1 200 OK
Content-Type: application/json

Endpoint: GET /AttributeSets({attributeSetIdentifier})/Products
Version: 2.0.0

## Header parameters:

  - `X-API-KEY` (string)
    Tenant's API key (required)

  - `Accept-Language` (string)
    Preferred localization culture (Accept-Language header)

## Path parameters:

  - `attributeSetIdentifier` (integer, required)
    Attribute Set resource identifier

## Query parameters:

  - `$filter` (string)

  - `$orderby` (string)

  - `$skip` (integer)

  - `$skipToken` (string)

  - `$top` (integer)

  - `$select` (string)

  - `$expand` (string)

## Response 200 fields (application/json):

  - `@readLink` (string,null)

  - `@nextLink` (string,null)

  - `@deltaLink` (string,null)

  - `@context` (string,null)

  - `value` (any,null)

  - `@count` (integer,null)

## Response 400 fields (application/json):

  - `validationFailures` (object,null)
    Example: {"Layout":[{"PropertyName":"Layout","ErrorMessage":"The layout must contain exactly the attributes of the stored layout. Missing: tags. Unknown: extra_field.","AttemptedValue":null}]}

## Response 401 fields (application/json):

  - `message` (string,null)

  - `request_id` (string,null)

## Response 404 fields (application/json):

  - `type` (string,null)

  - `title` (string,null)

  - `status` (integer,null)

  - `detail` (string,null)

  - `instance` (string,null)

## Response 500 fields (application/json):

  - `error` (string,null)

  - `details` (any,null)


