# Filter Variants

Filters the tenant's Variant resources using OData query options and returns the matching collection.
## Authentication
Requires a valid API key in the `X-API-KEY` header.
## Headers
### Accept-Language
Indicates the preferred natural language and locale for the localized content:
- **culture-code** (e.g. `es`, `en-us`) — returns content localized in the specified culture.
- **null / not set** — returns content localized in the default culture.
- **`*`** — currently disabled.

Multiple culture codes or q-factor weighting are not supported.
## OData Query Support
The endpoint supports a subset of OData v4.01 URI conventions.
The full list of available properties can be obtained from `GET /Variants/$metadata`.
### `$select`
Comma-separated list of Variant properties (implicit or custom) to include in the result.
Selection of properties inside embedded resources/collections is not supported.
- Example: `frmt_ref`
- Example: `frmt_ref,frmt_tags`

### `$expand`
Comma-separated list of embedded collections to include in the result. By default, embedded collections are not included.
Only embedded collections are supported (not embedded resources).
### `$filter`
Boolean expression applied on root resource properties. Filtering on nested resource properties is not supported.
- Logical operators: `eq`, `ne`, `gt`, `lt`, `ge`, `le`, `or`, `and`, `in`
- String functions: `contains`, `startswith`, `endswith`
- Supported value types: integer, big integer, double, decimal, string, date, datetimeoffset
- Example: `contains(frmt_ref, 'abc')`
- Example: `frmt_ref in ('A','B') and price gt 10`

### `$orderby`
Sorting expression on a single root resource property. Multiple properties and embedded properties are not supported.
Format: `PROPERTY (asc|desc)`. Default direction is `asc`.
- Example: `frmt_ref asc`

### `$top`
Page size. Maximum and default is 100 items.
### `$skip`
Offset for the **limit-and-offset paging strategy** (used together with `$top`). Recommended when `$orderby` is required.
### `$skipToken`
Continuation token for the **continuation-token paging strategy**. Faster than limit-and-offset but does not support `$orderby`.
## Response
**200 OK** — Returns a `CollectionRepresentation` with the matching Variant resources.
## Error Responses
- **400 Bad Request** — Invalid OData expression or query parameter.
- **401 Unauthorized** — Missing or invalid API key. Returned by the API gateway as
`{ "message": "Unauthorized", "request_id": "d8aafa5b8f3e400b60bea0123dd33317" }`.
- **404 Not Found** — Tenant or resource not found.
- **500 Internal Server Error** — Unexpected technical error.

## Example
**Request:**

```http
GET /Variants?$select=frmt_ref&$top=10 HTTP/1.1
X-API-KEY: your-api-key-here
Accept-Language: es
```
**Response:**

```http
HTTP/1.1 200 OK
Content-Type: application/json
```

Endpoint: GET /Variants
Version: 2.0.0

## Query parameters:

  - `$filter` (string)

  - `$orderby` (string)

  - `$skip` (integer)

  - `$skipToken` (string)

  - `$top` (integer)

  - `$select` (string)

  - `$expand` (string)

## Header parameters:

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

  - `Accept-Language` (string)
    Preferred localization culture (e.g. `es`, `en-us`)

## Response 200 fields (application/json):

  - `@readLink` (string)

  - `@nextLink` (string)

  - `@deltaLink` (string)

  - `@context` (string)

  - `value` (any)

  - `@count` (integer)

## Response 401 fields (application/json):

  - `message` (string)

  - `request_id` (string)

## Response 404 fields (application/json):

  - `type` (string)

  - `title` (string)

  - `status` (integer)

  - `detail` (string)

  - `instance` (string)

## Response 500 fields (application/json):

  - `error` (string)

  - `details` (any)

