curl --request GET \
--url https://api.emidat.com/v2/product-instances/{id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.emidat.com/v2/product-instances/{id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.emidat.com/v2/product-instances/{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/product-instances/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.emidat.com/v2/product-instances/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.emidat.com/v2/product-instances/{id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emidat.com/v2/product-instances/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"plant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"elementary_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"production_process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"unit": "KG",
"produced_from": 2025,
"produced_to": 123,
"tech_specs": {
"compressive_strength": 42.5,
"density": 3100
},
"annual_data": [
{
"year": 2025,
"production_output": 120000,
"economic_value_per_unit": 1
}
],
"status": "draft",
"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
}
}Get product instance
curl --request GET \
--url https://api.emidat.com/v2/product-instances/{id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.emidat.com/v2/product-instances/{id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.emidat.com/v2/product-instances/{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/product-instances/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.emidat.com/v2/product-instances/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.emidat.com/v2/product-instances/{id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emidat.com/v2/product-instances/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"plant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"elementary_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"production_process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"unit": "KG",
"produced_from": 2025,
"produced_to": 123,
"tech_specs": {
"compressive_strength": 42.5,
"density": 3100
},
"annual_data": [
{
"year": 2025,
"production_output": 120000,
"economic_value_per_unit": 1
}
],
"status": "draft",
"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
}
}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
The instance's Emidat UUID.
Response
Product instance.
Your own code for this instance, as provided on creation.
The plant's Emidat UUID. Always present — set at creation and immutable.
Emidat material-type UUID — determines the product type.
The production process's Emidat UUID, or null if none.
M, M2, M3, UG, KG, T, L, KWH, MJ, UNIT, METRIC TON*KM "KG"
First year this instance is valid.
2025
Last valid year, or null if open-ended.
Technical specifications as key/value pairs. Which keys apply depends
on the instance's elementary_id — cement, for example, takes
compressive_strength and density.
{
"compressive_strength": 42.5,
"density": 3100
}
Production output and economic value per year.
Show child attributes
Show child attributes
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.
incomplete, draft "draft"