{
  "openapi": "3.1.0",
  "info": {
    "title": "Luminovo API",
    "version": "1.0.0",
    "contact": {
      "email": "integrations@luminovo.com"
    },
    "license": {
      "name": "Proprietary",
      "url": "https://www.luminovo.com"
    },
    "x-logo": {
      "url": "https://uploads-ssl.webflow.com/5c7fe6c71d33841ef1f9ed4f/5c7fe6c71d33847079f9ee30_logo2.svg",
      "backgroundColor": "#22283c"
    },
    "description": "The base URL of Luminovo's API is `https://api.luminovo.com/`.\n\n**Versioning**\n\nThis API uses data model versioning to ensure backwards compatibility. The data model version is specified using the `Accept` header. For example, `Accept: application/api.luminovo.rfq-v1+json` specifies version 1 of the RfQ data model. Refer to each endpoint's description for the correct `Accept` header value. If no `Accept` header is provided, the API will return a 404 error.\n\n**Handling Enum Types**\n\nFor all enum types in the API, you must account for an `\"Unknown\"` case. This ensures forward-compatibility, as new enum variants may be introduced without notice within the same data model version. For example, an enum `Status` with variants `Ok` and `Error` may gain a new variant `Warning` at any time.\n"
  },
  "servers": [
    {
      "url": "https://api.luminovo.com"
    }
  ],
  "tags": [
    {
      "name": "Assembly",
      "description": "An Assembly is a logical group of items that should be assembled into one unit. It represents a complete product or sub-product that can be manufactured, sourced, and managed as a cohesive unit.\nYou can view assemblies in Luminovo under the \"Assemblies\" tab.\n",
      "x-displayName": "Assembly"
    },
    {
      "name": "Authentication",
      "description": "Authentication and token retrieval endpoints.",
      "x-displayName": "Authentication"
    },
    {
      "name": "BOM",
      "description": "BOM stands for Bill of Materials - it's a comprehensive list of all components, parts, and assemblies required to manufacture a product.\nYou can view BOMs in Luminovo under the respective RfQ.\n",
      "x-displayName": "BOM"
    },
    {
      "name": "Components",
      "description": "Components are the fundamental building blocks that make up electronic assemblies (PCBs, products, etc.).\nYou can view components in Luminovo under the \"Parts\" tab.\nThere are `OffTheShelf` and `Custom` components in order to get good data quality in Luminovo.\n- `OffTheShelf` are all electonic components which have a MPN and can be purchased from an electronic parts suppliers.\n- `Custom` are all other non-electronic components, such as screws, packaging materials, lables, etc. Also, custom are all electronic components which are not standartized and don't have an MPN.\n",
      "x-displayName": "Components"
    },
    {
      "name": "Custom Part",
      "description": "Get information about a custom part.\n",
      "x-displayName": "Custom Part"
    },
    {
      "name": "Customer",
      "description": "Search, Create and Get Customers.\n",
      "x-displayName": "Customer"
    },
    {
      "name": "Demand",
      "description": "**Deprecated.** The demand import endpoint is deprecated and will be removed in a future version.\n\nA demand in Luminovo is a request for a specific quantity of electronic parts or assemblies\nthat need to be delivered by a certain date. Demands are attached to assemblies or components\nwithin Luminovo based on the internal part number.\n",
      "x-displayName": "Demand"
    },
    {
      "name": "Flexible Calculation",
      "description": "Retrieve calculation plans and their configurations for RFQs.\n",
      "x-displayName": "Flexible Calculation"
    },
    {
      "name": "Manufacturing and Calculation",
      "description": "Get, create, delete and update all your manufacturing resources.\n",
      "x-displayName": "Manufacturing and Calculation"
    },
    {
      "name": "Offers and Inventory",
      "description": "Import offers and inventory data, create custom part offers and get a PCB offer.\n",
      "x-displayName": "Offers and Inventory"
    },
    {
      "name": "Order Management",
      "description": "This section is relevant for the users of Luminovo’s Customer Collaboration Platform.\nUse the following endpoints to customize the order options your customer receives when ordering via the Customer Collaboration Platform.\n",
      "x-displayName": "Order Management"
    },
    {
      "name": "PCB",
      "description": "PCB-related endpoints and resources.",
      "x-displayName": "PCB"
    },
    {
      "name": "PnP",
      "description": "Pick and Place (PnP) data for assemblies.\n",
      "x-displayName": "PnP"
    },
    {
      "name": "Purchase Orders",
      "description": "**Deprecated.** These endpoints are deprecated and will not be maintained going forward.\nIf you currently rely on them and this is a blocker, please reach out to us.\n\nGet and create purchase orders for a sourcing scenario.\n",
      "x-displayName": "Purchase Orders"
    },
    {
      "name": "Quotation",
      "description": "You can upload the quotation for an RfQ.\n",
      "x-displayName": "Quotation"
    },
    {
      "name": "RfQ",
      "description": "Get one or all RfQ’s, delete, create or update one RfQ.\n",
      "x-displayName": "RfQ"
    },
    {
      "name": "Sourcing Scenario",
      "description": "A sourcing scenario defines a sourcing configuration for a project. Each scenario specifies which\nassemblies to source (demands), their required quantities, and a set of solution preferences\nthat control how offers are evaluated and selected.\n\nSourcing scenarios belong to a project, which is either an **RFQ** (Request for Quotation) or a\n**Negotiation**. A single project can have multiple scenarios, allowing you to compare\ndifferent sourcing strategies side by side — for example, different order quantities,\nsupplier preferences, or lead time targets.\n\n**Note on solution preferences:** Sourcing scenarios include detailed solution preferences that control\nhow offers are evaluated (e.g., lead time targets, supplier preferences, inventory handling,\npricing filters, packaging, and excess thresholds). These settings are complex and evolve\nfrequently — we update them on a monthly basis. For this reason, **managing solution\npreferences via the API is not supported**. Please configure them through the Luminovo UI\ninstead.\n",
      "x-displayName": "Sourcing Scenario"
    },
    {
      "name": "Supplier",
      "description": "Supplier-management related endpoints.\n",
      "x-displayName": "Supplier"
    },
    {
      "name": "User",
      "description": "Get all your Luminovo users.\n",
      "x-displayName": "User"
    },
    {
      "name": "Offers",
      "description": "A priced option for buying a specific part from a specific source.\n\nAn **offer** captures everything needed to evaluate or place a purchase: the part it is for (`linked_part`), where it comes from (`linked_location`, either an external supplier branch or an internal inventory site), quantity-based pricing tiers (`price_breaks`), packaging, validity dates, and — for standard-part offers — current stock and factory lead time.\n\n**Two kinds.** The `kind` discriminator describes the *nature of the offer* — how it is priced and fulfilled — and determines the payload shape:\n\n- `StandardPart` — an offer for a catalog part. `availability` (stock + factory lead time) is reported at the offer level. Price-break tiers carry only quantity and unit price.\n- `CustomPart` — an offer for a custom-manufactured part (PCB, mechanical, cable, ...). There is no offer-level `availability` or `packaging`; per-tier `lead_time` lives in `price_breaks` instead, because fulfillment time depends on order quantity.\n\nIn other words, `kind` describes the *offer*, while `linked_part.type` describes how the *part* is identified — the two are related but not the same.\n\nSee the `OfferResponse` schema for the full list of fields and their semantics, including the offer-identifier format and the unit-of-measurement convention used throughout the offer.",
      "x-displayName": "Offers"
    },
    {
      "name": "Offer Import Context",
      "description": "A named grouping that offers are imported under. Every imported offer belongs to at most one import context, which records how and from where that batch of offers arrived.\n\nUse it to organize and trace imported offers by their source. This API lets you list, create, update and delete offer import contexts.\n\nContext names are unique per tenant: a name can belong to at most one context, regardless of origin. Creating a context with, or renaming one to, a name that is already taken returns `409 Conflict`.\n\nThe `origin` records the channel a context's offers came through:\n\n- `ApiIntegration`: offers imported programmatically through the offers import endpoint, typically by an ERP system integration.\n- `CsvIntegration`: offers imported by the nightly job that pulls CSV files from a customer's ERP storage.\n- `ManualFileUpload`: offers imported by uploading a CSV file in the UI.\n\nContexts created through this API always have `ApiIntegration` origin: the create request takes no `origin` field. The other origins are produced by their respective import flows and are only ever seen on reads.",
      "x-displayName": "Offer Import Context"
    },
    {
      "name": "Manufacturer",
      "description": "The company that makes a part, and the names it is known by.\n\nManufacturer names are how incoming part data is tied to the parts already in your library, so the same company written five different ways must resolve to one manufacturer. Each manufacturer therefore has one primary `name` plus any number of `alternative_names` — aliases such as `TI` for `Texas Instruments`, or a spelling your ERP happens to use. Aliases match exactly like the primary name.\n\n**Two kinds.** Most manufacturers come from a shared public catalogue and are the same for every tenant. Manufacturers you import are *private* to your tenant. Only private manufacturers can be renamed; aliases, by contrast, are always private and can be added to public manufacturers too.\n\n**Matching** is reported explicitly rather than left implicit. Every match carries a `match_reason` saying how closely the value matched (`exact`, `normalized` — ignoring case, punctuation and legal-form suffixes — or `prefix`) and which field it matched (the primary name or a specific alternative name). Prefix matches are informative only: they are never treated as duplicates, so importing `Acme` does not collide with an existing `Acme Components`.\n\nUse `POST /manufacturers/find` to resolve names you already have, and `POST /manufacturers/import` to create the ones that did not resolve.",
      "x-displayName": "Manufacturer"
    },
    {
      "name": "Off-the-shelf Parts",
      "description": "Catalog parts identified by manufacturer and manufacturer part number.",
      "x-displayName": "Off-the-shelf Parts"
    },
    {
      "name": "Project",
      "x-displayName": "Project"
    }
  ],
  "paths": {
    "/token": {
      "post": {
        "operationId": "PostToken",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TokenRequest"
              }
            }
          },
          "description": "## Getting an access token\nTo use the Luminovo API you need to get an access token using your authentication token.\nIf you are an API customer, you can create an API token in the API Settings: https://{insert tenant name here}.luminovo.com/settings/organization/api-integration.\nIf you want to upgrade your API package, reach out to your customer success manager.\n\n```curl\ncurl --request POST \\\n  --url https://api.luminovo.com/token  \\\n  --header 'content-type: application/json' \\\n  --data '{\"token\":\"cb7daea2-df5f-44de-99cc-213668e6c991\"}'\n```\n*Response*\n```\neyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\n```\n### API Request\n\nYou can use this `bearer token` with an `Authorization Header` in your request to obtain authorized access to Luminovo's API.\n```curl\ncurl --request GET \\\n--url https://api.luminovo.com/{endpoint} \\\n--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'\n```\n\n### Token expiration\nBear in mind that the access token is only valid for 1 hour. You can always examine the JWT token by decoding it (e.g. using https://jwt.io/) and checking the `exp` claim. When a token expires please acquire a new one using the same method discussed earlier. The rotation of access tokens avoids exposure through token leakage. It is perfectly fine to refresh a token before its expiration!\n\n### Token length\nPlease note that the length of the bearer token can vary over time. Your implementation should not make assumptions about the token length as it may increase or decrease based on future authentication system updates. Always handle the complete token as provided by the API regardless of its size.\n"
        },
        "responses": {
          "200": {
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "description": "The JWT access token",
                  "examples": [
                    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
                  ]
                }
              }
            },
            "description": "Success response"
          },
          "401": {
            "description": "Authentication failed"
          }
        },
        "summary": "Authenticating to the API",
        "security": [],
        "tags": [
          "Authentication"
        ]
      }
    },
    "/assemblies/import": {
      "post": {
        "tags": [
          "Assembly"
        ],
        "summary": "Import Assembly Data",
        "operationId": "PostAssemblies",
        "parameters": [
          {
            "name": "skip_missing_ipns",
            "in": "query",
            "description": "In case it is set to \"true\" it will allow importing assemblies even if some of the referenced IPNs do not exist in Luminovo.\nThese IPNs will then be recorded in BOM item notes. If set to “false”, the assemblies with missing IPNs will get skipped during import\n",
            "required": false,
            "schema": {
              "type": "string"
            },
            "examples": {
              "enabled": {
                "value": "true"
              }
            }
          }
        ],
        "requestBody": {
          "description": "This endpoint allows importing assembly data.\n\n**The import need not include all your assemblies.**\n**Assemblies that were uploaded previously but are not present in a new upload are not deleted.**\n\nAn assembly is a logical group of items that should be assembled into one unit.\nAssemblies can be nested via subassemblies. Nesting has to be acyclic, that is no\nassembly may be referenced in any of its own subassemblies.\n\nAssemblies are uniquely identified by the combination of `internal_part_number` and\n`revision.` That is, an assembly with the same `internal_part_number` and `revision` may\nnot be listed twice. All duplicated assemblies will be skipped during import.\n\nFinally, an assembly will also not be imported if it is part of a circular reference.\nThat is, if an assembly is referenced in any of its own subassemblies.\n\n**Run assembly imports one at a time per tenant.**\nAssembly imports for the same tenant must not run concurrently. Each import\nreconciles the tenant's full assembly tree, so two imports running at once for\nthe same tenant can interfere and cause one of them to fail.\n\n* **Serialize per tenant.** Issue one import request at a time for a given tenant.\n  Wait for the response before sending the next, and leave a short pause between\n  calls. Do not fan out imports in parallel.\n* **Match your client timeout to real import durations.** A large assembly import\n  can take several minutes. Set your client read timeout above the longest import\n  you expect. If your client times out and retries while the original request is\n  still being processed on our side, you create two overlapping imports for the\n  same tenant, which is the exact situation to avoid.\n* **Handle 409 Conflict.** If an import returns `409 Conflict`, another import for\n  the same tenant is still in progress. Wait a few seconds and retry the same\n  request. Do not treat 409 as a permanent failure.\n\nConcurrent imports for the same tenant are not supported and may return\n`409 Conflict` or, in rarer cases, fail with a 500 error that a retry might clear.\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Assemblies"
              }
            }
          }
        },
        "responses": {
          "207": {
            "description": "Successfull import",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "$ref": "#/components/schemas/AssemblyImportResponse"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "409": {
            "description": "Conflict. Most likely because another import is still in progress.\nWait a few seconds and retry the same request.\n"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/components/import": {
      "post": {
        "tags": [
          "Components"
        ],
        "summary": "Import Component Data",
        "operationId": "PostComponents",
        "requestBody": {
          "description": "Import your ERP component data into Luminovo.\n\nImportant Notes:\n\n- We will update your data once/day.\nFor technical reasons, data sent to this endpoint will be imported only once a day on weekdays (Mon-Fri, early in the morning)\non our side. Hence, newly uploaded data will therefore usually only become available in the product the next day.\nOnly the last uploaded data will be imported, so every new upload to this endpoint will overwrite the previous one from the same day.\n\n- Include all your components in the import.\nComponents with IPNs that were uploaded previously but are not present in a new upload are deleted.\n\nFor best results and most up-to-date component library, we recommend uploading your Components once/day at 11 pm CET.\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Components"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted response"
          },
          "400": {
            "description": "Bad request"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/purchase-orders/{rfq_id}": {
      "get": {
        "operationId": "GetPurchaseOrders",
        "deprecated": true,
        "summary": "Get Purchase Orders",
        "description": "**Deprecated.** This endpoint is deprecated and will not be maintained going forward.\nIf you currently rely on this endpoint and this is a blocker, please reach out to us.\n\nGet all the purchase orders from Luminovo relating to one RfQ.\n",
        "parameters": [
          {
            "name": "rfq_id",
            "in": "path",
            "description": "The ID of the RfQ",
            "required": true,
            "allowEmptyValue": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "sourcing_scenario_id",
            "in": "query",
            "description": "The sourcing scenario for which to filter purchase order.\n\nWhen a customer has confirmed an order, meaning they have paid for one of the sourcing scenarios, we can infer the `sourcing_scenario_id`. This is why this parameter is optional.\n\nImportant: if purchase orders have already been created for another sourcing scenario, this endpoint\nwill return an empty list of purchase orders. This is a safety precaution to prevent accidentally ordering two different sourcing scenarios.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "tags": [
          "Purchase Orders"
        ],
        "responses": {
          "200": {
            "description": "Success response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPurchaseOrderResponse"
                }
              }
            }
          },
          "403": {
            "description": "Not authorized"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "deprecated": true,
        "parameters": [
          {
            "name": "rfq_id",
            "in": "path",
            "description": "The ID of the RfQ",
            "required": true,
            "allowEmptyValue": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "sourcing_scenario_id",
            "in": "query",
            "description": "The sourcing scenario for which we want to create a purchase order.\n\nDefaults to the sourcing scenario that has been paid for by the customer.\nIf no sourcing scenario has been paid for, this parameter is required.\n",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "tags": [
          "Purchase Orders"
        ],
        "summary": "Create Purchase Orders",
        "description": "**Deprecated.** This endpoint is deprecated and will not be maintained going forward.\nIf you currently rely on this endpoint and this is a blocker, please reach out to us.\n\nCreate or update purchase orders corresponding to one RfQ.\nTypically, you first get the purchase orders into your ERP, perform some transformations,\nand send the updated purchase orders to Luminovo.\n",
        "operationId": "CreatePurchaseOrders",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePurchaseOrdersRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success response"
          },
          "403": {
            "description": "Not authorized"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offers/import": {
      "post": {
        "tags": [
          "Offers and Inventory"
        ],
        "summary": "Import Offers and Inventory",
        "operationId": "PostOffers",
        "requestBody": {
          "description": "This endpoint allows importing of ERP offer and inventory data into Luminovo.\n\n## Types of Offers\nThere are two types of offers that can be imported:\n\n### 1. Inventory Offers\nFor inventory offers (or simply your inventory), set `supplier.type: \"Internal\"`. The supplier field should reference your inventory site location,\nwhich needs to be configured in advance in Luminovo (Settings -> Sites). If no supplier is specified, the default\ninventory site will be used.\n\n### 2. Supplier Offers\nFor supplier offers, set `supplier.type: \"External\"`. The supplier field should reference the actual supplier\n(e.g., \"Mouser\", \"Arrow\", etc.).\n\n## Updating Existing Offers\nWhen importing offers, previously imported offers will be replaced if they are equivalent on the following fields:\n  - `part`: `internal_part_number` or our resolved part through the given `manufacturer` and `manufacturer_part_number`\n  - `supplier`: the resolved internal or external supplier through the given `supplier` or `supplier_number`.\n  - `supplier_part_number`\n  - `customer`: the resolved customer through the given `name` or `number`.\n  - `packaging`\n  - `price_type`\n  - `import_context`\n",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OffersImport"
              },
              "examples": {
                "full-inventory-ipn-offer": {
                  "description": "An inventory offer for an IPN with all fields specified.",
                  "value": [
                    {
                      "availability": {
                        "available_stock": 5626,
                        "lead_time": 254,
                        "on_order": [
                          {
                            "date": "2023-12-24",
                            "quantity": 1000
                          },
                          {
                            "date": "2024-01-08",
                            "quantity": 2000
                          }
                        ],
                        "total_stock": 9386
                      },
                      "customer": {
                        "name": "MyCustomer",
                        "number": "9987"
                      },
                      "packaging": "Bag",
                      "part": {
                        "internal_part_number": "1000-10"
                      },
                      "prices": [
                        {
                          "moq": 1,
                          "mpq": 10,
                          "unit_price": {
                            "amount": "0.0100",
                            "currency": "EUR"
                          }
                        },
                        {
                          "moq": 100,
                          "mpq": 10,
                          "unit_price": {
                            "amount": "0.0090",
                            "currency": "EUR"
                          }
                        }
                      ],
                      "supplier": {
                        "type": "Internal",
                        "supplier": "Inventory Site",
                        "supplier_number": "SITE-001",
                        "supplier_part_number": "INV-EXT-SUP-NUMBER"
                      },
                      "unit_of_measurement": {
                        "quantity": 0.1,
                        "unit": "Kilogram"
                      },
                      "valid_from": "2023-01-01",
                      "valid_until": "2030-04-01",
                      "notes": "Example notes"
                    }
                  ]
                },
                "full-supplier-part-offer": {
                  "description": "An supplier offer for an off-the-shelf part with all fields specified.",
                  "value": [
                    {
                      "availability": {
                        "available_stock": 5626,
                        "lead_time": 254,
                        "on_order": [
                          {
                            "date": "2023-12-24",
                            "quantity": 1000
                          },
                          {
                            "date": "2024-01-08",
                            "quantity": 2000
                          }
                        ]
                      },
                      "customer": {
                        "name": "MyCustomer",
                        "number": "9987"
                      },
                      "packaging": "Reel",
                      "part": {
                        "manufacturer": "Panasonic",
                        "manufacturer_part_number": "ERJ-B2BF1R1V"
                      },
                      "price_type": "Contract",
                      "prices": [
                        {
                          "moq": 1,
                          "mpq": 10,
                          "unit_price": {
                            "amount": "0.0100",
                            "currency": "EUR"
                          }
                        },
                        {
                          "moq": 100,
                          "mpq": 10,
                          "unit_price": {
                            "amount": "0.0090",
                            "currency": "EUR"
                          }
                        }
                      ],
                      "supplier": {
                        "type": "External",
                        "supplier": "Mouser",
                        "stock_location": "USA",
                        "supplier_number": "SUP-020",
                        "supplier_part_number": "667-ERJ-B2BF1R1V"
                      },
                      "unit_of_measurement": {
                        "quantity": 1,
                        "unit": "Piece"
                      },
                      "valid_from": "2023-01-01",
                      "valid_until": "2030-04-01",
                      "notes": "Example notes"
                    }
                  ]
                },
                "minimal-inventory-ipn-offer": {
                  "description": "An inventory offer for an IPN with a minimal number of fields specified.",
                  "value": [
                    {
                      "availability": {
                        "available_stock": 251
                      },
                      "part": {
                        "internal_part_number": "1000-10"
                      },
                      "prices": [
                        {
                          "unit_price": {
                            "amount": "0.500",
                            "currency": "EUR"
                          }
                        }
                      ],
                      "supplier": {
                        "type": "Internal"
                      }
                    }
                  ]
                },
                "minimal-supplier-part-offer": {
                  "description": "An supplier offer for an off-the-shelf part with a minimal number of fields specified.",
                  "value": [
                    {
                      "availability": {
                        "available_stock": 251
                      },
                      "part": {
                        "manufacturer": "Panasonic",
                        "manufacturer_part_number": "ERJ-B2BF1R1V"
                      },
                      "prices": [
                        {
                          "unit_price": {
                            "amount": "0.500",
                            "currency": "EUR"
                          }
                        }
                      ],
                      "supplier": {
                        "type": "External",
                        "supplier_number": "SUP-020"
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        "responses": {
          "207": {
            "description": "Response for importing new offer data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostOffersImportResponse"
                },
                "examples": {
                  "all-success": {
                    "description": "The standard case when all offer items in the request were parsed and handled successfully.",
                    "value": [
                      {
                        "part": {
                          "internal_part_number": "1000-10"
                        },
                        "status": 200,
                        "description": "Created"
                      },
                      {
                        "part": {
                          "manufacturer": "Panasonic",
                          "manufacturer_part_number": "ERJ-B2BF1R1V"
                        },
                        "status": 200,
                        "description": "Created"
                      }
                    ]
                  },
                  "unmatched-part": {
                    "description": "A few showcases of error responses when the manufacturer or MPN cannot be matched to a part.",
                    "value": [
                      {
                        "part": {
                          "manufacturer": "ExampleManufacturer",
                          "manufacturer_part_number": "MPN"
                        },
                        "status": 400,
                        "description": "The manufacturer 'ExampleManufacturer' cannot be found. Please contact support if this manufacturer should be added to Luminovo."
                      },
                      {
                        "part": {
                          "manufacturer": "Panasonic",
                          "manufacturer_part_number": "ExampleMpn"
                        },
                        "status": 400,
                        "description": "No part with manufacturer part number 'ExampleMpn' can be found from the manufacturer 'Panasonic'. Please check if the part can be found in Luminovo, and possibly use an alternative part number."
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request"
          },
          "403": {
            "description": "Not authorized"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/assemblies": {
      "get": {
        "tags": [
          "Assembly"
        ],
        "summary": "Get Assembly",
        "description": "Queries assembly details given assembly id(s).",
        "operationId": "GetAssembly",
        "parameters": [
          {
            "name": "assembly_ids",
            "in": "query",
            "description": "Assembly ids to retrieve (comma-separated list).",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.assembly-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AssemblyAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The requested assemblies.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.AllAssembliesResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Assembly"
        ],
        "summary": "Create Assembly",
        "description": "Creates a new assembly under a given RfQ.",
        "operationId": "CreateAssembly",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.assembly-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AssemblyAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.assembly.v1.AssemblyInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Assembly created successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.assembly.v1.SimpleAssemblyResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/assemblies/{assembly_id}/manufacturing-data/export": {
      "get": {
        "tags": [
          "Manufacturing and Calculation"
        ],
        "summary": "Get Manufacturing Costs for an Assembly",
        "description": "Get the complete manufacturing related costs for an assembly. Returns the same data that can be\nexported via excel on Luminovo.",
        "operationId": "get_assembly_manufacturing_data_export_v1",
        "parameters": [
          {
            "name": "assembly_id",
            "in": "path",
            "description": "The ID of the assembly to fetch details for",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.assembly.manufacturing-data.export-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturingDataExportAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Assembly manufacturing cost details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.CustomOrderSelectionOptionInput"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/assemblies/{assembly_id}/pcb": {
      "post": {
        "tags": [
          "Assembly"
        ],
        "summary": "Create Assembly PCB",
        "description": "Creates a PCB and links it to an assembly.",
        "operationId": "CreateAssemblyPcb",
        "parameters": [
          {
            "name": "assembly_id",
            "in": "path",
            "description": "ID of the assembly to create a PCB for.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "without_files",
            "in": "query",
            "description": "Whether to create the PCB without files.",
            "required": false,
            "schema": {
              "type": [
                "boolean",
                "null"
              ]
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.assembly-pcb-v1+json`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.assembly.v1.CreateAssemblyPcbRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "PCB created successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.assembly.v1.CreateAssemblyPcbResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/calculations/assembly-costs": {
      "get": {
        "tags": [
          "Manufacturing and Calculation"
        ],
        "summary": "Get Calculated Assembly Cost",
        "description": "Query the calculation table for an assembly. Return material and manufacturing cost as well as all additional cost configured in the calculation table.\nThe response includes an is_cost_frozen field that indicates whether the cost is frozen.",
        "operationId": "GetCalculationAssemblyCost",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.assembly-cost-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AssemblyCostAcceptHeader"
            }
          },
          {
            "name": "assembly_id",
            "in": "query",
            "description": "The ID of the assembly for which to get the cost.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get calculated cost of an assembly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.CalculationAssemblyCostResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/components": {
      "get": {
        "tags": [
          "Components"
        ],
        "summary": "List Components",
        "description": "Returns a paginated list of all components in the tenant's library.\nComponents are ordered by IPN value and revision.\n\nUse this endpoint to sync the full component library with an external system\nby iterating through all pages until `total_count` is exhausted.\n\nEach component includes the same data as the single-IPN lookup:\ninternal part number, type, category, risk data, and linked parts.",
        "operationId": "ListComponents",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-based). Defaults to 1.",
            "required": false,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int64"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "description": "Number of components per page (1-50). Defaults to 20.",
            "required": false,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int64"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.component-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ComponentExportAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated list of components.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.ipn.v1.PaginatedComponentExportResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission to view components."
          },
          "422": {
            "description": "Unprocessable. Invalid pagination parameters (e.g., page < 1 or page_size > 50)."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/components/ipn/{ipn}": {
      "get": {
        "tags": [
          "Components"
        ],
        "summary": "Get Components by IPN",
        "description": "Returns all components (including revisions) matching the given IPN value.\n\nEach component includes:\n- **internal_part_number**: The IPN value and optional revision\n- **type**: `\"OffTheShelf\"` or `\"Custom\"`\n- **risk_data**: Aggregated compliance and lifecycle data derived from linked parts\n- **linked_parts**: Off-the-shelf parts (MPNs), generic specifications, or custom part specifications\n\nIf no component matches the given IPN value, the response contains an empty `components` array\n(not a 404 error), since one IPN value can map to multiple revisions.",
        "operationId": "GetComponentByIpn",
        "parameters": [
          {
            "name": "ipn",
            "in": "path",
            "description": "The IPN (Internal Part Number) value to look up. Must be URL-encoded if it contains special characters (e.g., slashes, spaces).",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.component-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ComponentExportAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Components matching the IPN value. Returns an empty list if no component with this IPN exists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.ipn.v1.ComponentExportResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission to view components."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/components/{ipn}/risk": {
      "get": {
        "tags": [
          "Components"
        ],
        "summary": "Get Component Risk",
        "description": "Get the aggregated compliance and lifecycle of a component (IPN).\n\n## How the values are aggregated\n\nA single IPN in Luminovo can be linked to many off-the-shelf manufacturer parts\n(directly, or indirectly through matched generic parts). Each of those linked\nparts has its own compliance and lifecycle data. The fields returned here are\nthe result of aggregating across **all** linked off-the-shelf parts of the IPN:\n\n* **Compliance fields** (`rohs_compliant`, `reach_compliant`, `aecq_compliant`) —\n  the **worst** status across all linked parts is returned. The ordering,\n  from worst to best, is:\n  `NonCompliant` < `Unknown` < `NotRequired` < `CompliantWithExemption` < `Compliant`.\n  In other words, a single `NonCompliant` linked part makes the IPN\n  `NonCompliant`; the IPN is only reported as `Compliant` if every linked part is.\n  When no linked parts are available, the default is `Unknown`.\n\n* **`lifecycle_status`** — the **best** lifecycle across all linked parts is\n  returned. The ordering, from worst to best, is:\n  `Obsolete` < `Aftermarket` < `EndOfLife` < `NotRecommendedForNewDesigns`\n  < `Acquired` < `Unknown` < `Active` < `PreRelease`.\n  So as long as at least one linked part is `Active`, the IPN is reported as\n  `Active`, even if other linked parts are `EndOfLife` or `Obsolete`. This is\n  intentional: the user of the IPN can always fall back to the healthiest\n  available match.\n\n* **`lifecycle_yteol`** (years to end of life) — the **maximum** value across all\n  linked parts that report a YTEOL, rounded down to one decimal place. This\n  mirrors the \"best case\" semantics of `lifecycle_status`. Returns `null` if\n  no linked part has a YTEOL value.\n\n* **`std_factory_lead_time`** (days) — the **minimum** factory lead time\n  across every offer on every off-the-shelf part linked to the IPN, including\n  both tenant-private and public offers. Returns `null` if none of those\n  offers carries a factory lead time.\n\nNote that these are the same aggregation rules used by the Component Library\nand BoM Health dashboards in the Luminovo UI, so the values returned here\nmatch what you see in the product.",
        "operationId": "GetComponentRisk",
        "parameters": [
          {
            "name": "ipn",
            "in": "path",
            "description": "The IPN (Internal Part Number) value of the component to fetch details for",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.component-risk-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ComponentRiskAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Component risk.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.ipn.v1.ComponentRiskResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/custom-parts/{id}": {
      "get": {
        "tags": [
          "Custom Part"
        ],
        "summary": "Get Custom Part",
        "description": "Get information about a custom part specification.\nInformation includes the description, part type, and compliance information.",
        "operationId": "GetCustomPart",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the custom part specification to retrieve.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.custom-part-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomPartAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Custom part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.custom_part.v1.CustomPart"
                }
              }
            }
          },
          "400": {
            "description": "The custom part specification ID in the path is not a valid UUID."
          },
          "401": {
            "description": "Unauthorized. The request is missing valid authentication."
          },
          "404": {
            "description": "The custom part specification does not exist. Error detail: `Not found \"Custom part specification not found\"`."
          },
          "422": {
            "description": "The custom part specification exists, but its category data cannot be converted to the external response. Error detail is `No root category found matching old part type '<part_type>'` or `Custom part category not found for user category <user_category>`."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/custom-parts/{id}/resources": {
      "get": {
        "tags": [
          "Custom Part"
        ],
        "summary": "Get Custom Part Resources",
        "description": "Retrieves URLs for resources/files attached to the custom part specification.\nURL to retrieve the actual file is only valid temporarily.\nYou need to call this endpoint again to get a new valid URL after some time.",
        "operationId": "GetCustomPartResources",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the custom part specification whose resources should be retrieved.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.custom-part-resource-v1+json`. The legacy value `application/api.luminovo.resource-v1+json` is also accepted for backward compatibility.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomPartResourceAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "File URL response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.resource.v1.ResourceUrlResponse"
                }
              }
            }
          },
          "400": {
            "description": "The custom part specification ID in the path is not a valid UUID."
          },
          "401": {
            "description": "Unauthorized. The request is missing valid authentication."
          },
          "404": {
            "description": "The custom part specification does not exist. Error detail: `Not found \"Custom part specification not found\"`."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "put": {
        "tags": [
          "Custom Part"
        ],
        "summary": "Upload Custom Part Resource",
        "description": "Upload a file (drawing, datasheet, etc.) to a custom part specification.\nThe file content should be sent as raw binary in the request body.\nUploads are limited to 5 GiB. Uploading a file with the same sanitized\nfilename as an existing resource replaces the existing resource.",
        "operationId": "UploadCustomPartResource",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the custom part specification to upload a file to.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filename",
            "in": "query",
            "description": "Name of the file being uploaded. If a resource with the sanitized filename already exists on this custom part specification, it is replaced.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32",
                  "minimum": 0
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "File uploaded successfully. Existing resources with the same sanitized filename are replaced."
          },
          "400": {
            "description": "The custom part specification ID in the path is not a valid UUID, or the `filename` query parameter is missing or cannot be decoded."
          },
          "401": {
            "description": "Unauthorized. The request is missing valid authentication."
          },
          "404": {
            "description": "The custom part specification does not exist. Error detail: `Not found \"Custom part specification not found\"`."
          },
          "413": {
            "description": "The uploaded body is larger than 5 GiB. Error detail: `Payload exceeds limit`."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Custom Part"
        ],
        "summary": "Delete Custom Part Resource",
        "description": "Delete a file (drawing, datasheet, etc.) attached to a custom part specification.",
        "operationId": "DeleteCustomPartResource",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the custom part specification to delete a file from.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filename",
            "in": "query",
            "description": "Name of the file to delete.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.custom-part-resource-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomPartResourceAcceptHeader"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "File deleted successfully."
          },
          "400": {
            "description": "The custom part specification ID in the path is not a valid UUID, or the `filename` query parameter is missing or cannot be decoded."
          },
          "401": {
            "description": "Unauthorized. The request is missing valid authentication."
          },
          "404": {
            "description": "The custom part specification or requested resource does not exist. Error detail: `Not found \"Custom part specification not found\"` or `Not found \"Custom part resource not found\"`."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/customers": {
      "get": {
        "tags": [
          "Customer"
        ],
        "summary": "Search or Get All Customers",
        "description": "Queries all customers given a specific filter. Filter is optional. If filter is not set, returns all customers.",
        "operationId": "SearchCustomer",
        "parameters": [
          {
            "name": "customer_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-v1+json`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Customers.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.customer.v1.AllCustomerResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Customer"
        ],
        "summary": "Create New Customer",
        "description": "Create a new customer.\nIf successful, the customer will be returned in the response with its ID referenced.",
        "operationId": "CreateCustomer",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.customer.v1.CustomerInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Customer created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.customer.v1.CustomerResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/customers/{id}": {
      "get": {
        "tags": [
          "Customer"
        ],
        "summary": "Get Customer",
        "description": "Get a customer based on its ID.",
        "operationId": "GetCustomer",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Single customer response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.customer.v1.CustomerResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Customer"
        ],
        "summary": "Delete Customer",
        "description": "Delete a customer by its ID.",
        "operationId": "DeleteCustomer",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the customer to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerAcceptHeader"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Customer deleted."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Customer"
        ],
        "summary": "Update Customer",
        "description": "Update a customer by its ID.",
        "operationId": "UpdateCustomer",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the customer to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.customer.v1.CustomerUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Customer updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.customer.v1.CustomerResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/customers/{id}/users": {
      "get": {
        "tags": [
          "Customer"
        ],
        "summary": "Get Customer Users",
        "description": "Returns all users associated with a customer.",
        "operationId": "GetCustomerUsers",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the customer.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-user-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerUserAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of users for the customer.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.user.v1.AllUsers"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Customer"
        ],
        "summary": "Invite Customer User",
        "description": "Invite a user to a customer. The user will receive an email invitation to join the customer portal.",
        "operationId": "InviteCustomerUser",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the customer to invite the user to.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-user-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerUserAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.user.v1.UserInviteInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "User invite sent successfully."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/customers/{id}/users/{user_id}": {
      "delete": {
        "tags": [
          "Customer"
        ],
        "summary": "Delete Customer User",
        "description": "Delete a user from a customer.",
        "operationId": "DeleteCustomerUser",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the customer.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "description": "The ID of the user to delete.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-user-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerUserAcceptHeader"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "User deleted successfully."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Customer"
        ],
        "summary": "Update Customer User",
        "description": "Update a user associated with a customer.",
        "operationId": "UpdateCustomerUser",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the customer.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "description": "The ID of the user to update.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.customer-user-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomerUserAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.user.v1.UserUpdateInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "User updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.user.v1.User"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/demand/import": {
      "post": {
        "tags": [
          "Demand"
        ],
        "summary": "Create Demand",
        "description": "**Deprecated.** This endpoint is deprecated and will be removed in a future version.\n\nCreate a demand scenario for IPNs. You can create demands for both assemblies and single components.\nIf a demand gets created for an assembly, it gets propagated to the assembly's subassemblies and BOM items.",
        "operationId": "doc_clear_and_create_demands_v1",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.demand-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DemandAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DemandCreationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "207": {
            "description": "Demands created."
          }
        },
        "deprecated": true,
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/flexible-calculation/plans/rfq/{rfq_id}": {
      "get": {
        "tags": [
          "Flexible Calculation"
        ],
        "summary": "Get Calculation Plans by RFQ (v0 - unstable)",
        "description": "Retrieve all flexible calculation plans associated with a given RFQ.\n\n**Note:** This endpoint uses API version v0, which indicates an unstable contract.\nBreaking changes may be introduced without a version bump. Do not rely on the\nexact shape of the response for long-lived integrations until this is promoted to v1.",
        "operationId": "doc_get_plans_by_rfq_v0",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.flexible-calculation-v0+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/FlexibleCalculationAcceptHeader"
            }
          },
          {
            "name": "rfq_id",
            "in": "path",
            "description": "The ID of the RFQ.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.flexible_calculation.v0.AllCalculationPlansResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized, please check permissions for the token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/flexible-calculation/plans/{id}": {
      "get": {
        "tags": [
          "Flexible Calculation"
        ],
        "summary": "Get Calculation Plan (v0 - unstable)",
        "description": "Retrieve a single flexible calculation plan by its ID.\n\n**Note:** This endpoint uses API version v0, which indicates an unstable contract.\nBreaking changes may be introduced without a version bump. Do not rely on the\nexact shape of the response for long-lived integrations until this is promoted to v1.",
        "operationId": "doc_get_plan_v0",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.flexible-calculation-v0+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/FlexibleCalculationAcceptHeader"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the calculation plan.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.flexible_calculation.v0.CalculationPlanResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized, please check permissions for the token"
          },
          "404": {
            "description": "Not found"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/manufacturers/find": {
      "post": {
        "tags": [
          "Manufacturer"
        ],
        "summary": "Find Manufacturers",
        "description": "Look manufacturers up by name or alias.\n\nEvery requested value is matched against both primary manufacturer names and\nalternative names, using exact, normalized and prefix matching. Results come\nback in request order, one per requested name, with an empty `matches` list\nwhere nothing matched — so a result is never missing for a requested name.\n\nEach match reports *why* it matched through `match_reason`, which\ndistinguishes how closely the value matched (`method`) from what it matched\nagainst (`matched_field`). Prefix matches are informative only: they are\ndeliberately never treated as duplicates when importing.",
        "operationId": "FindManufacturers",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturerAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.manufacturer.v1.FindManufacturersRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "One result per requested name, in request order.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.manufacturer.v1.FindManufacturersResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request body is malformed."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/manufacturers/import": {
      "post": {
        "tags": [
          "Manufacturer"
        ],
        "summary": "Import Manufacturers",
        "description": "Create up to 1000 manufacturers in one request.",
        "operationId": "ImportManufacturers",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturerAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.manufacturer.v1.ImportManufacturersRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Every manufacturer was created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.manufacturer.v1.ImportManufacturersResponse"
                }
              }
            }
          },
          "207": {
            "description": "At least one item was rejected; inspect `items` for the per-item outcome.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.manufacturer.v1.ImportManufacturersResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request itself is invalid, for example because it exceeds the per-request item limit."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/manufacturers/{manufacturer_id}": {
      "get": {
        "tags": [
          "Manufacturer"
        ],
        "summary": "Get Manufacturer",
        "description": "Read a single manufacturer, including every alternative name it is known by.",
        "operationId": "GetManufacturer",
        "parameters": [
          {
            "name": "manufacturer_id",
            "in": "path",
            "description": "The ID of the manufacturer.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturerAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The manufacturer.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerResponse"
                }
              }
            }
          },
          "404": {
            "description": "The manufacturer does not exist."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Manufacturer"
        ],
        "summary": "Rename Manufacturer",
        "description": "Change a manufacturer's primary name.",
        "operationId": "RenameManufacturer",
        "parameters": [
          {
            "name": "manufacturer_id",
            "in": "path",
            "description": "The ID of the manufacturer to rename.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturerAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.manufacturer.v1.RenameManufacturerRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The manufacturer was renamed. The response has no body."
          },
          "403": {
            "description": "The manufacturer is public and cannot be renamed."
          },
          "404": {
            "description": "The manufacturer does not exist."
          },
          "409": {
            "description": "The new name collides with an existing manufacturer."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/manufacturers/{manufacturer_id}/aliases": {
      "post": {
        "tags": [
          "Manufacturer"
        ],
        "summary": "Add Manufacturer Alias",
        "description": "Add an additional name this manufacturer should be found under.\n\nThe alias is private to the tenant, so it can be added to public\nmanufacturers as well as private ones. Once added, the alias matches exactly\nlike the primary name.\n\nAliases must stay unambiguous: an alias that already exists, repeats the\nmanufacturer's own name, or resolves to a *different* manufacturer is\nrejected with `409`, each with its own error code.",
        "operationId": "AddManufacturerAlias",
        "parameters": [
          {
            "name": "manufacturer_id",
            "in": "path",
            "description": "The ID of the manufacturer to add an alias to.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturerAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.manufacturer.v1.AddManufacturerAliasRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "The alias was accepted. The response has no body."
          },
          "400": {
            "description": "The alias is empty or too long."
          },
          "404": {
            "description": "The manufacturer does not exist."
          },
          "409": {
            "description": "The alias already exists, repeats the manufacturer's own name, or belongs to another manufacturer."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/manufacturers/{manufacturer_id}/aliases/{alias_name}": {
      "delete": {
        "tags": [
          "Manufacturer"
        ],
        "summary": "Remove Manufacturer Alias",
        "description": "Remove an alias previously added to a manufacturer.\n\nThe alias is matched exactly, so it must be spelled as it was added, and it\nmust be URL-encoded exactly once — aliases routinely contain spaces, which\nhave to arrive as `%20` rather than a literal space or a double-encoded\n`%2520`.\n\nRemoving an alias that does not exist is reported as `404` rather than\nsilently succeeding, so a typo cannot be mistaken for a successful cleanup.",
        "operationId": "RemoveManufacturerAlias",
        "parameters": [
          {
            "name": "manufacturer_id",
            "in": "path",
            "description": "The ID of the manufacturer to remove an alias from.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "alias_name",
            "in": "path",
            "description": "The alias to remove, URL-encoded and matched exactly.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturerAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The alias was removed. The response has no body."
          },
          "403": {
            "description": "The manufacturer is private to another tenant."
          },
          "404": {
            "description": "The manufacturer does not exist, or has no such alias."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/manufacturing/resource": {
      "get": {
        "tags": [
          "Manufacturing and Calculation"
        ],
        "summary": "Get All Resources",
        "description": "Get an array of all resources. Resources represent all machinery and employees relevant to production including their\nhourly rates (e.g. SMT Personnel or Fuji NXT Pick and Place Machine).\n\nResources can be used in activities to get time calculations as well as costs associated with them.",
        "operationId": "get_resource_many_v1",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturing.resource-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturingResourceAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/types.manufacturing.resource.v1.ResourceResponse"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Manufacturing and Calculation"
        ],
        "summary": "Create New Resource",
        "description": "Create a new manufacturing resource.",
        "operationId": "doc_post_resource_v1",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturing.resource-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturingResourceAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.manufacturing.resource.v1.ResourceInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.manufacturing.resource.v1.ResourceResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized, please check permissions for the token"
          },
          "422": {
            "description": "Not processable"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/manufacturing/resource/{id}": {
      "delete": {
        "tags": [
          "Manufacturing and Calculation"
        ],
        "summary": "Delete Resource",
        "description": "Delete a resource using its ID.",
        "operationId": "doc_delete_resource_v1",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturing.resource-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturingResourceAcceptHeader"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the resource to delete.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response"
          },
          "401": {
            "description": "Unauthorized, please check permissions for the token"
          },
          "404": {
            "description": "Not found"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Manufacturing and Calculation"
        ],
        "summary": "Update Resource",
        "description": "Update a resource using its ID.",
        "operationId": "doc_patch_resource_v1",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.manufacturing.resource-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ManufacturingResourceAcceptHeader"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the resource to update.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.manufacturing.resource.v1.ResourceUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.manufacturing.resource.v1.ResourceResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized, please check permissions for the token"
          },
          "404": {
            "description": "Not found"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/off-the-shelf-parts/bulk": {
      "post": {
        "tags": [
          "Off-the-shelf Parts"
        ],
        "summary": "Get Off-the-shelf Parts",
        "description": "Look up multiple off-the-shelf parts by ID. Unresolved IDs are omitted rather than reported as\nerrors.\n\nUse `GET /off-the-shelf-parts/{id}` when requesting one part.",
        "operationId": "GetOffTheShelfParts",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.off-the-shelf-part-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OffTheShelfPartAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.GetOffTheShelfPartsByIdInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully retrieved the off-the-shelf parts. IDs that cannot be resolved are omitted. Response order and multiplicity are not guaranteed to match the request; correlate items by ID.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.BulkOffTheShelfPartsResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request body is malformed."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/off-the-shelf-parts/{id}": {
      "get": {
        "tags": [
          "Off-the-shelf Parts"
        ],
        "summary": "Get Off-the-shelf Part",
        "description": "Look up one off-the-shelf part by ID.\n\nUse `POST /off-the-shelf-parts/bulk` when requesting multiple parts.",
        "operationId": "GetOffTheShelfPart",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.off-the-shelf-part-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OffTheShelfPartAcceptHeader"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The off-the-shelf part's opaque identifier, for example `OffTheShelf:550e8400-e29b-41d4-a716-446655440000`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the off-the-shelf part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.OffTheShelfPartResponse"
                }
              }
            }
          },
          "400": {
            "description": "The part ID is malformed or does not have the `OffTheShelf` prefix."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "404": {
            "description": "The off-the-shelf part was not found."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offer-import-contexts": {
      "get": {
        "tags": [
          "Offer Import Context"
        ],
        "summary": "Get All Offer Import Contexts",
        "description": "List every offer import context belonging to the tenant.",
        "operationId": "GetAllOfferImportContexts",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-import-context-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferImportContextAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All offer import contexts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.offer_import_context.v1.AllOfferImportContextsResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Offer Import Context"
        ],
        "summary": "Create Offer Import Context",
        "description": "Create a new offer import context. Its origin is always `ApiIntegration`;\nno origin can be specified. A name already used by another context, of any\norigin, is rejected with `409`.",
        "operationId": "CreateOfferImportContext",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-import-context-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferImportContextAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.offer_import_context.v1.OfferImportContextInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Offer import context created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.offer_import_context.v1.OfferImportContextResponse"
                }
              }
            }
          },
          "409": {
            "description": "An offer import context with this name already exists."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offer-import-contexts/{id}": {
      "get": {
        "tags": [
          "Offer Import Context"
        ],
        "summary": "Get Offer Import Context",
        "description": "Get a single offer import context by its ID.",
        "operationId": "GetOfferImportContext",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the offer import context.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-import-context-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferImportContextAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Single offer import context.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.offer_import_context.v1.OfferImportContextResponse"
                }
              }
            }
          },
          "404": {
            "description": "The offer import context does not exist."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Offer Import Context"
        ],
        "summary": "Delete Offer Import Context",
        "description": "Delete an offer import context by its ID. Deletion is blocked with `409`\nwhile any offer still references it.",
        "operationId": "DeleteOfferImportContext",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the offer import context to delete.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-import-context-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferImportContextAcceptHeader"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Offer import context deleted."
          },
          "409": {
            "description": "The offer import context is still referenced by offers."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Offer Import Context"
        ],
        "summary": "Update Offer Import Context",
        "description": "Update an offer import context by its ID. Renaming to an existing name is\nrejected with `409`.",
        "operationId": "UpdateOfferImportContext",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the offer import context to update.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-import-context-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferImportContextAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.offer_import_context.v1.OfferImportContextUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Offer import context updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.offer_import_context.v1.OfferImportContextResponse"
                }
              }
            }
          },
          "404": {
            "description": "The offer import context does not exist."
          },
          "409": {
            "description": "Another offer import context already has this name."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offer/custom-part": {
      "post": {
        "tags": [
          "Offers and Inventory"
        ],
        "summary": "Create Custom Part Offer",
        "description": "Creates a new offer for a custom part. Attach the sourcing scenario ID when creating a new custom part offer.",
        "operationId": "CreateCustomPartOffer",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.custom-part-offer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CustomPartOfferAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomPartOfferInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Customer created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomPartOffer"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offers/bulk": {
      "post": {
        "tags": [
          "Offers"
        ],
        "summary": "Get Offers",
        "description": "Look up multiple offers in one request by their IDs. Uses `POST` (rather\nthan `GET`) so that callers can pass many IDs without hitting URL length\nlimits. IDs that cannot be resolved are returned in `not_found_ids`\n\nSee `OfferResponse` for the full concept and shape of an offer.",
        "operationId": "GetOffers",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetOffersByIdInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully retrieved offers. Note: any IDs that could not be resolved (wrong tenant, deleted, or non-existent) are returned in `not_found_ids` rather than causing the whole request to fail.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkOfferResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — the request body is malformed (e.g. not valid JSON, or contains an offer ID with a missing or unknown `<kind>:` prefix)."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offers/delete": {
      "post": {
        "tags": [
          "Offers"
        ],
        "summary": "Delete Offers Bulk",
        "description": "Delete a set of offers, identified by their IDs in the request.\nUse the opaque offer IDs as returned by other endpoints such as `POST /offers/find`.\n\nAn offer referenced in a sourcing line litem can only be deleted if `force_delete` is\nset to `true`, otherwise the full delete request fails with a conflict error.\nPublic off-the-shelf offers can never be deleted, including them causes the full delete\nrequest to fail with a conflict error.\n\nThe endpoint enforces a limit of 100,000 offer IDs that can be included in one request.\nIf more offers need to be deleted, then the endpoint should be called multiple times.\n\nOn success, the endpoint returns the IDs of the offers that were actually deleted.\nRequested IDs that did not exist are absent, which makes the operation idempotent.",
        "operationId": "DeleteOffersBulk",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferAcceptHeader"
            }
          },
          {
            "name": "force_delete",
            "in": "query",
            "description": "If this is missing or set to `false`, then a request to delete offers\nis rejected if the offer is referenced as a selected solution in a sourcing line item.\nIf this is set to `true`, then the offer is deleted even if referenced, and the\nrespective solution is reset to pending.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OfferDeleteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Delete successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfferDeleteSuccessResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The request is malformed."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "409": {
            "description": "An error response if there is a conflict caused by the offer deletion request.\nThis error is returned if either the request contains an ID for a public off-the-shelf offer,\nor the request contains an ID that is referenced as a selected solution in a sourcing line item,\nand `force_delete` is not set to `true`.\nThe `code` can be used to differentiate between the two types of conflicts.\nThe `data` field contains the conflicting set of offer IDs for each type of conflict,\nand is a subset of the input offer IDs.\n\nIf this error is returned, then the whole offer delete request has been rejected,\nand no offers have been deleted, even for offers without conflicts.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/OfferDeleteConflictOnPublicOffer"
                    },
                    {
                      "$ref": "#/components/schemas/OfferDeleteConflictOnReferencedOffer"
                    }
                  ],
                  "type": "object",
                  "discriminator": {
                    "propertyName": "code",
                    "mapping": {
                      "offer.cannot_delete_public_off_the_shelf_offers": "#/components/schemas/ApiErrorResponse_OfferDeleteConflictOnPublicOfferErrorData_OfferCannotDeletePublicOffTheShelfOffer_CONFLICT",
                      "offer.cannot_delete_referenced_offers": "#/components/schemas/ApiErrorResponse_OfferDeleteConflictOnReferencedOfferErrorData_OfferCannotDeleteReferencedOffer_CONFLICT"
                    }
                  }
                }
              }
            }
          },
          "413": {
            "description": "Payload too large. The request size is too large to be handled.\n\nThis error is returned if the number of offer IDs in the request\nexceeds the maximum number of 100,000 offers that can be deleted in one request.\n\nIt may also be returned if the request size in bytes exceeds the global limit the server can handle.\nThe `data` field is an empty object.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `offer.delete.payload_too_large`",
                      "example": "offer.delete.payload_too_large"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "413 Payload Too Large\n[[RFC9110, Section 15.5.14](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.14)]",
                      "example": 413,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": "object",
                      "description": "Empty object. No data is returned for this error type."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offers/find": {
      "post": {
        "tags": [
          "Offers"
        ],
        "summary": "Find Offers",
        "description": "Find and return offers that match the filters given in the request.\nThis supports filtering by a set of:\n- part IDs, including off-the-shelf part IDs, custom part specification IDs,\n  IPNs, and custom component IDs.\n- import context IDs, for off-the-shelf offers linked to an import context.\n\nThe above filters may be used on their own or can be combined. In the latter\ncase, only offers matching all filters are returned.\n\nThe endpoint supports pagination. Only a limited amount of offers will be\nreturned in one call, this is controlled through the `limit` parameter.\nIf more offers match, a pagination cursor is returned in the response.\nThis pagination cursor can be used for subsequent calls to the endpoint to\nfind more matching offers. The process can be repeated until all matching\noffers are returned.\n\nFor the request and response body shapes, see the `FindOffersRequest` and\n`FindOffersResult` specifications, as well as the `OfferResponse` shape.\nThe size of the request is limited, also see the specification there.",
        "operationId": "FindOffers",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FindOffersRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully found offers",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindOffersResult"
                }
              }
            }
          },
          "400": {
            "description": "The find request is syntactically incorrect, e.g. the body is not valid\nJSON, a required field is missing, or a part ID has a missing or unknown\n`<kind>:` prefix. The error message may contain more detail, but is not\nmeant for automatic processing.\n\nThis error is also returned if the pagination cursor is invalid.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `offer.find_offers.invalid_request`",
                      "example": "offer.find_offers.invalid_request"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
                      "example": 400,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "422": {
            "description": "An unprocessable request. This error is returned if the request\nis syntactically correct, but cannot be processed. This is\nusually the case if some input values are out of range.\n\nThe error code in the response body can be used to differentiate\nthe type of error. For some error codes, the data field contains\nadditional information on the allowed input ranges.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/FindOffersEmptyRequest"
                    },
                    {
                      "$ref": "#/components/schemas/FindOffersEmptyFilter"
                    },
                    {
                      "$ref": "#/components/schemas/FindOffersFilterInputTooLarge"
                    },
                    {
                      "$ref": "#/components/schemas/FindOffersPaginationLimitOutOfBounds"
                    }
                  ],
                  "type": "object",
                  "discriminator": {
                    "propertyName": "code",
                    "mapping": {
                      "offer.find_offers.empty_filter": "#/components/schemas/ApiErrorResponse_FindOffersEmptyFilterErrorData_FindOffersEmptyFilter_UNPROCESSABLE_ENTITY",
                      "offer.find_offers.empty_request": "#/components/schemas/ApiErrorResponse_NoErrorData_FindOffersEmptyRequest_UNPROCESSABLE_ENTITY",
                      "offer.find_offers.filter_input_too_large": "#/components/schemas/ApiErrorResponse_FindOffersFilterInputTooLargeErrorData_FindOffersFilterInputTooLarge_UNPROCESSABLE_ENTITY",
                      "offer.find_offers.pagination_limit_out_of_bounds": "#/components/schemas/ApiErrorResponse_FindOffersPaginationLimitOutOfBoundsErrorData_FindOffersPaginationLimitOutOfBounds_UNPROCESSABLE_ENTITY"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offers/refresh": {
      "post": {
        "tags": [
          "Offers"
        ],
        "summary": "Trigger Offer Refresh",
        "description": "Trigger an asynchronous fetch of fresh offers from the configured external\nsupplier APIs (Octopart, TrustedParts, distributor APIs, ...) for the given\noff-the-shelf parts.\n\nThis is asynchronous: the endpoint responds `202 Accepted`\nand the freshly fetched offers are written in the background. Poll the\noffer-lookup endpoints afterwards to read them.",
        "operationId": "TriggerOfferRefresh",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshOffersRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Update accepted (no body). Offers are fetched from the configured supplier APIs asynchronously and become available via the offer-lookup endpoints (`POST /offers/find`, `POST /offers/bulk`, `GET /offers/{id}`) once ready. Part ids that don't resolve are silently ignored."
          },
          "400": {
            "description": "Bad request — the request body is malformed."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission to view the part library."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/offers/{id}": {
      "get": {
        "tags": [
          "Offers"
        ],
        "summary": "Get Offer",
        "description": "Look up a single offer by its ID. To look up many offers in one round\ntrip, use `POST /offers/bulk` instead.\n\nSee `OfferResponse` for the full concept and shape of an offer.",
        "operationId": "GetOffer",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The offer's colon-separated identifier (e.g. `PublicOffTheShelf:550e8400-e29b-41d4-a716-446655440000`). This is the same value as `offer_id` returned by other endpoints such as `GET /sourcing-scenarios/{id}/purchase-options`. Treat as an opaque string.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved offer.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfferResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request — the `id` path parameter is not a valid offer identifier (e.g. the `<kind>:` prefix is missing or unknown, or the UUID part is malformed)."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The offer belongs to a different tenant."
          },
          "404": {
            "description": "Offer not found, or the offer ID could not be resolved for this tenant."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Offers"
        ],
        "summary": "Delete Offer",
        "description": "Delete a single offer, identified by its ID in the path.\nUse the opaque offer ID as returned by other endpoints such as `POST /offers/find`.\n\nAn offer referenced in a sourcing line litem can only be deleted if `force_delete` is\nset to `true`, otherwise the delete request fails with a conflict error.\nPublic off-the-shelf offers can never be deleted.",
        "operationId": "DeleteOffer",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.offer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OfferAcceptHeader"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the offer.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "force_delete",
            "in": "query",
            "description": "If this is missing or set to `false`, then a request to delete offers\nis rejected if the offer is referenced as a selected solution in a sourcing line item.\nIf this is set to `true`, then the offer is deleted even if referenced, and the\nrespective solution is reset to pending.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Delete successful (no body)."
          },
          "400": {
            "description": "Bad request. The request is malformed."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "404": {
            "description": "Not found. The offer with the given ID was not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `offer.not_found`",
                      "example": "offer.not_found"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "404 Not Found\n[[RFC9110, Section 15.5.5](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5)]",
                      "example": 404,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": "object",
                      "description": "Empty object. No data is returned for this error type."
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "An error response if there is a conflict caused by the offer deletion request.\nThis error is returned if either the request contains an ID for a public off-the-shelf offer,\nor the request contains an ID that is referenced as a selected solution in a sourcing line item,\nand `force_delete` is not set to `true`.\nThe `code` can be used to differentiate between the two types of conflicts.\nThe `data` field contains the conflicting set of offer IDs for each type of conflict,\nand is a subset of the input offer IDs.\n\nIf this error is returned, then the whole offer delete request has been rejected,\nand no offers have been deleted, even for offers without conflicts.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/OfferDeleteConflictOnPublicOffer"
                    },
                    {
                      "$ref": "#/components/schemas/OfferDeleteConflictOnReferencedOffer"
                    }
                  ],
                  "type": "object",
                  "discriminator": {
                    "propertyName": "code",
                    "mapping": {
                      "offer.cannot_delete_public_off_the_shelf_offers": "#/components/schemas/ApiErrorResponse_OfferDeleteConflictOnPublicOfferErrorData_OfferCannotDeletePublicOffTheShelfOffer_CONFLICT",
                      "offer.cannot_delete_referenced_offers": "#/components/schemas/ApiErrorResponse_OfferDeleteConflictOnReferencedOfferErrorData_OfferCannotDeleteReferencedOffer_CONFLICT"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/order-management/order-selection": {
      "post": {
        "tags": [
          "Order Management"
        ],
        "summary": "Create Order Selection Options",
        "description": "You can create customized order selection options for your customers at the check-out on the Customer Collaboration Platform.\nDefine custom order batch sizes, lead time, order size, etc.",
        "operationId": "doc_post_order_selection_options_v1",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.order-management-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OrderManagementAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.order_management.order_selection_option.v1.CustomOrderSelectionOptionsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Order selection options created."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/order-management/orders": {
      "get": {
        "tags": [
          "Order Management"
        ],
        "summary": "Get Order Details",
        "description": "Get the details for an order placed on the Customer Collaboration Platform relating to an RfQ.",
        "operationId": "doc_get_orders_v1",
        "parameters": [
          {
            "name": "rfq_id",
            "in": "query",
            "description": "The RfQ ID to fetch order details for.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.order-management-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OrderManagementAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Order details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.order_management.orders.v1.GetOrdersResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/pcb-specification/extract": {
      "post": {
        "tags": [
          "PCB"
        ],
        "summary": "Extract PCB Specification",
        "description": "Extract structured PCB specification attributes from a document such as a\ndatasheet or fabrication drawing. Send the raw file bytes as the request\nbody with `Content-Type: application/octet-stream`. Supported formats:\nPDF, PNG, JPEG, DOCX, XLSX.\n\nThe response is a flat list of extracted attributes. Each attribute carries\nits value, an optional unit, and the bounding box(es) of where it was found\nin the document — with coordinates normalized to the `[0, 1]` range relative\nto each page's width and height.\n\nExtraction is synchronous and may take several seconds.",
        "operationId": "ExtractPcbSpecification",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.pcb-specification-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/PcbSpecificationAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "description": "The raw bytes of the document to extract. Supported formats: PDF, PNG, JPEG, DOCX, XLSX.",
          "content": {
            "application/octet-stream": {
              "schema": {
                "$ref": "#/components/schemas/types.pcb_specification.v1.DocumentUpload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The extracted PCB specification.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.pcb_specification.v1.PcbSpecificationExtractionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. No file was provided in the request body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `pcb_specification.file_required`",
                      "example": "pcb_specification.file_required"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
                      "example": 400,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The request is missing valid authentication."
          },
          "500": {
            "description": "Internal server error. The extraction failed for a reason not covered by\na more specific error code.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `pcb_specification.extraction_failed`",
                      "example": "pcb_specification.extraction_failed"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "500 Internal Server Error\n[[RFC9110, Section 15.6.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1)]",
                      "example": 500,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable. The extraction service is temporarily degraded —\nretry the request later.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `pcb_specification.extraction_unavailable`",
                      "example": "pcb_specification.extraction_unavailable"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "503 Service Unavailable\n[[RFC9110, Section 15.6.4](https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.4)]",
                      "example": 503,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/pnp": {
      "get": {
        "tags": [
          "PnP"
        ],
        "summary": "Get PnP Items",
        "description": "Get a list of PnP items for an assembly.",
        "operationId": "GetPnp",
        "parameters": [
          {
            "name": "assembly_id",
            "in": "query",
            "description": "The assembly ID to get PnP items for.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.pnp-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/PnpAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PnP items.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.pnp.v1.PnpResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/projects": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get all Projects",
        "description": "Returns all projects in Luminovo.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available. The response body currently uses RfQ field names (e.g. `id` refers to\nthe RfQ/project ID).",
        "operationId": "GetAllProjects",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.project-overview-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProjectOverviewAcceptHeader"
            }
          },
          {
            "name": "archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "boolean",
                "null"
              ]
            }
          },
          {
            "name": "customer_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            }
          },
          {
            "name": "internal_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all existing projects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.AllRfQsResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Create Project",
        "description": "Create a new project either for an existing or a new customer.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available. The response body currently uses RfQ field names (e.g. `id` refers to\nthe RfQ/project ID).",
        "operationId": "CreateProject",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.project-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProjectAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.rfq.v1.RfQCreation"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Project created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.RfQResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/projects/status-history": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project status change history",
        "description": "Returns the history of status changes for all projects.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available. The response body currently uses RfQ field names (e.g. `rfq_id`).",
        "operationId": "GetProjectStatusHistory",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.project-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProjectAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Project status history.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.status_history.v1.AllRfqStatusHistory"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/projects/{id}": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project",
        "description": "Get one project based on its ID.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available. The response body currently uses RfQ field names (e.g. `id` refers to\nthe RfQ/project ID).",
        "operationId": "GetProject",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the project to retrieve",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.project-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProjectAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get existing project.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.RfQResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Project"
        ],
        "summary": "Delete Project",
        "description": "Delete a project based on its ID.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available.",
        "operationId": "DeleteProject",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the project to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.project-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProjectAcceptHeader"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Project deleted."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Project"
        ],
        "summary": "Update Project",
        "description": "Update a project based on its ID.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available. The response body currently uses RfQ field names (e.g. `id` refers to\nthe RfQ/project ID).",
        "operationId": "UpdateProject",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the project to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.project-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ProjectAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.rfq.v1.RfqUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Project updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.RfQResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/projects/{id}/costed-bom": {
      "get": {
        "tags": [
          "BOM"
        ],
        "summary": "Get costed BOM",
        "description": "**Deprecated.** We are actively working on a new version of this endpoint.\n\nReturns costed BOM for a given project.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available.",
        "operationId": "GetProjectCostedBom",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the project to retrieve the costed bom for",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.costed-bom-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostedBomAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Project costed BOM.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedBom"
                }
              }
            }
          }
        },
        "deprecated": true,
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/projects/{id}/quotation/upload": {
      "post": {
        "tags": [
          "Quotation"
        ],
        "summary": "Upload Quotation for a Project",
        "description": "By sending the request, you will get a URL to upload the quotation corresponding to a project.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available.\n\nThis API is the equivalent of uploading a PDF file in the Quotation section of the frontend.\nUpon successful upload, you can call the `Update Project` API to set the project status to `QuotationAvailable`.\n\nUnless you change the status to `QuotationAvailable`, the PDF is still available internally, but\n(if the customer portal is available) the customer will not be notified and will not be able to\ndownload the PDF.\n\nUploading is a two-step process:\n1. Call this API to retrieve a URL to upload the file to.\n1. Upload the file contents to the retrieved URL using the `PUT` method.\n   * The `PUT` call must set the `x-ms-blob-type` header to the value `BlockBlob`.\n\nSee the [help page](https://help.luminovo.com/en/articles/235339-customize-the-quotation-purchase-and-payment-flow-in-the-customer-portal-using-the-api)\nfor an explanation of when and how to use this API.",
        "operationId": "UploadProjectQuotation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the project for which to upload the quotation",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.quotation-upload-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/QuotationUploadAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.rfq.v1.QuotationUpload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Generated url for upload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.SingleFileUrlResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/projects/{id}/tree": {
      "get": {
        "tags": [
          "BOM"
        ],
        "summary": "Get BOM Tree",
        "description": "Get the list of all assemblies included in your project.\n\n**Note:** A project is the same as an RfQ (Request for Quotation). Both `/projects` and `/rfqs`\nendpoints are available.",
        "operationId": "GetProjectBOMtree",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the project.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.assembly-ids-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AssemblyIdsAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get BOM tree for project.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.assembly.assembly_ids.v1.AssemblyIdsResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/rfqs": {
      "get": {
        "tags": [
          "RfQ"
        ],
        "summary": "Get all RfQs",
        "description": "Returns all RfQ's in Luminovo.",
        "operationId": "GetAllRfQs",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.rfq-overview-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RfqOverviewAcceptHeader"
            }
          },
          {
            "name": "archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "boolean",
                "null"
              ]
            }
          },
          {
            "name": "customer_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            }
          },
          {
            "name": "internal_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all existing Rfqs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.AllRfQsResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "RfQ"
        ],
        "summary": "Create Rfq",
        "description": "Create a new RfQ either for an existing or a new customer.",
        "operationId": "CreateRfQ",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.rfq-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RfqAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.rfq.v1.RfQCreation"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "RfQ created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.RfQResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/rfqs/status-history": {
      "get": {
        "tags": [
          "RfQ"
        ],
        "summary": "Get RfQ status change history",
        "description": "Returns the history of status changes for all RfQs.",
        "operationId": "GetRfqStatusHistory",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.rfq-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RfqAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "RfQ status history.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.status_history.v1.AllRfqStatusHistory"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/rfqs/{id}": {
      "get": {
        "tags": [
          "RfQ"
        ],
        "summary": "Get Rfq",
        "description": "Get one RfQ based on its ID.",
        "operationId": "GetRfQ",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the RfQ to retrieve",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.rfq-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RfqAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get existing RfQ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.RfQResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "RfQ"
        ],
        "summary": "Delete RfQ",
        "description": "Delete an RfQ based on its ID.",
        "operationId": "DeleteRfQ",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the RfQ to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.rfq-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RfqAcceptHeader"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Rfq deleted."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "RfQ"
        ],
        "summary": "Update RfQ",
        "description": "Update an RfQ based on its ID.",
        "operationId": "UpdateRfQ",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the RfQ to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.rfq-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RfqAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.rfq.v1.RfqUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "RfQ updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.RfQResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/rfqs/{id}/costed-bom": {
      "get": {
        "tags": [
          "BOM"
        ],
        "summary": "Get costed BOM",
        "description": "**Deprecated.** We are actively working on a new version of this endpoint.\nIf anything about the current version is causing problems, we are actively looking\nfor feedback — please reach out to us.\n\nReturns costed BOM for a given RfQ.",
        "operationId": "GetRfqCostedBom",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the RfQ to retrieve the costed bom for",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.costed-bom-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CostedBomAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "RfQ costed BOM.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedBom"
                }
              }
            }
          }
        },
        "deprecated": true,
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/rfqs/{id}/quotation/upload": {
      "post": {
        "tags": [
          "Quotation"
        ],
        "summary": "Upload Quotation for an RfQ",
        "description": "By sending the request, you will get a URL to upload the quotation corresponding to an RfQ.\n\nThis API is the equivalent of uploading a PDF file in the Quotation section of the frontend.\nUpon successful upload, you can call the `Update RfQ` API to set the RfQ status to `QuotationAvailable`.\n\nUnless you change the status to `QuotationAvailable`, the PDF is still available internally, but\n(if the customer portal is available) the customer will not be notified and will not be able to\ndownload the PDF. This is consistent with the behavior of the quotation upload in the UI, where\nthe status is not updated unless you click the 'Send to customer' button.\n\nUploading is a two-step process:\n1. Call this API to retrieve a URL to upload the file to.\n1. Upload the file contents to the retrieved URL using the `PUT` method.\n   * The `PUT` call must set the `x-ms-blob-type` header to the value `BlockBlob`.\n\nSee the [help page](https://help.luminovo.com/en/articles/235339-customize-the-quotation-purchase-and-payment-flow-in-the-customer-portal-using-the-api)\nfor an explanation of when and how to use this API.",
        "operationId": "UploadQuotation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the RfQ for which to upload the quotation",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.quotation-upload-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/QuotationUploadAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.rfq.v1.QuotationUpload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Generated url for upload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.rfq.v1.SingleFileUrlResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/rfqs/{id}/tree": {
      "get": {
        "tags": [
          "BOM"
        ],
        "summary": "Get BOM Tree",
        "description": "Get the list of all assemblies included in your RfQ.\nNote: Luminovo creates an assembly for every created RfQ. Hence, the RfQ ID itself is also referenced as an assembly.",
        "operationId": "GetBOMtree",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the RfQ.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.assembly-ids-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/AssemblyIdsAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get BOM tree for RfQ.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.assembly.assembly_ids.v1.AssemblyIdsResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/sourcing-scenarios": {
      "post": {
        "tags": [
          "Sourcing Scenario"
        ],
        "summary": "Create Scenario",
        "description": "**Deprecated.** This endpoint is deprecated and will be removed in a future version.\n\nCreate a new sourcing scenario corresponding to an RfQ.",
        "operationId": "CreateSourcingScenario",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.sourcing-scenario-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SourcingScenarioAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.SourcingScenarioInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Scenario created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.SourcingScenarioResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The input is invalid."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission."
          }
        },
        "deprecated": true,
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/sourcing-scenarios/run-selection": {
      "post": {
        "tags": [
          "Sourcing Scenario"
        ],
        "summary": "Run Calculation",
        "description": "Triggers the sourcing selection calculation for the given scenario.\n\n**Typical usage:**\n- **Run for a single scenario**: `{\"type\": \"SourcingScenarios\", \"sourcing_scenario_ids\": [\"scenario-uuid\"]}` - runs selection for one specific scenario\n\n**Requirements:**\n- `sourcing_scenario_ids` must contain exactly one sourcing scenario ID. Running the\n  calculation for multiple scenarios in a single request is not supported — an empty array or\n  an array with more than one ID will return a 400 Bad Request error. To run the calculation\n  for several scenarios, send one request per scenario.",
        "operationId": "RunSourcingCalculation",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.sourcing-calculation-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SourcingCalculationAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.sourcing.calculation.v1.SourcingScenarioCalculationInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Calculation run successfully. The response has no body."
          },
          "400": {
            "description": "Bad request. The request is invalid — for example, the sourcing scenario\nID in the path is not a valid UUID, or the request body fails validation.\nThe `detail` field of the response body explains the problem.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `unknown`",
                      "example": "unknown"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
                      "example": 400,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission to run sourcing calculations."
          },
          "404": {
            "description": "Not found. Returned when the `Accept` header is missing or has an unexpected value — set `Accept: application/api.luminovo.sourcing-calculation-v1+json`."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/sourcing-scenarios/{id}": {
      "get": {
        "tags": [
          "Sourcing Scenario"
        ],
        "summary": "Get Scenario",
        "description": "Returns a sourcing scenario with its associated project, demands, and settings.\n\n**Project**\n\nA sourcing scenario is associated with a project, which is either an **RFQ** (Request for\nQuotation) or a **Negotiation**. The `project` field is a tagged object with a `type`\nfield (`\"Rfq\"` or `\"Negotiation\"`) and an `id` field containing the project's UUID.\n\n**Demands**\n\nEach demand item has a `type` field indicating its kind. Currently only `\"Assembly\"`\ndemands are returned, each with:\n- `id`: the assembly's UUID\n- `name`: the human-readable assembly designator\n- `quantity`: the required quantity with unit of measurement (e.g., `{\"unit\": \"Pieces\", \"quantity\": 1000.0}`)\n\n**Limitation:** Part demands (for off-the-shelf parts and components/IPNs) are not yet\nincluded in this endpoint and will be added as new `type` values in a future update.\nConsumers should gracefully handle or ignore unknown demand types.\n\n**Currency and Exchange Rates**\n\n`settings.currency.base_currency` is the base currency used for all cost calculations in\nthis sourcing scenario. All monetary values are converted to this currency.\n\n`settings.currency.exchange_rates` maps each foreign currency code to its conversion rate.\nRates are expressed as: **1 unit of base currency = `rate` units of foreign currency**.\n\nEach rate has an `is_manual` flag:\n- `true`: the rate was manually overridden by a user and takes precedence over the automatic rate\n- `false`: the rate was automatically fetched from a public exchange rate provider\n\nThe `settings` object is extensible — additional setting groups may be added alongside\n`currency` in the future.\n\n**Versioning**\n\n> **Note:** A legacy v1 version of this endpoint is available by sending\n> `Accept: application/api.luminovo.sourcing-scenario-v1+json`. It is **deprecated** and\n> returns a less detailed response — it omits currency settings, assembly names, and project\n> type information. All new integrations should use v2.",
        "operationId": "GetSourcingScenarioV2",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "UUID of the sourcing scenario to retrieve.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.sourcing-scenario-v2+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SourcingScenarioV2AcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sourcing scenario with project, demands, and settings.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v2.SourcingScenarioResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The request is invalid — for example, the sourcing scenario\nID in the path is not a valid UUID, or the request body fails validation.\nThe `detail` field of the response body explains the problem.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `unknown`",
                      "example": "unknown"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
                      "example": 400,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission to view sourcing scenarios."
          },
          "404": {
            "description": "Not found. No sourcing scenario with the given ID exists for the\nauthenticated tenant. Also returned when the `Accept` header is missing\nor has an unexpected value — make sure to send the `Accept` header\ndocumented for this endpoint; in that case the body's `code` is\n`\"unknown\"` instead of `\"sourcing_scenario.not_found\"`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `sourcing_scenario.not_found`",
                      "example": "sourcing_scenario.not_found"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "404 Not Found\n[[RFC9110, Section 15.5.5](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5)]",
                      "example": 404,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Sourcing Scenario"
        ],
        "summary": "Update Scenario",
        "description": "**Deprecated.** This endpoint is deprecated and will be removed in a future version.\n\nUpdates a sourcing scenario based on its ID. All assemblies relating to the scenario must be\nincluded in the request — only those in the request will be considered for the scenario.",
        "operationId": "UpdateSourcingScenario",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "id of the Sourcing scenario to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.sourcing-scenario-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SourcingScenarioAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.SourcingScenarioUpdateInput"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Updated scenario.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.SourcingScenarioResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The input is invalid."
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission."
          },
          "404": {
            "description": "Not found. No sourcing scenario with the given ID exists."
          }
        },
        "deprecated": true,
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/sourcing-scenarios/{id}/cost-breakdown": {
      "get": {
        "tags": [
          "Sourcing Scenario"
        ],
        "summary": "Get Cost Breakdown",
        "description": "Returns the cost breakdown of a sourcing scenario as a flat list of assembly entries —\none for every path to each assembly in each demand's assembly hierarchy, so an assembly\nreachable by several paths appears once per path. Use `hierarchy` (`parent_assembly`, `path`)\nto reconstruct the assembly hierarchy.\n\nEvery assembly reference — the entry's `assembly` as well as `hierarchy.parent_assembly` and\nthe elements of `hierarchy.path` — carries the assembly's `id`, its `name` (the assembly's\ndesignator), and its `ipn`: the assembly's internal part number (`value` plus optional\n`revision`), or `null` when the assembly has none.\n\nThe endpoint does not return a total cost for the whole scenario — only per-assembly and\nper-BOM-item figures. The closest aggregate is the `rolled_up_costs` of each demand-root\nentry, which covers that demand's whole assembly hierarchy.\n\n**Assembly hierarchy**\n\nEach demand starts at one root assembly, which may contain sub-assemblies, which may in turn\ncontain further sub-assemblies. Every entry describes one assembly on one path through that\nhierarchy: `hierarchy.parent_assembly` is the assembly that directly contains it (`null` for\nthe demand root), and `hierarchy.path` is the chain of assemblies from the demand root down\nto the parent.\n\nA demand of assembly `A1` with three levels produces these entries:\n\n```text\nA1           →  parent_assembly: null,  path: []\n└─ A2        →  parent_assembly: A1,    path: [A1]\n   └─ A3     →  parent_assembly: A2,    path: [A1, A2]\n```\n\nWhen several assemblies share the same sub-assembly, it is split per path and appears once\nper path. Here `C1` contains `C2` and `C3`, and both contain the shared sub-assembly `C4` —\nso `C4` appears twice, with different parent assemblies and paths, and each entry carries the\nquantities and costs of its own path. The costs of both `C4` entries are rolled up into their\nrespective branches (and therefore both into `C1`):\n\n```text\nC1           →  parent_assembly: null,  path: []\n├─ C2        →  parent_assembly: C1,    path: [C1]\n│  └─ C4     →  parent_assembly: C2,    path: [C1, C2]\n└─ C3        →  parent_assembly: C1,    path: [C1]\n   └─ C4     →  parent_assembly: C3,    path: [C1, C3]\n```\n\n**Direct vs rolled-up costs**\n\n- `direct_costs` are the costs for the assembly's own BOM items — nothing from its children.\n- `rolled_up_costs` add everything below the entry: assemblies with no sub-assemblies roll up\n  only their own direct costs, and every level above adds its own direct costs to the sum of\n  its children's rolled-up costs, accumulated bottom-up. For a demand-root assembly,\n  `rolled_up_costs` is the full cost of the demand.\n\n**Scrap and excess material**\n\nAll prices always include the cost of the extra material purchased to cover expected scrap.\nPrices may additionally include excess material — material bought beyond the required\nquantity, e.g. forced by supplier minimum order or packaging quantities: `…excluding_excess`\nis the cost of the required quantity, `…including_excess` is the cost of the quantity\nactually bought. The difference is the `excess_material_cost`. Assembly cost objects also\nbreak out `scrap_cost`, `one_time_cost`, and `tco_cost` (all already included in the totals).\n\n**BOM items**\n\n`bom_items` lists every BOM item of the assembly exactly once, identified by its\n`designators` (e.g. `[\"R1\", \"R2\"]`). `sourcing_status` says whether it\nwas sourced:\n\n- `Sourced` items carry their two `direct_costs` totals and `purchase_options` (joinable to\n  `/purchase-options` via `offer_id`).\n- Not (yet) sourced items — `Consigned`, `NoOffer`, `Pending`, `Error` — carry\n  `direct_costs: null` and empty `purchase_options`; the status explains why there is no cost.\n- Items excluded from sourcing — `DoNotPlace`, `NoPartOptions` — likewise carry no cost.\n\nFor example, an assembly with a sourced resistor, a capacitor whose offer selection is still\npending, and a do-not-place test point returns:\n\n```text\nbom_items: [\n  { bom_item: { designators: [\"R1\"] },  sourcing_status: \"Sourced\",     direct_costs: {…},  purchase_options: [{…}] },\n  { bom_item: { designators: [\"C7\"] },  sourcing_status: \"Pending\",     direct_costs: null, purchase_options: [] },\n  { bom_item: { designators: [\"TP1\"] }, sourcing_status: \"DoNotPlace\",  direct_costs: null, purchase_options: [] }\n]\n```\n\nThe endpoint reflects the currently persisted offer selection; it does not trigger a\nrecalculation.",
        "operationId": "GetCostBreakdownForSourcingScenario",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "UUID of the sourcing scenario to get the cost breakdown for.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.sourcing-scenario-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SourcingScenarioAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sourcing scenario's cost breakdown: one entry for every path to each assembly in each demand's assembly hierarchy, with direct and rolled-up assembly costs plus per-BOM-item costs. The example shows a demand of 1000 pieces of a root assembly \"Main Board\" containing 2 pieces each of a sub-assembly \"Power Supply\".",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCostBreakdownForSourcingScenarioResponse"
                },
                "example": {
                  "assembly_costs": [
                    {
                      "assembly": {
                        "id": "0c6f0f26-9e1c-4b0a-9c8e-6a86bfa04c5e",
                        "name": "Main Board",
                        "internal_part_number": {
                          "value": "MB-100",
                          "revision": "A"
                        }
                      },
                      "demand": {
                        "type": "Assembly",
                        "id": "3f83f974-9a1e-4b6a-8f3b-2f7a3f1b9d1c"
                      },
                      "hierarchy": {
                        "parent_assembly": null,
                        "path": []
                      },
                      "quantity": {
                        "type": "Number",
                        "unit": "Pieces",
                        "value": "1000"
                      },
                      "direct_costs": {
                        "total_price_excluding_excess": {
                          "amount": "18.00",
                          "currency": "EUR"
                        },
                        "unit_price_excluding_excess": {
                          "amount": "0.018",
                          "currency": "EUR"
                        },
                        "total_price_including_excess": {
                          "amount": "18.90",
                          "currency": "EUR"
                        },
                        "unit_price_including_excess": {
                          "amount": "0.0189",
                          "currency": "EUR"
                        },
                        "excess_material_cost": {
                          "amount": "0.90",
                          "currency": "EUR"
                        },
                        "scrap_cost": {
                          "amount": "0.18",
                          "currency": "EUR"
                        },
                        "one_time_cost": null,
                        "tco_cost": null
                      },
                      "rolled_up_costs": {
                        "total_price_excluding_excess": {
                          "amount": "5018.00",
                          "currency": "EUR"
                        },
                        "unit_price_excluding_excess": {
                          "amount": "5.018",
                          "currency": "EUR"
                        },
                        "total_price_including_excess": {
                          "amount": "5218.90",
                          "currency": "EUR"
                        },
                        "unit_price_including_excess": {
                          "amount": "5.2189",
                          "currency": "EUR"
                        },
                        "excess_material_cost": {
                          "amount": "200.90",
                          "currency": "EUR"
                        },
                        "scrap_cost": {
                          "amount": "100.18",
                          "currency": "EUR"
                        },
                        "one_time_cost": null,
                        "tco_cost": null
                      },
                      "bom_items": [
                        {
                          "bom_item": {
                            "designators": [
                              "R1",
                              "R2"
                            ]
                          },
                          "per_assembly_quantity": {
                            "type": "Number",
                            "unit": "Pieces",
                            "value": "2"
                          },
                          "sourcing_status": "Sourced",
                          "direct_costs": {
                            "total_price_excluding_excess": {
                              "amount": "18.00",
                              "currency": "EUR"
                            },
                            "total_price_including_excess": {
                              "amount": "18.90",
                              "currency": "EUR"
                            }
                          },
                          "purchase_options": [
                            {
                              "offer_id": "PublicOffTheShelf:31408c25-79b0-4f88-a3e8-b0e11e07df9d",
                              "minimum_order_quantity": 100,
                              "minimum_packaging_quantity": 100,
                              "quantity": 2100,
                              "unit_of_measurement": {
                                "type": "Number",
                                "unit": "Pieces",
                                "value": "1"
                              },
                              "purchase_quantity": {
                                "type": "Number",
                                "unit": "Pieces",
                                "value": "2100"
                              },
                              "unit_price": {
                                "amount": "0.009",
                                "currency": "EUR"
                              }
                            }
                          ]
                        },
                        {
                          "bom_item": {
                            "designators": [
                              "C7"
                            ]
                          },
                          "per_assembly_quantity": {
                            "type": "Number",
                            "unit": "Pieces",
                            "value": "1"
                          },
                          "sourcing_status": "Pending",
                          "direct_costs": null,
                          "purchase_options": []
                        },
                        {
                          "bom_item": {
                            "designators": [
                              "TP1"
                            ]
                          },
                          "per_assembly_quantity": {
                            "type": "Number",
                            "unit": "Pieces",
                            "value": "1"
                          },
                          "sourcing_status": "DoNotPlace",
                          "direct_costs": null,
                          "purchase_options": []
                        }
                      ]
                    },
                    {
                      "assembly": {
                        "id": "7a1af9be-4f6e-4a6e-96da-3f6a3f83c9b2",
                        "name": "Power Supply",
                        "internal_part_number": null
                      },
                      "demand": {
                        "type": "Assembly",
                        "id": "3f83f974-9a1e-4b6a-8f3b-2f7a3f1b9d1c"
                      },
                      "hierarchy": {
                        "parent_assembly": {
                          "id": "0c6f0f26-9e1c-4b0a-9c8e-6a86bfa04c5e",
                          "name": "Main Board",
                          "internal_part_number": {
                            "value": "MB-100",
                            "revision": "A"
                          }
                        },
                        "path": [
                          {
                            "id": "0c6f0f26-9e1c-4b0a-9c8e-6a86bfa04c5e",
                            "name": "Main Board",
                            "internal_part_number": {
                              "value": "MB-100",
                              "revision": "A"
                            }
                          }
                        ]
                      },
                      "quantity": {
                        "type": "Number",
                        "unit": "Pieces",
                        "value": "2000"
                      },
                      "direct_costs": {
                        "total_price_excluding_excess": {
                          "amount": "5000.00",
                          "currency": "EUR"
                        },
                        "unit_price_excluding_excess": {
                          "amount": "2.50",
                          "currency": "EUR"
                        },
                        "total_price_including_excess": {
                          "amount": "5200.00",
                          "currency": "EUR"
                        },
                        "unit_price_including_excess": {
                          "amount": "2.60",
                          "currency": "EUR"
                        },
                        "excess_material_cost": {
                          "amount": "200.00",
                          "currency": "EUR"
                        },
                        "scrap_cost": {
                          "amount": "100.00",
                          "currency": "EUR"
                        },
                        "one_time_cost": null,
                        "tco_cost": null
                      },
                      "rolled_up_costs": {
                        "total_price_excluding_excess": {
                          "amount": "5000.00",
                          "currency": "EUR"
                        },
                        "unit_price_excluding_excess": {
                          "amount": "2.50",
                          "currency": "EUR"
                        },
                        "total_price_including_excess": {
                          "amount": "5200.00",
                          "currency": "EUR"
                        },
                        "unit_price_including_excess": {
                          "amount": "2.60",
                          "currency": "EUR"
                        },
                        "excess_material_cost": {
                          "amount": "200.00",
                          "currency": "EUR"
                        },
                        "scrap_cost": {
                          "amount": "100.00",
                          "currency": "EUR"
                        },
                        "one_time_cost": null,
                        "tco_cost": null
                      },
                      "bom_items": [
                        {
                          "bom_item": {
                            "designators": [
                              "X1"
                            ]
                          },
                          "per_assembly_quantity": {
                            "type": "Number",
                            "unit": "Pieces",
                            "value": "1"
                          },
                          "sourcing_status": "Sourced",
                          "direct_costs": {
                            "total_price_excluding_excess": {
                              "amount": "5000.00",
                              "currency": "EUR"
                            },
                            "total_price_including_excess": {
                              "amount": "5200.00",
                              "currency": "EUR"
                            }
                          },
                          "purchase_options": [
                            {
                              "offer_id": "PrivateOffTheShelf:8e35cbb9-4b2f-45c3-9c25-4f2b0a4b0f3a",
                              "minimum_order_quantity": 500,
                              "minimum_packaging_quantity": 1,
                              "quantity": 2080,
                              "unit_of_measurement": {
                                "type": "Number",
                                "unit": "Pieces",
                                "value": "1"
                              },
                              "purchase_quantity": {
                                "type": "Number",
                                "unit": "Pieces",
                                "value": "2080"
                              },
                              "unit_price": {
                                "amount": "2.50",
                                "currency": "EUR"
                              }
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The request is invalid — for example, the sourcing scenario\nID in the path is not a valid UUID, or the request body fails validation.\nThe `detail` field of the response body explains the problem.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `unknown`",
                      "example": "unknown"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
                      "example": 400,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission to view this sourcing scenario."
          },
          "404": {
            "description": "Not found. No sourcing scenario with the given ID exists for the\nauthenticated tenant. Also returned when the `Accept` header is missing\nor has an unexpected value — make sure to send the `Accept` header\ndocumented for this endpoint; in that case the body's `code` is\n`\"unknown\"` instead of `\"sourcing_scenario.not_found\"`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `sourcing_scenario.not_found`",
                      "example": "sourcing_scenario.not_found"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "404 Not Found\n[[RFC9110, Section 15.5.5](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5)]",
                      "example": 404,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/sourcing-scenarios/{id}/purchase-options": {
      "get": {
        "tags": [
          "Sourcing Scenario"
        ],
        "summary": "Get Purchase Options",
        "description": "Returns purchase options for a sourcing scenario, grouped by offer. Each purchase\noption represents a selected offer with its order quantity, pricing, and the sourcing\nline items it fulfills. This data is designed for ERP systems to create purchase orders.\n\n**Quantity model**\n\n- `quantity` is the number of **offer units** to order.\n- `unit_of_measurement` defines what one offer unit represents (e.g. 1 piece, or 5 meters\n  of cable).\n- `purchase_quantity` is the total in base units: `quantity × unit_of_measurement.value`.\n  This is a computed convenience field.\n\n**Resolving offer details**\n\nEach purchase option carries an `offer_id`. Use this identifier with\n`GET /offers/{id}` or `POST /offers/bulk` to fetch the full offer including\nsupplier information, pricing tiers, and availability.\n\nThe endpoint reflects the currently persisted offer selection; it does not trigger a\nrecalculation.",
        "operationId": "GetPurchaseOptionsForSourcingScenario",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "UUID of the sourcing scenario to retrieve purchase options for.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.sourcing-scenario-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SourcingScenarioAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Purchase options for the sourcing scenario. Each entry represents a selected offer with its order quantity and the sourcing line items it fulfills.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPurchaseOptionsForSourcingScenarioResponse"
                },
                "example": {
                  "purchase_options": [
                    {
                      "offer_id": "PublicOffTheShelf:31408c25-79b0-4f88-a3e8-b0e11e07df9d",
                      "minimum_order_quantity": 100,
                      "minimum_packaging_quantity": 100,
                      "quantity": 2100,
                      "unit_of_measurement": {
                        "type": "Number",
                        "unit": "Pieces",
                        "value": "1"
                      },
                      "purchase_quantity": {
                        "type": "Number",
                        "unit": "Pieces",
                        "value": "2100"
                      },
                      "unit_price": {
                        "amount": "0.009",
                        "currency": "EUR"
                      }
                    },
                    {
                      "offer_id": "Custom:7d0e33e6-8c31-4b8b-9b3c-9be382b26aef",
                      "minimum_order_quantity": 1,
                      "minimum_packaging_quantity": 1,
                      "quantity": 400,
                      "unit_of_measurement": {
                        "type": "Length",
                        "unit": "Meters",
                        "value": "5"
                      },
                      "purchase_quantity": {
                        "type": "Length",
                        "unit": "Meters",
                        "value": "2000"
                      },
                      "unit_price": {
                        "amount": "12.50",
                        "currency": "EUR"
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request. The request is invalid — for example, the sourcing scenario\nID in the path is not a valid UUID, or the request body fails validation.\nThe `detail` field of the response body explains the problem.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `unknown`",
                      "example": "unknown"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
                      "example": 400,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized. The Bearer token is missing or invalid."
          },
          "403": {
            "description": "Forbidden. The authenticated user does not have permission to view this sourcing scenario."
          },
          "404": {
            "description": "Not found. No sourcing scenario with the given ID exists for the\nauthenticated tenant. Also returned when the `Accept` header is missing\nor has an unexpected value — make sure to send the `Accept` header\ndocumented for this endpoint; in that case the body's `code` is\n`\"unknown\"` instead of `\"sourcing_scenario.not_found\"`.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "An API error response for a non-success HTTP status code.",
                  "required": [
                    "code",
                    "title",
                    "status",
                    "detail",
                    "data"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Error code: `sourcing_scenario.not_found`",
                      "example": "sourcing_scenario.not_found"
                    },
                    "title": {
                      "type": "string",
                      "description": "A human-readable title of the HTTP error status code."
                    },
                    "status": {
                      "type": "integer",
                      "format": "int32",
                      "description": "404 Not Found\n[[RFC9110, Section 15.5.5](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5)]",
                      "example": 404,
                      "minimum": 0
                    },
                    "detail": {
                      "type": "string",
                      "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "No additional data. This field is `null` for these errors."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/supplier-quote/pcb/{pcb_id}/offer/{offer_id}": {
      "get": {
        "tags": [
          "Offers and Inventory"
        ],
        "summary": "Get PCB Offer from PCB Pricing Console",
        "description": "Get the offer for a PCB, which was created in the PCB pricing console.",
        "operationId": "GetSupplierCustomPartOffer",
        "parameters": [
          {
            "name": "pcb_id",
            "in": "path",
            "description": "Set this to shared PCB id you want to get an offer from.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offer_id",
            "in": "path",
            "description": "Set this to the offer ID.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.custom-part-offer-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SupplierCustomPartOfferAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Custom part offer.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomPartOffer"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/suppliers": {
      "get": {
        "tags": [
          "Supplier"
        ],
        "summary": "Get Suppliers",
        "description": "Retrieves supplier information with optional filtering.\n\n## Parameters\n- `ids` (optional): Array of supplier IDs to filter by. If provided, only suppliers matching these IDs will be returned.\n\n## Behavior\n- **With IDs**: Returns only the specified suppliers (bulk retrieval)\n- **Without IDs**: Returns all available suppliers\n\n## Returns\nA list of supplier objects containing their basic information and metadata.\n\n## Example\n```\nGET /suppliers?ids=123,456,789  // Get specific suppliers\nGET /suppliers                  // Get all suppliers\n```",
        "operationId": "GetSuppliers",
        "parameters": [
          {
            "name": "ids",
            "in": "query",
            "description": "The IDs of the suppliers to get. If not provided, all suppliers will be returned.",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.supplier-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SupplierAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Suppliers fetched.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.supplier.v1.BulkSuppliersResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Supplier"
        ],
        "summary": "Import Suppliers",
        "description": "Import a list of suppliers.",
        "operationId": "ImportSuppliers",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.supplier-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SupplierAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.supplier.v1.ImportSuppliersRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "207": {
            "description": "Suppliers imported.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.supplier.v1.ImportSuppliersResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/suppliers/{id}": {
      "delete": {
        "tags": [
          "Supplier"
        ],
        "summary": "Delete Supplier",
        "description": "Delete a supplier by its ID.\n\nNote: System suppliers cannot be deleted and will return an error if deletion is attempted",
        "operationId": "DeleteSupplier",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the supplier to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.supplier-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SupplierAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Supplier deleted."
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Supplier"
        ],
        "summary": "Update Supplier",
        "description": "Update a supplier by its ID.\nNote: For system suppliers, only the supplier number & preference can be updated.",
        "operationId": "UpdateSupplier",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the supplier to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.supplier-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SupplierAcceptHeader"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/types.supplier.v1.SupplierUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Supplier updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.supplier.v1.SingleSupplierResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/users": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get All Users",
        "description": "Returns all users of your system.",
        "operationId": "GetAllUsers",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "description": "Set this to `application/api.luminovo.user-v1+json`.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/UserAcceptHeader"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Get all organization users.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/types.user.v1.AllUsers"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/ems/pcb/pcbs": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Find a PCB using an order ID",
        "description": "Find a PCB using the orderID that was specified during its creation.",
        "parameters": [
          {
            "name": "orderId",
            "in": "query",
            "description": "orderId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB was found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/PCBV2"
                      }
                    ]
                  }
                }
              }
            }
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      },
      "post": {
        "tags": [
          "PCB"
        ],
        "summary": "Create a new PCB",
        "description": "\nThis endpoint facilitates the creation of a new PCB project.\n\nThe request payload does not take any files, but they can be\nonce the record is created.\n\nIt is possible to use the API without providing any project\nfiles. This means analysis and value extraction will not be\navailable.\n\nIf this PCB belongs to a RfQ and should be linked together, then\nthe `externalReference` and `orderId` fields should be filled\nand the RfQ should be updated with the PCB's UUID.\n\nThe creation of a PCB involves the creation of a specification\nthat can be used to override the default values of the PCB.\n",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PCBV2Creation"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "PCB was created",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2"
                    }
                  ]
                }
              }
            }
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/capabilities": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get All Capabilities",
        "description": "\nReturns all the available PCB properties and the values available\nfor each of them, as well as the default value.\n\nSome capabilities depend on the values of other capabilities,\nwhich means the list of available values is not complete unless\nthe pcb-specific endpoint is used.\n",
        "responses": {
          "200": {
            "description": "List of PCB capabilities",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2SpecificationCapabilities"
                    }
                  ]
                }
              }
            }
          }
        },
        "deprecated": false
      }
    },
    "/api/ems/pcb/base-materials/vendors": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "List central base-material vendors",
        "description": "\nReturns the distinct list of vendors present in the central, Luminovo-maintained\nPCB base-material catalog (e.g. Isola, Panasonic, Shengyi). Used to drive the\nvendor dropdown when picking a base material.\n",
        "responses": {
          "200": {
            "description": "List of base-material vendors",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PcbBaseMaterialVendors"
                    }
                  ]
                }
              }
            }
          }
        },
        "deprecated": false
      }
    },
    "/api/ems/pcb/base-materials": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "List central base materials for a vendor",
        "description": "\nReturns all central base materials offered by the given vendor (drives the\nfiltered material-number dropdown).\n",
        "parameters": [
          {
            "name": "vendor",
            "in": "query",
            "description": "vendor",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of base materials for the vendor",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/PcbBaseMaterial"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "deprecated": false
      }
    },
    "/api/ems/pcb/base-materials/lookup": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Look up a central base material",
        "description": "\nLooks up a single central base material by its `(vendor, materialNumber)` natural\nkey and returns the derived fields (`baseMaterial`, `tgValue`, `ctiClass`/`plcClass`)\nused to derive & lock a specification.\n",
        "parameters": [
          {
            "name": "vendor",
            "in": "query",
            "description": "vendor",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "materialNumber",
            "in": "query",
            "description": "materialNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Base material was found",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PcbBaseMaterial"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Base material was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/api/ems/pcb/soldermask-materials/vendors": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "List central soldermask-material vendors",
        "description": "\nReturns the distinct list of vendors present in the central, Luminovo-maintained\nPCB soldermask-material catalog (e.g. Taiyo, Sun Chemical). Used to drive the\nvendor dropdown when picking a soldermask material.\n",
        "responses": {
          "200": {
            "description": "List of soldermask-material vendors",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PcbSoldermaskMaterialVendors"
                    }
                  ]
                }
              }
            }
          }
        },
        "deprecated": false
      }
    },
    "/api/ems/pcb/soldermask-materials": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "List central soldermask materials for a vendor",
        "description": "\nReturns all central soldermask materials offered by the given vendor (drives the\nfiltered material-number dropdown).\n",
        "parameters": [
          {
            "name": "vendor",
            "in": "query",
            "description": "vendor",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of soldermask materials for the vendor",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/PcbSoldermaskMaterial"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "deprecated": false
      }
    },
    "/api/ems/pcb/soldermask-materials/lookup": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Look up a central soldermask material",
        "description": "\nLooks up a single central soldermask material by its `(vendor, materialNumber)` natural\nkey and returns the derived `soldermaskColor` (+ `finish`, `halogenFree`) used to\nderive & lock a specification.\n",
        "parameters": [
          {
            "name": "vendor",
            "in": "query",
            "description": "vendor",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "materialNumber",
            "in": "query",
            "description": "materialNumber",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Soldermask material was found",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PcbSoldermaskMaterial"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Soldermask material was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/shares/{share}": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get a Shared PCB",
        "description": "Find a Shared PCB by its UUID.",
        "parameters": [
          {
            "name": "share",
            "in": "path",
            "description": "share",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB was found",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/shares/{share}/files/all": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get the Shared PCB Files as zip",
        "description": "Downloads PCB files of a shared PCB as a zip folder",
        "parameters": [
          {
            "name": "share",
            "in": "path",
            "description": "share",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB project zip",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/NotUsed"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/pcbs/{pcb}": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get a PCB",
        "description": "Find a PCB by its UUID.",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB was found",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      },
      "put": {
        "tags": [
          "PCB"
        ],
        "summary": "Update a PCB",
        "description": "Updates some of the PCB properties that were set during creation.",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PCBV2Update"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "PCB was updated",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      },
      "delete": {
        "tags": [
          "PCB"
        ],
        "summary": "Delete a PCB",
        "description": "Find and delete a PCB by its UUID.",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB was deleted",
            "links": {}
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/pcbs/{pcb}/clone": {
      "post": {
        "tags": [
          "PCB"
        ],
        "summary": "Clone an existing PCB",
        "description": "\nClone an existing PCB.\n\nThis clones the PCB, analysis results, specifications and\nfiles associated.\n\nThis operation returns an error if the PCB's analysis is\nin progress.\n",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PCBV2Clone"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "PCB was cloned",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2Id"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB to clone was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/pcbs/{pcb}/files/all": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get the PCB Files as zip",
        "description": "Downloads PCB files as a zip folder",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB project zip",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/NotUsed"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/pcbs/{pcb}/files/singular/{file}": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get a PCB File",
        "description": "Downloads PCB file by name, if it exists.",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "file",
            "in": "path",
            "description": "file",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB project zip",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/NotUsed"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB or file was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/pcbs/{pcb}/netlist": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "getPCBV2NetList",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Request was successful",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/NotUsed"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/ems/pcb/pcbs/{pcb}/specifications": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get all PCB Specifications",
        "description": "Get all PCB specificationss",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB specifications",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/PCBV2Specification"
                      }
                    ]
                  }
                }
              }
            }
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      },
      "put": {
        "tags": [
          "PCB"
        ],
        "summary": "Create a new PCB Specification",
        "description": "Create anew PCB specifications",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PCBV2Specification"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "PCB specification created",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2Specification"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/pcbs/{pcb}/specifications/{specification}": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get a PCB Specification",
        "description": "Find PCB specification by name or UUID",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "specification",
            "in": "path",
            "description": "the name or uuid of the specification",
            "required": true,
            "explode": false,
            "schema": {
              "type": "string",
              "description": "the name or uuid of the specification"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB specification",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2Specification"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB or specification was not found",
            "links": {}
          }
        },
        "deprecated": false
      },
      "put": {
        "tags": [
          "PCB"
        ],
        "summary": "Update a PCB Specification",
        "description": "Update a PCB Specifications",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "specification",
            "in": "path",
            "description": "specification",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "removeUndefined",
            "in": "query",
            "description": "removeUndefined",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Object"
                }
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PCBV2Update"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "PCB specification updated",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2Specification"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB or specification was not found",
            "links": {}
          }
        },
        "deprecated": false
      },
      "delete": {
        "tags": [
          "PCB"
        ],
        "summary": "Delete a PCB Specification",
        "description": "Delete a PCB Specifications",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "specification",
            "in": "path",
            "description": "specification",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB specification deleted",
            "links": {}
          },
          "404": {
            "description": "PCB or specification was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/pcbs/{pcb}/specifications/{specification}/previews": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get a PCB Specification Preview",
        "description": "Find PCB specification by name or UUID",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "specification",
            "in": "path",
            "description": "the name or uuid of the specification",
            "required": true,
            "explode": false,
            "schema": {
              "type": "string",
              "description": "the name or uuid of the specification"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PCB specification previews",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBPreviews"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "PCB or specification was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    },
    "/ems/pcb/pcbs/{pcb}/capabilities": {
      "get": {
        "tags": [
          "PCB"
        ],
        "summary": "Get All Capabilities respecting the currently set values of the specification",
        "description": "\nReturns all the available PCB properties and the values available\nfor each of them, as well as the default value.\n\nSome capabilities depend on the values of other capabilities,\nwhich means the values for certain capabilities change based on\nthe PCB specification.\n\nAn example of this behaviour is the inner copper thickness, which\nrequires the PCB to have at least 4 layers.\n",
        "parameters": [
          {
            "name": "pcb",
            "in": "path",
            "description": "pcb",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "materialVendor",
            "in": "query",
            "description": "materialVendor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "materialNumber",
            "in": "query",
            "description": "materialNumber",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "soldermaskMaterialVendor",
            "in": "query",
            "description": "soldermaskMaterialVendor",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "soldermaskMaterialNumber",
            "in": "query",
            "description": "soldermaskMaterialNumber",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of PCB capabilities",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/PCBV2SpecificationCapabilities"
                    }
                  ]
                }
              }
            }
          }
        },
        "deprecated": false
      }
    },
    "/files/ems/pcb/pcbs/:pcb/files": {
      "post": {
        "tags": [
          "PCB"
        ],
        "summary": "Upload Files to the PCB",
        "parameters": [],
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "$ref": "#/components/schemas/FileUpload"
              },
              "encoding": {
                "files": {
                  "contentType": "application/pdf, image/png"
                }
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "description": "Files were uploaded",
            "links": {}
          },
          "404": {
            "description": "PCB was not found",
            "links": {}
          }
        },
        "deprecated": false
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "TokenRequest": {
        "properties": {
          "token": {
            "description": "The authentication token to exchange for an access token",
            "examples": [
              "cb7daea2-df5f-44de-99cc-213668e6c991"
            ],
            "type": "string"
          }
        },
        "required": [
          "token"
        ],
        "type": "object"
      },
      "SupplierContact": {
        "type": "object",
        "required": [
          "id",
          "first_name",
          "last_name",
          "email",
          "user_language",
          "supplier_and_stock_location",
          "is_main_contact",
          "is_public"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "the identifier of the supplier contact",
            "example": "1adf4f5f-ec6d-4b80-9da4-9f0d4f876913"
          },
          "first_name": {
            "type": "string",
            "description": "The first name of the supplier contact",
            "examples": [
              "Max"
            ]
          },
          "last_name": {
            "type": "string",
            "description": "The last name of the supplier contact",
            "examples": [
              "Mustermann"
            ]
          },
          "email": {
            "type": "string",
            "description": "The email address of the supplier contact",
            "examples": [
              "max.mustermann@musterfirma.de"
            ]
          },
          "user_language": {
            "type": "string",
            "description": "The user language of the supplier contact",
            "enum": [
              "de",
              "en",
              "es",
              "fr"
            ],
            "example": "en"
          },
          "is_main_contact": {
            "type": "boolean",
            "description": "Determines if this supplier contact will be the main contact. Sets the preselection of this contact",
            "example": true
          },
          "is_public": {
            "type": "boolean",
            "description": "Determines if this supplier contact will be public.",
            "example": true
          },
          "supplier_and_stock_location": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the corresponding supplier",
            "example": "0f9b6e20-0f5c-4dd4-9ebf-f14cbece3f71"
          },
          "position": {
            "type": "string",
            "description": "Optional job description of the supplier contact",
            "examples": [
              "Key Account Manager"
            ]
          }
        }
      },
      "SupplierContactResponse": {
        "type": "object",
        "description": "The supplier contact object",
        "allOf": [
          {
            "$ref": "#/components/schemas/SupplierContact"
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "The unique identifier of that supplier contact",
                "example": "1adf4f5f-ec6d-4b80-9da4-9f0d4f876913"
              }
            }
          }
        ]
      },
      "InternalUser": {
        "type": "object",
        "required": [
          "id",
          "first_name",
          "last_name",
          "email"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier of the internal user",
            "example": "f7182b67-8cef-4bb6-a5de-3dbaf1a89ef5"
          },
          "first_name": {
            "type": "string",
            "description": "The first name of the internal user",
            "examples": [
              "Max"
            ]
          },
          "last_name": {
            "type": "string",
            "description": "The last name of the internal user",
            "examples": [
              "Mustermann"
            ]
          },
          "email": {
            "type": "string",
            "description": "The email address of the internal user",
            "examples": [
              "max.mustermann@musterfirma.de"
            ]
          }
        }
      },
      "Currency": {
        "type": "string",
        "enum": [
          "EUR",
          "MAD",
          "USD",
          "AUD",
          "BGN",
          "BRL",
          "CAD",
          "CHF",
          "CNY",
          "CZK",
          "DKK",
          "GBP",
          "HKD",
          "HRK",
          "HUF",
          "IDR",
          "ILS",
          "INR",
          "ISK",
          "JPY",
          "KRW",
          "MXN",
          "MYR",
          "NOK",
          "NZD",
          "PHP",
          "PLN",
          "RON",
          "RUB",
          "SEK",
          "SGD",
          "THB",
          "TRY",
          "ZAR",
          "TWD",
          "VND",
          "LKR"
        ]
      },
      "LegacyMonetaryValue": {
        "type": "object",
        "required": [
          "amount",
          "currency"
        ],
        "properties": {
          "amount": {
            "type": "string"
          },
          "currency": {
            "$ref": "#/components/schemas/Currency"
          }
        }
      },
      "Availability": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Stock",
                  "OnOrderWithUnknownLeadTime"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type",
              "days"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "PriceBreakLeadTimeDays",
                  "OnOrder",
                  "LeadTimeDays"
                ]
              },
              "days": {
                "type": "integer",
                "format": "integer"
              }
            }
          }
        ],
        "description": "Availability of a solution or purchase option, indicating if it is in stock"
      },
      "QuantityUnit": {
        "type": "object",
        "required": [
          "unit",
          "quantity"
        ],
        "properties": {
          "unit": {
            "type": "string",
            "enum": [
              "Kg",
              "Meters",
              "Liters",
              "Pieces"
            ]
          },
          "quantity": {
            "type": "number"
          }
        }
      },
      "ImportUnit": {
        "type": "object",
        "required": [
          "unit",
          "quantity"
        ],
        "properties": {
          "unit": {
            "title": "Unit",
            "type": "string",
            "enum": [
              "Kilogram",
              "Gram",
              "Milligram",
              "Pound",
              "Meter",
              "Centimeter",
              "Millimeter",
              "Foot",
              "Inch",
              "Liter",
              "Centiliter",
              "Milliliter",
              "Ounce",
              "Gallon",
              "Pint",
              "Piece",
              "Pair"
            ]
          },
          "quantity": {
            "description": "The quantity must be greater than 0.",
            "type": "number"
          }
        }
      },
      "Packaging": {
        "type": "string",
        "enum": [
          "AmmoPack",
          "Bag",
          "Bulk",
          "Reel",
          "ReReel",
          "Spool",
          "Tape",
          "Tray",
          "Tube",
          "Carton"
        ]
      },
      "OfferId": {
        "anyOf": [
          {
            "type": "object",
            "required": [
              "offer_type",
              "offer"
            ],
            "properties": {
              "offer_type": {
                "type": "string",
                "enum": [
                  "Other",
                  "CustomPart",
                  "Consigned"
                ]
              },
              "offer": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "offer_type",
              "offer"
            ],
            "properties": {
              "offer_type": {
                "type": "string",
                "enum": [
                  "Inventory"
                ]
              },
              "offer": {
                "type": "string"
              }
            }
          }
        ]
      },
      "PurchaseOptionResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/OfferId"
          },
          {
            "type": "object",
            "required": [
              "unit",
              "quantity"
            ],
            "properties": {
              "unit_price": {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              },
              "availability": {
                "$ref": "#/components/schemas/Availability"
              },
              "unit": {
                "$ref": "#/components/schemas/QuantityUnit"
              },
              "quantity": {
                "type": "number"
              },
              "signature": {
                "anyOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/Signature"
                  }
                ]
              }
            }
          }
        ]
      },
      "Signature": {
        "type": "object"
      },
      "DateTime": {
        "type": "string",
        "format": "date-time"
      },
      "NaiveDateTime": {
        "type": "string",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$",
        "description": "A naive date-time string in the format \"YYYY-MM-DDTHH:MM:SS\", where \"T\" is a literal character separating the date and time components, without a time zone. Example: \"2024-03-31T01:00:00\".\n"
      },
      "Date": {
        "type": "string",
        "format": "date"
      },
      "PendingPurchaseOrderRecipient": {
        "title": "PendingPurchaseOrderRecipient",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "title": "Supplier",
            "required": [
              "type",
              "supplier_and_stock_location_id"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Supplier"
                ]
              },
              "supplier_and_stock_location_id": {
                "type": "string",
                "format": "uuid",
                "description": "The ID of the supplier-and-stock-location for purchase order"
              },
              "supplier_contact": {
                "$ref": "#/components/schemas/SupplierContact"
              }
            }
          },
          {
            "type": "object",
            "title": "Internal",
            "required": [
              "type",
              "inventory_id"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Internal"
                ]
              },
              "inventory_id": {
                "type": "string",
                "format": "uuid",
                "description": "The ID of the inventory site for purchase order"
              },
              "internal_user": {
                "$ref": "#/components/schemas/InternalUser"
              }
            }
          },
          {
            "type": "object",
            "title": "Customer",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Customer"
                ]
              },
              "user": {
                "$ref": "#/components/schemas/InternalUser"
              }
            }
          },
          {
            "type": "object",
            "title": "SupplierNumber",
            "required": [
              "type",
              "supplier_number"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "SupplierNumber"
                ]
              },
              "supplier_number": {
                "type": "string",
                "description": "The number of the supplier for purchase order"
              },
              "supplier_contact": {
                "$ref": "#/components/schemas/SupplierContact"
              }
            }
          }
        ]
      },
      "PurchaseOrderRecipient": {
        "title": "PurchaseOrderRecipient",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "type",
              "supplier_and_stock_location_id"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Supplier"
                ]
              },
              "supplier_and_stock_location_id": {
                "type": "string",
                "format": "uuid",
                "description": "The ID of the supplier-and-stock-location for purchase order"
              },
              "supplier_contact": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type",
              "inventory_id",
              "internal_user"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Internal"
                ]
              },
              "inventory_id": {
                "type": "string",
                "format": "uuid",
                "description": "The ID of the inventory site for purchase order"
              },
              "internal_user": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type",
              "user"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Customer"
                ]
              },
              "user": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "type": "object",
            "title": "SupplierNumber",
            "required": [
              "type",
              "supplier_number"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "SupplierNumber"
                ]
              },
              "supplier_number": {
                "type": "string",
                "description": "The number of the supplier for purchase order"
              },
              "supplier_contact": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        ]
      },
      "PurchaseOrderLinkedPart": {
        "title": "PurchaseOrderLinkedPart",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "type",
              "part"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "OffTheShelf",
                  "Custom",
                  "Ipn"
                ]
              },
              "part": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type",
              "part_options"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Consigned"
                ]
              },
              "part_options": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "part",
                    "type"
                  ],
                  "properties": {
                    "part": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "Custom",
                        "OffTheShelf",
                        "Ipn",
                        "Generic"
                      ]
                    }
                  }
                }
              }
            }
          }
        ]
      },
      "PurchaseOrderLineItem": {
        "type": "object",
        "title": "PurchaseOrderLineItem",
        "required": [
          "id",
          "expected_unit_price",
          "quantity",
          "total_price",
          "linked_part",
          "solution_config_id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Purchase order line item ID"
          },
          "availability": {
            "$ref": "#/components/schemas/Availability"
          },
          "expected_unit_price": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              }
            ]
          },
          "total_price": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              }
            ]
          },
          "packaging": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Packaging"
              }
            ]
          },
          "offer_created_at": {
            "$ref": "#/components/schemas/DateTime"
          },
          "offer_number": {
            "type": "string"
          },
          "quantity": {
            "$ref": "#/components/schemas/QuantityUnit"
          },
          "supplier_part_number": {
            "type": "string",
            "description": "Part number for supplier"
          },
          "solution_config_id": {
            "type": "string",
            "format": "uuid",
            "description": "Solution configuration ID"
          },
          "linked_part": {
            "$ref": "#/components/schemas/PurchaseOrderLinkedPart"
          },
          "ipns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "received_at": {
            "$ref": "#/components/schemas/DateTime"
          }
        }
      },
      "PendingPurchaseOrderLineItem": {
        "type": "object",
        "title": "PendingPurchaseOrderLineItem",
        "required": [
          "expected_unit_price",
          "quantity",
          "solution_config_id",
          "total_price",
          "linked_part"
        ],
        "properties": {
          "availability": {
            "$ref": "#/components/schemas/Availability"
          },
          "expected_unit_price": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              }
            ]
          },
          "packaging": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Packaging"
              }
            ]
          },
          "offer_created_at": {
            "$ref": "#/components/schemas/NaiveDateTime"
          },
          "offer_number": {
            "type": "string"
          },
          "quantity": {
            "$ref": "#/components/schemas/QuantityUnit"
          },
          "received_at": {
            "$ref": "#/components/schemas/NaiveDateTime"
          },
          "solution_config_id": {
            "type": "string",
            "format": "uuid",
            "description": "The associated solution configuration ID."
          },
          "supplier_part_number": {
            "type": "string",
            "description": "Extra note"
          },
          "total_price": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              }
            ]
          },
          "linked_part": {
            "$ref": "#/components/schemas/PurchaseOrderLinkedPart"
          },
          "ipns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PurchaseOrderEmail": {
        "type": "object",
        "title": "Email",
        "description": "Send a purchase order via an email",
        "required": [
          "type",
          "subject",
          "body"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Email"
            ]
          },
          "subject": {
            "type": "string"
          },
          "body": {
            "type": "string"
          }
        }
      },
      "PurchaseOrder": {
        "required": [
          "id",
          "approved_at",
          "line_items",
          "billing_address",
          "shipping_address"
        ],
        "type": "object",
        "title": "Purchase order",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Purchase order ID"
          },
          "approved_at": {
            "$ref": "#/components/schemas/NaiveDateTime"
          },
          "sent_at": {
            "$ref": "#/components/schemas/NaiveDateTime"
          },
          "billing_address": {
            "type": "string",
            "description": "Billing address to be used in the Purchase order"
          },
          "purchase_order_number": {
            "type": "string",
            "description": "Purchase order identifier"
          },
          "supplier_purchase_order_number": {
            "type": "string",
            "description": "Supplier purchase order identifier"
          },
          "line_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOrderLineItem"
            }
          },
          "expected_delivery_at": {
            "$ref": "#/components/schemas/DateTime"
          },
          "notes": {
            "type": "string",
            "description": "Extra notes"
          },
          "shipping_address": {
            "type": "string",
            "description": "Address for the purchase order to be sent"
          },
          "recipient": {
            "$ref": "#/components/schemas/PurchaseOrderRecipient"
          },
          "rfq_id": {
            "type": "string",
            "format": "uuid"
          },
          "sourcing_scenario_id": {
            "type": "string",
            "format": "uuid"
          },
          "shipping_costs": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              }
            ]
          }
        }
      },
      "CreatePurchaseOrdersRequest": {
        "type": "object",
        "title": "CreatePurchaseOrdersRequest",
        "required": [
          "purchase_order"
        ],
        "properties": {
          "purchase_order": {
            "$ref": "#/components/schemas/PendingPurchaseOrder"
          }
        }
      },
      "GetPurchaseOrderResponse": {
        "type": "object",
        "title": "GetPurchaseOrderResponse",
        "required": [
          "pending",
          "created"
        ],
        "properties": {
          "pending": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PendingPurchaseOrderDraft"
            }
          },
          "created": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOrder"
            }
          }
        }
      },
      "PendingPurchaseOrder": {
        "required": [
          "billing_address",
          "recipient",
          "line_items",
          "notes",
          "shipping_address",
          "dispatch_method"
        ],
        "type": "object",
        "title": "PendingPurchaseOrder",
        "properties": {
          "sender_id": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the User that will send the purchase order.\n\nTo obtain a user ID, use this command. You only need to do this once:\n```\ncurl 'https://api.luminovo.ai/users/organization' -H 'authorization: Bearer {{token}}'\n```\n\nNote: this endpoint is not part of the public API, so don't make assumptions about its structure.\n"
          },
          "approved_at": {
            "$ref": "#/components/schemas/NaiveDateTime"
          },
          "billing_address": {
            "type": "string",
            "description": "The billing address as a string. e.g. `\"123 Main St, San Francisco, CA 94105\"`"
          },
          "recipient": {
            "$ref": "#/components/schemas/PendingPurchaseOrderRecipient"
          },
          "purchase_order_number": {
            "type": "string",
            "description": "The ID of the purchase order inside luminovo. If not supplied, this value is autogenerated and has the format `LUMI-000123`."
          },
          "line_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PendingPurchaseOrderLineItem"
            }
          },
          "expected_delivery_at": {
            "$ref": "#/components/schemas/NaiveDateTime"
          },
          "notes": {
            "type": "string",
            "description": "Extra notes to be added to the purchase order. This are internal notes and will not be dispatched."
          },
          "shipping_address": {
            "type": "string",
            "description": "Address for the purchase order to be sent"
          },
          "shipping_costs": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              }
            ]
          },
          "supplier_purchase_order_number": {
            "type": "string",
            "description": "If known, enter the supplier purchase order number here. This can be added later."
          },
          "dispatch_method": {
            "type": "object",
            "description": "Use this to specify how the purchase order should be dispatched.\n",
            "oneOf": [
              {
                "type": "object",
                "title": "None",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "None"
                    ]
                  }
                }
              },
              {
                "$ref": "#/components/schemas/PurchaseOrderEmail"
              }
            ]
          }
        }
      },
      "PendingPurchaseOrderDraft": {
        "required": [
          "line_items",
          "recipient"
        ],
        "type": "object",
        "title": "Pending purchase order draft",
        "properties": {
          "line_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PendingPurchaseOrderLineItem"
            }
          },
          "recipient": {
            "$ref": "#/components/schemas/PendingPurchaseOrderRecipient"
          }
        }
      },
      "Components": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Component"
        }
      },
      "Component": {
        "required": [
          "internal_part_number",
          "component"
        ],
        "type": "object",
        "title": "Component",
        "properties": {
          "internal_part_number": {
            "$ref": "#/components/schemas/InternalPartNumber"
          },
          "description": {
            "type": "string",
            "examples": [
              "470R0_1%_TK100_250mW 1206"
            ],
            "description": "Describes this component. We try to extract the component's specification from this field as well if given."
          },
          "customer_part_numbers": {
            "type": "array",
            "description": "Your customers' numbers referring to this component.\n\nCPNs will be matched to existing customers by their number.\n\nIf a customer name is also given in the input data, the following cases are handled:\n1. if the customer does not yet exist, it will be created with the number and name provided.\n2. if the customer exists but has no name yet, it will be updated with the customer name from the input.\n3. if the customer exists and also has a name, the input customer name is ignored (i.e. the customer's name will not be updated with the input name).\n\nIf only a customer number is given in the input data and a customer by that number does not yet exist, the associated CPN is filtered out and will not be imported.\n",
            "items": {
              "$ref": "#/components/schemas/CPN"
            }
          },
          "is_restricted_to_customers": {
            "type": "boolean",
            "examples": [
              true
            ],
            "description": "Whether the component is restricted to the customers listed in\n`customer_part_numbers`. Defaults to `false`.\nIf a component is restricted, then it is only visible and available in projects for the listed customers.\nBeware: if you set it to `true` and `customer_part_numbers` is empty you will not be able to use this component in any projects.\n\nRestricting a component is only possible if the component is not currently used in a project by a customer that would violate the new restriction.\n\nI.e. setting this field to `true` for an existing component that is currently not restricted (i.e. `false`) is only allowed if the component is not used at all or only used by customers (defined by their numbers) listed in `customer_part_numbers`.\nIf the component is used in projects of customers that are not listed in `customer_part_numbers`, the entire update of\nthis component is ignored.\n\nSimilarly, for an existing restricted component, the set of customers (defined by their numbers) listed in `customer_part_numbers`\ncan only be reduced in a new update if the component is not used by the customer that is being removed from the list of restricted customers.\nIf the component is still in use in a project by a customer that is to be removed from the `customer_part_numbers` list,\nthe entire update of this component is ignored as well.\n"
          },
          "is_preferred": {
            "type": "boolean",
            "examples": [
              true
            ],
            "description": "Whether the component is preferred over other components.\nSetting this flag will add a star icon to the component for easier visibility.\nPreferred components may also get sorted to the top in various places of the product, for example in suggestions.\n"
          },
          "component": {
            "type": "object",
            "description": "The component data.\n\nCaution: it is only possible to change the type of the component (i.e. from `OffTheShelf` to `Custom` or vice versa) if\nthe component is not currently used as a part option in any assembly. Otherwise, the update of the affected component is skipped.\n\nIt is important to properly differentiate between `OffTheShelf` and `Custom` components in order to get good data quality in Luminovo.\n- `OffTheShelf` are all electonic components which have a MPN and can be purchased from the electronic parts suppliers.\n- `Custom` are all other non-electronic components, such as screws, packaging materials, lables, etc. Also, custom are all electronic components which are not standartized and don't have an MPN.\n",
            "discriminator": {
              "propertyName": "type"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/OffTheShelf"
              },
              {
                "$ref": "#/components/schemas/Custom"
              }
            ]
          },
          "origin": {
            "type": "string",
            "description": "The optional origin this component belongs to. This is useful if you want to upload components from different places separately. Subsequent uploads will only override the components in the same origin.\n\nCaution: If two or more distinct origins are specified in the same upload, the import is considered \"full\" and will remove all components not provided in the upload.\n\nCaution: Importing components without an origin works as before and is still expected to contain all components at once.\n"
          },
          "category": {
            "type": "string",
            "description": "The part category as specified in your system of record (e.g. in your ERP or PLM system). The part category can be used on the Luminovo platform to filter your components and parts.\n"
          }
        }
      },
      "OffTheShelf": {
        "type": "object",
        "title": "OffTheShelf",
        "description": "Off-the-shelf components refer to components that have parts (or a specification of them) that can be bought Off-the-shelf (and are not custom made to order).",
        "required": [
          "type",
          "data"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "OffTheShelf"
            ]
          },
          "data": {
            "type": "object",
            "properties": {
              "specification": {
                "$ref": "#/components/schemas/Specification"
              },
              "parts": {
                "type": "array",
                "description": "Defines an Off-the-shelf part that can be used for this component. Keep in mind that although no part's fields are required by the spec, either MPN or SPN (but NOT both) MUST be present. A part will be skipped in case it doesnt comply with this.",
                "items": {
                  "$ref": "#/components/schemas/Part"
                }
              }
            }
          }
        }
      },
      "Custom": {
        "type": "object",
        "title": "Custom",
        "description": "A custom component has a custom part that is specifically made for you (e.g. a Label) and cannot be bought Off-the-shelf.",
        "required": [
          "type",
          "data"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Custom"
            ]
          },
          "data": {
            "type": "object",
            "properties": {
              "custom_parts": {
                "type": "array",
                "description": "Each entry defines one custom-part specification of the component, identified by its drawing_number.",
                "items": {
                  "$ref": "#/components/schemas/ComponentCustomPart"
                }
              }
            }
          }
        }
      },
      "ComponentCustomPart": {
        "type": "object",
        "required": [
          "part_type"
        ],
        "properties": {
          "part_type": {
            "type": "string",
            "enum": [
              "Mechanical",
              "Plastic",
              "Cable",
              "Packaging",
              "Label",
              "Other"
            ],
            "examples": [
              "Label"
            ]
          },
          "description": {
            "type": "string",
            "examples": [
              "Custom part description"
            ]
          },
          "rohs_compliant": {
            "type": "string",
            "enum": [
              "NonCompliant",
              "Unknown",
              "NotRequired",
              "CompliantWithExemption",
              "Compliant"
            ],
            "examples": [
              "Compliant"
            ],
            "default": "Unknown"
          },
          "reach_compliant": {
            "type": "string",
            "enum": [
              "NonCompliant",
              "Unknown",
              "NotRequired",
              "CompliantWithExemption",
              "Compliant"
            ],
            "examples": [
              "Compliant"
            ],
            "default": "Unknown"
          },
          "drawing_number": {
            "type": "string",
            "description": "Identifies the custom-part specification within a component and should be unique within that component. Sending multiple custom_parts entries with the same drawing_number for one component is not supported: they are treated as a single specification and the duplicates may be skipped rather than imported. Do not use duplicate drawing_numbers to represent the same part offered by several manufacturers.",
            "examples": [
              "ABC-12345-XX-YY-ZZZ"
            ]
          }
        }
      },
      "Specification": {
        "type": "object",
        "description": "Defines the more abstract or technical properties, as well as possible compliance requirements of the component.",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "BoundToMPNs",
              "Generic"
            ],
            "description": "Defaults to `BoundToMPNs`.\n\n`BoundToMPNs`: this means that component specification is not generic, i.e. the selected parts were carefully selected and are binding.\n\n`Generic`: the component is generic. The component is mainly defined either via the\ntechnical properties in the function and form and fit, or the selected\nparts can be extended as long as the original intent is kept intact.\nOptionally restricts which manufacturers can be used. If none are\nrestricted, then all manufacturers are fine. This is also often referred\nto as manufacturer free.\n"
          },
          "form_and_fit": {
            "type": "object",
            "description": "Defines the package for the component. We will try to link a package to this component by `(name, mounting, number_of_pins)` triplet, and if no package would be found, we will try with `(empty name, mounting, number_of_pins)` triplet. The linked package will be used as data for manufacturing.",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "examples": [
                  "0603"
                ],
                "description": "The name of the package. E.g. `0603` We interpret names as imperial per default. If you want to refer to a metric packge the suffix `mm` must be appended. E.g. `0603mm`"
              },
              "mounting": {
                "type": "string",
                "examples": [
                  "SMT"
                ],
                "description": "The package's mounting. At the moment we only support `SMT`, `THT`, `Press Fit` and `Other` as values."
              },
              "number_of_pins": {
                "type": "integer",
                "examples": [
                  2
                ],
                "description": "The package's number of pins.\n",
                "minimum": 1
              }
            }
          },
          "function": {
            "type": "object",
            "description": "Defines the technical function of the component. At the moment we\nonly support defining the function for resistors and ceramic\ncapacitors.\nFor generic components, the function is required for automatic linking of parts.\nIf you do not specify a function, the linking of generic component will not be done automatically.\n\nFor numeric fields such as `resistance_ohms`, `capacitance_farads`, `power_rating_watts`, and `voltage_rating_volts`, the following metric prefixes are supported for deserialization:\n- `p` for pico (10^-12)\n- `n` for nano (10^-9)\n- `u`, `µ` for micro (10^-6)\n- `m` for milli (10^-3)\n- `k` for kilo (10^3)\n- `M` for mega (10^6)\n\nThese prefixes allow for concise representation of values. For example, \"10k\" will be interpreted as 10,000 (ten thousand).\n\nEnsure that values are non-negative, as negative values are not supported for these specifications. Additionally,\nranges (e.g., `+10%-20%`) are not accepted; only single values should be provided for fields like `tolerance_percent`.\nAdditionally, neither scientific (`5.31e5`) nor engineering (`531e3`) notations are supported.\n",
            "oneOf": [
              {
                "$ref": "#/components/schemas/Resistor"
              },
              {
                "$ref": "#/components/schemas/Capacitor"
              }
            ]
          },
          "approved_manufacturers": {
            "type": "array",
            "description": "**This data is not yet supported and is ignored during import.**\nList of manufacturers that are approved for this Generic component. If empty - all manufacturers are approved.\n",
            "items": {
              "type": "string",
              "examples": [
                "Yageo"
              ]
            }
          }
        }
      },
      "Resistor": {
        "type": "object",
        "description": "Defines the specifcation for a resistor.",
        "required": [
          "type",
          "data"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Resistor"
            ]
          },
          "data": {
            "type": "object",
            "properties": {
              "resistance_ohms": {
                "type": "string",
                "examples": [
                  "100"
                ]
              },
              "power_rating_watts": {
                "type": "string",
                "examples": [
                  "50"
                ]
              },
              "tolerance_percent": {
                "type": "string",
                "examples": [
                  "5"
                ]
              },
              "voltage_rating_volts": {
                "type": "string",
                "examples": [
                  "10"
                ]
              },
              "temperature_coefficient_ppmk": {
                "type": "string",
                "examples": [
                  "200"
                ]
              }
            }
          }
        }
      },
      "Capacitor": {
        "type": "object",
        "description": "Defines the specifcation for a capacitor. We only support ceramic capacitors at the moment.",
        "required": [
          "type",
          "data"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Capacitor"
            ]
          },
          "data": {
            "type": "object",
            "properties": {
              "capacitance_farads": {
                "type": "string",
                "examples": [
                  "1e-12"
                ]
              },
              "dielectric": {
                "type": "object",
                "description": "We only support ceramic dielectric materials at the moment.",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "Ceramic"
                    ]
                  },
                  "data": {
                    "type": "string",
                    "enum": [
                      "X8R",
                      "C0G",
                      "X7R",
                      "X5R",
                      "X8L",
                      "Y5V",
                      "X6S",
                      "Z5U",
                      "X7S",
                      "NP0",
                      "Y5U",
                      "C0H",
                      "Y5R",
                      "Y5P",
                      "Y5T",
                      "U2J",
                      "Z5V",
                      "Z5P",
                      "K4000",
                      "X6T",
                      "X7T",
                      "Z5F"
                    ]
                  }
                }
              },
              "tolerance_percent": {
                "type": "string",
                "examples": [
                  "5"
                ]
              },
              "voltage_rating_volts": {
                "type": "string",
                "examples": [
                  "10"
                ]
              }
            }
          }
        }
      },
      "Part": {
        "type": "object",
        "oneOf": [
          {
            "title": "MPN and manufacturer",
            "required": [
              "mpn"
            ],
            "properties": {
              "mpn": {
                "type": "string",
                "examples": [
                  "RC1206FR-10470RL"
                ],
                "description": "The manufacturer part number of the part. This will be taken together with the manufacturer to match your IPN to a part. The more accurate this information is the higher the likelihood we will be able to match the part."
              },
              "manufacturer": {
                "type": "string",
                "examples": [
                  "Yageo"
                ],
                "description": "The part's manufacturer."
              }
            }
          },
          {
            "title": "SPN and supplier",
            "required": [
              "supplier_part_number"
            ],
            "properties": {
              "supplier_part_number": {
                "type": "string",
                "examples": [
                  "13-RC1206FR-10470RLTR-ND"
                ],
                "description": "The supplier part number of the part."
              },
              "supplier": {
                "type": "string",
                "examples": [
                  "Arrow"
                ],
                "description": "The part's supplier."
              }
            }
          }
        ]
      },
      "CPN_2": {
        "required": [
          "customer"
        ],
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The customer's part number.",
            "examples": [
              "123-456"
            ]
          },
          "revision": {
            "type": "string",
            "description": "The revision of the customer's part number.",
            "examples": [
              "A"
            ]
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          }
        }
      },
      "CPN": {
        "required": [
          "value",
          "customer"
        ],
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The customer's part number.",
            "examples": [
              "123-456"
            ]
          },
          "revision": {
            "type": "string",
            "description": "The revision of the customer's part number.",
            "examples": [
              "A"
            ]
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          }
        }
      },
      "Customer": {
        "required": [
          "number"
        ],
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "description": "The number of the customer.",
            "examples": [
              "9987"
            ]
          },
          "name": {
            "type": "string",
            "description": "The name of the customer.",
            "examples": [
              "MyOEM"
            ]
          }
        }
      },
      "ImportUnitOfMeasurement": {
        "title": "Unit of measurement",
        "description": "The unit of measurement for the unit price, as well as the quantities provided in available_stock and total_stock. If you do not provide this field then it defaults to 1 piece. If the part in your inventory is better measured in a different unit, you can set the unit of measurement here. For example, if your IPN refers to a cable roll, where each roll has 30 meters of cable, you could provide a quantity of 30 and unit of \"Meter\" for the unit_of_measurement. If you then specify your available_stock as 10, we will know that you have 300 meters of cable available. Additionally, if in this case your provided unit price is 20 EUR, then that would mean 20 EUR per 30 meters of cable.",
        "allOf": [
          {
            "$ref": "#/components/schemas/ImportUnit"
          }
        ]
      },
      "OfferImportPart": {
        "title": "Part",
        "description": "Specification of the part that a given offer or inventory is for. This can be either:\n- An internal part number (IPN) to identify parts of an ERP component.\n  The IPN and attached component data needs to be uploaded separately through the components API for the offer or inventory to be accessible.\n- A manufacturer and manufacturer part number (MPN) to identify an off-the-shelf part.\n  If no match or no unique match can be found for a given manufacturer and MPN, an error is returned for this offer or inventory item.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/OfferImportInternalPartNumber"
          },
          {
            "$ref": "#/components/schemas/OfferImportManufacturerAndManufacturerPartNumber"
          }
        ]
      },
      "OfferImportInternalPartNumber": {
        "type": "object",
        "title": "Internal Part Number",
        "properties": {
          "internal_part_number": {
            "type": "string",
            "description": "The internal part number used to reference an article in your ERP, also sometimes referred to as article number.",
            "examples": [
              "1000-10"
            ]
          }
        },
        "required": [
          "internal_part_number"
        ]
      },
      "OfferImportManufacturerAndManufacturerPartNumber": {
        "type": "object",
        "title": "Manufacturer and Manufacturer Part Number",
        "properties": {
          "manufacturer": {
            "type": "string",
            "description": "The manufacturer of the part.",
            "examples": [
              "Panasonic"
            ]
          },
          "manufacturer_part_number": {
            "type": "string",
            "description": "The manufacturer part number (MPN) used to identify the part from the given manufacturer. This will be taken together with the manufacturer to match your offer or inventory to a part. The more accurate this information is the higher the likelihood we will be able to match the part.",
            "examples": [
              "ERJ-B2BF1R1V"
            ]
          }
        },
        "required": [
          "manufacturer",
          "manufacturer_part_number"
        ]
      },
      "OffersImport": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/OfferImport"
        },
        "description": "Offers import"
      },
      "OfferImport": {
        "type": "object",
        "title": "Offer",
        "description": "Offer import",
        "properties": {
          "part": {
            "$ref": "#/components/schemas/OfferImportPart"
          },
          "supplier": {
            "$ref": "#/components/schemas/OfferImportSupplier"
          },
          "customer": {
            "description": "This field can be given if an offer or inventory is restricted to a certain customer. If a customer name is also given in the input data, the following cases are handled:\n1. If the customer can be found by number, the customer name will not be updated. 2. If the customer cannot be found by number but it can be found by name, the customer number will be updated to the number provided. 3. If the customer does not yet exist, it will be created only if the number and name are provided.",
            "allOf": [
              {
                "$ref": "#/components/schemas/Customer"
              }
            ]
          },
          "price_type": {
            "$ref": "#/components/schemas/OfferImportOfferPriceType"
          },
          "prices": {
            "description": "A list of price breaks for a given offer or inventory. At least one price break needs to be given.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferImportPriceBreak"
            }
          },
          "availability": {
            "$ref": "#/components/schemas/OfferImportAvailability"
          },
          "unit_of_measurement": {
            "$ref": "#/components/schemas/ImportUnitOfMeasurement"
          },
          "packaging": {
            "title": "Packaging",
            "description": "The packaging for a part in an offer or inventory.",
            "allOf": [
              {
                "$ref": "#/components/schemas/Packaging"
              }
            ]
          },
          "valid_from": {
            "description": "A date from which the given offer is valid.",
            "allOf": [
              {
                "$ref": "#/components/schemas/Date"
              }
            ]
          },
          "valid_until": {
            "description": "A date until which the given offer is valid.",
            "allOf": [
              {
                "$ref": "#/components/schemas/Date"
              }
            ]
          },
          "one_time_costs": {
            "description": "One-time costs for the offer, e.g. setup costs. This is optional and can be used to provide additional costs that are not covered by the unit price.",
            "allOf": [
              {
                "$ref": "#/components/schemas/OfferImportOneTimeCost"
              }
            ]
          },
          "notes": {
            "description": "Notes for the offer.",
            "type": "string"
          },
          "import_context": {
            "description": "Optional name that groups these offers under an offer import context, making it easy to find offers from the same import later. If no context with this name exists yet, one is created automatically with `ApiIntegration` origin; a name that already exists reuses that context. Contexts can be listed and managed via the Offer Import Context endpoints.",
            "type": "string"
          }
        },
        "required": [
          "part",
          "supplier",
          "prices",
          "availability"
        ]
      },
      "OfferImportOfferPriceType": {
        "title": "Price type",
        "description": "The price type of the offer.\nThis field is optional. If not given, then\nin the external supplier case, a list price type is used, and\nin the internal supplier case, a standard price type is used.\n\n**Price Type Meanings:**\n- **List**: Standard list price from the supplier (usually the highest price)\n- **Contract**: Negotiated contract price (usually better than list price)\n- **Quote**: Specific quote price for a particular order or customer\n- **Purchase**: Purchase price (what you actually paid)\n- **Standard**: Standard pricing (default pricing)\n- **CustomerNegotiated**: Price specifically negotiated with a customer\n- **TargetPrice**: Target price to beat or achieve\n",
        "type": "string",
        "enum": [
          "List",
          "Contract",
          "Quote",
          "Purchase",
          "Standard",
          "CustomerNegotiated",
          "TargetPrice"
        ]
      },
      "OfferImportPriceBreak": {
        "title": "Price break",
        "type": "object",
        "properties": {
          "unit_price": {
            "description": "Price per unit",
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              }
            ]
          },
          "moq": {
            "description": "The minimum order quantity (MOQ) for this price break, giving the minimum amount of units that need to be purchased. If not given, 1 is used.",
            "type": "number",
            "format": "double",
            "minimum": 0,
            "exclusiveMinimum": 0
          },
          "mpq": {
            "description": "The minimum packaging quantity (MPQ) for this price break, giving the number of multiples In which units can be purchased. If not given, 1 is used.",
            "type": "number",
            "format": "double",
            "minimum": 0,
            "exclusiveMinimum": 0
          }
        },
        "required": [
          "unit_price"
        ]
      },
      "OfferImportOneTimeCost": {
        "title": "Cost",
        "description": "A cost value with description.",
        "type": "object",
        "properties": {
          "price": {
            "description": "The cost value.",
            "allOf": [
              {
                "$ref": "#/components/schemas/LegacyMonetaryValue"
              }
            ]
          },
          "description": {
            "description": "A human-readable description of the cost.",
            "type": "string"
          }
        }
      },
      "OfferImportAvailability": {
        "title": "Availability",
        "description": "The availability of an offer or inventory, giving stock values and lead times.",
        "type": "object",
        "properties": {
          "available_stock": {
            "description": "The freely available stock in your inventory or at the supplier, that can be used for new projects. This is what will be used for generating solutions in Luminovo.",
            "type": "number",
            "format": "double",
            "minimum": 0
          },
          "total_stock": {
            "description": "The total stock in your inventory (including stock already assigned to a different project). This won't be used for generating solutions, but only displayed as an additional info in Luminovo. This value is not used for offers from suppliers.",
            "type": "number",
            "format": "double",
            "minimum": 0
          },
          "lead_time": {
            "description": "This can be given to provide:\n- For inventory offers, a standard lead time (in days) that it takes to get new parts in stock in your inventory.\n- For offers from suppliers, a factory lead time (in days) that it takes for the supplier to replenish their stock\n  from the manufacturer.",
            "type": "integer",
            "minimum": 0
          },
          "on_order": {
            "description": "A list of on-order items, which each give a quantity of units that are on order for a given offer or inventory, with an optional arrival date",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferImportOnOrder"
            }
          }
        },
        "required": [
          "available_stock"
        ]
      },
      "OfferImportOnOrder": {
        "title": "OnOrder",
        "type": "object",
        "properties": {
          "quantity": {
            "type": "number",
            "minimum": 0
          },
          "date": {
            "$ref": "#/components/schemas/Date"
          }
        },
        "required": [
          "quantity"
        ]
      },
      "OfferImportSupplier": {
        "title": "Supplier",
        "description": "The supplier of an offer, which can be either internal for an inventory offer, or external for an offer from a supplier. The location of the offer may be optionally given either through an inventory site or a stock location of a supplier.",
        "type": "object",
        "properties": {
          "type": {
            "description": "The type of the supplier:\n- `Internal`: for inventory offers\n- `External`: for offers from an external supplier",
            "type": "string",
            "enum": [
              "Internal",
              "External"
            ]
          },
          "supplier": {
            "type": "string",
            "description": "The name of either the inventory site or the external supplier that offers this part. For external suppliers, this is required if `supplier_number` is not given. If both are provided, `supplier_number` will be prioritized. For internal suppliers, a default inventory site is used if neither `supplier` nor `supplier_number` are given.",
            "examples": [
              "Mouser"
            ]
          },
          "stock_location": {
            "$ref": "#/components/schemas/ThreeLetterStockLocation",
            "description": "The stock location of the external supplier identified by `supplier_number` or `supplier`. It is only required to provide `stock_location` when more than one stock location exists for the supplier, so that the system knows which one to use."
          },
          "supplier_number": {
            "type": "string",
            "description": "The supplier number can be used to identify an inventory site or an external supplier by an internal number. For external suppliers, this is required if `supplier` is not given."
          },
          "supplier_part_number": {
            "type": "string",
            "description": "The number used by the supplier as the stock keeping unit (SKU) for this part.",
            "examples": [
              "667-ERJ-B2BF1R1V"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "PostOffersImportResponse": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "part": {
              "$ref": "#/components/schemas/OfferImportPart"
            },
            "key": {
              "description": "Optional key that can be used to track which request item corresponds to which response item. Echoed back from the request.\n",
              "type": "object"
            },
            "status": {
              "description": "Response status value. 200 for successfully created or updated offer or inventory items, 400 for bad requests, 422 for validation errors.\n",
              "type": "integer",
              "enum": [
                200,
                400,
                422
              ]
            },
            "description": {
              "description": "Human readable status description containing additional context information about the status, e.g. failure description.\n",
              "type": "string"
            },
            "error_code": {
              "description": "Machine-readable error code for categorizing the type of error. Only present when status is not 200.\n",
              "type": "string"
            }
          },
          "required": [
            "status",
            "description"
          ]
        }
      },
      "ThreeLetterStockLocation": {
        "title": "Stock location",
        "description": "The stock location for this offer from an external supplier. If not given, just the supplier name with an unknown stock location is used. The stock location can be specified on a country level through ISO 3166-1 alpha-3 codes or on a region level through English region names. The location is not used for internal suppliers, this should be configured through Luminovo.",
        "type": "string",
        "examples": [
          "USA"
        ],
        "enum": [
          "World",
          "Africa",
          "Northern Africa",
          "Sub-Saharan Africa",
          "Western Africa",
          "Eastern Africa",
          "Middle Africa",
          "Southern Africa",
          "Americas",
          "Northern America",
          "Latin America and the Caribbean",
          "South America",
          "Central America",
          "Caribbean",
          "Asia",
          "Eastern Asia",
          "Southern Asia",
          "South-eastern Asia",
          "Central Asia",
          "Western Asia",
          "Europe",
          "Southern Europe",
          "Eastern Europe",
          "Northern Europe",
          "Channel Islands",
          "Western Europe",
          "Oceania",
          "Australia and New Zealand",
          "Melanesia",
          "Micronesia",
          "Polynesia",
          "ABW",
          "AFG",
          "AGO",
          "AIA",
          "ALA",
          "ALB",
          "AND",
          "ARE",
          "ARG",
          "ARM",
          "ASM",
          "ATA",
          "ATF",
          "ATG",
          "AUS",
          "AUT",
          "AZE",
          "BDI",
          "BEL",
          "BEN",
          "BES",
          "BFA",
          "BGD",
          "BGR",
          "BHR",
          "BHS",
          "BIH",
          "BLM",
          "BLR",
          "BLZ",
          "BMU",
          "BOL",
          "BRA",
          "BRB",
          "BRN",
          "BTN",
          "BVT",
          "BWA",
          "CAF",
          "CAN",
          "CCK",
          "CHE",
          "CHL",
          "CHN",
          "CIV",
          "CMR",
          "COD",
          "COG",
          "COK",
          "COL",
          "COM",
          "CPV",
          "CRI",
          "CUB",
          "CUW",
          "CXR",
          "CYM",
          "CYP",
          "CZE",
          "DEU",
          "DJI",
          "DMA",
          "DNK",
          "DOM",
          "DZA",
          "ECU",
          "EGY",
          "ERI",
          "ESH",
          "ESP",
          "EST",
          "ETH",
          "FIN",
          "FJI",
          "FLK",
          "FRA",
          "FRO",
          "FSM",
          "GAB",
          "GBR",
          "GEO",
          "GGY",
          "GHA",
          "GIB",
          "GIN",
          "GLP",
          "GMB",
          "GNB",
          "GNQ",
          "GRC",
          "GRD",
          "GRL",
          "GTM",
          "GUF",
          "GUM",
          "GUY",
          "HKG",
          "HMD",
          "HND",
          "HRV",
          "HTI",
          "HUN",
          "IDN",
          "IMN",
          "IND",
          "IOT",
          "IRL",
          "IRN",
          "IRQ",
          "ISL",
          "ISR",
          "ITA",
          "JAM",
          "JEY",
          "JOR",
          "JPN",
          "KAZ",
          "KEN",
          "KGZ",
          "KHM",
          "KIR",
          "KNA",
          "KOR",
          "KWT",
          "LAO",
          "LBN",
          "LBR",
          "LBY",
          "LCA",
          "LIE",
          "LKA",
          "LSO",
          "LTU",
          "LUX",
          "LVA",
          "MAC",
          "MAF",
          "MAR",
          "MCO",
          "MDA",
          "MDG",
          "MDV",
          "MEX",
          "MHL",
          "MKD",
          "MLI",
          "MLT",
          "MMR",
          "MNE",
          "MNG",
          "MNP",
          "MOZ",
          "MRT",
          "MSR",
          "MTQ",
          "MUS",
          "MWI",
          "MYS",
          "MYT",
          "NAM",
          "NCL",
          "NER",
          "NFK",
          "NGA",
          "NIC",
          "NIU",
          "NLD",
          "NOR",
          "NPL",
          "NRU",
          "NZL",
          "OMN",
          "PAK",
          "PAN",
          "PCN",
          "PER",
          "PHL",
          "PLW",
          "PNG",
          "POL",
          "PRI",
          "PRK",
          "PRT",
          "PRY",
          "PSE",
          "PYF",
          "QAT",
          "REU",
          "ROU",
          "RUS",
          "RWA",
          "Sark",
          "SAU",
          "SDN",
          "SEN",
          "SGP",
          "SGS",
          "SHN",
          "SJM",
          "SLB",
          "SLE",
          "SLV",
          "SMR",
          "SOM",
          "SPM",
          "SRB",
          "SSD",
          "STP",
          "SUR",
          "SVK",
          "SVN",
          "SWE",
          "SWZ",
          "SXM",
          "SYC",
          "SYR",
          "TCA",
          "TCD",
          "TGO",
          "THA",
          "TJK",
          "TKL",
          "TKM",
          "TLS",
          "TON",
          "TTO",
          "TUN",
          "TUR",
          "TUV",
          "TWN",
          "TZA",
          "UGA",
          "UKR",
          "UMI",
          "URY",
          "USA",
          "UZB",
          "VAT",
          "VCT",
          "VEN",
          "VGB",
          "VIR",
          "VNM",
          "VUT",
          "WLF",
          "WSM",
          "YEM",
          "ZAF",
          "ZMB",
          "ZWE"
        ]
      },
      "PartOption": {
        "required": [
          "internal_part_number"
        ],
        "type": "object",
        "title": "Part option",
        "properties": {
          "internal_part_number": {
            "$ref": "#/components/schemas/InternalPartNumber"
          }
        }
      },
      "BomItem": {
        "required": [
          "designators",
          "quantity",
          "unit"
        ],
        "type": "object",
        "title": "BOM item",
        "properties": {
          "designators": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "uniqueItems": true,
            "description": "The designators for the BOM item. Designators must be unique across the entire assembly. At least one designator must be given.",
            "examples": [
              [
                "R1",
                "R2"
              ]
            ]
          },
          "quantity": {
            "type": "number",
            "description": "The quantity per designator. I.e. the total quantity of the BOM item is `quantity` x `len(designators)`. Can be a fractional value. Can't be zero. Can't be negative. If you want to specify that this BOM item is not needed, please set do_not_place.",
            "examples": [
              1
            ]
          },
          "unit": {
            "type": "string",
            "enum": [
              "Pieces",
              "Kg",
              "Meters",
              "Liters"
            ],
            "examples": [
              "Pieces"
            ],
            "description": "The unit the quantity of the BOM item is measured in."
          },
          "notes": {
            "type": "string",
            "examples": [
              "The description of the BOM item"
            ],
            "description": "Notes for the BOM item."
          },
          "do_not_place": {
            "type": "boolean",
            "examples": [
              false
            ],
            "default": false,
            "description": "A flag to define if the BOM item should not be placed on the assembly."
          },
          "sourced_by": {
            "type": "string",
            "enum": [
              "internal",
              "external"
            ],
            "default": "internal",
            "examples": [
              "internal"
            ],
            "description": "Defines the consignment, i.e. if the BOM item should be sourced by an\ninternal or external party (e.g. a customer or EMS).\n"
          },
          "part_options": {
            "type": "array",
            "description": "A part option defines the components that may be used for the BOM item. All part options\nare considered equal alternatives of one another without any preference. All IPNs in part options of a given BomItem should be of either Custom xor OffTheShelf type, mixing both is not allowed.\n",
            "items": {
              "$ref": "#/components/schemas/PartOption"
            }
          }
        }
      },
      "Subassembly": {
        "required": [
          "internal_part_number",
          "quantity"
        ],
        "type": "object",
        "title": "Subassembly",
        "properties": {
          "internal_part_number": {
            "$ref": "#/components/schemas/InternalPartNumber"
          },
          "quantity": {
            "type": "integer",
            "description": "How often the subassembly is required in the assembly.",
            "examples": [
              1
            ]
          }
        }
      },
      "AssemblyBom": {
        "required": [
          "internal_part_number",
          "type"
        ],
        "type": "object",
        "title": "Assembly",
        "properties": {
          "internal_part_number": {
            "$ref": "#/components/schemas/InternalPartNumber"
          },
          "customer_part_numbers": {
            "type": "array",
            "description": "Your customers' numbers referring to this assembly.\n\nDue to technical restrictions only the first element of this array is considered.\nThat is, only the customer that is named first in this array will be associated\nwith the assembly in the system.\n\nThe customer can also be specified on its own, a customer part number (i.e. the `value` field)\nis not required. If the `revision` field is provided the `value` field must also be populated.\n\nCPNs will be matched to existing customers by their number.\n\nIf a customer name is also given in the input data, the following cases are handled:\n1. if the customer does not yet exist, it will be created with the number and name provided.\n2. if the customer exists but has no name yet, it will be updated with the customer name from the input.\n3. if the customer exists and also has a name, the input customer name is ignored (i.e. the customer's name will not be updated with the input name).\n\nIf only a customer number is given in the input data and a customer by that number does not yet exist, the associated CPN is filtered out and will not be imported.\n",
            "items": {
              "$ref": "#/components/schemas/CPN_2"
            }
          },
          "name": {
            "type": "string",
            "examples": [
              "SUB1500"
            ],
            "description": "The name of the assembly.\nDefaults to `internal_part_number.value - internal_part_number.revision`.\n"
          },
          "notes": {
            "type": "string",
            "examples": [
              "Some notes"
            ],
            "description": "Notes for the assembly."
          },
          "type": {
            "type": "string",
            "enum": [
              "PCBA",
              "Cable",
              "Box build",
              "System"
            ],
            "examples": [
              "PCBA"
            ],
            "description": "The type of assembly."
          },
          "industry": {
            "type": "string",
            "enum": [
              "Auto",
              "Medical",
              "Defense",
              "Aero",
              "Rail",
              "Industrial",
              "Construction",
              "Consumer",
              "Other"
            ],
            "examples": [
              "Industrial"
            ],
            "default": "Other",
            "description": "The industry this assembly belongs to, defaults to `Other`."
          },
          "subassemblies": {
            "type": "array",
            "description": "A list of subassemblies referenced by `(internal_part_number.value, internal_part_number.revision)`.\n\nA subassembly is a nested assembly. The same subassemblies may be referenced in multiple\nassemblies. Subassemblies can either be included in the same import request, or reference\nexisting assemblies that were imported via this endpoint earlier.\n\nThis allows splitting large imports into multiple smaller requests by first importing\nleaf assemblies, then importing parent assemblies that reference them.\n\nNote: Only assemblies created via this API endpoint can be referenced across imports.\nManually-created assemblies cannot be used as subassemblies in cross-import references.\n\nNo circular references are permitted. That is, an assembly may not be referenced in any of\nits own subassemblies, including across multiple imports.\n",
            "items": {
              "$ref": "#/components/schemas/Subassembly"
            }
          },
          "bom_items": {
            "type": "array",
            "description": "A list of BOM items.\nA BOM item defines the common characteristics of one or more design items (identified by\ndesignators).\n",
            "items": {
              "$ref": "#/components/schemas/BomItem"
            }
          }
        }
      },
      "Assemblies": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/AssemblyBom"
        }
      },
      "InternalPartNumber": {
        "type": "object",
        "required": [
          "value"
        ],
        "properties": {
          "value": {
            "type": "string",
            "description": "The internal part number value used to reference an assembly in the ERP system, also sometimes referred to as article number. The tuple of (`value`, `revision`) must be unique across all imported assemblies and components.",
            "examples": [
              "1000-0"
            ]
          },
          "revision": {
            "type": "string",
            "description": "The optional revision for an internal part number. Revisions must be unique for the same `value`.",
            "examples": [
              "rev1"
            ]
          }
        }
      },
      "AssemblyBomResponse": {
        "type": "object",
        "properties": {
          "internal_part_number": {
            "$ref": "#/components/schemas/InternalPartNumber"
          },
          "description": {
            "description": "Human readable status description and containing additional context information about failures etc.\n",
            "type": "string",
            "examples": [
              "Human readable status description and containing additional\ncontext information about failures etc.\n"
            ]
          },
          "status": {
            "oneOf": [
              {
                "type": "string",
                "title": "Success",
                "enum": [
                  "Success"
                ],
                "description": "The assembly was successfully imported."
              },
              {
                "type": "string",
                "title": "MissingComponents",
                "enum": [
                  "MissingComponents"
                ],
                "description": "The assembly has not been imported because some components referenced as part\noptions are missing.\n\nThat is, they have not yet been uploaded via the components API.\nOnce they have been uploaded via the components API, the assembly import should\nbe performed again so that the previously missing components are successfully referenced.\n"
              },
              {
                "type": "string",
                "title": "MissingSubassemblies",
                "enum": [
                  "MissingSubassemblies"
                ],
                "description": "The assembly has not been imported because some assemblies listed as\nsubassemblies are unknown. They must either be included in the same request,\nor have been previously imported via this endpoint.\n"
              },
              {
                "type": "string",
                "title": "Duplicate",
                "enum": [
                  "Duplicate"
                ],
                "description": "The assembly has not been imported because an assembly with the same\n`internal_part_number` and `revision` was included in the request.\n"
              },
              {
                "type": "string",
                "title": "CicularReference",
                "enum": [
                  "CicularReference"
                ],
                "description": "The assembly has not been imported because of a circular reference.\nThat is, the same assembly is referenced as a subassembly.\n"
              },
              {
                "type": "string",
                "title": "CircularReferenceWithExistingAssembly",
                "enum": [
                  "CircularReferenceWithExistingAssembly"
                ],
                "description": "The assembly has not been imported because it would create a circular reference\nwith an existing assembly. This assembly is already a descendant of an assembly\nit is trying to reference as a subassembly.\n"
              },
              {
                "type": "string",
                "title": "ExistsInInvalidPath",
                "enum": [
                  "ExistsInInvalidPath"
                ],
                "description": "The assembly is valid but was not imported because it exists in an invalid path.\nEither all of its parents or subassemblies are invalid.\n"
              },
              {
                "type": "string",
                "title": "DuplicateDesignators",
                "enum": [
                  "DuplicateDesignators"
                ],
                "description": "The assembly has not been imported because it contains duplicate designators.\n"
              },
              {
                "type": "string",
                "title": "BomItemsWithNoDesignators",
                "enum": [
                  "BomItemsWithNoDesignators"
                ],
                "description": "The assembly has not been imported because it contains bom items with no designators.\n"
              },
              {
                "type": "string",
                "title": "PartSpecificationTypeContradiction",
                "enum": [
                  "PartSpecificationTypeContradiction"
                ],
                "description": "The assembly has not been imported because because some of the designators use OffTheShelf and Custom components simultaneously. That is not allowed.\n"
              },
              {
                "type": "string",
                "title": "IpnBoundToManualAssembly",
                "enum": [
                  "IpnBoundToManualAssembly"
                ],
                "description": "The assembly has not been imported because a manually created assembly with the same internal_part_number and revision already exists.\n"
              }
            ]
          }
        }
      },
      "AssemblyImportResponse": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/AssemblyBomResponse"
        }
      },
      "IpnIdParts": {
        "type": "object",
        "required": [
          "value"
        ],
        "properties": {
          "value": {
            "type": "string",
            "description": "The internal part number (also known as IPN)."
          },
          "revision": {
            "type": "string",
            "description": "The revision of the internal part number."
          }
        }
      },
      "ApiErrorResponse_FindOffersEmptyFilterErrorData_FindOffersEmptyFilter_UNPROCESSABLE_ENTITY": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.find_offers.empty_filter`",
            "example": "offer.find_offers.empty_filter"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "422 Unprocessable Entity\n[[RFC9110, Section 15.5.21](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21)]",
            "example": 422,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": "object",
            "required": [
              "filter"
            ],
            "properties": {
              "filter": {
                "type": "string",
                "description": "The name of the field for the filter that is empty.",
                "example": "part_ids"
              }
            }
          }
        }
      },
      "ApiErrorResponse_FindOffersFilterInputTooLargeErrorData_FindOffersFilterInputTooLarge_UNPROCESSABLE_ENTITY": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.find_offers.filter_input_too_large`",
            "example": "offer.find_offers.filter_input_too_large"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "422 Unprocessable Entity\n[[RFC9110, Section 15.5.21](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21)]",
            "example": 422,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": "object",
            "required": [
              "filter",
              "input_size",
              "max_size"
            ],
            "properties": {
              "filter": {
                "type": "string",
                "description": "The name of the field for the filter where\nthe number of input elements exceeds the maximum size.",
                "example": "part_ids"
              },
              "input_size": {
                "type": "integer",
                "format": "int64",
                "description": "The number of input elements in the filter.",
                "example": 101,
                "minimum": 0
              },
              "max_size": {
                "type": "integer",
                "format": "int64",
                "description": "The maximum number of input elements allowed in the filter.",
                "example": 100,
                "minimum": 0
              }
            }
          }
        }
      },
      "ApiErrorResponse_FindOffersPaginationLimitOutOfBoundsErrorData_FindOffersPaginationLimitOutOfBounds_UNPROCESSABLE_ENTITY": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.find_offers.pagination_limit_out_of_bounds`",
            "example": "offer.find_offers.pagination_limit_out_of_bounds"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "422 Unprocessable Entity\n[[RFC9110, Section 15.5.21](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21)]",
            "example": 422,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": "object",
            "required": [
              "input_limit",
              "min_limit",
              "max_limit"
            ],
            "properties": {
              "input_limit": {
                "type": "integer",
                "format": "int64",
                "description": "The number in the input pagination limit.",
                "example": 1001,
                "minimum": 0
              },
              "min_limit": {
                "type": "integer",
                "format": "int64",
                "description": "The minimum number allowed for the pagination limit.",
                "example": 1,
                "minimum": 0
              },
              "max_limit": {
                "type": "integer",
                "format": "int64",
                "description": "The maximum number allowed for the pagination limit.",
                "example": 1000,
                "minimum": 0
              }
            }
          }
        }
      },
      "ApiErrorResponse_NoErrorData_FindOffersEmptyRequest_UNPROCESSABLE_ENTITY": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.find_offers.empty_request`",
            "example": "offer.find_offers.empty_request"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "422 Unprocessable Entity\n[[RFC9110, Section 15.5.21](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21)]",
            "example": 422,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": [
              "object",
              "null"
            ],
            "description": "No additional data. This field is `null` for these errors."
          }
        }
      },
      "ApiErrorResponse_NoErrorData_FindOffersInvalidRequest_BAD_REQUEST": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.find_offers.invalid_request`",
            "example": "offer.find_offers.invalid_request"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
            "example": 400,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": [
              "object",
              "null"
            ],
            "description": "No additional data. This field is `null` for these errors."
          }
        }
      },
      "ApiErrorResponse_NoErrorData_PcbSpecificationExtractionFailed_INTERNAL_SERVER_ERROR": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `pcb_specification.extraction_failed`",
            "example": "pcb_specification.extraction_failed"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "500 Internal Server Error\n[[RFC9110, Section 15.6.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1)]",
            "example": 500,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": [
              "object",
              "null"
            ],
            "description": "No additional data. This field is `null` for these errors."
          }
        }
      },
      "ApiErrorResponse_NoErrorData_PcbSpecificationExtractionUnavailable_SERVICE_UNAVAILABLE": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `pcb_specification.extraction_unavailable`",
            "example": "pcb_specification.extraction_unavailable"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "503 Service Unavailable\n[[RFC9110, Section 15.6.4](https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.4)]",
            "example": 503,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": [
              "object",
              "null"
            ],
            "description": "No additional data. This field is `null` for these errors."
          }
        }
      },
      "ApiErrorResponse_NoErrorData_PcbSpecificationFileRequired_BAD_REQUEST": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `pcb_specification.file_required`",
            "example": "pcb_specification.file_required"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
            "example": 400,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": [
              "object",
              "null"
            ],
            "description": "No additional data. This field is `null` for these errors."
          }
        }
      },
      "ApiErrorResponse_NoErrorData_SourcingScenarioNotFound_NOT_FOUND": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `sourcing_scenario.not_found`",
            "example": "sourcing_scenario.not_found"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "404 Not Found\n[[RFC9110, Section 15.5.5](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5)]",
            "example": 404,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": [
              "object",
              "null"
            ],
            "description": "No additional data. This field is `null` for these errors."
          }
        }
      },
      "ApiErrorResponse_NoErrorData_UnknownError_BAD_REQUEST": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `unknown`",
            "example": "unknown"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "400 Bad Request\n[[RFC9110, Section 15.5.1](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1)]",
            "example": 400,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": [
              "object",
              "null"
            ],
            "description": "No additional data. This field is `null` for these errors."
          }
        }
      },
      "ApiErrorResponse_OfferDeleteConflictOnPublicOfferErrorData_OfferCannotDeletePublicOffTheShelfOffer_CONFLICT": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.cannot_delete_public_off_the_shelf_offers`",
            "example": "offer.cannot_delete_public_off_the_shelf_offers"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "409 Conflict\n[[RFC9110, Section 15.5.10](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10)]",
            "example": 409,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": "object",
            "description": "Data to identify the public offers that cause the conflict error.",
            "required": [
              "public_off_the_shelf_offer_ids"
            ],
            "properties": {
              "public_off_the_shelf_offer_ids": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The set of public off-the-shelf offer IDs that cause conflicts.\nPublic offers cannot be deleted.",
                "example": [
                  "PublicOffTheShelf:97841b03-3f6f-447d-b9b7-c0ddc7c8b1f5"
                ]
              }
            }
          }
        }
      },
      "ApiErrorResponse_OfferDeleteConflictOnReferencedOfferErrorData_OfferCannotDeleteReferencedOffer_CONFLICT": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.cannot_delete_referenced_offers`",
            "example": "offer.cannot_delete_referenced_offers"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "409 Conflict\n[[RFC9110, Section 15.5.10](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10)]",
            "example": 409,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": "object",
            "description": "Data to identify the referenced offers that cause the conflict error.",
            "required": [
              "referenced_offer_ids"
            ],
            "properties": {
              "referenced_offer_ids": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The set of offer IDs that cause conflicts because they are\nreferenced as a selected solution in a sourcing line item.\nThese can only be deleted if `force_delete` is set to `true`.",
                "example": [
                  "PrivateOffTheShelf:a64151a2-c514-4ca0-b4a2-9a84021ec0f1"
                ]
              }
            }
          }
        }
      },
      "ApiErrorResponse_OfferDeletePayloadTooLargeErrorData_OfferDeletePayloadTooLarge_PAYLOAD_TOO_LARGE": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.delete.payload_too_large`",
            "example": "offer.delete.payload_too_large"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "413 Payload Too Large\n[[RFC9110, Section 15.5.14](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.14)]",
            "example": 413,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": "object",
            "description": "Empty object. No data is returned for this error type."
          }
        }
      },
      "ApiErrorResponse_OfferNotFoundErrorData_OfferNotFound_NOT_FOUND": {
        "type": "object",
        "description": "An API error response for a non-success HTTP status code.",
        "required": [
          "code",
          "title",
          "status",
          "detail",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Error code: `offer.not_found`",
            "example": "offer.not_found"
          },
          "title": {
            "type": "string",
            "description": "A human-readable title of the HTTP error status code."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "description": "404 Not Found\n[[RFC9110, Section 15.5.5](https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5)]",
            "example": 404,
            "minimum": 0
          },
          "detail": {
            "type": "string",
            "description": "Additional human-readable information about the error.\nThe representation may change without notice to the user,\nso the field should not be used for automatically extracting data."
          },
          "data": {
            "type": "object",
            "description": "Empty object. No data is returned for this error type."
          }
        }
      },
      "AssemblyAcceptHeader": {
        "type": "string",
        "title": "AssemblyAcceptHeader",
        "enum": [
          "application/api.luminovo.assembly-v1+json"
        ]
      },
      "AssemblyCost": {
        "type": "object",
        "description": "Assembly-level cost object.\n\nUnit prices are for a single unit of the assembly. Total prices are for\nthe total demanded quantity of the assembly.\n\nAll prices always include the cost of the extra material purchased to\ncover expected scrap. \"Excess\" is additional material bought beyond the\nrequired quantity, e.g. forced by supplier minimum order or packaging\nquantities: the `…excluding_excess` prices cover only the required\nquantity, the `…including_excess` prices cover the quantity actually\nbought.\n\nInvariant: `total_price_including_excess = total_price_excluding_excess +\nexcess_material_cost`.",
        "required": [
          "total_price_excluding_excess",
          "unit_price_excluding_excess",
          "total_price_including_excess",
          "unit_price_including_excess",
          "excess_material_cost",
          "scrap_cost",
          "one_time_cost",
          "tco_cost"
        ],
        "properties": {
          "total_price_excluding_excess": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "The cost of the material quantity needed (including material to cover\nexpected scrap, and including one-time and TCO costs, but excluding\nexcess material)."
              }
            ]
          },
          "unit_price_excluding_excess": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "`total_price_excluding_excess` per unit of this assembly."
              }
            ]
          },
          "total_price_including_excess": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "The cost of the material quantity to be bought: the needed quantity\nplus excess material."
              }
            ]
          },
          "unit_price_including_excess": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "`total_price_including_excess` per unit of this assembly."
              }
            ]
          },
          "excess_material_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "The cost of the excess material alone: `total_price_including_excess -\ntotal_price_excluding_excess`."
              }
            ]
          },
          "scrap_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "The cost of the extra material purchased to cover expected scrap.\nAlready included in all total and unit prices; this field only breaks\nit out."
              }
            ]
          },
          "one_time_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "One-time costs (e.g. setup or tooling costs from offers), independent\nof the demanded quantity. Already included in the totals; this field\nonly breaks them out."
              }
            ]
          },
          "tco_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "Total cost of ownership costs (e.g. packaging, shipping, customs).\nAlready included in the totals; this field only breaks them out."
              }
            ]
          }
        }
      },
      "AssemblyCostAcceptHeader": {
        "type": "string",
        "title": "AssemblyCostAcceptHeader",
        "enum": [
          "application/api.luminovo.assembly-cost-v1+json"
        ]
      },
      "AssemblyCostBreakdown": {
        "type": "object",
        "description": "The costs of one assembly on one path (`hierarchy`) within one demand of a\nsourcing scenario.",
        "required": [
          "assembly",
          "demand",
          "hierarchy",
          "quantity",
          "direct_costs",
          "rolled_up_costs",
          "bom_items"
        ],
        "properties": {
          "assembly": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyReference",
            "description": "The assembly this entry is for."
          },
          "demand": {
            "$ref": "#/components/schemas/DemandReference",
            "description": "The demand this entry is for."
          },
          "hierarchy": {
            "$ref": "#/components/schemas/AssemblyHierarchy",
            "description": "Where this assembly sits in the assembly hierarchy of its demand."
          },
          "quantity": {
            "$ref": "#/components/schemas/Quantity",
            "description": "The total quantity of this assembly on this path (for assemblies,\ntypically a `Number` of pieces)."
          },
          "direct_costs": {
            "$ref": "#/components/schemas/AssemblyCost",
            "description": "The costs of this assembly's own BOM items. Includes no costs from children."
          },
          "rolled_up_costs": {
            "$ref": "#/components/schemas/AssemblyCost",
            "description": "This assembly's `direct_costs` plus the rolled-up costs of all its\nsub-assemblies, accumulated bottom-up: assemblies with no\nsub-assemblies roll up only their own direct costs, and every level\nabove adds its own direct costs to the sum of its children's\nrolled-up costs (each child's costs already reflect the child's\nquantity on this path). For a demand-root assembly, this is the full\ncost of the demand."
          },
          "bom_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CostBreakdownBomItem"
            },
            "description": "Every BOM item of this assembly, exactly once."
          }
        }
      },
      "AssemblyHierarchy": {
        "type": "object",
        "description": "Where an assembly sits in the assembly hierarchy of its demand.\n\nEach demand starts at one root assembly, which may contain sub-assemblies,\nwhich may in turn contain further sub-assemblies. `parent_assembly` and\n`path` describe on which branch of that hierarchy this entry sits. See the\nendpoint description of `GetCostBreakdownForSourcingScenario` for worked\nexamples.",
        "required": [
          "parent_assembly",
          "path"
        ],
        "properties": {
          "parent_assembly": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyReference",
                "description": "The assembly that directly contains this assembly. `null` when this\nassembly is the root of its demand, i.e. it is not contained in any\nother assembly."
              }
            ]
          },
          "path": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyReference"
            },
            "description": "The route by which this sub-assembly was reached: the chain of\nassemblies from the demand root down to `parent_assembly`, in order.\nThis assembly itself is excluded, so the last element (if any) is\nalways `parent_assembly`. Empty when this assembly is the demand\nroot. The assembly's depth in the hierarchy equals the length of\nthis path (the demand root has depth 0)."
          }
        }
      },
      "AssemblyId": {
        "type": "string",
        "format": "uuid"
      },
      "AssemblyIdsAcceptHeader": {
        "type": "string",
        "title": "AssemblyIdsAcceptHeader",
        "enum": [
          "application/api.luminovo.assembly-ids-v1+json"
        ]
      },
      "BomItemDirectCosts": {
        "type": "object",
        "description": "A sourced BOM item's cost contribution to its assembly's `direct_costs`.\n\n`…excluding_excess` covers the required quantity (including material to\ncover expected scrap); `…including_excess` covers the quantity actually\nbought, which may be larger, e.g. due to supplier minimum order or\npackaging quantities.\n\nIntentionally minimal: unit prices, excess, scrap, one-time, and TCO cost\nsplits may be added in the future.",
        "required": [
          "total_price_excluding_excess",
          "total_price_including_excess"
        ],
        "properties": {
          "total_price_excluding_excess": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "The cost of the required quantity."
              }
            ]
          },
          "total_price_including_excess": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue",
                "description": "The cost of the purchased quantity, including excess quantity."
              }
            ]
          }
        }
      },
      "BomItemReference": {
        "type": "object",
        "description": "A BOM item, identified by its designators.",
        "required": [
          "designators"
        ],
        "properties": {
          "designators": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The designators of the design items aggregated into this BOM item\n(e.g. `[\"R7\", \"R11\"]`). Designators without a value are omitted, so\nthe list can be empty."
          }
        }
      },
      "BulkOfferResponse": {
        "type": "object",
        "description": "Response body for a bulk-offer lookup: the resolved offers plus the IDs\nthat could not be resolved.",
        "required": [
          "items",
          "not_found_ids"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferResponse"
            },
            "description": "The offers that were found. Order is not guaranteed and does not\nnecessarily match the request order."
          },
          "not_found_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Offer IDs that could not be resolved. An ID lands here if it does not\nexist, was deleted, or belongs to a different tenant. Returning these\nexplicitly (rather than silently dropping them) lets callers reconcile\nmissing data without comparing input and output IDs themselves."
          }
        }
      },
      "CalculationLineItemId": {
        "type": "string",
        "format": "uuid"
      },
      "CalculationScenarioId": {
        "type": "string",
        "format": "uuid"
      },
      "CardinalNumberUnit": {
        "type": "string",
        "enum": [
          "Pieces"
        ]
      },
      "ComponentExportAcceptHeader": {
        "type": "string",
        "title": "ComponentExportAcceptHeader",
        "enum": [
          "application/api.luminovo.component-v1+json"
        ]
      },
      "ComponentLite": {
        "type": "object",
        "description": "A lightweight reference to an off-the-shelf component identified by the\ntenant's internal part number (IPN).",
        "required": [
          "id",
          "ipn"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/OffTheShelfComponentId"
          },
          "ipn": {
            "type": "string",
            "description": "The internal part number string (the tenant's own identifier)."
          },
          "revision": {
            "type": [
              "string",
              "null"
            ],
            "description": "The IPN's revision identifier (e.g. \"A\", \"B\", \"1.2\"). `null` if the\nIPN has no revision, or if the revision could not be resolved at\nresponse time."
          }
        }
      },
      "ComponentRiskAcceptHeader": {
        "type": "string",
        "title": "ComponentRiskAcceptHeader",
        "enum": [
          "application/api.luminovo.component-risk-v1+json"
        ]
      },
      "CostBreakdownBomItem": {
        "type": "object",
        "description": "A BOM item of an assembly. A sourced BOM item carries costs and the\npurchase options those costs come from; an unsourced one carries neither.\nSee `sourcing_status`.",
        "required": [
          "bom_item",
          "per_assembly_quantity",
          "sourcing_status",
          "direct_costs",
          "purchase_options"
        ],
        "properties": {
          "bom_item": {
            "$ref": "#/components/schemas/BomItemReference",
            "description": "The BOM item, identified by its designators."
          },
          "per_assembly_quantity": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/Quantity",
                "description": "Pieces of this BOM item per one unit of the assembly it is a part of,\nas specified by the design. Does not include scrap or excess — it is\npurely the quantity needed to build one unit of the assembly.\n`null` only when the quantity itself could not be determined\n(see the `Error` sourcing status)."
              }
            ]
          },
          "sourcing_status": {
            "$ref": "#/components/schemas/SourcingStatus",
            "description": "Whether the BOM item was sourced, and if not, why."
          },
          "direct_costs": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/BomItemDirectCosts",
                "description": "This BOM item's contribution to the assembly's `direct_costs`: the\nassembly-level costs disaggregated per BOM item, derived from the\npurchase options that source this BOM item. Populated only when\n`sourcing_status` is `Sourced`."
              }
            ]
          },
          "purchase_options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOption"
            },
            "description": "The purchase options this BOM item's costs come from, joinable to\n`GET /sourcing-scenarios/{id}/purchase-options` via `offer_id`. Empty\nunless `sourcing_status` is `Sourced`. Modeled as a list because a\nBOM item's demand can in principle be split across several offers; at\nthe moment it always contains exactly one entry for sourced items,\nsince multi-offer sourcing is not supported yet."
          }
        }
      },
      "CostedBomAcceptHeader": {
        "type": "string",
        "title": "CostedBomAcceptHeader",
        "enum": [
          "application/api.luminovo.costed-bom-v1+json"
        ]
      },
      "CurrencyCode": {
        "type": "string",
        "enum": [
          "EUR",
          "USD",
          "AUD",
          "BGN",
          "BRL",
          "CAD",
          "CHF",
          "CNY",
          "CZK",
          "DKK",
          "GBP",
          "HKD",
          "HRK",
          "HUF",
          "IDR",
          "ILS",
          "INR",
          "ISK",
          "JPY",
          "KRW",
          "MXN",
          "MYR",
          "NOK",
          "NZD",
          "PHP",
          "PLN",
          "RON",
          "RUB",
          "SEK",
          "SGD",
          "THB",
          "TND",
          "TRY",
          "ZAR",
          "TWD",
          "VND",
          "LKR",
          "MAD"
        ]
      },
      "CustomComponentId": {
        "type": "string"
      },
      "CustomComponentLite": {
        "type": "object",
        "description": "A lightweight reference to a custom component identified by the tenant's\ninternal part number (IPN).",
        "required": [
          "id",
          "ipn"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CustomComponentId"
          },
          "ipn": {
            "type": "string",
            "description": "The internal part number string (the tenant's own identifier)."
          },
          "revision": {
            "type": [
              "string",
              "null"
            ],
            "description": "The IPN's revision identifier (e.g. \"A\", \"B\", \"1.2\"). `null` if the\nIPN has no revision, or if the revision could not be resolved at\nresponse time."
          }
        }
      },
      "CustomPartAcceptHeader": {
        "type": "string",
        "title": "CustomPartAcceptHeader",
        "enum": [
          "application/api.luminovo.custom-part-v1+json"
        ]
      },
      "CustomPartId": {
        "$ref": "#/components/schemas/CustomPartSpecificationId"
      },
      "CustomPartLite": {
        "type": "object",
        "description": "A lightweight reference to a custom part: a part that is custom-manufactured\nor specifically engineered for a project (e.g. a PCB, a custom mechanical\npart, a custom cable assembly).\n\nCustom parts are identified by an internal specification rather than an MPN.",
        "required": [
          "id",
          "custom_part_type"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CustomPartId",
            "description": "The custom part specification's unique identifier inside Luminovo."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Free-text description of the custom part."
          },
          "custom_part_type": {
            "$ref": "#/components/schemas/types.custom_part.v1.CustomPartType",
            "description": "The kind of custom part (PCB, Mechanical, Plastic, Cable, ...)."
          }
        }
      },
      "CustomPartOfferAcceptHeader": {
        "type": "string",
        "title": "CustomPartOfferAcceptHeader",
        "enum": [
          "application/api.luminovo.custom-part-offer-v1+json"
        ]
      },
      "CustomPartOfferData": {
        "type": "object",
        "description": "The payload of a **custom-part** offer (`kind = CustomPart`): a priced\noption for buying a custom-manufactured part from a specific source.\n\nUnlike a standard-part offer, a custom-part offer has no offer-level\n`availability` or `packaging`: lead time is reported per price-break tier\n(`price_breaks.*.lead_time`) because fulfillment time for custom parts\ndepends on the order quantity.\n\n**Identifier format.** `id` is the colon-separated opaque form\n`<kind>:<uuid>` (e.g. `Custom:7e1c2a8f-...`). Treat it as an opaque string\n— its internal structure may change.\n\n**Unit of measurement.** `unit_of_measurement` defines what one offer unit\nrepresents. All quantities elsewhere in the offer\n(`price_breaks.*.minimum_*`) are expressed in those offer units.",
        "required": [
          "id",
          "linked_part",
          "linked_location",
          "unit_of_measurement",
          "supplier_part_number",
          "price_breaks",
          "one_time_costs",
          "valid_from",
          "valid_until",
          "creation_date"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The offer's unique identifier in the opaque colon-separated form\n`<kind>:<uuid>` (e.g. `Custom:7e1c2a8f-...`). Treat this value as an\nopaque string — its internal structure may change."
          },
          "linked_part": {
            "$ref": "#/components/schemas/CustomPartOfferLinkedPart",
            "description": "The custom part this offer is for. Use `linked_part.type` to tell\nwhether it is a custom-part specification or an Internal Part Number\n(the tenant's own identifier for that custom component)."
          },
          "linked_location": {
            "$ref": "#/components/schemas/LinkedLocation",
            "description": "Where this offer is sourced from. Use `linked_location.type` to tell\nwhich kind of source it is: an external `Supplier` branch (orders\nbecome purchase orders to that supplier) or an internal `InventorySite`\n(orders become stock transfers from a warehouse the tenant owns)."
          },
          "unit_of_measurement": {
            "$ref": "#/components/schemas/Quantity",
            "description": "Defines what one offer unit represents. All quantities elsewhere in\nthis offer (`price_breaks.*.minimum_*`) are expressed in these offer\nunits."
          },
          "supplier_part_number": {
            "type": "string",
            "description": "The supplier's own part number for this item (sometimes called \"SPN\"\nor \"vendor part number\"). `null` if the supplier didn't provide one."
          },
          "offer_number": {
            "type": [
              "string",
              "null"
            ],
            "description": "The supplier's quote or offer reference number — typically from\ntheir RFQ / quotation system (e.g. \"RFQ-2026-0042\"). `null` if the\noffer has no associated quote reference."
          },
          "price_type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "enum": [
                  "PurchasePrice",
                  "ListPrice",
                  "ContractPrice",
                  "QuotePrice",
                  "StandardPrice",
                  "CustomerNegotiatedPrice",
                  "TargetPrice"
                ]
              }
            ],
            "description": "The type of pricing this offer represents — e.g. quote price (one-off\nRFQ response), contract price, or customer-negotiated price. `null` if\nthe pricing type is not tracked."
          },
          "price_breaks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomPartPriceBreak"
            },
            "description": "Quantity-based pricing tiers, each carrying quantity, unit price, and\nits own production `lead_time`. Quantities and prices are in offer\nunits. The order of tiers is not guaranteed — clients should sort by\n`minimum_order_quantity` if order matters."
          },
          "one_time_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.OneTimeCost"
            },
            "description": "Non-recurring costs associated with this offer (e.g. tooling, NRE,\nsetup fees). Empty array if none."
          },
          "valid_from": {
            "type": "string",
            "format": "date",
            "description": "Start of the offer's validity window. `null` means the offer has no\nexplicit start date and is considered valid from creation. Date only,\nno timezone."
          },
          "valid_until": {
            "type": "string",
            "format": "date",
            "description": "End of the offer's validity window — after this date the offer\nshould no longer be honoured. `null` means the offer has no explicit\nexpiry. Date only, no timezone."
          },
          "cancellation_policy": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "required": [
                  "cancellation_window"
                ],
                "properties": {
                  "cancellation_window": {
                    "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Duration"
                  },
                  "is_non_cancellable_non_returnable": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                }
              }
            ],
            "description": "Terms governing cancellation and returns once an order has been\nplaced against this offer: the time window during which the order\ncan still be cancelled, plus an optional non-cancellable /\nnon-returnable (NCNR) flag. `null` if the supplier did not specify\nthese terms."
          },
          "notes": {
            "type": [
              "string",
              "null"
            ],
            "description": "Free-text notes about the offer (e.g. \"Pricing valid for revision A\nonly\")."
          },
          "creation_date": {
            "type": "string",
            "format": "date-time",
            "description": "When this offer was first created in Luminovo (ISO 8601 with timezone)."
          }
        }
      },
      "CustomPartOfferLinkedPart": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomPartLite",
                "description": "A custom-manufactured part (PCB, mechanical, etc.)."
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "CustomPart"
                    ]
                  }
                }
              }
            ],
            "title": "CustomPart",
            "description": "A custom-manufactured part (PCB, mechanical, etc.)."
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/InternalPartNumberLite",
                "description": "A part identified by the tenant's internal part number."
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "InternalPartNumber"
                    ]
                  }
                }
              }
            ],
            "title": "InternalPartNumber",
            "description": "A part identified by the tenant's internal part number."
          }
        ],
        "description": "The part a custom-part offer is for, in a lightweight form suitable for\nembedding inside offer responses. Use the dedicated part endpoints for the\nfull details (e.g. specifications, datasheet links, alternates).\n\nThis is the `linked_part` of a `CustomPart` offer, so the `type` field\nis one of:\n\n- `CustomPart` — a part that is custom-manufactured or specifically\n  engineered for a project (PCB, mechanical, cable, ...).\n- `InternalPartNumber` — the tenant's own internal identifier for a\n  custom component."
      },
      "CustomPartPriceBreak": {
        "type": "object",
        "description": "A pricing tier for a custom-part offer. Each tier carries its own\n`lead_time` because fulfillment timelines for custom parts typically\nvary with order quantity (larger orders take longer to produce).",
        "required": [
          "minimum_order_quantity",
          "minimum_packaging_quantity",
          "unit_price"
        ],
        "properties": {
          "minimum_order_quantity": {
            "type": "number",
            "format": "double",
            "description": "Smallest order quantity at which this tier's `unit_price` and\n`lead_time` apply, in offer units (also known as MOQ — Minimum\nOrder Quantity)."
          },
          "minimum_packaging_quantity": {
            "type": "number",
            "format": "double",
            "description": "Packaging increment for orders at this tier, in offer units — orders\nmust be a multiple of this value (also known as MPQ — Minimum\nPackaging Quantity, or \"order multiple\")."
          },
          "unit_price": {
            "$ref": "#/components/schemas/MonetaryValue",
            "description": "Price per one offer unit, in the offer's original currency."
          },
          "lead_time": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "required": [
                  "unit",
                  "value"
                ],
                "properties": {
                  "unit": {
                    "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.CancellationWindowDuration"
                  },
                  "value": {
                    "type": "number",
                    "format": "double"
                  }
                }
              }
            ],
            "description": "Production lead time for an order placed at this tier — how long\nthe factory needs to manufacture and ship the requested quantity.\n`null` if no lead time was specified for this tier (e.g. immediate\navailability or unknown)."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Free-text description for this tier (e.g. \"Standard turnaround\",\n\"Includes accelerated tooling\"). `null` if not provided."
          }
        }
      },
      "CustomPartResourceAcceptHeader": {
        "type": "string",
        "title": "CustomPartResourceAcceptHeader",
        "enum": [
          "application/api.luminovo.custom-part-resource-v1+json"
        ]
      },
      "CustomPartSpecificationId": {
        "type": "string",
        "format": "uuid"
      },
      "CustomerAcceptHeader": {
        "type": "string",
        "title": "CustomerAcceptHeader",
        "enum": [
          "application/api.luminovo.customer-v1+json"
        ]
      },
      "CustomerUserAcceptHeader": {
        "type": "string",
        "title": "CustomerUserAcceptHeader",
        "enum": [
          "application/api.luminovo.customer-user-v1+json"
        ]
      },
      "DemandAcceptHeader": {
        "type": "string",
        "title": "DemandAcceptHeader",
        "enum": [
          "application/api.luminovo.demand-v1+json"
        ]
      },
      "DemandCreationRequest": {
        "type": "object",
        "required": [
          "items",
          "context"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.demand.v1.DemandCreationRequestItem"
            }
          },
          "context": {
            "type": "string",
            "description": "The context field is a string that provides additional information about where the demand originated from or its purpose.\nIt's required for most demand creation requests (except for sourcing scenarios)."
          }
        }
      },
      "DemandId": {
        "type": "string",
        "format": "uuid"
      },
      "DemandReference": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "id",
              "type"
            ],
            "properties": {
              "id": {
                "$ref": "#/components/schemas/DemandId"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Assembly"
                ]
              }
            }
          }
        ],
        "description": "The demand a cost breakdown entry is for. Currently always an assembly\ndemand; further demand kinds may be added in the future."
      },
      "DesignItemId": {
        "type": "string",
        "format": "uuid"
      },
      "FindOffersEmptyFilter": {
        "$ref": "#/components/schemas/ApiErrorResponse_FindOffersEmptyFilterErrorData_FindOffersEmptyFilter_UNPROCESSABLE_ENTITY",
        "description": "One of the given filters in the request is empty.\nSuch a request cannot be processed, as an empty\nlist of items for a filter would match no offers."
      },
      "FindOffersEmptyFilterErrorData": {
        "type": "object",
        "required": [
          "filter"
        ],
        "properties": {
          "filter": {
            "type": "string",
            "description": "The name of the field for the filter that is empty.",
            "example": "part_ids"
          }
        }
      },
      "FindOffersEmptyRequest": {
        "$ref": "#/components/schemas/ApiErrorResponse_NoErrorData_FindOffersEmptyRequest_UNPROCESSABLE_ENTITY",
        "description": "The find request contains no filters.\nSuch a request cannot be processed."
      },
      "FindOffersFilterInputTooLarge": {
        "$ref": "#/components/schemas/ApiErrorResponse_FindOffersFilterInputTooLargeErrorData_FindOffersFilterInputTooLarge_UNPROCESSABLE_ENTITY",
        "description": "A given filter contains too many input elements,\ne.g. too many part IDs or import context IDs."
      },
      "FindOffersFilterInputTooLargeErrorData": {
        "type": "object",
        "required": [
          "filter",
          "input_size",
          "max_size"
        ],
        "properties": {
          "filter": {
            "type": "string",
            "description": "The name of the field for the filter where\nthe number of input elements exceeds the maximum size.",
            "example": "part_ids"
          },
          "input_size": {
            "type": "integer",
            "format": "int64",
            "description": "The number of input elements in the filter.",
            "example": 101,
            "minimum": 0
          },
          "max_size": {
            "type": "integer",
            "format": "int64",
            "description": "The maximum number of input elements allowed in the filter.",
            "example": 100,
            "minimum": 0
          }
        }
      },
      "FindOffersFilters": {
        "type": "object",
        "properties": {
          "part_ids": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "If given, filter offers by the linked part IDs.\nAn offer where the linked part matches any of the given\npart IDs will pass this filter.\n\nThe IDs should be given as colon-separated opaque strings in\nthe form `<kind>:<id>` (e.g. `OffTheShelf:a1b2c3d4-...`,\n`CustomComponent:IPN-001234`). These are the same values returned as\n`linked_part.id` on an offer and by the part endpoints.\n\nIf specified, at least 1 and at most 100 part IDs must be given.",
            "example": [
              "OffTheShelf:a1b2c3d4-5678-90ab-cdef-123456789012",
              "CustomComponent:IPN-001234"
            ],
            "maxItems": 100,
            "minItems": 1
          },
          "import_context_ids": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "If given, filter offers by the linked offer import context IDs.\nAn offer where the linked offer import context matches any of the given\nimport context IDs will pass this filter.\n\nThe same IDs that are returned by the offer import context API\nshould be used.\n\nCustom part offers and custom part inventory don't have import contexts.\nIf an import context ID is given, then no custom part offers or inventory\nwill match the filter.\n\nIf specified, at least 1 and at most 100 import context IDs must be given.",
            "example": [
              "0b822595-b86e-4478-aa83-5ac266142653",
              "26446bea-886e-4b01-ba8a-3c955c3bf242"
            ],
            "maxItems": 100,
            "minItems": 1
          }
        }
      },
      "FindOffersInvalidRequest": {
        "$ref": "#/components/schemas/ApiErrorResponse_NoErrorData_FindOffersInvalidRequest_BAD_REQUEST",
        "description": "The find request is syntactically incorrect, e.g. the body is not valid\nJSON, a required field is missing, or a part ID has a missing or unknown\n`<kind>:` prefix. The error message may contain more detail, but is not\nmeant for automatic processing.\n\nThis error is also returned if the pagination cursor is invalid."
      },
      "FindOffersPaginationLimitOutOfBounds": {
        "$ref": "#/components/schemas/ApiErrorResponse_FindOffersPaginationLimitOutOfBoundsErrorData_FindOffersPaginationLimitOutOfBounds_UNPROCESSABLE_ENTITY",
        "description": "The value for the input pagination limit is out of bounds."
      },
      "FindOffersPaginationLimitOutOfBoundsErrorData": {
        "type": "object",
        "required": [
          "input_limit",
          "min_limit",
          "max_limit"
        ],
        "properties": {
          "input_limit": {
            "type": "integer",
            "format": "int64",
            "description": "The number in the input pagination limit.",
            "example": 1001,
            "minimum": 0
          },
          "min_limit": {
            "type": "integer",
            "format": "int64",
            "description": "The minimum number allowed for the pagination limit.",
            "example": 1,
            "minimum": 0
          },
          "max_limit": {
            "type": "integer",
            "format": "int64",
            "description": "The maximum number allowed for the pagination limit.",
            "example": 1000,
            "minimum": 0
          }
        }
      },
      "FindOffersPaginationRequest": {
        "type": "object",
        "properties": {
          "cursor": {
            "type": [
              "string",
              "null"
            ],
            "description": "The cursor to continue returning offers from. This is an opaque string,\nonly a cursor previously returned by this endpoint should be used as input.\n\nIn the initial request, no cursor or `null` should be given."
          },
          "limit": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "The maximum number of offers to return. If at least this many offers matching\nthe filters remain after the current cursor, then `limit` offers are returned.\nThe endpoint will never return more than the given `limit` of offers.\n\nIf specified, the limit must be at least 1 and at most 1000.\nIf not specified, the limit defaults to 100.",
            "default": 100,
            "example": 100,
            "maximum": 1000,
            "minimum": 1
          }
        }
      },
      "FindOffersPaginationResponse": {
        "type": "object",
        "description": "Pagination information on whether more offers are available,\nand if so, the cursor to continue from.",
        "required": [
          "has_more"
        ],
        "properties": {
          "next_cursor": {
            "type": [
              "string",
              "null"
            ],
            "description": "The cursor that should be passed to the next endpoint call\nto obtain more matching offers."
          },
          "has_more": {
            "type": "boolean",
            "description": "`true` if there are more matching offers.\nIn that case, a cursor is given in `next_cursor`.\nIf false, then there are no more matching offers,\nand the `next_cursor` is `null`."
          }
        }
      },
      "FindOffersRequest": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FindOffersPaginationRequest"
          },
          {
            "type": "object",
            "required": [
              "filters"
            ],
            "properties": {
              "filters": {
                "$ref": "#/components/schemas/FindOffersFilters",
                "description": "The filters to find offers for. If the field for\na filter is `null` or not given, then it is not\napplied. If multiple filters are given, then an\noffer only matches if it passes all of the given filters.\n\nAt least one filter must be given."
              }
            }
          }
        ]
      },
      "FindOffersResult": {
        "type": "object",
        "required": [
          "offers",
          "pagination"
        ],
        "properties": {
          "offers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferResponseV2"
            },
            "description": "The offers that match the filters, starting at the input cursor,\nup to the input limit."
          },
          "pagination": {
            "$ref": "#/components/schemas/FindOffersPaginationResponse"
          }
        }
      },
      "FindOffersUnprocessableErrorResponse": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/FindOffersEmptyRequest"
          },
          {
            "$ref": "#/components/schemas/FindOffersEmptyFilter"
          },
          {
            "$ref": "#/components/schemas/FindOffersFilterInputTooLarge"
          },
          {
            "$ref": "#/components/schemas/FindOffersPaginationLimitOutOfBounds"
          }
        ],
        "type": "object",
        "discriminator": {
          "propertyName": "code",
          "mapping": {
            "offer.find_offers.empty_filter": "#/components/schemas/ApiErrorResponse_FindOffersEmptyFilterErrorData_FindOffersEmptyFilter_UNPROCESSABLE_ENTITY",
            "offer.find_offers.empty_request": "#/components/schemas/ApiErrorResponse_NoErrorData_FindOffersEmptyRequest_UNPROCESSABLE_ENTITY",
            "offer.find_offers.filter_input_too_large": "#/components/schemas/ApiErrorResponse_FindOffersFilterInputTooLargeErrorData_FindOffersFilterInputTooLarge_UNPROCESSABLE_ENTITY",
            "offer.find_offers.pagination_limit_out_of_bounds": "#/components/schemas/ApiErrorResponse_FindOffersPaginationLimitOutOfBoundsErrorData_FindOffersPaginationLimitOutOfBounds_UNPROCESSABLE_ENTITY"
          }
        }
      },
      "FlexibleCalculationAcceptHeader": {
        "type": "string",
        "title": "FlexibleCalculationAcceptHeader",
        "description": "Accept header for flexible calculation endpoints.\n\nVersion v0 indicates an unstable API contract. Breaking changes may be\nintroduced without a version bump. Once the API stabilises, it will be\npromoted to v1.",
        "enum": [
          "application/api.luminovo.flexible-calculation-v0+json"
        ]
      },
      "GetCostBreakdownForSourcingScenarioResponse": {
        "type": "object",
        "description": "Response body for `GET /sourcing-scenarios/{id}/cost-breakdown`.",
        "required": [
          "assembly_costs"
        ],
        "properties": {
          "assembly_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AssemblyCostBreakdown"
            },
            "description": "The cost breakdown of the sourcing scenario as a flat list of assembly\nentries — one for every path to each assembly in each demand's assembly\nhierarchy, so an assembly reachable by several paths appears once per path. Use\n`hierarchy` (`parent_assembly`, `path`) to reconstruct the assembly hierarchy."
          }
        }
      },
      "GetOffersByIdInput": {
        "type": "object",
        "description": "Request body for the bulk-offer-lookup endpoint.",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The offer IDs to look up (colon-separated opaque strings as returned\nby other endpoints). IDs that do not resolve will appear in the\nresponse's `not_found_ids` list."
          }
        }
      },
      "GetPnpParams": {
        "type": "object",
        "required": [
          "assembly_id"
        ],
        "properties": {
          "assembly_id": {
            "$ref": "#/components/schemas/AssemblyId",
            "description": "The assembly ID to get PnP items for."
          }
        }
      },
      "GetPurchaseOptionsForSourcingScenarioResponse": {
        "type": "object",
        "description": "Response body for `GET /sourcing-scenarios/{id}/purchase-options`.",
        "required": [
          "purchase_options"
        ],
        "properties": {
          "purchase_options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOption"
            },
            "description": "The purchase options for the sourcing scenario. Each entry represents\none offer selected by the sourcing engine with its determined order\nquantity and the sourcing line items it fulfills."
          }
        }
      },
      "HashMap_Option_types.assembly.assembly_manufacturing_data.export.v1.NaiveTime": {
        "type": "object",
        "additionalProperties": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "type": "string",
              "format": "time"
            }
          ]
        },
        "propertyNames": {
          "type": "integer",
          "format": "int32"
        }
      },
      "HashMap_types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetailCost": {
        "type": "object",
        "additionalProperties": {
          "type": "object",
          "properties": {
            "total_cost": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair"
                }
              ]
            },
            "effective_cost": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair"
                }
              ]
            }
          }
        },
        "propertyNames": {
          "type": "integer",
          "format": "int32"
        }
      },
      "HashMap_types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetailCost": {
        "type": "object",
        "additionalProperties": {
          "type": "object",
          "properties": {
            "variable_cost": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
                }
              ]
            },
            "fixed_cost": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
                }
              ]
            },
            "total_cost": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair"
                }
              ]
            }
          }
        },
        "propertyNames": {
          "type": "integer",
          "format": "int32"
        }
      },
      "HashMap_types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummaryBreakdown": {
        "type": "object",
        "additionalProperties": {
          "type": "object",
          "required": [
            "total_unit_time",
            "total_batch_time",
            "total_unit_cost",
            "total_batch_cost",
            "total_project_cost",
            "total_effective_unit_cost",
            "total_effective_batch_cost"
          ],
          "properties": {
            "total_unit_time": {
              "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.NaiveTime"
            },
            "total_batch_time": {
              "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.NaiveTime"
            },
            "total_unit_cost": {
              "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
            },
            "total_batch_cost": {
              "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
            },
            "total_project_cost": {
              "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
            },
            "total_effective_unit_cost": {
              "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
            },
            "total_effective_batch_cost": {
              "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
            }
          }
        },
        "propertyNames": {
          "type": "integer",
          "format": "int32"
        }
      },
      "InternalPartNumberIdentifiers": {
        "type": "object",
        "required": [
          "value"
        ],
        "properties": {
          "value": {
            "type": "string"
          },
          "revision": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "InternalPartNumberLite": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ComponentLite",
            "description": "An off-the-shelf component identified by the tenant's internal part number."
          },
          {
            "$ref": "#/components/schemas/CustomComponentLite",
            "description": "A custom component identified by the tenant's internal part number."
          },
          {
            "$ref": "#/components/schemas/RawIpnLite",
            "description": "A raw IPN string not linked to any component."
          }
        ],
        "description": "A lightweight reference to an Internal Part Number (IPN) — the tenant's\nown internal identifier for a part, independent of any specific manufacturer.\n\nIPNs typically map to one or more off-the-shelf parts (approved alternates).\n\nAn IPN may refer to an off-the-shelf component (`Component`) or a custom\ncomponent (`CustomComponent`). The two share the exact same shape and are\ndistinguished only by the prefix of their `id`.\n\nAn IPN may also just be a raw IPN (`RawIpn`) not linked to any component.\nIt carries only the `ipn` field."
      },
      "InventorySiteLocation": {
        "type": "object",
        "description": "An internal inventory site (e.g. a warehouse). Used for inventory offers\nwhere the stock is owned by the tenant rather than an external supplier.",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The site's unique identifier."
          },
          "name": {
            "type": "string",
            "description": "The site's display name (e.g. \"Main Warehouse Munich\")."
          },
          "number": {
            "type": [
              "string",
              "null"
            ],
            "description": "The tenant's internal number for this site (e.g. an ERP site code)."
          }
        }
      },
      "LinkedLocation": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/Supplier",
                "description": "An external supplier branch (e.g. Mouser Europe, Arrow Asia,\nDigi-Key, or a direct manufacturer)."
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "Supplier"
                    ]
                  }
                }
              }
            ],
            "title": "Supplier",
            "description": "An external supplier branch (e.g. Mouser Europe, Arrow Asia,\nDigi-Key, or a direct manufacturer)."
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/InventorySiteLocation",
                "description": "An internal inventory site (e.g. a warehouse)."
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "InventorySite"
                    ]
                  }
                }
              }
            ],
            "title": "InventorySite",
            "description": "An internal inventory site (e.g. a warehouse)."
          }
        ],
        "description": "Where an offer is sourced from.\n\nThe `type` field discriminates between the two kinds of sources:\n\n- `Supplier` — an external supplier branch (distributor or manufacturer).\n  Orders placed against this offer become purchase orders to that\n  supplier.\n- `InventorySite` — an internal inventory site (warehouse) owned by the\n  tenant. Orders placed against this offer become stock transfers."
      },
      "ManufacturerAcceptHeader": {
        "type": "string",
        "title": "ManufacturerAcceptHeader",
        "enum": [
          "application/api.luminovo.manufacturer-v1+json"
        ]
      },
      "ManufacturerId": {
        "type": "string",
        "format": "uuid"
      },
      "ManufacturerLite": {
        "type": "object",
        "description": "A lightweight reference to a manufacturer: just its ID and display name.\n\nThis is included in the lightweight `OffTheShelfPartLite` representation\nso that consumers don't need a separate lookup to render a human-readable\nmanufacturer name (e.g. \"Yageo\", \"Murata\").",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The manufacturer's unique identifier."
          },
          "name": {
            "type": "string",
            "description": "The manufacturer's display name (e.g. \"Yageo\", \"Murata\",\n\"TE Connectivity\"). Empty string if the manufacturer record could not\nbe resolved at response time — match by `id` instead in that case."
          }
        }
      },
      "ManufacturingDataExportAcceptHeader": {
        "type": "string",
        "title": "ManufacturingDataExportAcceptHeader",
        "enum": [
          "application/api.luminovo.assembly.manufacturing-data.export-v1+json"
        ]
      },
      "ManufacturingResourceAcceptHeader": {
        "type": "string",
        "title": "ManufacturingResourceAcceptHeader",
        "enum": [
          "application/api.luminovo.manufacturing.resource-v1+json"
        ]
      },
      "ManufacturingScenarioTemplateInstanceId": {
        "type": "string",
        "format": "uuid"
      },
      "MonetaryValue": {
        "type": "object",
        "description": "A monetary value: an exact decimal `amount` plus its `currency`.\n\nExample: `{\"amount\": \"12.50\", \"currency\": \"EUR\"}` means \"12.50 euros\".",
        "required": [
          "amount",
          "currency"
        ],
        "properties": {
          "amount": {
            "type": "string",
            "description": "The amount of money, encoded as a decimal string (not a JSON number)\nto preserve precision, e.g. `\"12.50\"` or `\"0.003\"`."
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode",
            "description": "The ISO 4217 code of the currency the amount is denominated in."
          }
        },
        "example": {
          "amount": "12.50",
          "currency": "EUR"
        }
      },
      "OffTheShelfComponentId": {
        "type": "string"
      },
      "OffTheShelfPartAcceptHeader": {
        "type": "string",
        "title": "OffTheShelfPartAcceptHeader",
        "enum": [
          "application/api.luminovo.off-the-shelf-part-v1+json"
        ]
      },
      "OffTheShelfPartLite": {
        "type": "object",
        "description": "A lightweight reference to an off-the-shelf (catalog) part: a part that is\nuniquely identified by its manufacturer + manufacturer part number (MPN).\n\nExamples: a specific resistor, capacitor, or IC available from distributors\nlike Mouser, Digi-Key, Arrow, etc.",
        "required": [
          "id",
          "mpn",
          "manufacturer"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.OffTheShelfPartId",
            "description": "The part's unique identifier inside Luminovo."
          },
          "mpn": {
            "type": "string",
            "description": "Manufacturer Part Number (e.g. \"RC0402FR-0710KL\")."
          },
          "manufacturer": {
            "$ref": "#/components/schemas/ManufacturerLite",
            "description": "The manufacturer of this part (ID and name)."
          }
        }
      },
      "OfferAcceptHeader": {
        "type": "string",
        "title": "OfferAcceptHeader",
        "enum": [
          "application/api.luminovo.offer-v1+json"
        ]
      },
      "OfferAvailability": {
        "type": "object",
        "description": "Stock and lead-time information for a standard-part offer. Custom-part\noffers do not have this field — they report lead time per price-break tier\ninstead (see `CustomPartPriceBreak.lead_time`).",
        "properties": {
          "factory_lead_time": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "required": [
                  "unit",
                  "value"
                ],
                "properties": {
                  "unit": {
                    "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.CancellationWindowDuration"
                  },
                  "value": {
                    "type": "number",
                    "format": "double"
                  }
                }
              }
            ],
            "description": "Time the factory needs to produce additional stock once the\nimmediately-available `stock` has run out (also known as\n\"manufacturing lead time\"). `null` if the supplier did not report it."
          },
          "factory_quantity": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "description": "Quantity the factory can produce on top of immediately-available\n`stock` (in offer units), if reported by the supplier. Independent\nof `stock`. `null` if the supplier did not report it."
          },
          "stock": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "oneOf": [
                  {
                    "type": "object",
                    "title": "Weight",
                    "description": "A weight, with `unit` taken from `WeightUnit` (e.g. `Kilograms`,\n`Grams`, `Milligrams`, `Pounds`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/WeightUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Weight"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Length",
                    "description": "A length, with `unit` taken from `LengthUnit` (e.g. `Meters`,\n`Centimeters`, `Millimeters`, `Feet`, `Inches`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/QuantityLengthUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Length"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Volume",
                    "description": "A volume, with `unit` taken from `VolumeUnit` (e.g. `Liters`,\n`Milliliters`, `UsFluidOunces`, `UsGallons`, `UsPints`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/VolumeUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Volume"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Number",
                    "description": "A count of discrete items, with `unit` taken from `CardinalNumberUnit`\n(currently just `Pieces`). This is the most common quantity for\nelectronic components — e.g. \"5000 pieces on a reel\".",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/CardinalNumberUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Number"
                        ]
                      }
                    }
                  }
                ],
                "description": "A measured quantity with an explicit dimension and unit.\n\nDiscriminated by `type`, which selects the dimension (`Weight`, `Length`,\n`Volume`, or `Number`). Each variant then carries a `unit` (one of the\nunits valid for that dimension — e.g. `Kilograms` for `Weight`) and a\n`value` (the magnitude, encoded as a decimal string to preserve\nprecision).\n\nExample: `{\"type\": \"Number\", \"unit\": \"Pieces\", \"value\": \"5000\"}` means\n\"5000 pieces\"; `{\"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\"}` means\n\"5 meters\".",
                "example": {
                  "type": "Number",
                  "unit": "Pieces",
                  "value": "5000"
                }
              }
            ],
            "description": "Quantity immediately available from the supplier's warehouse (or\nfrom the inventory site, for inventory offers), expressed in the\noffer's `unit_of_measurement`. `null` if the supplier did not report\nstock."
          }
        }
      },
      "OfferDeleteConflictOnPublicOffer": {
        "$ref": "#/components/schemas/ApiErrorResponse_OfferDeleteConflictOnPublicOfferErrorData_OfferCannotDeletePublicOffTheShelfOffer_CONFLICT",
        "description": "Conflict. The request contained an ID for a public off-the-shelf offer that cannot be deleted."
      },
      "OfferDeleteConflictOnReferencedOffer": {
        "$ref": "#/components/schemas/ApiErrorResponse_OfferDeleteConflictOnReferencedOfferErrorData_OfferCannotDeleteReferencedOffer_CONFLICT",
        "description": "Conflict. The request contained an ID that is referenced as a selected solution\nin a sourcing line item, and `force_delete` is not set to `true`."
      },
      "OfferDeletePayloadTooLargeErrorResponse": {
        "$ref": "#/components/schemas/ApiErrorResponse_OfferDeletePayloadTooLargeErrorData_OfferDeletePayloadTooLarge_PAYLOAD_TOO_LARGE",
        "description": "Payload too large. The request size is too large to be handled.\n\nThis error is returned if the number of offer IDs in the request\nexceeds the maximum number of 100,000 offers that can be deleted in one request.\n\nIt may also be returned if the request size in bytes exceeds the global limit the server can handle.\nThe `data` field is an empty object."
      },
      "OfferDeleteRequest": {
        "type": "object",
        "description": "The offer IDs that should be deleted.\nUse the opaque offer IDs as returned by other endpoints such as `POST /offers/find`.",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The set of offer IDs to be deleted.",
            "example": [
              "PrivateOffTheShelf:5e3fbd0b-5b61-46ac-9b93-36e2fc76d69b",
              "Custom:220a0cb7-7163-4235-b8b8-472b6f2e137c"
            ]
          }
        }
      },
      "OfferDeleteSuccessResponse": {
        "type": "object",
        "description": "The offer deletion has been successful.\nIncludes the set of offer IDs for offers that were actually deleted.\nThis is a subset of the input offer IDs.\nOffer IDs that were not deleted because the offer didn't exist are absent.",
        "required": [
          "deleted_ids"
        ],
        "properties": {
          "deleted_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The set of IDs that were actually deleted. Requested IDs that did\nnot exist are absent, which makes the operation idempotent.",
            "example": [
              "PrivateOffTheShelf:f879beea-a554-4fd0-ab34-ee5d3bf0f0e2"
            ]
          }
        }
      },
      "OfferIdV2": {
        "oneOf": [
          {
            "type": "object",
            "description": "Market offer for a catalog part. Serialized kind: `PublicOffTheShelf`.",
            "required": [
              "PublicOffTheShelf"
            ],
            "properties": {
              "PublicOffTheShelf": {
                "type": "string",
                "format": "uuid",
                "description": "Market offer for a catalog part. Serialized kind: `PublicOffTheShelf`."
              }
            }
          },
          {
            "type": "object",
            "description": "Tenant-private offer for a catalog part (e.g. a contract or\nnegotiated price the tenant maintains directly). Serialized kind:\n`PrivateOffTheShelf`.",
            "required": [
              "PrivateOffTheShelf"
            ],
            "properties": {
              "PrivateOffTheShelf": {
                "type": "string",
                "format": "uuid",
                "description": "Tenant-private offer for a catalog part (e.g. a contract or\nnegotiated price the tenant maintains directly). Serialized kind:\n`PrivateOffTheShelf`."
              }
            }
          },
          {
            "type": "object",
            "description": "Offer backed by internal stock of a catalog part at one of the\ntenant's inventory sites. Serialized kind: `InventoryOffTheShelf`.",
            "required": [
              "Inventory"
            ],
            "properties": {
              "Inventory": {
                "type": "string",
                "format": "uuid",
                "description": "Offer backed by internal stock of a catalog part at one of the\ntenant's inventory sites. Serialized kind: `InventoryOffTheShelf`."
              }
            }
          },
          {
            "type": "object",
            "description": "Offer for a custom-manufactured part. Serialized kind: `Custom`.",
            "required": [
              "Custom"
            ],
            "properties": {
              "Custom": {
                "type": "string",
                "format": "uuid",
                "description": "Offer for a custom-manufactured part. Serialized kind: `Custom`."
              }
            }
          },
          {
            "type": "object",
            "description": "Offer backed by internal stock of a custom-manufactured part at one\nof the tenant's inventory sites. Serialized kind: `InventoryCustomPart`.",
            "required": [
              "CustomPartInventory"
            ],
            "properties": {
              "CustomPartInventory": {
                "type": "string",
                "format": "uuid",
                "description": "Offer backed by internal stock of a custom-manufactured part at one\nof the tenant's inventory sites. Serialized kind: `InventoryCustomPart`."
              }
            }
          }
        ],
        "description": "The unique identifier of an offer.\n\nSerialized as an opaque colon-separated string `<kind>:<uuid>`, where\n`<kind>` is one of:\n\n- `PublicOffTheShelf` — a market offer for a catalog part, sourced from\n  an external distributor or manufacturer (Digi-Key, Mouser, Arrow, ...)\n  or from one of Luminovo's API integrations (Octopart, TrustedParts, ...).\n- `PrivateOffTheShelf` — a tenant-private offer for a catalog part, e.g.\n  a contract or negotiated price the tenant maintains directly.\n- `InventoryOffTheShelf` — an offer backed by internal stock of a catalog\n  part held at one of the tenant's own inventory sites (warehouses).\n- `Custom` — an offer for a custom-manufactured part (PCB, mechanical,\n  cable, ...), typically created in response to an RFQ.\n- `InventoryCustomPart` — an offer backed by internal stock of a\n  custom-manufactured part held at one of the tenant's own inventory sites.\n\nExample: `PublicOffTheShelf:550e8400-e29b-41d4-a716-446655440000`.\nTreat the string as opaque — its internal structure may change."
      },
      "OfferImportContextAcceptHeader": {
        "type": "string",
        "title": "OfferImportContextAcceptHeader",
        "enum": [
          "application/api.luminovo.offer-import-context-v1+json"
        ]
      },
      "OfferNotFoundErrorResponse": {
        "$ref": "#/components/schemas/ApiErrorResponse_OfferNotFoundErrorData_OfferNotFound_NOT_FOUND",
        "description": "Not found. The offer with the given ID was not found."
      },
      "OfferOrigin": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "Manual"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "context": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Import"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "quote_request_id": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uuid"
              },
              "quote_request_line_item_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "quote_tracking_id": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uuid"
              },
              "negotiation_id": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "QuoteRequest"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "Consigned"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Octopart"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Nexar"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "public",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "public": {
                "type": "boolean"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "TrustedParts"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Sourcengine"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Farnell"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Newark"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Element14"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Buerklin"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Mouser"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Future"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Schukat"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Digikey"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "MyArrow"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Gudeco"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Rutronik"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Tme"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Weltron"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "AvnetAbacus"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "AvnetApac"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "AvnetSilica"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "AvnetEbv"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "AvnetUsa"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Arrow"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "WuerthEisos"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "datasource_name",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "datasource_name": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Orbweaver"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "Wuerth"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "BetaLayout"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "SafePcb"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "IBRRingler"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "APCT"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "Gatema"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "Alba"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "origin"
            ],
            "properties": {
              "origin": {
                "type": "string",
                "enum": [
                  "MultiCB"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "team",
              "origin"
            ],
            "properties": {
              "team": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Stackrate"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Lcsc"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Tti"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Eve"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Samtec"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Ti"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Blume"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Heilind"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Master"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Onlinecomponents"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "AlElektronik"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Unikey"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Corestaff"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "RsComponents"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Sos"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Venkel"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Rochester"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "QuestComponents"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "ChipCart"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "WinSource"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "IcHub"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Ecomal"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "RmComponents"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Wittig"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Telcona"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "RapidElectronics"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Hexachip"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Alfatec"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Kruse"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Ineltro"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "AtlantikNetworxx"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Greenchips"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Bossard"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "origin"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "origin": {
                "type": "string",
                "enum": [
                  "Mev"
                ]
              }
            }
          }
        ]
      },
      "OfferPaymentTermsInput": {
        "oneOf": [
          {
            "type": "object",
            "title": "NetOnly",
            "required": [
              "net_payment_due_days",
              "type"
            ],
            "properties": {
              "net_payment_due_days": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "net_payment"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "NetWithEarlyPayment",
            "required": [
              "net_payment_due_days",
              "early_payment_due_days",
              "early_payment_discount",
              "type"
            ],
            "properties": {
              "net_payment_due_days": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "early_payment_due_days": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "early_payment_discount": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "net_with_early_payment"
                ]
              }
            }
          }
        ]
      },
      "OfferResponse": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/StandardPartOfferData",
                "description": "An offer for a catalog part. `availability` (stock + factory lead\ntime) is reported at the offer level. Price-break tiers carry only\nquantity and unit price. `linked_part.type` is `OffTheShelf` or\n`InternalPartNumber`."
              },
              {
                "type": "object",
                "required": [
                  "kind"
                ],
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "StandardPart"
                    ]
                  }
                }
              }
            ],
            "title": "StandardPart",
            "description": "An offer for a catalog part. `availability` (stock + factory lead\ntime) is reported at the offer level. Price-break tiers carry only\nquantity and unit price. `linked_part.type` is `OffTheShelf` or\n`InternalPartNumber`.",
            "example": {
              "kind": "StandardPart",
              "id": "PublicOffTheShelf:550e8400-e29b-41d4-a716-446655440000",
              "linked_part": {
                "type": "OffTheShelf",
                "id": "OffTheShelf:a1b2c3d4-5678-90ab-cdef-123456789012",
                "mpn": "RC0402FR-0710KL",
                "manufacturer": {
                  "id": "c3d4e5f6-7890-12ab-cdef-345678901234",
                  "name": "Yageo"
                }
              },
              "linked_location": {
                "type": "Supplier",
                "id": "f1a2b3c4-0000-1111-2222-333344445555",
                "name": "Mouser Electronics",
                "number": "SUP-001",
                "stock_location": {
                  "id": 150,
                  "name": "Europe"
                }
              },
              "unit_of_measurement": {
                "type": "Number",
                "unit": "Pieces",
                "value": "1"
              },
              "supplier_part_number": "603-RC0402FR-0710KL",
              "offer_number": "QUO-2026-1234",
              "price_type": "ListPrice",
              "price_breaks": [
                {
                  "minimum_order_quantity": 1,
                  "minimum_packaging_quantity": 1,
                  "unit_price": {
                    "amount": "0.0520",
                    "currency": "EUR"
                  }
                },
                {
                  "minimum_order_quantity": 1000,
                  "minimum_packaging_quantity": 100,
                  "unit_price": {
                    "amount": "0.0330",
                    "currency": "EUR"
                  }
                }
              ],
              "one_time_costs": [],
              "packaging": "Reel",
              "availability": {
                "factory_lead_time": {
                  "unit": "Weeks",
                  "value": 12
                },
                "factory_quantity": 100000,
                "stock": {
                  "type": "Number",
                  "unit": "Pieces",
                  "value": "5000"
                }
              },
              "valid_from": "2026-01-15",
              "valid_until": "2026-06-15",
              "cancellation_policy": null,
              "notes": "Lead-free variant",
              "creation_date": "2026-01-15T10:30:00Z"
            }
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomPartOfferData",
                "description": "An offer for a custom-manufactured part. There is no offer-level\n`availability` or `packaging`; per-tier `lead_time` lives in\n`price_breaks` instead, because fulfillment time depends on order\nquantity. `linked_part.type` is `CustomPart` or `InternalPartNumber`."
              },
              {
                "type": "object",
                "required": [
                  "kind"
                ],
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "CustomPart"
                    ]
                  }
                }
              }
            ],
            "title": "CustomPart",
            "description": "An offer for a custom-manufactured part. There is no offer-level\n`availability` or `packaging`; per-tier `lead_time` lives in\n`price_breaks` instead, because fulfillment time depends on order\nquantity. `linked_part.type` is `CustomPart` or `InternalPartNumber`.",
            "example": {
              "kind": "CustomPart",
              "id": "Custom:7e1c2a8f-2b6e-4f7c-9c91-1a4f9d2b3e10",
              "linked_part": {
                "type": "CustomPart",
                "id": "1f2e3d4c-5b6a-7980-1a2b-3c4d5e6f7081",
                "description": "Main board, 4-layer FR4, 1.6 mm",
                "custom_part_type": {
                  "name": "PCB",
                  "content": null
                }
              },
              "linked_location": {
                "type": "Supplier",
                "id": "9c8b7a65-4321-4abc-9def-0123456789ab",
                "name": "MultiCB",
                "number": "SUP-PCB-002",
                "stock_location": {
                  "id": 150,
                  "name": "Europe"
                }
              },
              "unit_of_measurement": {
                "type": "Number",
                "unit": "Pieces",
                "value": "1"
              },
              "supplier_part_number": null,
              "offer_number": "RFQ-2026-0042",
              "price_type": "QuotePrice",
              "price_breaks": [
                {
                  "minimum_order_quantity": 100,
                  "minimum_packaging_quantity": 1,
                  "unit_price": {
                    "amount": "12.40",
                    "currency": "EUR"
                  },
                  "lead_time": {
                    "unit": "Weeks",
                    "value": 3
                  },
                  "description": "Standard turnaround"
                },
                {
                  "minimum_order_quantity": 1000,
                  "minimum_packaging_quantity": 1,
                  "unit_price": {
                    "amount": "8.75",
                    "currency": "EUR"
                  },
                  "lead_time": {
                    "unit": "Weeks",
                    "value": 5
                  },
                  "description": "Volume tier"
                }
              ],
              "one_time_costs": [
                {
                  "description": "Tooling",
                  "price": {
                    "amount": "350.00",
                    "currency": "EUR"
                  }
                }
              ],
              "valid_from": "2026-01-15",
              "valid_until": "2026-04-15",
              "cancellation_policy": {
                "cancellation_window": {
                  "unit": "Days",
                  "value": 7
                },
                "is_non_cancellable_non_returnable": false
              },
              "notes": "Pricing valid for revision A only.",
              "creation_date": "2026-01-15T10:30:00Z"
            }
          }
        ],
        "description": "A priced option for buying a specific part from a specific source.\n\nAn **offer** captures everything needed to evaluate or place a purchase:\nthe part it is for (`linked_part`), where it comes from (`linked_location`,\neither an external supplier branch or an internal inventory site),\nquantity-based pricing tiers (`price_breaks`), packaging, validity dates,\nand — for standard-part offers — current stock and factory lead time.\n\n**Two kinds.** The `kind` discriminator describes the *nature of the\noffer* — how it is priced and fulfilled — and determines the payload shape:\n\n- `StandardPart` — an offer for a catalog part (see `StandardPartOfferData`).\n  `availability` (stock + factory lead time) is reported at the offer\n  level. Price-break tiers carry only quantity and unit price.\n  `linked_part.type` is either `OffTheShelf` (referenced by manufacturer +\n  MPN) or `InternalPartNumber` (referenced by the tenant's IPN for that\n  catalog part).\n- `CustomPart` — an offer for a custom-manufactured part (PCB, mechanical,\n  cable, ...; see `CustomPartOfferData`). There is no offer-level\n  `availability` or `packaging`; lead time instead lives per price-break\n  tier in `price_breaks.*.lead_time`, because fulfillment time for custom\n  parts depends on the order quantity. `linked_part.type` is either\n  `CustomPart` (referenced by custom-part specification) or\n  `InternalPartNumber` (referenced by the tenant's IPN for that custom\n  component).\n\nIn other words, `kind` describes the *offer*, while `linked_part.type`\ndescribes how the *part* is identified — the two are related but not the\nsame."
      },
      "OfferResponseV2": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/StandardPartOfferDataV2",
                "description": "An offer for a catalog part. `availability` (stock + factory lead\ntime) is reported at the offer level. Price-break tiers carry only\nquantity and unit price. `linked_part.type` is `OffTheShelf` or\n`InternalPartNumber`."
              },
              {
                "type": "object",
                "required": [
                  "kind"
                ],
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "StandardPart"
                    ]
                  }
                }
              }
            ],
            "title": "StandardPart",
            "description": "An offer for a catalog part. `availability` (stock + factory lead\ntime) is reported at the offer level. Price-break tiers carry only\nquantity and unit price. `linked_part.type` is `OffTheShelf` or\n`InternalPartNumber`.",
            "example": {
              "kind": "StandardPart",
              "id": "PublicOffTheShelf:550e8400-e29b-41d4-a716-446655440000",
              "linked_part": {
                "type": "OffTheShelf",
                "id": "OffTheShelf:a1b2c3d4-5678-90ab-cdef-123456789012",
                "mpn": "RC0402FR-0710KL",
                "manufacturer": {
                  "id": "c3d4e5f6-7890-12ab-cdef-345678901234",
                  "name": "Yageo"
                }
              },
              "linked_location": {
                "type": "Supplier",
                "id": "f1a2b3c4-0000-1111-2222-333344445555",
                "name": "Mouser Electronics",
                "number": "SUP-001",
                "stock_location": {
                  "id": 150,
                  "name": "Europe"
                }
              },
              "unit_of_measurement": {
                "type": "Number",
                "unit": "Pieces",
                "value": "1"
              },
              "supplier_part_number": "603-RC0402FR-0710KL",
              "offer_number": "QUO-2026-1234",
              "import_context": {
                "id": "c56b1518-c1ed-48c1-a3ab-1dc34e69c6f8",
                "name": "Import 1234"
              },
              "price_type": "ListPrice",
              "price_breaks": [
                {
                  "minimum_order_quantity": 1,
                  "minimum_packaging_quantity": 1,
                  "unit_price": {
                    "amount": "0.0520",
                    "currency": "EUR"
                  }
                },
                {
                  "minimum_order_quantity": 1000,
                  "minimum_packaging_quantity": 100,
                  "unit_price": {
                    "amount": "0.0330",
                    "currency": "EUR"
                  }
                }
              ],
              "one_time_costs": [],
              "packaging": "Reel",
              "availability": {
                "factory_lead_time": {
                  "unit": "Weeks",
                  "value": 12
                },
                "factory_quantity": 100000,
                "stock": {
                  "type": "Number",
                  "unit": "Pieces",
                  "value": "5000"
                }
              },
              "valid_from": "2026-01-15",
              "valid_until": "2026-06-15",
              "cancellation_policy": null,
              "notes": "Lead-free variant",
              "creation_date": "2026-01-15T10:30:00Z",
              "superseded_by": {
                "offer_id": "PublicOffTheShelf:5b4f0e03-247d-4d75-801e-9b162aa6bb01"
              }
            }
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomPartOfferData",
                "description": "An offer for a custom-manufactured part. There is no offer-level\n`availability` or `packaging`; per-tier `lead_time` lives in\n`price_breaks` instead, because fulfillment time depends on order\nquantity. `linked_part.type` is `CustomPart` or `InternalPartNumber`."
              },
              {
                "type": "object",
                "required": [
                  "kind"
                ],
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "CustomPart"
                    ]
                  }
                }
              }
            ],
            "title": "CustomPart",
            "description": "An offer for a custom-manufactured part. There is no offer-level\n`availability` or `packaging`; per-tier `lead_time` lives in\n`price_breaks` instead, because fulfillment time depends on order\nquantity. `linked_part.type` is `CustomPart` or `InternalPartNumber`.",
            "example": {
              "kind": "CustomPart",
              "id": "Custom:7e1c2a8f-2b6e-4f7c-9c91-1a4f9d2b3e10",
              "linked_part": {
                "type": "CustomPart",
                "id": "1f2e3d4c-5b6a-7980-1a2b-3c4d5e6f7081",
                "description": "Main board, 4-layer FR4, 1.6 mm",
                "custom_part_type": {
                  "name": "PCB",
                  "content": null
                }
              },
              "linked_location": {
                "type": "Supplier",
                "id": "9c8b7a65-4321-4abc-9def-0123456789ab",
                "name": "MultiCB",
                "number": "SUP-PCB-002",
                "stock_location": {
                  "id": 150,
                  "name": "Europe"
                }
              },
              "unit_of_measurement": {
                "type": "Number",
                "unit": "Pieces",
                "value": "1"
              },
              "supplier_part_number": null,
              "offer_number": "RFQ-2026-0042",
              "price_type": "QuotePrice",
              "price_breaks": [
                {
                  "minimum_order_quantity": 100,
                  "minimum_packaging_quantity": 1,
                  "unit_price": {
                    "amount": "12.40",
                    "currency": "EUR"
                  },
                  "lead_time": {
                    "unit": "Weeks",
                    "value": 3
                  },
                  "description": "Standard turnaround"
                },
                {
                  "minimum_order_quantity": 1000,
                  "minimum_packaging_quantity": 1,
                  "unit_price": {
                    "amount": "8.75",
                    "currency": "EUR"
                  },
                  "lead_time": {
                    "unit": "Weeks",
                    "value": 5
                  },
                  "description": "Volume tier"
                }
              ],
              "one_time_costs": [
                {
                  "description": "Tooling",
                  "price": {
                    "amount": "350.00",
                    "currency": "EUR"
                  }
                }
              ],
              "valid_from": "2026-01-15",
              "valid_until": "2026-04-15",
              "cancellation_policy": {
                "cancellation_window": {
                  "unit": "Days",
                  "value": 7
                },
                "is_non_cancellable_non_returnable": false
              },
              "notes": "Pricing valid for revision A only.",
              "creation_date": "2026-01-15T10:30:00Z"
            }
          }
        ],
        "description": "A priced option for buying a specific part from a specific source.\n\nAn **offer** captures everything needed to evaluate or place a purchase:\nthe part it is for (`linked_part`), where it comes from (`linked_location`,\neither an external supplier branch or an internal inventory site),\nquantity-based pricing tiers (`price_breaks`), packaging, validity dates,\nand — for standard-part offers — current stock and factory lead time.\n\n**Two kinds.** The `kind` discriminator describes the *nature of the\noffer* — how it is priced and fulfilled — and determines the payload shape:\n\n- `StandardPart` — an offer for a catalog part (see `StandardPartOfferData`).\n  `availability` (stock + factory lead time) is reported at the offer\n  level. Price-break tiers carry only quantity and unit price.\n  `linked_part.type` is either `OffTheShelf` (referenced by manufacturer +\n  MPN) or `InternalPartNumber` (referenced by the tenant's IPN for that\n  catalog part).\n- `CustomPart` — an offer for a custom-manufactured part (PCB, mechanical,\n  cable, ...; see `CustomPartOfferData`). There is no offer-level\n  `availability` or `packaging`; lead time instead lives per price-break\n  tier in `price_breaks.*.lead_time`, because fulfillment time for custom\n  parts depends on the order quantity. `linked_part.type` is either\n  `CustomPart` (referenced by custom-part specification) or\n  `InternalPartNumber` (referenced by the tenant's IPN for that custom\n  component).\n\nIn other words, `kind` describes the *offer*, while `linked_part.type`\ndescribes how the *part* is identified — the two are related but not the\nsame."
      },
      "OrderManagementAcceptHeader": {
        "type": "string",
        "title": "OrderManagementAcceptHeader",
        "enum": [
          "application/api.luminovo.order-management-v1+json"
        ]
      },
      "PcbSpecificationAcceptHeader": {
        "type": "string",
        "title": "PcbSpecificationAcceptHeader",
        "enum": [
          "application/api.luminovo.pcb-specification-v1+json"
        ]
      },
      "PcbSpecificationExtractionFailedErrorResponse": {
        "$ref": "#/components/schemas/ApiErrorResponse_NoErrorData_PcbSpecificationExtractionFailed_INTERNAL_SERVER_ERROR",
        "description": "Internal server error. The extraction failed for a reason not covered by\na more specific error code."
      },
      "PcbSpecificationExtractionUnavailableErrorResponse": {
        "$ref": "#/components/schemas/ApiErrorResponse_NoErrorData_PcbSpecificationExtractionUnavailable_SERVICE_UNAVAILABLE",
        "description": "Service unavailable. The extraction service is temporarily degraded —\nretry the request later."
      },
      "PcbSpecificationFileRequiredErrorResponse": {
        "$ref": "#/components/schemas/ApiErrorResponse_NoErrorData_PcbSpecificationFileRequired_BAD_REQUEST",
        "description": "Bad request. No file was provided in the request body."
      },
      "PnpAcceptHeader": {
        "type": "string",
        "title": "PnpAcceptHeader",
        "enum": [
          "application/api.luminovo.pnp-v1+json"
        ]
      },
      "PnpFileId": {
        "type": "string",
        "format": "uuid"
      },
      "PnpItemId": {
        "type": "string",
        "format": "uuid"
      },
      "ProjectAcceptHeader": {
        "type": "string",
        "title": "ProjectAcceptHeader",
        "enum": [
          "application/api.luminovo.project-v1+json"
        ]
      },
      "ProjectOverviewAcceptHeader": {
        "type": "string",
        "title": "ProjectOverviewAcceptHeader",
        "enum": [
          "application/api.luminovo.project-overview-v1+json"
        ]
      },
      "PurchaseOption": {
        "type": "object",
        "description": "A purchase option represents the sourcing engine's decision to buy a specific\nquantity from a specific offer, fulfilling one or more sourcing line items\nin the scenario. This data is designed for ERP systems to create purchase\norders.\n\n**Quantity model:**\n- `quantity` is the number of **offer units** to order (can be fractional).\n- `unit_of_measurement` defines what one offer unit represents (e.g. 1 piece,\n  or 5 meters of cable). This mirrors the offer's own `unit_of_measurement`.\n- `purchase_quantity` is the total in base units — always equals\n  `quantity × unit_of_measurement.value`. This is a computed convenience field.\n\n**Resolving offer details:** Use `offer_id` with `GET /offers/{id}` or\n`POST /offers/bulk` to fetch the full offer including supplier information,\npricing tiers, and availability.",
        "required": [
          "offer_id",
          "minimum_order_quantity",
          "minimum_packaging_quantity",
          "quantity",
          "unit_of_measurement",
          "purchase_quantity",
          "unit_price"
        ],
        "properties": {
          "offer_id": {
            "type": "string",
            "description": "Unique identifier of the offer backing this purchase option. To fetch\nthe full offer details (supplier, pricing tiers, availability, part\ninformation), use `GET /offers/{id}` or `POST /offers/bulk` with this\nvalue."
          },
          "minimum_order_quantity": {
            "type": "number",
            "format": "double",
            "description": "Minimum order quantity in offer units (MOQ from the selected price\nbreak). Orders must be at least this many offer units."
          },
          "minimum_packaging_quantity": {
            "type": "number",
            "format": "double",
            "description": "Minimum packaging quantity in offer units (MPQ from the selected price\nbreak). Orders must be a multiple of this value."
          },
          "quantity": {
            "type": "number",
            "format": "double",
            "description": "Number of offer units to order, as a JSON number. Multiply by\n`unit_of_measurement.value` to get the total in base units\n(`purchase_quantity.value`)."
          },
          "unit_of_measurement": {
            "oneOf": [
              {
                "oneOf": [
                  {
                    "type": "object",
                    "title": "Weight",
                    "description": "A weight, with `unit` taken from `WeightUnit` (e.g. `Kilograms`,\n`Grams`, `Milligrams`, `Pounds`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/WeightUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Weight"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Length",
                    "description": "A length, with `unit` taken from `LengthUnit` (e.g. `Meters`,\n`Centimeters`, `Millimeters`, `Feet`, `Inches`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/QuantityLengthUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Length"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Volume",
                    "description": "A volume, with `unit` taken from `VolumeUnit` (e.g. `Liters`,\n`Milliliters`, `UsFluidOunces`, `UsGallons`, `UsPints`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/VolumeUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Volume"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Number",
                    "description": "A count of discrete items, with `unit` taken from `CardinalNumberUnit`\n(currently just `Pieces`). This is the most common quantity for\nelectronic components — e.g. \"5000 pieces on a reel\".",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/CardinalNumberUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Number"
                        ]
                      }
                    }
                  }
                ],
                "description": "A measured quantity with an explicit dimension and unit.\n\nDiscriminated by `type`, which selects the dimension (`Weight`, `Length`,\n`Volume`, or `Number`). Each variant then carries a `unit` (one of the\nunits valid for that dimension — e.g. `Kilograms` for `Weight`) and a\n`value` (the magnitude, encoded as a decimal string to preserve\nprecision).\n\nExample: `{\"type\": \"Number\", \"unit\": \"Pieces\", \"value\": \"5000\"}` means\n\"5000 pieces\"; `{\"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\"}` means\n\"5 meters\".",
                "example": {
                  "type": "Number",
                  "unit": "Pieces",
                  "value": "5000"
                }
              }
            ],
            "description": "What one offer unit represents (e.g.\n`{ \"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\" }` means each\noffer unit is 5 meters of cable). This mirrors the offer's own\n`unit_of_measurement` field. All quantities in this purchase option\n(`quantity`, `minimum_order_quantity`, `minimum_packaging_quantity`)\nare expressed in these offer units."
          },
          "purchase_quantity": {
            "oneOf": [
              {
                "oneOf": [
                  {
                    "type": "object",
                    "title": "Weight",
                    "description": "A weight, with `unit` taken from `WeightUnit` (e.g. `Kilograms`,\n`Grams`, `Milligrams`, `Pounds`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/WeightUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Weight"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Length",
                    "description": "A length, with `unit` taken from `LengthUnit` (e.g. `Meters`,\n`Centimeters`, `Millimeters`, `Feet`, `Inches`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/QuantityLengthUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Length"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Volume",
                    "description": "A volume, with `unit` taken from `VolumeUnit` (e.g. `Liters`,\n`Milliliters`, `UsFluidOunces`, `UsGallons`, `UsPints`).",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/VolumeUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Volume"
                        ]
                      }
                    }
                  },
                  {
                    "type": "object",
                    "title": "Number",
                    "description": "A count of discrete items, with `unit` taken from `CardinalNumberUnit`\n(currently just `Pieces`). This is the most common quantity for\nelectronic components — e.g. \"5000 pieces on a reel\".",
                    "required": [
                      "unit",
                      "value",
                      "type"
                    ],
                    "properties": {
                      "unit": {
                        "$ref": "#/components/schemas/CardinalNumberUnit"
                      },
                      "value": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "Number"
                        ]
                      }
                    }
                  }
                ],
                "description": "A measured quantity with an explicit dimension and unit.\n\nDiscriminated by `type`, which selects the dimension (`Weight`, `Length`,\n`Volume`, or `Number`). Each variant then carries a `unit` (one of the\nunits valid for that dimension — e.g. `Kilograms` for `Weight`) and a\n`value` (the magnitude, encoded as a decimal string to preserve\nprecision).\n\nExample: `{\"type\": \"Number\", \"unit\": \"Pieces\", \"value\": \"5000\"}` means\n\"5000 pieces\"; `{\"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\"}` means\n\"5 meters\".",
                "example": {
                  "type": "Number",
                  "unit": "Pieces",
                  "value": "5000"
                }
              }
            ],
            "description": "Total purchase quantity in base units. This is a **computed convenience\nfield**: always equals `quantity × unit_of_measurement.value`."
          },
          "unit_price": {
            "$ref": "#/components/schemas/MonetaryValue",
            "description": "Price per one offer unit of the sourcing line item, in the offer's\noriginal currency. No currency conversion is applied."
          }
        }
      },
      "Quantity": {
        "oneOf": [
          {
            "type": "object",
            "title": "Weight",
            "description": "A weight, with `unit` taken from `WeightUnit` (e.g. `Kilograms`,\n`Grams`, `Milligrams`, `Pounds`).",
            "required": [
              "unit",
              "value",
              "type"
            ],
            "properties": {
              "unit": {
                "$ref": "#/components/schemas/WeightUnit"
              },
              "value": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Weight"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "Length",
            "description": "A length, with `unit` taken from `LengthUnit` (e.g. `Meters`,\n`Centimeters`, `Millimeters`, `Feet`, `Inches`).",
            "required": [
              "unit",
              "value",
              "type"
            ],
            "properties": {
              "unit": {
                "$ref": "#/components/schemas/QuantityLengthUnit"
              },
              "value": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Length"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "Volume",
            "description": "A volume, with `unit` taken from `VolumeUnit` (e.g. `Liters`,\n`Milliliters`, `UsFluidOunces`, `UsGallons`, `UsPints`).",
            "required": [
              "unit",
              "value",
              "type"
            ],
            "properties": {
              "unit": {
                "$ref": "#/components/schemas/VolumeUnit"
              },
              "value": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Volume"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "Number",
            "description": "A count of discrete items, with `unit` taken from `CardinalNumberUnit`\n(currently just `Pieces`). This is the most common quantity for\nelectronic components — e.g. \"5000 pieces on a reel\".",
            "required": [
              "unit",
              "value",
              "type"
            ],
            "properties": {
              "unit": {
                "$ref": "#/components/schemas/CardinalNumberUnit"
              },
              "value": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Number"
                ]
              }
            }
          }
        ],
        "description": "A measured quantity with an explicit dimension and unit.\n\nDiscriminated by `type`, which selects the dimension (`Weight`, `Length`,\n`Volume`, or `Number`). Each variant then carries a `unit` (one of the\nunits valid for that dimension — e.g. `Kilograms` for `Weight`) and a\n`value` (the magnitude, encoded as a decimal string to preserve\nprecision).\n\nExample: `{\"type\": \"Number\", \"unit\": \"Pieces\", \"value\": \"5000\"}` means\n\"5000 pieces\"; `{\"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\"}` means\n\"5 meters\".",
        "example": {
          "type": "Number",
          "unit": "Pieces",
          "value": "5000"
        }
      },
      "QuantityLengthUnit": {
        "type": "string",
        "enum": [
          "Meters",
          "Centimeters",
          "Millimeters",
          "Feet",
          "Inches"
        ]
      },
      "QuotationUploadAcceptHeader": {
        "type": "string",
        "title": "QuotationUploadAcceptHeader",
        "enum": [
          "application/api.luminovo.quotation-upload-v1+json"
        ]
      },
      "RawIpnLite": {
        "type": "object",
        "description": "A raw internal part number (IPN) that is not linked to any component, e.g.\nbecause the IPN does not exist or refers to an assembly.",
        "required": [
          "ipn"
        ],
        "properties": {
          "ipn": {
            "type": "string",
            "description": "The internal part number string (the tenant's own identifier)."
          }
        }
      },
      "RefreshOffersRequest": {
        "type": "object",
        "description": "Request body for triggering a refresh of offers from external supplier APIs\nfor a set of off-the-shelf parts.\n\nContains a `parts` array of off-the-shelf part IDs, each an opaque\ncolon-separated string of the form `OffTheShelf:<uuid>` (e.g.\n`OffTheShelf:a1b2c3d4-5678-90ab-cdef-123456789012`). Treat each ID as an\nopaque string — its internal structure may change.",
        "required": [
          "parts"
        ],
        "properties": {
          "parts": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Off-the-shelf part IDs to refresh offers for. Each is an opaque\ncolon-separated string of the form `OffTheShelf:<uuid>` (e.g.\n`OffTheShelf:a1b2c3d4-5678-90ab-cdef-123456789012`).",
            "example": [
              "OffTheShelf:a1b2c3d4-5678-90ab-cdef-123456789012"
            ]
          }
        }
      },
      "RfqAcceptHeader": {
        "type": "string",
        "title": "RfqAcceptHeader",
        "enum": [
          "application/api.luminovo.rfq-v1+json"
        ]
      },
      "RfqOverviewAcceptHeader": {
        "type": "string",
        "title": "RfqOverviewAcceptHeader",
        "enum": [
          "application/api.luminovo.rfq-overview-v1+json"
        ]
      },
      "SiteId": {
        "type": "string",
        "format": "uuid"
      },
      "SourcingCalculationAcceptHeader": {
        "type": "string",
        "title": "SourcingCalculationAcceptHeader",
        "enum": [
          "application/api.luminovo.sourcing-calculation-v1+json"
        ]
      },
      "SourcingScenarioAcceptHeader": {
        "type": "string",
        "title": "SourcingScenarioAcceptHeader",
        "enum": [
          "application/api.luminovo.sourcing-scenario-v1+json"
        ]
      },
      "SourcingScenarioBadRequestErrorResponse": {
        "$ref": "#/components/schemas/ApiErrorResponse_NoErrorData_UnknownError_BAD_REQUEST",
        "description": "Bad request. The request is invalid — for example, the sourcing scenario\nID in the path is not a valid UUID, or the request body fails validation.\nThe `detail` field of the response body explains the problem."
      },
      "SourcingScenarioNotFoundErrorResponse": {
        "$ref": "#/components/schemas/ApiErrorResponse_NoErrorData_SourcingScenarioNotFound_NOT_FOUND",
        "description": "Not found. No sourcing scenario with the given ID exists for the\nauthenticated tenant. Also returned when the `Accept` header is missing\nor has an unexpected value — make sure to send the `Accept` header\ndocumented for this endpoint; in that case the body's `code` is\n`\"unknown\"` instead of `\"sourcing_scenario.not_found\"`."
      },
      "SourcingScenarioV2AcceptHeader": {
        "type": "string",
        "title": "SourcingScenarioV2AcceptHeader",
        "enum": [
          "application/api.luminovo.sourcing-scenario-v2+json"
        ]
      },
      "SourcingStatus": {
        "type": "string",
        "description": "Whether a BOM item was sourced, and if not, why.",
        "enum": [
          "Sourced",
          "Consigned",
          "NoOffer",
          "Pending",
          "NoPartOptions",
          "DoNotPlace",
          "Error"
        ]
      },
      "StandardPartOfferData": {
        "type": "object",
        "description": "The payload of a **standard-part** offer (`kind = StandardPart`): a priced\noption for buying a catalog part from a specific source.\n\nThe fields are organised into four groups:\n\n1. **Identity** — `id`.\n2. **What & where** — `linked_part` (the part) and `linked_location` (the\n   supplier branch or inventory site).\n3. **Pricing** — `unit_of_measurement`, the supplier-side identifiers\n   (`supplier_part_number`, `offer_number`), `price_type`, `price_breaks`,\n   `one_time_costs`, `packaging`, and `availability` (stock and factory\n   lead time).\n4. **Terms & metadata** — validity dates, cancellation policy, free-text\n   notes, and the creation timestamp.\n\n**Identifier format.** `id` is the colon-separated opaque form\n`<kind>:<uuid>` (e.g. `PublicOffTheShelf:550e8400-...`). Treat it as an\nopaque string — its internal structure may change.\n\n**Unit of measurement.** `unit_of_measurement` defines what one offer unit\nrepresents (for example, one cable reel of 5 m). All quantities elsewhere\nin the offer (`price_breaks.*.minimum_*`, `availability.*`) are expressed\nin those offer units. Multiply by `unit_of_measurement.value` to convert\nto the base unit.",
        "required": [
          "id",
          "linked_part",
          "linked_location",
          "unit_of_measurement",
          "supplier_part_number",
          "price_breaks",
          "one_time_costs",
          "valid_from",
          "valid_until",
          "creation_date"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The offer's unique identifier in the opaque colon-separated form\n`<kind>:<uuid>` (e.g. `PublicOffTheShelf:550e8400-...`). Treat this\nvalue as an opaque string — its internal structure may change."
          },
          "linked_part": {
            "$ref": "#/components/schemas/StandardPartOfferLinkedPart",
            "description": "The catalog part this offer is for. Use `linked_part.type` to tell\nwhether it is an off-the-shelf catalog part (manufacturer + MPN) or an\nInternal Part Number (the tenant's own identifier for that part)."
          },
          "linked_location": {
            "$ref": "#/components/schemas/LinkedLocation",
            "description": "Where this offer is sourced from. Use `linked_location.type` to tell\nwhich kind of source it is: an external `Supplier` branch (orders\nbecome purchase orders to that supplier) or an internal `InventorySite`\n(orders become stock transfers from a warehouse the tenant owns)."
          },
          "unit_of_measurement": {
            "$ref": "#/components/schemas/Quantity",
            "description": "Defines what one offer unit represents (e.g.\n`{ \"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\" }` means each\noffer unit is 5 meters of cable). All quantities elsewhere in this\noffer (`price_breaks.*.minimum_*`, `availability.*`) are expressed\nin these offer units."
          },
          "supplier_part_number": {
            "type": "string",
            "description": "The supplier's own part number for this item (sometimes called \"SPN\"\nor \"vendor part number\"). May differ from the manufacturer part\nnumber. `null` if the supplier didn't provide one."
          },
          "offer_number": {
            "type": [
              "string",
              "null"
            ],
            "description": "The supplier's quote or offer reference number — typically from\ntheir RFQ / quotation system (e.g. \"QUO-2026-1234\"). Useful when\nreconciling against the supplier's own records. `null` if the offer\nhas no associated quote reference (e.g. a list-price entry)."
          },
          "price_type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "enum": [
                  "PurchasePrice",
                  "ListPrice",
                  "ContractPrice",
                  "QuotePrice",
                  "StandardPrice",
                  "CustomerNegotiatedPrice",
                  "TargetPrice"
                ]
              }
            ],
            "description": "The type of pricing this offer represents — e.g. list price (open\ncatalog price), contract price (negotiated long-term agreement),\nquote price (one-off RFQ response), or customer-negotiated price.\nAlways present for standard-part offers."
          },
          "price_breaks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StandardPartPriceBreak"
            },
            "description": "Quantity-based pricing tiers, each carrying quantity + unit price.\nQuantities and prices are in offer units. The order of tiers is not\nguaranteed — clients should sort by `minimum_order_quantity` if order\nmatters."
          },
          "one_time_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.OneTimeCost"
            },
            "description": "Non-recurring costs associated with this offer (e.g. tooling, NRE,\nsetup fees). Empty array if none."
          },
          "packaging": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "enum": [
                  "AmmoPack",
                  "Bag",
                  "Bulk",
                  "Reel",
                  "ReReel",
                  "Spool",
                  "Tape",
                  "Tray",
                  "Tube",
                  "Carton"
                ]
              }
            ],
            "description": "Packaging the part ships in (e.g. `Reel`, `Tape`, `Tray`, `Tube`,\n`AmmoPack`, `Bag`, `Bulk`). `null` means the supplier did not specify\npackaging."
          },
          "availability": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "description": "Stock and lead-time information for a standard-part offer. Custom-part\noffers do not have this field — they report lead time per price-break tier\ninstead (see `CustomPartPriceBreak.lead_time`).",
                "properties": {
                  "factory_lead_time": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "object",
                        "required": [
                          "unit",
                          "value"
                        ],
                        "properties": {
                          "unit": {
                            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.CancellationWindowDuration"
                          },
                          "value": {
                            "type": "number",
                            "format": "double"
                          }
                        }
                      }
                    ],
                    "description": "Time the factory needs to produce additional stock once the\nimmediately-available `stock` has run out (also known as\n\"manufacturing lead time\"). `null` if the supplier did not report it."
                  },
                  "factory_quantity": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "format": "double",
                    "description": "Quantity the factory can produce on top of immediately-available\n`stock` (in offer units), if reported by the supplier. Independent\nof `stock`. `null` if the supplier did not report it."
                  },
                  "stock": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "oneOf": [
                          {
                            "type": "object",
                            "title": "Weight",
                            "description": "A weight, with `unit` taken from `WeightUnit` (e.g. `Kilograms`,\n`Grams`, `Milligrams`, `Pounds`).",
                            "required": [
                              "unit",
                              "value",
                              "type"
                            ],
                            "properties": {
                              "unit": {
                                "$ref": "#/components/schemas/WeightUnit"
                              },
                              "value": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "Weight"
                                ]
                              }
                            }
                          },
                          {
                            "type": "object",
                            "title": "Length",
                            "description": "A length, with `unit` taken from `LengthUnit` (e.g. `Meters`,\n`Centimeters`, `Millimeters`, `Feet`, `Inches`).",
                            "required": [
                              "unit",
                              "value",
                              "type"
                            ],
                            "properties": {
                              "unit": {
                                "$ref": "#/components/schemas/QuantityLengthUnit"
                              },
                              "value": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "Length"
                                ]
                              }
                            }
                          },
                          {
                            "type": "object",
                            "title": "Volume",
                            "description": "A volume, with `unit` taken from `VolumeUnit` (e.g. `Liters`,\n`Milliliters`, `UsFluidOunces`, `UsGallons`, `UsPints`).",
                            "required": [
                              "unit",
                              "value",
                              "type"
                            ],
                            "properties": {
                              "unit": {
                                "$ref": "#/components/schemas/VolumeUnit"
                              },
                              "value": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "Volume"
                                ]
                              }
                            }
                          },
                          {
                            "type": "object",
                            "title": "Number",
                            "description": "A count of discrete items, with `unit` taken from `CardinalNumberUnit`\n(currently just `Pieces`). This is the most common quantity for\nelectronic components — e.g. \"5000 pieces on a reel\".",
                            "required": [
                              "unit",
                              "value",
                              "type"
                            ],
                            "properties": {
                              "unit": {
                                "$ref": "#/components/schemas/CardinalNumberUnit"
                              },
                              "value": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "Number"
                                ]
                              }
                            }
                          }
                        ],
                        "description": "A measured quantity with an explicit dimension and unit.\n\nDiscriminated by `type`, which selects the dimension (`Weight`, `Length`,\n`Volume`, or `Number`). Each variant then carries a `unit` (one of the\nunits valid for that dimension — e.g. `Kilograms` for `Weight`) and a\n`value` (the magnitude, encoded as a decimal string to preserve\nprecision).\n\nExample: `{\"type\": \"Number\", \"unit\": \"Pieces\", \"value\": \"5000\"}` means\n\"5000 pieces\"; `{\"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\"}` means\n\"5 meters\".",
                        "example": {
                          "type": "Number",
                          "unit": "Pieces",
                          "value": "5000"
                        }
                      }
                    ],
                    "description": "Quantity immediately available from the supplier's warehouse (or\nfrom the inventory site, for inventory offers), expressed in the\noffer's `unit_of_measurement`. `null` if the supplier did not report\nstock."
                  }
                }
              }
            ],
            "description": "Stock on hand and factory lead-time at the offer level. `null` if the\nsupplier did not report any availability information."
          },
          "valid_from": {
            "type": "string",
            "format": "date",
            "description": "Start of the offer's validity window. `null` means the offer has no\nexplicit start date and is considered valid from creation. Date only,\nno timezone."
          },
          "valid_until": {
            "type": "string",
            "format": "date",
            "description": "End of the offer's validity window — after this date the offer\nshould no longer be honoured. `null` means the offer has no explicit\nexpiry. Date only, no timezone."
          },
          "cancellation_policy": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "required": [
                  "cancellation_window"
                ],
                "properties": {
                  "cancellation_window": {
                    "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Duration"
                  },
                  "is_non_cancellable_non_returnable": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                }
              }
            ],
            "description": "Terms governing cancellation and returns once an order has been\nplaced against this offer: the time window during which the order\ncan still be cancelled, plus an optional non-cancellable /\nnon-returnable (NCNR) flag. `null` if the supplier did not specify\nthese terms."
          },
          "notes": {
            "type": [
              "string",
              "null"
            ],
            "description": "Free-text notes about the offer (e.g. \"Lead-free variant\", \"EOL\nannounced — last-time-buy only\")."
          },
          "creation_date": {
            "type": "string",
            "format": "date-time",
            "description": "When this offer was first created in Luminovo (ISO 8601 with timezone)."
          }
        }
      },
      "StandardPartOfferDataV2": {
        "type": "object",
        "description": "The payload of a **standard-part** offer (`kind = StandardPart`): a priced\noption for buying a catalog part from a specific source.\n\nThe fields are organised into four groups:\n\n1. **Identity** — `id`.\n2. **What & where** — `linked_part` (the part) and `linked_location` (the\n   supplier branch or inventory site).\n3. **Pricing** — `unit_of_measurement`, the supplier-side identifiers\n   (`supplier_part_number`, `offer_number`), `price_type`, `price_breaks`,\n   `one_time_costs`, `packaging`, and `availability` (stock and factory\n   lead time).\n4. **Terms & metadata** — validity dates, cancellation policy, free-text\n   notes, and the creation timestamp.\n\n**Identifier format.** `id` is the colon-separated opaque form\n`<kind>:<uuid>` (e.g. `PublicOffTheShelf:550e8400-...`). Treat it as an\nopaque string — its internal structure may change.\n\n**Unit of measurement.** `unit_of_measurement` defines what one offer unit\nrepresents (for example, one cable reel of 5 m). All quantities elsewhere\nin the offer (`price_breaks.*.minimum_*`, `availability.*`) are expressed\nin those offer units. Multiply by `unit_of_measurement.value` to convert\nto the base unit.",
        "required": [
          "id",
          "linked_part",
          "linked_location",
          "unit_of_measurement",
          "supplier_part_number",
          "price_breaks",
          "one_time_costs",
          "valid_from",
          "valid_until",
          "creation_date"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The offer's unique identifier in the opaque colon-separated form\n`<kind>:<uuid>` (e.g. `PublicOffTheShelf:550e8400-...`). Treat this\nvalue as an opaque string — its internal structure may change."
          },
          "linked_part": {
            "$ref": "#/components/schemas/StandardPartOfferLinkedPart",
            "description": "The catalog part this offer is for. Use `linked_part.type` to tell\nwhether it is an off-the-shelf catalog part (manufacturer + MPN) or an\nInternal Part Number (the tenant's own identifier for that part)."
          },
          "linked_location": {
            "$ref": "#/components/schemas/LinkedLocation",
            "description": "Where this offer is sourced from. Use `linked_location.type` to tell\nwhich kind of source it is: an external `Supplier` branch (orders\nbecome purchase orders to that supplier) or an internal `InventorySite`\n(orders become stock transfers from a warehouse the tenant owns)."
          },
          "unit_of_measurement": {
            "$ref": "#/components/schemas/Quantity",
            "description": "Defines what one offer unit represents (e.g.\n`{ \"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\" }` means each\noffer unit is 5 meters of cable). All quantities elsewhere in this\noffer (`price_breaks.*.minimum_*`, `availability.*`) are expressed\nin these offer units."
          },
          "supplier_part_number": {
            "type": "string",
            "description": "The supplier's own part number for this item (sometimes called \"SPN\"\nor \"vendor part number\"). May differ from the manufacturer part\nnumber. `null` if the supplier didn't provide one."
          },
          "offer_number": {
            "type": [
              "string",
              "null"
            ],
            "description": "The supplier's quote or offer reference number — typically from\ntheir RFQ / quotation system (e.g. \"QUO-2026-1234\"). Useful when\nreconciling against the supplier's own records. `null` if the offer\nhas no associated quote reference (e.g. a list-price entry)."
          },
          "import_context": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "description": "A lightweight reference to an offer import context: just its ID and display name.",
                "required": [
                  "id",
                  "name"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "name": {
                    "type": "string"
                  }
                }
              }
            ],
            "description": "The offer import context specified for this offer during import.\nOnly applicable for imported offers. `null` if the offer is not\nan import offer or if no import context was specified during import."
          },
          "price_type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "enum": [
                  "PurchasePrice",
                  "ListPrice",
                  "ContractPrice",
                  "QuotePrice",
                  "StandardPrice",
                  "CustomerNegotiatedPrice",
                  "TargetPrice"
                ]
              }
            ],
            "description": "The type of pricing this offer represents — e.g. quote price (one-off\nRFQ response), contract price, or customer-negotiated price. `null` if\nthe pricing type is not tracked."
          },
          "price_breaks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StandardPartPriceBreak"
            },
            "description": "Quantity-based pricing tiers, each carrying quantity + unit price.\nQuantities and prices are in offer units. The order of tiers is not\nguaranteed — clients should sort by `minimum_order_quantity` if order\nmatters."
          },
          "one_time_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.OneTimeCost"
            },
            "description": "Non-recurring costs associated with this offer (e.g. tooling, NRE,\nsetup fees). Empty array if none."
          },
          "packaging": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "enum": [
                  "AmmoPack",
                  "Bag",
                  "Bulk",
                  "Reel",
                  "ReReel",
                  "Spool",
                  "Tape",
                  "Tray",
                  "Tube",
                  "Carton"
                ]
              }
            ],
            "description": "Packaging the part ships in (e.g. `Reel`, `Tape`, `Tray`, `Tube`,\n`AmmoPack`, `Bag`, `Bulk`). `null` means the supplier did not specify\npackaging."
          },
          "availability": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "description": "Stock and lead-time information for a standard-part offer. Custom-part\noffers do not have this field — they report lead time per price-break tier\ninstead (see `CustomPartPriceBreak.lead_time`).",
                "properties": {
                  "factory_lead_time": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "object",
                        "required": [
                          "unit",
                          "value"
                        ],
                        "properties": {
                          "unit": {
                            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.CancellationWindowDuration"
                          },
                          "value": {
                            "type": "number",
                            "format": "double"
                          }
                        }
                      }
                    ],
                    "description": "Time the factory needs to produce additional stock once the\nimmediately-available `stock` has run out (also known as\n\"manufacturing lead time\"). `null` if the supplier did not report it."
                  },
                  "factory_quantity": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "format": "double",
                    "description": "Quantity the factory can produce on top of immediately-available\n`stock` (in offer units), if reported by the supplier. Independent\nof `stock`. `null` if the supplier did not report it."
                  },
                  "stock": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "oneOf": [
                          {
                            "type": "object",
                            "title": "Weight",
                            "description": "A weight, with `unit` taken from `WeightUnit` (e.g. `Kilograms`,\n`Grams`, `Milligrams`, `Pounds`).",
                            "required": [
                              "unit",
                              "value",
                              "type"
                            ],
                            "properties": {
                              "unit": {
                                "$ref": "#/components/schemas/WeightUnit"
                              },
                              "value": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "Weight"
                                ]
                              }
                            }
                          },
                          {
                            "type": "object",
                            "title": "Length",
                            "description": "A length, with `unit` taken from `LengthUnit` (e.g. `Meters`,\n`Centimeters`, `Millimeters`, `Feet`, `Inches`).",
                            "required": [
                              "unit",
                              "value",
                              "type"
                            ],
                            "properties": {
                              "unit": {
                                "$ref": "#/components/schemas/QuantityLengthUnit"
                              },
                              "value": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "Length"
                                ]
                              }
                            }
                          },
                          {
                            "type": "object",
                            "title": "Volume",
                            "description": "A volume, with `unit` taken from `VolumeUnit` (e.g. `Liters`,\n`Milliliters`, `UsFluidOunces`, `UsGallons`, `UsPints`).",
                            "required": [
                              "unit",
                              "value",
                              "type"
                            ],
                            "properties": {
                              "unit": {
                                "$ref": "#/components/schemas/VolumeUnit"
                              },
                              "value": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "Volume"
                                ]
                              }
                            }
                          },
                          {
                            "type": "object",
                            "title": "Number",
                            "description": "A count of discrete items, with `unit` taken from `CardinalNumberUnit`\n(currently just `Pieces`). This is the most common quantity for\nelectronic components — e.g. \"5000 pieces on a reel\".",
                            "required": [
                              "unit",
                              "value",
                              "type"
                            ],
                            "properties": {
                              "unit": {
                                "$ref": "#/components/schemas/CardinalNumberUnit"
                              },
                              "value": {
                                "type": "string"
                              },
                              "type": {
                                "type": "string",
                                "enum": [
                                  "Number"
                                ]
                              }
                            }
                          }
                        ],
                        "description": "A measured quantity with an explicit dimension and unit.\n\nDiscriminated by `type`, which selects the dimension (`Weight`, `Length`,\n`Volume`, or `Number`). Each variant then carries a `unit` (one of the\nunits valid for that dimension — e.g. `Kilograms` for `Weight`) and a\n`value` (the magnitude, encoded as a decimal string to preserve\nprecision).\n\nExample: `{\"type\": \"Number\", \"unit\": \"Pieces\", \"value\": \"5000\"}` means\n\"5000 pieces\"; `{\"type\": \"Length\", \"unit\": \"Meters\", \"value\": \"5\"}` means\n\"5 meters\".",
                        "example": {
                          "type": "Number",
                          "unit": "Pieces",
                          "value": "5000"
                        }
                      }
                    ],
                    "description": "Quantity immediately available from the supplier's warehouse (or\nfrom the inventory site, for inventory offers), expressed in the\noffer's `unit_of_measurement`. `null` if the supplier did not report\nstock."
                  }
                }
              }
            ],
            "description": "Stock on hand and factory lead-time at the offer level. `null` if the\nsupplier did not report any availability information."
          },
          "valid_from": {
            "type": "string",
            "format": "date",
            "description": "Start of the offer's validity window. `null` means the offer has no\nexplicit start date and is considered valid from creation. Date only,\nno timezone."
          },
          "valid_until": {
            "type": "string",
            "format": "date",
            "description": "End of the offer's validity window — after this date the offer\nshould no longer be honoured. `null` means the offer has no explicit\nexpiry. Date only, no timezone."
          },
          "cancellation_policy": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "required": [
                  "cancellation_window"
                ],
                "properties": {
                  "cancellation_window": {
                    "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Duration"
                  },
                  "is_non_cancellable_non_returnable": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                }
              }
            ],
            "description": "Terms governing cancellation and returns once an order has been\nplaced against this offer: the time window during which the order\ncan still be cancelled, plus an optional non-cancellable /\nnon-returnable (NCNR) flag. `null` if the supplier did not specify\nthese terms."
          },
          "notes": {
            "type": [
              "string",
              "null"
            ],
            "description": "Free-text notes about the offer (e.g. \"Lead-free variant\", \"EOL\nannounced — last-time-buy only\")."
          },
          "creation_date": {
            "type": "string",
            "format": "date-time",
            "description": "When this offer was first created in Luminovo (ISO 8601 with timezone)."
          },
          "superseded_by": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "description": "A wrapper around the offer ID that supersedes the returned offer.",
                "required": [
                  "offer_id"
                ],
                "properties": {
                  "offer_id": {
                    "$ref": "#/components/schemas/OfferIdV2",
                    "description": "The ID of the newer offer that supersedes the returned offer."
                  }
                }
              }
            ],
            "description": "If this offer is outdated due to the existence of a newer equivalent offer,\nthen this field contains the ID of newer offer. `null` if the offer is the\nnewest version with respect to the fields considered for equivalence."
          }
        }
      },
      "StandardPartOfferLinkedPart": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/OffTheShelfPartLite",
                "description": "A catalog (off-the-shelf) part identified by manufacturer + MPN."
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "OffTheShelf"
                    ]
                  }
                }
              }
            ],
            "title": "OffTheShelf",
            "description": "A catalog (off-the-shelf) part identified by manufacturer + MPN."
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/InternalPartNumberLite",
                "description": "A part identified by the tenant's internal part number."
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "InternalPartNumber"
                    ]
                  }
                }
              }
            ],
            "title": "InternalPartNumber",
            "description": "A part identified by the tenant's internal part number."
          }
        ],
        "description": "The part a standard-part offer is for, in a lightweight form suitable for\nembedding inside offer responses. Use the dedicated part endpoints for the\nfull details (e.g. specifications, datasheet links, alternates).\n\nThis is the `linked_part` of a `StandardPart` offer, so the `type` field\nis one of:\n\n- `OffTheShelf` — a catalog part identified by manufacturer + MPN, sold\n  by distributors (Mouser, Digi-Key, Arrow, ...).\n- `InternalPartNumber` — the tenant's own internal identifier for a\n  catalog part, independent of any specific manufacturer."
      },
      "StandardPartPriceBreak": {
        "type": "object",
        "description": "A pricing tier for a standard-part offer. Availability (stock + factory\nlead time) lives at the offer level (`StandardPartOfferData.availability`),\nnot here.",
        "required": [
          "minimum_order_quantity",
          "minimum_packaging_quantity",
          "unit_price"
        ],
        "properties": {
          "minimum_order_quantity": {
            "type": "number",
            "format": "double",
            "description": "Smallest order quantity at which this tier's `unit_price` applies,\nin offer units (also known as MOQ — Minimum Order Quantity)."
          },
          "minimum_packaging_quantity": {
            "type": "number",
            "format": "double",
            "description": "Packaging increment for orders at this tier, in offer units — orders\nmust be a multiple of this value (also known as MPQ — Minimum\nPackaging Quantity, or \"order multiple\"). For example, a reel of\n1000 pieces means orders go in steps of 1000."
          },
          "unit_price": {
            "$ref": "#/components/schemas/MonetaryValue",
            "description": "Price per one offer unit, in the offer's original currency. No\ncurrency conversion is applied — the consumer handles it if needed."
          }
        }
      },
      "StockLocation": {
        "type": "object",
        "description": "A regional stock location belonging to a supplier (e.g. \"Europe\", \"Asia\").\nDifferent regions of the same supplier have independent stock, lead times,\nand prices, which is why every offer is scoped to one stock location.",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Luminovo's internal identifier for this supplier-and-stock-location\npairing. Stable across requests and unique within a tenant."
          },
          "name": {
            "type": "string",
            "description": "The stock location's display name (e.g. \"Europe\", \"Asia\")."
          }
        }
      },
      "String": {
        "type": "string"
      },
      "Supplier": {
        "type": "object",
        "description": "An external supplier (distributor or manufacturer) that this offer is from.\nCombined with a `stock_location`, this fully identifies the supplier branch\nthe offer originates from (different regions have different stock and prices).",
        "required": [
          "id",
          "name",
          "stock_location"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The supplier's unique identifier."
          },
          "name": {
            "type": "string",
            "description": "The supplier's display name (e.g. \"Mouser Electronics\")."
          },
          "number": {
            "type": [
              "string",
              "null"
            ],
            "description": "The tenant's internal number for this supplier (e.g. ERP vendor number)."
          },
          "stock_location": {
            "$ref": "#/components/schemas/StockLocation",
            "description": "The supplier's stock location / region for this offer."
          }
        }
      },
      "SupplierAcceptHeader": {
        "type": "string",
        "title": "SupplierAcceptHeader",
        "enum": [
          "application/api.luminovo.supplier-v1+json"
        ]
      },
      "SupplierCustomPartOfferAcceptHeader": {
        "type": "string",
        "title": "SupplierCustomPartOfferAcceptHeader",
        "enum": [
          "application/api.luminovo.custom-part-offer-v1+json"
        ]
      },
      "SupplierId": {
        "type": "string",
        "format": "uuid"
      },
      "UserAcceptHeader": {
        "type": "string",
        "title": "UserAcceptHeader",
        "enum": [
          "application/api.luminovo.user-v1+json"
        ]
      },
      "UserId": {
        "type": "string",
        "format": "uuid"
      },
      "VolumeUnit": {
        "type": "string",
        "enum": [
          "Liters",
          "Centiliters",
          "Milliliters",
          "UsFluidOunces",
          "UsGallons",
          "UsPints"
        ]
      },
      "WeightUnit": {
        "type": "string",
        "enum": [
          "Kilograms",
          "Grams",
          "Milligrams",
          "Pounds"
        ]
      },
      "types.assembly.assembly_ids.v1.AssemblyIdsResponse": {
        "type": "object",
        "required": [
          "assembly_ids"
        ],
        "properties": {
          "assembly_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "types.assembly.assembly_industry.v1.AssemblyIndustry": {
        "type": "string",
        "enum": [
          "Auto",
          "Medical",
          "Defense",
          "Aero",
          "Rail",
          "Industrial",
          "Construction",
          "Consumer",
          "Other"
        ]
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetail": {
        "type": "object",
        "required": [
          "activity_name",
          "resources_details",
          "activity_process",
          "activity_category",
          "activity_level",
          "drivers_detail",
          "resource_cost_per_hour",
          "costs_per_batch_size",
          "times_per_batch_size",
          "rank"
        ],
        "properties": {
          "activity_internal_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "activity_name": {
            "type": "string"
          },
          "activity_description": {
            "type": [
              "string",
              "null"
            ]
          },
          "activity_configuration_notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "panel_factor": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "description": "write_number of xlsxwriter expects f64"
          },
          "resources_details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ActivityResourceDetail"
            }
          },
          "activity_process": {
            "type": "string"
          },
          "activity_category": {
            "type": "string"
          },
          "activity_level": {
            "type": "string"
          },
          "drivers_detail": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.DriverDetail"
            },
            "description": "write_number of xlsxwriter expects f64"
          },
          "variable_time": {
            "type": [
              "string",
              "null"
            ],
            "format": "time"
          },
          "fixed_time": {
            "type": [
              "string",
              "null"
            ],
            "format": "time"
          },
          "resource_cost_per_hour": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
          },
          "costs_per_batch_size": {
            "$ref": "#/components/schemas/HashMap_types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetailCost"
          },
          "times_per_batch_size": {
            "$ref": "#/components/schemas/HashMap_Option_types.assembly.assembly_manufacturing_data.export.v1.NaiveTime"
          },
          "rank": {
            "type": "integer",
            "format": "int32"
          },
          "manufacturing_scenario_template_instance_id": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ManufacturingScenarioTemplateInstanceId"
              }
            ]
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetailCost": {
        "type": "object",
        "properties": {
          "total_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair"
              }
            ]
          },
          "effective_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair"
              }
            ]
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ActivityResourceDetail": {
        "type": "object",
        "required": [
          "multiplier",
          "resource"
        ],
        "properties": {
          "multiplier": {
            "type": "string"
          },
          "resource": {
            "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ResourceDetail"
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.AssemblySummary": {
        "type": "object",
        "required": [
          "assembly_name"
        ],
        "properties": {
          "assembly_name": {
            "type": "string"
          },
          "assembly_notes": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.CustomOrderSelectionOptionInput": {
        "type": "object",
        "required": [
          "assembly_summary",
          "manufacturing_scenario_summaries",
          "all_batch_sizes"
        ],
        "properties": {
          "assembly_summary": {
            "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.AssemblySummary"
          },
          "manufacturing_scenario_summaries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioExport"
            }
          },
          "all_batch_sizes": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "uniqueItems": true
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.DriverDetail": {
        "type": "object",
        "required": [
          "driver_name",
          "driver_type"
        ],
        "properties": {
          "driver_name": {
            "type": "string"
          },
          "driver_type": {
            "type": "string"
          },
          "driver_count": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "description": "write_number of xlsxwriter expects f64"
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetail": {
        "type": "object",
        "required": [
          "expense_name",
          "process",
          "category",
          "level",
          "drivers_detail",
          "costs_per_batch_size",
          "rank"
        ],
        "properties": {
          "expense_internal_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "expense_name": {
            "type": "string"
          },
          "expense_description": {
            "type": [
              "string",
              "null"
            ]
          },
          "expense_configuration_notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "process": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "level": {
            "type": "string"
          },
          "drivers_detail": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.DriverDetail"
            }
          },
          "costs_per_batch_size": {
            "$ref": "#/components/schemas/HashMap_types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetailCost"
          },
          "rank": {
            "type": "integer",
            "format": "int32"
          },
          "manufacturing_scenario_template_instance_id": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ManufacturingScenarioTemplateInstanceId"
              }
            ]
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetailCost": {
        "type": "object",
        "properties": {
          "variable_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
              }
            ]
          },
          "fixed_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
              }
            ]
          },
          "total_cost": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair"
              }
            ]
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioExport": {
        "type": "object",
        "required": [
          "summary",
          "activity_configuration_details",
          "expense_configuration_details"
        ],
        "properties": {
          "summary": {
            "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummary"
          },
          "activity_configuration_details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ActivityConfigurationDetail"
            }
          },
          "expense_configuration_details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.ExpenseConfigurationDetail"
            }
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummary": {
        "type": "object",
        "required": [
          "manufacturing_scenario_name",
          "activity_count",
          "expense_count",
          "breakdown_per_batch_size"
        ],
        "properties": {
          "manufacturing_scenario_name": {
            "type": "string"
          },
          "manufacturing_scenario_notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "sourcing_scenario_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "activity_count": {
            "type": "number",
            "format": "double"
          },
          "expense_count": {
            "type": "number",
            "format": "double"
          },
          "breakdown_per_batch_size": {
            "$ref": "#/components/schemas/HashMap_types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummaryBreakdown"
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ManufacturingScenarioSummaryBreakdown": {
        "type": "object",
        "required": [
          "total_unit_time",
          "total_batch_time",
          "total_unit_cost",
          "total_batch_cost",
          "total_project_cost",
          "total_effective_unit_cost",
          "total_effective_batch_cost"
        ],
        "properties": {
          "total_unit_time": {
            "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.NaiveTime"
          },
          "total_batch_time": {
            "$ref": "#/components/schemas/types.assembly.assembly_manufacturing_data.export.v1.NaiveTime"
          },
          "total_unit_cost": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
          },
          "total_batch_cost": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
          },
          "total_project_cost": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
          },
          "total_effective_unit_cost": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
          },
          "total_effective_batch_cost": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
          }
        }
      },
      "types.assembly.assembly_manufacturing_data.export.v1.NaiveTime": {
        "type": "string",
        "format": "time"
      },
      "types.assembly.assembly_manufacturing_data.export.v1.ResourceDetail": {
        "type": "object",
        "required": [
          "name",
          "resource_type"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "resource_type": {
            "type": "string"
          },
          "internal_number": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.assembly.assembly_type.v1.AssemblyType": {
        "type": "string",
        "enum": [
          "Box",
          "Pcba",
          "PcbOnly",
          "Cable",
          "System",
          "BOM"
        ]
      },
      "types.assembly.v1.AssemblyInput": {
        "type": "object",
        "required": [
          "rfq",
          "customer",
          "type",
          "name",
          "industry"
        ],
        "properties": {
          "rfq": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the RfQ (Request for Quote) this assembly belongs to"
          },
          "customer": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the customer who owns this assembly"
          },
          "type": {
            "$ref": "#/components/schemas/types.assembly.assembly_type.v1.AssemblyType",
            "description": "The type of assembly being created"
          },
          "parent_assembly": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "Optional parent assembly ID. If provided, this assembly becomes a sub-assembly of the specified parent.\nIf not provided, this assembly becomes a top-level assembly within the RfQ.\nThis allows building hierarchical assembly structures (e.g., a main PCB containing smaller sub-assemblies)."
          },
          "name": {
            "type": "string",
            "description": "A unique name/identifier for the assembly within the RfQ.\nThis name helps identify the assembly in the BOM structure and should be descriptive\n(e.g., \"Main PCB Assembly\", \"Power Supply Module\", \"Display Interface Board\")."
          },
          "notes": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional notes or description for the assembly"
          },
          "industry": {
            "$ref": "#/components/schemas/types.assembly.assembly_industry.v1.AssemblyIndustry",
            "description": "The industry this assembly belongs to"
          }
        }
      },
      "types.assembly.v1.CreateAssemblyPcbRequest": {
        "type": "object"
      },
      "types.assembly.v1.CreateAssemblyPcbResponse": {
        "type": "object",
        "required": [
          "pcb_id",
          "custom_part_specification_id"
        ],
        "properties": {
          "pcb_id": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the created PCB"
          },
          "custom_part_specification_id": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the custom part specification"
          }
        }
      },
      "types.assembly.v1.SimpleAssemblyResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "type",
          "customer",
          "industry"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/types.assembly.assembly_type.v1.AssemblyType"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "customer": {
            "type": "string",
            "format": "uuid"
          },
          "industry": {
            "$ref": "#/components/schemas/types.assembly.assembly_industry.v1.AssemblyIndustry"
          },
          "parent_assembly": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "rfq": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.AdditionalCostResponse": {
        "type": "object",
        "required": [
          "other_costs",
          "post_profit_costs",
          "sub_total_cost"
        ],
        "properties": {
          "other_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.ExtraCostResponse"
            }
          },
          "post_profit_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.ExtraCostResponse"
            }
          },
          "sub_total_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Total of all other costs and post profit costs."
          },
          "profit": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse"
              }
            ]
          },
          "discount": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse"
              }
            ]
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.BatchCostResponse": {
        "type": "object",
        "required": [
          "material_cost",
          "manufacturing_cost",
          "additional_cost",
          "project_cost",
          "summarized_cost",
          "checkout_cost"
        ],
        "properties": {
          "material_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.MaterialCostResponse"
          },
          "manufacturing_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.ManufacturingCostResponse"
          },
          "additional_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.AdditionalCostResponse"
          },
          "project_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.ProjectCostResponse"
          },
          "summarized_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.CostSummaryResponse",
            "description": "If the project cost is separated, it isn't added to the summarized cost."
          },
          "checkout_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.CostSummaryResponse",
            "description": "Final cost representing what is displayed at checkout screen.\nIf the project cost is separated (or any other type of cost), it is added to\nthis cost. This is in contrast to `summarized_cost` with excludes separated costs."
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.BatchSizeDataResponse": {
        "type": "object",
        "required": [
          "batch_size",
          "cost"
        ],
        "properties": {
          "batch_size": {
            "type": "integer",
            "format": "int32"
          },
          "cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.BatchCostResponse"
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.CalculationAssemblyCostResponse": {
        "type": "object",
        "required": [
          "id",
          "calculation_assembly_details",
          "costs",
          "created_at",
          "updated_at",
          "is_cost_frozen"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "calculation_assembly_details": {
            "type": "string",
            "format": "uuid"
          },
          "costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.ScenarioCostResponse"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "is_cost_frozen": {
            "type": "boolean"
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.CalculationResult_Option_f64": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "data",
              "result"
            ],
            "properties": {
              "data": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "number",
                    "format": "double"
                  }
                ]
              },
              "result": {
                "type": "string",
                "enum": [
                  "Ok"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "result"
            ],
            "properties": {
              "data": {
                "type": "string"
              },
              "result": {
                "type": "string",
                "enum": [
                  "ScriptError"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "result"
            ],
            "properties": {
              "data": {
                "type": "string"
              },
              "result": {
                "type": "string",
                "enum": [
                  "UnknownIdentifier"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "result"
            ],
            "properties": {
              "data": {
                "type": "string"
              },
              "result": {
                "type": "string",
                "enum": [
                  "NullValue"
                ]
              }
            }
          }
        ]
      },
      "types.calculation.calculation_assembly_cost.v1.CostSummaryResponse": {
        "type": "object",
        "required": [
          "total_cost",
          "total_profit",
          "total_price"
        ],
        "properties": {
          "total_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse"
          },
          "total_profit": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse"
          },
          "total_price": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse"
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.CostTypeResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "$ref": "#/components/schemas/MonetaryValue"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Fixed"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Fraction"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.OverridableFormulaResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Formula"
                ]
              }
            }
          }
        ]
      },
      "types.calculation.calculation_assembly_cost.v1.CustomCostResponse": {
        "type": "object",
        "required": [
          "extra_costs"
        ],
        "properties": {
          "profit": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse"
              }
            ]
          },
          "discount": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse"
              }
            ]
          },
          "extra_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.ExtraCostResponse"
            }
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse": {
        "type": "object",
        "required": [
          "cost_specification",
          "unit_cost_value",
          "unit_cost_fraction",
          "total_cost_value",
          "is_locked"
        ],
        "properties": {
          "cost_specification": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.CostTypeResponse"
          },
          "unit_cost_value": {
            "$ref": "#/components/schemas/MonetaryValue"
          },
          "unit_cost_fraction": {
            "type": "string"
          },
          "total_cost_value": {
            "$ref": "#/components/schemas/MonetaryValue"
          },
          "is_locked": {
            "type": "boolean",
            "description": "Determine if the row is locked. Locked means, that from the template this row originates from it is not supposed to be changed by the user when viewing calculation."
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.ExtraCostResponse": {
        "type": "object",
        "required": [
          "name",
          "cost"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse"
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse": {
        "type": "object",
        "required": [
          "unit_cost",
          "total_cost"
        ],
        "properties": {
          "unit_cost": {
            "$ref": "#/components/schemas/MonetaryValue"
          },
          "total_cost": {
            "$ref": "#/components/schemas/MonetaryValue"
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.FormulaCostType": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "required": [
                  "script",
                  "currency"
                ],
                "properties": {
                  "script": {
                    "type": "string"
                  },
                  "currency": {
                    "$ref": "#/components/schemas/CurrencyCode"
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "Fixed"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "required": [
                  "script"
                ],
                "properties": {
                  "script": {
                    "type": "string"
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "Fraction"
                ]
              }
            }
          }
        ]
      },
      "types.calculation.calculation_assembly_cost.v1.ManufacturingCostResponse": {
        "type": "object",
        "required": [
          "base_cost",
          "cost",
          "custom_cost",
          "sub_total_cost",
          "price"
        ],
        "properties": {
          "base_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Manufacturing cost excluding additives (e.g. project cost)."
          },
          "cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Manufacturing cost including additives (e.g. project cost)."
          },
          "custom_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.CustomCostResponse"
          },
          "sub_total_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Total of all the costs excluding profits and discount."
          },
          "price": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Total of all the unit cells for `cost` and `custom_cost`."
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.MaterialCostResponse": {
        "type": "object",
        "required": [
          "base_cost",
          "cost",
          "excess_material_cost",
          "custom_cost",
          "sub_total_cost",
          "price"
        ],
        "properties": {
          "base_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Material cost excluding additives (e.g. excess material cost)."
          },
          "cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Material cost including additives (e.g. excess material cost)."
          },
          "excess_material_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse"
          },
          "custom_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.CustomCostResponse"
          },
          "sub_total_cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Total of all the costs excluding profits and discount."
          },
          "price": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Total of all the unit cells for `cost` and `custom_cost`."
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.OverridableFormula": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "required": [
                  "calculated",
                  "manually_overridden"
                ],
                "properties": {
                  "calculated": {
                    "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FormulaCostType"
                  },
                  "manually_overridden": {
                    "type": "string"
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "Overridden"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "required": [
                  "calculated"
                ],
                "properties": {
                  "calculated": {
                    "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FormulaCostType"
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "Evaluated"
                ]
              }
            }
          }
        ]
      },
      "types.calculation.calculation_assembly_cost.v1.OverridableFormulaResponse": {
        "type": "object",
        "required": [
          "result",
          "formula"
        ],
        "properties": {
          "result": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.CalculationResult_Option_f64"
          },
          "formula": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.OverridableFormula"
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.ProjectCostResponse": {
        "type": "object",
        "required": [
          "cost",
          "price",
          "activity_costs",
          "expense_costs"
        ],
        "properties": {
          "cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse"
          },
          "profit": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.DynamicCostCellResponse"
              }
            ]
          },
          "price": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse",
            "description": "Total of all the unit cells for `cost` and `profit`."
          },
          "activity_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.ProjectEntityCostCellResponse"
            }
          },
          "expense_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.ProjectEntityCostCellResponse"
            }
          },
          "one_time_costs": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse"
              }
            ]
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.ProjectEntityCostCellResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "cost"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "cost": {
            "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.FixedCostCellResponse"
          }
        }
      },
      "types.calculation.calculation_assembly_cost.v1.ScenarioCostResponse": {
        "type": "object",
        "required": [
          "scenario_combination_id",
          "manufacturing_scenario_id",
          "sourcing_scenario_id",
          "order_size",
          "batch_size_costs"
        ],
        "properties": {
          "scenario_combination_id": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the scenario combination that was submitted for calculations."
          },
          "manufacturing_scenario_id": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the manufacturing scenario that this scenario cost is associated with. This may be absent for frozen\ncosts which were created before April 3rd, 2025."
          },
          "sourcing_scenario_id": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the sourcing scenario that this scenario cost is associated with. This may be absent for frozen costs\nwhich were created before April 3rd, 2025."
          },
          "order_size": {
            "type": "integer",
            "format": "int32"
          },
          "sourcing_total_availability": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.availability.v1.AggregatedAvailabilityIncludingShippingTime"
              }
            ]
          },
          "manufacturing_lead_time": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "total_lead_time": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "batch_size_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.calculation.calculation_assembly_cost.v1.BatchSizeDataResponse"
            }
          }
        }
      },
      "types.compliance.v1.ComplianceStatus": {
        "type": "string",
        "description": "The result of a compliance determination.",
        "enum": [
          "NonCompliant",
          "Unknown",
          "NotRequired",
          "CompliantWithExemption",
          "Compliant"
        ]
      },
      "types.compliance.v1.ConflictMineralStatus": {
        "type": "string",
        "description": "The result of a conflict-minerals compliance determination.",
        "enum": [
          "Unknown",
          "Compliant"
        ]
      },
      "types.compliance.v1.EccnGovernance": {
        "type": "string",
        "description": "The United States regulatory regime under which the part's Export Control Classification\nNumber (ECCN) was assigned.",
        "enum": [
          "EAR",
          "ITAR"
        ]
      },
      "types.compliance.v1.EmissionDataResponse": {
        "oneOf": [
          {
            "type": "object",
            "description": "Emissions data is available.",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "description": "Emissions data is available.",
                "required": [
                  "product_phase_gwp_in_kg_co2e"
                ],
                "properties": {
                  "product_phase_gwp_in_kg_co2e": {
                    "type": "string",
                    "description": "Global warming potential for the product phase, measured in kilograms of CO2\nequivalent per part."
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "Available"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "An emissions data request completed, but no data was available for the part.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "NotAvailable"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "Part-level emissions data is not enabled.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "NotEnabled"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "Emissions data has not been requested for the part.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "NotFetched"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "Emissions data has been requested and is still being fetched.",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "description": "Emissions data has been requested and is still being fetched.",
                "required": [
                  "requested_at"
                ],
                "properties": {
                  "requested_at": {
                    "type": "string",
                    "format": "date-time",
                    "description": "When the emissions data request was created."
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "Requested"
                ]
              }
            }
          }
        ],
        "description": "The availability of product-phase greenhouse-gas emissions data for a part.\n\nEmissions data is fetched separately from other part information and may still be pending or\nunavailable."
      },
      "types.compliance.v1.Qualification": {
        "type": "string",
        "enum": [
          "DLA",
          "RadHard",
          "Space",
          "UL"
        ]
      },
      "types.compliance.v1.Region": {
        "type": "string",
        "description": "A country, area, or geographical region according to the United Nations M49 standard.",
        "enum": [
          "Unknown",
          "World",
          "Africa",
          "NorthernAfrica",
          "SubSaharanAfrica",
          "WesternAfrica",
          "EasternAfrica",
          "MiddleAfrica",
          "SouthernAfrica",
          "Americas",
          "NorthernAmerica",
          "LatinAmericaAndTheCaribbean",
          "SouthAmerica",
          "CentralAmerica",
          "Caribbean",
          "Asia",
          "EasternAsia",
          "SouthernAsia",
          "SouthEasternAsia",
          "CentralAsia",
          "WesternAsia",
          "Europe",
          "SouthernEurope",
          "EasternEurope",
          "NorthernEurope",
          "ChannelIslands",
          "WesternEurope",
          "Oceania",
          "AustraliaAndNewZealand",
          "Melanesia",
          "Micronesia",
          "Polynesia",
          "Algeria",
          "Egypt",
          "Libya",
          "Morocco",
          "Sudan",
          "Tunisia",
          "WesternSahara",
          "BritishIndianOceanTerritory",
          "Burundi",
          "Comoros",
          "Djibouti",
          "Eritrea",
          "Ethiopia",
          "FrenchSouthernTerritories",
          "Kenya",
          "Madagascar",
          "Malawi",
          "Mauritius",
          "Mayotte",
          "Mozambique",
          "Reunion",
          "Rwanda",
          "Seychelles",
          "Somalia",
          "SouthSudan",
          "Uganda",
          "UnitedRepublicOfTanzania",
          "Zambia",
          "Zimbabwe",
          "Angola",
          "Cameroon",
          "CentralAfricanRepublic",
          "Chad",
          "Congo",
          "DemocraticRepublicOfTheCongo",
          "EquatorialGuinea",
          "Gabon",
          "SaoTomeAndPrincipe",
          "Botswana",
          "Eswatini",
          "Lesotho",
          "Namibia",
          "SouthAfrica",
          "Benin",
          "BurkinaFaso",
          "CaboVerde",
          "CoteDIvore",
          "Gambia",
          "Ghana",
          "Guinea",
          "GuineaBissau",
          "Liberia",
          "Mali",
          "Mauritania",
          "Niger",
          "Nigeria",
          "SaintHelena",
          "Senegal",
          "SierraLeone",
          "Togo",
          "Anguilla",
          "AntiguaAndBarbuda",
          "Aruba",
          "Bahamas",
          "Barbados",
          "BonaireAndSintEustatiusAndSaba",
          "BritishVirginIslands",
          "CaymanIslands",
          "Cuba",
          "Curacao",
          "Dominica",
          "DominicanRepublic",
          "Grenada",
          "Guadeloupe",
          "Haiti",
          "Jamaica",
          "Martinique",
          "Montserrat",
          "PuertoRico",
          "SaintBarthelemy",
          "SaintKittsAndNevis",
          "SaintLucia",
          "SaintMartin",
          "SaintVincentAndTheGrenadines",
          "SintMaarten",
          "TrinidadAndTobago",
          "TurksAndCaicosIslands",
          "UnitedStatesVirginIslands",
          "Belize",
          "CostaRica",
          "ElSalvador",
          "Guatemala",
          "Honduras",
          "Mexico",
          "Nicaragua",
          "Panama",
          "Argentina",
          "Bolivia",
          "BouvetIsland",
          "Brazil",
          "Chile",
          "Colombia",
          "Ecuador",
          "FalklandIslands",
          "FrenchGuiana",
          "Guyana",
          "Paraguay",
          "Peru",
          "SouthGeorgiaAndTheSouthSandwichIslands",
          "Suriname",
          "Uruguay",
          "Venezuela",
          "Bermuda",
          "Canada",
          "Greenland",
          "SaintPierreAndMiquelon",
          "UnitedStatesOfAmerica",
          "Antarctica",
          "Kazakhstan",
          "Kyrgyzstan",
          "Tajikistan",
          "Turkmenistan",
          "Uzbekistan",
          "China",
          "Taiwan",
          "HongKong",
          "Macao",
          "DemocraticPeoplesRepublicOfKorea",
          "Japan",
          "Mongolia",
          "RepublicOfKorea",
          "BruneiDarussalam",
          "Cambodia",
          "Indonesia",
          "LaoPeoplesDemocraticRepublic",
          "Malaysia",
          "Myanmar",
          "Philippines",
          "Singapore",
          "Thailand",
          "TimorLeste",
          "VietNam",
          "Afghanistan",
          "Bangladesh",
          "Bhutan",
          "India",
          "Iran",
          "Maldives",
          "Nepal",
          "Pakistan",
          "SriLanka",
          "Armenia",
          "Azerbaijan",
          "Bahrain",
          "Cyprus",
          "Georgia",
          "Iraq",
          "Israel",
          "Jordan",
          "Kuwait",
          "Lebanon",
          "Oman",
          "Qatar",
          "SaudiArabia",
          "StateOfPalestine",
          "SyrianArabRepublic",
          "Turkey",
          "UnitedArabEmirates",
          "Yemen",
          "Belarus",
          "Bulgaria",
          "Czechia",
          "Hungary",
          "Poland",
          "RepublicOfMoldova",
          "Romania",
          "RussianFederation",
          "Slovakia",
          "Ukraine",
          "AlandIslands",
          "Guernsey",
          "Jersey",
          "Sark",
          "Denmark",
          "Estonia",
          "FaroeIslands",
          "Finland",
          "Iceland",
          "Ireland",
          "IsleOfMan",
          "Latvia",
          "Lithuania",
          "Norway",
          "SvalbardAndJanMayenIslands",
          "Sweden",
          "UnitedKingdomOfGreatBritainAndNorthernIreland",
          "Albania",
          "Andorra",
          "BosniaAndHerzegovina",
          "Croatia",
          "Gibraltar",
          "Greece",
          "HolySee",
          "Italy",
          "Malta",
          "Montenegro",
          "NorthMacedonia",
          "Portugal",
          "SanMarino",
          "Serbia",
          "Slovenia",
          "Spain",
          "Austria",
          "Belgium",
          "France",
          "Germany",
          "Liechtenstein",
          "Luxembourg",
          "Monaco",
          "Netherlands",
          "Switzerland",
          "Australia",
          "ChristmasIsland",
          "CocosKeelingIslands",
          "HeardIslandAndMcDonaldIslands",
          "NewZealand",
          "NorfolkIsland",
          "Fiji",
          "NewCaledonia",
          "PapuaNewGuinea",
          "SolomonIslands",
          "Vanuatu",
          "Guam",
          "Kiribati",
          "MarshallIslands",
          "FederatedStatesOfMicronesia",
          "Nauru",
          "NorthernMarianaIslands",
          "Palau",
          "UnitedStatesMinorOutlyingIslands",
          "AmericanSamoa",
          "CookIslands",
          "FrenchPolynesia",
          "Niue",
          "Pitcairn",
          "Samoa",
          "Tokelau",
          "Tonga",
          "Tuvalu",
          "WallisAndFutunaIslands"
        ]
      },
      "types.compliance.v1.RohsVersion": {
        "type": "string",
        "enum": [
          "Rohs_2002_95_EC",
          "Rohs2_2011_65_EU",
          "Rohs2_2015_863_EU"
        ]
      },
      "types.custom_part.panel.v1.Depanelization": {
        "type": "string",
        "enum": [
          "VCut",
          "Milling",
          "MillingAndVCut"
        ]
      },
      "types.custom_part.panel.v1.Padding": {
        "type": "object",
        "required": [
          "top_in_mm",
          "bottom_in_mm",
          "left_in_mm",
          "right_in_mm"
        ],
        "properties": {
          "top_in_mm": {
            "type": "string"
          },
          "bottom_in_mm": {
            "type": "string"
          },
          "left_in_mm": {
            "type": "string"
          },
          "right_in_mm": {
            "type": "string"
          }
        }
      },
      "types.custom_part.panel.v1.PanelDetails": {
        "type": "object",
        "required": [
          "row_count",
          "column_count",
          "horizontal_spacing_in_mm",
          "vertical_spacing_in_mm",
          "min_milling_distance_in_mm",
          "padding",
          "depanelization",
          "pcb_is_rotated"
        ],
        "properties": {
          "row_count": {
            "type": "integer",
            "format": "int32"
          },
          "column_count": {
            "type": "integer",
            "format": "int32"
          },
          "horizontal_spacing_in_mm": {
            "type": "string"
          },
          "vertical_spacing_in_mm": {
            "type": "string"
          },
          "min_milling_distance_in_mm": {
            "type": "string"
          },
          "padding": {
            "$ref": "#/components/schemas/types.custom_part.panel.v1.Padding"
          },
          "depanelization": {
            "$ref": "#/components/schemas/types.custom_part.panel.v1.Depanelization"
          },
          "panel_preference": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "max_x_outs": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "pcb_is_rotated": {
            "type": "boolean"
          }
        }
      },
      "types.custom_part.v1.CustomPart": {
        "type": "object",
        "required": [
          "id",
          "part_type",
          "category",
          "reach_compliant",
          "rohs_compliant"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "part_type": {
            "$ref": "#/components/schemas/types.custom_part.v1.CustomPartType"
          },
          "category": {
            "$ref": "#/components/schemas/types.custom_part.v1.CustomPartCategoryDetails"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "reach_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus"
          },
          "rohs_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus"
          }
        }
      },
      "types.custom_part.v1.CustomPartCategory": {
        "type": "object",
        "required": [
          "id",
          "category",
          "origin"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "category": {
            "type": "string"
          },
          "identifier": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "origin": {
            "$ref": "#/components/schemas/types.custom_part.v1.CustomPartCategoryOrigin"
          },
          "parent": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        }
      },
      "types.custom_part.v1.CustomPartCategoryDetails": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "PCB"
            ],
            "properties": {
              "PCB": {
                "type": "object",
                "required": [
                  "user_category"
                ],
                "properties": {
                  "pcb_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uuid"
                  },
                  "user_category": {
                    "$ref": "#/components/schemas/types.custom_part.v1.CustomPartCategory"
                  }
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "Other"
            ],
            "properties": {
              "Other": {
                "type": "object",
                "required": [
                  "user_category"
                ],
                "properties": {
                  "user_category": {
                    "$ref": "#/components/schemas/types.custom_part.v1.CustomPartCategory"
                  }
                }
              }
            }
          }
        ]
      },
      "types.custom_part.v1.CustomPartCategoryOrigin": {
        "type": "string",
        "enum": [
          "System",
          "User",
          "Import"
        ]
      },
      "types.custom_part.v1.CustomPartType": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "content",
              "name"
            ],
            "properties": {
              "content": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uuid"
              },
              "name": {
                "type": "string",
                "enum": [
                  "PCB"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "Mechanical"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "Plastic"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "Cable"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "Packaging"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "Label"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "Other"
                ]
              }
            }
          }
        ]
      },
      "types.customer.v1.AllCustomerResponse": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.customer.v1.CustomerResponse"
            }
          }
        }
      },
      "types.customer.v1.CustomerBillingAddress": {
        "type": "object",
        "properties": {
          "line1": {
            "type": [
              "string",
              "null"
            ],
            "description": "Country code in ISO 3166-1 alpha-2 format."
          },
          "line2": {
            "type": [
              "string",
              "null"
            ]
          },
          "postal_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "country_code": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.customer.v1.CustomerBusinessData": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "customer_type"
            ],
            "properties": {
              "customer_type": {
                "type": "string",
                "enum": [
                  "private"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "customer_type"
            ],
            "properties": {
              "vat_id": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/types.vat.v1.CompleteVatId"
                  }
                ]
              },
              "commercial_register_number": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "customer_type": {
                "type": "string",
                "enum": [
                  "business"
                ]
              }
            }
          }
        ]
      },
      "types.customer.v1.CustomerInput": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "default_contact_person": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "customer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "language": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.customer.v1.Language"
              }
            ]
          },
          "vat_id": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.vat.v1.CompleteVatId"
              }
            ]
          },
          "commercial_register_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "billing_address": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.customer.v1.CustomerBillingAddress"
              }
            ]
          }
        }
      },
      "types.customer.v1.CustomerResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "language"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "billing_address": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.customer.v1.CustomerBillingAddress"
              }
            ]
          },
          "default_contact_person": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "customer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "language": {
            "$ref": "#/components/schemas/types.customer.v1.Language"
          },
          "vat_id": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.vat.v1.CompleteVatId"
              }
            ]
          },
          "commercial_register_number": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.customer.v1.CustomerUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "default_contact_person": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "customer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "language": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.customer.v1.Language"
              }
            ]
          },
          "business_data": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.customer.v1.CustomerBusinessData",
                "description": "If not provided, the customer type will not be updated."
              }
            ]
          },
          "billing_address": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.customer.v1.CustomerBillingAddress"
              }
            ]
          }
        }
      },
      "types.customer.v1.Language": {
        "type": "string",
        "enum": [
          "de",
          "en",
          "es",
          "fr",
          "it",
          "th",
          "zh",
          "ja",
          "hi",
          "cs",
          "nl",
          "hu",
          "pt",
          "fi",
          "sv",
          "pl",
          "tr"
        ]
      },
      "types.demand.v1.DemandCreationRequestItem": {
        "type": "object",
        "required": [
          "type",
          "internal_part_number",
          "quantity",
          "delivery_start_date",
          "delivery_end_date"
        ],
        "properties": {
          "type": {
            "$ref": "#/components/schemas/types.demand.v1.DemandType",
            "description": "\"gross\": Represents gross demand (total demand before considering inventory)\n\"net\": Represents net demand (demand after considering inventory)"
          },
          "internal_part_number": {
            "$ref": "#/components/schemas/InternalPartNumberIdentifiers",
            "description": "The internal part number. Can be for an assembly or a component."
          },
          "quantity": {
            "$ref": "#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit"
          },
          "ship_to_site": {
            "type": [
              "string",
              "null"
            ],
            "description": "The name or site number of the site that will receive the item. Can be an internal or external (EMS) site."
          },
          "supplier": {
            "type": [
              "string",
              "null"
            ],
            "description": "The name or site number of the site that will supply the item. Only used for assembly demands.\nCan be an internal or external (EMS) site that manufactures the assembly.\nThe supplier site of an assembly will be used as the Ship to site for the calculated component demands (as the site that does the assembly needs to receive the components)."
          },
          "production_start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Only used for assembly demands.\nThe production start date will be used as the delivery start date for the calculated demands of components from this assembly (because you need the components a little earlier to finish the assembly and fulfill the delivery start date of the assembly).\nIf no production start date is given, the delivery start date is used for the calculated component demands."
          },
          "delivery_start_date": {
            "type": "string",
            "format": "date",
            "description": "The start and end date indicate the time range for which the given quantity is needed.\nE.g. 2025-01-01 for the start date and 2025-12-31 for the end date indicates an annual demand for 2025.\nUsing the same date for start and end date indicates that the given quantity is needed on that specific date."
          },
          "delivery_end_date": {
            "type": "string",
            "format": "date",
            "description": "If not specified, the delivery start date will be used."
          },
          "end_customer": {
            "type": [
              "string",
              "null"
            ],
            "description": "The customer number or name for the recipient of the finished good, regardless of any intermediary recipient (like internal or external sites used for assembly)."
          }
        }
      },
      "types.demand.v1.DemandType": {
        "type": "string",
        "enum": [
          "gross",
          "net"
        ]
      },
      "types.flexible_calculation.v0.AllCalculationPlansResponse": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/types.flexible_calculation.v0.CalculationPlanResponse"
        }
      },
      "types.flexible_calculation.v0.AssemblyScenarioConfigurationResponse": {
        "type": "object",
        "required": [
          "assembly_id",
          "sourcing_scenario",
          "batch_size"
        ],
        "properties": {
          "assembly_id": {
            "type": "string",
            "format": "uuid"
          },
          "sourcing_scenario": {
            "type": "string",
            "format": "uuid"
          },
          "manufacturing_scenario": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "batch_size": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          }
        }
      },
      "types.flexible_calculation.v0.CalculationPlanLineItemResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "display_only",
          "value",
          "lock_mode"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "display_only": {
            "type": "boolean"
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "$ref": "#/components/schemas/types.flexible_calculation.v0.LineItemValueResponse"
          },
          "lock_mode": {
            "$ref": "#/components/schemas/types.flexible_calculation.v0.LockModeResponse"
          },
          "exported_variable_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        }
      },
      "types.flexible_calculation.v0.CalculationPlanResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "rfq_id",
          "currency",
          "main_assembly",
          "scenarios",
          "sections",
          "frozen",
          "raw_template",
          "selected_template",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "rfq_id": {
            "type": "string",
            "format": "uuid"
          },
          "currency": {
            "type": "string"
          },
          "main_assembly": {
            "type": "string",
            "format": "uuid"
          },
          "scenarios": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.flexible_calculation.v0.CalculationScenarioResponse"
            }
          },
          "sections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.flexible_calculation.v0.CalculationPlanSectionResponse"
            }
          },
          "frozen": {
            "type": "boolean"
          },
          "raw_template": {},
          "selected_template": {
            "type": "string"
          },
          "frozen_result": {},
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "types.flexible_calculation.v0.CalculationPlanSectionResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "line_items",
          "lock_mode"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "line_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.flexible_calculation.v0.CalculationPlanLineItemResponse"
            }
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          },
          "lock_mode": {
            "$ref": "#/components/schemas/types.flexible_calculation.v0.LockModeResponse"
          }
        }
      },
      "types.flexible_calculation.v0.CalculationScenarioResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "assembly_configurations"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "assembly_configurations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.flexible_calculation.v0.AssemblyScenarioConfigurationResponse"
            }
          }
        }
      },
      "types.flexible_calculation.v0.ComparisonResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "op"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "op": {
                "type": "string",
                "enum": [
                  "greater_than"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "op"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "op": {
                "type": "string",
                "enum": [
                  "greater_than_or_equal"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "op"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "op": {
                "type": "string",
                "enum": [
                  "less_than"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "op"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "op": {
                "type": "string",
                "enum": [
                  "less_than_or_equal"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "op"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "op": {
                "type": "string",
                "enum": [
                  "equal"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "op"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "op": {
                "type": "string",
                "enum": [
                  "not_equal"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "op"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.ComparisonResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.ComparisonResponse"
              },
              "op": {
                "type": "string",
                "enum": [
                  "and"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "op"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.ComparisonResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.ComparisonResponse"
              },
              "op": {
                "type": "string",
                "enum": [
                  "or"
                ]
              }
            }
          }
        ]
      },
      "types.flexible_calculation.v0.CostLevelResponse": {
        "type": "string",
        "enum": [
          "unit",
          "batch",
          "project"
        ]
      },
      "types.flexible_calculation.v0.FixedItemValueResponse": {
        "type": "object",
        "required": [
          "value"
        ],
        "properties": {
          "value": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "types.flexible_calculation.v0.FormulaDisplayUnitResponse": {
        "type": "string",
        "enum": [
          "percentage",
          "number",
          "dimensionless_number",
          "monetary_value"
        ]
      },
      "types.flexible_calculation.v0.FormulaNodeResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "value",
              "type"
            ],
            "properties": {
              "value": {
                "type": "number",
                "format": "double"
              },
              "type": {
                "type": "string",
                "enum": [
                  "number"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "reference",
              "type"
            ],
            "properties": {
              "reference": {
                "type": "string",
                "format": "uuid"
              },
              "type": {
                "type": "string",
                "enum": [
                  "line_item"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "driver",
              "type"
            ],
            "properties": {
              "driver": {},
              "type": {
                "type": "string",
                "enum": [
                  "driver"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "batch_size"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "order_size"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "type"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "sum"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "type"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "subtract"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "type"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "multiply"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "type"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "divide"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "test",
              "then",
              "else_",
              "type"
            ],
            "properties": {
              "test": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.ComparisonResponse"
              },
              "then": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "else_": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "if"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "operand",
              "decimal_places",
              "type"
            ],
            "properties": {
              "operand": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "decimal_places": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "round"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "operand",
              "type"
            ],
            "properties": {
              "operand": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "log_e"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "operand",
              "type"
            ],
            "properties": {
              "operand": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "floor"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "operand",
              "type"
            ],
            "properties": {
              "operand": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "ceil"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "type"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "min"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "left",
              "right",
              "type"
            ],
            "properties": {
              "left": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "right": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "max"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "base",
              "exponent",
              "type"
            ],
            "properties": {
              "base": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "exponent": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "pow"
                ]
              }
            }
          }
        ]
      },
      "types.flexible_calculation.v0.LineItemValueResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "level",
              "values",
              "display_unit",
              "type"
            ],
            "properties": {
              "level": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.CostLevelResponse"
              },
              "values": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/types.flexible_calculation.v0.FixedItemValueResponse"
                },
                "propertyNames": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "display_unit": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaDisplayUnitResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "fixed"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "reference_items",
              "values",
              "type"
            ],
            "properties": {
              "reference_items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/CalculationLineItemId"
                },
                "uniqueItems": true
              },
              "values": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/types.flexible_calculation.v0.PercentageItemValueResponse"
                },
                "propertyNames": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "percentage"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "reference_item",
              "values",
              "type"
            ],
            "properties": {
              "reference_item": {
                "type": "string",
                "format": "uuid"
              },
              "values": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/types.flexible_calculation.v0.PercentageItemValueResponse"
                },
                "propertyNames": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "reverse_percentage"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "scope",
              "range",
              "type"
            ],
            "properties": {
              "scope": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.SubtotalScopeResponse"
              },
              "range": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.SubtotalRangeResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "subtotal"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "level",
              "formula",
              "display_unit",
              "type"
            ],
            "properties": {
              "level": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.CostLevelResponse"
              },
              "assembly": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uuid"
              },
              "formula": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaNodeResponse"
              },
              "display_unit": {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.FormulaDisplayUnitResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "formula"
                ]
              }
            }
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.VariableLineItemResponse"
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "variable"
                    ]
                  }
                }
              }
            ]
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "notes"
                ]
              }
            }
          }
        ]
      },
      "types.flexible_calculation.v0.LockModeResponse": {
        "type": "string",
        "enum": [
          "none",
          "partial",
          "full"
        ]
      },
      "types.flexible_calculation.v0.ManufacturingVariableLineItemResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "assembly_id",
              "show_process_breakdown",
              "variable"
            ],
            "properties": {
              "assembly_id": {
                "type": "string",
                "format": "uuid"
              },
              "show_process_breakdown": {
                "type": "boolean"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "unit_costs"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly_id",
              "show_process_breakdown",
              "variable"
            ],
            "properties": {
              "assembly_id": {
                "type": "string",
                "format": "uuid"
              },
              "show_process_breakdown": {
                "type": "boolean"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "batch_costs"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly_id",
              "show_process_breakdown",
              "variable"
            ],
            "properties": {
              "assembly_id": {
                "type": "string",
                "format": "uuid"
              },
              "show_process_breakdown": {
                "type": "boolean"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "total_cost"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly_id",
              "show_process_breakdown",
              "variable"
            ],
            "properties": {
              "assembly_id": {
                "type": "string",
                "format": "uuid"
              },
              "show_process_breakdown": {
                "type": "boolean"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "project_costs"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly_id",
              "show_process_breakdown",
              "variable"
            ],
            "properties": {
              "assembly_id": {
                "type": "string",
                "format": "uuid"
              },
              "show_process_breakdown": {
                "type": "boolean"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "total_cost_with_project_costs"
                ]
              }
            }
          }
        ]
      },
      "types.flexible_calculation.v0.PercentageItemValueResponse": {
        "type": "object",
        "required": [
          "fractional_value"
        ],
        "properties": {
          "fractional_value": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "types.flexible_calculation.v0.SourcingVariableLineItemResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "assembly",
              "show_pcb_breakdown",
              "variable"
            ],
            "properties": {
              "assembly": {
                "type": "string",
                "format": "uuid"
              },
              "show_pcb_breakdown": {
                "type": "boolean"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "total_price"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly",
              "show_pcb_breakdown",
              "variable"
            ],
            "properties": {
              "assembly": {
                "type": "string",
                "format": "uuid"
              },
              "show_pcb_breakdown": {
                "type": "boolean"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "unit_price"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly",
              "variable"
            ],
            "properties": {
              "assembly": {
                "type": "string",
                "format": "uuid"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "excess_material_cost"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly",
              "variable"
            ],
            "properties": {
              "assembly": {
                "type": "string",
                "format": "uuid"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "scrap_cost"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly",
              "show_one_time_cost_breakdown",
              "variable"
            ],
            "properties": {
              "assembly": {
                "type": "string",
                "format": "uuid"
              },
              "show_one_time_cost_breakdown": {
                "type": "boolean"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "one_time_cost"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "assembly",
              "variable"
            ],
            "properties": {
              "assembly": {
                "type": "string",
                "format": "uuid"
              },
              "variable": {
                "type": "string",
                "enum": [
                  "total_tco_cost"
                ]
              }
            }
          }
        ]
      },
      "types.flexible_calculation.v0.SubtotalRangeResponse": {
        "type": "string",
        "enum": [
          "from_previous_subtotal",
          "from_beginning"
        ]
      },
      "types.flexible_calculation.v0.SubtotalScopeResponse": {
        "type": "string",
        "enum": [
          "current_section",
          "all_sections"
        ]
      },
      "types.flexible_calculation.v0.VariableLineItemResponse": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.SourcingVariableLineItemResponse"
              },
              {
                "type": "object",
                "required": [
                  "variable_type"
                ],
                "properties": {
                  "variable_type": {
                    "type": "string",
                    "enum": [
                      "sourcing"
                    ]
                  }
                }
              }
            ]
          },
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/types.flexible_calculation.v0.ManufacturingVariableLineItemResponse"
              },
              {
                "type": "object",
                "required": [
                  "variable_type"
                ],
                "properties": {
                  "variable_type": {
                    "type": "string",
                    "enum": [
                      "manufacturing"
                    ]
                  }
                }
              }
            ]
          },
          {
            "type": "object",
            "required": [
              "calculation",
              "scenario_mapping",
              "exported_variable_id",
              "variable_type"
            ],
            "properties": {
              "calculation": {
                "type": "string",
                "format": "uuid"
              },
              "scenario_mapping": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/CalculationScenarioId"
                },
                "propertyNames": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "exported_variable_id": {
                "type": "string",
                "format": "uuid"
              },
              "variable_type": {
                "type": "string",
                "enum": [
                  "calculation"
                ]
              }
            }
          }
        ]
      },
      "types.ipn.v1.ComponentExportResponse": {
        "type": "object",
        "required": [
          "components"
        ],
        "properties": {
          "components": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.ipn.v1.ExportedComponentResponse"
            },
            "description": "List of components matching the requested IPN value, including all revisions."
          }
        }
      },
      "types.ipn.v1.ComponentRiskResponse": {
        "type": "object",
        "required": [
          "components"
        ],
        "properties": {
          "components": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.ipn.v1.SingleComponentRiskResponse"
            }
          }
        }
      },
      "types.ipn.v1.ExportedCapacitorSpecification": {
        "type": "object",
        "required": [
          "capacitance_farads"
        ],
        "properties": {
          "capacitance_farads": {
            "type": "string",
            "description": "Capacitance value in farads."
          },
          "tolerance_percent": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tolerance in percent."
          },
          "voltage_rating_volts": {
            "type": [
              "string",
              "null"
            ],
            "description": "Voltage rating in volts."
          },
          "dielectric": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.ipn.v1.ExportedDielectricResponse",
                "description": "Dielectric type and material."
              }
            ]
          }
        }
      },
      "types.ipn.v1.ExportedComponentResponse": {
        "type": "object",
        "required": [
          "internal_part_number",
          "type",
          "is_preferred",
          "risk_data",
          "linked_parts"
        ],
        "properties": {
          "internal_part_number": {
            "$ref": "#/components/schemas/InternalPartNumberIdentifiers",
            "description": "The component's internal part number with value and optional revision."
          },
          "type": {
            "type": "string",
            "description": "Component type: `\"OffTheShelf\"` or `\"Custom\"`.\nOff-the-shelf components have linked OTS parts (MPNs) and/or generic specifications.\nCustom components have linked custom part specifications."
          },
          "category": {
            "type": [
              "string",
              "null"
            ],
            "description": "Component category (e.g., \"Capacitor\", \"Resistor\", \"Cable\").\nMay be null if no category is assigned."
          },
          "is_preferred": {
            "type": "boolean",
            "description": "Whether this component is marked as preferred in the Luminovo component library."
          },
          "risk_data": {
            "$ref": "#/components/schemas/types.ipn.v1.ExportedRiskDataResponse",
            "description": "Aggregated compliance and lifecycle data derived from the component's linked parts."
          },
          "linked_parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.ipn.v1.ExportedLinkedPartResponse"
            },
            "description": "Parts linked to this component. The `type` field on each entry indicates the kind\nof linked part: `\"OffTheShelf\"`, `\"GenericSpecification\"`, or `\"Custom\"`."
          }
        }
      },
      "types.ipn.v1.ExportedDielectricResponse": {
        "oneOf": [
          {
            "type": "object",
            "description": "Ceramic dielectric with material code (e.g., \"X7R\", \"C0G\", \"X5R\").",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "string",
                "description": "Ceramic dielectric with material code (e.g., \"X7R\", \"C0G\", \"X5R\")."
              },
              "type": {
                "type": "string",
                "enum": [
                  "Ceramic"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "Aluminium electrolytic dielectric.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Aluminium"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "Film dielectric.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Film"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "Tantalum dielectric.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Tantalum"
                ]
              }
            }
          }
        ]
      },
      "types.ipn.v1.ExportedGenericSpecificationResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "$ref": "#/components/schemas/types.ipn.v1.ExportedResistorSpecification"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Resistor"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "$ref": "#/components/schemas/types.ipn.v1.ExportedCapacitorSpecification"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Capacitor"
                ]
              }
            }
          }
        ],
        "description": "Generic part specification. Discriminated by the `type` field.\nField names match the component import API convention."
      },
      "types.ipn.v1.ExportedLinkedPartResponse": {
        "oneOf": [
          {
            "type": "object",
            "description": "An off-the-shelf part identified by manufacturer part number (MPN).",
            "required": [
              "id",
              "mpn",
              "manufacturer",
              "type"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "Luminovo's internal UUID for this OTS part."
              },
              "mpn": {
                "type": "string",
                "description": "Manufacturer part number."
              },
              "manufacturer": {
                "$ref": "#/components/schemas/types.ipn.v1.ExportedManufacturerResponse",
                "description": "Manufacturer with ID and name."
              },
              "type": {
                "type": "string",
                "enum": [
                  "OffTheShelf"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "A generic part specification describing technical requirements\n(e.g., a 100nF 50V X7R Capacitor) without a specific MPN.\nThe specification follows the same format as the component import API.",
            "required": [
              "specification",
              "type"
            ],
            "properties": {
              "specification": {
                "$ref": "#/components/schemas/types.ipn.v1.ExportedGenericSpecificationResponse",
                "description": "Structured specification with a `type` field (`\"Resistor\"` or `\"Capacitor\"`)\nand technical parameters (e.g., `resistance_ohms`, `capacitance_farads`)."
              },
              "package": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/types.ipn.v1.ExportedPackageResponse",
                    "description": "Package information for this generic specification, if available."
                  }
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "GenericSpecification"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "A custom (non-electronic) part specification.",
            "required": [
              "id",
              "category",
              "type"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "Luminovo's internal UUID for this custom part specification."
              },
              "category": {
                "type": "string",
                "description": "Category of the custom part (e.g., \"Cable\", \"Mechanical\", \"PCB\")."
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Optional description of the custom part."
              },
              "drawing_number": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Drawing number identifying the custom part's technical drawing."
              },
              "type": {
                "type": "string",
                "enum": [
                  "Custom"
                ]
              }
            }
          }
        ],
        "description": "A part linked to a component. Discriminated by the `type` field."
      },
      "types.ipn.v1.ExportedManufacturerResponse": {
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Luminovo's internal UUID for this manufacturer."
          },
          "name": {
            "type": "string",
            "description": "Manufacturer name."
          }
        }
      },
      "types.ipn.v1.ExportedPackageResponse": {
        "type": "object",
        "required": [
          "name",
          "mounting"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Package name (e.g., \"0402\", \"SOD-123F\", \"QFN-48\")."
          },
          "mounting": {
            "type": "string",
            "description": "Mounting type (e.g., \"SMT\", \"THT\")."
          }
        }
      },
      "types.ipn.v1.ExportedResistorSpecification": {
        "type": "object",
        "required": [
          "resistance_ohms"
        ],
        "properties": {
          "resistance_ohms": {
            "type": "string",
            "description": "Resistance value in ohms."
          },
          "tolerance_percent": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tolerance in percent."
          },
          "voltage_rating_volts": {
            "type": [
              "string",
              "null"
            ],
            "description": "Voltage rating in volts."
          },
          "power_rating_watts": {
            "type": [
              "string",
              "null"
            ],
            "description": "Power rating in watts."
          },
          "temperature_coefficient_ppmk": {
            "type": [
              "string",
              "null"
            ],
            "description": "Temperature coefficient in ppm/K."
          }
        }
      },
      "types.ipn.v1.ExportedRiskDataResponse": {
        "type": "object",
        "description": "Aggregated compliance and lifecycle data for a component.\n\nValues are derived from the component's linked parts.",
        "required": [
          "rohs_compliant",
          "reach_compliant"
        ],
        "properties": {
          "rohs_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "Aggregated RoHS compliance status."
          },
          "reach_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "Aggregated REACH compliance status."
          },
          "aecq_compliant": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
                "description": "Aggregated AEC-Q compliance status. Null for custom components."
              }
            ]
          },
          "lifecycle_status": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.lifecycle.v1.LifecycleEnum",
                "description": "Aggregated lifecycle status (e.g., Active, EndOfLife, Obsolete). Null for custom components."
              }
            ]
          },
          "lifecycle_yteol": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "description": "Maximum years-to-end-of-life across all linked parts, rounded down to one decimal.\nNull if no lifecycle data is available."
          }
        }
      },
      "types.ipn.v1.PaginatedComponentExportResponse": {
        "type": "object",
        "required": [
          "components",
          "page",
          "page_size",
          "total_count"
        ],
        "properties": {
          "components": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.ipn.v1.ExportedComponentResponse"
            },
            "description": "Components on the current page."
          },
          "page": {
            "type": "integer",
            "format": "int64",
            "description": "Current page number (1-based)."
          },
          "page_size": {
            "type": "integer",
            "format": "int64",
            "description": "Number of components per page."
          },
          "total_count": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of components across all pages."
          }
        }
      },
      "types.ipn.v1.SingleComponentRiskResponse": {
        "type": "object",
        "required": [
          "ipn",
          "rohs_compliant",
          "reach_compliant"
        ],
        "properties": {
          "ipn": {
            "type": "string"
          },
          "revision": {
            "type": [
              "string",
              "null"
            ]
          },
          "std_factory_lead_time": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "rohs_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus"
          },
          "reach_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus"
          },
          "aecq_compliant": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus"
              }
            ]
          },
          "lifecycle_status": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.lifecycle.v1.LifecycleEnum"
              }
            ]
          },
          "lifecycle_yteol": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          }
        }
      },
      "types.lifecycle.v1.LifecycleEnum": {
        "type": "string",
        "description": "The current stage of a product's commercial lifecycle.",
        "enum": [
          "Unknown",
          "PreRelease",
          "Acquired",
          "Active",
          "NotRecommendedForNewDesigns",
          "EndOfLife",
          "Aftermarket",
          "Obsolete"
        ]
      },
      "types.manufacturer.v1.AddManufacturerAliasRequest": {
        "type": "object",
        "description": "Adds a private alias to a manufacturer.",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The alias to add."
          }
        }
      },
      "types.manufacturer.v1.DuplicateManufacturerMatch": {
        "type": "object",
        "description": "An existing manufacturer that a rejected name collided with.",
        "required": [
          "query_name",
          "manufacturer",
          "match_reason"
        ],
        "properties": {
          "query_name": {
            "type": "string",
            "description": "The requested name that collided. This is either the item's `name` or\none of its `alternative_names`."
          },
          "manufacturer": {
            "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerLiteResponse"
          },
          "match_reason": {
            "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerMatchReasonResponse"
          }
        }
      },
      "types.manufacturer.v1.FindManufacturersRequest": {
        "type": "object",
        "description": "Looks manufacturers up by name or alias.",
        "required": [
          "names"
        ],
        "properties": {
          "names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The manufacturer names or aliases to search for.\n\nEach value is matched against both primary manufacturer names and\naliases, using exact, normalized and prefix matching."
          }
        }
      },
      "types.manufacturer.v1.FindManufacturersResponse": {
        "type": "object",
        "description": "One result per requested name, in request order.",
        "required": [
          "results"
        ],
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.manufacturer.v1.FindManufacturersResultResponse"
            }
          }
        }
      },
      "types.manufacturer.v1.FindManufacturersResultResponse": {
        "type": "object",
        "description": "The matches for a single requested name.",
        "required": [
          "name",
          "matches"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The requested value from the request's `names`, echoed so results can be\nrelated to the request without relying on implicit indices."
          },
          "matches": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerMatchResponse"
            },
            "description": "Every manufacturer that matched, or an empty list if none did."
          }
        }
      },
      "types.manufacturer.v1.ImportManufacturerErrorDetail": {
        "oneOf": [
          {
            "type": "object",
            "description": "The name was empty or only whitespace.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "empty_name"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "The name consists entirely of characters that normalization strips, so\nit cannot be matched against.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "empty_normalized_name"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "The name exceeds `max` characters.",
            "required": [
              "max",
              "type"
            ],
            "properties": {
              "max": {
                "type": "integer",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "name_too_long"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "The item collides with an existing manufacturer, or with another item of\nthe same request.\n\n`matches` lists the colliding existing manufacturers; it is empty when\nthe collision is between two items of this request.",
            "required": [
              "matches",
              "type"
            ],
            "properties": {
              "matches": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/types.manufacturer.v1.DuplicateManufacturerMatch"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "duplicate_name"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "The item failed for an unexpected reason.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "internal"
                ]
              }
            }
          }
        ],
        "description": "Why a single import item was rejected."
      },
      "types.manufacturer.v1.ImportManufacturerOutcome": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "name",
              "manufacturer",
              "status"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "manufacturer": {
                "$ref": "#/components/schemas/types.manufacturer.v1.ImportedManufacturerResponse"
              },
              "status": {
                "type": "string",
                "enum": [
                  "created"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "name",
              "error",
              "message",
              "status"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "error": {
                "$ref": "#/components/schemas/types.manufacturer.v1.ImportManufacturerErrorDetail"
              },
              "message": {
                "type": "string",
                "description": "A human-readable explanation of `error`, for logs and error surfaces.\nDo not branch on this string; branch on `error.type` instead."
              },
              "status": {
                "type": "string",
                "enum": [
                  "error"
                ]
              }
            }
          }
        ],
        "description": "The outcome of a single import item.\n\n`name` always echoes the `name` of the corresponding request item so results\ncan be related to the request without relying on implicit indices."
      },
      "types.manufacturer.v1.ImportManufacturersRequest": {
        "type": "object",
        "description": "Imports manufacturers in bulk.",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerImportInput"
            }
          }
        }
      },
      "types.manufacturer.v1.ImportManufacturersResponse": {
        "type": "object",
        "description": "One outcome per import item, in request order.\n\nReturned with `200` when every item was created and with `207 Multi-Status`\nwhen at least one item failed.",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.manufacturer.v1.ImportManufacturerOutcome"
            }
          }
        }
      },
      "types.manufacturer.v1.ImportedManufacturerResponse": {
        "type": "object",
        "description": "A manufacturer created by an import, as it was persisted.",
        "required": [
          "id",
          "name",
          "alternative_names"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "alternative_names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The alternative names as they were stored, which may differ from what\nwas requested if any were rejected."
          }
        }
      },
      "types.manufacturer.v1.ManufacturerImportInput": {
        "type": "object",
        "description": "One manufacturer to create as part of a bulk import.",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The primary manufacturer name."
          },
          "alternative_names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Additional names and aliases this manufacturer is also known by.\n\nAliases participate in matching exactly like the primary name, so an\nimported alias makes the manufacturer findable under that spelling."
          }
        }
      },
      "types.manufacturer.v1.ManufacturerLiteResponse": {
        "type": "object",
        "description": "A manufacturer reduced to what is needed to identify it.\n\nUsed wherever a manufacturer is referenced from within another payload, such\nas a search match. Use `GET /manufacturers/{manufacturer_id}` to read the\nfull representation.",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "types.manufacturer.v1.ManufacturerMatchMethodResponse": {
        "type": "string",
        "description": "How closely a requested value matched.\n\n- `Exact`: the value is character-for-character identical.\n- `Normalized`: the values agree after normalization (case, punctuation and\n  whitespace differences, legal-form suffixes such as `GmbH` or `Inc`).\n- `Prefix`: the stored name starts with the requested value. Prefix matches\n  are informative only and are deliberately never treated as duplicates.",
        "enum": [
          "exact",
          "normalized",
          "prefix"
        ]
      },
      "types.manufacturer.v1.ManufacturerMatchReasonResponse": {
        "type": "object",
        "description": "Why a manufacturer was considered a match.",
        "required": [
          "method",
          "matched_field"
        ],
        "properties": {
          "method": {
            "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerMatchMethodResponse"
          },
          "matched_field": {
            "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerMatchedFieldResponse"
          }
        }
      },
      "types.manufacturer.v1.ManufacturerMatchResponse": {
        "type": "object",
        "description": "One manufacturer that matched a requested value, and why.",
        "required": [
          "manufacturer",
          "match_reason"
        ],
        "properties": {
          "manufacturer": {
            "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerLiteResponse"
          },
          "match_reason": {
            "$ref": "#/components/schemas/types.manufacturer.v1.ManufacturerMatchReasonResponse"
          }
        }
      },
      "types.manufacturer.v1.ManufacturerMatchedFieldResponse": {
        "oneOf": [
          {
            "type": "object",
            "description": "The requested value matched the primary manufacturer name.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "name"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "The requested value matched one of the alternative names, carried in\n`value`.",
            "required": [
              "value",
              "type"
            ],
            "properties": {
              "value": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "alternative_name"
                ]
              }
            }
          }
        ],
        "description": "Which stored field the requested value matched."
      },
      "types.manufacturer.v1.ManufacturerResponse": {
        "type": "object",
        "description": "A manufacturer and the alternative names it is also known by.",
        "required": [
          "id",
          "name",
          "alternative_names"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "The primary manufacturer name."
          },
          "alternative_names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Additional names and aliases this manufacturer is also known by."
          }
        }
      },
      "types.manufacturer.v1.RenameManufacturerRequest": {
        "type": "object",
        "description": "Renames a private manufacturer.",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The new primary name."
          }
        }
      },
      "types.manufacturing.resource.v1.ResourceInput": {
        "type": "object",
        "required": [
          "name",
          "type",
          "cost_per_hour"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "internal_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/types.manufacturing.resource.v1.ResourceType"
          },
          "cost_per_hour": {
            "$ref": "#/components/schemas/MonetaryValue"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "site_id": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/SiteId"
              }
            ]
          }
        }
      },
      "types.manufacturing.resource.v1.ResourceResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "type",
          "cost_per_hour",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "internal_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/types.manufacturing.resource.v1.ResourceType"
          },
          "cost_per_hour": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.ConvertedMonetaryValue"
          },
          "status": {
            "$ref": "#/components/schemas/types.manufacturing.v1.ManufacturingEntityStatus"
          },
          "site_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        }
      },
      "types.manufacturing.resource.v1.ResourceType": {
        "type": "string",
        "enum": [
          "Machine",
          "Person"
        ]
      },
      "types.manufacturing.resource.v1.ResourceUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "internal_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.manufacturing.resource.v1.ResourceType"
              }
            ]
          },
          "cost_per_hour": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue"
              }
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.manufacturing.v1.ManufacturingEntityStatus"
              }
            ]
          },
          "site_id": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/SiteId"
              }
            ]
          }
        }
      },
      "types.manufacturing.v1.ManufacturingEntityStatus": {
        "type": "string",
        "enum": [
          "Active",
          "Inactive"
        ]
      },
      "types.offer_import_context.v1.AllOfferImportContextsResponse": {
        "type": "object",
        "description": "Every offer import context belonging to the tenant.",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.offer_import_context.v1.OfferImportContextResponse"
            }
          }
        }
      },
      "types.offer_import_context.v1.OfferImportContextInput": {
        "type": "object",
        "description": "Fields for creating an offer import context.\n\nContexts created through this API always have `ApiIntegration` origin, so\nthe request takes no `origin` field.",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.offer_import_context.v1.OfferImportContextResponse": {
        "type": "object",
        "description": "An offer import context: a named grouping that offers are imported under.",
        "required": [
          "id",
          "name",
          "origin",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "origin": {
            "$ref": "#/components/schemas/types.offer_import_context.v1.Origin"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "types.offer_import_context.v1.OfferImportContextUpdate": {
        "type": "object",
        "description": "Fields to change on an offer import context.\n\n`name` is optional: omit it to leave the name unchanged. `description` is\ntri-state: omit it to leave it unchanged, send `null` to clear it, or send a\nvalue to set it. Origin is fixed at creation and cannot be changed.",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.offer_import_context.v1.Origin": {
        "type": "string",
        "description": "The channel an import context's offers arrived through.\n\n- `CsvIntegration`: the nightly job pulling CSV files from a customer's ERP\n  storage.\n- `ApiIntegration`: programmatic import through the offers API.\n- `ManualFileUpload`: a CSV file uploaded in the UI.",
        "enum": [
          "CsvIntegration",
          "ApiIntegration",
          "ManualFileUpload"
        ]
      },
      "types.order_management.order_selection_option.v1.CustomOrderSelectionOptionInput": {
        "type": "object",
        "required": [
          "external_id",
          "order_size",
          "batch_size",
          "price",
          "lead_time_in_days"
        ],
        "properties": {
          "external_id": {
            "type": "string"
          },
          "order_size": {
            "type": "integer",
            "format": "int32"
          },
          "batch_size": {
            "type": "integer",
            "format": "int32"
          },
          "price": {
            "$ref": "#/components/schemas/MonetaryValue"
          },
          "lead_time_in_days": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "types.order_management.order_selection_option.v1.CustomOrderSelectionOptionsRequest": {
        "type": "object",
        "required": [
          "rfq",
          "options"
        ],
        "properties": {
          "rfq": {
            "type": "string",
            "format": "uuid"
          },
          "custom_text": {
            "type": [
              "string",
              "null"
            ]
          },
          "custom_text_header": {
            "type": [
              "string",
              "null"
            ]
          },
          "valid_until": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.order_management.order_selection_option.v1.CustomOrderSelectionOptionInput"
            }
          }
        }
      },
      "types.order_management.orders.v1.GetOrdersResponse": {
        "type": "object",
        "properties": {
          "data": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.order_management.orders.v1.OrderOverview"
              }
            ]
          }
        }
      },
      "types.order_management.orders.v1.OrderOverview": {
        "type": "object",
        "required": [
          "id",
          "customer_id",
          "customer_name",
          "order_size",
          "total_price"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "customer_id": {
            "type": "string",
            "format": "uuid"
          },
          "customer_name": {
            "type": "string"
          },
          "customer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "rfq_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "estimated_lead_time_in_days": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "order_size": {
            "type": "integer",
            "format": "int32"
          },
          "total_price": {
            "$ref": "#/components/schemas/MonetaryValue"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.parts.generic.v1.Dielectric": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "dielectric",
              "type"
            ],
            "properties": {
              "dielectric": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/types.parts.generic.v1.DielectricCeramic"
                  }
                ]
              },
              "type": {
                "type": "string",
                "enum": [
                  "Ceramic"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Aluminium"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Film"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Tantalum"
                ]
              }
            }
          }
        ]
      },
      "types.parts.generic.v1.DielectricCeramic": {
        "type": "string",
        "enum": [
          "X8R",
          "C0G",
          "NP0",
          "X7R",
          "X5R",
          "X8L",
          "Y5V",
          "X6S",
          "Z5U",
          "X7S",
          "Y5U",
          "C0H",
          "Y5R",
          "Y5P",
          "Y5T",
          "U2J",
          "Z5V",
          "Z5P",
          "K4000",
          "X6T",
          "X7T",
          "Z5F"
        ]
      },
      "types.parts.off_the_shelf.v1.BulkOffTheShelfPartsResponse": {
        "type": "object",
        "description": "Response body for looking up multiple off-the-shelf parts.",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.OffTheShelfPartResponse"
            },
            "description": "Parts that were found. IDs that cannot be resolved are omitted."
          }
        }
      },
      "types.parts.off_the_shelf.v1.ComplianceResponse": {
        "type": "object",
        "description": "Regulatory, trade, and environmental compliance information.\n\nEmpty collections mean that no values are known. They do not imply that the part is compliant\nor non-compliant; use the corresponding status field for that determination.",
        "required": [
          "reach_compliant",
          "rohs_compliant",
          "eu_pop_compliant",
          "eu_pop_cas_numbers",
          "pfas_compliant",
          "pfas_cas_numbers",
          "eccn_numbers",
          "china_rohs_compliant",
          "prop65_compliant",
          "aecq_compliant",
          "qualifications",
          "svhc_cas_numbers",
          "country_of_origin",
          "conflict_mineral_status",
          "emissions_data"
        ],
        "properties": {
          "reach_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "Registration, Evaluation, Authorisation and Restriction of Chemicals (REACH) status."
          },
          "reach_candidate_list_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of the REACH candidate list used for the determination, in `YYYY-MM-DD` format."
          },
          "rohs_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "Restriction of Hazardous Substances (RoHS) status."
          },
          "rohs_version": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.compliance.v1.RohsVersion",
                "description": "RoHS directive used for the determination."
              }
            ]
          },
          "eu_pop_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "European Union Persistent Organic Pollutants (EU POP) status."
          },
          "eu_pop_cas_numbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "CAS Registry Numbers of known EU POP substances in the part."
          },
          "pfas_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "Per- and polyfluoroalkyl substances (PFAS) status."
          },
          "pfas_cas_numbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "CAS Registry Numbers of known PFAS substances in the part."
          },
          "eccn_numbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Export Control Classification Numbers assigned to the part."
          },
          "eccn_governance": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.compliance.v1.EccnGovernance",
                "description": "United States regulatory regime governing the ECCN assignment."
              }
            ]
          },
          "china_rohs_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "China RoHS status."
          },
          "prop65_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "California Proposition 65 status."
          },
          "aecq_compliant": {
            "$ref": "#/components/schemas/types.compliance.v1.ComplianceStatus",
            "description": "Automotive Electronics Council (AEC-Q) qualification status."
          },
          "hts_code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Harmonized Tariff Schedule code, when known."
          },
          "taric": {
            "type": [
              "string",
              "null"
            ],
            "description": "Integrated Tariff of the European Union code, when known."
          },
          "qualifications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.compliance.v1.Qualification"
            },
            "description": "Product qualifications reported for the part."
          },
          "svhc_cas_numbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "CAS Registry Numbers of known Substances of Very High Concern (SVHCs) in the part."
          },
          "country_of_origin": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.compliance.v1.Region"
            },
            "description": "Known countries or regions of origin, represented using UN M49 names."
          },
          "conflict_mineral_status": {
            "$ref": "#/components/schemas/types.compliance.v1.ConflictMineralStatus",
            "description": "Conflict-minerals compliance status."
          },
          "emissions_data": {
            "$ref": "#/components/schemas/types.compliance.v1.EmissionDataResponse",
            "description": "Availability or value of product-phase greenhouse-gas emissions data."
          }
        }
      },
      "types.parts.off_the_shelf.v1.GetOffTheShelfPartsByIdInput": {
        "type": "object",
        "description": "Request body for looking up off-the-shelf parts by ID.",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "IDs of the off-the-shelf parts to retrieve. Each ID must use the opaque\n`OffTheShelf:<uuid>` representation returned by this API.",
            "example": [
              "OffTheShelf:a1b2c3d4-5678-90ab-cdef-123456789012"
            ]
          }
        }
      },
      "types.parts.off_the_shelf.v1.LifecycleResponse": {
        "type": "object",
        "description": "Product lifecycle information.",
        "required": [
          "lifecycle_status"
        ],
        "properties": {
          "lifecycle_status": {
            "$ref": "#/components/schemas/types.lifecycle.v1.LifecycleEnum",
            "description": "Current product lifecycle status."
          },
          "lifecycle_yteol": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "description": "Estimated years to end of life."
          },
          "lifecycle_yteol_range": {
            "type": [
              "string",
              "null"
            ],
            "description": "Provider-supplied range for the estimated years to end of life, such as `4.0 - 11.0`."
          },
          "last_buy_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Final date on which orders may be placed, in `YYYY-MM-DD` format."
          },
          "last_delivery_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Final expected delivery date, in `YYYY-MM-DD` format."
          }
        }
      },
      "types.parts.off_the_shelf.v1.ManufacturerResponse": {
        "type": "object",
        "description": "A part manufacturer.",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ManufacturerId",
            "description": "Unique manufacturer identifier."
          },
          "name": {
            "type": "string",
            "description": "Manufacturer name."
          }
        }
      },
      "types.parts.off_the_shelf.v1.OffTheShelfPartId": {
        "type": "string",
        "format": "uuid",
        "description": "The unique identifier of an off-the-shelf part.\n\nSerialized as an opaque `OffTheShelf:<uuid>` string. Treat the value as opaque because its\ninternal structure may change."
      },
      "types.parts.off_the_shelf.v1.OffTheShelfPartResponse": {
        "type": "object",
        "description": "An off-the-shelf electronic part and its available product data.\n\nOptional fields are `null` when no value is known. Collections are empty when no values are\nknown; an empty collection does not by itself imply a negative compliance determination.",
        "required": [
          "id",
          "manufacturer",
          "mpn",
          "mpn_aliases",
          "compliance",
          "lifecycle"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.OffTheShelfPartId",
            "description": "Opaque identifier for this part."
          },
          "manufacturer": {
            "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.ManufacturerResponse",
            "description": "Manufacturer of the part."
          },
          "mpn": {
            "type": "string",
            "description": "Manufacturer part number."
          },
          "mpn_aliases": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Alternative manufacturer part numbers known to identify the same part."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Manufacturer or data-provider description of the part."
          },
          "type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product type reported by the source, such as `Resistor` or `Capacitor`."
          },
          "categories": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product category name assigned to the part."
          },
          "compliance": {
            "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.ComplianceResponse",
            "description": "Regulatory, trade, and environmental compliance information."
          },
          "lifecycle": {
            "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.LifecycleResponse",
            "description": "Product lifecycle information."
          },
          "technical_properties": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.TechnicalPropertiesResponse",
                "description": "Normalized electrical properties, when available."
              }
            ]
          },
          "package": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.parts.off_the_shelf.v1.PackageResponse",
                "description": "Physical package information, when available."
              }
            ]
          },
          "manufacturer_product_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product page supplied by the manufacturer or data provider. The URL is returned as supplied\nand is not guaranteed to be absolute."
          },
          "datasheet_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Datasheet URL supplied by the manufacturer or data provider. The URL is returned as supplied\nand is not guaranteed to be absolute."
          },
          "image_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "Product image URL supplied by the manufacturer or data provider. The URL is returned as\nsupplied and is not guaranteed to be absolute."
          }
        },
        "example": {
          "id": "OffTheShelf:a1b2c3d4-5678-90ab-cdef-123456789012",
          "manufacturer": {
            "id": "c3d4e5f6-7890-12ab-cdef-345678901234",
            "name": "Yageo"
          },
          "mpn": "RC0402FR-0710KL",
          "mpn_aliases": [
            "RC0402FR0710KL"
          ],
          "description": "10 kOhm 1% 0402 resistor",
          "type": "Resistor",
          "categories": [
            "Chip Resistors - Surface Mount"
          ],
          "compliance": {
            "reach_compliant": "Compliant",
            "reach_candidate_list_date": "2026-01-21",
            "rohs_compliant": "Compliant",
            "rohs_version": "Rohs2_2015_863_EU",
            "eu_pop_compliant": "Unknown",
            "eu_pop_cas_numbers": [],
            "pfas_compliant": "Unknown",
            "pfas_cas_numbers": [],
            "eccn_numbers": [
              "EAR99"
            ],
            "eccn_governance": "EAR",
            "china_rohs_compliant": "Compliant",
            "prop65_compliant": "Unknown",
            "aecq_compliant": "NotRequired",
            "hts_code": "8533.21.0030",
            "taric": "8533210000",
            "qualifications": [],
            "svhc_cas_numbers": [],
            "country_of_origin": [
              "Germany"
            ],
            "conflict_mineral_status": "Unknown",
            "emissions_data": {
              "type": "NotFetched"
            }
          },
          "lifecycle": {
            "lifecycle_status": "Active",
            "lifecycle_yteol": 7.5,
            "lifecycle_yteol_range": "4.0 - 11.0",
            "last_buy_date": null,
            "last_delivery_date": null
          },
          "technical_properties": {
            "capacitance": null,
            "resistance": "10000",
            "power_rating": "0.063",
            "tolerance": "1",
            "temperature_coefficient": "100",
            "voltage_rating": "50",
            "dielectric": null
          },
          "package": {
            "name": "0402",
            "number_of_pins": 2,
            "mounting": "Surface Mount"
          },
          "manufacturer_product_url": "https://example.com/products/RC0402FR-0710KL",
          "datasheet_url": "https://example.com/datasheets/RC0402FR-0710KL.pdf",
          "image_url": "https://example.com/images/RC0402FR-0710KL.jpg"
        }
      },
      "types.parts.off_the_shelf.v1.PackageResponse": {
        "type": "object",
        "description": "Physical package information.",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Package or case name, such as `0402`."
          },
          "number_of_pins": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "Number of electrical pins or terminals."
          },
          "mounting": {
            "type": [
              "string",
              "null"
            ],
            "description": "Mounting method reported for the package, such as `Surface Mount` or `Through Hole`."
          }
        }
      },
      "types.parts.off_the_shelf.v1.TechnicalPropertiesResponse": {
        "type": "object",
        "description": "Normalized electrical properties.\n\nDecimal values are encoded as JSON strings to preserve their exact precision.",
        "properties": {
          "capacitance": {
            "type": [
              "string",
              "null"
            ],
            "description": "Capacitance in farads, encoded as a decimal string."
          },
          "resistance": {
            "type": [
              "string",
              "null"
            ],
            "description": "Resistance in ohms, encoded as a decimal string."
          },
          "power_rating": {
            "type": [
              "string",
              "null"
            ],
            "description": "Rated power in watts, encoded as a decimal string."
          },
          "tolerance": {
            "type": [
              "string",
              "null"
            ],
            "description": "Tolerance in percentage points, encoded as a decimal string. For example, `\"1\"` means 1%."
          },
          "temperature_coefficient": {
            "type": [
              "string",
              "null"
            ],
            "description": "Temperature coefficient in parts per million per degree Celsius (ppm/K), encoded as a\ndecimal string."
          },
          "voltage_rating": {
            "type": [
              "string",
              "null"
            ],
            "description": "Rated voltage in volts, encoded as a decimal string."
          },
          "dielectric": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.parts.generic.v1.Dielectric",
                "description": "Capacitor dielectric material or ceramic classification."
              }
            ]
          }
        }
      },
      "types.pcb_specification.v1.AttributeValue": {
        "oneOf": [
          {
            "type": "boolean",
            "title": "Boolean"
          },
          {
            "type": "number",
            "title": "Number",
            "format": "double"
          },
          {
            "type": "string",
            "title": "String"
          },
          {
            "type": "array",
            "title": "StringArray",
            "items": {
              "type": "string"
            },
            "description": "A list of strings, for attributes that can hold several values (e.g.\nmultiple markings)."
          }
        ],
        "description": "An extracted attribute value: a string, a number, a boolean, or a list of\nstrings, depending on the attribute."
      },
      "types.pcb_specification.v1.DocumentBoundingBox": {
        "type": "object",
        "description": "A rectangular region in the source document, with coordinates normalized to\nthe `[0, 1]` range relative to the page's width and height.",
        "required": [
          "page",
          "x",
          "y",
          "width",
          "height"
        ],
        "properties": {
          "page": {
            "type": "integer",
            "format": "int32",
            "description": "The 1-based page number the attribute was found on.",
            "minimum": 0
          },
          "x": {
            "type": "number",
            "format": "double",
            "description": "Left edge, normalized to `[0, 1]` of the page width."
          },
          "y": {
            "type": "number",
            "format": "double",
            "description": "Top edge, normalized to `[0, 1]` of the page height."
          },
          "width": {
            "type": "number",
            "format": "double",
            "description": "Width, normalized to `[0, 1]` of the page width."
          },
          "height": {
            "type": "number",
            "format": "double",
            "description": "Height, normalized to `[0, 1]` of the page height."
          }
        }
      },
      "types.pcb_specification.v1.DocumentUpload": {
        "type": "string",
        "format": "binary",
        "description": "The raw bytes of the document to extract."
      },
      "types.pcb_specification.v1.ExtractedSpecificationAttribute": {
        "type": "object",
        "description": "A single extracted specification attribute.",
        "required": [
          "group",
          "name",
          "value",
          "bounding_boxes"
        ],
        "properties": {
          "group": {
            "type": "string",
            "description": "The specification group the attribute belongs to, e.g. `board`,\n`layerStack`, `mechanical`, `reports`, `markings`, `miscellaneous`."
          },
          "name": {
            "type": "string",
            "description": "The attribute name, e.g. `baseMaterial`, `finalThickness`,\n`surfaceFinish`, `impedanceTested`."
          },
          "value": {
            "$ref": "#/components/schemas/types.pcb_specification.v1.AttributeValue",
            "description": "The extracted value."
          },
          "unit": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.pcb_specification.v1.PcbSpecificationUnit",
                "description": "The unit for measurement values. Absent for non-measurement attributes."
              }
            ]
          },
          "bounding_boxes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.pcb_specification.v1.DocumentBoundingBox"
            },
            "description": "Where in the document this attribute was found. May be empty when the\nlocation could not be resolved."
          }
        }
      },
      "types.pcb_specification.v1.PcbSpecificationExtractionResponse": {
        "type": "object",
        "description": "The structured PCB specification extracted from a document.\n\nA flat list of attributes, each carrying the extracted value and — where it\ncould be located — the bounding box(es) of where it was found in the source\ndocument.",
        "required": [
          "attributes"
        ],
        "properties": {
          "attributes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.pcb_specification.v1.ExtractedSpecificationAttribute"
            }
          }
        }
      },
      "types.pcb_specification.v1.PcbSpecificationUnit": {
        "type": "string",
        "description": "The unit of a measurement attribute.\n\nThis is a closed set matching the PCB specification importer's unit\nvocabulary. New units may be added over time as the importer evolves;\ntreat additions as non-breaking.",
        "enum": [
          "Millimeter",
          "Inch",
          "Micrometer",
          "Mil",
          "Microinch",
          "SquareMillimeter",
          "SquareInch",
          "Celsius",
          "Fahrenheit",
          "Percentage",
          "Ounce",
          "HolesPerSquareMillimeter",
          "HolesPerSquareInch"
        ]
      },
      "types.pnp.v1.BulkPnpItemsResponse": {
        "type": "object",
        "required": [
          "warnings",
          "items"
        ],
        "properties": {
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.pnp.v1.Warning"
            }
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.pnp.v1.PnpItemResponse"
            }
          }
        }
      },
      "types.pnp.v1.ColumnMapping": {
        "type": "object",
        "properties": {
          "side": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "designator": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          }
        }
      },
      "types.pnp.v1.PnpColumn": {
        "type": "string",
        "enum": [
          "Side",
          "Designator"
        ]
      },
      "types.pnp.v1.PnpFileResponse": {
        "type": "object",
        "required": [
          "id",
          "assembly_id",
          "file_name",
          "state"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/PnpFileId"
          },
          "assembly_id": {
            "$ref": "#/components/schemas/AssemblyId"
          },
          "file_name": {
            "type": "string"
          },
          "state": {
            "$ref": "#/components/schemas/types.pnp.v1.PnpFileState"
          },
          "column_mapping": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.pnp.v1.ColumnMapping"
              }
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.pnp.v1.PnpFileState": {
        "type": "string",
        "enum": [
          "Created",
          "Uploaded",
          "Parsed"
        ]
      },
      "types.pnp.v1.PnpItemResponse": {
        "type": "object",
        "required": [
          "id",
          "pnp_file",
          "designator"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/PnpItemId"
          },
          "pnp_file": {
            "$ref": "#/components/schemas/PnpFileId"
          },
          "designator": {
            "$ref": "#/components/schemas/String"
          },
          "side": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.pnp.v1.Side"
              }
            ]
          },
          "design_item": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/DesignItemId"
              }
            ]
          },
          "mounting": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.pnp.v1.PnpResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "PnpNotUploaded"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "ColumnMappingNotSubmitted"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "$ref": "#/components/schemas/types.pnp.v1.BulkPnpItemsResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "PnpUploaded"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "$ref": "#/components/schemas/types.pnp.v1.PnpFileResponse"
              },
              "type": {
                "type": "string",
                "enum": [
                  "PnpUploadedButNotImported"
                ]
              }
            }
          }
        ]
      },
      "types.pnp.v1.Side": {
        "type": "string",
        "enum": [
          "Top",
          "Bottom"
        ]
      },
      "types.pnp.v1.Warning": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "required": [
                  "column_type",
                  "row",
                  "col"
                ],
                "properties": {
                  "column_type": {
                    "$ref": "#/components/schemas/types.pnp.v1.PnpColumn"
                  },
                  "row": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "col": {
                    "type": "integer",
                    "minimum": 0
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "UnableToParseCell"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "integer",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "DesignatorMissing"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "$ref": "#/components/schemas/types.pnp.v1.PnpColumn"
              },
              "type": {
                "type": "string",
                "enum": [
                  "ColumnMissing"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "$ref": "#/components/schemas/String"
              },
              "type": {
                "type": "string",
                "enum": [
                  "DuplicateDesignatorData"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "required": [
                  "row",
                  "col_count",
                  "expected_col_count"
                ],
                "properties": {
                  "row": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "col_count": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "expected_col_count": {
                    "type": "integer",
                    "minimum": 0
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "VaryingColumnNumber"
                ]
              }
            }
          }
        ]
      },
      "types.primitives.monetary_value.v1.ConvertedMonetaryValue": {
        "type": "object",
        "required": [
          "converted_mv"
        ],
        "properties": {
          "converted_mv": {
            "$ref": "#/components/schemas/MonetaryValue"
          }
        }
      },
      "types.primitives.monetary_value.v1.FloatingPointMoneyValue": {
        "type": "object",
        "required": [
          "amount",
          "currency"
        ],
        "properties": {
          "amount": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          }
        }
      },
      "types.primitives.monetary_value.v1.FloatingPointMoneyValueExchangePair": {
        "type": "object",
        "required": [
          "converted_mv",
          "original_mv"
        ],
        "properties": {
          "converted_mv": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
          },
          "original_mv": {
            "$ref": "#/components/schemas/types.primitives.monetary_value.v1.FloatingPointMoneyValue"
          }
        }
      },
      "types.primitives.quantity_unit.v1.QuantityUnit": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "quantity",
              "unit"
            ],
            "properties": {
              "quantity": {
                "type": "number",
                "format": "double"
              },
              "unit": {
                "type": "string",
                "enum": [
                  "Kg"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "quantity",
              "unit"
            ],
            "properties": {
              "quantity": {
                "type": "number",
                "format": "double"
              },
              "unit": {
                "type": "string",
                "enum": [
                  "Meters"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "quantity",
              "unit"
            ],
            "properties": {
              "quantity": {
                "type": "number",
                "format": "double"
              },
              "unit": {
                "type": "string",
                "enum": [
                  "Liters"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "quantity",
              "unit"
            ],
            "properties": {
              "quantity": {
                "type": "number",
                "format": "double"
              },
              "unit": {
                "type": "string",
                "enum": [
                  "Pieces"
                ]
              }
            }
          }
        ]
      },
      "types.primitives.quantity_unit.v1.UnitOfMeasurement": {
        "type": "object",
        "required": [
          "quantity_unit"
        ],
        "properties": {
          "quantity_unit": {
            "$ref": "#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit"
          }
        }
      },
      "types.resource.v1.ResourceUrlResponse": {
        "type": "object",
        "required": [
          "urls"
        ],
        "properties": {
          "urls": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "types.rfq.costed_bom.v1.BomSupplierInfo": {
        "type": "object",
        "required": [
          "supplier"
        ],
        "properties": {
          "supplier": {
            "type": "string"
          },
          "supplier_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "supplier_part_number": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.rfq.costed_bom.v1.CostedBOMComplianceInfo": {
        "type": "object",
        "required": [
          "rohs_compliant",
          "china_rohs",
          "reach_compliant",
          "svhc_cas_number",
          "prop65",
          "conflict_mineral_status",
          "eccn"
        ],
        "properties": {
          "rohs_compliant": {
            "type": "string"
          },
          "rohs_version": {
            "type": [
              "string",
              "null"
            ]
          },
          "china_rohs": {
            "type": "string"
          },
          "reach_compliant": {
            "type": "string"
          },
          "svhc_cas_number": {
            "type": "string"
          },
          "prop65": {
            "type": "string"
          },
          "conflict_mineral_status": {
            "type": "string"
          },
          "eccn": {
            "type": "string"
          },
          "hts_code": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.rfq.costed_bom.v1.CostedBOMLifecycleInfo": {
        "type": "object",
        "properties": {
          "lifecycle_yteol": {
            "type": [
              "string",
              "null"
            ]
          },
          "lifecycle_yteol_range": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_time_delivery_date": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_time_buy_date": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.rfq.costed_bom.v1.CostedBom": {
        "type": "object",
        "required": [
          "rfq_id",
          "creation_date",
          "top_level_assemblies",
          "sourcing_scenarios"
        ],
        "properties": {
          "rfq_id": {
            "type": "string",
            "format": "uuid"
          },
          "creation_date": {
            "type": "string",
            "format": "date-time"
          },
          "top_level_assemblies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedBomAssembly"
            }
          },
          "sourcing_scenarios": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedSourcingScenario"
            }
          }
        }
      },
      "types.rfq.costed_bom.v1.CostedBomAssembly": {
        "type": "object",
        "required": [
          "name",
          "type",
          "notes"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          }
        }
      },
      "types.rfq.costed_bom.v1.CostedBomComponent": {
        "type": "object",
        "required": [
          "approved_parts",
          "pending_parts",
          "selected_parts",
          "per_assembly_data",
          "designators",
          "manufacturer_part_number_bom",
          "internal_part_number_bom",
          "customer_part_number_bom",
          "notes",
          "do_not_place",
          "manufacturer_free",
          "consignment"
        ],
        "properties": {
          "approved_parts": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedBomParts"
          },
          "pending_parts": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedBomParts"
          },
          "selected_parts": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.SelectedBomParts"
          },
          "per_assembly_data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.PerAssemblyData"
            }
          },
          "designators": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "manufacturer_part_number_bom": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The raw data from the BOMs tagged with `MPN`"
          },
          "internal_part_number_bom": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The raw data from the BOMs tagged with `IPN`"
          },
          "customer_part_number_bom": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The raw data from the BOMs tagged with `CPN`"
          },
          "notes": {
            "type": "string"
          },
          "do_not_place": {
            "type": "boolean"
          },
          "manufacturer_free": {
            "type": "string",
            "description": "Possible values: \"Yes\", \"Partially\", \"No\" or empty string"
          },
          "consignment": {
            "type": "boolean"
          }
        }
      },
      "types.rfq.costed_bom.v1.CostedBomParts": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "items",
              "part_type"
            ],
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/types.rfq.costed_bom.v1.OTSOrGenericPart"
                }
              },
              "part_type": {
                "type": "string",
                "enum": [
                  "OffTheShelf"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "items",
              "part_type"
            ],
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CustomPart"
                }
              },
              "part_type": {
                "type": "string",
                "enum": [
                  "Custom"
                ]
              }
            }
          }
        ]
      },
      "types.rfq.costed_bom.v1.CostedPrice": {
        "type": "object",
        "required": [
          "one_time_costs"
        ],
        "properties": {
          "price_type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.PriceType"
              }
            ]
          },
          "moq": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "mpq": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "unit_price": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue"
              }
            ]
          },
          "unit_price_original_currency": {
            "type": [
              "string",
              "null"
            ]
          },
          "currency_exchange_rate": {
            "type": [
              "string",
              "null"
            ]
          },
          "one_time_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Cost"
            }
          }
        }
      },
      "types.rfq.costed_bom.v1.CostedSourcingScenario": {
        "type": "object",
        "required": [
          "name",
          "solution_preference",
          "summaries",
          "components"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "solution_preference": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.SolutionPreference"
          },
          "summaries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedSourcingScenarioSummary"
            }
          },
          "components": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedBomComponent"
            }
          }
        }
      },
      "types.rfq.costed_bom.v1.CostedSourcingScenarioSummary": {
        "type": "object",
        "required": [
          "assembly_name",
          "order_size",
          "status_counters"
        ],
        "properties": {
          "assembly_name": {
            "type": "string"
          },
          "order_size": {
            "type": "integer",
            "format": "int32"
          },
          "unit_price": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue"
              }
            ]
          },
          "one_time_costs": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue"
              }
            ]
          },
          "total_price": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue"
              }
            ]
          },
          "total_excess_material": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue"
              }
            ]
          },
          "status_counters": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.SolutionStatusCount"
          }
        }
      },
      "types.rfq.costed_bom.v1.CustomPart": {
        "type": "object",
        "required": [
          "id",
          "internal_part_numbers",
          "part_description",
          "part_type",
          "reach_compliant",
          "rohs_compliant"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "internal_part_numbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.IpnInfo"
            }
          },
          "part_description": {
            "type": "string"
          },
          "part_type": {
            "type": "string"
          },
          "reach_compliant": {
            "type": "string"
          },
          "rohs_compliant": {
            "type": "string"
          }
        }
      },
      "types.rfq.costed_bom.v1.GenericPart": {
        "type": "object",
        "required": [
          "internal_part_numbers",
          "generic_part_spec"
        ],
        "properties": {
          "internal_part_numbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.IpnInfo"
            }
          },
          "generic_part_spec": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.GenericPartSpec"
          }
        }
      },
      "types.rfq.costed_bom.v1.GenericPartSpec": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "resistance_ohms",
              "power_rating_watts",
              "temperature_coefficient_ppmk",
              "tolerance_percent",
              "voltage_rating_volts",
              "type"
            ],
            "properties": {
              "resistance_ohms": {
                "type": "string"
              },
              "power_rating_watts": {
                "type": "string"
              },
              "temperature_coefficient_ppmk": {
                "type": "string"
              },
              "tolerance_percent": {
                "type": "string"
              },
              "voltage_rating_volts": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Resistor"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "capacitance_farads",
              "tolerance_percent",
              "voltage_rating_volts",
              "dielectric",
              "type"
            ],
            "properties": {
              "capacitance_farads": {
                "type": "string"
              },
              "tolerance_percent": {
                "type": "string"
              },
              "voltage_rating_volts": {
                "type": "string"
              },
              "dielectric": {
                "$ref": "#/components/schemas/types.parts.generic.v1.Dielectric"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Capacitor"
                ]
              }
            }
          }
        ]
      },
      "types.rfq.costed_bom.v1.IpnInfo": {
        "type": "object",
        "required": [
          "value",
          "revision"
        ],
        "properties": {
          "value": {
            "type": "string"
          },
          "revision": {
            "type": "string"
          }
        }
      },
      "types.rfq.costed_bom.v1.OTSOrGenericPart": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "bound_to_mpn"
            ],
            "properties": {
              "bound_to_mpn": {
                "$ref": "#/components/schemas/types.rfq.costed_bom.v1.OTSPart"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "generic"
            ],
            "properties": {
              "generic": {
                "$ref": "#/components/schemas/types.rfq.costed_bom.v1.GenericPart"
              }
            }
          }
        ]
      },
      "types.rfq.costed_bom.v1.OTSPart": {
        "type": "object",
        "required": [
          "internal_part_numbers",
          "manufacturer_part_number",
          "manufacturer"
        ],
        "properties": {
          "internal_part_numbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.IpnInfo"
            }
          },
          "manufacturer_part_number": {
            "type": "string"
          },
          "manufacturer": {
            "type": "string"
          }
        }
      },
      "types.rfq.costed_bom.v1.OfferId": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "offer",
              "offer_type"
            ],
            "properties": {
              "offer": {
                "type": "string",
                "format": "uuid"
              },
              "offer_type": {
                "type": "string",
                "enum": [
                  "Other"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "offer",
              "offer_type"
            ],
            "properties": {
              "offer": {
                "type": "string",
                "format": "uuid"
              },
              "offer_type": {
                "type": "string",
                "enum": [
                  "CustomPart"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "offer",
              "offer_type"
            ],
            "properties": {
              "offer": {
                "type": "string",
                "format": "uuid"
              },
              "offer_type": {
                "type": "string",
                "enum": [
                  "Inventory"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "offer",
              "offer_type"
            ],
            "properties": {
              "offer": {
                "type": "string",
                "format": "uuid"
              },
              "offer_type": {
                "type": "string",
                "enum": [
                  "CustomPartInventory"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "offer",
              "offer_type"
            ],
            "properties": {
              "offer": {
                "type": "string",
                "format": "uuid"
              },
              "offer_type": {
                "type": "string",
                "enum": [
                  "Consigned"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "offer",
              "offer_type"
            ],
            "properties": {
              "offer": {
                "type": "string",
                "format": "uuid"
              },
              "offer_type": {
                "type": "string",
                "enum": [
                  "Aggregated"
                ]
              }
            }
          }
        ]
      },
      "types.rfq.costed_bom.v1.PartInfo": {
        "type": "object",
        "required": [
          "package",
          "mounting",
          "category",
          "compliance",
          "lifecycle",
          "description",
          "datasheet_url",
          "part_warnings",
          "country_of_origin",
          "type"
        ],
        "properties": {
          "package": {
            "type": "string"
          },
          "mounting": {
            "type": "string"
          },
          "pins": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "category": {
            "type": "string"
          },
          "compliance": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedBOMComplianceInfo"
          },
          "lifecycle": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedBOMLifecycleInfo"
          },
          "description": {
            "type": "string"
          },
          "datasheet_url": {
            "type": "string"
          },
          "part_warnings": {
            "type": "string"
          },
          "country_of_origin": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        }
      },
      "types.rfq.costed_bom.v1.PerAssemblyData": {
        "type": "object",
        "required": [
          "assembly_name",
          "designators",
          "quantity"
        ],
        "properties": {
          "assembly_name": {
            "type": "string"
          },
          "designators": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "quantity": {
            "type": "number",
            "format": "double"
          },
          "excess_material_quantity": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          }
        }
      },
      "types.rfq.costed_bom.v1.PurchaseInfo": {
        "type": "object",
        "required": [
          "quantity",
          "offer_id",
          "scrap_quantity",
          "aggregated_quantity",
          "solution_warnings",
          "sourcing_notes",
          "excess_material",
          "purchase_options"
        ],
        "properties": {
          "quantity": {
            "type": "number",
            "format": "double",
            "description": "Offer volume.\n\nNumber of units to be purchased."
          },
          "offer_id": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.OfferId"
          },
          "scrap_quantity": {
            "type": "number",
            "format": "double"
          },
          "aggregated_quantity": {
            "$ref": "#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit"
          },
          "solution_warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sourcing_notes": {
            "type": "string"
          },
          "excess_material": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.PurchaseInfoExcess"
          },
          "purchase_options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.PurchaseOption"
            }
          }
        }
      },
      "types.rfq.costed_bom.v1.PurchaseInfoExcess": {
        "type": "object",
        "properties": {
          "quantity": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "costs": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue"
              }
            ]
          }
        }
      },
      "types.rfq.costed_bom.v1.PurchaseOption": {
        "type": "object",
        "required": [
          "offer_id",
          "purchase_quantity",
          "supplier",
          "ncnr",
          "price",
          "last_updated"
        ],
        "properties": {
          "offer_id": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.OfferId"
          },
          "offer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "offer_notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "availability": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.availability.v1.AvailabilityWithShippingTime"
              }
            ]
          },
          "purchase_quantity": {
            "type": "number",
            "format": "double"
          },
          "origin": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/OfferOrigin"
              }
            ]
          },
          "valid_until": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "packaging": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Packaging"
              }
            ]
          },
          "supplier": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.BomSupplierInfo"
          },
          "ncnr": {
            "type": "boolean"
          },
          "price": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.CostedPrice"
          },
          "factory_quantity": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "last_updated": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "types.rfq.costed_bom.v1.SelectedBomParts": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "items",
              "part_type"
            ],
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/types.rfq.costed_bom.v1.SelectedOtsPart"
                }
              },
              "part_type": {
                "type": "string",
                "enum": [
                  "OffTheShelf"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "items",
              "part_type"
            ],
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/types.rfq.costed_bom.v1.SelectedCustomPart"
                }
              },
              "part_type": {
                "type": "string",
                "enum": [
                  "Custom"
                ]
              }
            }
          }
        ]
      },
      "types.rfq.costed_bom.v1.SelectedCustomPart": {
        "type": "object",
        "required": [
          "customer_part_numbers",
          "internal_part_numbers",
          "internal_part_number_description",
          "description",
          "part_type",
          "reach_compliant",
          "rohs_compliant",
          "valid_solutions",
          "warning_solutions",
          "error_solutions"
        ],
        "properties": {
          "customer_part_numbers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "internal_part_numbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.IpnInfo"
            }
          },
          "internal_part_number_description": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "part_type": {
            "type": "string"
          },
          "reach_compliant": {
            "type": "string"
          },
          "rohs_compliant": {
            "type": "string"
          },
          "valid_solutions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.ValidSolution"
            }
          },
          "warning_solutions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.ValidSolution"
            }
          },
          "error_solutions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.ValidSolution"
            }
          },
          "purchase_info": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.rfq.costed_bom.v1.PurchaseInfo"
              }
            ]
          }
        }
      },
      "types.rfq.costed_bom.v1.SelectedOtsPart": {
        "type": "object",
        "required": [
          "customer_part_numbers",
          "internal_part_numbers",
          "internal_part_number_description",
          "manufacturer_part_number",
          "manufacturer",
          "valid_solutions",
          "warning_solutions",
          "error_solutions"
        ],
        "properties": {
          "customer_part_numbers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "internal_part_numbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.IpnInfo"
            }
          },
          "internal_part_number_description": {
            "type": "string"
          },
          "manufacturer_part_number": {
            "type": "string"
          },
          "manufacturer": {
            "type": "string"
          },
          "part_info": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.rfq.costed_bom.v1.PartInfo"
              }
            ]
          },
          "valid_solutions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.ValidSolution"
            }
          },
          "warning_solutions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.ValidSolution"
            }
          },
          "error_solutions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.costed_bom.v1.ValidSolution"
            }
          },
          "purchase_info": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.rfq.costed_bom.v1.PurchaseInfo"
              }
            ]
          }
        }
      },
      "types.rfq.costed_bom.v1.SolutionStatusCount": {
        "type": "object",
        "required": [
          "number_of_ok",
          "number_of_warning",
          "number_of_error"
        ],
        "properties": {
          "number_of_ok": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "number_of_warning": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "number_of_error": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          }
        }
      },
      "types.rfq.costed_bom.v1.ValidSolution": {
        "type": "object",
        "required": [
          "quantity",
          "offer_id",
          "scrap_quantity",
          "aggregated_quantity"
        ],
        "properties": {
          "quantity": {
            "type": "number",
            "format": "double"
          },
          "offer_id": {
            "$ref": "#/components/schemas/types.rfq.costed_bom.v1.OfferId"
          },
          "scrap_quantity": {
            "type": "number",
            "format": "double"
          },
          "aggregated_quantity": {
            "$ref": "#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit"
          }
        }
      },
      "types.rfq.overview.v1.CustomerOverview": {
        "type": "object",
        "required": [
          "customer_name"
        ],
        "properties": {
          "customer_name": {
            "type": "string"
          },
          "customer_number": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.rfq.overview.v1.SingleRfQOverview": {
        "type": "object",
        "required": [
          "id",
          "name",
          "customer",
          "creation_date",
          "status",
          "currency",
          "is_archived"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "customer": {
            "$ref": "#/components/schemas/types.rfq.overview.v1.CustomerOverview"
          },
          "internal_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "creation_date": {
            "type": "string",
            "format": "date-time"
          },
          "due_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/types.rfq.status.v1.RfQStatus"
          },
          "created_by": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "is_archived": {
            "type": "boolean"
          }
        }
      },
      "types.rfq.status.v1.RfQStatus": {
        "type": "string",
        "enum": [
          "RequestInDraft",
          "QuotationInProgress",
          "QuotationAvailable",
          "NoQuotation",
          "NoOrder",
          "OrderPlaced",
          "OrderConfirmed",
          "PaymentFailed",
          "OrderInProcurement",
          "OrderInProduction",
          "OrderShipped"
        ]
      },
      "types.rfq.status_history.v1.AllRfqStatusHistory": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.status_history.v1.RfqStatusHistory"
            }
          }
        }
      },
      "types.rfq.status_history.v1.RfqStatusChange": {
        "type": "object",
        "required": [
          "updated_at",
          "new_status"
        ],
        "properties": {
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_by": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/UserId"
              }
            ]
          },
          "previous_status": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.rfq.status.v1.RfQStatus"
              }
            ]
          },
          "new_status": {
            "$ref": "#/components/schemas/types.rfq.status.v1.RfQStatus"
          }
        }
      },
      "types.rfq.status_history.v1.RfqStatusHistory": {
        "type": "object",
        "required": [
          "rfq_id",
          "status_changes"
        ],
        "properties": {
          "rfq_id": {
            "type": "string",
            "format": "uuid"
          },
          "status_changes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.status_history.v1.RfqStatusChange"
            }
          }
        }
      },
      "types.rfq.v1.AllAssembliesResponse": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.assembly.v1.SimpleAssemblyResponse"
            }
          }
        }
      },
      "types.rfq.v1.AllRfQsResponse": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.rfq.overview.v1.SingleRfQOverview"
            }
          }
        }
      },
      "types.rfq.v1.CustomerInfo": {
        "oneOf": [
          {
            "type": "object",
            "description": "If creating RfQ for an existing customer provide customer id here",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "string",
                "format": "uuid",
                "description": "If creating RfQ for an existing customer provide customer id here"
              },
              "type": {
                "type": "string",
                "enum": [
                  "ExistingCustomer"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "If creating RfQ for a new customer, provide customer name",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "string",
                "description": "If creating RfQ for a new customer, provide customer name"
              },
              "type": {
                "type": "string",
                "enum": [
                  "NewCustomer"
                ]
              }
            }
          }
        ]
      },
      "types.rfq.v1.QuotationUpload": {
        "type": "object",
        "required": [
          "filename"
        ],
        "properties": {
          "filename": {
            "type": "string",
            "description": "Filename including extension.\n\nNote that this is the name of the file as the customer will be able to download it for the RfQ.\nThis name does not have to be related to the name of the file whose contents you want to upload\nto the URL given in the response payload.",
            "examples": [
              "example_quotation.pdf"
            ]
          },
          "replace_existing_quotation": {
            "type": "boolean",
            "description": "Optional property specifying whether the operation should replace the current quotation if it\nexists. If set to false and a quotation already exists, the operation will fail.\n\nDefault: false"
          }
        }
      },
      "types.rfq.v1.RfQCreation": {
        "type": "object",
        "description": "Describes the Rfq being created",
        "required": [
          "customer",
          "name",
          "currency"
        ],
        "properties": {
          "customer": {
            "$ref": "#/components/schemas/types.rfq.v1.CustomerInfo",
            "description": "Customer which this RfQ is for"
          },
          "name": {
            "type": "string",
            "description": "Name of the RfQ"
          },
          "ems_internal_number": {
            "type": [
              "string",
              "null"
            ],
            "description": "Internal identifier (if any)"
          },
          "contributors": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Users which contribute to this Rfq, can be empty"
          },
          "due_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date when this Rfq must be finished (if any)"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode",
            "description": "This RfQs currency"
          },
          "volume_estimate": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.rfq.volume_estimate.v1.VolumeEstimate"
              }
            ]
          },
          "industry": {
            "$ref": "#/components/schemas/types.assembly.assembly_industry.v1.AssemblyIndustry"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "internal_notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_assembly_ipn_value": {
            "type": [
              "string",
              "null"
            ],
            "description": "If present, the RfQ is created from an existing assembly identified by this IPN value and revision."
          },
          "source_assembly_ipn_revision": {
            "type": [
              "string",
              "null"
            ]
          },
          "assembly_type": {
            "$ref": "#/components/schemas/types.assembly.assembly_type.v1.AssemblyType"
          }
        }
      },
      "types.rfq.v1.RfQResponse": {
        "type": "object",
        "description": "Response for an RfQ (also known as a project).\n\nThe `id` field is the RfQ ID, which is the same as the project ID.\nBoth `/rfqs` and `/projects` endpoints return this type.",
        "required": [
          "id",
          "customer",
          "name",
          "creation_date",
          "due_date",
          "status",
          "sourcing_scenarios",
          "design_items_count",
          "assemblies_count",
          "currency",
          "is_archived",
          "industry"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The RfQ/project ID. This is the same identifier used by both `/rfqs` and `/projects` endpoints."
          },
          "customer": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "ems_internal_number": {
            "type": [
              "string",
              "null"
            ],
            "description": "Internal reference"
          },
          "creation_date": {
            "type": "string",
            "format": "date-time"
          },
          "due_date": {
            "type": "string",
            "format": "date"
          },
          "status": {
            "$ref": "#/components/schemas/types.rfq.status.v1.RfQStatus"
          },
          "sourcing_scenarios": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "design_items_count": {
            "type": "integer",
            "minimum": 0
          },
          "assemblies_count": {
            "type": "integer",
            "minimum": 0
          },
          "created_by": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "is_archived": {
            "type": "boolean"
          },
          "industry": {
            "$ref": "#/components/schemas/types.assembly.assembly_industry.v1.AssemblyIndustry"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "internal_notes": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.rfq.v1.RfqUpdate": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "internal_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "due_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "currency": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/CurrencyCode"
              }
            ]
          },
          "volume_estimate": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.rfq.volume_estimate.v1.VolumeEstimate"
              }
            ]
          },
          "status": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.rfq.status.v1.RfQStatus"
              }
            ]
          },
          "shipping_tracking_link": {
            "type": [
              "string",
              "null"
            ],
            "description": "Shipping tracking link should be present only if the status is OrderShipped."
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "internal_notes": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.rfq.v1.SingleFileUrlResponse": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "examples": [
              "https://lumiquoteprod.blob.core.windows.net/luminovo/quotation/ee824cad-d7a6-4f48-87dc-e8461a9201c4/example_quotation.pdf?sv=2018-11-09&ss=b&srt=o"
            ]
          }
        }
      },
      "types.rfq.volume_estimate.v1.VolumeEstimate": {
        "type": "object",
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "lower": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "upper": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "types.sourcing.availability.v1.AggregatedAvailabilityIncludingShippingTime": {
        "oneOf": [
          {
            "type": "object",
            "description": "There is sufficient stock for the required quantity.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Stock"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "There is not sufficient stock, but enough stock with on order quantities\nby the given lead time in days.",
            "required": [
              "days",
              "type"
            ],
            "properties": {
              "days": {
                "type": "integer",
                "format": "int64",
                "description": "There is not sufficient stock, but enough stock with on order quantities\nby the given lead time in days.",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "OnOrder"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "There is not sufficient stock, but enough stock with on order quantities\nwithout a given date or lead time",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "OnOrderWithUnknownLeadTime"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "There is not sufficient stock, even with on order quantities, but there is a given\nfactory lead time by which the required quantity can be obtained.",
            "required": [
              "days",
              "type"
            ],
            "properties": {
              "days": {
                "type": "integer",
                "format": "int64",
                "description": "There is not sufficient stock, even with on order quantities, but there is a given\nfactory lead time by which the required quantity can be obtained.",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "LeadTimeDays"
                ]
              }
            }
          }
        ],
        "description": "Availability of a solution or purchase option, indicating if it is in stock\nor the method and number of days until the required quantity is obtained."
      },
      "types.sourcing.availability.v1.Availability": {
        "oneOf": [
          {
            "type": "object",
            "description": "There is sufficient stock for the required quantity.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Stock"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "There is not sufficient stock, but enough stock with on order quantities\nby the given lead time in days.",
            "required": [
              "days",
              "type"
            ],
            "properties": {
              "days": {
                "type": "integer",
                "format": "int64",
                "description": "There is not sufficient stock, but enough stock with on order quantities\nby the given lead time in days.",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "OnOrder"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "There is not sufficient stock, but enough stock with on order quantities\nwithout a given date or lead time",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "OnOrderWithUnknownLeadTime"
                ]
              }
            }
          },
          {
            "type": "object",
            "description": "There is not sufficient stock, even with on order quantities, but there is a given\nfactory lead time by which the required quantity can be obtained.",
            "required": [
              "days",
              "type"
            ],
            "properties": {
              "days": {
                "type": "integer",
                "format": "int64",
                "description": "There is not sufficient stock, even with on order quantities, but there is a given\nfactory lead time by which the required quantity can be obtained.",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "LeadTimeDays"
                ]
              }
            }
          }
        ],
        "description": "Availability of a solution or purchase option, indicating if it is in stock\nor the method and number of days until the required quantity is obtained."
      },
      "types.sourcing.availability.v1.AvailabilityWithShippingTime": {
        "allOf": [
          {
            "$ref": "#/components/schemas/types.sourcing.availability.v1.Availability"
          },
          {
            "type": "object",
            "properties": {
              "shipping_time_in_days": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int64",
                "minimum": 0
              }
            }
          }
        ]
      },
      "types.sourcing.calculation.v1.SourcingScenarioCalculationInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/types.sourcing.calculation.v1.SourcingScenarioCalculationInputKind"
          },
          {
            "type": "object"
          }
        ]
      },
      "types.sourcing.calculation.v1.SourcingScenarioCalculationInputKind": {
        "oneOf": [
          {
            "type": "object",
            "title": "Rfq",
            "required": [
              "rfq_id",
              "type"
            ],
            "properties": {
              "rfq_id": {
                "type": "string",
                "format": "uuid"
              },
              "type": {
                "type": "string",
                "enum": [
                  "Rfq"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "SourcingScenarios",
            "required": [
              "sourcing_scenario_ids",
              "type"
            ],
            "properties": {
              "sourcing_scenario_ids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                },
                "description": "Must contain exactly one sourcing scenario ID. Requests with more than one ID are\nrejected — send one request per scenario instead.",
                "maxItems": 1,
                "minItems": 1
              },
              "type": {
                "type": "string",
                "enum": [
                  "SourcingScenarios"
                ]
              }
            }
          }
        ]
      },
      "types.sourcing.offer.custom.v1.CostInput": {
        "type": "object",
        "required": [
          "amount"
        ],
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "amount": {
            "type": "string"
          }
        }
      },
      "types.sourcing.offer.custom.v1.CustomLinkedPart": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "id",
              "type"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "type": {
                "type": "string",
                "enum": [
                  "CustomPart"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "id",
              "type"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "type": {
                "type": "string",
                "enum": [
                  "CustomComponent"
                ]
              }
            }
          }
        ]
      },
      "types.sourcing.offer.custom.v1.CustomPartOffer": {
        "type": "object",
        "required": [
          "id",
          "origin",
          "supplier_and_stock_location",
          "unit_of_measurement",
          "price_points",
          "valid_until",
          "one_time_costs",
          "creation_date",
          "has_order_files",
          "price_breaks"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "origin": {
            "$ref": "#/components/schemas/OfferOrigin"
          },
          "supplier_and_stock_location": {
            "type": "string",
            "format": "uuid"
          },
          "unit_of_measurement": {
            "$ref": "#/components/schemas/types.primitives.quantity_unit.v1.UnitOfMeasurement"
          },
          "price_points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.PricePoint"
            }
          },
          "valid_until": {
            "type": "string",
            "format": "date-time"
          },
          "offer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "one_time_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Cost"
            }
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "creation_date": {
            "type": "string",
            "format": "date-time"
          },
          "offer_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_order_files": {
            "type": "boolean"
          },
          "price_type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomPriceType"
              }
            ]
          },
          "sourcing_scenario_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "specification": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomPartOfferSpecificationResponse"
              }
            ]
          },
          "sourcing_batch_size": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "total_offered_quantity": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "price_breaks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomPartPriceBreak"
            }
          }
        }
      },
      "types.sourcing.offer.custom.v1.CustomPartOfferInput": {
        "type": "object",
        "required": [
          "linked_part",
          "supplier_and_stock_location",
          "unit_of_measurement",
          "currency",
          "price_points",
          "valid_until",
          "valid_from",
          "one_time_costs"
        ],
        "properties": {
          "linked_part": {
            "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomLinkedPart"
          },
          "supplier_and_stock_location": {
            "type": "string",
            "format": "uuid"
          },
          "unit_of_measurement": {
            "$ref": "#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "price_points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.PricePointInput"
            }
          },
          "valid_until": {
            "type": "string",
            "format": "date-time"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time"
          },
          "cancellation_window_in_days": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "one_time_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CostInput"
            }
          },
          "price_type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomPriceType"
              }
            ]
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "offer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "offer_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "sourcing_scenario_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The sourcing scenario this offer is part of. Please supply this information!"
          },
          "specification": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.CustomPartOfferSpecification"
              }
            ]
          },
          "sourcing_batch_size": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "total_offered_quantity": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "payment_terms": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/OfferPaymentTermsInput"
              }
            ]
          },
          "supplier_part_number": {
            "type": [
              "string",
              "null"
            ],
            "description": "The supplier's part number for this custom part. Required to create the\nunderlying custom part for this offer"
          },
          "lifecycle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "description": "The current stage of a product's commercial lifecycle.",
                "enum": [
                  "Unknown",
                  "PreRelease",
                  "Acquired",
                  "Active",
                  "NotRecommendedForNewDesigns",
                  "EndOfLife",
                  "Aftermarket",
                  "Obsolete"
                ]
              }
            ],
            "description": "Lifecycle of the custom part. Only applied when `supplier_part_number` is\nalso supplied"
          }
        }
      },
      "types.sourcing.offer.custom.v1.CustomPartOfferSpecification": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "required": [
                  "panel"
                ],
                "properties": {
                  "panel": {
                    "$ref": "#/components/schemas/types.custom_part.panel.v1.PanelDetails"
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "Pcb"
                ]
              }
            }
          }
        ]
      },
      "types.sourcing.offer.custom.v1.CustomPartOfferSpecificationResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "data",
              "type"
            ],
            "properties": {
              "data": {
                "type": "object",
                "required": [
                  "panel"
                ],
                "properties": {
                  "pcb": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uuid"
                  },
                  "panel": {
                    "$ref": "#/components/schemas/types.custom_part.panel.v1.PanelDetails"
                  }
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "Pcb"
                ]
              }
            }
          }
        ]
      },
      "types.sourcing.offer.custom.v1.CustomPartPriceBreak": {
        "type": "object",
        "required": [
          "minimum_order_quantity",
          "price_per_measurement",
          "availability"
        ],
        "properties": {
          "minimum_order_quantity": {
            "type": "number",
            "format": "double"
          },
          "price_per_measurement": {
            "$ref": "#/components/schemas/MonetaryValue"
          },
          "availability": {
            "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.PricePointAvailability"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "types.sourcing.offer.custom.v1.CustomPriceType": {
        "type": "string",
        "enum": [
          "ListPrice",
          "QuotePrice",
          "ContractPrice",
          "CustomerNegotiatedPrice",
          "PurchasePrice",
          "StandardPrice",
          "TargetPrice"
        ]
      },
      "types.sourcing.offer.custom.v1.PricePoint": {
        "type": "object",
        "required": [
          "quantity",
          "unit_price",
          "availability"
        ],
        "properties": {
          "quantity": {
            "type": "number",
            "format": "double"
          },
          "unit_price": {
            "$ref": "#/components/schemas/MonetaryValue"
          },
          "availability": {
            "$ref": "#/components/schemas/types.sourcing.offer.custom.v1.PricePointAvailability"
          }
        }
      },
      "types.sourcing.offer.custom.v1.PricePointAvailability": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Stock"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "days",
              "type"
            ],
            "properties": {
              "days": {
                "type": "integer",
                "format": "int64",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "LeadTimeDays"
                ]
              }
            }
          }
        ]
      },
      "types.sourcing.offer.custom.v1.PricePointInput": {
        "type": "object",
        "required": [
          "quantity",
          "amount"
        ],
        "properties": {
          "quantity": {
            "type": "number",
            "format": "double"
          },
          "amount": {
            "type": "string"
          },
          "lead_time_days": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "minimum": 0
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.AssemblyReference": {
        "type": "object",
        "description": "An assembly, identified by its `id` and its `name` (the assembly's\ndesignator), plus its internal part number, if it has one.",
        "required": [
          "id",
          "name",
          "internal_part_number"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/AssemblyId"
          },
          "name": {
            "type": "string"
          },
          "internal_part_number": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/InternalPartNumberIdentifiers",
                "description": "The assembly's internal part number (IPN). `null` when the assembly\nhas none."
              }
            ]
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.AssemblyWithQuantity": {
        "type": "object",
        "required": [
          "assembly",
          "quantity"
        ],
        "properties": {
          "assembly": {
            "type": "string",
            "format": "uuid"
          },
          "quantity": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.CancellationPolicy": {
        "type": "object",
        "required": [
          "cancellation_window"
        ],
        "properties": {
          "cancellation_window": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Duration"
          },
          "is_non_cancellable_non_returnable": {
            "type": [
              "boolean",
              "null"
            ]
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.CancellationWindowDuration": {
        "type": "string",
        "enum": [
          "Days",
          "Weeks"
        ]
      },
      "types.sourcing.sourcing_scenario.v1.Cost": {
        "type": "object",
        "required": [
          "price"
        ],
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "$ref": "#/components/schemas/MonetaryValue"
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.Duration": {
        "type": "object",
        "required": [
          "unit",
          "value"
        ],
        "properties": {
          "unit": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.CancellationWindowDuration"
          },
          "value": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.ExcessPreferences": {
        "type": "object",
        "properties": {
          "max_ratio_percent": {
            "type": [
              "number",
              "null"
            ],
            "format": "float"
          },
          "minimum_savings": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MonetaryValue"
              }
            ]
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.InventoryPreference": {
        "type": "string",
        "enum": [
          "PreferInventory",
          "Neutral",
          "PreferMarketOffers"
        ]
      },
      "types.sourcing.sourcing_scenario.v1.LeadTimePreference": {
        "oneOf": [
          {
            "type": "object",
            "title": "BestPrice",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "BestPrice"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "Fastest",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Fastest"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "BestPriceBy",
            "required": [
              "target",
              "type"
            ],
            "properties": {
              "target": {
                "type": "string",
                "format": "date"
              },
              "type": {
                "type": "string",
                "enum": [
                  "BestPriceBy"
                ]
              }
            }
          }
        ]
      },
      "types.sourcing.sourcing_scenario.v1.Limit": {
        "oneOf": [
          {
            "type": "object",
            "title": "Never",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "Never"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "Days",
            "required": [
              "number",
              "type"
            ],
            "properties": {
              "number": {
                "type": "integer",
                "format": "int64",
                "minimum": 0
              },
              "type": {
                "type": "string",
                "enum": [
                  "Days"
                ]
              }
            }
          }
        ]
      },
      "types.sourcing.sourcing_scenario.v1.OfferAgeLimit": {
        "type": "object",
        "required": [
          "expiring_before_validity_date",
          "expired_after_validity_date",
          "old_after_update",
          "outdated_after_update"
        ],
        "properties": {
          "expiring_before_validity_date": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Limit"
          },
          "expired_after_validity_date": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Limit"
          },
          "old_after_update": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Limit"
          },
          "outdated_after_update": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Limit"
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.OneTimeCost": {
        "type": "object",
        "required": [
          "price"
        ],
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "$ref": "#/components/schemas/MonetaryValue"
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.Packaging": {
        "type": "string",
        "enum": [
          "AmmoPack",
          "Bag",
          "Bulk",
          "Reel",
          "ReReel",
          "Spool",
          "Tape",
          "Tray",
          "Tube",
          "Carton"
        ]
      },
      "types.sourcing.sourcing_scenario.v1.PriceType": {
        "type": "string",
        "enum": [
          "PurchasePrice",
          "ListPrice",
          "ContractPrice",
          "QuotePrice",
          "StandardPrice",
          "CustomerNegotiatedPrice",
          "TargetPrice"
        ]
      },
      "types.sourcing.sourcing_scenario.v1.SolutionPreference": {
        "type": "object",
        "required": [
          "lead_time_preference",
          "preferred_suppliers_and_stock_locations",
          "approved_suppliers_and_stock_locations",
          "excess_preference",
          "offer_age_limit",
          "low_stock_warning_factor",
          "packaging_preference",
          "prefer_direct_api_integrations",
          "excluded_price_types",
          "inventory_preference",
          "preferred_inventory_sites",
          "approved_inventory_sites",
          "use_unit_price",
          "exclude_mismatched_price_points",
          "prioritize_preferred_manufacturers"
        ],
        "properties": {
          "lead_time_preference": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.LeadTimePreference"
          },
          "preferred_suppliers_and_stock_locations": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "approved_suppliers_and_stock_locations": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "excess_preference": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.ExcessPreferences"
          },
          "offer_age_limit": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.OfferAgeLimit"
          },
          "low_stock_warning_factor": {
            "type": "number",
            "format": "double"
          },
          "packaging_preference": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.Packaging"
            }
          },
          "prefer_direct_api_integrations": {
            "type": "boolean"
          },
          "excluded_price_types": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.PriceType"
            }
          },
          "inventory_preference": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.InventoryPreference"
          },
          "preferred_inventory_sites": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "approved_inventory_sites": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "use_unit_price": {
            "type": "boolean",
            "description": "If true, the unit price is used for sorting instead of the total price"
          },
          "exclude_mismatched_price_points": {
            "type": "boolean"
          },
          "prioritize_preferred_manufacturers": {
            "type": "boolean"
          },
          "prefer_customer_negotiated_prices": {
            "type": "boolean"
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.SourcingScenarioInput": {
        "type": "object",
        "required": [
          "rfq",
          "name",
          "assembly_quantities"
        ],
        "properties": {
          "rfq": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "solution_preference": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.SolutionPreference"
              }
            ]
          },
          "assembly_quantities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyWithQuantity"
            }
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.SourcingScenarioResponse": {
        "type": "object",
        "required": [
          "id",
          "rfq",
          "name",
          "solution_preference",
          "assembly_quantities"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "rfq": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "solution_preference": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.SolutionPreference"
          },
          "assembly_quantities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyWithQuantity"
            }
          }
        }
      },
      "types.sourcing.sourcing_scenario.v1.SourcingScenarioUpdateInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "solution_preference": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.SolutionPreference"
              }
            ]
          },
          "assembly_quantities": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v1.AssemblyWithQuantity"
            }
          }
        }
      },
      "types.sourcing.sourcing_scenario.v2.CurrencySettingsDto": {
        "type": "object",
        "description": "Currency and exchange rate settings for a sourcing scenario.\n\nAll costs in a sourcing scenario are converted to the `base_currency` using the\nprovided exchange rates. Each rate represents how many units of the foreign currency\nequal one unit of the base currency.",
        "required": [
          "base_currency",
          "exchange_rates"
        ],
        "properties": {
          "base_currency": {
            "$ref": "#/components/schemas/CurrencyCode",
            "description": "The base currency used for all cost calculations in this sourcing scenario.\nAll monetary values are converted to this currency."
          },
          "exchange_rates": {
            "type": "object",
            "description": "Exchange rates for converting foreign currencies to the base currency.\n\nEach key is a currency code (e.g., `\"USD\"`, `\"CNY\"`), and the value contains\nthe conversion rate and whether it was manually set.\nRates are expressed as: 1 unit of base currency = `rate` units of foreign currency.",
            "additionalProperties": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v2.ExchangeRateDto"
            },
            "propertyNames": {
              "type": "string"
            }
          }
        }
      },
      "types.sourcing.sourcing_scenario.v2.DemandDto": {
        "oneOf": [
          {
            "type": "object",
            "description": "Demand for an assembly (e.g., a PCB or sub-assembly).",
            "required": [
              "id",
              "name",
              "quantity",
              "type"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "Unique identifier of the assembly."
              },
              "name": {
                "type": "string",
                "description": "Human-readable name of the assembly (the assembly designator)."
              },
              "quantity": {
                "$ref": "#/components/schemas/types.primitives.quantity_unit.v1.QuantityUnit",
                "description": "The required quantity for this assembly demand, including the unit of measurement."
              },
              "type": {
                "type": "string",
                "enum": [
                  "Assembly"
                ]
              }
            }
          }
        ],
        "description": "A demand associated with a sourcing scenario.\n\nEach demand has a `type` field discriminator indicating its kind. Currently only\n`\"Assembly\"` demands are supported. Part and Component demand types will be added\nin a future update without breaking this API version."
      },
      "types.sourcing.sourcing_scenario.v2.ExchangeRateDto": {
        "type": "object",
        "description": "An exchange rate for a single foreign currency relative to the base currency.",
        "required": [
          "rate",
          "is_manual"
        ],
        "properties": {
          "rate": {
            "type": "number",
            "format": "double",
            "description": "The conversion rate. When `is_manual` is `true`, this is the manually overridden rate.\nOtherwise, it is the automatically fetched rate from a public exchange rate provider."
          },
          "is_manual": {
            "type": "boolean",
            "description": "Whether this exchange rate was manually set by a user (`true`) or automatically\nfetched from a public exchange rate API (`false`).\nManual rates take precedence over automatic rates for all cost conversions."
          }
        }
      },
      "types.sourcing.sourcing_scenario.v2.ProjectDto": {
        "oneOf": [
          {
            "type": "object",
            "title": "Rfq",
            "description": "The sourcing scenario belongs to an RFQ.",
            "required": [
              "id",
              "type"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "The sourcing scenario belongs to an RFQ."
              },
              "type": {
                "type": "string",
                "enum": [
                  "Rfq"
                ]
              }
            }
          },
          {
            "type": "object",
            "title": "Negotiation",
            "description": "The sourcing scenario belongs to a Negotiation.",
            "required": [
              "id",
              "type"
            ],
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "The sourcing scenario belongs to a Negotiation."
              },
              "type": {
                "type": "string",
                "enum": [
                  "Negotiation"
                ]
              }
            }
          }
        ],
        "description": "The project a sourcing scenario is associated with.\n\nA project is either an RFQ (Request for Quotation) or a Negotiation.\nThe `type` field indicates which kind."
      },
      "types.sourcing.sourcing_scenario.v2.SourcingScenarioResponse": {
        "type": "object",
        "description": "A sourcing scenario with its associated project, demands, and settings.\n\nA sourcing scenario defines what needs to be sourced (demands), which project it belongs to,\nand the currency/exchange rate settings used for cost calculations.",
        "required": [
          "id",
          "name",
          "project",
          "demands",
          "settings"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the sourcing scenario."
          },
          "name": {
            "type": "string",
            "description": "Human-readable name of the sourcing scenario."
          },
          "project": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v2.ProjectDto",
            "description": "The project this sourcing scenario belongs to."
          },
          "demands": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v2.DemandDto"
            },
            "description": "The demands associated with this sourcing scenario.\n\nEach demand has a `type` field indicating its kind. Currently only `\"Assembly\"` demands\nare returned. Additional demand types (Part, Component) will be added in future versions.\nConsumers should gracefully handle or ignore unknown demand types."
          },
          "settings": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v2.SourcingScenarioSettingsDto",
            "description": "Settings for this sourcing scenario, including currency and exchange rate configuration."
          }
        }
      },
      "types.sourcing.sourcing_scenario.v2.SourcingScenarioSettingsDto": {
        "type": "object",
        "description": "Sourcing scenario settings.\n\nContains configuration that controls how sourcing is performed.\nThis object is extensible — additional setting groups may be added alongside\n`currency` in the future.",
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "$ref": "#/components/schemas/types.sourcing.sourcing_scenario.v2.CurrencySettingsDto",
            "description": "Currency and exchange rate settings used for cost calculations."
          }
        }
      },
      "types.supplier.v1.BulkSupplierRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "types.supplier.v1.BulkSuppliersResponse": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.supplier.v1.SupplierResponse"
            }
          }
        }
      },
      "types.supplier.v1.ImportSuppliersRequest": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.supplier.v1.SupplierImportInput"
            }
          }
        }
      },
      "types.supplier.v1.ImportSuppliersResponse": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.supplier.v1.SupplierImportResultResponse"
            }
          }
        }
      },
      "types.supplier.v1.SingleSupplierResponse": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/types.supplier.v1.SupplierResponse"
          }
        }
      },
      "types.supplier.v1.SupplierImportInput": {
        "type": "object",
        "required": [
          "supplier_number",
          "name",
          "supplier_part_type",
          "supplier_type"
        ],
        "properties": {
          "supplier_number": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "supplier_part_type": {
            "$ref": "#/components/schemas/types.supplier.v1.SupplierPartTypeInput"
          },
          "supplier_type": {
            "$ref": "#/components/schemas/types.supplier.v1.SupplierTypeInput"
          },
          "origin": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.supplier.v1.SupplierOriginInput"
              }
            ]
          },
          "supplier_preference": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.supplier.v1.SupplierPreferenceInput",
                "description": "When specified, applies this preference to all supplier stock-locations\non the default sourcing template for the imported supplier"
              }
            ]
          }
        }
      },
      "types.supplier.v1.SupplierImportResultResponse": {
        "type": "object",
        "required": [
          "index",
          "success",
          "status",
          "description"
        ],
        "properties": {
          "index": {
            "type": "integer",
            "minimum": 0
          },
          "success": {
            "type": "boolean"
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "description": {
            "type": "string"
          },
          "supplier_id": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/SupplierId"
              }
            ]
          }
        }
      },
      "types.supplier.v1.SupplierOrigin": {
        "type": "string",
        "enum": [
          "System",
          "Erp",
          "Manual"
        ]
      },
      "types.supplier.v1.SupplierOriginInput": {
        "type": "string",
        "enum": [
          "Erp",
          "Manual"
        ]
      },
      "types.supplier.v1.SupplierPartType": {
        "type": "string",
        "enum": [
          "OffTheShelf",
          "Pcb",
          "Custom",
          "Assembly"
        ]
      },
      "types.supplier.v1.SupplierPartTypeInput": {
        "type": "string",
        "enum": [
          "OffTheShelf",
          "Pcb",
          "Custom"
        ]
      },
      "types.supplier.v1.SupplierPreferenceInput": {
        "type": "string",
        "enum": [
          "NotApproved",
          "Approved",
          "Preferred",
          "Excluded"
        ]
      },
      "types.supplier.v1.SupplierResponse": {
        "type": "object",
        "required": [
          "id",
          "name",
          "alternative_names",
          "manually_added",
          "supplier_part_type",
          "supplier_type",
          "origin"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "alternative_names": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "supplier_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "manually_added": {
            "type": "boolean"
          },
          "supplier_part_type": {
            "$ref": "#/components/schemas/types.supplier.v1.SupplierPartType"
          },
          "supplier_type": {
            "$ref": "#/components/schemas/types.supplier.v1.SupplierType"
          },
          "origin": {
            "$ref": "#/components/schemas/types.supplier.v1.SupplierOrigin"
          }
        }
      },
      "types.supplier.v1.SupplierType": {
        "type": "string",
        "enum": [
          "Distributor",
          "Manufacturer",
          "Ems"
        ]
      },
      "types.supplier.v1.SupplierTypeInput": {
        "type": "string",
        "enum": [
          "Distributor",
          "Manufacturer",
          "Ems"
        ]
      },
      "types.supplier.v1.SupplierUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "supplier_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "supplier_part_type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.supplier.v1.SupplierPartTypeInput"
              }
            ]
          },
          "supplier_type": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.supplier.v1.SupplierTypeInput"
              }
            ]
          },
          "origin": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.supplier.v1.SupplierOriginInput"
              }
            ]
          },
          "supplier_preference": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.supplier.v1.SupplierPreferenceInput",
                "description": "When specified, applies this preference to all supplier stock-locations\non the default sourcing template for the updated supplier"
              }
            ]
          }
        }
      },
      "types.user.v1.AllUsers": {
        "type": "object",
        "required": [
          "items"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/types.user.v1.User"
            }
          }
        }
      },
      "types.user.v1.User": {
        "type": "object",
        "required": [
          "id",
          "first_name",
          "last_name",
          "email",
          "user_language"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "user_language": {
            "type": "string"
          },
          "phone_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "customer": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        }
      },
      "types.user.v1.UserInviteInput": {
        "type": "object",
        "required": [
          "email",
          "first_name",
          "last_name"
        ],
        "properties": {
          "email": {
            "type": "string",
            "description": "The email address of the user to invite."
          },
          "first_name": {
            "type": "string",
            "description": "The first name of the user to invite."
          },
          "last_name": {
            "type": "string",
            "description": "The last name of the user to invite."
          },
          "language": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/types.customer.v1.Language",
                "description": "The language of the user. Defaults to English if not specified."
              }
            ]
          },
          "user_role": {
            "$ref": "#/components/schemas/types.user.v1.UserRole",
            "description": "The role of the user. Defaults to Member if not specified."
          },
          "host": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional hostname for the invite link (e.g., \"portal.tenant.com\").\nMust be a valid hostname configured for your tenant. If not specified, a default\nhostname for your tenant will be used."
          }
        }
      },
      "types.user.v1.UserRole": {
        "type": "string",
        "enum": [
          "member",
          "admin"
        ]
      },
      "types.user.v1.UserUpdateInput": {
        "type": "object",
        "properties": {
          "first_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "The first name of the user."
          },
          "last_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "The last name of the user."
          },
          "phone_number": {
            "type": [
              "string",
              "null"
            ],
            "description": "The phone number of the user."
          },
          "position": {
            "type": [
              "string",
              "null"
            ],
            "description": "The position of the user within the organization."
          }
        }
      },
      "types.vat.v1.CompleteVatId": {
        "type": "object",
        "required": [
          "id",
          "id_type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "actual VAT ID"
          },
          "id_type": {
            "$ref": "#/components/schemas/types.vat.v1.VatIdType",
            "description": "country / entity of issuance of that particular ID"
          }
        }
      },
      "types.vat.v1.VatIdType": {
        "type": "string",
        "description": "The type of the VAT ID.\n\nYou can read more on the [Stripe docs](https://stripe.com/docs/billing/customer/tax-ids).",
        "enum": [
          "ad_nrt",
          "ae_trn",
          "ar_cuit",
          "au_abn",
          "au_arn",
          "bg_uic",
          "bo_tin",
          "br_cnpj",
          "br_cpf",
          "ca_bn",
          "ca_gst_hst",
          "ca_pst_bc",
          "ca_pst_mb",
          "ca_pst_sk",
          "ca_qst",
          "cl_tin",
          "cn_tin",
          "co_nit",
          "cr_tin",
          "do_rcn",
          "ec_ruc",
          "eg_tin",
          "sv_nit",
          "es_cif",
          "eu_oss_vat",
          "eu_vat",
          "ge_vat",
          "hk_br",
          "hu_tin",
          "id_npwp",
          "il_vat",
          "in_gst",
          "is_vat",
          "jp_cn",
          "jp_rn",
          "jp_trn",
          "ke_pin",
          "li_uid",
          "mx_rfc",
          "my_frp",
          "my_itn",
          "my_sst",
          "no_vat",
          "nz_gst",
          "pe_ruc",
          "ph_tin",
          "ro_tin",
          "ru_kpp",
          "rs_pib",
          "kr_brn",
          "ch_vat",
          "ru_inn",
          "sa_vat",
          "sg_gst",
          "sg_uen",
          "si_tin",
          "za_vat",
          "tw_vat",
          "th_vat",
          "tr_tin",
          "ua_vat",
          "gb_vat",
          "us_ein",
          "uy_ruc",
          "ve_rif",
          "vn_tin"
        ]
      },
      "PCB": {
        "required": [
          "assembly",
          "files",
          "holes",
          "specifications",
          "version"
        ],
        "type": "object",
        "properties": {
          "assembly": {
            "type": "string",
            "format": "uuid"
          },
          "version": {
            "type": "string",
            "format": "uuid"
          },
          "outline": {
            "allOf": [
              {
                "$ref": "#/components/schemas/APIOutline"
              }
            ]
          },
          "holes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "files": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/LayerFile"
                }
              ]
            }
          },
          "metaInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "specifications": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          },
          "defaultSpecification": {
            "type": "string",
            "format": "uuid"
          },
          "drillSets": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/DrillSet"
                }
              ]
            }
          }
        }
      },
      "HoleList": {
        "required": [
          "tools"
        ],
        "type": "object",
        "properties": {
          "from": {
            "type": "number"
          },
          "to": {
            "type": "number"
          },
          "tools": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Tool"
                }
              ]
            }
          },
          "scaling": {
            "type": "number"
          },
          "fileUnit": {
            "type": "string"
          }
        }
      },
      "CollectedPCB": {
        "required": [
          "assembly",
          "pcb"
        ],
        "type": "object",
        "properties": {
          "assembly": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Assembly"
              }
            ]
          },
          "pcb": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCB"
              }
            ]
          },
          "layerstack": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LayerStackAPI"
              }
            ]
          },
          "panels": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/CustomerPanelAPI"
                }
              ]
            }
          }
        }
      },
      "PCBUpdate": {
        "type": "object",
        "properties": {
          "defaultSpecification": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "SetOutline": {
        "required": [
          "candidate"
        ],
        "type": "object",
        "properties": {
          "candidate": {
            "type": "string",
            "format": "uuid"
          },
          "userChoice": {
            "type": "boolean"
          }
        }
      },
      "APIOutline": {
        "required": [
          "id",
          "metaInfo",
          "userChoice"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "file": {
            "type": "string",
            "format": "uuid"
          },
          "preview": {
            "type": "string"
          },
          "userChoice": {
            "type": "boolean"
          },
          "metaInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "graphic": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Graphic"
              }
            ]
          },
          "score": {
            "type": "number"
          },
          "width": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "height": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          }
        }
      },
      "Object": {
        "type": "object"
      },
      "Graphic": {
        "required": [
          "count",
          "defs",
          "format",
          "paths",
          "viewbox"
        ],
        "type": "object",
        "properties": {
          "viewbox": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Dimension"
              }
            ]
          },
          "format": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Format"
              }
            ]
          },
          "count": {
            "type": "number"
          },
          "paths": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GraphicElement"
                  }
                ]
              }
            }
          },
          "defs": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/GraphicDefinition"
                }
              ]
            }
          }
        }
      },
      "LayerFileUpdate": {
        "type": "object",
        "properties": {
          "inverted": {
            "type": "boolean"
          }
        }
      },
      "LayerFile": {
        "required": [
          "inverted",
          "metaInfo"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "data": {
            "type": "string"
          },
          "format": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Format"
              }
            ]
          },
          "fileType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FileType"
              }
            ]
          },
          "metaInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "inverted": {
            "type": "boolean"
          }
        }
      },
      "MetaInfo": {
        "required": [
          "properties"
        ],
        "type": "object",
        "properties": {
          "properties": {
            "type": "object",
            "additionalProperties": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Property"
                }
              ]
            },
            "description": "The Map of properties"
          }
        }
      },
      "PCBStreamMessage": {
        "required": [
          "m",
          "t"
        ],
        "type": "object",
        "properties": {
          "t": {
            "type": "string"
          },
          "m": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Message"
              }
            ]
          },
          "ref": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyReference"
              }
            ]
          }
        }
      },
      "PCBSpecificationApi": {
        "required": [
          "previews",
          "spec"
        ],
        "type": "object",
        "properties": {
          "spec": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBSpecification"
              }
            ]
          },
          "previews": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SpecificationPreviews"
              }
            ]
          }
        }
      },
      "PCBSpecificationCreation": {
        "required": [
          "alias"
        ],
        "type": "object",
        "properties": {
          "alias": {
            "type": "string"
          },
          "template": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "PCBSpecificationUpdate": {
        "type": "object",
        "properties": {
          "dfm": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Property"
                }
              ]
            }
          },
          "settings": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Property"
                }
              ]
            }
          },
          "user": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Property"
                }
              ]
            }
          }
        }
      },
      "PCBV2Creation": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the PCB\n\nThe name of the PCB.\nThe PCBs GID is generated based on this name\n"
          },
          "customer": {
            "type": "string",
            "description": "The ID of the Customer for this PCB",
            "format": "uuid"
          },
          "contact": {
            "type": "string",
            "description": "The ID of the Contact for this PCB",
            "format": "uuid"
          },
          "orderId": {
            "type": "string",
            "description": "The External ID of the RFQ/Order"
          },
          "description": {
            "type": "string",
            "description": "The description for the PCB"
          },
          "externalReference": {
            "description": "The External ID of the RFQ/Order",
            "allOf": [
              {
                "$ref": "#/components/schemas/LqReference"
              }
            ]
          },
          "withoutFiles": {
            "type": "boolean",
            "description": "Set this to true if the PCB will not contain initial files"
          }
        }
      },
      "PCBV2": {
        "required": [
          "assembly",
          "created",
          "filesLocked",
          "id",
          "lifecycles",
          "projectType",
          "properties",
          "specifications"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of the PCB",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "The Name of the PCB"
          },
          "assembly": {
            "type": "string",
            "description": "\nThe Name of the PCB\nThis property exists to help identify the corresponding assembly if needed.\n",
            "format": "uuid"
          },
          "description": {
            "type": "string",
            "description": "The description for the PCB"
          },
          "created": {
            "type": "string",
            "description": "The creation date of the PCB",
            "format": "date"
          },
          "files": {
            "type": "array",
            "description": "The files the PCB",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/PCBV2File"
                }
              ]
            }
          },
          "filesLocked": {
            "type": "boolean",
            "description": "The Lock-Status of the files"
          },
          "lifecycles": {
            "type": "array",
            "description": "The Lifecycles of the PCB",
            "items": {
              "description": "The Lifecycles of the PCB",
              "allOf": [
                {
                  "$ref": "#/components/schemas/AssemblyLifecycleStage"
                }
              ]
            }
          },
          "projectType": {
            "description": "Type of PCB Project",
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectType"
              }
            ]
          },
          "orderId": {
            "type": "string",
            "description": "The External ID of the RFQ/Order"
          },
          "outline": {
            "type": "string",
            "description": "The name of the file used for the outline"
          },
          "specifications": {
            "type": "array",
            "description": "The Specifications of the PCB",
            "items": {
              "description": "The Specifications of the PCB",
              "allOf": [
                {
                  "$ref": "#/components/schemas/PCBV2Specification"
                }
              ]
            }
          },
          "properties": {
            "description": "The Properties of the PCB determined by stackrate",
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2Properties"
              }
            ]
          },
          "customer": {
            "type": "string",
            "description": "The ID of the Customer for this PCB",
            "format": "uuid"
          }
        }
      },
      "PCBV2SpecificationCapabilities": {
        "required": [
          "board",
          "layerStack",
          "markings",
          "mechanical",
          "miscellaneous",
          "reports"
        ],
        "type": "object",
        "properties": {
          "board": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2BoardCapabilities"
              }
            ]
          },
          "layerStack": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2LayerStackCapabilities"
              }
            ]
          },
          "mechanical": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MechanicalCapabilities"
              }
            ]
          },
          "reports": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2ReportsCapabilities"
              }
            ]
          },
          "markings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MarkingsCapabilities"
              }
            ]
          },
          "miscellaneous": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MiscellaneousCapabilities"
              }
            ]
          }
        }
      },
      "PcbBaseMaterialVendors": {
        "required": [
          "vendors"
        ],
        "type": "object",
        "properties": {
          "vendors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PcbBaseMaterial": {
        "required": [
          "baseMaterial",
          "id",
          "materialNumber",
          "materialType",
          "materialVendor"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "materialVendor": {
            "type": "string"
          },
          "materialNumber": {
            "type": "string"
          },
          "materialType": {
            "type": "string",
            "enum": [
              "prepreg",
              "core"
            ]
          },
          "baseMaterial": {
            "type": "string",
            "enum": [
              "FR-2",
              "FR-3",
              "FR-4",
              "CEM1",
              "CEM2",
              "CEM3",
              "polyimide"
            ]
          },
          "tgValue": {
            "type": "number"
          },
          "ctiClass": {
            "type": "string",
            "enum": [
              "none",
              "i",
              "ii",
              "iiia",
              "iiib"
            ]
          },
          "plcClass": {
            "type": "string",
            "enum": [
              "none",
              "plc0",
              "plc1",
              "plc2",
              "plc3"
            ]
          }
        }
      },
      "PcbSoldermaskMaterialVendors": {
        "required": [
          "vendors"
        ],
        "type": "object",
        "properties": {
          "vendors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PcbSoldermaskMaterial": {
        "required": [
          "halogenFree",
          "id",
          "materialNumber",
          "materialVendor",
          "soldermaskColor"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "materialVendor": {
            "type": "string"
          },
          "materialNumber": {
            "type": "string"
          },
          "soldermaskColor": {
            "type": "string"
          },
          "finish": {
            "type": "string",
            "enum": [
              "matte",
              "glossy",
              "semi-gloss",
              "lpi"
            ]
          },
          "halogenFree": {
            "type": "boolean"
          }
        }
      },
      "MaterialImportRequest": {
        "required": [
          "csv",
          "kind",
          "mode"
        ],
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "base",
              "soldermask"
            ]
          },
          "mode": {
            "type": "string",
            "enum": [
              "replace-all",
              "upsert"
            ]
          },
          "csv": {
            "type": "string"
          }
        }
      },
      "MaterialImportResult": {
        "required": [
          "deleted",
          "errors",
          "imported",
          "kind",
          "mode",
          "totalRows"
        ],
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "base",
              "soldermask"
            ]
          },
          "mode": {
            "type": "string",
            "enum": [
              "replace-all",
              "upsert"
            ]
          },
          "totalRows": {
            "type": "integer",
            "format": "int32"
          },
          "imported": {
            "type": "integer",
            "format": "int32"
          },
          "deleted": {
            "type": "integer",
            "format": "int32"
          },
          "errors": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/MaterialImportRowError"
                }
              ]
            }
          }
        }
      },
      "NotUsed": {
        "type": "object"
      },
      "DuplicatePcb": {
        "required": [
          "exactFiles",
          "fileMatchScore",
          "gid",
          "pcb",
          "propertyMatchScore",
          "propertyMatches",
          "totalScore"
        ],
        "type": "object",
        "properties": {
          "pcb": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2"
              }
            ]
          },
          "gid": {
            "type": "string"
          },
          "propertyMatches": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/PropertyMatch"
                }
              ]
            }
          },
          "propertyMatchScore": {
            "type": "number",
            "format": "double"
          },
          "exactFiles": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/PCBV2File"
                }
              ]
            }
          },
          "fileMatchScore": {
            "type": "number",
            "format": "double"
          },
          "totalScore": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "PCBV2Clone": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the PCB\n\nThe name of the PCB.\nThe PCBs GID is generated based on this name\n"
          },
          "externalReference": {
            "description": "The External ID of the RFQ/Order",
            "allOf": [
              {
                "$ref": "#/components/schemas/LqReference"
              }
            ]
          }
        }
      },
      "PCBV2Id": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "PCBV2Update": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2PropertiesUpdate"
              }
            ]
          }
        }
      },
      "TokenResponse": {
        "required": [
          "authToken"
        ],
        "type": "object",
        "properties": {
          "authToken": {
            "type": "string"
          },
          "refreshToken": {
            "type": "string"
          }
        }
      },
      "PCBV2StreamMessage": {
        "required": [
          "m",
          "t"
        ],
        "type": "object",
        "properties": {
          "t": {
            "type": "string"
          },
          "m": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MessageV2"
              }
            ]
          },
          "ref": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyReference"
              }
            ]
          }
        }
      },
      "AssemblyLifecycleStage": {
        "required": [
          "name",
          "status"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "enum": [
              "main",
              "composition",
              "dfmanalysis",
              "customer-panel",
              "dfm",
              "reconciliation",
              "analysis",
              "files",
              "fileanalysis",
              "layerstack",
              "render",
              "specification-render",
              "reconciled_specification-render",
              "initialization",
              "production-analysis"
            ]
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LifecycleStageStatus"
              }
            ]
          },
          "history": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/HistoricLifecycleState"
                }
              ]
            }
          }
        }
      },
      "PCBV2Specification": {
        "required": [
          "hash",
          "id",
          "name",
          "previews",
          "settings"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "\nID of the Specification\n\nUnique for this PCB",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "\nName of the Specification\n\nUnique for this PCB"
          },
          "previews": {
            "description": "The PCB Previews",
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBPreviews"
              }
            ]
          },
          "settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2Properties"
              }
            ]
          },
          "hash": {
            "type": "string",
            "description": "A Hash of the Specification"
          },
          "status": {
            "description": "The status of the Specification",
            "allOf": [
              {
                "$ref": "#/components/schemas/SpecificationStatus"
              }
            ]
          },
          "changes": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SpecificationChange"
                }
              ]
            }
          }
        }
      },
      "PCBPreviews": {
        "type": "object",
        "properties": {
          "front": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FileAccess"
              }
            ]
          },
          "rear": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FileAccess"
              }
            ]
          }
        }
      },
      "DrillSet": {
        "required": [
          "layers"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "layers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Tool": {
        "required": [
          "diameter",
          "drillType",
          "drills",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "drillType": {
            "type": "string"
          },
          "diameter": {
            "type": "number"
          },
          "drills": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/DrillHit"
                }
              ]
            }
          },
          "slots": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SlotFeatures"
              }
            ]
          }
        }
      },
      "Assembly": {
        "required": [
          "created",
          "creator",
          "features",
          "gid",
          "id",
          "information",
          "name",
          "status",
          "team"
        ],
        "type": "object",
        "properties": {
          "team": {
            "type": "string"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "gid": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "creator": {
            "type": "string"
          },
          "created": {
            "type": "string",
            "format": "date"
          },
          "information": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyInformation"
              }
            ]
          },
          "features": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/AssemblyFeature"
                }
              ]
            }
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyStatus"
              }
            ]
          },
          "currentVersion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Version"
              }
            ]
          },
          "preview": {
            "type": "string"
          },
          "mail": {
            "type": "string"
          },
          "template": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyReference"
              }
            ]
          },
          "externalReference": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LqReference"
              }
            ]
          }
        }
      },
      "LayerStackAPI": {
        "required": [
          "assembly",
          "definition",
          "stacks",
          "unmatchedFiles"
        ],
        "type": "object",
        "properties": {
          "assembly": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AbstractAssemblyReference"
              }
            ]
          },
          "definition": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LayerstackDefinitionAPI"
              }
            ]
          },
          "stacks": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SubStackAPI"
                }
              ]
            }
          },
          "unmatchedFiles": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/LayerFile"
                }
              ]
            }
          }
        }
      },
      "CustomerPanelAPI": {
        "required": [
          "dimensionsSource",
          "elements",
          "isExistingPanel",
          "name",
          "spacing"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "externalId": {
            "type": "string"
          },
          "sourcingScenario": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "elements": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/CustomerPanelElement"
                }
              ]
            }
          },
          "description": {
            "type": "string"
          },
          "preview": {
            "type": "string"
          },
          "spacing": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Spacing"
              }
            ]
          },
          "working": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/WorkingPanelUsageAPI"
                }
              ]
            }
          },
          "selected": {
            "type": "string",
            "format": "uuid"
          },
          "bestYield": {
            "type": "string",
            "format": "uuid"
          },
          "width": {
            "type": "number"
          },
          "height": {
            "type": "number"
          },
          "weight": {
            "type": "number"
          },
          "isExistingPanel": {
            "type": "boolean"
          },
          "dimensionsSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DimensionsSource"
              }
            ]
          }
        }
      },
      "LengthWithUnit": {
        "required": [
          "unit",
          "value"
        ],
        "type": "object",
        "properties": {
          "value": {
            "type": "number"
          },
          "unit": {
            "type": "string",
            "enum": [
              "Micrometer",
              "Inch",
              "Mil",
              "Millimeter",
              "Microinch"
            ]
          }
        }
      },
      "Dimension": {
        "required": [
          "max",
          "min"
        ],
        "type": "object",
        "properties": {
          "min": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BigPoint"
              }
            ]
          },
          "max": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BigPoint"
              }
            ]
          }
        }
      },
      "Format": {
        "required": [
          "resolution",
          "unit"
        ],
        "type": "object",
        "properties": {
          "unit": {
            "type": "string"
          },
          "resolution": {
            "type": "number"
          },
          "dimension": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Dimension"
              }
            ]
          },
          "complexity": {
            "type": "integer",
            "format": "int32"
          },
          "scaling": {
            "type": "number",
            "format": "double"
          },
          "gerberscale": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "GraphicElement": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "tag": {
            "type": "string"
          },
          "use": {
            "allOf": [
              {
                "$ref": "#/components/schemas/GraphicUsage"
              }
            ]
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/A"
                  }
                ]
              }
            }
          },
          "elementIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "trace": {
            "type": "string"
          },
          "orientation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FlashOrientation"
              }
            ]
          }
        }
      },
      "GraphicDefinition": {
        "required": [
          "id",
          "path"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "path": {
            "type": "string"
          }
        }
      },
      "FileType": {
        "required": [
          "fileType",
          "productionFile",
          "service"
        ],
        "type": "object",
        "properties": {
          "service": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "fileType": {
            "type": "string"
          },
          "productionFile": {
            "type": "boolean"
          },
          "mimeType": {
            "type": "string"
          },
          "index": {
            "type": "integer",
            "format": "int32"
          },
          "from": {
            "type": "integer",
            "format": "int32"
          },
          "to": {
            "type": "integer",
            "format": "int32"
          },
          "matchedByLLM": {
            "type": "boolean"
          }
        }
      },
      "Property": {
        "type": "object"
      },
      "Message": {
        "type": "object"
      },
      "AssemblyReference": {
        "required": [
          "id",
          "team",
          "version"
        ],
        "type": "object",
        "properties": {
          "team": {
            "type": "string",
            "description": "\nThe team of the Assembly\n\nWill always be set when retrieving data.\nWhen Posting data, this is generally ignored in favor of the current logged-in team "
          },
          "id": {
            "type": "string",
            "description": "\n The Assembly UUID\n\n This ID is universally unique and will not change for any given assembly",
            "format": "uuid"
          },
          "gid": {
            "type": "string",
            "description": "\n The Assembly GID (human readable ID)\n\n This ID is unique inside its team, and will not change for any given assembly"
          },
          "version": {
            "type": "string",
            "description": "\n The Version ID\n\n  This ID is universally unique and will not change for any given version",
            "format": "uuid"
          }
        }
      },
      "PCBSpecification": {
        "required": [
          "alias",
          "assembly",
          "dfm",
          "id",
          "settings",
          "status",
          "technology"
        ],
        "type": "object",
        "properties": {
          "assembly": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AssemblyReference"
              }
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "alias": {
            "type": "string"
          },
          "dfm": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "user": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SpecificationStatus"
              }
            ]
          },
          "technology": {
            "type": "string"
          },
          "base": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "preview": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FilePath"
              }
            ]
          },
          "previewRear": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FilePath"
              }
            ]
          },
          "changes": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SpecificationChange"
                }
              ]
            }
          }
        }
      },
      "SpecificationPreviews": {
        "type": "object",
        "properties": {
          "front": {
            "type": "string"
          },
          "rear": {
            "type": "string"
          }
        }
      },
      "LqReference": {
        "type": "object",
        "properties": {
          "rfqId": {
            "type": "string",
            "format": "uuid"
          },
          "assemblyId": {
            "type": "string",
            "format": "uuid"
          },
          "customPartSpecificationId": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "PCBV2File": {
        "required": [
          "fileType",
          "id",
          "inverted",
          "lifecycles",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "fileType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FileType"
              }
            ]
          },
          "preview": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "lifecycles": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/FileLifecycleStage"
                }
              ]
            }
          },
          "inverted": {
            "type": "boolean"
          }
        }
      },
      "ProjectType": {
        "type": "object"
      },
      "PCBV2Properties": {
        "required": [
          "board",
          "layerStack",
          "markings",
          "mechanical",
          "miscellaneous",
          "reports"
        ],
        "type": "object",
        "properties": {
          "board": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2BoardProperties"
              }
            ]
          },
          "layerStack": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2LayerStackProperties"
              }
            ]
          },
          "mechanical": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MechanicalProperties"
              }
            ]
          },
          "reports": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2ReportsProperties"
              }
            ]
          },
          "markings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MarkingsProperties"
              }
            ]
          },
          "miscellaneous": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MiscellaneousProperties"
              }
            ]
          }
        }
      },
      "PCBV2MarkingsCapabilities": {
        "required": [
          "datamatrixCode",
          "dateCode",
          "fabricatorLogo"
        ],
        "type": "object",
        "properties": {
          "dateCode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "fabricatorLogo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "datamatrixCode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          }
        }
      },
      "PCBV2MiscellaneousCapabilities": {
        "required": [
          "manufacturingInformation"
        ],
        "type": "object",
        "properties": {
          "manufacturingInformation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/StringSpecificationCapability"
              }
            ]
          }
        }
      },
      "PCBV2ReportsCapabilities": {
        "required": [
          "certificateOfConformance",
          "crossSection",
          "firstArticleInspection",
          "xRayMeasurement",
          "xRayMeasurementPoints"
        ],
        "type": "object",
        "properties": {
          "crossSection": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "xRayMeasurement": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "xRayMeasurementPoints": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "firstArticleInspection": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "certificateOfConformance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          }
        }
      },
      "PCBV2LayerStackCapabilities": {
        "required": [
          "baseMaterial",
          "finalThickness",
          "innerCopperThickness",
          "layercount",
          "layerstackThicknessTolerance",
          "layerstackType",
          "materialNumber",
          "materialVendor",
          "minInnerLayerStructure",
          "minOuterLayerStructure",
          "numberOfLaminationCycles",
          "numberOfPrepregs",
          "outerCopperThickness",
          "rohsCompilant",
          "tgValue",
          "ulLayerStack",
          "ulMarkingType"
        ],
        "type": "object",
        "properties": {
          "layerstackType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "layerstackThicknessTolerance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "ulLayerStack": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "ulMarkingType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "layercount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "finalThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "baseMaterial": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "outerCopperThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "innerCopperThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "minOuterLayerStructure": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "minInnerLayerStructure": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "rohsCompilant": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "tgValue": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureSpecificationCapability"
              }
            ]
          },
          "numberOfPrepregs": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "numberOfLaminationCycles": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "materialVendor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "materialNumber": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          }
        }
      },
      "PCBV2MechanicalCapabilities": {
        "required": [
          "aspectRatio",
          "blindVias",
          "buriedVias",
          "chamfering",
          "microVias",
          "minViaDiameter",
          "nphCount",
          "nphMaxSize",
          "nphMinSize",
          "nphToolCount",
          "phAnnularRing",
          "phAnnularRingBreakouts",
          "phCount",
          "phMaxSize",
          "phMinSize",
          "phSurfaceArea",
          "phToolCount",
          "totalDrillCount",
          "viaFilling"
        ],
        "type": "object",
        "properties": {
          "minViaDiameter": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "viaFilling": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "blindVias": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "buriedVias": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "chamfering": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "aspectRatio": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "totalDrillCount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "microVias": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "phCount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "phToolCount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "nphCount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "phMinSize": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "nphMaxSize": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "phMaxSize": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "nphToolCount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "phAnnularRing": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "phAnnularRingBreakouts": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "nphMinSize": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "phSurfaceArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NumericAreaSpecificationCapability"
              }
            ]
          }
        }
      },
      "PCBV2BoardCapabilities": {
        "required": [
          "applicationType",
          "boardHeight",
          "boardWidth",
          "captonTape",
          "carbonPrint",
          "carbonPrintSide",
          "copperClearance",
          "ctiClass",
          "eTest",
          "ecobond",
          "edgeMetalization",
          "enigThickness",
          "exposedCopperArea",
          "exposedCopperAreaBottom",
          "exposedCopperAreaTop",
          "flammabilityRating",
          "halfCutPlatedVias",
          "halogenFree",
          "hardGold",
          "hardGoldArea",
          "hardGoldThickness",
          "impedanceTested",
          "impedanceTolerance",
          "innerCopperClearance",
          "innerTraceWidth",
          "ipc600Class",
          "itar",
          "maxXOutsAllowed",
          "numberOfLines",
          "outerCopperClearance",
          "outerTraceWidth",
          "peelableMask",
          "placementSide",
          "plcClass",
          "pressFit",
          "pressFitTechnology",
          "reports",
          "silkscreenColor",
          "silkscreenSide",
          "soldermaskClearance",
          "soldermaskColor",
          "soldermaskDam",
          "soldermaskMaterialNumber",
          "soldermaskMaterialVendor",
          "soldermaskSide",
          "surfaceFinish",
          "traceWidth"
        ],
        "type": "object",
        "properties": {
          "boardHeight": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "boardWidth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "silkscreenColor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "silkscreenSide": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "surfaceFinish": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "enigThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "applicationType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "hardGold": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "hardGoldArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NumericAreaSpecificationCapability"
              }
            ]
          },
          "hardGoldThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "exposedCopperArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NumericAreaSpecificationCapability"
              }
            ]
          },
          "exposedCopperAreaTop": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NumericAreaSpecificationCapability"
              }
            ]
          },
          "exposedCopperAreaBottom": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NumericAreaSpecificationCapability"
              }
            ]
          },
          "traceWidth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "outerTraceWidth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "innerTraceWidth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "copperClearance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "outerCopperClearance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "innerCopperClearance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "soldermaskColor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "soldermaskSide": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "soldermaskDam": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "soldermaskClearance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthSpecificationCapability"
              }
            ]
          },
          "soldermaskMaterialVendor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "soldermaskMaterialNumber": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "ipc600Class": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "eTest": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "pressFit": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "pressFitTechnology": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "impedanceTested": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "impedanceTolerance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "peelableMask": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "captonTape": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "reports": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "itar": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "carbonPrint": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "carbonPrintSide": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "edgeMetalization": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "flammabilityRating": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "ctiClass": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "plcClass": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "maxXOutsAllowed": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "halogenFree": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "placementSide": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnumSpecificationCapability"
              }
            ]
          },
          "ecobond": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          },
          "numberOfLines": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CountSpecificationCapability"
              }
            ]
          },
          "halfCutPlatedVias": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BooleanSpecificationCapability"
              }
            ]
          }
        }
      },
      "MaterialImportRowError": {
        "required": [
          "line",
          "message"
        ],
        "type": "object",
        "properties": {
          "line": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "PropertyMatch": {
        "required": [
          "property"
        ],
        "type": "object",
        "properties": {
          "property": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MatchablePcbProperty"
              }
            ]
          }
        }
      },
      "MessageV2": {
        "type": "object"
      },
      "LifecycleStageStatus": {
        "required": [
          "endState",
          "messages",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "enum": [
              "unknown",
              "waiting",
              "progress",
              "error",
              "success",
              "timeout"
            ]
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "percent": {
            "type": "integer",
            "format": "int32"
          },
          "duration": {
            "type": "number",
            "format": "long",
            "deprecated": true
          },
          "deadline": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeadlineDoc"
              }
            ]
          },
          "endState": {
            "type": "boolean"
          }
        }
      },
      "HistoricLifecycleState": {
        "required": [
          "name",
          "start"
        ],
        "type": "object",
        "properties": {
          "name": {
            "allOf": [
              {
                "$ref": "#/components/schemas/StageStatusName"
              }
            ]
          },
          "start": {
            "type": "number",
            "format": "long"
          },
          "end": {
            "type": "number",
            "format": "long"
          }
        }
      },
      "SpecificationStatus": {
        "type": "object"
      },
      "SpecificationChange": {
        "required": [
          "newValue",
          "previousValue",
          "timestamp",
          "userId"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date"
          },
          "previousValue": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBSpecificationValues"
              }
            ]
          },
          "newValue": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBSpecificationValues"
              }
            ]
          }
        }
      },
      "FileAccess": {
        "required": [
          "key",
          "path"
        ],
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "the relative path to this file"
          },
          "key": {
            "type": "string",
            "description": "a signed token allowing access to this file\n\n  can be used as a query parameter `?k=<key>` (for instance for `<img>` tags)\n  with this key a shareable link to protected files can be created without\n  sharing the full token.\n"
          }
        }
      },
      "PCBV2PropertiesUpdate": {
        "type": "object",
        "properties": {
          "board": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2BoardPropertiesUpdate"
              }
            ]
          },
          "layerStack": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2LayerStackPropertiesUpdate"
              }
            ]
          },
          "mechanical": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MechanicalPropertiesUpdate"
              }
            ]
          },
          "reports": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2ReportsPropertiesUpdate"
              }
            ]
          },
          "markings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MarkingsPropertiesUpdate"
              }
            ]
          },
          "miscellaneous": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PCBV2MiscellaneousPropertiesUpdate"
              }
            ]
          }
        }
      },
      "DrillHit": {
        "required": [
          "id",
          "x",
          "y"
        ],
        "type": "object",
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "coverage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DrillCoverage"
              }
            ]
          }
        }
      },
      "SlotFeatures": {
        "required": [
          "slots"
        ],
        "type": "object",
        "properties": {
          "slots": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Tuple2"
                }
              ]
            }
          }
        }
      },
      "Version": {
        "required": [
          "created",
          "filesLocked",
          "id",
          "lifecycles",
          "projectType"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "created": {
            "type": "string",
            "format": "date"
          },
          "released": {
            "type": "string",
            "format": "date"
          },
          "files": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/File"
                }
              ]
            }
          },
          "filesLocked": {
            "type": "boolean"
          },
          "lifecycles": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/AssemblyLifecycleStage"
                }
              ]
            }
          },
          "projectType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProjectType"
              }
            ]
          }
        }
      },
      "AssemblyFeature": {
        "required": [
          "feature",
          "service"
        ],
        "type": "object",
        "properties": {
          "service": {
            "type": "string"
          },
          "feature": {
            "type": "string"
          }
        }
      },
      "AssemblyStatus": {
        "type": "object"
      },
      "AssemblyInformation": {
        "required": [
          "uiStatus"
        ],
        "type": "object",
        "properties": {
          "customer": {
            "type": "string",
            "format": "uuid"
          },
          "orderId": {
            "type": "string"
          },
          "assignee": {
            "type": "string",
            "format": "uuid"
          },
          "itemNo": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "uiStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UIStatus"
              }
            ]
          },
          "project": {
            "type": "string",
            "format": "uuid"
          }
        }
      },
      "AbstractAssemblyReference": {
        "type": "object"
      },
      "LayerstackDefinitionAPI": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "team": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "stacks": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SubStackDefinition"
                }
              ]
            }
          },
          "price": {
            "type": "number"
          },
          "metaInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "creation": {
            "type": "string",
            "format": "date"
          },
          "image": {
            "type": "string"
          },
          "default": {
            "type": "boolean"
          }
        }
      },
      "SubStackAPI": {
        "required": [
          "definition",
          "layers",
          "metaInfo"
        ],
        "type": "object",
        "properties": {
          "definition": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SubStackDefinition"
              }
            ]
          },
          "layers": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/LayerAPI"
                }
              ]
            }
          },
          "metaInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          }
        }
      },
      "CustomerPanelElement": {
        "type": "object"
      },
      "Spacing": {
        "type": "object",
        "properties": {
          "topPadding": {
            "type": "number"
          },
          "rightPadding": {
            "type": "number"
          },
          "leftPadding": {
            "type": "number"
          },
          "bottomPadding": {
            "type": "number"
          },
          "verticalSpacing": {
            "type": "number"
          },
          "horizontalSpacing": {
            "type": "number"
          }
        }
      },
      "WorkingPanelUsageAPI": {
        "required": [
          "customerBoards",
          "customerPanels",
          "panelYield",
          "workingPanel"
        ],
        "type": "object",
        "properties": {
          "workingPanel": {
            "type": "string",
            "format": "uuid"
          },
          "customerPanels": {
            "type": "integer",
            "format": "int32"
          },
          "customerBoards": {
            "type": "integer",
            "format": "int32"
          },
          "panelYield": {
            "type": "number",
            "format": "double"
          },
          "preview": {
            "type": "string"
          }
        }
      },
      "DimensionsSource": {
        "type": "object"
      },
      "LengthUnit": {
        "type": "object"
      },
      "BigPoint": {
        "required": [
          "x",
          "y"
        ],
        "type": "object",
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          }
        }
      },
      "GraphicUsage": {
        "required": [
          "location",
          "reference"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "type": "string"
          },
          "location": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BigPoint"
              }
            ]
          }
        }
      },
      "A": {
        "type": "object"
      },
      "FlashOrientation": {
        "required": [
          "degrees",
          "mirror"
        ],
        "type": "object",
        "properties": {
          "degrees": {
            "type": "number",
            "format": "double"
          },
          "mirror": {
            "type": "boolean"
          }
        }
      },
      "FilePath": {
        "required": [
          "base",
          "filename",
          "fsroot",
          "resource",
          "team"
        ],
        "type": "object",
        "properties": {
          "fsroot": {
            "type": "string"
          },
          "team": {
            "type": "string"
          },
          "resource": {
            "type": "string"
          },
          "base": {
            "type": "string"
          },
          "subPath": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "filename": {
            "type": "string"
          }
        }
      },
      "FileLifecycleStage": {
        "required": [
          "name",
          "status"
        ],
        "type": "object",
        "properties": {
          "name": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FileLifecycleStageName"
              }
            ]
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LifecycleStageStatus"
              }
            ]
          },
          "history": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/HistoricLifecycleState"
                }
              ]
            }
          }
        }
      },
      "PCBV2ReportsProperties": {
        "type": "object",
        "properties": {
          "crossSection": {
            "type": "boolean",
            "description": "Report of a cross-sectional analysis of the PCB layers"
          },
          "xRayMeasurement": {
            "type": "boolean",
            "description": "Report about a X-ray inspection of the PCB"
          },
          "xRayMeasurementPoints": {
            "type": "number",
            "description": "Number of measured points during the X-ray inspection"
          },
          "firstArticleInspection": {
            "type": "boolean",
            "description": "Initial inspection report verifying all specifications"
          },
          "certificateOfConformance": {
            "type": "boolean",
            "description": "Requires and official document certifying compliance with quality standards"
          }
        }
      },
      "PCBV2MiscellaneousProperties": {
        "type": "object",
        "properties": {
          "manufacturingInformation": {
            "type": "string",
            "description": "General information that might be required in form of a free text"
          }
        }
      },
      "PCBV2BoardProperties": {
        "type": "object",
        "properties": {
          "boardHeight": {
            "description": "The height of a single PCB",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "boardWidth": {
            "description": "The width of a single PCB",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "silkscreenColor": {
            "type": "string",
            "description": "Specifies the silkscreen color",
            "enum": [
              "white",
              "black",
              "yellow",
              "red",
              "green",
              "blue"
            ]
          },
          "silkscreenSide": {
            "type": "string",
            "description": "Specifies on which side the silkscreen should be printed on",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "surfaceFinish": {
            "type": "string",
            "description": "Specifies the type of surface finish that will be applied on the PCB surface",
            "enum": [
              "none",
              "hal-pb",
              "hal-pb-free",
              "enig",
              "enipig",
              "is",
              "it",
              "osp"
            ]
          },
          "enigThickness": {
            "description": "ENIG thickness",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "applicationType": {
            "type": "string",
            "description": "The type of application the PCB will be used for",
            "enum": [
              "Industrial",
              "Military",
              "Automotive",
              "Medical",
              "Consumer",
              "Aerospace"
            ]
          },
          "notes": {
            "type": "string"
          },
          "hardGold": {
            "type": "boolean",
            "description": "Defines whether galvanic hard gold is required"
          },
          "hardGoldArea": {
            "description": "Define the area for galvanic hard gold",
            "allOf": [
              {
                "$ref": "#/components/schemas/AreaWithUnit"
              }
            ]
          },
          "hardGoldThickness": {
            "description": "Define the thickness for galvanic hard gold in micrometer",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "exposedCopperArea": {
            "description": "The total exposed copper area in mm² (exposed_copper_area_top + exposed_copper_area_bottom)",
            "allOf": [
              {
                "$ref": "#/components/schemas/AreaWithUnit"
              }
            ]
          },
          "exposedCopperAreaTop": {
            "description": "Exposed copper area on the top side",
            "allOf": [
              {
                "$ref": "#/components/schemas/AreaWithUnit"
              }
            ]
          },
          "exposedCopperAreaBottom": {
            "description": "Exposed copper area on the bottom side",
            "allOf": [
              {
                "$ref": "#/components/schemas/AreaWithUnit"
              }
            ]
          },
          "traceWidth": {
            "description": "The width of the trace",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "outerTraceWidth": {
            "description": "The width of the outer trace",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "innerTraceWidth": {
            "description": "The width of the inner trace",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "copperClearance": {
            "description": "The copper clearance",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "outerCopperClearance": {
            "description": "The outer copper clearance",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "innerCopperClearance": {
            "description": "The inner copper clearance",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "soldermaskColor": {
            "type": "string",
            "description": "The color of the soldermask"
          },
          "soldermaskSide": {
            "type": "string",
            "description": "The side of the soldermask",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "pasteSide": {
            "type": "string",
            "description": "The side of the paste",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "soldermaskDam": {
            "description": "The dam of the soldermask",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "soldermaskClearance": {
            "description": "The clearance of the soldermask",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "soldermaskMaterialVendor": {
            "type": "string",
            "description": "The vendor of the soldermask material, sourced from the central soldermask-material catalog"
          },
          "soldermaskMaterialNumber": {
            "type": "string",
            "description": "The material number of the soldermask material, sourced from the central soldermask-material catalog"
          },
          "ipc600Class": {
            "type": "string",
            "description": "Product quality acceptance according to IPC-A-600",
            "enum": [
              "ipcnone",
              "ipc1",
              "ipc2",
              "ipc2+",
              "ipc3",
              "ipc3a"
            ]
          },
          "eTest": {
            "type": "boolean",
            "description": "Specifies if E-Test is required"
          },
          "pressFit": {
            "type": "boolean",
            "description": "Specifies whether press-fit components will be used"
          },
          "pressFitTechnology": {
            "description": "Specifies the press-fit technology",
            "allOf": [
              {
                "$ref": "#/components/schemas/PressFitTechnology"
              }
            ]
          },
          "impedanceTested": {
            "type": "boolean",
            "description": "Specifies whether an impedance control is required"
          },
          "impedanceTolerance": {
            "type": "number",
            "description": "The tolerance of the impedance testing in %"
          },
          "peelableMask": {
            "type": "string",
            "description": "Defines whether a peelable solder mask is required",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "captonTape": {
            "type": "string",
            "description": "Defines whether capton tape is required",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "reports": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "cross_section_report",
                "first_sample_test_report",
                "impedance_report",
                "coc_report"
              ]
            }
          },
          "itar": {
            "type": "boolean"
          },
          "carbonPrint": {
            "type": "boolean",
            "description": "Defines whether carbon print is required"
          },
          "carbonPrintSide": {
            "type": "string",
            "description": "Defines which sides of the PCB should be carbon printed",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "edgeMetalization": {
            "type": "boolean",
            "description": "Metalization of the PCB edges with copper and the final finish"
          },
          "flammabilityRating": {
            "type": "string",
            "description": "The flammability rating of the base material according to UL 94",
            "enum": [
              "none",
              "V-0",
              "V-1",
              "V-2"
            ]
          },
          "ctiClass": {
            "type": "string",
            "description": "Describes the electrical breakdown product class according to IEC 60601-1:2005",
            "enum": [
              "none",
              "i",
              "ii",
              "iiia",
              "iiib"
            ]
          },
          "plcClass": {
            "type": "string",
            "description": "Describes the Performance Level Category for electrical performance of base material",
            "enum": [
              "none",
              "plc0",
              "plc1",
              "plc2",
              "plc3"
            ]
          },
          "maxXOutsAllowed": {
            "type": "number",
            "description": "The number of accepted X-outs per delivery/customer panel"
          },
          "halogenFree": {
            "type": "boolean",
            "description": "Defines whether the PCB is halogen-free"
          },
          "placementSide": {
            "type": "string",
            "description": "Defines which side of the PCB should be placed on",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "ecobond": {
            "type": "boolean",
            "description": "Defines whether ecobond is required"
          },
          "numberOfLines": {
            "type": "number",
            "description": "The number of lines on the PCB"
          },
          "halfCutPlatedVias": {
            "type": "boolean",
            "description": "Defines whether half-cutted plated vias are required"
          }
        }
      },
      "PCBV2LayerStackProperties": {
        "type": "object",
        "properties": {
          "layerstackType": {
            "type": "string",
            "description": "The technology or type of materials used to build the layerstack",
            "enum": [
              "rigid",
              "flex",
              "ims",
              "rigid-flex"
            ]
          },
          "layerstackThicknessTolerance": {
            "type": "number",
            "description": "Thickness tolerance of the final pcb thickness in %"
          },
          "ulLayerStack": {
            "type": "boolean"
          },
          "ulMarkingType": {
            "type": "string",
            "description": "The UL Marking setting",
            "enum": [
              "no-marking",
              "default-marking",
              "custom-marking"
            ]
          },
          "layercount": {
            "type": "number",
            "description": "The amount of copper layers"
          },
          "finalThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "baseMaterial": {
            "type": "string",
            "description": "The base material used to build up the layer stack",
            "enum": [
              "FR-2",
              "FR-3",
              "FR-4",
              "CEM1",
              "CEM2",
              "CEM3",
              "polyimide"
            ]
          },
          "outerCopperThickness": {
            "description": "The finished copper thickness on outer layers",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "innerCopperThickness": {
            "description": "The finished copper thickness on inner layers",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "minOuterLayerStructure": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "minInnerLayerStructure": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "rohsCompilant": {
            "type": "boolean",
            "description": "Indicates if the product must be compliant with RoHS"
          },
          "tgValue": {
            "description": "The minimum Tg value of the base material in C°",
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureWithUnit"
              }
            ]
          },
          "numberOfPrepregs": {
            "type": "number",
            "description": "The number of prepreg layers"
          },
          "numberOfLaminationCycles": {
            "type": "number",
            "description": "The number of lamination cycles"
          },
          "customStackUp": {
            "type": "boolean",
            "description": "Whether the PCB uses a custom stackup"
          },
          "materialVendor": {
            "type": "string",
            "description": "The vendor of the base material, sourced from the central material catalog"
          },
          "materialNumber": {
            "type": "string",
            "description": "The material number of the base material, sourced from the central material catalog"
          }
        }
      },
      "PCBV2MechanicalProperties": {
        "type": "object",
        "properties": {
          "minViaDiameter": {
            "description": "The minimum via diameter",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "viaFilling": {
            "type": "string",
            "description": "Via filling type according to IPC-4761",
            "enum": [
              "none",
              "Ia",
              "Ib",
              "IIb",
              "IIIa",
              "IIIb",
              "IVa",
              "IVb",
              "V",
              "VI",
              "VII"
            ]
          },
          "blindVias": {
            "type": "boolean",
            "description": "Indicates whether the PCB has blind vias or not"
          },
          "blindViaCount": {
            "type": "integer",
            "description": "The number of blind vias",
            "format": "int32"
          },
          "buriedVias": {
            "type": "boolean",
            "description": "Indicates whether the PCB has buried vias or not"
          },
          "buriedViaCount": {
            "type": "integer",
            "description": "The number of buried vias",
            "format": "int32"
          },
          "chamfering": {
            "type": "string",
            "description": "Describes the type of chamfering",
            "enum": [
              "none",
              "20-PCI",
              "45-ISA"
            ]
          },
          "outlineLength": {
            "description": "The length of the outline path ",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "aspectRatio": {
            "type": "number",
            "description": "The smallest aspect-ratio found on the PCB"
          },
          "totalDrillCount": {
            "type": "number",
            "description": "The total number of drills"
          },
          "microVias": {
            "type": "boolean",
            "description": "Indicates whether the PCB has micro vias or not"
          },
          "phCount": {
            "type": "number",
            "description": "The amount of plated holes (vias)"
          },
          "phToolCount": {
            "type": "number",
            "description": "The amount of different tools used for plated holes"
          },
          "nphCount": {
            "type": "number",
            "description": "The amount of non-plated holes (drills)"
          },
          "phMinSize": {
            "description": "The smallest non-plated hole diameter",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "nphMaxSize": {
            "description": "The largest non-plated hole diameter",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "phMaxSize": {
            "description": "The largest plated hole diameter",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "nphToolCount": {
            "type": "number",
            "description": "The amount of different tools used for non-plated holes"
          },
          "phAnnularRing": {
            "description": "The smallest annular ring between plated holes and copper, found on all layers of the PCB",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "phAnnularRingBreakouts": {
            "type": "number",
            "description": "The number of plated-hole annular ring breakouts found on the PCB (0 if none)"
          },
          "nphMinSize": {
            "description": "The smallest non-plated hole diameter",
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "phSurfaceArea": {
            "type": "number",
            "description": "The surface area of the inside of all plated holes"
          }
        }
      },
      "PCBV2MarkingsProperties": {
        "type": "object",
        "properties": {
          "dateCode": {
            "type": "string",
            "description": "Code indicating the manufacturing date of the PCB",
            "enum": [
              "none",
              "default",
              "custom"
            ]
          },
          "fabricatorLogo": {
            "type": "boolean",
            "description": "Logo of the PCB fabricator printed on the board"
          },
          "datamatrixCode": {
            "type": "boolean",
            "description": "Unique datamatrix code for tracking and identification"
          }
        }
      },
      "EnumSpecificationCapability": {
        "required": [
          "allowed",
          "default",
          "impliedBy"
        ],
        "type": "object",
        "properties": {
          "allowed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "default": {
            "type": "string"
          },
          "impliedBy": {
            "type": "string"
          }
        }
      },
      "BooleanSpecificationCapability": {
        "required": [
          "allowed",
          "default"
        ],
        "type": "object",
        "properties": {
          "allowed": {
            "type": "array",
            "items": {
              "type": "boolean"
            }
          },
          "default": {
            "type": "boolean"
          }
        }
      },
      "StringSpecificationCapability": {
        "type": "object",
        "properties": {
          "allowed": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "default": {
            "type": "string"
          }
        }
      },
      "CountSpecificationCapability": {
        "required": [
          "disabled"
        ],
        "type": "object",
        "properties": {
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "allowed": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "default": {
            "type": "number"
          },
          "disabled": {
            "type": "boolean"
          }
        }
      },
      "TemperatureSpecificationCapability": {
        "required": [
          "defaultUnit",
          "disabled"
        ],
        "type": "object",
        "properties": {
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "allowed": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "default": {
            "type": "number"
          },
          "disabled": {
            "type": "boolean"
          },
          "defaultUnit": {
            "type": "string",
            "enum": [
              "Celsius",
              "Fahrenheit"
            ]
          },
          "impliedBy": {
            "type": "string"
          }
        }
      },
      "LengthSpecificationCapability": {
        "required": [
          "defaultUnit",
          "disabled"
        ],
        "type": "object",
        "properties": {
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "allowed": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "default": {
            "type": "number"
          },
          "disabled": {
            "type": "boolean"
          },
          "defaultUnit": {
            "type": "string",
            "enum": [
              "Micrometer",
              "Inch",
              "Mil",
              "Millimeter",
              "Microinch"
            ]
          }
        }
      },
      "NumericAreaSpecificationCapability": {
        "required": [
          "defaultUnit",
          "disabled"
        ],
        "type": "object",
        "properties": {
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "allowed": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "default": {
            "type": "number"
          },
          "disabled": {
            "type": "boolean"
          },
          "defaultUnit": {
            "type": "string",
            "enum": [
              "SquareMillimeter",
              "SquareInch"
            ]
          }
        }
      },
      "MatchablePcbProperty": {
        "type": "object"
      },
      "DeadlineDoc": {
        "required": [
          "length",
          "unit"
        ],
        "type": "object",
        "properties": {
          "length": {
            "type": "number",
            "format": "long"
          },
          "unit": {
            "type": "string",
            "enum": [
              "NANOSECONDS",
              "MICROSECONDS",
              "MILLISECONDS",
              "SECONDS",
              "MINUTES",
              "HOURS",
              "DAYS"
            ]
          }
        }
      },
      "StageStatusName": {
        "type": "object"
      },
      "PCBSpecificationValues": {
        "type": "object",
        "properties": {
          "base": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SpecificationStatus"
              }
            ]
          }
        }
      },
      "PCBV2BoardPropertiesUpdate": {
        "type": "object",
        "properties": {
          "boardHeight": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "boardWidth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "silkscreenColor": {
            "type": "string",
            "enum": [
              "white",
              "black",
              "yellow",
              "red",
              "green",
              "blue"
            ]
          },
          "silkscreenSide": {
            "type": "string",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "surfaceFinish": {
            "type": "string",
            "enum": [
              "none",
              "hal-pb",
              "hal-pb-free",
              "enig",
              "enipig",
              "is",
              "it",
              "osp"
            ]
          },
          "enigThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "applicationType": {
            "type": "string",
            "enum": [
              "Industrial",
              "Military",
              "Automotive",
              "Medical",
              "Consumer",
              "Aerospace"
            ]
          },
          "notes": {
            "type": "string"
          },
          "hardGold": {
            "type": "boolean"
          },
          "hardGoldArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AreaWithUnit"
              }
            ]
          },
          "hardGoldThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "exposedCopperArea": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AreaWithUnit"
              }
            ]
          },
          "exposedCopperAreaTop": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AreaWithUnit"
              }
            ]
          },
          "exposedCopperAreaBottom": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AreaWithUnit"
              }
            ]
          },
          "traceWidth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "outerTraceWidth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "innerTraceWidth": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "copperClearance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "outerCopperClearance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "innerCopperClearance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "soldermaskColor": {
            "type": "string"
          },
          "soldermaskSide": {
            "type": "string",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "pasteSide": {
            "type": "string",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "soldermaskDam": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "soldermaskClearance": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "soldermaskMaterialVendor": {
            "type": "string"
          },
          "soldermaskMaterialNumber": {
            "type": "string"
          },
          "ipc600Class": {
            "type": "string",
            "enum": [
              "ipcnone",
              "ipc1",
              "ipc2",
              "ipc2+",
              "ipc3",
              "ipc3a"
            ]
          },
          "eTest": {
            "type": "boolean"
          },
          "pressFit": {
            "type": "boolean"
          },
          "pressFitTechnology": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PressFitTechnology"
              }
            ]
          },
          "impedanceTested": {
            "type": "boolean"
          },
          "impedanceTolerance": {
            "type": "number"
          },
          "peelableMask": {
            "type": "string",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "captonTape": {
            "type": "string",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "reports": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "cross_section_report",
                "first_sample_test_report",
                "impedance_report",
                "coc_report"
              ]
            }
          },
          "itar": {
            "type": "boolean"
          },
          "carbonPrint": {
            "type": "boolean"
          },
          "carbonPrintSide": {
            "type": "string",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "edgeMetalization": {
            "type": "boolean"
          },
          "flammabilityRating": {
            "type": "string",
            "enum": [
              "none",
              "V-0",
              "V-1",
              "V-2"
            ]
          },
          "ctiClass": {
            "type": "string",
            "enum": [
              "none",
              "i",
              "ii",
              "iiia",
              "iiib"
            ]
          },
          "plcClass": {
            "type": "string",
            "enum": [
              "none",
              "plc0",
              "plc1",
              "plc2",
              "plc3"
            ]
          },
          "maxXOutsAllowed": {
            "type": "number"
          },
          "halogenFree": {
            "type": "boolean"
          },
          "placementSide": {
            "type": "string",
            "enum": [
              "none",
              "top",
              "bottom",
              "both"
            ]
          },
          "ecobond": {
            "type": "boolean"
          },
          "numberOfLines": {
            "type": "number"
          },
          "halfCutPlatedVias": {
            "type": "boolean"
          }
        }
      },
      "PCBV2LayerStackPropertiesUpdate": {
        "type": "object",
        "properties": {
          "layerstackType": {
            "type": "string",
            "enum": [
              "rigid",
              "flex",
              "ims",
              "rigid-flex"
            ]
          },
          "layerstackThicknessTolerance": {
            "type": "number"
          },
          "ulLayerStack": {
            "type": "boolean"
          },
          "ulMarkingType": {
            "type": "string",
            "enum": [
              "no-marking",
              "default-marking",
              "custom-marking"
            ]
          },
          "layercount": {
            "type": "number"
          },
          "finalThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "baseMaterial": {
            "type": "string",
            "enum": [
              "FR-2",
              "FR-3",
              "FR-4",
              "CEM1",
              "CEM2",
              "CEM3",
              "polyimide"
            ]
          },
          "outerCopperThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "innerCopperThickness": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "minOuterLayerStructure": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "minInnerLayerStructure": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "rohsCompilant": {
            "type": "boolean"
          },
          "tgValue": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureWithUnit"
              }
            ]
          },
          "numberOfPrepregs": {
            "type": "number"
          },
          "numberOfLaminationCycles": {
            "type": "number"
          },
          "customStackUp": {
            "type": "boolean"
          },
          "materialVendor": {
            "type": "string"
          },
          "materialNumber": {
            "type": "string"
          }
        }
      },
      "PCBV2MiscellaneousPropertiesUpdate": {
        "type": "object",
        "properties": {
          "manufacturingInformation": {
            "type": "string"
          }
        }
      },
      "PCBV2ReportsPropertiesUpdate": {
        "type": "object",
        "properties": {
          "crossSection": {
            "type": "boolean"
          },
          "xRayMeasurement": {
            "type": "boolean"
          },
          "xRayMeasurementPoints": {
            "type": "number"
          },
          "firstArticleInspection": {
            "type": "boolean"
          },
          "certificateOfConformance": {
            "type": "boolean"
          }
        }
      },
      "PCBV2MarkingsPropertiesUpdate": {
        "type": "object",
        "properties": {
          "dateCode": {
            "type": "string",
            "enum": [
              "none",
              "default",
              "custom"
            ]
          },
          "fabricatorLogo": {
            "type": "boolean"
          },
          "datamatrixCode": {
            "type": "boolean"
          }
        }
      },
      "PCBV2MechanicalPropertiesUpdate": {
        "type": "object",
        "properties": {
          "minViaDiameter": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "viaFilling": {
            "type": "string",
            "enum": [
              "none",
              "Ia",
              "Ib",
              "IIb",
              "IIIa",
              "IIIb",
              "IVa",
              "IVb",
              "V",
              "VI",
              "VII"
            ]
          },
          "blindVias": {
            "type": "boolean"
          },
          "blindViaCount": {
            "type": "integer",
            "format": "int32"
          },
          "buriedVias": {
            "type": "boolean"
          },
          "buriedViaCount": {
            "type": "integer",
            "format": "int32"
          },
          "chamfering": {
            "type": "string",
            "enum": [
              "none",
              "20-PCI",
              "45-ISA"
            ]
          },
          "outlineLength": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "aspectRatio": {
            "type": "number"
          },
          "totalDrillCount": {
            "type": "number"
          },
          "microVias": {
            "type": "boolean"
          },
          "phCount": {
            "type": "number"
          },
          "phToolCount": {
            "type": "number"
          },
          "nphCount": {
            "type": "number"
          },
          "phMinSize": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "nphMaxSize": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "phMaxSize": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "nphToolCount": {
            "type": "number"
          },
          "phAnnularRing": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "phAnnularRingBreakouts": {
            "type": "number"
          },
          "nphMinSize": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LengthWithUnit"
              }
            ]
          },
          "phSurfaceArea": {
            "type": "number"
          }
        }
      },
      "DrillCoverage": {
        "type": "object",
        "properties": {
          "soldermaskTop": {
            "type": "boolean"
          },
          "soldermaskBottom": {
            "type": "boolean"
          }
        }
      },
      "Tuple2": {
        "required": [
          "_1",
          "_2"
        ],
        "type": "object",
        "properties": {
          "_1": {
            "allOf": [
              {
                "$ref": "#/components/schemas/T1"
              }
            ]
          },
          "_2": {
            "allOf": [
              {
                "$ref": "#/components/schemas/T2"
              }
            ]
          }
        }
      },
      "File": {
        "required": [
          "created",
          "detectedTypes",
          "fType",
          "id",
          "lifecycles",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "subPath": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "fType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FileType"
              }
            ]
          },
          "detectedTypes": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/FileType"
                }
              ]
            }
          },
          "created": {
            "type": "string",
            "format": "date"
          },
          "preview": {
            "type": "string"
          },
          "lifecycles": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/FileLifecycleStage"
                }
              ]
            }
          },
          "hash": {
            "type": "string"
          }
        }
      },
      "UIStatus": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "progress": {
            "type": "integer",
            "format": "int32"
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SubStackDefinition": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "layers": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/LayerDefinition"
                }
              ]
            }
          },
          "stackType": {
            "type": "string"
          },
          "drills": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/DrillSupport"
                }
              ]
            }
          },
          "offset": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "LayerAPI": {
        "required": [
          "definition",
          "metaInfo"
        ],
        "type": "object",
        "properties": {
          "definition": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LayerDefinition"
              }
            ]
          },
          "files": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/LayerFile"
                }
              ]
            }
          },
          "metaInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          }
        }
      },
      "FileLifecycleStageName": {
        "type": "object"
      },
      "AreaWithUnit": {
        "required": [
          "unit",
          "value"
        ],
        "type": "object",
        "properties": {
          "value": {
            "type": "number"
          },
          "unit": {
            "type": "string",
            "enum": [
              "SquareMillimeter",
              "SquareInch"
            ]
          }
        }
      },
      "PressFitTechnology": {
        "required": [
          "value"
        ],
        "type": "object",
        "properties": {
          "value": {
            "type": "string"
          }
        }
      },
      "TemperatureWithUnit": {
        "required": [
          "unit",
          "value"
        ],
        "type": "object",
        "properties": {
          "value": {
            "type": "number"
          },
          "unit": {
            "type": "string",
            "enum": [
              "Celsius",
              "Fahrenheit"
            ]
          }
        }
      },
      "T1": {
        "type": "object"
      },
      "T2": {
        "type": "object"
      },
      "LayerDefinition": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "layerType": {
            "type": "string"
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "materialRef": {
            "type": "string"
          },
          "material": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Material"
              }
            ]
          }
        }
      },
      "DrillSupport": {
        "required": [
          "drillType",
          "from",
          "to"
        ],
        "type": "object",
        "properties": {
          "from": {
            "type": "integer",
            "format": "int32"
          },
          "to": {
            "type": "integer",
            "format": "int32"
          },
          "col": {
            "type": "integer",
            "format": "int32"
          },
          "drillType": {
            "type": "string"
          }
        }
      },
      "Material": {
        "type": "object",
        "properties": {
          "team": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MetaInfo"
              }
            ]
          },
          "materialType": {
            "type": "string"
          }
        }
      },
      "FileUpload": {
        "type": "object"
      }
    }
  }
}