Skip to main content

Migrating from the Costed BOM API to Luminovo's new endpoints

Update data in your ERP – create parts, update prices, pre-fill purchase orders with a set of new endpoints

Written by Luminovo Support

What's changing

The Get Costed BOM endpoint is now deprecated:

  • GET /rfqs/{id}/costed-bom

  • GET /projects/{id}/costed-bom

(Both return the same data – in Luminovo, a project and an RfQ are the same thing.)

The Costed BOM endpoint was originally built to mirror Luminovo's Excel costed-BOM export one-to-one in a single API call. That made the response very large and slow to generate for bigger BOMs, and harder to integrate against reliably.

We've replaced it with a set of smaller, focused endpoints. Each one returns a single, well-defined piece of the picture – projects, sourcing scenarios, purchase options, offers, and component data – so your integration is faster, more predictable, and easier to maintain.

Nothing breaks today. The Costed BOM endpoint still works, and we'll give advance notice before it's removed. It will not receive further improvements, so we recommend planning your migration now, and building any new integration on the new endpoints from the start.


The new endpoints

Everything the Costed BOM bundled together is now available from the endpoints below.

Available today (Q2 2026)

Endpoint

Method & path

Accept header

GET /projects

application/api.luminovo.project-overview-v1+json

GET /projects/{id}

application/api.luminovo.project-v1+json

GET /projects/{id}/tree

application/api.luminovo.assembly-ids-v1+json

GET /sourcing-scenarios/{id}

application/api.luminovo.sourcing-scenario-v2+json

GET /sourcing-scenarios/{id}/purchase-options

application/api.luminovo.sourcing-scenario-v1+json

POST /offers/find

application/api.luminovo.offer-v1+json

GET /offers/{id}

application/api.luminovo.offer-v1+json

GET /components/ipn/{ipn}

application/api.luminovo.component-v1+json

GET /components

application/api.luminovo.component-v1+json

GET /calculations/assembly-costs

application/api.luminovo.assembly-cost-v1+json

Coming early Q3 2026

Endpoint

What it gives you

Get part

Full part master data for a single part – manufacturer, MPN, description, specifications, compliance, and lifecycle.

Assembly cost breakdown

A line-by-line cost breakdown of an assembly.

💡 Assembly-level cost totals (material, manufacturing, and additional costs, plus whether the cost is frozen) are already available today via Get calculated assembly cost. The more detailed, line-by-line breakdown arrives in early Q3.


How the old data maps to the new endpoints

The Costed BOM combined four kinds of information. Here's where each now lives:

In the Costed BOM

Now available from

BOM structure – projects, assemblies, designators, quantities

Get all projects · Get a project · Get BOM tree

Part & component data – IPN, MPN, manufacturer, description, compliance, lifecycle

Get component by IPN · List components (+ Get part, early Q3)

Sourcing & pricing – offers, selected purchase options, supplier, unit price, MOQ/MPQ, availability

Get purchase options · Get offers by part · Get an offer

Cost summaries – per-assembly unit/total cost

Get calculated assembly cost (+ line-by-line breakdown, early Q3)


Migrating by use case

1. Create internal part numbers (IPNs) for parts that don't have one yet

Goal: For parts that don't yet have an internal part number in your ERP, create the IPN using Luminovo's part data.

  1. Pull your component library from Luminovo:

    1. List components (GET /components) returns a paginated list of every component in your tenant – page through until you've read them all.

    2. Get the list of all MPNs connected to your IPNs.

  2. Pull the purchase options for the sourcing scenario (GET /sourcing-scenarios/{id}/purchase-options) and pull the corresponding offers (GET /offers/{id})

    1. Extract the MPN and the manufacturer from the offer data.

  3. Compare the data from 2(a) to the data from 1(b). If the MPN is not part of any IPN, use the MPN data to create a new part in your ERP system.


2. Update prices for parts using Luminovo data

Goal: Refresh the prices in your ERP with Luminovo's current offer data.

  1. Gather the part IDs you want priced. You'll find these on your components (from List components or Get component by IPN – the linked_parts carry their part IDs).

  2. Call Get offers by part (POST /offers/find) with the part IDs:

    {   "ids": ["<part-id-1>", "<part-id-2>"] }

    Part IDs can be off-the-shelf, custom, or component (IPN) IDs. Any ID that can't be resolved is returned in not_found_ids.

  3. The response groups offers by part. Each offer carries the supplier, availability, and one or more price tiers – each tier has a unit_price such as { "amount": "0.0520", "currency": "EUR" } and the quantity at which it applies, plus MOQ/MPQ.

  4. Pick the relevant price and write it back to your ERP.

💡 Want only the prices Luminovo actually selected for a sourcing scenario (rather than all available market offers)? Use Get purchase options (next section) – each selected offer comes with its price.


3. Pre-fill purchase orders using purchase options

Goal: Create purchase orders in your ERP, pre-filled from the purchase options Luminovo selected.

  1. Get all projects (GET /projects) → find the project.

  2. Get a project (GET /projects/{id}) → the response lists the project's sourcing scenarios; take the sourcing scenario ID you want. (Optional: call Get a sourcing scenario (GET /sourcing-scenarios/{id}) for its demands, currency, and settings.)

  3. Get purchase options (GET /sourcing-scenarios/{id}/purchase-options) → the list of selected offers, ready for PO creation. Each entry includes:

    • quantity – the number of offer units to order

    • unit_of_measurement – what one offer unit represents (e.g. 1 piece, or 5 m of cable)

    • purchase_quantity – the total in base units (quantity × unit_of_measurement.value)

    • pricing

    • the sourcing line items the offer fulfills

    • offer_id

  4. (Optional) Use the offer_id with Get an offer (GET /offers/{id}) to pull the full offer – supplier, all price tiers, and availability.

  5. Map each purchase option to a PO line in your ERP.

This endpoint's response is designed specifically for ERP systems to create purchase orders.

Did this answer your question?