# List product categories

`GET /v1/product-categories`

Lists the product categories your organization has ICP access to.
Use a returned category's `id` as the `product_category_id` when you
[submit a PDP by GTIN](/api/product-details/upsertPdpByGtin) or
[submit an image for scoring](/api/images/scoreImage). Not required
for ASIN ingestion — category is derived from the retailer scrape.

Pass the optional `retailer` query parameter to scope the results to
a single retailer region.

## Parameters

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `retailer` | query | no | string | Optional retailer region to scope categories to (e.g., `amazon_us`, `walmart_us`). Must be a valid retailer_region identifier; invalid values return 400.  |

## Responses

### 200 — List of product categories (empty array if none)

**application/json**

- **array**
  - items:
    - **object** — A product category the caller's organization has ICP access to
      - `id` (string, required) — Use as `product_category_id` when submitting PDPs
      - `category_name` (string, required)
      - `path` (string, required) — Hierarchical path separated by " > "

### 400 — Invalid retailer value

**application/json**

- **object** — Standardized error format for all `/v1/*` endpoints. `error_code` is a
stable SCREAMING_SNAKE_CASE identifier clients can switch on.

  - `detail` (string) — Human-readable error message
  - `status_code` (integer) — HTTP status code
  - `error_code` (string) — Stable machine-readable error code
  - `request_id` (any) — Request identifier for correlation
  - `extra` (any) — Endpoint-specific additional context. For example,
IMAGE_DOWNLOAD_FAILED populates extra.failed_urls with per-URL
failure reasons so clients can triage bulk submissions.

  - `timestamp` (string)

### 401 — Missing or invalid Bearer token
