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

# Fetch Attribute Templates First

> Read the merchant's attribute schema before you enrich anything.

Attribute templates are the **schema** of the merchant's catalog. Each template is a named group of
attribute options — `Weight`, `Material`, `Voltage`, and so on — with units, data types, and a
priority that reflects how much the merchant cares about each one.

**Always fetch templates before you enrich.** They tell your model exactly which attributes to
produce, in what unit, and in what shape — so your proposals slot cleanly into the merchant's
catalog instead of inventing free-form fields that a reviewer has to clean up.

## Endpoint

```http theme={null}
GET /api/enrichment/attribute-templates
```

Requires the `catalog:read` scope. Returns every **active** template for your organization, each
with its options.

```bash theme={null}
curl https://api.verzla.com/api/enrichment/attribute-templates \
  -H "X-Api-Client-Key: sk_live_your_key_here"
```

## Response

A JSON array of templates:

```json theme={null}
[
  {
    "id": 41,
    "name": "Power Tools",
    "options": [
      {
        "id": 880,
        "attribute": "Voltage",
        "unit": "V",
        "priority": 1,
        "dataType": "NUMBER",
        "showOnWebsite": true,
        "isSearchable": true
      },
      {
        "id": 881,
        "attribute": "Battery Type",
        "unit": null,
        "priority": 2,
        "dataType": "STRING",
        "showOnWebsite": true,
        "isSearchable": false
      }
    ]
  }
]
```

### Template option fields

<ResponseField name="id" type="number">
  The template option's identifier. Reference it as `option.optionId` on the attributes you
  submit so Verzla can link your value to the schema.
</ResponseField>

<ResponseField name="attribute" type="string">
  The attribute name — e.g. `Voltage`, `Material`. This is the label your value answers.
</ResponseField>

<ResponseField name="unit" type="string | null">
  The unit the value should be expressed in (e.g. `V`, `kg`, `mm`). `null` for unitless attributes.
</ResponseField>

<ResponseField name="priority" type="number">
  Relative importance. Lower numbers are higher priority — enrich these first when you can't fill
  everything.
</ResponseField>

<ResponseField name="dataType" type="string">
  The expected value type, e.g. `STRING`, `NUMBER`, `BOOLEAN`. Format your `detail` value to match.
</ResponseField>

<ResponseField name="showOnWebsite" type="boolean">
  Whether this attribute is surfaced on the merchant's storefront. `true` attributes are the most
  visible — and the most valuable to get right.
</ResponseField>

<ResponseField name="isSearchable" type="boolean">
  Whether the attribute feeds search and filtering. Searchable attributes benefit from consistent,
  normalized values.
</ResponseField>

## Using templates to enrich

When you build attribute proposals, align each one to a template option:

1. **Match the attribute name** — use the same `attribute` string the template defines.
2. **Respect the unit and data type** — emit `220` for a `NUMBER`/`V` voltage, not `"220 volts"`.
3. **Prioritize** — fill high-priority, `showOnWebsite` attributes first; they move the needle most.
4. **Reference the option id** — set `option.optionId` on the submitted attribute so Verzla can
   tie your value to the schema (see [Submitting proposals](/enrichment/submitting-proposals)).

<Tip>
  Cache templates per organization and refresh them periodically. They change rarely, but a merchant
  can add or retire attributes — a stale schema means lower-quality proposals and a lower
  [acceptance rate](/enrichment/acceptance-rate).
</Tip>
