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

# Core concepts

> The handful of objects you'll work with — products, schemas, product types, and attributes.

A few objects show up across every FacetFlux endpoint. Understanding how they fit together makes the rest of the API obvious.

## Products and variants

A **product** is a single catalog item. A product can have **variants** — concrete purchasable versions that differ along one or more axes (size, color, length). A cordless drill is a product; the 2 Ah and 4 Ah kits are its variants.

Attribute values live at whichever level they belong to:

* **Product-scoped** — the same for every variant (brand, product family, description).
* **Variant-defining** — the axes that distinguish variants (voltage, capacity).
* **Per-variant** — differ by variant but don't define them (weight, GTIN).

When you write attribute values you target either the product or a specific variant, and the attribute's scope has to match the target.

## Schemas, product types, and attributes

A **schema** is the shape of a slice of your catalog. It contains:

* **Product types** — what *kind* of thing a product is. A product type determines which attributes a product is expected to have. (Product type is about structure and data — it is not the same as a merchandising category like "Summer Sale.")
* **Traits** — reusable bundles of attributes that product types are composed from.
* **Attribute definitions** — the typed fields themselves: a name, a data type, and optionally allowed values.

You'll usually **read** schemas to interpret product data — an API response gives you attribute *values* keyed by attribute-definition id, and the schema tells you what each one means.

## Attribute data types

Every attribute value is native JSON matching its definition's data type:

| Data type         | JSON shape             | Example                             |
| ----------------- | ---------------------- | ----------------------------------- |
| Text              | string                 | `"Bosch"`                           |
| Translatable text | object keyed by locale | `{ "en": "Drill", "de": "Bohrer" }` |
| Number / Decimal  | number                 | `18`                                |
| Boolean           | boolean                | `true`                              |
| Enum              | string (the value)     | `"cordless"`                        |
| MultiEnum         | array of strings       | `["cordless", "brushless"]`         |

<Note>
  Enum-typed values are always the **string value**, in `camelCase` — never a numeric index. This matches how the whole API serializes enumerations.
</Note>

## Classification standards

FacetFlux classifies products to industry standards — primarily **ETIM** and **eCl\@ss**. Classification maps a product to a class in the standard (for example an ETIM class) and, where enabled, to the standard's expected features. Enrichment can fill and normalize the values those classes expect.

## Credits and pricing

AI operations (enrichment, some diagnostics) are billed per product. Reads of your own catalog are not. Pricing is per outcome — see the [pricing page](https://facetflux.com/pricing) for current rates. Enrichment responses include usage headers so you can track consumption programmatically; see [Enrichment](/guides/enrichment).
