---
title: "Replace a product line"
method: PUT
path: "/org/product-lines/{id}"
tags: ["Product Lines"]
---

# Replace a product line

`PUT /org/product-lines/{id}`

## Request

- Base URL: `https://apiv2.senso.ai/api/v1`
- URL: `https://apiv2.senso.ai/api/v1/org/product-lines/{id}`
- Auth: API key in header `X-API-Key`

Full replacement of the product line's name and details. **Omitting `details` resets it to `{}`** — this is a replace, not a merge; use `PATCH` to update fields selectively. Renaming to a name another active product line holds is a `409` (renaming to the current name is fine). Requires the GEO product.

## Path parameters

- `id` string, uuid, required

## Request body

- UpdateProductLineRequest: Full replacement. `name` is required (trimmed); `details`, when omitted, resets the stored details to `{}`. When provided, `details` must be a JSON object.
  - `name` string, required
  - `details` ProductLineDetails: Open-ended JSON object describing this product line — the keys and values are yours to define (SKUs, URLs, positioning, pricing tiers, anything downstream generation and evaluation should know). The server requires a JSON object but never validates the contents; what you store is re-serialized in canonical form — key order is normalized and numbers are re-encoded (integers above 2^53 lose precision), so send very large identifiers as strings.

## Response `200`

The updated product line.

- ProductLineResponse: One product line.
  - `product_line_id` string, uuid, required
  - `org_id` string, uuid, required
  - `name` string, required
  - `details` ProductLineDetails, required: Open-ended JSON object describing this product line — the keys and values are yours to define (SKUs, URLs, positioning, pricing tiers, anything downstream generation and evaluation should know). The server requires a JSON object but never validates the contents; what you store is re-serialized in canonical form — key order is normalized and numbers are re-encoded (integers above 2^53 lose precision), so send very large identifiers as strings.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400`: The request was malformed — a bad path/query parameter or an invalid value.
- `401`: Missing or invalid credentials — supply a valid org API key in the `X-API-Key` header.
- `403`: The API key is authenticated but not permitted to access this resource.
- `404`: The requested resource does not exist or is not visible to this key.
- `409`: The request conflicts with the current state (e.g. a duplicate).

---

[API](https://skmtc.dev/senso/apis/senso-org-api.md) - [All operations](https://skmtc.dev/senso/apis/senso-org-api/llms.txt) - [OpenAPI document](https://skmtc.dev/senso/apis/senso-org-api/revisions/d789b4fcbe84?raw)
