curl --request PUT \
--url https://api.emidat.com/v2/silos/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"external_id": "CEMENT_SILO_MUNICH_1",
"plant_id": "11111111-1111-1111-1111-111111111111",
"name": "Cement Silo 1 (Munich, renamed)",
"items": [
{
"supplier_product_id": "33333333-3333-3333-3333-333333333333",
"annual_items": [
{
"year": 2024,
"amount": 600000
},
{
"year": 2025,
"amount": 700000
}
]
},
{
"supplier_product_id": "44444444-4444-4444-4444-444444444444",
"annual_items": [
{
"year": 2024,
"amount": 400000
}
]
}
]
}
'import requests
url = "https://api.emidat.com/v2/silos/{id}"
payload = {
"external_id": "CEMENT_SILO_MUNICH_1",
"plant_id": "11111111-1111-1111-1111-111111111111",
"name": "Cement Silo 1 (Munich, renamed)",
"items": [
{
"supplier_product_id": "33333333-3333-3333-3333-333333333333",
"annual_items": [
{
"year": 2024,
"amount": 600000
},
{
"year": 2025,
"amount": 700000
}
]
},
{
"supplier_product_id": "44444444-4444-4444-4444-444444444444",
"annual_items": [
{
"year": 2024,
"amount": 400000
}
]
}
]
}
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_SILO_MUNICH_1',
plant_id: '11111111-1111-1111-1111-111111111111',
name: 'Cement Silo 1 (Munich, renamed)',
items: [
{
supplier_product_id: '33333333-3333-3333-3333-333333333333',
annual_items: [{year: 2024, amount: 600000}, {year: 2025, amount: 700000}]
},
{
supplier_product_id: '44444444-4444-4444-4444-444444444444',
annual_items: [{year: 2024, amount: 400000}]
}
]
})
};
fetch('https://api.emidat.com/v2/silos/{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/silos/{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_SILO_MUNICH_1',
'plant_id' => '11111111-1111-1111-1111-111111111111',
'name' => 'Cement Silo 1 (Munich, renamed)',
'items' => [
[
'supplier_product_id' => '33333333-3333-3333-3333-333333333333',
'annual_items' => [
[
'year' => 2024,
'amount' => 600000
],
[
'year' => 2025,
'amount' => 700000
]
]
],
[
'supplier_product_id' => '44444444-4444-4444-4444-444444444444',
'annual_items' => [
[
'year' => 2024,
'amount' => 400000
]
]
]
]
]),
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/silos/{id}"
payload := strings.NewReader("{\n \"external_id\": \"CEMENT_SILO_MUNICH_1\",\n \"plant_id\": \"11111111-1111-1111-1111-111111111111\",\n \"name\": \"Cement Silo 1 (Munich, renamed)\",\n \"items\": [\n {\n \"supplier_product_id\": \"33333333-3333-3333-3333-333333333333\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 600000\n },\n {\n \"year\": 2025,\n \"amount\": 700000\n }\n ]\n },\n {\n \"supplier_product_id\": \"44444444-4444-4444-4444-444444444444\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 400000\n }\n ]\n }\n ]\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/silos/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"external_id\": \"CEMENT_SILO_MUNICH_1\",\n \"plant_id\": \"11111111-1111-1111-1111-111111111111\",\n \"name\": \"Cement Silo 1 (Munich, renamed)\",\n \"items\": [\n {\n \"supplier_product_id\": \"33333333-3333-3333-3333-333333333333\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 600000\n },\n {\n \"year\": 2025,\n \"amount\": 700000\n }\n ]\n },\n {\n \"supplier_product_id\": \"44444444-4444-4444-4444-444444444444\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 400000\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emidat.com/v2/silos/{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_SILO_MUNICH_1\",\n \"plant_id\": \"11111111-1111-1111-1111-111111111111\",\n \"name\": \"Cement Silo 1 (Munich, renamed)\",\n \"items\": [\n {\n \"supplier_product_id\": \"33333333-3333-3333-3333-333333333333\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 600000\n },\n {\n \"year\": 2025,\n \"amount\": 700000\n }\n ]\n },\n {\n \"supplier_product_id\": \"44444444-4444-4444-4444-444444444444\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 400000\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "CEMENT_SILO_MUNICH_1",
"plant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Cement Silo 1 (Munich)",
"items": [
{
"supplier_product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"annual_items": [
{
"year": 2024,
"amount": 5000
}
]
}
],
"created_at": "2023-11-07T05:31:56Z"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}Update silo
Full replacement of editable fields. Immutable plant_id may be omitted
or echoed from the current resource. external_id is
replaced: re-sending this silo’s own code succeeds unchanged, while a code
held by another active silo returns 409. See External IDs.
curl --request PUT \
--url https://api.emidat.com/v2/silos/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"external_id": "CEMENT_SILO_MUNICH_1",
"plant_id": "11111111-1111-1111-1111-111111111111",
"name": "Cement Silo 1 (Munich, renamed)",
"items": [
{
"supplier_product_id": "33333333-3333-3333-3333-333333333333",
"annual_items": [
{
"year": 2024,
"amount": 600000
},
{
"year": 2025,
"amount": 700000
}
]
},
{
"supplier_product_id": "44444444-4444-4444-4444-444444444444",
"annual_items": [
{
"year": 2024,
"amount": 400000
}
]
}
]
}
'import requests
url = "https://api.emidat.com/v2/silos/{id}"
payload = {
"external_id": "CEMENT_SILO_MUNICH_1",
"plant_id": "11111111-1111-1111-1111-111111111111",
"name": "Cement Silo 1 (Munich, renamed)",
"items": [
{
"supplier_product_id": "33333333-3333-3333-3333-333333333333",
"annual_items": [
{
"year": 2024,
"amount": 600000
},
{
"year": 2025,
"amount": 700000
}
]
},
{
"supplier_product_id": "44444444-4444-4444-4444-444444444444",
"annual_items": [
{
"year": 2024,
"amount": 400000
}
]
}
]
}
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_SILO_MUNICH_1',
plant_id: '11111111-1111-1111-1111-111111111111',
name: 'Cement Silo 1 (Munich, renamed)',
items: [
{
supplier_product_id: '33333333-3333-3333-3333-333333333333',
annual_items: [{year: 2024, amount: 600000}, {year: 2025, amount: 700000}]
},
{
supplier_product_id: '44444444-4444-4444-4444-444444444444',
annual_items: [{year: 2024, amount: 400000}]
}
]
})
};
fetch('https://api.emidat.com/v2/silos/{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/silos/{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_SILO_MUNICH_1',
'plant_id' => '11111111-1111-1111-1111-111111111111',
'name' => 'Cement Silo 1 (Munich, renamed)',
'items' => [
[
'supplier_product_id' => '33333333-3333-3333-3333-333333333333',
'annual_items' => [
[
'year' => 2024,
'amount' => 600000
],
[
'year' => 2025,
'amount' => 700000
]
]
],
[
'supplier_product_id' => '44444444-4444-4444-4444-444444444444',
'annual_items' => [
[
'year' => 2024,
'amount' => 400000
]
]
]
]
]),
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/silos/{id}"
payload := strings.NewReader("{\n \"external_id\": \"CEMENT_SILO_MUNICH_1\",\n \"plant_id\": \"11111111-1111-1111-1111-111111111111\",\n \"name\": \"Cement Silo 1 (Munich, renamed)\",\n \"items\": [\n {\n \"supplier_product_id\": \"33333333-3333-3333-3333-333333333333\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 600000\n },\n {\n \"year\": 2025,\n \"amount\": 700000\n }\n ]\n },\n {\n \"supplier_product_id\": \"44444444-4444-4444-4444-444444444444\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 400000\n }\n ]\n }\n ]\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/silos/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"external_id\": \"CEMENT_SILO_MUNICH_1\",\n \"plant_id\": \"11111111-1111-1111-1111-111111111111\",\n \"name\": \"Cement Silo 1 (Munich, renamed)\",\n \"items\": [\n {\n \"supplier_product_id\": \"33333333-3333-3333-3333-333333333333\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 600000\n },\n {\n \"year\": 2025,\n \"amount\": 700000\n }\n ]\n },\n {\n \"supplier_product_id\": \"44444444-4444-4444-4444-444444444444\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 400000\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emidat.com/v2/silos/{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_SILO_MUNICH_1\",\n \"plant_id\": \"11111111-1111-1111-1111-111111111111\",\n \"name\": \"Cement Silo 1 (Munich, renamed)\",\n \"items\": [\n {\n \"supplier_product_id\": \"33333333-3333-3333-3333-333333333333\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 600000\n },\n {\n \"year\": 2025,\n \"amount\": 700000\n }\n ]\n },\n {\n \"supplier_product_id\": \"44444444-4444-4444-4444-444444444444\",\n \"annual_items\": [\n {\n \"year\": 2024,\n \"amount\": 400000\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "CEMENT_SILO_MUNICH_1",
"plant_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Cement Silo 1 (Munich)",
"items": [
{
"supplier_product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"annual_items": [
{
"year": 2024,
"amount": 5000
}
]
}
],
"created_at": "2023-11-07T05:31:56Z"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}{
"msg": "supplier product requires a supplier plant",
"err_code": "err_supplier_product_missing_supplier_plant"
}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 silo's Emidat UUID.
Body
Full replacement of editable fields. Every editable field is required and overwrites the stored value. The immutable plant may be omitted or echoed from the current resource.
Your own silo code. Overwrites the stored code; pass null to clear it.
Must stay unique among your active silos — a code held by another returns
409 (see External IDs).
"CEMENT_SILO_MUNICH_1"
Updated silo name.
Replaces the full items list — at least 1 item.
1Show child attributes
Show child attributes
Optional assertion of the resource ID. It must match the path id.
Optional assertion of the current plant. A different value returns
422.
Response
Updated silo.
Emidat-assigned silo UUID.
Your own code for this silo, null when none is set. BOM entries reference it by its Emidat id, not this code.
"CEMENT_SILO_MUNICH_1"
The plant's Emidat UUID.
Human-readable silo name.
"Cement Silo 1 (Munich)"
Supplier products constituting this silo, with yearly purchase volumes.
Show child attributes
Show child attributes