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

# Products

> Three-level product hierarchies with lifecycle status.

Every company has a structured product tree: **segments** contain **product lines**, which contain individual **products**. Each node carries a lifecycle `status` (`active`, `announced`, `discontinued`, `rumored`) and, where available, a canonical `product_url`.

## Hierarchy

| Level          | What it is                    | Example (Nvidia)           |
| -------------- | ----------------------------- | -------------------------- |
| `segment`      | Top-level business segment    | `Compute & Networking`     |
| `product_line` | Product line within a segment | `Data Center Accelerators` |
| `product`      | Individual product or service | `Blackwell GPUs`           |

## Lifecycle statuses

| Status         | Meaning                        |
| -------------- | ------------------------------ |
| `active`       | Currently available            |
| `announced`    | Announced but not yet released |
| `discontinued` | No longer available            |
| `rumored`      | Reported but not confirmed     |

## Get a company's products

<CodeGroup>
  ```bash curl theme={"dark"}
  curl "https://api.particle.pro/v1/companies/nvidia/products" \
    -H "X-API-Key: $PARTICLE_API_KEY"
  ```

  ```js JavaScript theme={"dark"}
  const res = await fetch(
    "https://api.particle.pro/v1/companies/nvidia/products",
    { headers: { "X-API-Key": process.env.PARTICLE_API_KEY } },
  );
  const segments = await res.json();
  ```
</CodeGroup>

The response uses the standard list envelope. `data` is the array of root-level `segment` nodes; each node may contain `children` of the next level down, recursively.

```jsonc Response (truncated) theme={"dark"}
{
  "data": [
    {
      "id": "6BsVni5re7N3JP5H5BzVjD",
      "name": "Automotive",
      "level": "segment",
      "status": "active",
      "children": [
        {
          "name": "NVIDIA DRIVE",
          "level": "product_line",
          "status": "active",
          "children": [
            { "name": "DRIVE AGX Hardware & OS", "level": "product", "status": "active" },
            { "name": "DRIVE Hyperion Platform", "level": "product", "status": "active" },
            { "name": "DRIVE Software Suite",    "level": "product", "status": "active" }
            // …
          ]
        }
        // …
      ]
    },
    {
      "id": "4P3oLUiJTgz5dcjdwy9iLb",
      "name": "Compute & Networking",
      "level": "segment",
      "status": "active",
      "children": [
        {
          "name": "Data Center Accelerators",
          "level": "product_line",
          "status": "active",
          "children": [
            { "name": "Blackwell GPUs", "level": "product", "status": "active" },
            { "name": "Hopper GPUs",    "level": "product", "status": "active" },
            { "name": "Grace and Vera CPUs", "level": "product", "status": "active" }
            // …
          ]
        }
        // …
      ]
    }
    // …
  ],
  "has_more": false,
  "cursor": null
}
```

## Filtering by status

By default only `active` products are returned. Pass `status` as a comma-separated list to include other lifecycle stages:

```bash theme={"dark"}
# Active and announced
curl "https://api.particle.pro/v1/companies/nvidia/products?status=active,announced" \
  -H "X-API-Key: $PARTICLE_API_KEY"

# Only discontinued
curl "https://api.particle.pro/v1/companies/nvidia/products?status=discontinued" \
  -H "X-API-Key: $PARTICLE_API_KEY"
```

<Warning>
  Tree integrity is preserved when filtering: if a parent doesn't match the status filter it's removed along with its children, even if some children individually match. To traverse without parent constraints, request all statuses and filter on your side.
</Warning>

## Common patterns

### Flatten to a list of products

```js theme={"dark"}
function flattenProducts(nodes, out = []) {
  for (const node of nodes) {
    if (node.level === "product") out.push(node);
    if (node.children) flattenProducts(node.children, out);
  }
  return out;
}

const { data: segments } = await fetch(".../v1/companies/nvidia/products", {
  headers: { "X-API-Key": process.env.PARTICLE_API_KEY },
}).then((r) => r.json());

const products = flattenProducts(segments);
```

### Track product launches

Combine `?status=announced` with periodic polling to see when companies announce new products. Combine with `?status=discontinued` to detect end-of-life.

## Related

* [Companies overview](/companies/overview) — resolve any company before fetching products
* [Knowledge graph → entities](/knowledge-graph/entities) — products are linked to entities for cross-content discovery
