Skip to main content
POST
Create supplier product

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.

Headers

Idempotency-Key
string

Optional client-generated key of 1–255 characters (e.g. a UUID) that makes a create idempotent — the only mechanism that does so. A replay carrying the same key returns the original response unchanged (200); reusing a key with a different request body (compared byte for byte) or create endpoint is rejected with 409 err_idempotency_key_reused. Concurrent requests with the same key receive 409 err_idempotency_in_progress. Keys are scoped to your manufacturer; successful responses are retained for 6h without extending that window on replay. Current permissions are required on every retry; product-instance replays also require the original production-data scopes. Deduplication is best effort: Redis data loss can end the window early, and Redis unavailability, timeouts, or unreadable cache entries can allow creation without replay protection. Successful creates still return 201 if caching fails. Redis waits share a two-second budget excluding creation time. Incompatible replay-format upgrades reset replay protection, so retries across that boundary can create again. An interrupted create can reserve the key for up to 6h. See External IDs for recovery guidance.

Required string length: 1 - 255

Body

application/json
external_id
string | null
required

Your own code for this supplier product. Required; pass null if unset. A non-null code must be unique among your active supplier products; a duplicate returns 409 (see External IDs).

Example:

"COMP-001"

name
string
required

Name of the supplier product.

Example:

"Portland Cement CEM I 42.5 R"

material_type
object
required

An Emidat Elementary, custom composite, or unvalidated type. Unvalidated materials require a supplier plant, use KG, and have no calculated impacts even when an EPD is attached. Hazardous substances, lifetime, recycled-share, and moisture overrides are not accepted until validated.

plant_id
string<uuid>
required

The plant's Emidat UUID.

supplier_plant_id
string<uuid> | null

UUID of the supplier plant. Required except for water materials. Create via POST /v2/supplier-plants.

transport_route
object | null

Transport distances from the supplier plant to your gate, one per modality (km). Optional.

epd_id
string<uuid> | null

Optional EPD UUID to link to this supplier product, if one was identified during setup.

hazardous_substances
object[]

Hazardous substances in this material, each by CAS number and mass share. Optional; defaults to none.

lifetime_years
number | null

Expected service life in years. Optional.

secondary_percentage
number | null

Share of secondary (recycled) content, 0–100. Optional.

moisture_content_percentage
number | null

Moisture content as a percentage. Optional.

Response

Returned unchanged — an Idempotency-Key replay.

id
string<uuid>
required
external_id
string | null
required

Your own code for this supplier product, as provided on creation.

name
string
required
Example:

"Portland Cement CEM I 42.5 R"

material_type
object
required

An Emidat Elementary, custom composite, or unvalidated type, by reference. Unvalidated references always include their manufacturer-owned identity. Resolve a composite_id with GET /v2/composites/{id}.

plant_id
string<uuid>
required

The plant's Emidat UUID.

supplier_plant_id
string<uuid> | null
required

UUID of the supplier plant this material is sourced from. Resolve it with GET /v2/supplier-plants/{id}.

transport_route
object | null
required

Transport distances from the supplier plant to your gate, one per modality (km).

epd_id
string<uuid> | null
required
hazardous_substances
object[]
required

Hazardous substances in this material, each by CAS number and mass share.

lifetime_years
number | null
required
secondary_percentage
number | null
required
moisture_content_percentage
number | null
required
unit
enum<string>
required
Available options:
M,
M2,
M3,
UG,
KG,
T,
L,
KWH,
MJ,
UNIT,
METRIC TON*KM
Example:

"KG"

impacts_per_kg
object[] | null
required

Characterized cradle-to-gate impacts of this supplier product per kg. Null until computed.

transport_impacts_per_kg
object[] | null
required

The transport portion of this product's impacts per kg. Null until computed.

secondary_datasets
object[] | null
required

Background datasets used to compute the impacts.

created_at
string<date-time>
required