Skip to main content
PUT
Update product instance

Authorizations

X-API-Key
string
header
required

Per-manufacturer API key in the X-API-Key header, format emidat-{key_id}-{secret} where key_id is a random public handle. Issued by an owner in the Emidat dashboard; carries its own permission scopes, optional plant restrictions, and optional expiry. A revoked, expired, or unknown key returns 401. See the Authentication guide for details.

Path Parameters

id
string<uuid>
required

The instance's Emidat UUID.

Body

application/json

Full replacement of editable fields. Every editable field is required and overwrites the stored value. Nullable fields accept null to clear them. The immutable identity fields may be omitted or echoed from the current resource.

external_id
string | null
required

Your own code for this instance (its SKU / BOM node id). Overwrites the stored code; pass null to clear it. Must stay unique among your active instances — a code held by another returns 409 (see External IDs).

Example:

"CEM-42.5R-25KG-MUNICH"

name
string
required
production_process_id
string<uuid> | null
required

The production process's Emidat UUID. Pass null to leave the instance without a process.

produced_from
integer
required

First year this instance is valid. Narrowing the production period discards computed LCA results for the years that fall outside it.

Required range: 2020 <= x <= 2100
Example:

2025

produced_to
integer | null
required
Required range: 2020 <= x <= 2100
tech_specs
object | null
required

Technical specifications as key/value pairs. Which keys apply depends on the instance's elementary_id — cement, for example, takes compressive_strength and density.

Example:
annual_data
object[] | null
required

Replaces the stored series wholesale — a year you omit is dropped, and null clears the series. Each year must fall inside the instance's production period.

id
string<uuid>

Optional assertion of the resource ID. It must match the path id.

plant_id
string<uuid>

Optional assertion of the current plant. A different value returns 422.

elementary_id
string<uuid>

Optional assertion of the current elementary. A different value returns 422.

unit
enum<string>

Optional assertion of the current declared unit. A different value returns 422.

Available options:
M,
M2,
M3,
KG,
T,
L,
KWH,
MJ,
UNIT,
METRIC TON*KM
economic_value_per_unit
number | null

Economic value in EUR per declared product unit. Pass null to clear it; omission is accepted for older clients.

Required range: x >= 0
Example:

0.35

Response

Updated product instance.

id
string<uuid>
required
external_id
string | null
required

Your own code for this instance, as provided on creation.

plant_id
string<uuid>
required

The plant's Emidat UUID. Always present — set at creation and immutable.

name
string
required
elementary_id
string<uuid>
required

Emidat material-type UUID — determines the product type.

production_process_id
string<uuid> | null
required

The production process's Emidat UUID, or null if none.

unit
enum<string>
required
Available options:
M,
M2,
M3,
KG,
T,
L,
KWH,
MJ,
UNIT,
METRIC TON*KM
Example:

"KG"

produced_from
integer
required

First year this instance is valid.

Example:

2025

produced_to
integer | null
required

Last valid year, or null if open-ended.

tech_specs
object | null
required

Technical specifications as key/value pairs. Which keys apply depends on the instance's elementary_id — cement, for example, takes compressive_strength and density.

Example:
annual_data
object[]
required

Production output per year.

economic_value_per_unit
number | null
required

Economic value in EUR per declared product unit, or null when it has not been provided. Reads return null without view:processes, whatever is stored; writes are ignored without edit:processes.

Required range: x >= 0
Example:

0.35

status
enum<string>
required

Whether the instance is modelled far enough to run an LCA. Derived on every read, never set directly.

incomplete — something structural is still missing: tech_specs is empty, production_process_id is null, or the material type needs a BOM (PUT …/bom) and none is set. draft — all of that is present.

draft is about structure only. It does not mean any year is computable: per-year gaps such as missing production data surface as blocked_by entries on the LCA results, not here.

Available options:
incomplete,
draft
Example:

"draft"

created_at
string<date-time>
required