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.
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.
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).
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}.
{"docsConfig":{"theme":"willow","$schema":"https://mintlify.com/docs.json","name":"Emidat API","colors":{"primary":"#2929CC","light":"#7A9EFF","dark":"#3A41FF"},"logo":{"light":"https://mintcdn.com/emidat/KhjEpdL-EUrz1H4P/logo/dark.svg?fit=max\u0026auto=format\u0026n=KhjEpdL-EUrz1H4P\u0026q=85\u0026s=35ce6850a5591a143fb8936475924122","dark":"https://mintcdn.com/emidat/KhjEpdL-EUrz1H4P/logo/light.svg?fit=max\u0026auto=format\u0026n=KhjEpdL-EUrz1H4P\u0026q=85\u0026s=baa6adbdb91f8c15483fb851ef7340f0"},"favicon":"https://mintcdn.com/emidat/YjmcwD6G99MPB3DL/favicon.svg?fit=max\u0026auto=format\u0026n=YjmcwD6G99MPB3DL\u0026q=85\u0026s=a385fe226f3bef5e55f05bc1451a416f","appearance":{"default":"light","strict":true},"fonts":{"heading":{"family":"CircularStd","weight":700,"source":"fonts/CircularStd-Bold.woff2","format":"woff2"},"body":{"family":"CircularStd","weight":400,"source":"fonts/CircularStd-Book.woff2","format":"woff2"}},"icons":{"library":"lucide"},"styling":{"eyebrows":"section","codeblocks":"dark","latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"emidat","hasAudioNarration":false,"actualSubdomain":"emidat","customDomains":["docs.emidat.com"],"gitSource":{"type":"github","owner":"emidat","repo":"emidat-api","deployBranch":"main","contentDirectory":"mintlify","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae1149a59a03b84c66cc0f2","collectionId":"d2e84996-5af7-41f5-b843-621489ca96aa","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae1149a59a03b84c66cc0f2"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae1149a59a03b84c66cc0f2","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Product Instances","count":9},{"language":"default","tag":"Composites","count":5},{"language":"default","tag":"Prechain Products","count":5},{"language":"default","tag":"Silos","count":5},{"language":"default","tag":"Supplier Companies","count":5},{"language":"default","tag":"Supplier Plants","count":5},{"language":"default","tag":"Supplier Products","count":5},{"language":"default","tag":"Get Started","count":5},{"language":"default","tag":"Plants","count":2},{"language":"default","tag":"Production Processes","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--emidat-surface-primary:#ffffff;--emidat-stroke-primary:#e0e0e0;--emidat-state-hover:rgb(0 0 0 / 4%);--emidat-state-info-active:rgb(58 65 255 / 8%);--emidat-surface-neutral:#f2f0e9;--emidat-content-neutral:#665d56;--emidat-surface-accent:#dcff1d;--emidat-surface-accent-soft:#f7ffc2;--emidat-stroke-accent:#72a300;--emidat-content-accent:#243300;--emidat-surface-info:#d9e8ff;--emidat-content-info:#2929cc;--emidat-surface-warn:#ffeac9;--emidat-content-warn:#b85300;--emidat-surface-alt:#ede0ff;--emidat-content-alt:#601fc2;--emidat-shadow-sm:0 2px 10px 0 rgb(88 107 86 / 8%), 0 1px 2px 0 rgb(88 107 86 / 8%);--emidat-page-width:92rem}#navbar>div:last-child,div:has(>#content-area){max-width:var(--emidat-page-width);margin-inline:auto}@media (min-width:1024px){#sidebar{left:max(0px,calc((100% - var(--emidat-page-width))/2))}}#navbar .nav-logo{height:1.75rem}#background-color{background-color:var(--emidat-surface-primary)}#header,#header *,#table-of-contents,#table-of-contents *{text-align:left}#table-of-contents{align-items:flex-start}#sidebar a:hover{background-color:var(--emidat-state-hover)}#sidebar a[aria-current=page]{background-color:var(--emidat-state-info-active)}@font-face{font-family:\"CircularStd\";font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/CircularStd-Medium.woff2) format(\"woff2\")}[class*=rounded]:not([class*=rounded-full]){border-radius:0!important}#content-area :is(h1, h2, h3, h4, h5),#page-title h1{font-weight:700}.accordion,.callout,.card,.field,.frame,.tile{border-color:var(--emidat-stroke-primary);box-shadow:none}.card:hover{box-shadow:var(--emidat-shadow-sm)}#topbar-cta-button,.tryit-button{background-color:var(--emidat-surface-accent);border:1px solid var(--emidat-stroke-accent);color:var(--emidat-content-accent);font-weight:700}.tryit-button .icon{background-color:currentColor}.card-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.card-header-title{display:inline-flex;align-items:center;gap:.5rem;font-weight:700}.badge{flex-shrink:0;padding:.1rem .55rem;font-size:.7rem;font-weight:700;white-space:nowrap}.badge-neutral{background:var(--emidat-surface-neutral);color:var(--emidat-content-neutral)}.badge-accent{background:var(--emidat-surface-accent-soft);color:var(--emidat-content-accent)}.badge-warn{background:var(--emidat-surface-warn);color:var(--emidat-content-warn)}.badge-info{background:var(--emidat-surface-info);color:var(--emidat-content-info)}.badge-alt{background:var(--emidat-surface-alt);color:var(--emidat-content-alt)}.nav-tag-pill-text[data-nav-tag=Preview]{color:var(--emidat-content-warn)!important;background-color:var(--emidat-surface-warn)!important}"}],"page":{"pagePath":"api-reference/supplier-products/update","slug":"/api-reference/supplier-products/update","pageMetadata":{"title":"Update supplier product","openapi":"PUT /v2/supplier-products/{id}","description":"Full replacement of editable fields. Immutable `plant_id` and\n`material_type` may be omitted or echoed from the current resource.\n`external_id` is replaced: re-sending this product's own code\nsucceeds unchanged, while a code held by another active supplier product\nreturns `409`. See [External IDs](/external-ids).\n","href":"/api-reference/supplier-products/update"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Full replacement of editable fields. Immutable \", _jsx(_components.code, {\n children: \"plant_id\"\n }), \" and\\n\", _jsx(_components.code, {\n children: \"material_type\"\n }), \" may be omitted or echoed from the current resource.\\n\", _jsx(_components.code, {\n children: \"external_id\"\n }), \" is replaced: re-sending this product’s own code\\nsucceeds unchanged, while a code held by another active supplier product\\nreturns \", _jsx(_components.code, {\n children: \"409\"\n }), \". See \", _jsx(_components.a, {\n href: \"/external-ids\",\n children: \"External IDs\"\n }), \".\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Update supplier product","openapi":"PUT /v2/supplier-products/{id}","description":"Full replacement of editable fields. Immutable `plant_id` and\n`material_type` may be omitted or echoed from the current resource.\n`external_id` is replaced: re-sending this product's own code\nsucceeds unchanged, while a code held by another active supplier product\nreturns `409`. See [External IDs](/external-ids).\n","href":"/api-reference/supplier-products/update"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"v2_supplier_products_update","summary":"Update supplier product","description":"Full replacement of editable fields. Immutable `plant_id` and\n`material_type` may be omitted or echoed from the current resource.\n`external_id` is replaced: re-sending this product's own code\nsucceeds unchanged, while a code held by another active supplier product\nreturns `409`. See [External IDs](/external-ids).\n","tags":["Supplier Products"],"parameters":["88a52e35-9fcd-4179-862b-5f35d22be5c6"],"requestBody":"1705f32a-ec37-460c-8866-3bdefc64d45b","responses":{"200":"5ae041ce-d7af-4bcd-8668-7d50e4365f62","401":"857b847c-fdd9-4635-8209-43a343468e99","403":"34596b9f-69c3-413e-a7c2-c852d8fd868c","404":"d6a9c7d2-e1d0-4a84-8e08-7108decebf3b","409":"e2a9f563-7a68-45bf-aa32-b6166dbc243c","422":"960c502e-285c-46d7-b17a-f89d1ecd91ae","500":"33c2b8ad-615d-475c-a6a5-1e087304f9bc","502":"469e2e93-1aed-4b88-814b-92e6f94fd945"},"method":"put","type":"path","servers":["a42dc66d-03f9-4209-983c-652cfedae855"],"security":["2ab579d0-4684-4603-a7c2-22c2b153e15a"],"path":"/v2/supplier-products/{id}","baseUrlOptions":["https://api.emidat.com"],"title":"Update supplier product","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"88a52e35-9fcd-4179-862b-5f35d22be5c6":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"UUID of the supplier product to update.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"UUID of the supplier product to update."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Full replacement of editable fields. Every editable field is required and\noverwrites the stored value. Nullable fields accept `null` to clear them;\n`hazardous_substances` accepts `[]`. The immutable identity fields may be\nomitted or echoed from the current resource.\n","required":["external_id","name","supplier_plant_id","transport_route","epd_id","hazardous_substances","lifetime_years","secondary_percentage","moisture_content_percentage"],"properties":{"external_id":{"oneOf":[{"type":"string","description":"Your own code for this supplier product. Overwrites the stored code; pass\n`null` to clear it. Must stay unique among your active supplier products —\na code held by another returns `409` (see [External IDs](/external-ids)).\n","example":"CEMENT-SUPPLIER-DE-001","isRequired":true,"uniqueKey":"external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your own code for this supplier product. Overwrites the stored code; pass\n`null` to clear it. Must stay unique among your active supplier products —\na code held by another returns `409` (see [External IDs](/external-ids)).\n","example":"CEMENT-SUPPLIER-DE-001","isRequired":true,"uniqueKey":"external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"external_id","typeLabel":"string | null"},"name":{"type":"string","description":"Name of the supplier product.","example":"Portland Cement CEM I 42.5 R","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"supplier_plant_id":{"oneOf":[{"type":"string","description":"UUID of the supplier plant. Required except for water materials; only those allow `null` to clear.","format":"uuid","isRequired":true,"uniqueKey":"supplier_plant_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"UUID of the supplier plant. Required except for water materials; only those allow `null` to clear.","isRequired":true,"uniqueKey":"supplier_plant_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"supplier_plant_id","typeLabel":"string\u003cuuid> | null"},"transport_route":{"oneOf":[{"type":"object","description":"Replaces the transport route — distances from the supplier plant to your\ngate, one per modality (km). Pass `null` to clear.\n","properties":{"truck_distance_km":{"oneOf":[{"type":"number","description":"Distance by truck in km.","example":80,"uniqueKey":"transport_route.oneOf.0.truck_distance_km.oneOf.0","typeLabel":"number"},{"type":"null","description":"Distance by truck in km.","example":80,"uniqueKey":"transport_route.oneOf.0.truck_distance_km.oneOf.1","typeLabel":"null"}],"uniqueKey":"transport_route.oneOf.0.truck_distance_km","typeLabel":"number | null"},"train_distance_km":{"oneOf":[{"type":"number","description":"Distance by train in km.","uniqueKey":"transport_route.oneOf.0.train_distance_km.oneOf.0","typeLabel":"number"},{"type":"null","description":"Distance by train in km.","uniqueKey":"transport_route.oneOf.0.train_distance_km.oneOf.1","typeLabel":"null"}],"uniqueKey":"transport_route.oneOf.0.train_distance_km","typeLabel":"number | null"},"ship_distance_km":{"oneOf":[{"type":"number","description":"Distance by ship in km.","uniqueKey":"transport_route.oneOf.0.ship_distance_km.oneOf.0","typeLabel":"number"},{"type":"null","description":"Distance by ship in km.","uniqueKey":"transport_route.oneOf.0.ship_distance_km.oneOf.1","typeLabel":"null"}],"uniqueKey":"transport_route.oneOf.0.ship_distance_km","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"transport_route.oneOf.0","typeLabel":"object"},{"type":"null","description":"Replaces the transport route — distances from the supplier plant to your\ngate, one per modality (km). Pass `null` to clear.\n","isRequired":true,"uniqueKey":"transport_route.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_route","typeLabel":"object | null"},"epd_id":{"oneOf":[{"type":"string","description":"EPD UUID linked to this supplier product. Pass `null` to remove.","format":"uuid","isRequired":true,"uniqueKey":"epd_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"EPD UUID linked to this supplier product. Pass `null` to remove.","isRequired":true,"uniqueKey":"epd_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"epd_id","typeLabel":"string\u003cuuid> | null"},"hazardous_substances":{"type":"array","description":"Hazardous substances in this material, each by CAS number and mass\nshare. Replaces the full list; send `[]` for none.\n","items":{"type":"object","required":["cas_number","percentage"],"properties":{"cas_number":{"type":"string","example":"7732-18-5","isRequired":true,"uniqueKey":"hazardous_substances.items.[INDEX].cas_number","typeLabel":"string"},"percentage":{"type":"number","exclusiveMinimum":0,"maximum":100,"description":"Share of total mass, greater than 0 and up to 100.","example":2.5,"isRequired":true,"uniqueKey":"hazardous_substances.items.[INDEX].percentage","typeLabel":"number"}},"uniqueKey":"hazardous_substances.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"hazardous_substances","typeLabel":"object[]"},"lifetime_years":{"oneOf":[{"type":"number","description":"Expected service life in years. Pass `null` to clear.","isRequired":true,"uniqueKey":"lifetime_years.oneOf.0","typeLabel":"number"},{"type":"null","description":"Expected service life in years. Pass `null` to clear.","isRequired":true,"uniqueKey":"lifetime_years.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"lifetime_years","typeLabel":"number | null"},"secondary_percentage":{"oneOf":[{"type":"number","description":"Share of secondary (recycled) content, 0–100. Pass `null` to clear.","isRequired":true,"uniqueKey":"secondary_percentage.oneOf.0","typeLabel":"number"},{"type":"null","description":"Share of secondary (recycled) content, 0–100. Pass `null` to clear.","isRequired":true,"uniqueKey":"secondary_percentage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"secondary_percentage","typeLabel":"number | null"},"moisture_content_percentage":{"oneOf":[{"type":"number","description":"Moisture content as a percentage. Pass `null` to clear.","isRequired":true,"uniqueKey":"moisture_content_percentage.oneOf.0","typeLabel":"number"},{"type":"null","description":"Moisture content as a percentage. Pass `null` to clear.","isRequired":true,"uniqueKey":"moisture_content_percentage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"moisture_content_percentage","typeLabel":"number | null"},"id":{"type":"string","format":"uuid","description":"Optional assertion of the resource ID. It must match the path `id`.\n","uniqueKey":"id","typeLabel":"string\u003cuuid>"},"plant_id":{"type":"string","format":"uuid","description":"Optional assertion of the current plant. A different value returns\n`422`.\n","uniqueKey":"plant_id","typeLabel":"string\u003cuuid>"},"material_type":{"oneOf":[{"type":"object","description":"Optional assertion of the current material type. A different value\nreturns `422`.\n","required":["category","elementary_id"],"properties":{"category":{"type":"string","const":"emidat-elementary","isRequired":true,"uniqueKey":"material_type.oneOf.0.category","typeLabel":"string"},"elementary_id":{"type":"string","format":"uuid","description":"Emidat material-type UUID. Your middleware maps your material code to this.","isRequired":true,"uniqueKey":"material_type.oneOf.0.elementary_id","typeLabel":"string\u003cuuid>"}},"uniqueKey":"material_type.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional assertion of the current material type. A different value\nreturns `422`.\n","required":["category","composite_id"],"properties":{"category":{"type":"string","const":"custom-composite","isRequired":true,"uniqueKey":"material_type.oneOf.1.category","typeLabel":"string"},"composite_id":{"type":"string","format":"uuid","description":"UUID of the composite. Create via `POST /v2/composites`, or resolve\nyour code with `GET /v2/composites?external_id=…`.\n","isRequired":true,"uniqueKey":"material_type.oneOf.1.composite_id","typeLabel":"string\u003cuuid>"}},"uniqueKey":"material_type.oneOf.1","typeLabel":"object"},{"type":"object","description":"Optional assertion of the current material type. A different value\nreturns `422`.\n","required":["category","unvalidated_material_type_id"],"properties":{"category":{"type":"string","const":"unvalidated","isRequired":true,"uniqueKey":"material_type.oneOf.2.category","typeLabel":"string"},"unvalidated_material_type_id":{"type":"string","format":"uuid","description":"Shared identity, reusable only within its owning manufacturer.","isRequired":true,"uniqueKey":"material_type.oneOf.2.unvalidated_material_type_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"uniqueKey":"material_type.oneOf.2","typeLabel":"object"}],"uniqueKey":"material_type","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"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},"examples":{"Example":{"title":"Example","value":{"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}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"5ae041ce-d7af-4bcd-8668-7d50e4365f62":{"description":"Updated supplier product.","content":{"application/json":{"schema":{"type":"object","required":["id","external_id","name","material_type","plant_id","supplier_plant_id","transport_route","epd_id","hazardous_substances","lifetime_years","secondary_percentage","moisture_content_percentage","unit","impacts_per_kg","transport_impacts_per_kg","secondary_datasets","created_at"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"external_id":{"oneOf":[{"type":"string","description":"Your own code for this supplier product, as provided on creation.","isRequired":true,"uniqueKey":"external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your own code for this supplier product, as provided on creation.","isRequired":true,"uniqueKey":"external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"external_id","typeLabel":"string | null"},"name":{"type":"string","example":"Portland Cement CEM I 42.5 R","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"material_type":{"oneOf":[{"type":"object","description":"An Emidat Elementary, custom composite, or unvalidated type, by reference.\nUnvalidated references always include their manufacturer-owned identity.\nResolve a `composite_id` with `GET /v2/composites/{id}`.\n","required":["category","elementary_id"],"properties":{"category":{"type":"string","const":"emidat-elementary","isRequired":true,"uniqueKey":"material_type.oneOf.0.category","typeLabel":"string"},"elementary_id":{"type":"string","format":"uuid","description":"Emidat material-type UUID. Your middleware maps your material code to this.","isRequired":true,"uniqueKey":"material_type.oneOf.0.elementary_id","typeLabel":"string\u003cuuid>"}},"isRequired":true,"uniqueKey":"material_type.oneOf.0","typeLabel":"object"},{"type":"object","description":"An Emidat Elementary, custom composite, or unvalidated type, by reference.\nUnvalidated references always include their manufacturer-owned identity.\nResolve a `composite_id` with `GET /v2/composites/{id}`.\n","required":["category","composite_id"],"properties":{"category":{"type":"string","const":"custom-composite","isRequired":true,"uniqueKey":"material_type.oneOf.1.category","typeLabel":"string"},"composite_id":{"type":"string","format":"uuid","description":"UUID of the composite. Create via `POST /v2/composites`, or resolve\nyour code with `GET /v2/composites?external_id=…`.\n","isRequired":true,"uniqueKey":"material_type.oneOf.1.composite_id","typeLabel":"string\u003cuuid>"}},"isRequired":true,"uniqueKey":"material_type.oneOf.1","typeLabel":"object"},{"type":"object","description":"An Emidat Elementary, custom composite, or unvalidated type, by reference.\nUnvalidated references always include their manufacturer-owned identity.\nResolve a `composite_id` with `GET /v2/composites/{id}`.\n","required":["category","unvalidated_material_type_id"],"properties":{"category":{"type":"string","const":"unvalidated","isRequired":true,"uniqueKey":"material_type.oneOf.2.category","typeLabel":"string"},"unvalidated_material_type_id":{"type":"string","format":"uuid","description":"Shared identity, reusable only within its owning manufacturer.","isRequired":true,"uniqueKey":"material_type.oneOf.2.unvalidated_material_type_id","typeLabel":"string\u003cuuid>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"material_type.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"material_type","typeLabel":"object"},"plant_id":{"type":"string","format":"uuid","description":"The plant's Emidat UUID.","isRequired":true,"uniqueKey":"plant_id","typeLabel":"string\u003cuuid>"},"supplier_plant_id":{"oneOf":[{"type":"string","description":"UUID of the supplier plant this material is sourced from. Resolve it\nwith `GET /v2/supplier-plants/{id}`.\n","format":"uuid","isRequired":true,"uniqueKey":"supplier_plant_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"UUID of the supplier plant this material is sourced from. Resolve it\nwith `GET /v2/supplier-plants/{id}`.\n","isRequired":true,"uniqueKey":"supplier_plant_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"supplier_plant_id","typeLabel":"string\u003cuuid> | null"},"transport_route":{"oneOf":[{"type":"object","description":"Transport distances from the supplier plant to your gate, one per modality (km).","required":["truck_distance_km","train_distance_km","ship_distance_km"],"properties":{"truck_distance_km":{"oneOf":[{"type":"number","description":"Distance by truck in km.","isRequired":true,"uniqueKey":"transport_route.oneOf.0.truck_distance_km.oneOf.0","typeLabel":"number"},{"type":"null","description":"Distance by truck in km.","isRequired":true,"uniqueKey":"transport_route.oneOf.0.truck_distance_km.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_route.oneOf.0.truck_distance_km","typeLabel":"number | null"},"train_distance_km":{"oneOf":[{"type":"number","description":"Distance by train in km.","isRequired":true,"uniqueKey":"transport_route.oneOf.0.train_distance_km.oneOf.0","typeLabel":"number"},{"type":"null","description":"Distance by train in km.","isRequired":true,"uniqueKey":"transport_route.oneOf.0.train_distance_km.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_route.oneOf.0.train_distance_km","typeLabel":"number | null"},"ship_distance_km":{"oneOf":[{"type":"number","description":"Distance by ship in km.","isRequired":true,"uniqueKey":"transport_route.oneOf.0.ship_distance_km.oneOf.0","typeLabel":"number"},{"type":"null","description":"Distance by ship in km.","isRequired":true,"uniqueKey":"transport_route.oneOf.0.ship_distance_km.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_route.oneOf.0.ship_distance_km","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"transport_route.oneOf.0","typeLabel":"object"},{"type":"null","description":"Transport distances from the supplier plant to your gate, one per modality (km).","isRequired":true,"uniqueKey":"transport_route.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_route","typeLabel":"object | null"},"epd_id":{"oneOf":[{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"epd_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","isRequired":true,"uniqueKey":"epd_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"epd_id","typeLabel":"string\u003cuuid> | null"},"hazardous_substances":{"type":"array","description":"Hazardous substances in this material, each by CAS number and mass share.","items":{"type":"object","required":["cas_number","percentage"],"properties":{"cas_number":{"type":"string","example":"7732-18-5","isRequired":true,"uniqueKey":"hazardous_substances.items.[INDEX].cas_number","typeLabel":"string"},"percentage":{"type":"number","example":2.5,"isRequired":true,"uniqueKey":"hazardous_substances.items.[INDEX].percentage","typeLabel":"number"}},"uniqueKey":"hazardous_substances.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"hazardous_substances","typeLabel":"object[]"},"lifetime_years":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"lifetime_years.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"lifetime_years.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"lifetime_years","typeLabel":"number | null"},"secondary_percentage":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"secondary_percentage.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"secondary_percentage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"secondary_percentage","typeLabel":"number | null"},"moisture_content_percentage":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"moisture_content_percentage.oneOf.0","typeLabel":"number"},{"type":"null","isRequired":true,"uniqueKey":"moisture_content_percentage.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"moisture_content_percentage","typeLabel":"number | null"},"unit":{"type":"string","enum":["M","M2","M3","UG","KG","T","L","KWH","MJ","UNIT","METRIC TON*KM"],"example":"KG","isRequired":true,"uniqueKey":"unit","typeLabel":"enum\u003cstring>"},"impacts_per_kg":{"oneOf":[{"type":"array","items":{"type":"object","required":["indicator_name","unit","value"],"properties":{"indicator_name":{"type":"string","example":"GWP-total","isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.0.items.[INDEX].indicator_name","typeLabel":"string"},"unit":{"type":"string","example":"kg CO2-Eq","isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.0.items.[INDEX].unit","typeLabel":"string"},"value":{"oneOf":[{"type":"number","description":"Null when the indicator could not be characterized.","example":-1.7838794215158404,"isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"number"},{"type":"null","description":"Null when the indicator could not be characterized.","example":-1.7838794215158404,"isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.0.items.[INDEX].value","typeLabel":"number | null"}},"uniqueKey":"impacts_per_kg.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Characterized cradle-to-gate impacts of this supplier product per kg. Null until computed.","isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Characterized cradle-to-gate impacts of this supplier product per kg. Null until computed.","isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"impacts_per_kg","typeLabel":"object[] | null"},"transport_impacts_per_kg":{"oneOf":[{"type":"array","items":{"type":"object","required":["indicator_name","unit","value"],"properties":{"indicator_name":{"type":"string","example":"GWP-total","isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.0.items.[INDEX].indicator_name","typeLabel":"string"},"unit":{"type":"string","example":"kg CO2-Eq","isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.0.items.[INDEX].unit","typeLabel":"string"},"value":{"oneOf":[{"type":"number","description":"Null when the indicator could not be characterized.","example":-1.7838794215158404,"isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"number"},{"type":"null","description":"Null when the indicator could not be characterized.","example":-1.7838794215158404,"isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.0.items.[INDEX].value","typeLabel":"number | null"}},"uniqueKey":"transport_impacts_per_kg.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The transport portion of this product's impacts per kg. Null until computed.","isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"The transport portion of this product's impacts per kg. Null until computed.","isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_impacts_per_kg","typeLabel":"object[] | null"},"secondary_datasets":{"oneOf":[{"type":"array","items":{"type":"object","description":"A background (secondary) dataset contributing to the supplier product's impacts.","required":["name","name_extra","source_url","database","geography","base_unit"],"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX].name","typeLabel":"string"},"name_extra":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX].name_extra.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX].name_extra.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX].name_extra","typeLabel":"string | null"},"source_url":{"type":"string","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX].source_url","typeLabel":"string"},"database":{"type":"string","description":"Background database identifier, e.g. `ecoinvent-3.10` or `eurobitume`.","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX].database","typeLabel":"string"},"geography":{"type":"string","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX].geography","typeLabel":"string"},"base_unit":{"type":"string","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX].base_unit","typeLabel":"string"}},"uniqueKey":"secondary_datasets.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Background datasets used to compute the impacts.","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Background datasets used to compute the impacts.","isRequired":true,"uniqueKey":"secondary_datasets.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"secondary_datasets","typeLabel":"object[] | null"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","external_id":"\u003cstring>","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":"\u003cstring>","name_extra":"\u003cstring>","source_url":"\u003cstring>","database":"\u003cstring>","geography":"\u003cstring>","base_unit":"\u003cstring>"}],"created_at":"2023-11-07T05:31:56Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"857b847c-fdd9-4635-8209-43a343468e99":{"description":"No credentials; or the key is malformed, unknown, revoked, or expired. The\nresponse is uniform and does not reveal which check failed.\n","content":{"application/json":{"schema":{"type":"object","required":["msg","err_code"],"properties":{"msg":{"type":"string","description":"Human-readable explanation, for logs and operators. Do not parse it.","example":"supplier product requires a supplier plant","isRequired":true,"uniqueKey":"msg","typeLabel":"string"},"err_code":{"type":"string","description":"Stable, machine-readable error code — branch on this, never on `msg`.\nThe set may grow over time; treat an unrecognized code as\nnon-retryable and surface it to an operator. The enum lists every\ncode the platform can emit; only a subset is reachable per\nendpoint — see [Errors](/errors) for the actionable catalog.\n\n`LcaRecomputeJob.err_code` reports failures from this same `err_*`\nnamespace. `LcaBlocker.err_code` does not — those values are a\nseparate, disjoint set.\n","example":"err_supplier_product_missing_supplier_plant","enum":["err_emigo_daily_limit_reached","err_not_defined","err_not_found","err_not_valid","err_not_authenticated","err_permission_denied","err_account_frozen","err_declaration_not_completed","err_declaration_not_regenerable","err_epd_document_already_exists","err_invalid_product_ids","err_generate_products_limit","err_plant_missing_product_category","err_plant_incomplete_address","err_plant_incomplete_company_fields","err_plant_categories_not_covering_processes","err_plant_categories_not_covering_active_products","err_plant_invalid_category_id","err_plant_invalid_balancing_authority","err_plant_balancing_authority_non_us","err_plant_custom_electricity_mix_not_allowed","err_plant_electricity_mix_mismatch","err_plant_negative_electricity_values","err_plant_electricity_without_mix","err_electricity_plant_production_mismatch","err_lca_mass_balance","err_lca_allocation_data_incomplete","err_lca_production_output_mismatch","err_process_output_below_linked_output","err_product_mass_larger_than_recipe_mass","err_product_category_not_allowed_at_plant","err_water_not_scoped_but_wastewater_is_scoped","err_more_wastewater_than_water","err_project_no_products","err_invalid_product_quantity","err_duplicate_product","err_product_missing_gwp_total","err_elementary_deactivated","err_product_missing_supplier","err_epd_unusable","err_epd_service","err_lca_update_not_queued","err_lca_export_not_ready","err_not_ready_for_epd","err_material_not_hazardous","err_material_no_limited_lifetime","err_invalid_lifetime_years","err_invalid_secondary_percentage_range","err_secondary_percentage_not_customizable","err_moisture_content_not_bio_based","err_invalid_moisture_content_range","err_declaration_not_exists","err_declaration_not_under_review","err_no_manufacturer","err_company_setup_required","err_account_setup_complete","err_wrong_email_domain","err_user_exists","err_inviter_email_not_found","err_composite_used_in_supplier_products","err_composite_name_exists","err_plant_io_invalid_field","err_plant_io_field_not_switchable","err_plant_io_value_not_scoped","err_field_is_plant_level","err_negative_io_value","err_invalid_packaging_material","err_plant_io_mixed_allocation_groups","err_inies_sworn_statement_exists","err_supplier_in_use","err_supplier_name_exists","err_supplier_plant_in_use","err_supplier_plant_name_exists","err_supplier_product_in_recipe","err_supplier_product_in_silo","err_supplier_product_scoped_as_packaging","err_supplier_product_declared_on_a_product","err_supplier_product_missing_supplier_plant","err_silo_in_use","err_silo_name_exists","err_elementary_unknown_matching","err_product_document_not_deletable","err_product_has_declarations","err_product_instance_in_recipe","err_product_instance_has_declarations","err_prechain_product_in_recipe","err_prechain_product_exists","err_prechain_product_not_main_product","err_ccf_exists","err_ccf_not_completed","err_external_id_exists","err_external_owner_invitation_exists","err_external_owner_invitation_not_editable","err_external_owner_invitation_not_withdrawable","err_idempotency_key_reused","err_idempotency_in_progress","err_bulk_upload_invalid_file","err_bulk_upload_duplicate_headers","err_bulk_upload_ambiguous_headers","err_bulk_upload_ambiguous_values","err_bulk_upload_ambiguous_header_language","err_bulk_upload_mixed_header_languages","err_bulk_upload_language_mismatch","err_bulk_upload_value_language_mismatch","err_bulk_upload_obsolete_template","err_bulk_upload_missing_translation","err_material_type_not_found","err_material_type_unvalidated","err_unvalidated_material_type_not_found","err_material_type_not_configured","err_unit_not_allowed_for_material","err_production_process_not_found","err_multiple_production_processes","err_process_plant_mismatch","err_material_process_incompatible","err_process_output_kind_change","err_production_process_required","err_composite_not_allowed_in_recipe","err_elementary_not_allowed_in_recipe","err_elementary_already_allowed_for_product","err_elementary_request_idempotency_conflict","err_prechain_circular_reference","err_product_type_no_recipe","err_product_mass_not_set","err_required_cell_empty","err_plant_not_found","err_plant_no_access","err_multiple_plants","err_product_already_exists","err_multiple_products","err_instance_material_type_mismatch","err_instance_unit_mismatch","err_instance_id_belongs_to_other","err_instance_id_differs_from_stored","err_duplicate_instance_id","err_instance_updated","err_bulk_change","err_bulk_unchanged","err_bulk_skipped_existing","err_instance_years_removed","err_annual_year_outside_stored_period","err_linked_product_type_mismatch","err_tech_spec_not_recognized","err_recipe_incomplete","err_annual_output_invalid","err_annual_economic_value_invalid","err_annual_output_year_required","err_annual_output_year_invalid","err_annual_output_year_duplicate","err_annual_output_year_outside_period","err_orphan_row","err_duplicate_tech_spec","err_empty_sheet","err_no_products","err_tech_spec_invalid_value","err_dtp_service","err_data_translation_wrong_step","err_data_translation_invalid_plant_mapping","err_data_translation_unresolved_reference","err_data_translation_incomplete","err_data_translation_material_not_available","err_data_translation_duplicate_supplier_name","err_recycled_content_proof_missing","err_ppwr_declaration_exists","err_ppwr_declaration_editable_exists","err_ppwr_declaration_frozen","err_ppwr_doc_number_unavailable","err_ppwr_variant_mass_invalid","err_ppwr_variant_dimension_invalid","err_ppwr_variant_material_repeated","err_ppwr_variant_material_type","err_ppwr_invalid_field_key","err_ppwr_supplier_request_not_packaging_manufacturer","err_ppwr_supplier_request_pending","err_ppwr_supplier_request_not_pending","err_ppwr_field_not_requested","err_ppwr_document_limit_reached","err_ppwr_generation_not_packaging_manufacturer","err_ppwr_declaration_incomplete","err_ppwr_invalid_signatory","err_ppwr_invitation_send_failed","err_ppwr_supplier_link_placeholder_missing","err_ppwr_supplier_subject_missing","err_ppwr_supplier_email_missing","err_ppwr_verification_code_limit","err_ppwr_verification_code_send_failed","err_ppwr_email_not_verified","err_ppwr_attestation_required","err_ppwr_document_not_deletable","err_proof_document_limit","err_proof_size_limit","err_supplier_address_country_only","err_supplier_address_ignored","err_supplier_address_not_found","err_transport_distance_unresolved","err_transport_modality_duplicate","err_transport_modality_invalid","err_transport_route_unavailable","err_transport_missing_coordinates","err_transport_no_route","err_transport_same_address","err_transport_route_in_use","err_transport_route_name_exists","err_transport_route_invalid_polyline","err_transport_route_source_ambiguous","err_transport_route_no_materials_selected","err_transport_route_wrong_lane","err_transport_route_missing_source","err_reauthentication_required","err_two_factor_required","err_entitlement_limit_reached","err_program_operator_not_entitled","err_product_category_not_entitled","err_product_category_paused","err_translation_package_required","err_epd_tier_required","err_prechain_category_not_publishable","err_self_upgrade_not_offered","err_self_upgrade_request_required","err_self_upgrade_limit_changed","err_self_upgrade_unavailable","err_self_upgrade_in_progress","err_self_upgrade_already_requested","err_self_upgrade_offer_changed","err_upgrade_approval_not_pending","err_translation_unavailable"],"isRequired":true,"uniqueKey":"err_code","typeLabel":"enum\u003cstring>"},"entitlement_limit":{"oneOf":[{"type":"object","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","required":["dimension","usage","limit"],"properties":{"dimension":{"type":"string","description":"The set may grow as more dimensions become enforced — treat an\nunrecognized value like the generic limit error.\n","enum":["users","plants","product_instances","published_epds"],"isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.dimension","typeLabel":"enum\u003cstring>"},"usage":{"type":"integer","description":"What the account currently uses in this dimension.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.usage","typeLabel":"integer"},"limit":{"type":"integer","description":"What the license allows.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.limit","typeLabel":"integer"}},"uniqueKey":"entitlement_limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","uniqueKey":"entitlement_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"entitlement_limit","typeLabel":"object | null"},"product_categories":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"product_categories.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.1","typeLabel":"null"}],"uniqueKey":"product_categories","typeLabel":"string[] | null"},"epd_category":{"oneOf":[{"type":"integer","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.0","typeLabel":"integer"},{"type":"null","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.1","typeLabel":"null"}],"uniqueKey":"epd_category","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"msg":"supplier product requires a supplier plant","err_code":"err_supplier_product_missing_supplier_plant","entitlement_limit":{"dimension":"users","usage":123,"limit":123},"product_categories":["\u003cstring>"],"epd_category":123}}},"exampleType":"generated"}},"exampleType":"generated"},"34596b9f-69c3-413e-a7c2-c852d8fd868c":{"description":"A valid key lacked the required permission, or targeted a resource outside\nits access.\n","content":{"application/json":{"schema":{"type":"object","required":["msg","err_code"],"properties":{"msg":{"type":"string","description":"Human-readable explanation, for logs and operators. Do not parse it.","example":"supplier product requires a supplier plant","isRequired":true,"uniqueKey":"msg","typeLabel":"string"},"err_code":{"type":"string","description":"Stable, machine-readable error code — branch on this, never on `msg`.\nThe set may grow over time; treat an unrecognized code as\nnon-retryable and surface it to an operator. The enum lists every\ncode the platform can emit; only a subset is reachable per\nendpoint — see [Errors](/errors) for the actionable catalog.\n\n`LcaRecomputeJob.err_code` reports failures from this same `err_*`\nnamespace. `LcaBlocker.err_code` does not — those values are a\nseparate, disjoint set.\n","example":"err_supplier_product_missing_supplier_plant","enum":["err_emigo_daily_limit_reached","err_not_defined","err_not_found","err_not_valid","err_not_authenticated","err_permission_denied","err_account_frozen","err_declaration_not_completed","err_declaration_not_regenerable","err_epd_document_already_exists","err_invalid_product_ids","err_generate_products_limit","err_plant_missing_product_category","err_plant_incomplete_address","err_plant_incomplete_company_fields","err_plant_categories_not_covering_processes","err_plant_categories_not_covering_active_products","err_plant_invalid_category_id","err_plant_invalid_balancing_authority","err_plant_balancing_authority_non_us","err_plant_custom_electricity_mix_not_allowed","err_plant_electricity_mix_mismatch","err_plant_negative_electricity_values","err_plant_electricity_without_mix","err_electricity_plant_production_mismatch","err_lca_mass_balance","err_lca_allocation_data_incomplete","err_lca_production_output_mismatch","err_process_output_below_linked_output","err_product_mass_larger_than_recipe_mass","err_product_category_not_allowed_at_plant","err_water_not_scoped_but_wastewater_is_scoped","err_more_wastewater_than_water","err_project_no_products","err_invalid_product_quantity","err_duplicate_product","err_product_missing_gwp_total","err_elementary_deactivated","err_product_missing_supplier","err_epd_unusable","err_epd_service","err_lca_update_not_queued","err_lca_export_not_ready","err_not_ready_for_epd","err_material_not_hazardous","err_material_no_limited_lifetime","err_invalid_lifetime_years","err_invalid_secondary_percentage_range","err_secondary_percentage_not_customizable","err_moisture_content_not_bio_based","err_invalid_moisture_content_range","err_declaration_not_exists","err_declaration_not_under_review","err_no_manufacturer","err_company_setup_required","err_account_setup_complete","err_wrong_email_domain","err_user_exists","err_inviter_email_not_found","err_composite_used_in_supplier_products","err_composite_name_exists","err_plant_io_invalid_field","err_plant_io_field_not_switchable","err_plant_io_value_not_scoped","err_field_is_plant_level","err_negative_io_value","err_invalid_packaging_material","err_plant_io_mixed_allocation_groups","err_inies_sworn_statement_exists","err_supplier_in_use","err_supplier_name_exists","err_supplier_plant_in_use","err_supplier_plant_name_exists","err_supplier_product_in_recipe","err_supplier_product_in_silo","err_supplier_product_scoped_as_packaging","err_supplier_product_declared_on_a_product","err_supplier_product_missing_supplier_plant","err_silo_in_use","err_silo_name_exists","err_elementary_unknown_matching","err_product_document_not_deletable","err_product_has_declarations","err_product_instance_in_recipe","err_product_instance_has_declarations","err_prechain_product_in_recipe","err_prechain_product_exists","err_prechain_product_not_main_product","err_ccf_exists","err_ccf_not_completed","err_external_id_exists","err_external_owner_invitation_exists","err_external_owner_invitation_not_editable","err_external_owner_invitation_not_withdrawable","err_idempotency_key_reused","err_idempotency_in_progress","err_bulk_upload_invalid_file","err_bulk_upload_duplicate_headers","err_bulk_upload_ambiguous_headers","err_bulk_upload_ambiguous_values","err_bulk_upload_ambiguous_header_language","err_bulk_upload_mixed_header_languages","err_bulk_upload_language_mismatch","err_bulk_upload_value_language_mismatch","err_bulk_upload_obsolete_template","err_bulk_upload_missing_translation","err_material_type_not_found","err_material_type_unvalidated","err_unvalidated_material_type_not_found","err_material_type_not_configured","err_unit_not_allowed_for_material","err_production_process_not_found","err_multiple_production_processes","err_process_plant_mismatch","err_material_process_incompatible","err_process_output_kind_change","err_production_process_required","err_composite_not_allowed_in_recipe","err_elementary_not_allowed_in_recipe","err_elementary_already_allowed_for_product","err_elementary_request_idempotency_conflict","err_prechain_circular_reference","err_product_type_no_recipe","err_product_mass_not_set","err_required_cell_empty","err_plant_not_found","err_plant_no_access","err_multiple_plants","err_product_already_exists","err_multiple_products","err_instance_material_type_mismatch","err_instance_unit_mismatch","err_instance_id_belongs_to_other","err_instance_id_differs_from_stored","err_duplicate_instance_id","err_instance_updated","err_bulk_change","err_bulk_unchanged","err_bulk_skipped_existing","err_instance_years_removed","err_annual_year_outside_stored_period","err_linked_product_type_mismatch","err_tech_spec_not_recognized","err_recipe_incomplete","err_annual_output_invalid","err_annual_economic_value_invalid","err_annual_output_year_required","err_annual_output_year_invalid","err_annual_output_year_duplicate","err_annual_output_year_outside_period","err_orphan_row","err_duplicate_tech_spec","err_empty_sheet","err_no_products","err_tech_spec_invalid_value","err_dtp_service","err_data_translation_wrong_step","err_data_translation_invalid_plant_mapping","err_data_translation_unresolved_reference","err_data_translation_incomplete","err_data_translation_material_not_available","err_data_translation_duplicate_supplier_name","err_recycled_content_proof_missing","err_ppwr_declaration_exists","err_ppwr_declaration_editable_exists","err_ppwr_declaration_frozen","err_ppwr_doc_number_unavailable","err_ppwr_variant_mass_invalid","err_ppwr_variant_dimension_invalid","err_ppwr_variant_material_repeated","err_ppwr_variant_material_type","err_ppwr_invalid_field_key","err_ppwr_supplier_request_not_packaging_manufacturer","err_ppwr_supplier_request_pending","err_ppwr_supplier_request_not_pending","err_ppwr_field_not_requested","err_ppwr_document_limit_reached","err_ppwr_generation_not_packaging_manufacturer","err_ppwr_declaration_incomplete","err_ppwr_invalid_signatory","err_ppwr_invitation_send_failed","err_ppwr_supplier_link_placeholder_missing","err_ppwr_supplier_subject_missing","err_ppwr_supplier_email_missing","err_ppwr_verification_code_limit","err_ppwr_verification_code_send_failed","err_ppwr_email_not_verified","err_ppwr_attestation_required","err_ppwr_document_not_deletable","err_proof_document_limit","err_proof_size_limit","err_supplier_address_country_only","err_supplier_address_ignored","err_supplier_address_not_found","err_transport_distance_unresolved","err_transport_modality_duplicate","err_transport_modality_invalid","err_transport_route_unavailable","err_transport_missing_coordinates","err_transport_no_route","err_transport_same_address","err_transport_route_in_use","err_transport_route_name_exists","err_transport_route_invalid_polyline","err_transport_route_source_ambiguous","err_transport_route_no_materials_selected","err_transport_route_wrong_lane","err_transport_route_missing_source","err_reauthentication_required","err_two_factor_required","err_entitlement_limit_reached","err_program_operator_not_entitled","err_product_category_not_entitled","err_product_category_paused","err_translation_package_required","err_epd_tier_required","err_prechain_category_not_publishable","err_self_upgrade_not_offered","err_self_upgrade_request_required","err_self_upgrade_limit_changed","err_self_upgrade_unavailable","err_self_upgrade_in_progress","err_self_upgrade_already_requested","err_self_upgrade_offer_changed","err_upgrade_approval_not_pending","err_translation_unavailable"],"isRequired":true,"uniqueKey":"err_code","typeLabel":"enum\u003cstring>"},"entitlement_limit":{"oneOf":[{"type":"object","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","required":["dimension","usage","limit"],"properties":{"dimension":{"type":"string","description":"The set may grow as more dimensions become enforced — treat an\nunrecognized value like the generic limit error.\n","enum":["users","plants","product_instances","published_epds"],"isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.dimension","typeLabel":"enum\u003cstring>"},"usage":{"type":"integer","description":"What the account currently uses in this dimension.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.usage","typeLabel":"integer"},"limit":{"type":"integer","description":"What the license allows.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.limit","typeLabel":"integer"}},"uniqueKey":"entitlement_limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","uniqueKey":"entitlement_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"entitlement_limit","typeLabel":"object | null"},"product_categories":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"product_categories.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.1","typeLabel":"null"}],"uniqueKey":"product_categories","typeLabel":"string[] | null"},"epd_category":{"oneOf":[{"type":"integer","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.0","typeLabel":"integer"},{"type":"null","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.1","typeLabel":"null"}],"uniqueKey":"epd_category","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"msg":"supplier product requires a supplier plant","err_code":"err_supplier_product_missing_supplier_plant","entitlement_limit":{"dimension":"users","usage":123,"limit":123},"product_categories":["\u003cstring>"],"epd_category":123}}},"exampleType":"generated"}},"exampleType":"generated"},"d6a9c7d2-e1d0-4a84-8e08-7108decebf3b":{"description":"Supplier product not found.","content":{"application/json":{"schema":{"type":"object","required":["msg","err_code"],"properties":{"msg":{"type":"string","description":"Human-readable explanation, for logs and operators. Do not parse it.","example":"supplier product requires a supplier plant","isRequired":true,"uniqueKey":"msg","typeLabel":"string"},"err_code":{"type":"string","description":"Stable, machine-readable error code — branch on this, never on `msg`.\nThe set may grow over time; treat an unrecognized code as\nnon-retryable and surface it to an operator. The enum lists every\ncode the platform can emit; only a subset is reachable per\nendpoint — see [Errors](/errors) for the actionable catalog.\n\n`LcaRecomputeJob.err_code` reports failures from this same `err_*`\nnamespace. `LcaBlocker.err_code` does not — those values are a\nseparate, disjoint set.\n","example":"err_supplier_product_missing_supplier_plant","enum":["err_emigo_daily_limit_reached","err_not_defined","err_not_found","err_not_valid","err_not_authenticated","err_permission_denied","err_account_frozen","err_declaration_not_completed","err_declaration_not_regenerable","err_epd_document_already_exists","err_invalid_product_ids","err_generate_products_limit","err_plant_missing_product_category","err_plant_incomplete_address","err_plant_incomplete_company_fields","err_plant_categories_not_covering_processes","err_plant_categories_not_covering_active_products","err_plant_invalid_category_id","err_plant_invalid_balancing_authority","err_plant_balancing_authority_non_us","err_plant_custom_electricity_mix_not_allowed","err_plant_electricity_mix_mismatch","err_plant_negative_electricity_values","err_plant_electricity_without_mix","err_electricity_plant_production_mismatch","err_lca_mass_balance","err_lca_allocation_data_incomplete","err_lca_production_output_mismatch","err_process_output_below_linked_output","err_product_mass_larger_than_recipe_mass","err_product_category_not_allowed_at_plant","err_water_not_scoped_but_wastewater_is_scoped","err_more_wastewater_than_water","err_project_no_products","err_invalid_product_quantity","err_duplicate_product","err_product_missing_gwp_total","err_elementary_deactivated","err_product_missing_supplier","err_epd_unusable","err_epd_service","err_lca_update_not_queued","err_lca_export_not_ready","err_not_ready_for_epd","err_material_not_hazardous","err_material_no_limited_lifetime","err_invalid_lifetime_years","err_invalid_secondary_percentage_range","err_secondary_percentage_not_customizable","err_moisture_content_not_bio_based","err_invalid_moisture_content_range","err_declaration_not_exists","err_declaration_not_under_review","err_no_manufacturer","err_company_setup_required","err_account_setup_complete","err_wrong_email_domain","err_user_exists","err_inviter_email_not_found","err_composite_used_in_supplier_products","err_composite_name_exists","err_plant_io_invalid_field","err_plant_io_field_not_switchable","err_plant_io_value_not_scoped","err_field_is_plant_level","err_negative_io_value","err_invalid_packaging_material","err_plant_io_mixed_allocation_groups","err_inies_sworn_statement_exists","err_supplier_in_use","err_supplier_name_exists","err_supplier_plant_in_use","err_supplier_plant_name_exists","err_supplier_product_in_recipe","err_supplier_product_in_silo","err_supplier_product_scoped_as_packaging","err_supplier_product_declared_on_a_product","err_supplier_product_missing_supplier_plant","err_silo_in_use","err_silo_name_exists","err_elementary_unknown_matching","err_product_document_not_deletable","err_product_has_declarations","err_product_instance_in_recipe","err_product_instance_has_declarations","err_prechain_product_in_recipe","err_prechain_product_exists","err_prechain_product_not_main_product","err_ccf_exists","err_ccf_not_completed","err_external_id_exists","err_external_owner_invitation_exists","err_external_owner_invitation_not_editable","err_external_owner_invitation_not_withdrawable","err_idempotency_key_reused","err_idempotency_in_progress","err_bulk_upload_invalid_file","err_bulk_upload_duplicate_headers","err_bulk_upload_ambiguous_headers","err_bulk_upload_ambiguous_values","err_bulk_upload_ambiguous_header_language","err_bulk_upload_mixed_header_languages","err_bulk_upload_language_mismatch","err_bulk_upload_value_language_mismatch","err_bulk_upload_obsolete_template","err_bulk_upload_missing_translation","err_material_type_not_found","err_material_type_unvalidated","err_unvalidated_material_type_not_found","err_material_type_not_configured","err_unit_not_allowed_for_material","err_production_process_not_found","err_multiple_production_processes","err_process_plant_mismatch","err_material_process_incompatible","err_process_output_kind_change","err_production_process_required","err_composite_not_allowed_in_recipe","err_elementary_not_allowed_in_recipe","err_elementary_already_allowed_for_product","err_elementary_request_idempotency_conflict","err_prechain_circular_reference","err_product_type_no_recipe","err_product_mass_not_set","err_required_cell_empty","err_plant_not_found","err_plant_no_access","err_multiple_plants","err_product_already_exists","err_multiple_products","err_instance_material_type_mismatch","err_instance_unit_mismatch","err_instance_id_belongs_to_other","err_instance_id_differs_from_stored","err_duplicate_instance_id","err_instance_updated","err_bulk_change","err_bulk_unchanged","err_bulk_skipped_existing","err_instance_years_removed","err_annual_year_outside_stored_period","err_linked_product_type_mismatch","err_tech_spec_not_recognized","err_recipe_incomplete","err_annual_output_invalid","err_annual_economic_value_invalid","err_annual_output_year_required","err_annual_output_year_invalid","err_annual_output_year_duplicate","err_annual_output_year_outside_period","err_orphan_row","err_duplicate_tech_spec","err_empty_sheet","err_no_products","err_tech_spec_invalid_value","err_dtp_service","err_data_translation_wrong_step","err_data_translation_invalid_plant_mapping","err_data_translation_unresolved_reference","err_data_translation_incomplete","err_data_translation_material_not_available","err_data_translation_duplicate_supplier_name","err_recycled_content_proof_missing","err_ppwr_declaration_exists","err_ppwr_declaration_editable_exists","err_ppwr_declaration_frozen","err_ppwr_doc_number_unavailable","err_ppwr_variant_mass_invalid","err_ppwr_variant_dimension_invalid","err_ppwr_variant_material_repeated","err_ppwr_variant_material_type","err_ppwr_invalid_field_key","err_ppwr_supplier_request_not_packaging_manufacturer","err_ppwr_supplier_request_pending","err_ppwr_supplier_request_not_pending","err_ppwr_field_not_requested","err_ppwr_document_limit_reached","err_ppwr_generation_not_packaging_manufacturer","err_ppwr_declaration_incomplete","err_ppwr_invalid_signatory","err_ppwr_invitation_send_failed","err_ppwr_supplier_link_placeholder_missing","err_ppwr_supplier_subject_missing","err_ppwr_supplier_email_missing","err_ppwr_verification_code_limit","err_ppwr_verification_code_send_failed","err_ppwr_email_not_verified","err_ppwr_attestation_required","err_ppwr_document_not_deletable","err_proof_document_limit","err_proof_size_limit","err_supplier_address_country_only","err_supplier_address_ignored","err_supplier_address_not_found","err_transport_distance_unresolved","err_transport_modality_duplicate","err_transport_modality_invalid","err_transport_route_unavailable","err_transport_missing_coordinates","err_transport_no_route","err_transport_same_address","err_transport_route_in_use","err_transport_route_name_exists","err_transport_route_invalid_polyline","err_transport_route_source_ambiguous","err_transport_route_no_materials_selected","err_transport_route_wrong_lane","err_transport_route_missing_source","err_reauthentication_required","err_two_factor_required","err_entitlement_limit_reached","err_program_operator_not_entitled","err_product_category_not_entitled","err_product_category_paused","err_translation_package_required","err_epd_tier_required","err_prechain_category_not_publishable","err_self_upgrade_not_offered","err_self_upgrade_request_required","err_self_upgrade_limit_changed","err_self_upgrade_unavailable","err_self_upgrade_in_progress","err_self_upgrade_already_requested","err_self_upgrade_offer_changed","err_upgrade_approval_not_pending","err_translation_unavailable"],"isRequired":true,"uniqueKey":"err_code","typeLabel":"enum\u003cstring>"},"entitlement_limit":{"oneOf":[{"type":"object","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","required":["dimension","usage","limit"],"properties":{"dimension":{"type":"string","description":"The set may grow as more dimensions become enforced — treat an\nunrecognized value like the generic limit error.\n","enum":["users","plants","product_instances","published_epds"],"isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.dimension","typeLabel":"enum\u003cstring>"},"usage":{"type":"integer","description":"What the account currently uses in this dimension.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.usage","typeLabel":"integer"},"limit":{"type":"integer","description":"What the license allows.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.limit","typeLabel":"integer"}},"uniqueKey":"entitlement_limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","uniqueKey":"entitlement_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"entitlement_limit","typeLabel":"object | null"},"product_categories":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"product_categories.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.1","typeLabel":"null"}],"uniqueKey":"product_categories","typeLabel":"string[] | null"},"epd_category":{"oneOf":[{"type":"integer","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.0","typeLabel":"integer"},{"type":"null","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.1","typeLabel":"null"}],"uniqueKey":"epd_category","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"msg":"supplier product requires a supplier plant","err_code":"err_supplier_product_missing_supplier_plant","entitlement_limit":{"dimension":"users","usage":123,"limit":123},"product_categories":["\u003cstring>"],"epd_category":123}}},"exampleType":"generated"}},"exampleType":"generated"},"e2a9f563-7a68-45bf-aa32-b6166dbc243c":{"description":"The `external_id` is already in use by another active supplier product.","content":{"application/json":{"schema":{"type":"object","required":["msg","err_code"],"properties":{"msg":{"type":"string","description":"Human-readable explanation, for logs and operators. Do not parse it.","example":"supplier product requires a supplier plant","isRequired":true,"uniqueKey":"msg","typeLabel":"string"},"err_code":{"type":"string","description":"Stable, machine-readable error code — branch on this, never on `msg`.\nThe set may grow over time; treat an unrecognized code as\nnon-retryable and surface it to an operator. The enum lists every\ncode the platform can emit; only a subset is reachable per\nendpoint — see [Errors](/errors) for the actionable catalog.\n\n`LcaRecomputeJob.err_code` reports failures from this same `err_*`\nnamespace. `LcaBlocker.err_code` does not — those values are a\nseparate, disjoint set.\n","example":"err_supplier_product_missing_supplier_plant","enum":["err_emigo_daily_limit_reached","err_not_defined","err_not_found","err_not_valid","err_not_authenticated","err_permission_denied","err_account_frozen","err_declaration_not_completed","err_declaration_not_regenerable","err_epd_document_already_exists","err_invalid_product_ids","err_generate_products_limit","err_plant_missing_product_category","err_plant_incomplete_address","err_plant_incomplete_company_fields","err_plant_categories_not_covering_processes","err_plant_categories_not_covering_active_products","err_plant_invalid_category_id","err_plant_invalid_balancing_authority","err_plant_balancing_authority_non_us","err_plant_custom_electricity_mix_not_allowed","err_plant_electricity_mix_mismatch","err_plant_negative_electricity_values","err_plant_electricity_without_mix","err_electricity_plant_production_mismatch","err_lca_mass_balance","err_lca_allocation_data_incomplete","err_lca_production_output_mismatch","err_process_output_below_linked_output","err_product_mass_larger_than_recipe_mass","err_product_category_not_allowed_at_plant","err_water_not_scoped_but_wastewater_is_scoped","err_more_wastewater_than_water","err_project_no_products","err_invalid_product_quantity","err_duplicate_product","err_product_missing_gwp_total","err_elementary_deactivated","err_product_missing_supplier","err_epd_unusable","err_epd_service","err_lca_update_not_queued","err_lca_export_not_ready","err_not_ready_for_epd","err_material_not_hazardous","err_material_no_limited_lifetime","err_invalid_lifetime_years","err_invalid_secondary_percentage_range","err_secondary_percentage_not_customizable","err_moisture_content_not_bio_based","err_invalid_moisture_content_range","err_declaration_not_exists","err_declaration_not_under_review","err_no_manufacturer","err_company_setup_required","err_account_setup_complete","err_wrong_email_domain","err_user_exists","err_inviter_email_not_found","err_composite_used_in_supplier_products","err_composite_name_exists","err_plant_io_invalid_field","err_plant_io_field_not_switchable","err_plant_io_value_not_scoped","err_field_is_plant_level","err_negative_io_value","err_invalid_packaging_material","err_plant_io_mixed_allocation_groups","err_inies_sworn_statement_exists","err_supplier_in_use","err_supplier_name_exists","err_supplier_plant_in_use","err_supplier_plant_name_exists","err_supplier_product_in_recipe","err_supplier_product_in_silo","err_supplier_product_scoped_as_packaging","err_supplier_product_declared_on_a_product","err_supplier_product_missing_supplier_plant","err_silo_in_use","err_silo_name_exists","err_elementary_unknown_matching","err_product_document_not_deletable","err_product_has_declarations","err_product_instance_in_recipe","err_product_instance_has_declarations","err_prechain_product_in_recipe","err_prechain_product_exists","err_prechain_product_not_main_product","err_ccf_exists","err_ccf_not_completed","err_external_id_exists","err_external_owner_invitation_exists","err_external_owner_invitation_not_editable","err_external_owner_invitation_not_withdrawable","err_idempotency_key_reused","err_idempotency_in_progress","err_bulk_upload_invalid_file","err_bulk_upload_duplicate_headers","err_bulk_upload_ambiguous_headers","err_bulk_upload_ambiguous_values","err_bulk_upload_ambiguous_header_language","err_bulk_upload_mixed_header_languages","err_bulk_upload_language_mismatch","err_bulk_upload_value_language_mismatch","err_bulk_upload_obsolete_template","err_bulk_upload_missing_translation","err_material_type_not_found","err_material_type_unvalidated","err_unvalidated_material_type_not_found","err_material_type_not_configured","err_unit_not_allowed_for_material","err_production_process_not_found","err_multiple_production_processes","err_process_plant_mismatch","err_material_process_incompatible","err_process_output_kind_change","err_production_process_required","err_composite_not_allowed_in_recipe","err_elementary_not_allowed_in_recipe","err_elementary_already_allowed_for_product","err_elementary_request_idempotency_conflict","err_prechain_circular_reference","err_product_type_no_recipe","err_product_mass_not_set","err_required_cell_empty","err_plant_not_found","err_plant_no_access","err_multiple_plants","err_product_already_exists","err_multiple_products","err_instance_material_type_mismatch","err_instance_unit_mismatch","err_instance_id_belongs_to_other","err_instance_id_differs_from_stored","err_duplicate_instance_id","err_instance_updated","err_bulk_change","err_bulk_unchanged","err_bulk_skipped_existing","err_instance_years_removed","err_annual_year_outside_stored_period","err_linked_product_type_mismatch","err_tech_spec_not_recognized","err_recipe_incomplete","err_annual_output_invalid","err_annual_economic_value_invalid","err_annual_output_year_required","err_annual_output_year_invalid","err_annual_output_year_duplicate","err_annual_output_year_outside_period","err_orphan_row","err_duplicate_tech_spec","err_empty_sheet","err_no_products","err_tech_spec_invalid_value","err_dtp_service","err_data_translation_wrong_step","err_data_translation_invalid_plant_mapping","err_data_translation_unresolved_reference","err_data_translation_incomplete","err_data_translation_material_not_available","err_data_translation_duplicate_supplier_name","err_recycled_content_proof_missing","err_ppwr_declaration_exists","err_ppwr_declaration_editable_exists","err_ppwr_declaration_frozen","err_ppwr_doc_number_unavailable","err_ppwr_variant_mass_invalid","err_ppwr_variant_dimension_invalid","err_ppwr_variant_material_repeated","err_ppwr_variant_material_type","err_ppwr_invalid_field_key","err_ppwr_supplier_request_not_packaging_manufacturer","err_ppwr_supplier_request_pending","err_ppwr_supplier_request_not_pending","err_ppwr_field_not_requested","err_ppwr_document_limit_reached","err_ppwr_generation_not_packaging_manufacturer","err_ppwr_declaration_incomplete","err_ppwr_invalid_signatory","err_ppwr_invitation_send_failed","err_ppwr_supplier_link_placeholder_missing","err_ppwr_supplier_subject_missing","err_ppwr_supplier_email_missing","err_ppwr_verification_code_limit","err_ppwr_verification_code_send_failed","err_ppwr_email_not_verified","err_ppwr_attestation_required","err_ppwr_document_not_deletable","err_proof_document_limit","err_proof_size_limit","err_supplier_address_country_only","err_supplier_address_ignored","err_supplier_address_not_found","err_transport_distance_unresolved","err_transport_modality_duplicate","err_transport_modality_invalid","err_transport_route_unavailable","err_transport_missing_coordinates","err_transport_no_route","err_transport_same_address","err_transport_route_in_use","err_transport_route_name_exists","err_transport_route_invalid_polyline","err_transport_route_source_ambiguous","err_transport_route_no_materials_selected","err_transport_route_wrong_lane","err_transport_route_missing_source","err_reauthentication_required","err_two_factor_required","err_entitlement_limit_reached","err_program_operator_not_entitled","err_product_category_not_entitled","err_product_category_paused","err_translation_package_required","err_epd_tier_required","err_prechain_category_not_publishable","err_self_upgrade_not_offered","err_self_upgrade_request_required","err_self_upgrade_limit_changed","err_self_upgrade_unavailable","err_self_upgrade_in_progress","err_self_upgrade_already_requested","err_self_upgrade_offer_changed","err_upgrade_approval_not_pending","err_translation_unavailable"],"isRequired":true,"uniqueKey":"err_code","typeLabel":"enum\u003cstring>"},"entitlement_limit":{"oneOf":[{"type":"object","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","required":["dimension","usage","limit"],"properties":{"dimension":{"type":"string","description":"The set may grow as more dimensions become enforced — treat an\nunrecognized value like the generic limit error.\n","enum":["users","plants","product_instances","published_epds"],"isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.dimension","typeLabel":"enum\u003cstring>"},"usage":{"type":"integer","description":"What the account currently uses in this dimension.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.usage","typeLabel":"integer"},"limit":{"type":"integer","description":"What the license allows.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.limit","typeLabel":"integer"}},"uniqueKey":"entitlement_limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","uniqueKey":"entitlement_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"entitlement_limit","typeLabel":"object | null"},"product_categories":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"product_categories.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.1","typeLabel":"null"}],"uniqueKey":"product_categories","typeLabel":"string[] | null"},"epd_category":{"oneOf":[{"type":"integer","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.0","typeLabel":"integer"},{"type":"null","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.1","typeLabel":"null"}],"uniqueKey":"epd_category","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"msg":"supplier product requires a supplier plant","err_code":"err_supplier_product_missing_supplier_plant","entitlement_limit":{"dimension":"users","usage":123,"limit":123},"product_categories":["\u003cstring>"],"epd_category":123}}},"exampleType":"generated"}},"exampleType":"generated"},"960c502e-285c-46d7-b17a-f89d1ecd91ae":{"description":"Validation error, including a malformed path `id`, a body `id` that\ndiffers from the path, a `supplier_plant_id` that does not resolve,\nor an attempt to change `plant_id` or `material_type`.\n","content":{"application/json":{"schema":{"type":"object","required":["msg","err_code"],"properties":{"msg":{"type":"string","description":"Human-readable explanation, for logs and operators. Do not parse it.","example":"supplier product requires a supplier plant","isRequired":true,"uniqueKey":"msg","typeLabel":"string"},"err_code":{"type":"string","description":"Stable, machine-readable error code — branch on this, never on `msg`.\nThe set may grow over time; treat an unrecognized code as\nnon-retryable and surface it to an operator. The enum lists every\ncode the platform can emit; only a subset is reachable per\nendpoint — see [Errors](/errors) for the actionable catalog.\n\n`LcaRecomputeJob.err_code` reports failures from this same `err_*`\nnamespace. `LcaBlocker.err_code` does not — those values are a\nseparate, disjoint set.\n","example":"err_supplier_product_missing_supplier_plant","enum":["err_emigo_daily_limit_reached","err_not_defined","err_not_found","err_not_valid","err_not_authenticated","err_permission_denied","err_account_frozen","err_declaration_not_completed","err_declaration_not_regenerable","err_epd_document_already_exists","err_invalid_product_ids","err_generate_products_limit","err_plant_missing_product_category","err_plant_incomplete_address","err_plant_incomplete_company_fields","err_plant_categories_not_covering_processes","err_plant_categories_not_covering_active_products","err_plant_invalid_category_id","err_plant_invalid_balancing_authority","err_plant_balancing_authority_non_us","err_plant_custom_electricity_mix_not_allowed","err_plant_electricity_mix_mismatch","err_plant_negative_electricity_values","err_plant_electricity_without_mix","err_electricity_plant_production_mismatch","err_lca_mass_balance","err_lca_allocation_data_incomplete","err_lca_production_output_mismatch","err_process_output_below_linked_output","err_product_mass_larger_than_recipe_mass","err_product_category_not_allowed_at_plant","err_water_not_scoped_but_wastewater_is_scoped","err_more_wastewater_than_water","err_project_no_products","err_invalid_product_quantity","err_duplicate_product","err_product_missing_gwp_total","err_elementary_deactivated","err_product_missing_supplier","err_epd_unusable","err_epd_service","err_lca_update_not_queued","err_lca_export_not_ready","err_not_ready_for_epd","err_material_not_hazardous","err_material_no_limited_lifetime","err_invalid_lifetime_years","err_invalid_secondary_percentage_range","err_secondary_percentage_not_customizable","err_moisture_content_not_bio_based","err_invalid_moisture_content_range","err_declaration_not_exists","err_declaration_not_under_review","err_no_manufacturer","err_company_setup_required","err_account_setup_complete","err_wrong_email_domain","err_user_exists","err_inviter_email_not_found","err_composite_used_in_supplier_products","err_composite_name_exists","err_plant_io_invalid_field","err_plant_io_field_not_switchable","err_plant_io_value_not_scoped","err_field_is_plant_level","err_negative_io_value","err_invalid_packaging_material","err_plant_io_mixed_allocation_groups","err_inies_sworn_statement_exists","err_supplier_in_use","err_supplier_name_exists","err_supplier_plant_in_use","err_supplier_plant_name_exists","err_supplier_product_in_recipe","err_supplier_product_in_silo","err_supplier_product_scoped_as_packaging","err_supplier_product_declared_on_a_product","err_supplier_product_missing_supplier_plant","err_silo_in_use","err_silo_name_exists","err_elementary_unknown_matching","err_product_document_not_deletable","err_product_has_declarations","err_product_instance_in_recipe","err_product_instance_has_declarations","err_prechain_product_in_recipe","err_prechain_product_exists","err_prechain_product_not_main_product","err_ccf_exists","err_ccf_not_completed","err_external_id_exists","err_external_owner_invitation_exists","err_external_owner_invitation_not_editable","err_external_owner_invitation_not_withdrawable","err_idempotency_key_reused","err_idempotency_in_progress","err_bulk_upload_invalid_file","err_bulk_upload_duplicate_headers","err_bulk_upload_ambiguous_headers","err_bulk_upload_ambiguous_values","err_bulk_upload_ambiguous_header_language","err_bulk_upload_mixed_header_languages","err_bulk_upload_language_mismatch","err_bulk_upload_value_language_mismatch","err_bulk_upload_obsolete_template","err_bulk_upload_missing_translation","err_material_type_not_found","err_material_type_unvalidated","err_unvalidated_material_type_not_found","err_material_type_not_configured","err_unit_not_allowed_for_material","err_production_process_not_found","err_multiple_production_processes","err_process_plant_mismatch","err_material_process_incompatible","err_process_output_kind_change","err_production_process_required","err_composite_not_allowed_in_recipe","err_elementary_not_allowed_in_recipe","err_elementary_already_allowed_for_product","err_elementary_request_idempotency_conflict","err_prechain_circular_reference","err_product_type_no_recipe","err_product_mass_not_set","err_required_cell_empty","err_plant_not_found","err_plant_no_access","err_multiple_plants","err_product_already_exists","err_multiple_products","err_instance_material_type_mismatch","err_instance_unit_mismatch","err_instance_id_belongs_to_other","err_instance_id_differs_from_stored","err_duplicate_instance_id","err_instance_updated","err_bulk_change","err_bulk_unchanged","err_bulk_skipped_existing","err_instance_years_removed","err_annual_year_outside_stored_period","err_linked_product_type_mismatch","err_tech_spec_not_recognized","err_recipe_incomplete","err_annual_output_invalid","err_annual_economic_value_invalid","err_annual_output_year_required","err_annual_output_year_invalid","err_annual_output_year_duplicate","err_annual_output_year_outside_period","err_orphan_row","err_duplicate_tech_spec","err_empty_sheet","err_no_products","err_tech_spec_invalid_value","err_dtp_service","err_data_translation_wrong_step","err_data_translation_invalid_plant_mapping","err_data_translation_unresolved_reference","err_data_translation_incomplete","err_data_translation_material_not_available","err_data_translation_duplicate_supplier_name","err_recycled_content_proof_missing","err_ppwr_declaration_exists","err_ppwr_declaration_editable_exists","err_ppwr_declaration_frozen","err_ppwr_doc_number_unavailable","err_ppwr_variant_mass_invalid","err_ppwr_variant_dimension_invalid","err_ppwr_variant_material_repeated","err_ppwr_variant_material_type","err_ppwr_invalid_field_key","err_ppwr_supplier_request_not_packaging_manufacturer","err_ppwr_supplier_request_pending","err_ppwr_supplier_request_not_pending","err_ppwr_field_not_requested","err_ppwr_document_limit_reached","err_ppwr_generation_not_packaging_manufacturer","err_ppwr_declaration_incomplete","err_ppwr_invalid_signatory","err_ppwr_invitation_send_failed","err_ppwr_supplier_link_placeholder_missing","err_ppwr_supplier_subject_missing","err_ppwr_supplier_email_missing","err_ppwr_verification_code_limit","err_ppwr_verification_code_send_failed","err_ppwr_email_not_verified","err_ppwr_attestation_required","err_ppwr_document_not_deletable","err_proof_document_limit","err_proof_size_limit","err_supplier_address_country_only","err_supplier_address_ignored","err_supplier_address_not_found","err_transport_distance_unresolved","err_transport_modality_duplicate","err_transport_modality_invalid","err_transport_route_unavailable","err_transport_missing_coordinates","err_transport_no_route","err_transport_same_address","err_transport_route_in_use","err_transport_route_name_exists","err_transport_route_invalid_polyline","err_transport_route_source_ambiguous","err_transport_route_no_materials_selected","err_transport_route_wrong_lane","err_transport_route_missing_source","err_reauthentication_required","err_two_factor_required","err_entitlement_limit_reached","err_program_operator_not_entitled","err_product_category_not_entitled","err_product_category_paused","err_translation_package_required","err_epd_tier_required","err_prechain_category_not_publishable","err_self_upgrade_not_offered","err_self_upgrade_request_required","err_self_upgrade_limit_changed","err_self_upgrade_unavailable","err_self_upgrade_in_progress","err_self_upgrade_already_requested","err_self_upgrade_offer_changed","err_upgrade_approval_not_pending","err_translation_unavailable"],"isRequired":true,"uniqueKey":"err_code","typeLabel":"enum\u003cstring>"},"entitlement_limit":{"oneOf":[{"type":"object","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","required":["dimension","usage","limit"],"properties":{"dimension":{"type":"string","description":"The set may grow as more dimensions become enforced — treat an\nunrecognized value like the generic limit error.\n","enum":["users","plants","product_instances","published_epds"],"isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.dimension","typeLabel":"enum\u003cstring>"},"usage":{"type":"integer","description":"What the account currently uses in this dimension.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.usage","typeLabel":"integer"},"limit":{"type":"integer","description":"What the license allows.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.limit","typeLabel":"integer"}},"uniqueKey":"entitlement_limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","uniqueKey":"entitlement_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"entitlement_limit","typeLabel":"object | null"},"product_categories":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"product_categories.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.1","typeLabel":"null"}],"uniqueKey":"product_categories","typeLabel":"string[] | null"},"epd_category":{"oneOf":[{"type":"integer","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.0","typeLabel":"integer"},{"type":"null","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.1","typeLabel":"null"}],"uniqueKey":"epd_category","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"msg":"supplier product requires a supplier plant","err_code":"err_supplier_product_missing_supplier_plant","entitlement_limit":{"dimension":"users","usage":123,"limit":123},"product_categories":["\u003cstring>"],"epd_category":123}}},"exampleType":"generated"}},"exampleType":"generated"},"33c2b8ad-615d-475c-a6a5-1e087304f9bc":{"description":"An unexpected server error occurred. Surface it to an operator.","content":{"application/json":{"schema":{"type":"object","required":["msg","err_code"],"properties":{"msg":{"type":"string","description":"Human-readable explanation, for logs and operators. Do not parse it.","example":"supplier product requires a supplier plant","isRequired":true,"uniqueKey":"msg","typeLabel":"string"},"err_code":{"type":"string","description":"Stable, machine-readable error code — branch on this, never on `msg`.\nThe set may grow over time; treat an unrecognized code as\nnon-retryable and surface it to an operator. The enum lists every\ncode the platform can emit; only a subset is reachable per\nendpoint — see [Errors](/errors) for the actionable catalog.\n\n`LcaRecomputeJob.err_code` reports failures from this same `err_*`\nnamespace. `LcaBlocker.err_code` does not — those values are a\nseparate, disjoint set.\n","example":"err_supplier_product_missing_supplier_plant","enum":["err_emigo_daily_limit_reached","err_not_defined","err_not_found","err_not_valid","err_not_authenticated","err_permission_denied","err_account_frozen","err_declaration_not_completed","err_declaration_not_regenerable","err_epd_document_already_exists","err_invalid_product_ids","err_generate_products_limit","err_plant_missing_product_category","err_plant_incomplete_address","err_plant_incomplete_company_fields","err_plant_categories_not_covering_processes","err_plant_categories_not_covering_active_products","err_plant_invalid_category_id","err_plant_invalid_balancing_authority","err_plant_balancing_authority_non_us","err_plant_custom_electricity_mix_not_allowed","err_plant_electricity_mix_mismatch","err_plant_negative_electricity_values","err_plant_electricity_without_mix","err_electricity_plant_production_mismatch","err_lca_mass_balance","err_lca_allocation_data_incomplete","err_lca_production_output_mismatch","err_process_output_below_linked_output","err_product_mass_larger_than_recipe_mass","err_product_category_not_allowed_at_plant","err_water_not_scoped_but_wastewater_is_scoped","err_more_wastewater_than_water","err_project_no_products","err_invalid_product_quantity","err_duplicate_product","err_product_missing_gwp_total","err_elementary_deactivated","err_product_missing_supplier","err_epd_unusable","err_epd_service","err_lca_update_not_queued","err_lca_export_not_ready","err_not_ready_for_epd","err_material_not_hazardous","err_material_no_limited_lifetime","err_invalid_lifetime_years","err_invalid_secondary_percentage_range","err_secondary_percentage_not_customizable","err_moisture_content_not_bio_based","err_invalid_moisture_content_range","err_declaration_not_exists","err_declaration_not_under_review","err_no_manufacturer","err_company_setup_required","err_account_setup_complete","err_wrong_email_domain","err_user_exists","err_inviter_email_not_found","err_composite_used_in_supplier_products","err_composite_name_exists","err_plant_io_invalid_field","err_plant_io_field_not_switchable","err_plant_io_value_not_scoped","err_field_is_plant_level","err_negative_io_value","err_invalid_packaging_material","err_plant_io_mixed_allocation_groups","err_inies_sworn_statement_exists","err_supplier_in_use","err_supplier_name_exists","err_supplier_plant_in_use","err_supplier_plant_name_exists","err_supplier_product_in_recipe","err_supplier_product_in_silo","err_supplier_product_scoped_as_packaging","err_supplier_product_declared_on_a_product","err_supplier_product_missing_supplier_plant","err_silo_in_use","err_silo_name_exists","err_elementary_unknown_matching","err_product_document_not_deletable","err_product_has_declarations","err_product_instance_in_recipe","err_product_instance_has_declarations","err_prechain_product_in_recipe","err_prechain_product_exists","err_prechain_product_not_main_product","err_ccf_exists","err_ccf_not_completed","err_external_id_exists","err_external_owner_invitation_exists","err_external_owner_invitation_not_editable","err_external_owner_invitation_not_withdrawable","err_idempotency_key_reused","err_idempotency_in_progress","err_bulk_upload_invalid_file","err_bulk_upload_duplicate_headers","err_bulk_upload_ambiguous_headers","err_bulk_upload_ambiguous_values","err_bulk_upload_ambiguous_header_language","err_bulk_upload_mixed_header_languages","err_bulk_upload_language_mismatch","err_bulk_upload_value_language_mismatch","err_bulk_upload_obsolete_template","err_bulk_upload_missing_translation","err_material_type_not_found","err_material_type_unvalidated","err_unvalidated_material_type_not_found","err_material_type_not_configured","err_unit_not_allowed_for_material","err_production_process_not_found","err_multiple_production_processes","err_process_plant_mismatch","err_material_process_incompatible","err_process_output_kind_change","err_production_process_required","err_composite_not_allowed_in_recipe","err_elementary_not_allowed_in_recipe","err_elementary_already_allowed_for_product","err_elementary_request_idempotency_conflict","err_prechain_circular_reference","err_product_type_no_recipe","err_product_mass_not_set","err_required_cell_empty","err_plant_not_found","err_plant_no_access","err_multiple_plants","err_product_already_exists","err_multiple_products","err_instance_material_type_mismatch","err_instance_unit_mismatch","err_instance_id_belongs_to_other","err_instance_id_differs_from_stored","err_duplicate_instance_id","err_instance_updated","err_bulk_change","err_bulk_unchanged","err_bulk_skipped_existing","err_instance_years_removed","err_annual_year_outside_stored_period","err_linked_product_type_mismatch","err_tech_spec_not_recognized","err_recipe_incomplete","err_annual_output_invalid","err_annual_economic_value_invalid","err_annual_output_year_required","err_annual_output_year_invalid","err_annual_output_year_duplicate","err_annual_output_year_outside_period","err_orphan_row","err_duplicate_tech_spec","err_empty_sheet","err_no_products","err_tech_spec_invalid_value","err_dtp_service","err_data_translation_wrong_step","err_data_translation_invalid_plant_mapping","err_data_translation_unresolved_reference","err_data_translation_incomplete","err_data_translation_material_not_available","err_data_translation_duplicate_supplier_name","err_recycled_content_proof_missing","err_ppwr_declaration_exists","err_ppwr_declaration_editable_exists","err_ppwr_declaration_frozen","err_ppwr_doc_number_unavailable","err_ppwr_variant_mass_invalid","err_ppwr_variant_dimension_invalid","err_ppwr_variant_material_repeated","err_ppwr_variant_material_type","err_ppwr_invalid_field_key","err_ppwr_supplier_request_not_packaging_manufacturer","err_ppwr_supplier_request_pending","err_ppwr_supplier_request_not_pending","err_ppwr_field_not_requested","err_ppwr_document_limit_reached","err_ppwr_generation_not_packaging_manufacturer","err_ppwr_declaration_incomplete","err_ppwr_invalid_signatory","err_ppwr_invitation_send_failed","err_ppwr_supplier_link_placeholder_missing","err_ppwr_supplier_subject_missing","err_ppwr_supplier_email_missing","err_ppwr_verification_code_limit","err_ppwr_verification_code_send_failed","err_ppwr_email_not_verified","err_ppwr_attestation_required","err_ppwr_document_not_deletable","err_proof_document_limit","err_proof_size_limit","err_supplier_address_country_only","err_supplier_address_ignored","err_supplier_address_not_found","err_transport_distance_unresolved","err_transport_modality_duplicate","err_transport_modality_invalid","err_transport_route_unavailable","err_transport_missing_coordinates","err_transport_no_route","err_transport_same_address","err_transport_route_in_use","err_transport_route_name_exists","err_transport_route_invalid_polyline","err_transport_route_source_ambiguous","err_transport_route_no_materials_selected","err_transport_route_wrong_lane","err_transport_route_missing_source","err_reauthentication_required","err_two_factor_required","err_entitlement_limit_reached","err_program_operator_not_entitled","err_product_category_not_entitled","err_product_category_paused","err_translation_package_required","err_epd_tier_required","err_prechain_category_not_publishable","err_self_upgrade_not_offered","err_self_upgrade_request_required","err_self_upgrade_limit_changed","err_self_upgrade_unavailable","err_self_upgrade_in_progress","err_self_upgrade_already_requested","err_self_upgrade_offer_changed","err_upgrade_approval_not_pending","err_translation_unavailable"],"isRequired":true,"uniqueKey":"err_code","typeLabel":"enum\u003cstring>"},"entitlement_limit":{"oneOf":[{"type":"object","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","required":["dimension","usage","limit"],"properties":{"dimension":{"type":"string","description":"The set may grow as more dimensions become enforced — treat an\nunrecognized value like the generic limit error.\n","enum":["users","plants","product_instances","published_epds"],"isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.dimension","typeLabel":"enum\u003cstring>"},"usage":{"type":"integer","description":"What the account currently uses in this dimension.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.usage","typeLabel":"integer"},"limit":{"type":"integer","description":"What the license allows.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.limit","typeLabel":"integer"}},"uniqueKey":"entitlement_limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","uniqueKey":"entitlement_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"entitlement_limit","typeLabel":"object | null"},"product_categories":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"product_categories.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.1","typeLabel":"null"}],"uniqueKey":"product_categories","typeLabel":"string[] | null"},"epd_category":{"oneOf":[{"type":"integer","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.0","typeLabel":"integer"},{"type":"null","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.1","typeLabel":"null"}],"uniqueKey":"epd_category","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"msg":"supplier product requires a supplier plant","err_code":"err_supplier_product_missing_supplier_plant","entitlement_limit":{"dimension":"users","usage":123,"limit":123},"product_categories":["\u003cstring>"],"epd_category":123}}},"exampleType":"generated"}},"exampleType":"generated"},"469e2e93-1aed-4b88-814b-92e6f94fd945":{"description":"A transient upstream dependency failed. Retry with backoff.","content":{"application/json":{"schema":{"type":"object","required":["msg","err_code"],"properties":{"msg":{"type":"string","description":"Human-readable explanation, for logs and operators. Do not parse it.","example":"supplier product requires a supplier plant","isRequired":true,"uniqueKey":"msg","typeLabel":"string"},"err_code":{"type":"string","description":"Stable, machine-readable error code — branch on this, never on `msg`.\nThe set may grow over time; treat an unrecognized code as\nnon-retryable and surface it to an operator. The enum lists every\ncode the platform can emit; only a subset is reachable per\nendpoint — see [Errors](/errors) for the actionable catalog.\n\n`LcaRecomputeJob.err_code` reports failures from this same `err_*`\nnamespace. `LcaBlocker.err_code` does not — those values are a\nseparate, disjoint set.\n","example":"err_supplier_product_missing_supplier_plant","enum":["err_emigo_daily_limit_reached","err_not_defined","err_not_found","err_not_valid","err_not_authenticated","err_permission_denied","err_account_frozen","err_declaration_not_completed","err_declaration_not_regenerable","err_epd_document_already_exists","err_invalid_product_ids","err_generate_products_limit","err_plant_missing_product_category","err_plant_incomplete_address","err_plant_incomplete_company_fields","err_plant_categories_not_covering_processes","err_plant_categories_not_covering_active_products","err_plant_invalid_category_id","err_plant_invalid_balancing_authority","err_plant_balancing_authority_non_us","err_plant_custom_electricity_mix_not_allowed","err_plant_electricity_mix_mismatch","err_plant_negative_electricity_values","err_plant_electricity_without_mix","err_electricity_plant_production_mismatch","err_lca_mass_balance","err_lca_allocation_data_incomplete","err_lca_production_output_mismatch","err_process_output_below_linked_output","err_product_mass_larger_than_recipe_mass","err_product_category_not_allowed_at_plant","err_water_not_scoped_but_wastewater_is_scoped","err_more_wastewater_than_water","err_project_no_products","err_invalid_product_quantity","err_duplicate_product","err_product_missing_gwp_total","err_elementary_deactivated","err_product_missing_supplier","err_epd_unusable","err_epd_service","err_lca_update_not_queued","err_lca_export_not_ready","err_not_ready_for_epd","err_material_not_hazardous","err_material_no_limited_lifetime","err_invalid_lifetime_years","err_invalid_secondary_percentage_range","err_secondary_percentage_not_customizable","err_moisture_content_not_bio_based","err_invalid_moisture_content_range","err_declaration_not_exists","err_declaration_not_under_review","err_no_manufacturer","err_company_setup_required","err_account_setup_complete","err_wrong_email_domain","err_user_exists","err_inviter_email_not_found","err_composite_used_in_supplier_products","err_composite_name_exists","err_plant_io_invalid_field","err_plant_io_field_not_switchable","err_plant_io_value_not_scoped","err_field_is_plant_level","err_negative_io_value","err_invalid_packaging_material","err_plant_io_mixed_allocation_groups","err_inies_sworn_statement_exists","err_supplier_in_use","err_supplier_name_exists","err_supplier_plant_in_use","err_supplier_plant_name_exists","err_supplier_product_in_recipe","err_supplier_product_in_silo","err_supplier_product_scoped_as_packaging","err_supplier_product_declared_on_a_product","err_supplier_product_missing_supplier_plant","err_silo_in_use","err_silo_name_exists","err_elementary_unknown_matching","err_product_document_not_deletable","err_product_has_declarations","err_product_instance_in_recipe","err_product_instance_has_declarations","err_prechain_product_in_recipe","err_prechain_product_exists","err_prechain_product_not_main_product","err_ccf_exists","err_ccf_not_completed","err_external_id_exists","err_external_owner_invitation_exists","err_external_owner_invitation_not_editable","err_external_owner_invitation_not_withdrawable","err_idempotency_key_reused","err_idempotency_in_progress","err_bulk_upload_invalid_file","err_bulk_upload_duplicate_headers","err_bulk_upload_ambiguous_headers","err_bulk_upload_ambiguous_values","err_bulk_upload_ambiguous_header_language","err_bulk_upload_mixed_header_languages","err_bulk_upload_language_mismatch","err_bulk_upload_value_language_mismatch","err_bulk_upload_obsolete_template","err_bulk_upload_missing_translation","err_material_type_not_found","err_material_type_unvalidated","err_unvalidated_material_type_not_found","err_material_type_not_configured","err_unit_not_allowed_for_material","err_production_process_not_found","err_multiple_production_processes","err_process_plant_mismatch","err_material_process_incompatible","err_process_output_kind_change","err_production_process_required","err_composite_not_allowed_in_recipe","err_elementary_not_allowed_in_recipe","err_elementary_already_allowed_for_product","err_elementary_request_idempotency_conflict","err_prechain_circular_reference","err_product_type_no_recipe","err_product_mass_not_set","err_required_cell_empty","err_plant_not_found","err_plant_no_access","err_multiple_plants","err_product_already_exists","err_multiple_products","err_instance_material_type_mismatch","err_instance_unit_mismatch","err_instance_id_belongs_to_other","err_instance_id_differs_from_stored","err_duplicate_instance_id","err_instance_updated","err_bulk_change","err_bulk_unchanged","err_bulk_skipped_existing","err_instance_years_removed","err_annual_year_outside_stored_period","err_linked_product_type_mismatch","err_tech_spec_not_recognized","err_recipe_incomplete","err_annual_output_invalid","err_annual_economic_value_invalid","err_annual_output_year_required","err_annual_output_year_invalid","err_annual_output_year_duplicate","err_annual_output_year_outside_period","err_orphan_row","err_duplicate_tech_spec","err_empty_sheet","err_no_products","err_tech_spec_invalid_value","err_dtp_service","err_data_translation_wrong_step","err_data_translation_invalid_plant_mapping","err_data_translation_unresolved_reference","err_data_translation_incomplete","err_data_translation_material_not_available","err_data_translation_duplicate_supplier_name","err_recycled_content_proof_missing","err_ppwr_declaration_exists","err_ppwr_declaration_editable_exists","err_ppwr_declaration_frozen","err_ppwr_doc_number_unavailable","err_ppwr_variant_mass_invalid","err_ppwr_variant_dimension_invalid","err_ppwr_variant_material_repeated","err_ppwr_variant_material_type","err_ppwr_invalid_field_key","err_ppwr_supplier_request_not_packaging_manufacturer","err_ppwr_supplier_request_pending","err_ppwr_supplier_request_not_pending","err_ppwr_field_not_requested","err_ppwr_document_limit_reached","err_ppwr_generation_not_packaging_manufacturer","err_ppwr_declaration_incomplete","err_ppwr_invalid_signatory","err_ppwr_invitation_send_failed","err_ppwr_supplier_link_placeholder_missing","err_ppwr_supplier_subject_missing","err_ppwr_supplier_email_missing","err_ppwr_verification_code_limit","err_ppwr_verification_code_send_failed","err_ppwr_email_not_verified","err_ppwr_attestation_required","err_ppwr_document_not_deletable","err_proof_document_limit","err_proof_size_limit","err_supplier_address_country_only","err_supplier_address_ignored","err_supplier_address_not_found","err_transport_distance_unresolved","err_transport_modality_duplicate","err_transport_modality_invalid","err_transport_route_unavailable","err_transport_missing_coordinates","err_transport_no_route","err_transport_same_address","err_transport_route_in_use","err_transport_route_name_exists","err_transport_route_invalid_polyline","err_transport_route_source_ambiguous","err_transport_route_no_materials_selected","err_transport_route_wrong_lane","err_transport_route_missing_source","err_reauthentication_required","err_two_factor_required","err_entitlement_limit_reached","err_program_operator_not_entitled","err_product_category_not_entitled","err_product_category_paused","err_translation_package_required","err_epd_tier_required","err_prechain_category_not_publishable","err_self_upgrade_not_offered","err_self_upgrade_request_required","err_self_upgrade_limit_changed","err_self_upgrade_unavailable","err_self_upgrade_in_progress","err_self_upgrade_already_requested","err_self_upgrade_offer_changed","err_upgrade_approval_not_pending","err_translation_unavailable"],"isRequired":true,"uniqueKey":"err_code","typeLabel":"enum\u003cstring>"},"entitlement_limit":{"oneOf":[{"type":"object","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","required":["dimension","usage","limit"],"properties":{"dimension":{"type":"string","description":"The set may grow as more dimensions become enforced — treat an\nunrecognized value like the generic limit error.\n","enum":["users","plants","product_instances","published_epds"],"isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.dimension","typeLabel":"enum\u003cstring>"},"usage":{"type":"integer","description":"What the account currently uses in this dimension.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.usage","typeLabel":"integer"},"limit":{"type":"integer","description":"What the license allows.","isRequired":true,"uniqueKey":"entitlement_limit.oneOf.0.limit","typeLabel":"integer"}},"uniqueKey":"entitlement_limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"Structured context for `err_entitlement_limit_reached` — which\nlicensed dimension is exhausted and the numbers behind it.\nOmitted on every other error, so check for presence rather than\ncomparing against `null`.\n","uniqueKey":"entitlement_limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"entitlement_limit","typeLabel":"object | null"},"product_categories":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"product_categories.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"For `err_product_category_not_entitled` and\n`err_product_category_paused`: the names of the product\ncategories the license doesn't include, so a client can show\nthem. Omitted on every other error, so check for presence rather\nthan comparing against `null`.\n","uniqueKey":"product_categories.oneOf.1","typeLabel":"null"}],"uniqueKey":"product_categories","typeLabel":"string[] | null"},"epd_category":{"oneOf":[{"type":"integer","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.0","typeLabel":"integer"},{"type":"null","description":"For `err_epd_tier_required`: the pricing category (1-3) the EPD\nbelongs to, which has no EPD tier booked. Omitted on every other\nerror, so check for presence rather than comparing against `null`.\n","uniqueKey":"epd_category.oneOf.1","typeLabel":"null"}],"uniqueKey":"epd_category","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"msg":"supplier product requires a supplier plant","err_code":"err_supplier_product_missing_supplier_plant","entitlement_limit":{"dimension":"users","usage":123,"limit":123},"product_categories":["\u003cstring>"],"epd_category":123}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"2ab579d0-4684-4603-a7c2-22c2b153e15a":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Per-manufacturer API key in the `X-API-Key` header, format\n`emidat-{key_id}-{secret}` where `key_id` is a random public handle.\nIssued by an owner in the Emidat\ndashboard; carries its own permission scopes, optional plant\nrestrictions, and optional expiry. A revoked, expired, or unknown key\nreturns 401. See the Authentication guide for details.\n","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"a42dc66d-03f9-4209-983c-652cfedae855":{"url":"https://api.emidat.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Per-manufacturer API key in the `X-API-Key` header, format\n`emidat-{key_id}-{secret}` where `key_id` is a random public handle.\nIssued by an owner in the Emidat\ndashboard; carries its own permission scopes, optional plant\nrestrictions, and optional expiry. A revoked, expired, or unknown key\nreturns 401. See the Authentication guide for details.\n","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-API-Key","type":"string","description":"Per-manufacturer API key in the `X-API-Key` header, format\n`emidat-{key_id}-{secret}` where `key_id` is a random public handle.\nIssued by an owner in the Emidat\ndashboard; carries its own permission scopes, optional plant\nrestrictions, and optional expiry. A revoked, expired, or unknown key\nreturns 401. See the Authentication guide for details.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-API-Key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"emidat","siteName":"Emidat API","title":"Update supplier product - Emidat API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-07T13:15:43.085Z","originalFileLocation":"api-reference/supplier-products/update.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"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\u0026#x27;s own code succeeds unchanged, while a code held by another active supplier product returns 409. See External IDs.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Emidat API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update supplier product - Emidat API\">\u003cmeta data-mint-head property=\"og:description\" content=\"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\u0026#x27;s own code succeeds unchanged, while a code held by another active supplier product returns 409. See External IDs.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Emidat API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.emidat.com/api-reference/supplier-products/update\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://emidat.mintlify.app/_mintlify/api/og/v2?division=Supplier+Products\u0026amp;title=Update+supplier+product\u0026amp;description=Full+replacement+of+editable+fields.+Immutable+%60plant_id%60+and%0A%60material_type%60+may+be+omitted+or+echoed+from+the+current+resource.%0A%60external_id%60+is+replaced%3A+re-\u0026amp;theme=df6acf5ffa3b5355e046b553\u0026amp;signature=eb4a2cb9d5d7e638fb5132b563fbe3fc2697e58bfe1bc102d695c5e448721419\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update supplier product - Emidat API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"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\u0026#x27;s own code succeeds unchanged, while a code held by another active supplier product returns 409. See External IDs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://emidat.mintlify.app/_mintlify/api/og/v2?division=Supplier+Products\u0026amp;title=Update+supplier+product\u0026amp;description=Full+replacement+of+editable+fields.+Immutable+%60plant_id%60+and%0A%60material_type%60+may+be+omitted+or+echoed+from+the+current+resource.%0A%60external_id%60+is+replaced%3A+re-\u0026amp;theme=df6acf5ffa3b5355e046b553\u0026amp;signature=eb4a2cb9d5d7e638fb5132b563fbe3fc2697e58bfe1bc102d695c5e448721419\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/emidat/vlF3Kpxi6ZOBtvHL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Emidat API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2929CC\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.emidat.com/api-reference/supplier-products/update\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/supplier-products/update.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.emidat.com/#organization\",\"name\":\"Emidat API\",\"url\":\"https://docs.emidat.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/emidat/KhjEpdL-EUrz1H4P/logo/dark.svg?fit=max\u0026auto=format\u0026n=KhjEpdL-EUrz1H4P\u0026q=85\u0026s=35ce6850a5591a143fb8936475924122\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.emidat.com#website\",\"name\":\"Emidat API\",\"url\":\"https://docs.emidat.com\",\"publisher\":{\"@id\":\"https://docs.emidat.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.emidat.com/api-reference/supplier-products/update#webpage\",\"url\":\"https://docs.emidat.com/api-reference/supplier-products/update\",\"name\":\"Update supplier product\",\"description\":\"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.\",\"dateModified\":\"2026-08-07T13:15:43.085Z\",\"isPartOf\":{\"@id\":\"https://docs.emidat.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.emidat.com/api-reference/supplier-products/update#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.emidat.com/api-reference/supplier-products/update#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Supplier Products\",\"item\":\"https://docs.emidat.com/api-reference/supplier-products/list\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update supplier product\",\"item\":\"https://docs.emidat.com/api-reference/supplier-products/update\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.emidat.com/api-reference/supplier-products/update#apireference\",\"headline\":\"Update supplier product\",\"name\":\"Update supplier product\",\"description\":\"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.\",\"url\":\"https://docs.emidat.com/api-reference/supplier-products/update\",\"mainEntityOfPage\":{\"@id\":\"https://docs.emidat.com/api-reference/supplier-products/update#webpage\"},\"dateModified\":\"2026-08-07T13:15:43.085Z\",\"publisher\":{\"@id\":\"https://docs.emidat.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.emidat.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Emidat API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Emidat API","nav":{"global":null,"groups":[{"group":"Get Started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Authentication","href":"/authentication"},{"title":"Errors","href":"/errors"},{"title":"External IDs","href":"/external-ids"},{"title":"Pagination","href":"/pagination"}]},{"group":"Guides","pages":[{"title":"Using AI Agents","href":"/using-ai-agents"}]},{"group":"API Key","pages":[{"title":"Introspect API key","openapi":"GET /v2/me","href":"/api-reference/me/get"}]},{"group":"Plants","pages":[{"title":"List plants","openapi":"GET /v2/plants","href":"/api-reference/plants/list"},{"title":"Get plant","openapi":"GET /v2/plants/{id}","href":"/api-reference/plants/get"}]},{"group":"Production Processes","pages":[{"title":"List production processes","openapi":"GET /v2/production-processes","href":"/api-reference/production-processes/list"},{"title":"Get production process","openapi":"GET /v2/production-processes/{id}","href":"/api-reference/production-processes/get"}]},{"group":"Products","pages":[{"title":"List products","openapi":"GET /v2/products","href":"/api-reference/products/list"},{"title":"Get product","openapi":"GET /v2/products/{id}","href":"/api-reference/products/get"}]},{"group":"Product Instances","pages":[{"title":"List product instances","openapi":"GET /v2/product-instances","tag":"Preview","href":"/api-reference/product-instances/list"},{"title":"Create product instance","openapi":"POST /v2/product-instances","tag":"Preview","href":"/api-reference/product-instances/create"},{"title":"Get product instance","openapi":"GET /v2/product-instances/{id}","tag":"Preview","href":"/api-reference/product-instances/get"},{"title":"Update product instance","openapi":"PUT /v2/product-instances/{id}","tag":"Preview","href":"/api-reference/product-instances/update"},{"title":"Delete product instance","openapi":"DELETE /v2/product-instances/{id}","tag":"Preview","href":"/api-reference/product-instances/delete"},{"title":"Get BOM","openapi":"GET /v2/product-instances/{id}/bom","tag":"Preview","href":"/api-reference/product-instances/get-bom"},{"title":"Replace BOM","openapi":"PUT /v2/product-instances/{id}/bom","tag":"Preview","href":"/api-reference/product-instances/bom"},{"title":"Recompute LCA","openapi":"POST /v2/product-instances/{id}/lca-update","tag":"Preview","href":"/api-reference/product-instances/lca-update"},{"title":"Get LCA results","openapi":"GET /v2/product-instances/{id}/lca-results","tag":"Preview","href":"/api-reference/product-instances/lca-results"}]},{"group":"Prechain Products","pages":[{"title":"List prechain products","openapi":"GET /v2/prechain-products","tag":"Preview","href":"/api-reference/prechain-products/list"},{"title":"Create prechain product","openapi":"POST /v2/prechain-products","tag":"Preview","href":"/api-reference/prechain-products/create"},{"title":"Get prechain product","openapi":"GET /v2/prechain-products/{id}","tag":"Preview","href":"/api-reference/prechain-products/get"},{"title":"Update prechain product","openapi":"PUT /v2/prechain-products/{id}","tag":"Preview","href":"/api-reference/prechain-products/update"},{"title":"Delete prechain product","openapi":"DELETE /v2/prechain-products/{id}","tag":"Preview","href":"/api-reference/prechain-products/delete"}]},{"group":"Supplier Companies","pages":[{"title":"List supplier companies","openapi":"GET /v2/supplier-companies","href":"/api-reference/supplier-companies/list"},{"title":"Create supplier company","openapi":"POST /v2/supplier-companies","href":"/api-reference/supplier-companies/create"},{"title":"Get supplier company","openapi":"GET /v2/supplier-companies/{id}","href":"/api-reference/supplier-companies/get"},{"title":"Update supplier company","openapi":"PUT /v2/supplier-companies/{id}","href":"/api-reference/supplier-companies/update"},{"title":"Delete supplier company","openapi":"DELETE /v2/supplier-companies/{id}","href":"/api-reference/supplier-companies/delete"}]},{"group":"Supplier Plants","pages":[{"title":"List supplier plants","openapi":"GET /v2/supplier-plants","href":"/api-reference/supplier-plants/list"},{"title":"Create supplier plant","openapi":"POST /v2/supplier-plants","href":"/api-reference/supplier-plants/create"},{"title":"Get supplier plant","openapi":"GET /v2/supplier-plants/{id}","href":"/api-reference/supplier-plants/get"},{"title":"Update supplier plant","openapi":"PUT /v2/supplier-plants/{id}","href":"/api-reference/supplier-plants/update"},{"title":"Delete supplier plant","openapi":"DELETE /v2/supplier-plants/{id}","href":"/api-reference/supplier-plants/delete"}]},{"group":"Supplier Products","pages":[{"title":"List supplier products","openapi":"GET /v2/supplier-products","href":"/api-reference/supplier-products/list"},{"title":"Create supplier product","openapi":"POST /v2/supplier-products","href":"/api-reference/supplier-products/create"},{"title":"Get supplier product","openapi":"GET /v2/supplier-products/{id}","description":null,"href":"/api-reference/supplier-products/get"},{"title":"Update supplier product","openapi":"PUT /v2/supplier-products/{id}","href":"/api-reference/supplier-products/update"},{"title":"Delete supplier product","openapi":"DELETE /v2/supplier-products/{id}","description":"Deletes a supplier product. Returns `409 Conflict` if the supplier product\nis part of an active silo (`err_supplier_product_in_silo`), referenced\nin an active product's BOM (`err_supplier_product_in_recipe`), scoped as\npackaging by a production process\n(`err_supplier_product_scoped_as_packaging`), or declared by an active\nproduct as its own packaging\n(`err_supplier_product_declared_on_a_product`).\n","href":"/api-reference/supplier-products/delete"}]},{"group":"Silos","pages":[{"title":"List silos","openapi":"GET /v2/silos","href":"/api-reference/silos/list"},{"title":"Create silo","openapi":"POST /v2/silos","href":"/api-reference/silos/create"},{"title":"Get silo","openapi":"GET /v2/silos/{id}","href":"/api-reference/silos/get"},{"title":"Update silo","openapi":"PUT /v2/silos/{id}","href":"/api-reference/silos/update"},{"title":"Delete silo","openapi":"DELETE /v2/silos/{id}","href":"/api-reference/silos/delete"}]},{"group":"Composites","pages":[{"title":"List composites","openapi":"GET /v2/composites","href":"/api-reference/composites/list"},{"title":"Create composite","openapi":"POST /v2/composites","href":"/api-reference/composites/create"},{"title":"Get composite","openapi":"GET /v2/composites/{id}","href":"/api-reference/composites/get"},{"title":"Update composite","openapi":"PUT /v2/composites/{id}","href":"/api-reference/composites/update"},{"title":"Delete composite","openapi":"DELETE /v2/composites/{id}","href":"/api-reference/composites/delete"}]}]},"title":"Update supplier product - Emidat API","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}