# Products

> Usage, fixed and subscription products, and how they map to rates.

Source: https://metrocli.com/docs/concepts/products/ · Docs index: https://metrocli.com/llms.txt

A product is one line item on an invoice. Its name is what your customer sees. A product has no price of its own: prices live on [rate cards](/docs/concepts/rate-cards).

> **Metronome's reference:** [Create a product](https://docs.metronome.com/api-reference/products/create-a-product) · [Update a product](https://docs.metronome.com/api-reference/products/update-a-product) · [Archive a product](https://docs.metronome.com/api-reference/products/archive-a-product). These pages are the source of truth for every field; metro's page covers how metro handles it. What metro wraps, endpoint by endpoint: [Metronome API coverage](/docs/reference/api-coverage).

## Types

| Type | What it bills | Needs |
|---|---|---|
| `USAGE` | A billable metric's quantity | `billable_metric_id` |
| `SUBSCRIPTION` | A recurring charge per unit, usually seats | A `SUBSCRIPTION` rate with `billing_frequency` |
| `FIXED` | A one-off or scheduled amount | Priced on the commit or scheduled charge that uses it |
| `COMPOSITE` | A percentage of other products | `composite_product_ids` or `composite_tags` |
| `PROFESSIONAL_SERVICE` | Services | Enabled per tenant |

## How it connects

Rates reference `product_id`. Commits, credits, scheduled charges and overrides reference `product_id`, or match product tags through `applicable_product_tags`.

## Gotchas

- A product's `type` can't change. To switch, archive it, create a new one, and re-point everything that used it.
- Updates are scheduled at an on-the-hour `starting_at`. Updating `tags` replaces the list.
- `products/get` returns `data.current` and `data.initial`; there is no top-level `data.name`.
- Archiving a product only blocks new rates. Existing entitled rates keep billing, and there is no remove-rate endpoint. Close rates with `entitled: false` first.
- Metronome doesn't stop two entitled products on one rate card from using the same metric. If that happens, every event bills twice.

## How metro handles it

| Command | Does |
|---|---|
| `metro product inspect --product-id <id> --sandbox --plan` | A read plan for one product |
| `metro product retire preview --file retire.json --sandbox` | Offline preview that closes rates with `entitled: false` and `price: 0` before any archive |
| `metro ratecard create preflight` | Checks every product exists, isn't archived, and that a `SUBSCRIPTION` rate points at a `SUBSCRIPTION` product |

Metronome docs: [Create a product](https://docs.metronome.com/api-reference/products/create-a-product).
