Skip to main content

BOM (Bill of Materials) API

Define and manage bills of materials for assembly items. BOMs specify the components, quantities, and relationships required to manufacture or assemble finished products.

Endpoints

MethodEndpointDescription
GET/record/v1/bomRetrieve list of BOMs
GET/record/v1/bom/{id}Retrieve specific BOM
POST/record/v1/bomCreate new BOM
PATCH/record/v1/bom/{id}Update existing BOM
DELETE/record/v1/bom/{id}Delete BOM

Key Fields

Header Fields

FieldTypeDescriptionRequired
nameStringBOM name/identifierYes
subsidiaryObjectSubsidiary where BOM is definedYes
isInactiveBooleanWhether BOM is inactiveNo
memoStringNotes or descriptionNo
useComponentYieldBooleanUse component yield percentagesNo
restrictToAssembliesStringRestrict to specific assembliesNo
restrictToLocationsStringRestrict to specific locationsNo
includeChildrenBooleanInclude child items in BOMNo
customFormObjectCustom form referenceNo
createdDateDateTimeDate BOM was createdRead-only
lastModifiedDateDateTimeDate BOM was last modifiedRead-only

Sublist: Member (member)

FieldTypeDescriptionRequired
componentObjectComponent item referenceYes
quantityNumberQuantity required per assemblyYes
bomQuantityNumberQuantity for BOM calculationsNo
unitsObjectUnit of measureNo
itemSourceStringSource of the itemNo
effectiveDateDateDate when component becomes effectiveNo
obsoleteDateDateDate when component becomes obsoleteNo
componentYieldNumberExpected yield percentageNo
descriptionStringComponent descriptionNo

Example: Create BOM

Request

POST /record/v1/bom
Content-Type: application/json
{
"name": "Widget-BOM-v1",
"subsidiary": {
"id": "1"
},
"isInactive": false,
"memo": "Standard BOM for Widget Assembly A",
"useComponentYield": true,
"member": {
"items": [
{
"component": {
"id": "789"
},
"quantity": 2,
"bomQuantity": 2,
"componentYield": 98,
"description": "Main component - 2 per unit"
},
{
"component": {
"id": "790"
},
"quantity": 1,
"bomQuantity": 1,
"componentYield": 100,
"description": "Secondary component - 1 per unit"
},
{
"component": {
"id": "791"
},
"quantity": 4,
"bomQuantity": 4,
"componentYield": 95,
"description": "Fasteners - 4 per unit"
}
]
}
}

Response

{
"id": "100",
"name": "Widget-BOM-v1",
"subsidiary": {
"id": "1",
"refName": "Parent Company"
},
"isInactive": false,
"memo": "Standard BOM for Widget Assembly A",
"useComponentYield": true,
"includeChildren": false,
"createdDate": "2025-12-25T09:00:00Z",
"lastModifiedDate": "2025-12-25T09:00:00Z",
"member": {
"items": [
{
"component": {
"id": "789",
"refName": "Component Part A"
},
"quantity": 2,
"bomQuantity": 2,
"componentYield": 98,
"units": {
"id": "1",
"refName": "Each"
},
"description": "Main component - 2 per unit"
},
{
"component": {
"id": "790",
"refName": "Component Part B"
},
"quantity": 1,
"bomQuantity": 1,
"componentYield": 100,
"units": {
"id": "1",
"refName": "Each"
},
"description": "Secondary component - 1 per unit"
},
{
"component": {
"id": "791",
"refName": "Fastener Set"
},
"quantity": 4,
"bomQuantity": 4,
"componentYield": 95,
"units": {
"id": "1",
"refName": "Each"
},
"description": "Fasteners - 4 per unit"
}
]
},
"links": [
{
"rel": "self",
"href": "https://your-account.suitetalk.api.netsuite.com/services/rest/record/v1/bom/100"
}
]
}

Example: Create BOM with Date Effectivity

