> ## Documentation Index
> Fetch the complete documentation index at: https://developer.jtl-software.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Creates a new bill of materials for a production item, including its components.



## OpenAPI

````yaml /openapi/2.1.json post /v2/production-items/{productionItemId}/bills-of-materials/create
openapi: 3.0.0
info:
  title: JTL-WAWI API (Cloud)
  description: "JTL-Wawi-Version: 2.2.0-alpha.7351+Sha.7529201\r\n# Introduction\r\n\r\nWelcome to the JTL-WAWI technical API documentation. This guide is here to help developers understand how our REST API works and how it can be integrated into your existing systems. We'll delve into the details of authentication and data manipulation processes, providing clear examples along the way. Whether you're a developer or an IT professional, this documentation aims to give you a practical understanding, laying the groundwork for effectively using the JTL-WAWI API to enhance your processes.\r\n\r\n# Authentication\r\n\r\nYou register your application with the API by sending a POST request with the required information and corresponding keys. You can find the exact request details at https://developer.jtl-software.com/products/erp/swagger/appregistration. This information has to include the following:\r\n\r\n* AppId\r\n* DisplayName\r\n* Description\r\n* Version\r\n* ProviderName\r\n* ProviderWebsite\r\n* MandatoryApiScopes\r\n\r\nThis data is crucial for identifying and registering your application with the API. The API uses it to generate a temporary authentication ID that allows your application to access the necessary resources. After successful validation of this information, you will receive the API key required for future authentication and API requests.\r\n\r\nBefore you can begin the registration process, you must open JTL-Wawi (new interface) and start the registration process under 'Admin->App registration'. Only at this point are you authorised to send the first API call. This step in JTL-Wawi ensures that your application is properly registered and has permission to use the API.\r\n\r\nThe API will send you an authentication ID in the form of a token. Once you have received this token and successfully completed the registration in JTL-Wawi, you will send another request to the API by including this authentication ID in the URL path.\r\n\r\nAfter successful validation of this second request by the API and confirmation of the correct information, you will be provided with the actual API key. It is important to note that this API key will not be displayed again!\r\n\r\nThis API key will be used in the future to authenticate requests to the API. It is of utmost importance that you securely store the API key upon receipt, as it cannot be retrieved from any other location in the system."
  contact:
    name: JTL-Software-GmbH
    url: https://developer.jtl-software.com/
    email: partner@jtl-software.com
  version: '2.1'
  x-application-version: 2.2.0.0
servers:
  - url: https://api.jtl-cloud.com/erp
    description: Production Environment Cloud API Gateway
