# Products

> List, create, retrieve, and update the products in your workspace.

A product is a top-level container for issues, conversations, and releases. Most other endpoints scope by `product_id`.

## GET /products

```bash
curl https://app.getresolved.ai/api/v1/products \
  -H "Authorization: Bearer gr_..."
```

**Query parameters**

- `limit` — default 50, max 200
- `offset` — default 0

## POST /products

Create a new product. A `widget_key` is generated automatically for embedding the chat widget.

```bash
curl https://app.getresolved.ai/api/v1/products \
  -H "Authorization: Bearer gr_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My App",
    "slug": "my-app"
  }'
```

**Body**

- `name` (required) — 1–200 characters
- `slug` (optional) — lowercase alphanumeric with hyphens. Auto-derived from `name` if omitted and auto-suffixed on collision.

Returns `201` with the created product, including its `widget_key`.

## GET /products/{id}

```bash
curl https://app.getresolved.ai/api/v1/products/prd_123 \
  -H "Authorization: Bearer gr_..."
```

## PATCH /products/{id}

Update an existing product.

```bash
curl -X PATCH https://app.getresolved.ai/api/v1/products/prd_123 \
  -H "Authorization: Bearer gr_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My App",
    "issue_prefix": "APP",
    "domain": "app.example.com"
  }'
```

**Body**

- `name` (optional) — 1–200 characters
- `slug` (optional) — lowercase alphanumeric with hyphens
- `issue_prefix` (optional) — 1–3 uppercase letters or digits (e.g. `"APP"`). Affects only newly created issues; existing shortcodes are immutable.
- `widget_config` (optional) — object, or `null` to clear
- `domain` (optional) — string, or `null` to clear

