---
title: "Create a BOM or immutable new BOM revision"
method: POST
path: "/v1/projects/{project_id}/boms"
tags: ["Buyer BOM"]
---

# Create a BOM or immutable new BOM revision

`POST /v1/projects/{project_id}/boms`

## Request

- Base URL: `https://api.supplyslate.com`
- URL: `https://api.supplyslate.com/v1/projects/{project_id}/boms`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://mcp.supplyslate.com/authorize`, token URL `https://mcp.supplyslate.com/oauth/token`)
  - HTTP bearer

## Path parameters

- `project_id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- BomWrite
  - `bom_id` string
  - `name` string, required
  - `project_revision_id` string
  - `build_quantity` number
  - `source_artifact_id` string
  - `items` BomItemWrite[], required
    - `line_number` string, required
    - `parent_line_number` string
    - `item_kind` 'catalog_product' | 'custom_part' | 'service' | 'consumable' | 'requirement_only' | 'assembly', required
    - `make_or_buy` 'make' | 'buy' | 'either'
    - `description` string, required
    - `canonical_product_id` string
    - `manufacturer` string
    - `manufacturer_part_number` string
    - `quantity_per_assembly` number, required
    - `unit` string, required
    - `scrap_factor` number
    - `minimum_purchase_quantity` number
    - `substitution_policy` 'exact_only' | 'approval_required' | 'equivalents_allowed'
    - `specifications` object
    - `artifact_ids` string[]
  - `dependencies` BomDependencyWrite[]
    - `source_line_number` string, required
    - `target_line_number` string, required
    - `dependency_type` 'mechanical_interface' | 'electrical_interface' | 'fluid_interface' | 'software_interface' | 'assembly_order' | 'consumable_for', required
    - `requirements` object

## Response `201`

Created durably

- BomResponse
  - `bom` Bom, required
    - `id` string, required
    - `project_id` string
    - `name` string
    - `revision_number` integer
    - `items` object[]
    - `dependencies` object[]
  - `request_id` string

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `403`: Scope or tenant boundary denied
- `404`: Resource not found
- `409`: State conflict or idempotency mismatch
- `429`: Rate limited

---

[API](https://skmtc.dev/supplyslate/apis/supplyslate-agent-native-supply-api.md) · [All operations](https://skmtc.dev/supplyslate/apis/supplyslate-agent-native-supply-api/llms.txt) · [OpenAPI document](https://skmtc.dev/supplyslate/apis/supplyslate-agent-native-supply-api/revisions/f7989551f167?raw)
