Skip to content

Assembly

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. You can view assemblies in Luminovo under the "Assemblies" tab.

Import Assembly Data

Request

Security
BearerAuth
Query
skip_missing_ipnsstring

In case it is set to "true" it will allow importing assemblies even if some of the referenced IPNs do not exist in Luminovo. These IPNs will then be recorded in BOM item notes. If set to “false”, the assemblies with missing IPNs will get skipped during import

Examples:
enabled
skip_missing_ipns=true
Bodyapplication/jsonrequired

This endpoint allows importing assembly data.

The import need not include all your assemblies. Assemblies that were uploaded previously but are not present in a new upload are not deleted.

An assembly is a logical group of items that should be assembled into one unit. Assemblies can be nested via subassemblies. Nesting has to be acyclic, that is no assembly may be referenced in any of its own subassemblies.

Assemblies are uniquely identified by the combination of internal_part_number and revision. That is, an assembly with the same internal_part_number and revision may not be listed twice. All duplicated assemblies will be skipped during import.

Finally, an assembly will also not be imported if it is part of a circular reference. That is, if an assembly is referenced in any of its own subassemblies.

Run assembly imports one at a time per tenant. Assembly imports for the same tenant must not run concurrently. Each import reconciles the tenant's full assembly tree, so two imports running at once for the same tenant can interfere and cause one of them to fail.

  • Serialize per tenant. Issue one import request at a time for a given tenant. Wait for the response before sending the next, and leave a short pause between calls. Do not fan out imports in parallel.
  • Match your client timeout to real import durations. A large assembly import can take several minutes. Set your client read timeout above the longest import you expect. If your client times out and retries while the original request is still being processed on our side, you create two overlapping imports for the same tenant, which is the exact situation to avoid.
  • Handle 409 Conflict. If an import returns 409 Conflict, another import for the same tenant is still in progress. Wait a few seconds and retry the same request. Do not treat 409 as a permanent failure.

Concurrent imports for the same tenant are not supported and may return 409 Conflict or, in rarer cases, fail with a 500 error that a retry might clear.

Array [
internal_part_numberobject(InternalPartNumber)required
customer_part_numbersArray of objects(CPN_2)

Your customers' numbers referring to this assembly.

Due to technical restrictions only the first element of this array is considered. That is, only the customer that is named first in this array will be associated with the assembly in the system.

The customer can also be specified on its own, a customer part number (i.e. the value field) is not required. If the revision field is provided the value field must also be populated.

CPNs will be matched to existing customers by their number.

If a customer name is also given in the input data, the following cases are handled:

  1. if the customer does not yet exist, it will be created with the number and name provided.
  2. if the customer exists but has no name yet, it will be updated with the customer name from the input.
  3. 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).

If 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.

namestring

The name of the assembly. Defaults to internal_part_number.value - internal_part_number.revision.

notesstring

Notes for the assembly.

typestringrequired

The type of assembly.

Enum:"PCBA""Cable""Box build""System"
industrystring

The industry this assembly belongs to, defaults to Other.

Default:"Other"
Enum:"Auto""Medical""Defense""Aero""Rail""Industrial""Construction""Consumer""Other"
subassembliesArray of objects(Subassembly)

A list of subassemblies referenced by (internal_part_number.value, internal_part_number.revision).

A subassembly is a nested assembly. The same subassemblies may be referenced in multiple assemblies. Subassemblies can either be included in the same import request, or reference existing assemblies that were imported via this endpoint earlier.

This allows splitting large imports into multiple smaller requests by first importing leaf assemblies, then importing parent assemblies that reference them.

Note: Only assemblies created via this API endpoint can be referenced across imports. Manually-created assemblies cannot be used as subassemblies in cross-import references.

No circular references are permitted. That is, an assembly may not be referenced in any of its own subassemblies, including across multiple imports.

bom_itemsArray of objects(BOM item)

A list of BOM items. A BOM item defines the common characteristics of one or more design items (identified by designators).

]
POST
/assemblies/import
curl -i -X POST \
  'https://api.luminovo.com/assemblies/import?skip_missing_ipns=true' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '[
    {
      "internal_part_number": {
        "value": "1000-0",
        "revision": "rev1"
      },
      "customer_part_numbers": [
        {
          "value": "123-456",
          "revision": "A",
          "customer": {
            "number": "9987",
            "name": "MyOEM"
          }
        }
      ],
      "name": "SUB1500",
      "notes": "Some notes",
      "type": "PCBA",
      "industry": "Industrial",
      "subassemblies": [
        {
          "internal_part_number": {
            "value": "1000-0",
            "revision": "rev1"
          },
          "quantity": 1
        }
      ],
      "bom_items": [
        {
          "designators": [
            "R1",
            "R2"
          ],
          "quantity": 1,
          "unit": "Pieces",
          "notes": "The description of the BOM item",
          "do_not_place": false,
          "sourced_by": "internal",
          "part_options": [
            {
              "internal_part_number": {
                "value": "1000-0",
                "revision": "rev1"
              }
            }
          ]
        }
      ]
    }
  ]'

Responses

Successfull import

Bodyapplication/json
itemsArray of objects(AssemblyImportResponse)
Response
{ "items": [ {} ] }