curl --request PUT \
--url https://api.emidat.com/v2/supplier-products/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"external_id": "CEMENT-SUPPLIER-DE-001",
"name": "Portland Cement CEM I 42.5 R",
"supplier_plant_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transport_route": {
"truck_distance_km": 95
},
"epd_id": null,
"hazardous_substances": [],
"lifetime_years": null,
"secondary_percentage": null,
"moisture_content_percentage": null
}
'import requests
url = "https://api.emidat.com/v2/supplier-products/{id}"
payload = {
"external_id": "CEMENT-SUPPLIER-DE-001",
"name": "Portland Cement CEM I 42.5 R",
"supplier_plant_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transport_route": { "truck_distance_km": 95 },
"epd_id": None,
"hazardous_substances": [],
"lifetime_years": None,
"secondary_percentage": None,
"moisture_content_percentage": None
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
external_id: 'CEMENT-SUPPLIER-DE-001',
name: 'Portland Cement CEM I 42.5 R',
supplier_plant_id: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
transport_route: {truck_distance_km: 95},
epd_id: null,
hazardous_substances: [],
lifetime_years: null,
secondary_percentage: null,
moisture_content_percentage: null
})
};
fetch('https://api.emidat.com/v2/supplier-products/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.emidat.com/v2/supplier-products/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'external_id' => 'CEMENT-SUPPLIER-DE-001',
'name' => 'Portland Cement CEM I 42.5 R',
'supplier_plant_id' => 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
'transport_route' => [
'truck_distance_km' => 95
],
'epd_id' => null,
'hazardous_substances' => [
],
'lifetime_years' => null,
'secondary_percentage' => null,
'moisture_content_percentage' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.emidat.com/v2/supplier-products/{id}"
payload := strings.NewReader("{\n \"external_id\": \"CEMENT-SUPPLIER-DE-001\",\n \"name\": \"Portland Cement CEM I 42.5 R\",\n \"supplier_plant_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"transport_route\": {\n \"truck_distance_km\": 95\n },\n \"epd_id\": null,\n \"hazardous_substances\": [],\n \"lifetime_years\": null,\n \"secondary_percentage\": null,\n \"moisture_content_percentage\": null\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.emidat.com/v2/supplier-products/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"external_id\": \"CEMENT-SUPPLIER-DE-001\",\n \"name\": \"Portland Cement CEM I 42.5 R\",\n \"supplier_plant_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"transport_route\": {\n \"truck_distance_km\": 95\n },\n \"epd_id\": null,\n \"hazardous_substances\": [],\n \"lifetime_years\": null,\n \"secondary_percentage\": null,\n \"moisture_content_percentage\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emidat.com/v2/supplier-products/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"external_id\": \"CEMENT-SUPPLIER-DE-001\",\n \"name\": \"Portland Cement CEM I 42.5 R\",\n \"supplier_plant_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"transport_route\": {\n \"truck_distance_km\": 95\n },\n \"epd_id\": null,\n \"hazardous_substances\": [],\n \"lifetime_years\": null,\n \"secondary_percentage\": null,\n \"moisture_content_percentage\": null\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"name": "Portland Cement CEM I 42.5 R",
"material_type": {
"category": "emidat-elementary",
"elementary_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"plant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"supplier_plant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transport_route": {
"truck_distance_km": 123,
"train_distance_km": 123,
"ship_distance_km": 123
},
"epd_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"hazardous_substances": [
{
"cas_number": "7732-18-5",
"percentage": 2.5
}
],
"lifetime_years": 123,
"secondary_percentage": 123,
"moisture_content_percentage": 123,
"unit": "KG",
"impacts_per_kg": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"transport_impacts_per_kg": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"secondary_datasets": [
{
"name": "<string>",
"name_extra": "<string>",
"source_url": "<string>",
"database": "<string>",
"geography": "<string>",
"base_unit": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}Update supplier product
Full replacement of editable fields. Immutable plant_id and
material_type may be omitted or echoed from the current resource.
external_id is replaced: re-sending this product’s own code
succeeds unchanged, while a code held by another active supplier product
returns 409. See External IDs.
curl --request PUT \
--url https://api.emidat.com/v2/supplier-products/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"external_id": "CEMENT-SUPPLIER-DE-001",
"name": "Portland Cement CEM I 42.5 R",
"supplier_plant_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transport_route": {
"truck_distance_km": 95
},
"epd_id": null,
"hazardous_substances": [],
"lifetime_years": null,
"secondary_percentage": null,
"moisture_content_percentage": null
}
'import requests
url = "https://api.emidat.com/v2/supplier-products/{id}"
payload = {
"external_id": "CEMENT-SUPPLIER-DE-001",
"name": "Portland Cement CEM I 42.5 R",
"supplier_plant_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"transport_route": { "truck_distance_km": 95 },
"epd_id": None,
"hazardous_substances": [],
"lifetime_years": None,
"secondary_percentage": None,
"moisture_content_percentage": None
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
external_id: 'CEMENT-SUPPLIER-DE-001',
name: 'Portland Cement CEM I 42.5 R',
supplier_plant_id: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
transport_route: {truck_distance_km: 95},
epd_id: null,
hazardous_substances: [],
lifetime_years: null,
secondary_percentage: null,
moisture_content_percentage: null
})
};
fetch('https://api.emidat.com/v2/supplier-products/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.emidat.com/v2/supplier-products/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'external_id' => 'CEMENT-SUPPLIER-DE-001',
'name' => 'Portland Cement CEM I 42.5 R',
'supplier_plant_id' => 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
'transport_route' => [
'truck_distance_km' => 95
],
'epd_id' => null,
'hazardous_substances' => [
],
'lifetime_years' => null,
'secondary_percentage' => null,
'moisture_content_percentage' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.emidat.com/v2/supplier-products/{id}"
payload := strings.NewReader("{\n \"external_id\": \"CEMENT-SUPPLIER-DE-001\",\n \"name\": \"Portland Cement CEM I 42.5 R\",\n \"supplier_plant_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"transport_route\": {\n \"truck_distance_km\": 95\n },\n \"epd_id\": null,\n \"hazardous_substances\": [],\n \"lifetime_years\": null,\n \"secondary_percentage\": null,\n \"moisture_content_percentage\": null\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.emidat.com/v2/supplier-products/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"external_id\": \"CEMENT-SUPPLIER-DE-001\",\n \"name\": \"Portland Cement CEM I 42.5 R\",\n \"supplier_plant_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"transport_route\": {\n \"truck_distance_km\": 95\n },\n \"epd_id\": null,\n \"hazardous_substances\": [],\n \"lifetime_years\": null,\n \"secondary_percentage\": null,\n \"moisture_content_percentage\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emidat.com/v2/supplier-products/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"external_id\": \"CEMENT-SUPPLIER-DE-001\",\n \"name\": \"Portland Cement CEM I 42.5 R\",\n \"supplier_plant_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"transport_route\": {\n \"truck_distance_km\": 95\n },\n \"epd_id\": null,\n \"hazardous_substances\": [],\n \"lifetime_years\": null,\n \"secondary_percentage\": null,\n \"moisture_content_percentage\": null\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"name": "Portland Cement CEM I 42.5 R",
"material_type": {
"category": "emidat-elementary",
"elementary_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"plant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"supplier_plant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transport_route": {
"truck_distance_km": 123,
"train_distance_km": 123,
"ship_distance_km": 123
},
"epd_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"hazardous_substances": [
{
"cas_number": "7732-18-5",
"percentage": 2.5
}
],
"lifetime_years": 123,
"secondary_percentage": 123,
"moisture_content_percentage": 123,
"unit": "KG",
"impacts_per_kg": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"transport_impacts_per_kg": [
{
"indicator_name": "GWP-total",
"unit": "kg CO2-Eq",
"value": -1.7838794215158404
}
],
"secondary_datasets": [
{
"name": "<string>",
"name_extra": "<string>",
"source_url": "<string>",
"database": "<string>",
"geography": "<string>",
"base_unit": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant",
"entitlement_limit": {
"dimension": "users",
"usage": 123,
"limit": 123
}
}Authorizations
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
UUID of the supplier product to update.
Body
Full replacement of editable fields. Every editable field is required and
overwrites the stored value. Nullable fields accept null to clear them;
hazardous_substances accepts []. The immutable identity fields may be
omitted or echoed from the current resource.
Your own code for this supplier product. Overwrites the stored code; pass
null to clear it. Must stay unique among your active supplier products —
a code held by another returns 409 (see External IDs).
"CEMENT-SUPPLIER-DE-001"
Name of the supplier product.
"Portland Cement CEM I 42.5 R"
UUID of the supplier plant. Create via POST /v2/supplier-plants. Pass null to clear.
Replaces the transport route — distances from the supplier plant to your
gate, one per modality (km). Pass null to clear.
Show child attributes
Show child attributes
EPD UUID linked to this supplier product. Pass null to remove.
Hazardous substances in this material, each by CAS number and mass
share. Replaces the full list; send [] for none.
Show child attributes
Show child attributes
Expected service life in years. Pass null to clear.
Share of secondary (recycled) content, 0–100. Pass null to clear.
Moisture content as a percentage. Pass null to clear.
Optional assertion of the resource ID. It must match the path id.
Optional assertion of the current plant. A different value returns
422.
Optional assertion of the current material type. A different value
returns 422.
- Option 1
- Option 2
Show child attributes
Show child attributes
Response
Updated supplier product.
Your own code for this supplier product, as provided on creation.
"Portland Cement CEM I 42.5 R"
What this supplier product is made of — an Emidat elementary or a
composite, by reference. Discriminated by category. Resolve a
composite_id with GET /v2/composites/{id}.
- Option 1
- Option 2
Show child attributes
Show child attributes
The plant's Emidat UUID.
UUID of the supplier plant this material is sourced from. Resolve it
with GET /v2/supplier-plants/{id}.
Transport distances from the supplier plant to your gate, one per modality (km).
Show child attributes
Show child attributes
Hazardous substances in this material, each by CAS number and mass share.
Show child attributes
Show child attributes
M, M2, M3, UG, KG, T, L, KWH, MJ, UNIT, METRIC TON*KM "KG"
Characterized cradle-to-gate impacts of this supplier product per kg. Null until computed.
Show child attributes
Show child attributes
The transport portion of this product's impacts per kg. Null until computed.
Show child attributes
Show child attributes
Background datasets used to compute the impacts.
Show child attributes
Show child attributes