security: []
tags:
  - name: wms
    description: >-
      <p data-section-id='tag/wms' class='stable_summary'></p>Query all pick
      lists for a specific wms warehouse that are not completed.
  - name: WawiApp
    description: Development
  - name: warehouse
    description: >-
      <p data-section-id='tag/warehouse' class='stable_summary'></p>Query all
      warehouses
  - name: transactionStatus
    description: >-
      <p data-section-id='tag/transactionStatus'
      class='stable_summary'></p>Query all transaction status for sales order
  - name: tax
    description: >-
      <p data-section-id='tag/tax' class='stable_summary'></p>Returns the
      Taxrate for the given Item
  - name: item
    description: >-
      <p data-section-id='tag/item' class='stable_summary'></p>Query all tax
      classes
  - name: supplier
    description: >-
      <p data-section-id='tag/supplier' class='stable_summary'></p>Query all
      suppliers
  - name: stock
    description: >-
      <p data-section-id='tag/stock' class='stable_summary'></p>Query stocks for
      a specific item, warehouse or storage location
  - name: shippingmethod
    description: >-
      <p data-section-id='tag/shippingmethod' class='stable_summary'></p>Query
      all shipping methods
  - name: shipment
    description: >-
      <p data-section-id='tag/shipment' class='stable_summary'></p>Download a
      PDF Shipping Label from database by ID
  - name: salesorder
    description: >-
      <p data-section-id='tag/salesorder' class='stable_summary'></p>Query all
      sales orders
  - name: cancellationreason
    description: Planned
  - name: salesinvoicecorrection
    description: Development
  - name: return
    description: >-
      <p data-section-id='tag/return' class='beta_summary'></p>Create a new
      return with associated items and packages.
  - name: returnstate
    description: Planned
  - name: returnreason
    description: Planned
  - name: property
    description: >-
      <p data-section-id='tag/property' class='stable_summary'></p>Query all
      properties for items
  - name: printer
    description: >-
      <p data-section-id='tag/printer' class='beta_summary'></p>Returns all
      Installed Printers
  - name: paymentmethod
    description: >-
      <p data-section-id='tag/paymentmethod' class='stable_summary'></p>Query
      all payment methods
  - name: onholdreason
    description: >-
      <p data-section-id='tag/onholdreason' class='stable_summary'></p>Query all
      on hold reasons for sales orders
  - name: offer
    description: >-
      <p data-section-id='tag/offer' class='beta_summary'></p>Execute the
      printing of a Offer
  - name: Configuration
    description: Planned
  - name: manufacturer
    description: Development
  - name: label
    description: Development
  - name: invoice
    description: Planned
  - name: info
    description: >-
      <p data-section-id='tag/info' class='stable_summary'></p>Returns the
      status of the API
  - name: features
    description: >-
      <p data-section-id='tag/features' class='stable_summary'></p>Returns the
      available feature sets with release state and API version
  - name: Extensibility
    description: Planned
  - name: shipping
    description: Development
  - name: deliverynote
    description: Planned
  - name: customfields
    description: Development
  - name: customfield
    description: Development
  - name: customer
    description: >-
      <p data-section-id='tag/customer' class='stable_summary'></p>Query all
      customers
  - name: customerGroup
    description: >-
      <p data-section-id='tag/customerGroup' class='stable_summary'></p>Query
      all customer groups
  - name: customerCategory
    description: >-
      <p data-section-id='tag/customerCategory' class='stable_summary'></p>Query
      all customer categories
  - name: creditnote
    description: >-
      <p data-section-id='tag/creditnote' class='beta_summary'></p>Execute the
      printing of a CreditNote
  - name: company
    description: >-
      <p data-section-id='tag/company' class='stable_summary'></p>Query all
      companies
  - name: colorcodes
    description: >-
      <p data-section-id='tag/colorcodes' class='stable_summary'></p>Query all
      color codes for sales orders
  - name: category
    description: Development
  - name: appRegistration
    description: >-
      <p data-section-id='tag/appRegistration'
      class='deprecated_summary'></p>DEPRECATED seit Wawi 2.2.0: No-Op. Seit
      Wawi 2.1.0 registriert sich die Wawi selbst per JWT.
  - name: login
    description: >-
      <p data-section-id='tag/login' class='beta_summary'></p>Sends a request to
      log in the user / dynamically assign the WAWI user. Only use this request
      if your API uses SSL.
  - name: logout
    description: >-
      <p data-section-id='tag/logout' class='beta_summary'></p>Sends a request
      to log out the user
  - name: attribute
    description: Development
  - name: accountingData
    description: Planned
paths:
  /v2/production-items/{productionItemId}/bills-of-materials/create:
    post:
      tags:
        - CreateCommand
      summary: >-
        Creates a new bill of materials for a production item, including its
        components.
      operationId: Create_CreateBillOfMaterials
      parameters:
        - name: x-tenant-id
          in: header
          required: true
          schema:
            type: string
            format: uuid
          description: The tenant ID for the target ERP instance.
        - name: productionItemId
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/JTL.Pps.Core.Contracts.Keys.ProdItemKey'
            example: b45f6432-2462-4c6f-b00f-1d9d01000000
          x-position: 2
        - name: x-runas
          in: header
          description: >-
            The User-Id (int or uuid) on whose behalf the request is executed.
            Requires scope 'Application.RunAs'.
          schema:
            type: string
        - name: x-companyid
          in: header
          description: >-
            The Company-Id (int or uuid) of the company on whose behalf the
            request is executed.
          schema:
            type: string
      requestBody:
        x-name: request
        description: Request parameters
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateBillOfMaterialsCommandRequest
        required: true
        x-position: 1
      responses:
        '201':
          description: Successfully created a bill of materials.
          content:
            application/json: {}
      security:
        - oauth2-authorization-code:
            - pps.write
        - oauth2-client-credentials:
            - pps.write
