# Accessories

**Accessories** link a source article to accessory articles that are
fitted or ordered alongside it — an optional add-on, or a mandatory part.
Pushing them lets Mercura suggest the right accessories when it matches a
customer position against your catalogue.
You can:
- **`POST /articles/accessories`** — bulk-upsert up to 100,000 accessory links in a
single call. Async — returns a `JobAck`; poll `GET /jobs/{job_id}` for
status. Each row upserts the `(source_article_number, accessory_article_number)` pair.
- **`GET /articles/accessories`** — cursor-paginated list of your accessory links.
Pass `source_article_number` to list one article's accessories, or
`modified_since` on the first page to fetch only what changed.

 - [Fields](https://docs.mercura.ai/openapi/accessories/fields.md): ### Fields - **`multiplier`** — how many of the accessory are needed per unit of the source article (optional). - **`order`** — display order among a source article's accessories. - **`is_mandatory`**
 - [Upsert semantics (v1)](https://docs.mercura.ai/openapi/accessories/upsert-semantics-(v1).md): ### Upsert semantics (v1) `POST` **inserts or updates** each `(source, accessory)` pair; it never removes links. Re-sending the same pair is idempotent. There is **no delete endpoint yet** — omitting
 - [POST /articles/accessories](https://docs.mercura.ai/openapi/accessories/public_accessories_bulk_upsert.md): Bulk-upsert accessory relationships (async). Accepts up to 100,000 rows per call. Each row upserts the `(source_article_number, accessory_article_number)` pair; rows whose articles don't exist are ski
 - [GET /articles/accessories](https://docs.mercura.ai/openapi/accessories/public_accessories_list.md): Cursor-paginated list of accessory relationships.