Request

POST /record/v1/bom
Content-Type: application/json
{
"name": "Widget-BOM-v2-Phased",
"subsidiary": {
"id": "1"
},
"memo": "BOM with component phase-in/phase-out",
"member": {
"items": [
{
"component": {
"id": "789"
},
"quantity": 2,
"effectiveDate": "2025-01-01"
},
{
"component": {
"id": "792"
},
"quantity": 2,
"effectiveDate": "2026-01-01",
"description": "New component replacing 789 in 2026"
},
{
"component": {
"id": "790"
},
"quantity": 1,
"effectiveDate": "2025-01-01",
"obsoleteDate": "2025-12-31",
"description": "Being phased out end of 2025"
}
]
}
}

Response

{
"id": "101",
"name": "Widget-BOM-v2-Phased",
"memo": "BOM with component phase-in/phase-out",
"member": {
"items": [
{
"component": {
"id": "789",
"refName": "Component Part A"
},
"quantity": 2,
"effectiveDate": "2025-01-01"
},
{
"component": {
"id": "792",
"refName": "Component Part A-2"
},
"quantity": 2,
"effectiveDate": "2026-01-01",
"description": "New component replacing 789 in 2026"
},
{
"component": {
"id": "790",
"refName": "Component Part B"
},
"quantity": 1,
"effectiveDate": "2025-01-01",
"obsoleteDate": "2025-12-31",
"description": "Being phased out end of 2025"
}
]
},
"links": [
{
"rel": "self",
"href": "https://your-account.suitetalk.api.netsuite.com/services/rest/record/v1/bom/101"
}
]
}

Example: Update BOM

Request

PATCH /record/v1/bom/100
Content-Type: application/json
{
"memo": "Standard BOM for Widget Assembly A - Updated component quantities",
"member": {
"items": [
{
"component": {
"id": "789"
},
"quantity": 2.5,
"bomQuantity": 2.5,
"componentYield": 98
},
{
"component": {
"id": "790"
},
"quantity": 1,
"bomQuantity": 1,
"componentYield": 100
},
{
"component": {
"id": "791"
},
"quantity": 4,
"bomQuantity": 4,
"componentYield": 95
}
]
}
}

Response

{
"id": "100",
"memo": "Standard BOM for Widget Assembly A - Updated component quantities",
"lastModifiedDate": "2025-12-25T11:30:00Z",
"member": {
"items": [
{
"component": {
"id": "789",
"refName": "Component Part A"
},
"quantity": 2.5,
"bomQuantity": 2.5,
"componentYield": 98
},
{
"component": {
"id": "790",
"refName": "Component Part B"
},
"quantity": 1,
"bomQuantity": 1,
"componentYield": 100
},
{
"component": {
"id": "791",
"refName": "Fastener Set"
},
"quantity": 4,
"bomQuantity": 4,
"componentYield": 95
}
]
},
"links": [
{
"rel": "self",
"href": "https://your-account.suitetalk.api.netsuite.com/services/rest/record/v1/bom/100"
}
]
}

Sublists and Components

Member Components (member)

The member sublist defines the components that make up the BOM.

Fields:

  • component: Reference to the component item
  • quantity: Quantity required per assembly unit
  • bomQuantity: Quantity for BOM calculations
  • units: Unit of measure
  • componentYield: Expected yield percentage (accounts for scrap/waste)
  • effectiveDate: Date when component becomes active
  • obsoleteDate: Date when component is no longer used
  • description: Additional notes about the component

Example:

"member": {
"items": [
{
"component": {"id": "789"},
"quantity": 2,
"componentYield": 98,
"effectiveDate": "2025-01-01"
}
]
}

Query Filters

Filter by Name

GET /record/v1/bom?q=name LIKE 'Widget%'

Filter by Subsidiary

GET /record/v1/bom?q=subsidiary EQUAL 1