components:
  schemas:
    JTL.Pps.Core.Contracts.Keys.ProdItemKey:
      type: string
      description: Der Schlüssel eines Produktionsartikels.
      format: uuid
      example: b45f6432-2462-4c6f-b00f-1d9d01000000
      additionalProperties: false
    JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateBillOfMaterialsCommandRequest:
      type: object
      description: >-
        Creates a new bill of materials for a production item, including its
        components. - Request
      additionalProperties: false
      required:
        - ProductionItemId
        - Input
      properties:
        productionItemId:
          $ref: '#/components/schemas/JTL.Pps.Core.Contracts.Keys.ProdItemKey'
          description: >-
            The ID of the production item for which the bill of materials is to
            be created.
        input:
          $ref: >-
            #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateBillOfMaterialsInput
          description: >-
            The input for creating a bill of materials as part of a production
            item.
    JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateBillOfMaterialsInput:
      type: object
      description: >-
        Represents the input for creating a bill of materials as part of a
        production item.
      additionalProperties: false
      required:
        - Name
        - Operations
      properties:
        name:
          type: string
          description: The name of the bill of materials.
        description:
          type: string
          description: An optional description of the bill of materials.
        componentPostingsShelfLifeEndDateRequirements:
          $ref: >-
            #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateOverallComponentPostingsInventoryAccountingDataRequirements
          type: integer
          description: >-
            Requirements for the production input of all components of this bill
            of materials regarding the shelf life end dates of the stock
            accounts to be debited. This requirement can be overridden for
            individual components. Optional; defaults to None. Must not be set
            to a value other than None if no component's underlying item has a
            shelf life end date configured.
          format: int32
        componentPostingsBatchNumberRequirements:
          $ref: >-
            #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateOverallComponentPostingsInventoryAccountingDataRequirements
          type: integer
          description: >-
            Requirements for the production input of all components of this bill
            of materials regarding the batch numbers of the stock accounts to be
            debited. This requirement can be overridden for individual
            components. Optional; defaults to None. Must not be set to a value
            other than None if no component's underlying item has a batch number
            configured.
          format: int32
        shelfLifeEndDateGenerationMode:
          $ref: >-
            #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateShelfLifeEndDateGenerationMode
          type: integer
          description: >-
            Indicates how the shelf life end date of the produced item is
            calculated after completing a lot.
          format: int32
        additionalShelfLifeEndDateTime:
          type: string
          description: >-
            A time span that is added when calculating the shelf life end date
            of the produced item after completing a lot. Required when
            ShelfLifeEndDateGenerationMode is ProductionDate; optional when
            ShelfLifeEndDateGenerationMode is Earliest or Latest; is ignored
            when ShelfLifeEndDateGenerationMode is not specified.
          format: duration
        operations:
          type: array
          description: >-
            The operations of this bill of materials. At least one operation is
            required, and across all operations at least one item must be
            present.
          items:
            $ref: >-
              #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateBillOfMaterialsOperationInput
    JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateOverallComponentPostingsInventoryAccountingDataRequirements:
      type: integer
      description: 0 = None, 1 = Identical
      format: int32
      x-enumNames:
        - None
        - Identical
      enum:
        - 0
        - 1
    JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateShelfLifeEndDateGenerationMode:
      type: integer
      description: 0 = Earliest, 1 = Latest, 2 = ProductionDate
      format: int32
      x-enumNames:
        - Earliest
        - Latest
        - ProductionDate
      enum:
        - 0
        - 1
        - 2
    JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateBillOfMaterialsOperationInput:
      type: object
      description: >-
        Represents the input for creating a bill of materials operation as part
        of a new bill of materials.
      additionalProperties: false
      required:
        - OperationId
      properties:
        operationId:
          $ref: '#/components/schemas/JTL.Pps.Core.Contracts.Keys.OperationKey'
          description: >-
            The ID of the operation to be assigned to this bill of materials
            operation. The operation must exist.
        items:
          type: array
          description: >-
            The bill of materials items assigned to this operation. Optional per
            individual operation, but at least one component must be present
            across all operations within the bill of materials.
          items:
            $ref: >-
              #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateBillOfMaterialsItemInput
    JTL.Pps.Core.Contracts.Keys.OperationKey:
      type: string
      format: uuid
      example: b45f6432-2462-4c6f-b00f-1d9d01000000
      additionalProperties: false
    JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateBillOfMaterialsItemInput:
      type: object
      description: >-
        Represents the input for creating a bill of materials item as part of a
        bill of materials operation.
      additionalProperties: false
      required:
        - ItemId
        - Quantity
      properties:
        itemId:
          $ref: '#/components/schemas/JTL.Data.Contracts.Keys.ArtikelKey'
          description: The ID of the item to be used as a bill of materials item.
        quantity:
          type: number
          description: >-
            The required quantity of this component for the production of the
            production item. Must be greater than zero.
          format: decimal
        measurementUnitId:
          $ref: '#/components/schemas/JTL.Data.Contracts.Keys.MassEinheitKey'
          description: >-
            The ID of the measurement unit in which the quantity is managed, or
            NULL to use the sales unit of the underlying item.
          example: b45f6432-2462-4c6f-b00f-1d9d01000000
        componentPostingsShelfLifeEndDateRequirements:
          $ref: >-
            #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateComponentPostingsInventoryAccountingDataRequirements
          type: integer
          description: >-
            Requirements for the production input of this component regarding
            the shelf life end dates of the stock accounts to be debited.
            Overrides the corresponding setting on the bill of materials level
            for this component. Optional; defaults to Inherited, which applies
            the requirement specified at the bill of materials level. Must not
            be set to a value other than Inherited if the underlying item does
            not have a shelf life end date configured.
          format: int32
        componentPostingsBatchNumberRequirements:
          $ref: >-
            #/components/schemas/JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateComponentPostingsInventoryAccountingDataRequirements
          type: integer
          description: >-
            Requirements for the production input of this component regarding
            the batch numbers of the stock accounts to be debited. Overrides the
            corresponding setting on the bill of materials level for this
            component. Optional; defaults to Inherited, which applies the
            requirement specified at the bill of materials level. Must not be
            set to a value other than Inherited if the underlying item does not
            have a batch number configured.
          format: int32
    JTL.Data.Contracts.Keys.ArtikelKey:
      type: string
      format: uuid
      example: b45f6432-2462-4c6f-b00f-1d9d01000000
      additionalProperties: false
    JTL.Data.Contracts.Keys.MassEinheitKey:
      type: string
      format: uuid
      example: b45f6432-2462-4c6f-b00f-1d9d01000000
      additionalProperties: false
    JTL.PPS.ProductionItems.PublicApi.DataTransferObjects.V2.Create.CreateComponentPostingsInventoryAccountingDataRequirements:
      type: integer
      description: 0 = Inherited, 1 = None, 2 = Identical
      format: int32
      x-enumNames:
        - Inherited
        - None
        - Identical
      enum:
        - 0
        - 1
        - 2
  securitySchemes:
    oauth2-authorization-code:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://auth.jtl-cloud.com/oauth2/auth
          tokenUrl: https://auth.jtl-cloud.com/oauth2/token
          scopes:
            items.read: Artikel lesen
            items.write: Artikel schreiben
            saleschannels.read: Verkaufskanäle lesen
            accountings.read: TbD
            all.read: Erlaubt der Anwendung, alle Daten zu lesen.
            cusomters.read: TbD
            customers.read: TbD
            customers.write: TbD
            customfields.read: TbD
            customfields.write: TbD
            deliveries.read: TbD
            deliveries.write: TbD
            deliverynotes.print: TbD
            deliverynotes.read: TbD
            deliverynotes.write: TbD
            extensibility.integration: TbD
            inventories.read: TbD
            inventories.write: TbD
            invoices.print: TbD
            invoices.read: TbD
            invoices.write: TbD
            labels.read: TbD
            labels.write: TbD
            offers.print: TbD
            offers.read: TbD
            orders.read: TbD
            picklists.read: TbD
            picklists.write: TbD
            returns.read: TbD
            returns.write: TbD
            salesinvoicecorrections.print: TbD
            salesinvoicecorrections.read: TbD
            salesinvoicecorrections.write: TbD
            salesorders.print: TbD
            salesorders.read: TbD
            salesorders.write: TbD
            suppliers.read: TbD
            system.config.read: TbD
            system.config.write: TbD
            system.read: TbD
            taxes.read: TbD
            warehouse.read: TbD
            wawiapp.all: Ermöglicht den Zugriff auf Wawi-App bezogene Opperationen.
            currencies.read: Ermöglicht den Lesezugriff auf Währungen.
            jera.read: Ermöglicht den Lesezugriff auf JERA-interne Endpunkte.
            paymentmethods.read: Ermöglicht den Lesezugriff auf Zahlungsarten.
            payments.write: Ermöglicht den Schreibzugriff auf Zahlungen.
            salesinvoices.read: Ermöglicht den Lesezugriff auf Verkaufsrechnungen.
            salesinvoices.write: Ermöglicht den Schreibzugriff auf Verkaufsrechnungen.
            salesquotations.read: Ermöglicht den Lesezugriff auf Verkaufsangebote.
            salesquotations.write: Ermöglicht den Schreibzugriff auf Verkaufsangebote.
            system.worker.read: Worker-Synchronisationen lesen
            system.worker.write: Worker-Synchronisationen schreiben
            resources.read: Ressourcen lesen
            resources.write: Ressourcen schreiben
            pps.read: Produktionsdaten lesen
            pps.write: Produktionsdaten schreiben
            inventory.read: Lagerbestand lesen
            inventory.write: Lagerbestand schreiben
            taxes.write: Steuern schreiben
            application.runas: >-
              Ermöglicht der Anwendung, Anfragen im Namen eines anderen
              Benutzers auszuführen.
    oauth2-client-credentials:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.jtl-cloud.com/oauth2/token
          scopes:
            items.read: Artikel lesen
            items.write: Artikel schreiben
            saleschannels.read: Verkaufskanäle lesen
            accountings.read: TbD
            all.read: Erlaubt der Anwendung, alle Daten zu lesen.
            cusomters.read: TbD
            customers.read: TbD
            customers.write: TbD
            customfields.read: TbD
            customfields.write: TbD
            deliveries.read: TbD
            deliveries.write: TbD
            deliverynotes.print: TbD
            deliverynotes.read: TbD
            deliverynotes.write: TbD
            extensibility.integration: TbD
            inventories.read: TbD
            inventories.write: TbD
            invoices.print: TbD
            invoices.read: TbD
            invoices.write: TbD
            labels.read: TbD
            labels.write: TbD
            offers.print: TbD
            offers.read: TbD
            orders.read: TbD
            picklists.read: TbD
            picklists.write: TbD
            returns.read: TbD
            returns.write: TbD
            salesinvoicecorrections.print: TbD
            salesinvoicecorrections.read: TbD
            salesinvoicecorrections.write: TbD
            salesorders.print: TbD
            salesorders.read: TbD
            salesorders.write: TbD
            suppliers.read: TbD
            system.config.read: TbD
            system.config.write: TbD
            system.read: TbD
            taxes.read: TbD
            warehouse.read: TbD
            wawiapp.all: Ermöglicht den Zugriff auf Wawi-App bezogene Opperationen.
            currencies.read: Ermöglicht den Lesezugriff auf Währungen.
            jera.read: Ermöglicht den Lesezugriff auf JERA-interne Endpunkte.
            paymentmethods.read: Ermöglicht den Lesezugriff auf Zahlungsarten.
            payments.write: Ermöglicht den Schreibzugriff auf Zahlungen.
            salesinvoices.read: Ermöglicht den Lesezugriff auf Verkaufsrechnungen.
            salesinvoices.write: Ermöglicht den Schreibzugriff auf Verkaufsrechnungen.
            salesquotations.read: Ermöglicht den Lesezugriff auf Verkaufsangebote.
            salesquotations.write: Ermöglicht den Schreibzugriff auf Verkaufsangebote.
            system.worker.read: Worker-Synchronisationen lesen
            system.worker.write: Worker-Synchronisationen schreiben
            resources.read: Ressourcen lesen
            resources.write: Ressourcen schreiben
            pps.read: Produktionsdaten lesen
            pps.write: Produktionsdaten schreiben
            inventory.read: Lagerbestand lesen
            inventory.write: Lagerbestand schreiben
            taxes.write: Steuern schreiben
            application.runas: >-
              Ermöglicht der Anwendung, Anfragen im Namen eines anderen
              Benutzers auszuführen.

````