Skip to main content
POST
Create silo

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 silo. Required; pass null if unset. A non-null code must be unique among your active silos; a duplicate returns 409 (see External IDs).

Example:

"CEMENT_SILO_MUNICH_1"

plant_id
string<uuid>
required

The plant's Emidat UUID.

name
string
required

Human-readable silo name.

Example:

"Cement Silo 1 (Munich)"

items
object[]
required

Supplier products and prechain products that constitute this silo — at least 1, all the same material type, at this silo's plant, with no duplicates.

Minimum array length: 1

One supplier product contributing to a silo, with the volumes purchased from that supplier per calendar year. All items in a silo share the same material type — the same elementary, or the same composite; the unit is derived from it. Missing annual quantities block calculation; enter an explicit zero when this supplier contributes nothing that year.

Response

Returned unchanged — an Idempotency-Key replay.

A silo has the same ingredients across all years, with quantities entered per year. Calculation requires an explicit amount for every ingredient in the selected year and a positive total. Missing quantities are incomplete; zero means no contribution. These rules apply to both supplier and prechain ingredients. Existing supplier-only compositions retain their historical shares through a one-time backfill of implicit zeros.

id
string<uuid>
required

Emidat-assigned silo UUID.

external_id
string | null
required

Your own code for this silo, null when none is set. BOM entries reference it by its Emidat id, not this code.

Example:

"CEMENT_SILO_MUNICH_1"

plant_id
string<uuid>
required

The plant's Emidat UUID.

name
string
required

Human-readable silo name.

Example:

"Cement Silo 1 (Munich)"

items
object[]
required

Supplier products and prechain products constituting this silo, with annual quantities.

One supplier product contributing to a silo, with the volumes purchased from that supplier per calendar year. All items in a silo share the same material type — the same elementary, or the same composite; the unit is derived from it. Missing annual quantities block calculation; enter an explicit zero when this supplier contributes nothing that year.

created_at
string<date-time>
required