Filter Active BOMs

GET /record/v1/bom?q=isInactive EQUAL false

Filter by Component

GET /record/v1/bom?q=member.component EQUAL 789
GET /record/v1/bom/100?expandSubResources=true

BOM Concepts

What is a BOM?

A Bill of Materials (BOM) is a comprehensive list of:

  • Raw materials
  • Components
  • Sub-assemblies
  • Quantities required
  • Assembly instructions

BOM Types

  1. Single-Level BOM: Lists only direct components
  2. Multi-Level BOM: Includes sub-assemblies and their components
  3. Configurable BOM: Varies based on product configuration

Important Notes

  1. BOM Purpose:

    • Defines component requirements for assemblies
    • Used by work orders, assembly builds, and MRP
    • Determines material costs and requirements
    • Supports product configuration and variants
  2. Subsidiary Specific:

    • BOMs are defined per subsidiary
    • Different subsidiaries can have different BOMs for the same item
    • Useful for regional manufacturing variations
  3. Component Items:

    • Components can be inventory items, non-inventory, or sub-assemblies
    • Components must exist before adding to BOM
    • Same component can appear multiple times with different dates
  4. Quantity Management:

    • quantity: Standard quantity per assembly unit
    • bomQuantity: May differ for special calculations
    • Fractional quantities are supported
    • Zero quantity components are typically not allowed
  5. Component Yield:

    • Accounts for expected waste or scrap
    • 98% yield means 2% expected loss
    • Affects material requirements planning
    • Higher quantities ordered to account for yield loss
  6. Date Effectivity:

    • effectiveDate: Component starts being used
    • obsoleteDate: Component stops being used
    • Allows phased component transitions
    • System uses effective components based on transaction date
  7. BOM Assignment:

    • BOMs can be assigned to assembly items
    • Multiple BOMs can exist for one assembly (use revisions)
    • Work orders and builds use the assigned BOM
    • Can override BOM selection at build time
  8. Include Children:

    • When enabled, shows all sub-assembly components
    • Provides complete material requirements
    • Useful for procurement and planning
  9. Location Restrictions:

    • BOMs can be restricted to specific locations
    • Different locations may use different component sources
    • Supports multi-site manufacturing
  10. Assembly Restrictions:

    • BOMs can be restricted to specific assembly items
    • One BOM can support multiple similar assemblies
    • Simplifies maintenance of common BOMs
  11. Inactive BOMs:

    • Inactive BOMs cannot be used for new builds
    • Existing work orders using inactive BOM can continue
    • Use for discontinued products or outdated processes
  12. BOM Costing:

    • Assembly cost calculated from component costs
    • Yield factors affect expected component consumption
    • Supports standard, average, FIFO, and LIFO costing
  13. BOM Revisions:

    • Use BOM Revision records for version control
    • Track engineering changes over time
    • Maintain historical BOM configurations
  14. Multi-Level BOMs:

    • Sub-assemblies can have their own BOMs
    • System automatically explodes to raw materials
    • MRP considers all levels for requirements
  15. Custom Forms: Custom BOM forms may include additional fields for engineering data.

  16. Permissions: Requires "BOM" permission with appropriate access level.

  17. Integration:

    • BOMs integrate with MRP, work orders, and assembly builds
    • PLM systems may synchronize with NetSuite BOMs
    • Engineering change management may trigger BOM updates
  18. Best Practices:

    • Use clear, consistent naming conventions
    • Document component purposes in descriptions
    • Regularly review and update yield percentages
    • Use date effectivity for smooth transitions
    • Maintain BOM revisions for change tracking
  19. Reporting:

    • Where-used reports show which assemblies use a component
    • Single-level and multi-level BOM reports available
    • Cost rollup reports aggregate component costs
  20. Mass Updates:

    • Use CSV import for bulk BOM updates
    • SuiteScript can automate BOM maintenance
    • Version control important for compliance