Registers an existing product instance as an upstream (“prechain”) input
at one of your plants, with an optional transport route.
Idempotent create — a replay of the same Idempotency-Key returns the
original response (200); otherwise a new prechain product is created
(201). 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.
Optional client-generated key of 1–255 characters (e.g. a UUID) that makes
a create idempotent — the only mechanism that does so. A replay carrying the same
key returns the original response unchanged (200); reusing a key with a
different request body (compared byte for byte) or create endpoint is
rejected with 409 err_idempotency_key_reused. Concurrent requests with
the same key receive 409 err_idempotency_in_progress. Keys are scoped
to your manufacturer; successful responses are retained for 6h without
extending that window on replay. Current permissions are required on
every retry; product-instance replays also require the original
production-data scopes. Deduplication is best effort: Redis data loss
can end the window early, and Redis unavailability, timeouts, or unreadable
cache entries can allow creation without replay protection. Successful
creates still return 201 if caching fails. Redis waits share a two-second
budget excluding creation time. Incompatible replay-format upgrades
reset replay protection, so retries across that boundary can create again.
An interrupted create can reserve the key for up to 6h.
See External IDs for recovery guidance.
Your own code for this prechain product. Required; pass null if
unset. A non-null code must be unique among your active prechain
products; a duplicate returns 409 (see External
IDs).
UUID of the product instance used as the upstream input. Create via
POST /v2/product-instances, or resolve your code with
GET /v2/product-instances?external_id=….
Transport-only impacts per kg. Null until computed.
Show child attributes
⌘I
{"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":"6ae375abcedd4bb159cb270d","collectionId":"5195b532-a277-486d-9bcf-94deaf8e2e3c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae375abcedd4bb159cb270d"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae375abcedd4bb159cb270d","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Product Instances","count":9},{"language":"default","tag":"Composites","count":5},{"language":"default","tag":"Prechain Products","count":5},{"language":"default","tag":"Projects","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}]},"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":"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":"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":"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":"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/prechain-products/create","slug":"/api-reference/prechain-products/create","pageMetadata":{"title":"Create prechain product","openapi":"POST /v2/prechain-products","tag":"Preview","description":"Registers an existing product instance as an upstream (\"prechain\") input\nat one of your plants, with an optional transport route.\n\n**Idempotent create** — a replay of the same `Idempotency-Key` returns the\noriginal response (`200`); otherwise a new prechain product is created\n(`201`). See [External IDs](/external-ids).\n","href":"/api-reference/prechain-products/create"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, 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 strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Registers an existing product instance as an upstream (“prechain”) input\\nat one of your plants, with an optional transport route.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Idempotent create\"\n }), \" — a replay of the same \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" returns the\\noriginal response (\", _jsx(_components.code, {\n children: \"200\"\n }), \"); otherwise a new prechain product is created\\n(\", _jsx(_components.code, {\n children: \"201\"\n }), \"). See \", _jsx(_components.a, {\n href: \"/external-ids\",\n children: \"External IDs\"\n }), \".\"]\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":"Create prechain product","openapi":"POST /v2/prechain-products","tag":"Preview","description":"Registers an existing product instance as an upstream (\"prechain\") input\nat one of your plants, with an optional transport route.\n\n**Idempotent create** — a replay of the same `Idempotency-Key` returns the\noriginal response (`200`); otherwise a new prechain product is created\n(`201`). See [External IDs](/external-ids).\n","href":"/api-reference/prechain-products/create"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"v2_prechain_products_create","summary":"Create prechain product","description":"Registers an existing product instance as an upstream (\"prechain\") input\nat one of your plants, with an optional transport route.\n\n**Idempotent create** — a replay of the same `Idempotency-Key` returns the\noriginal response (`200`); otherwise a new prechain product is created\n(`201`). See [External IDs](/external-ids).\n","tags":["Prechain Products"],"parameters":["7e8550ae-3cc7-43da-b86d-694e9ba89232"],"requestBody":"4fade530-7a3c-4466-b150-8829bf055db7","responses":{"200":"239fc14a-79f6-44c1-a46e-f43cb6ec998d","201":"0319a077-2eb2-47c4-a5a1-94c9f1352a3f","401":"fcdef894-3125-4f46-9292-803a4ae2b354","403":"2bdfda56-b6f7-4852-b749-935ca58d2855","409":"6b8a3e0d-1203-4ff6-bfa1-77d8217b5d42","422":"2c21e72c-c5cd-457a-879c-8712b9a05925","500":"04cfb0c5-9fd8-4201-bb09-0fbd77854c87"},"method":"post","type":"path","servers":["6809999f-d857-4eb4-b661-af63bf125552"],"security":["651b8ccf-c117-4c26-b67b-5c3cdf3d2832"],"path":"/v2/prechain-products","baseUrlOptions":["https://api.emidat.com"],"title":"Create prechain product","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"7e8550ae-3cc7-43da-b86d-694e9ba89232":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":false,"description":"Optional client-generated key of 1–255 characters (e.g. a UUID) that makes\na create idempotent — the only mechanism that does so. A replay carrying the same\nkey returns the original response unchanged (`200`); reusing a key with a\ndifferent request body (compared byte for byte) or create endpoint is\nrejected with `409 err_idempotency_key_reused`. Concurrent requests with\nthe same key receive `409 err_idempotency_in_progress`. Keys are scoped\nto your manufacturer; successful responses are retained for 6h without\nextending that window on replay. Current permissions are required on\nevery retry; product-instance replays also require the original\nproduction-data scopes. Deduplication is best effort: Redis data loss\ncan end the window early, and Redis unavailability, timeouts, or unreadable\ncache entries can allow creation without replay protection. Successful\ncreates still return 201 if caching fails. Redis waits share a two-second\nbudget excluding creation time. Incompatible replay-format upgrades\nreset replay protection, so retries across that boundary can create again.\nAn interrupted create can reserve the key for up to 6h.\nSee [External IDs](/external-ids) for recovery guidance.\n","uniqueKey":"","typeLabel":"string"},"description":"Optional client-generated key of 1–255 characters (e.g. a UUID) that makes\na create idempotent — the only mechanism that does so. A replay carrying the same\nkey returns the original response unchanged (`200`); reusing a key with a\ndifferent request body (compared byte for byte) or create endpoint is\nrejected with `409 err_idempotency_key_reused`. Concurrent requests with\nthe same key receive `409 err_idempotency_in_progress`. Keys are scoped\nto your manufacturer; successful responses are retained for 6h without\nextending that window on replay. Current permissions are required on\nevery retry; product-instance replays also require the original\nproduction-data scopes. Deduplication is best effort: Redis data loss\ncan end the window early, and Redis unavailability, timeouts, or unreadable\ncache entries can allow creation without replay protection. Successful\ncreates still return 201 if caching fails. Redis waits share a two-second\nbudget excluding creation time. Incompatible replay-format upgrades\nreset replay protection, so retries across that boundary can create again.\nAn interrupted create can reserve the key for up to 6h.\nSee [External IDs](/external-ids) for recovery guidance.\n"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["external_id","product_instance_id","plant_id"],"properties":{"external_id":{"oneOf":[{"type":"string","description":"Your own code for this prechain product. Required; pass `null` if\nunset. A non-null code must be unique among your active prechain\nproducts; a duplicate returns `409` (see [External\nIDs](/external-ids)).\n","isRequired":true,"uniqueKey":"external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your own code for this prechain product. Required; pass `null` if\nunset. A non-null code must be unique among your active prechain\nproducts; a duplicate returns `409` (see [External\nIDs](/external-ids)).\n","isRequired":true,"uniqueKey":"external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"external_id","typeLabel":"string | null"},"product_instance_id":{"type":"string","format":"uuid","description":"UUID of the product instance used as the upstream input. Create via\n`POST /v2/product-instances`, or resolve your code with\n`GET /v2/product-instances?external_id=…`.\n","isRequired":true,"uniqueKey":"product_instance_id","typeLabel":"string\u003cuuid>"},"plant_id":{"type":"string","format":"uuid","description":"UUID of the plant that consumes this input.","isRequired":true,"uniqueKey":"plant_id","typeLabel":"string\u003cuuid>"},"transport_route":{"oneOf":[{"type":"object","description":"Transport distances from where the product is made to the consuming\nplant, one per modality (km). Optional.\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"}},"uniqueKey":"transport_route.oneOf.0","typeLabel":"object"},{"type":"null","description":"Transport distances from where the product is made to the consuming\nplant, one per modality (km). Optional.\n","uniqueKey":"transport_route.oneOf.1","typeLabel":"null"}],"uniqueKey":"transport_route","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"example":{"external_id":"PRECHAIN-CLINKER-001","product_instance_id":"44444444-4444-4444-4444-444444444444","plant_id":"11111111-1111-1111-1111-111111111111","transport_route":{"truck_distance_km":120}},"examples":{"Example":{"title":"Example","value":{"external_id":"PRECHAIN-CLINKER-001","product_instance_id":"44444444-4444-4444-4444-444444444444","plant_id":"11111111-1111-1111-1111-111111111111","transport_route":{"truck_distance_km":120}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"239fc14a-79f6-44c1-a46e-f43cb6ec998d":{"description":"Returned unchanged — an `Idempotency-Key` replay.","content":{"application/json":{"schema":{"type":"object","required":["id","external_id","product_instance_id","plant_id","transport_route","impacts_per_kg","transport_impacts_per_kg"],"description":"An existing product instance used as an upstream (\"prechain\") input at one\nof your plants, with an optional transport route and its per-kg impacts.\n","properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"external_id":{"oneOf":[{"type":"string","description":"Your own code for this prechain product, or null if none.","isRequired":true,"uniqueKey":"external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your own code for this prechain product, or null if none.","isRequired":true,"uniqueKey":"external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"external_id","typeLabel":"string | null"},"product_instance_id":{"type":"string","format":"uuid","description":"UUID of the product instance used as the input.","isRequired":true,"uniqueKey":"product_instance_id","typeLabel":"string\u003cuuid>"},"plant_id":{"type":"string","format":"uuid","description":"UUID of the consuming plant.","isRequired":true,"uniqueKey":"plant_id","typeLabel":"string\u003cuuid>"},"transport_route":{"oneOf":[{"type":"object","description":"Transport distances to the consuming plant, 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 to the consuming plant, one per modality (km).","isRequired":true,"uniqueKey":"transport_route.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_route","typeLabel":"object | null"},"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 impacts of the input per kg. Null until computed.","isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Characterized impacts of the input 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":"Transport-only impacts per kg. Null until computed.","isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Transport-only 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"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","external_id":"\u003cstring>","product_instance_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","plant_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","transport_route":{"truck_distance_km":123,"train_distance_km":123,"ship_distance_km":123},"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}]}}},"exampleType":"generated"}},"exampleType":"generated"},"0319a077-2eb2-47c4-a5a1-94c9f1352a3f":{"description":"Prechain product created.","content":{"application/json":{"schema":{"type":"object","required":["id","external_id","product_instance_id","plant_id","transport_route","impacts_per_kg","transport_impacts_per_kg"],"description":"An existing product instance used as an upstream (\"prechain\") input at one\nof your plants, with an optional transport route and its per-kg impacts.\n","properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"external_id":{"oneOf":[{"type":"string","description":"Your own code for this prechain product, or null if none.","isRequired":true,"uniqueKey":"external_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your own code for this prechain product, or null if none.","isRequired":true,"uniqueKey":"external_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"external_id","typeLabel":"string | null"},"product_instance_id":{"type":"string","format":"uuid","description":"UUID of the product instance used as the input.","isRequired":true,"uniqueKey":"product_instance_id","typeLabel":"string\u003cuuid>"},"plant_id":{"type":"string","format":"uuid","description":"UUID of the consuming plant.","isRequired":true,"uniqueKey":"plant_id","typeLabel":"string\u003cuuid>"},"transport_route":{"oneOf":[{"type":"object","description":"Transport distances to the consuming plant, 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 to the consuming plant, one per modality (km).","isRequired":true,"uniqueKey":"transport_route.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transport_route","typeLabel":"object | null"},"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 impacts of the input per kg. Null until computed.","isRequired":true,"uniqueKey":"impacts_per_kg.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Characterized impacts of the input 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":"Transport-only impacts per kg. Null until computed.","isRequired":true,"uniqueKey":"transport_impacts_per_kg.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Transport-only 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"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","external_id":"\u003cstring>","product_instance_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","plant_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","transport_route":{"truck_distance_km":123,"train_distance_km":123,"ship_distance_km":123},"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}]}}},"exampleType":"generated"}},"exampleType":"generated"},"fcdef894-3125-4f46-9292-803a4ae2b354":{"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_invalid_query","err_invalid_cursor","err_stale_cursor","err_history_temporarily_unavailable","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_packaging_scoped_by_the_process","err_packaging_declared_on_a_product","err_packaging_on_a_byproduct","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_epd_taken","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_address_not_found","err_customer_not_found","err_geocoding_unavailable","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_trial_document_limit_reached","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"},"2bdfda56-b6f7-4852-b749-935ca58d2855":{"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_invalid_query","err_invalid_cursor","err_stale_cursor","err_history_temporarily_unavailable","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_packaging_scoped_by_the_process","err_packaging_declared_on_a_product","err_packaging_on_a_byproduct","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_epd_taken","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_address_not_found","err_customer_not_found","err_geocoding_unavailable","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_trial_document_limit_reached","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"},"6b8a3e0d-1203-4ff6-bfa1-77d8217b5d42":{"description":"That product instance is already registered as a prechain product at\nthat plant (`err_prechain_product_exists`) or is not a main product\nof its production process (`err_prechain_product_not_main_product`),\nthe `external_id` is already in use by another active prechain\nproduct, or the `Idempotency-Key` was reused with a different\nrequest body.\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_invalid_query","err_invalid_cursor","err_stale_cursor","err_history_temporarily_unavailable","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_packaging_scoped_by_the_process","err_packaging_declared_on_a_product","err_packaging_on_a_byproduct","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_epd_taken","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_address_not_found","err_customer_not_found","err_geocoding_unavailable","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_trial_document_limit_reached","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"},"2c21e72c-c5cd-457a-879c-8712b9a05925":{"description":"Validation error — e.g. unknown `product_instance_id` or `plant_id`.","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_invalid_query","err_invalid_cursor","err_stale_cursor","err_history_temporarily_unavailable","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_packaging_scoped_by_the_process","err_packaging_declared_on_a_product","err_packaging_on_a_byproduct","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_epd_taken","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_address_not_found","err_customer_not_found","err_geocoding_unavailable","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_trial_document_limit_reached","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"},"04cfb0c5-9fd8-4201-bb09-0fbd77854c87":{"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_invalid_query","err_invalid_cursor","err_stale_cursor","err_history_temporarily_unavailable","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_packaging_scoped_by_the_process","err_packaging_declared_on_a_product","err_packaging_on_a_byproduct","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_epd_taken","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_address_not_found","err_customer_not_found","err_geocoding_unavailable","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_trial_document_limit_reached","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":{"651b8ccf-c117-4c26-b67b-5c3cdf3d2832":{"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":{"6809999f-d857-4eb4-b661-af63bf125552":{"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":"Create prechain product - Emidat API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-30T12:37:21.485Z","originalFileLocation":"api-reference/prechain-products/create.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=\"Registers an existing product instance as an upstream (\u0026quot;prechain\u0026quot;) input at one of your plants, with an optional transport route. Idempotent create — a replay of the same Idempotency-Key returns the original response (200); otherwise a new prechain product is created (201). 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=\"Create prechain product - Emidat API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Registers an existing product instance as an upstream (\u0026quot;prechain\u0026quot;) input at one of your plants, with an optional transport route. Idempotent create — a replay of the same Idempotency-Key returns the original response (200); otherwise a new prechain product is created (201). 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/prechain-products/create\">\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=Prechain+Products\u0026amp;title=Create+prechain+product\u0026amp;description=Registers+an+existing+product+instance+as+an+upstream+%28%22prechain%22%29+input%0Aat+one+of+your+plants%2C+with+an+optional+transport+route.%0A%0A**Idempotent+create**+%E2%80%94+a+rep\u0026amp;theme=df6acf5ffa3b5355e046b553\u0026amp;signature=521540c3acce77b93606489b81d06ade25ce1462510f96c6c0cadda7529f97d2\">\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=\"Create prechain product - Emidat API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Registers an existing product instance as an upstream (\u0026quot;prechain\u0026quot;) input at one of your plants, with an optional transport route. Idempotent create — a replay of the same Idempotency-Key returns the original response (200); otherwise a new prechain product is created (201). See External IDs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://emidat.mintlify.app/_mintlify/api/og/v2?division=Prechain+Products\u0026amp;title=Create+prechain+product\u0026amp;description=Registers+an+existing+product+instance+as+an+upstream+%28%22prechain%22%29+input%0Aat+one+of+your+plants%2C+with+an+optional+transport+route.%0A%0A**Idempotent+create**+%E2%80%94+a+rep\u0026amp;theme=df6acf5ffa3b5355e046b553\u0026amp;signature=521540c3acce77b93606489b81d06ade25ce1462510f96c6c0cadda7529f97d2\">\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/prechain-products/create\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/prechain-products/create.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/prechain-products/create#webpage\",\"url\":\"https://docs.emidat.com/api-reference/prechain-products/create\",\"name\":\"Create prechain product\",\"description\":\"Registers an existing product instance as an upstream (\\\"prechain\\\") input at one of your plants, with an optional transport route. Idempotent create — a replay of the same Idempotency-Key returns the original response (200); otherwise a new prechain product is created (201). See External IDs.\",\"dateModified\":\"2026-07-30T12:37:21.485Z\",\"isPartOf\":{\"@id\":\"https://docs.emidat.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.emidat.com/api-reference/prechain-products/create#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.emidat.com/api-reference/prechain-products/create#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Prechain Products\",\"item\":\"https://docs.emidat.com/api-reference/prechain-products/list\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create prechain product\",\"item\":\"https://docs.emidat.com/api-reference/prechain-products/create\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.emidat.com/api-reference/prechain-products/create#apireference\",\"headline\":\"Create prechain product\",\"name\":\"Create prechain product\",\"description\":\"Registers an existing product instance as an upstream (\\\"prechain\\\") input at one of your plants, with an optional transport route. Idempotent create — a replay of the same Idempotency-Key returns the original response (200); otherwise a new prechain product is created (201). See External IDs.\",\"url\":\"https://docs.emidat.com/api-reference/prechain-products/create\",\"mainEntityOfPage\":{\"@id\":\"https://docs.emidat.com/api-reference/prechain-products/create#webpage\"},\"dateModified\":\"2026-07-30T12:37:21.485Z\",\"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":"Projects","pages":[{"title":"List projects","openapi":"GET /v2/projects","tag":"Preview","href":"/api-reference/projects/list"},{"title":"Create project","openapi":"POST /v2/projects","tag":"Preview","href":"/api-reference/projects/create"},{"title":"Get project","openapi":"GET /v2/projects/{id}","tag":"Preview","href":"/api-reference/projects/get"},{"title":"Update project","openapi":"PUT /v2/projects/{id}","tag":"Preview","href":"/api-reference/projects/update"},{"title":"Delete project","openapi":"DELETE /v2/projects/{id}","tag":"Preview","href":"/api-reference/projects/delete"}]},{"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","description":"Lists the prechain products at the plants your key can access — the product\ninstances you registered as upstream inputs. Paginated — see\n[Pagination](/pagination).\n","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","description":"Returns the prechain product with its per-kg impacts.","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}","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}","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":"Create prechain product - Emidat API","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}