---
title: "Replace a PCF product's bill of materials"
method: PUT
path: "/pcf/products/{productId}/bom"
---

# Replace a PCF product's bill of materials

`PUT /pcf/products/{productId}/bom`

Replaces every BOM line, in the order given. A line's factorEntryId, when set, must name an active factor of the PCF factor library. Requires org.write_data.

## Request body

- PcfBomReplaceRequest
  - `lines` PcfBomLineInput[], required
    - `description` string, required
    - `factorEntryId` string, nullable
    - `notes` string, nullable
    - `quantity` number, double, required
    - `quantityUnit` string, required
    - `stage` 'materials' | 'packaging' | 'transport' | 'energy' | 'waste', required

## Response `200`

Product with its new BOM

- PcfProductDetailResponse
  - `data` PcfProductDetail, required
    - `lines` PcfBomLine[], required
      - `description` string, required
      - `factor` PcfFactor, required
        - `activityCode` string, required
        - `activityUnit` string, required
        - `categoryName` string, required
        - `factorValue` number, double, required
        - `id` string, required
        - `name` string, required
        - `referenceProduct` string, nullable
        - `regionCode` string, required
        - `releaseId` string, required
        - `releaseName` string, required
        - `releaseVersion` string, required
        - `releaseYear` integer, nullable
        - `scope` integer, required
        - `sourceLocation` string, nullable
        - `sourceUuid` string, nullable
        - `split` PcfEmissionSplit — Fossil, biogenic and land-use-change parts of a GWP100 value, in the same unit as the value they split.
          - `biogenic` number, double, required
          - `fossil` number, double, required
          - `landUseChange` number, double, required
        - `unit` string, required
      - `id` string, required
      - `notes` string, nullable, required
      - `position` integer, required
      - `quantity` number, double, required
      - `quantityUnit` string, required
      - `stage` 'materials' | 'packaging' | 'transport' | 'energy' | 'waste', required
    - `product` PcfProduct, required
      - `archivedAt` string, date-time, nullable, required
      - `createdAt` string, date-time, required
      - `declaredQuantity` number, double, required
      - `declaredUnit` string, required
      - `description` string, nullable, required
      - `id` string, required
      - `latestCalculation` PcfCalculationSummary, required
        - `createdAt` string, date-time, required
        - `id` string, required
        - `kgCo2ePerDeclaredUnit` number, double, required
        - `methodVersion` string, required
        - `totalKgCo2e` number, double, required
      - `lineCount` integer, required
      - `name` string, required
      - `productCode` string, nullable, required
      - `regionCode` string, nullable, required
      - `source` 'manual' | 'upload', required — Typed in, or created from an uploaded BOM file.
      - `sourceFile` PcfProductSourceFile, required
        - `contentType` string, required
        - `fileName` string, required
        - `importId` string, required
        - `sizeBytes` integer, required
        - `uploadedAt` string, date-time, required
      - `updatedAt` string, date-time, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found

## Changes

- **2026-10-01** `b4751fd15397` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/greentally/apis/esgai-api/changes/pcf/products/:productId/bom/put.md)

---

[API](https://skmtc.dev/greentally/apis/esgai-api.md) · [All operations](https://skmtc.dev/greentally/apis/esgai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/greentally/apis/esgai-api/revisions/b4751fd15397?raw)
