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

# Links to other modules

> How the catalog links to sellers, offers, attributes, and media.

Modules in Mercur never reference each other directly. They connect through
**module links**. The Catalog (Medusa's `Product` module) is wired into the
marketplace layer with a set of links defined in Mercur core. Once a link is
defined, you retrieve related records with `query.graph` using the link alias.

```ts theme={null}
const { data: products } = await query.graph({
  entity: "product",
  fields: ["id", "title", "sellers.*", "offers.*", "changes.*"],
})
```

## Marketplace

| Linked module      | Relationship                                                                                                                                     |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Seller**         | Many-to-many allowlist (`product_seller`) that controls which stores may sell a master product. Categories carry the same via `category_seller`. |
| **Offer**          | A product has many offers (`offer.product_id`, read-only). Offers are how a store sells against the master product.                              |
| **Product change** | A product has many change records (`product.changes`, read-only): the immutable submission and review audit trail.                               |

## Attributes

| Linked module         | Relationship                                                                                                                                      |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Product attribute** | Product-scoped attributes resolve under `product.scoped_attributes` (read-only). Categories link attributes through `product_category_attribute`. |

## Media

| Linked module | Relationship                                                                                          |
| ------------- | ----------------------------------------------------------------------------------------------------- |
| **Media**     | Categories and collections link their artwork through the `media_images` alias (a `MediaImage` list). |

<Note>
  Read-only links (Offer, Product change, scoped attributes) are resolved from
  the field on the owning record and can't be written through the link itself.
  The `media_images` alias is deliberately **not** the bare `images` alias. That
  would shadow the native `Product.images` relation and break product queries.
</Note>
