Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: code plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs overwrite: true — without it the whole batch is refused with 409 and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (400 otherwise). Requires packaging:write; customer workspace with the PPWR module enabled — see the guide.
API key generated in Settings > API Keys. Include as Authorization: Bearer <key>.
Body
application/json
object[]
object
One packaging-component row for POST /api/v1/ppwr/components. Upsert key: code + resolved supplier. Cells are coerced exactly as the in-app CSV/Excel importer coerces them, so a JSON-native value and its string spelling are equivalent (12 = "12", ["plastic"] = "plastic;paper_board", true = "yes"/"ja"/"1"). An empty or omitted field is a no-op — it never clears a stored value. Cross-field rules (each rejects the row with the named key): a recycledContentPct above 0 requires recycledContentSourceandrecycledContentMethod (recycledProvenanceRequired); foodContact requires contactSensitive (foodContactImpliesContactSensitive); the five PFAS fields are only accepted on a food-contact component (pfasOnlyFoodContact); switching foodContact off while PFAS data is stored is refused (foodContactOffWithPfasData). On an update these rules read a blank flag as the stored value.
Resolved to one of your suppliers by fuzzy name match (case, umlauts, punctuation and legal-form tokens are ignored). A name that matches two or more distinct suppliers fails the row with ambiguousSupplierName — the import never guesses. A name that matches none creates a name-only supplier (no email, data incomplete) once per distinct name in the request and links the record to it; the created names are returned in suppliersCreated. A blank cell resolves to no supplier (your own bucket).
Food-contact packaging. Blank = false on a create and unchanged on an update; an explicit false switches a stored true off (an overwrite). Switching it off is refused with foodContactOffWithPfasData while PFAS data is stored for the component — the import never deletes it; switch food contact off in the app's component editor, which removes the PFAS data. Implies contactSensitive; when the row states a flag or a PFAS value, both rules are checked on the stored values merged with the row, so a blank flag on an update is judged by the stored one.
Result of a synchronous PPWR intake. Partial accept: valid rows commit even when other rows are invalid or failed — the one exception is the 409 overwrite confirmation, which is all-or-nothing. Idempotent: replaying an identical request changes nothing (matched rows return as skipped), except unit rows without internalRef, which are always creates.
Rows the upsert engine rejected (unknown reference, ambiguous match, a new unit over the plan's unit quota → packagingUnitQuotaReached, …). A row refused before its write (these, and a new unit over the quota) writes nothing — not even the supplier it names; a unit written whose component or article link then failed is reported here with that link's key. Its error values are stable machine keys.
Rows rejected by schema validation before the engine ran. Most error values are stable machine keys, but a field with no custom message falls back to the validator's own English text — match on the key, fall back to displaying the string.
Unit intake only: units created with neither componentCodes nor a material. They hold no component yet, so no regulated value can be recorded on them — send componentCodes, or material for single-part packaging.
Unit intake only: main-part components created from rows' material (one per unit that had no component yet).
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Polygon One Helpcenter","colors":{"primary":"#15803D","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/polygonone/AMoRp9VbcW46gNsT/logo/light.svg?fit=max\u0026auto=format\u0026n=AMoRp9VbcW46gNsT\u0026q=85\u0026s=4a316da81d50e49c7f9f6480a235558e","dark":"https://mintcdn.com/polygonone/AMoRp9VbcW46gNsT/logo/dark.svg?fit=max\u0026auto=format\u0026n=AMoRp9VbcW46gNsT\u0026q=85\u0026s=2f010ff600ff4880f154678933ee7214"},"favicon":"https://mintcdn.com/polygonone/ySkQMGGRhMNkPSTt/favicon.svg?fit=max\u0026auto=format\u0026n=ySkQMGGRhMNkPSTt\u0026q=85\u0026s=90cbe4fd3ee2dbffcb8de6167a8d47f3","api":{"playground":{"display":"simple"}},"navbar":{"links":[{"href":"mailto:help@polygon-one.eu","label":"Support"}],"primary":{"type":"button","label":"App","href":"https://app.polygon-one.com/"}},"footer":{"socials":{"website":"https://polygon-one.com"}},"search":{"prompt":"Suche..."},"integrations":{"posthog":{"apiKey":"phc_uKa9gMArvxxjzGfYWUWS4YLP7yT7gPETBzA3ktR7mUTD","apiHost":"https://eu.i.posthog.com","sessionRecording":false}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[]},"languages":[{"language":"de","default":true,"href":""},{"language":"en","href":"en"},{"language":"fr","href":"fr/lieferanten/start"},{"language":"es","href":"es/lieferanten/start"},{"language":"zh","href":"zh/lieferanten/start"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"polygonone","hasAudioNarration":false,"actualSubdomain":"polygonone","customDomains":["help.polygon-one.com"],"gitSource":{"type":"github","owner":"polygon-one","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae347b2c5540a38c09062a7","collectionId":"e8876d2f-5d9d-4622-9ba5-e42c563f9dac","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae347b2c5540a38c09062a7"},"entitlements":{},"buildId":"6ae347b2c5540a38c09062a7","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"de","tag":"API-Referenz","count":62},{"language":"en","tag":"API Reference","count":62},{"language":"de","tag":"EUDR","count":54},{"language":"en","tag":"EUDR","count":54},{"language":"de","tag":"Für Lieferanten","count":28},{"language":"en","tag":"For suppliers","count":28},{"language":"es","tag":"Para proveedores","count":28},{"language":"fr","tag":"Pour les fournisseurs","count":28},{"language":"zh","tag":"供应商帮助","count":28},{"language":"de","tag":"PPWR","count":25},{"language":"en","tag":"PPWR","count":25},{"language":"de","tag":"API-Dokumentation","count":10},{"language":"en","tag":"API Documentation","count":10},{"language":"de","tag":"PPWR – Verpackungsdaten","count":9},{"language":"de","tag":"Ihr Datenformat","count":9},{"language":"en","tag":"PPWR – Packaging Data","count":9},{"language":"en","tag":"Your data format","count":9},{"language":"es","tag":"Su formato de datos","count":9},{"language":"fr","tag":"Votre format de données","count":9},{"language":"zh","tag":"数据格式指南","count":9},{"language":"de","tag":"Datensammlung (Art. 9 EUDR)","count":8},{"language":"de","tag":"DDS \u0026 Bestellungen (Art. 3 EUDR)","count":8},{"language":"de","tag":"Optional","count":8},{"language":"en","tag":"Data Collection (Art. 9 EUDR)","count":8},{"language":"en","tag":"DDS \u0026 Orders (Art. 3 EUDR)","count":8},{"language":"en","tag":"Optional","count":8},{"language":"es","tag":"Solicitud EUDR","count":7},{"language":"fr","tag":"Demande EUDR","count":7},{"language":"zh","tag":"EUDR 请求","count":7},{"language":"es","tag":"Espacio del proveedor","count":4},{"language":"es","tag":"Solicitud PPWR","count":4},{"language":"fr","tag":"Espace fournisseur","count":4},{"language":"fr","tag":"Demande PPWR","count":4},{"language":"zh","tag":"供应商工作区","count":4},{"language":"zh","tag":"PPWR 请求","count":4},{"language":"es","tag":"Resolver un problema","count":3},{"language":"fr","tag":"Résoudre un problème","count":3},{"language":"zh","tag":"更正、审核和状态","count":3},{"language":"es","tag":"Empiece aquí","count":1},{"language":"fr","tag":"Commencer ici","count":1},{"language":"zh","tag":"从这里开始","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"html:has(#content[data-page-href$=\"/lieferanten/start\"]) #pagination,html:has(#content[data-page-href*=\"/lieferanten/\"]) #mobile-nav #navigation-items>div:has(>#localization-select-trigger)>div:has(>button[aria-haspopup=menu]),html:has(#content[data-page-href*=\"/lieferanten/\"]) #navbar div:has(>div>a[href$=\"/lieferanten/start\"]),html:has(#content[data-page-href*=\"/lieferanten/\"]) #navbar li:has(>a[href=\"https://app.polygon-one.com/\"]),html:has(#content[data-page-href*=\"/lieferanten/\"]) [role=dialog] li:has(>a[href=\"https://app.polygon-one.com/\"]){display:none!important}"}],"page":{"pagePath":"en/api-reference/endpoint/ppwr/components/upsert","slug":"/en/api-reference/endpoint/ppwr/components/upsert","pageMetadata":{"title":"Upsert Packaging Components","openapi":"POST /api/v1/ppwr/components","description":"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: `code` plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs `overwrite: true` — without it the whole batch is refused with `409` and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (`400` otherwise). Requires `packaging:write`; customer workspace with the PPWR module enabled — see the guide.","href":"/en/api-reference/endpoint/ppwr/components/upsert"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: \", _jsx(_components.code, {\n children: \"code\"\n }), \" plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs \", _jsx(_components.code, {\n children: \"overwrite: true\"\n }), \" — without it the whole batch is refused with \", _jsx(_components.code, {\n children: \"409\"\n }), \" and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (\", _jsx(_components.code, {\n children: \"400\"\n }), \" otherwise). Requires \", _jsx(_components.code, {\n children: \"packaging:write\"\n }), \"; customer workspace with the PPWR module enabled — see the guide.\"]\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":{"config":{},"pageMetadata":{"title":"Upsert Packaging Components","openapi":"POST /api/v1/ppwr/components","description":"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: `code` plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs `overwrite: true` — without it the whole batch is refused with `409` and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (`400` otherwise). Requires `packaging:write`; customer workspace with the PPWR module enabled — see the guide.","href":"/en/api-reference/endpoint/ppwr/components/upsert"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"upsertPpwrComponents","summary":"Upsert Packaging Components","description":"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: `code` plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs `overwrite: true` — without it the whole batch is refused with `409` and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (`400` otherwise). Requires `packaging:write`; customer workspace with the PPWR module enabled — see the guide.","tags":["PPWR Packaging Data"],"requestBody":"a7b6ecd5-3b4e-4900-ad02-c0209aef9cbc","responses":{"200":"2678b182-6730-409d-bbdd-e2d4f9cff71b","400":"8ac6bc2e-5bf5-41f1-bd1a-dbca6fdafabd","401":"93844ed1-360b-4ee3-bf6b-0e0dae70113f","403":"84b7251d-ee1c-449e-a89b-613bdeb56d6b","409":"cf267e80-29b3-4095-863f-11eb6ac043c0","429":"d008db56-e354-4c4d-9478-fbc2b4fd4e34","500":"26566346-20bd-4612-a740-72d975f8030b"},"method":"post","type":"path","servers":["525ee7a2-0b29-4150-83c9-6311c95aea37"],"security":["bae4c7a0-d716-46dc-bfdc-909a8704f12f"],"path":"/api/v1/ppwr/components","baseUrlOptions":["https://app.polygon-one.com"],"title":"Upsert Packaging Components","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Your component code — the upsert key, compared byte-exact after trimming (`KAR-01` ≠ `kar-01`).","isRequired":true,"uniqueKey":"oneOf.0.items.[INDEX].code","typeLabel":"string"},"name":{"type":"string","minLength":1,"description":"Component name.","isRequired":true,"uniqueKey":"oneOf.0.items.[INDEX].name","typeLabel":"string"},"materials":{"type":"array","items":{"type":"string","enum":["plastic","paper_board","glass","metal","wood","composite","other"],"uniqueKey":"oneOf.0.items.[INDEX].materials.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"description":"At least one material. Also accepts a `;`- or `,`-delimited string.","isRequired":true,"uniqueKey":"oneOf.0.items.[INDEX].materials","typeLabel":"enum\u003cstring>[]"},"supplierName":{"oneOf":[{"type":"string","description":"Resolved to one of your suppliers by fuzzy name match (case, umlauts, punctuation and legal-form tokens are ignored). A name that matches **two or more** distinct suppliers fails the row with `ambiguousSupplierName` — the import never guesses. A name that matches **none** creates a name-only supplier (no email, data incomplete) once per distinct name in the request and links the record to it; the created names are returned in `suppliersCreated`. A blank cell resolves to *no supplier* (your own bucket).","uniqueKey":"oneOf.0.items.[INDEX].supplierName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Resolved to one of your suppliers by fuzzy name match (case, umlauts, punctuation and legal-form tokens are ignored). A name that matches **two or more** distinct suppliers fails the row with `ambiguousSupplierName` — the import never guesses. A name that matches **none** creates a name-only supplier (no email, data incomplete) once per distinct name in the request and links the record to it; the created names are returned in `suppliersCreated`. A blank cell resolves to *no supplier* (your own bucket).","uniqueKey":"oneOf.0.items.[INDEX].supplierName.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].supplierName","typeLabel":"string | null"},"polymer":{"oneOf":[{"type":"string","enum":["pet","hdpe","ldpe","pp","ps","pvc","other",null],"description":"Polymer type (plastics only).","uniqueKey":"oneOf.0.items.[INDEX].polymer.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["pet","hdpe","ldpe","pp","ps","pvc","other",null],"description":"Polymer type (plastics only).","uniqueKey":"oneOf.0.items.[INDEX].polymer.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].polymer","typeLabel":"enum\u003cstring> | null"},"massGrams":{"oneOf":[{"type":"string","description":"Mass of ONE piece of this component, in grams.","uniqueKey":"oneOf.0.items.[INDEX].massGrams.oneOf.0","typeLabel":"string"},{"type":"null","description":"Mass of ONE piece of this component, in grams.","uniqueKey":"oneOf.0.items.[INDEX].massGrams.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].massGrams","typeLabel":"string | null"},"recycledContentPct":{"oneOf":[{"type":"string","description":"Recycled content, 0–100.","uniqueKey":"oneOf.0.items.[INDEX].recycledContentPct.oneOf.0","typeLabel":"string"},{"type":"null","description":"Recycled content, 0–100.","uniqueKey":"oneOf.0.items.[INDEX].recycledContentPct.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].recycledContentPct","typeLabel":"string | null"},"recycledContentSource":{"oneOf":[{"type":"string","enum":["pcr","pir",null],"description":"`pcr` = post-consumer, `pir` = post-industrial.","uniqueKey":"oneOf.0.items.[INDEX].recycledContentSource.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["pcr","pir",null],"description":"`pcr` = post-consumer, `pir` = post-industrial.","uniqueKey":"oneOf.0.items.[INDEX].recycledContentSource.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].recycledContentSource","typeLabel":"enum\u003cstring> | null"},"recycledContentMethod":{"oneOf":[{"type":"string","enum":["physical","mass_balance",null],"description":"How the recycled content is attributed: `physical` or `mass_balance`. Required together with `recycledContentSource` when `recycledContentPct` is above 0.","uniqueKey":"oneOf.0.items.[INDEX].recycledContentMethod.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["physical","mass_balance",null],"description":"How the recycled content is attributed: `physical` or `mass_balance`. Required together with `recycledContentSource` when `recycledContentPct` is above 0.","uniqueKey":"oneOf.0.items.[INDEX].recycledContentMethod.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].recycledContentMethod","typeLabel":"enum\u003cstring> | null"},"contactSensitive":{"oneOf":[{"type":"boolean","description":"Contact-sensitive packaging. Blank = `false` on a create and unchanged on an update; an explicit `false` switches a stored `true` off (an overwrite).","uniqueKey":"oneOf.0.items.[INDEX].contactSensitive.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Contact-sensitive packaging. Blank = `false` on a create and unchanged on an update; an explicit `false` switches a stored `true` off (an overwrite).","uniqueKey":"oneOf.0.items.[INDEX].contactSensitive.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].contactSensitive","typeLabel":"boolean | null"},"foodContact":{"oneOf":[{"type":"boolean","description":"Food-contact packaging. Blank = `false` on a create and unchanged on an update; an explicit `false` switches a stored `true` off (an overwrite). Switching it off is refused with `foodContactOffWithPfasData` while PFAS data is stored for the component — the import never deletes it; switch food contact off in the app's component editor, which removes the PFAS data. Implies `contactSensitive`; when the row states a flag or a PFAS value, both rules are checked on the stored values merged with the row, so a blank flag on an update is judged by the stored one.","uniqueKey":"oneOf.0.items.[INDEX].foodContact.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Food-contact packaging. Blank = `false` on a create and unchanged on an update; an explicit `false` switches a stored `true` off (an overwrite). Switching it off is refused with `foodContactOffWithPfasData` while PFAS data is stored for the component — the import never deletes it; switch food contact off in the app's component editor, which removes the PFAS data. Implies `contactSensitive`; when the row states a flag or a PFAS value, both rules are checked on the stored values merged with the row, so a blank flag on an update is judged by the stored one.","uniqueKey":"oneOf.0.items.[INDEX].foodContact.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].foodContact","typeLabel":"boolean | null"},"heavyMetalsMgPerKg":{"oneOf":[{"type":"string","description":"Sum of the four regulated heavy metals, mg/kg.","uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsMgPerKg.oneOf.0","typeLabel":"string"},{"type":"null","description":"Sum of the four regulated heavy metals, mg/kg.","uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsMgPerKg.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsMgPerKg","typeLabel":"string | null"},"heavyMetalsBasis":{"oneOf":[{"type":"string","enum":["test_report","supplier_declaration","not_substantiated",null],"description":"Provenance of the heavy-metals claim.","uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsBasis.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["test_report","supplier_declaration","not_substantiated",null],"description":"Provenance of the heavy-metals claim.","uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsBasis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsBasis","typeLabel":"enum\u003cstring> | null"},"heavyMetalsMethod":{"oneOf":[{"type":"string","description":"Annex VII d) measurement standard (free text, e.g. `CEN/CR 13695-1`). Accepted on every component.","uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsMethod.oneOf.0","typeLabel":"string"},{"type":"null","description":"Annex VII d) measurement standard (free text, e.g. `CEN/CR 13695-1`). Accepted on every component.","uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsMethod.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].heavyMetalsMethod","typeLabel":"string | null"},"pfasCompliant":{"oneOf":[{"type":"boolean","description":"Tri-state: blank = unknown. Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasCompliant.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Tri-state: blank = unknown. Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasCompliant.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].pfasCompliant","typeLabel":"boolean | null"},"pfasBasis":{"oneOf":[{"type":"string","enum":["test_report","supplier_declaration","not_substantiated",null],"description":"Provenance of the PFAS claim. Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasBasis.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["test_report","supplier_declaration","not_substantiated",null],"description":"Provenance of the PFAS claim. Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasBasis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].pfasBasis","typeLabel":"enum\u003cstring> | null"},"pfasMethod":{"oneOf":[{"type":"string","description":"PFAS measurement method (free text). Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasMethod.oneOf.0","typeLabel":"string"},{"type":"null","description":"PFAS measurement method (free text). Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasMethod.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].pfasMethod","typeLabel":"string | null"},"pfasSumPpb":{"oneOf":[{"type":"string","description":"Measured PFAS sum in ppb. Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasSumPpb.oneOf.0","typeLabel":"string"},{"type":"null","description":"Measured PFAS sum in ppb. Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasSumPpb.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].pfasSumPpb","typeLabel":"string | null"},"pfasTotalFluorineMgPerKg":{"oneOf":[{"type":"string","description":"Total fluorine in mg/kg — the screening route. Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasTotalFluorineMgPerKg.oneOf.0","typeLabel":"string"},{"type":"null","description":"Total fluorine in mg/kg — the screening route. Food-contact components only.","uniqueKey":"oneOf.0.items.[INDEX].pfasTotalFluorineMgPerKg.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].pfasTotalFluorineMgPerKg","typeLabel":"string | null"},"notes":{"oneOf":[{"type":"string","description":"Free-text notes.","uniqueKey":"oneOf.0.items.[INDEX].notes.oneOf.0","typeLabel":"string"},{"type":"null","description":"Free-text notes.","uniqueKey":"oneOf.0.items.[INDEX].notes.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.items.[INDEX].notes","typeLabel":"string | null"}},"required":["code","name","materials"],"description":"One packaging-component row for `POST /api/v1/ppwr/components`. Upsert key: `code` + resolved supplier. Cells are coerced exactly as the in-app CSV/Excel importer coerces them, so a JSON-native value and its string spelling are equivalent (`12` = `\"12\"`, `[\"plastic\"]` = `\"plastic;paper_board\"`, `true` = `\"yes\"`/`\"ja\"`/`\"1\"`). An empty or omitted field is a no-op — it never clears a stored value. Cross-field rules (each rejects the row with the named key): a `recycledContentPct` above 0 requires `recycledContentSource` **and** `recycledContentMethod` (`recycledProvenanceRequired`); `foodContact` requires `contactSensitive` (`foodContactImpliesContactSensitive`); the five PFAS fields are only accepted on a food-contact component (`pfasOnlyFoodContact`); switching `foodContact` off while PFAS data is stored is refused (`foodContactOffWithPfasData`). On an update these rules read a blank flag as the stored value.","uniqueKey":"oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Bare array form.","maxItems":1000,"uniqueKey":"oneOf.0","typeLabel":"object[]"},{"type":"object","description":"Envelope form for the component intake.","required":["rows"],"properties":{"rows":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"Your component code — the upsert key, compared byte-exact after trimming (`KAR-01` ≠ `kar-01`).","isRequired":true,"uniqueKey":"oneOf.1.rows.items.[INDEX].code","typeLabel":"string"},"name":{"type":"string","minLength":1,"description":"Component name.","isRequired":true,"uniqueKey":"oneOf.1.rows.items.[INDEX].name","typeLabel":"string"},"materials":{"type":"array","items":{"type":"string","enum":["plastic","paper_board","glass","metal","wood","composite","other"],"uniqueKey":"oneOf.1.rows.items.[INDEX].materials.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"description":"At least one material. Also accepts a `;`- or `,`-delimited string.","isRequired":true,"uniqueKey":"oneOf.1.rows.items.[INDEX].materials","typeLabel":"enum\u003cstring>[]"},"supplierName":{"oneOf":[{"type":"string","description":"Resolved to one of your suppliers by fuzzy name match (case, umlauts, punctuation and legal-form tokens are ignored). A name that matches **two or more** distinct suppliers fails the row with `ambiguousSupplierName` — the import never guesses. A name that matches **none** creates a name-only supplier (no email, data incomplete) once per distinct name in the request and links the record to it; the created names are returned in `suppliersCreated`. A blank cell resolves to *no supplier* (your own bucket).","uniqueKey":"oneOf.1.rows.items.[INDEX].supplierName.oneOf.0","typeLabel":"string"},{"type":"null","description":"Resolved to one of your suppliers by fuzzy name match (case, umlauts, punctuation and legal-form tokens are ignored). A name that matches **two or more** distinct suppliers fails the row with `ambiguousSupplierName` — the import never guesses. A name that matches **none** creates a name-only supplier (no email, data incomplete) once per distinct name in the request and links the record to it; the created names are returned in `suppliersCreated`. A blank cell resolves to *no supplier* (your own bucket).","uniqueKey":"oneOf.1.rows.items.[INDEX].supplierName.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].supplierName","typeLabel":"string | null"},"polymer":{"oneOf":[{"type":"string","enum":["pet","hdpe","ldpe","pp","ps","pvc","other",null],"description":"Polymer type (plastics only).","uniqueKey":"oneOf.1.rows.items.[INDEX].polymer.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["pet","hdpe","ldpe","pp","ps","pvc","other",null],"description":"Polymer type (plastics only).","uniqueKey":"oneOf.1.rows.items.[INDEX].polymer.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].polymer","typeLabel":"enum\u003cstring> | null"},"massGrams":{"oneOf":[{"type":"string","description":"Mass of ONE piece of this component, in grams.","uniqueKey":"oneOf.1.rows.items.[INDEX].massGrams.oneOf.0","typeLabel":"string"},{"type":"null","description":"Mass of ONE piece of this component, in grams.","uniqueKey":"oneOf.1.rows.items.[INDEX].massGrams.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].massGrams","typeLabel":"string | null"},"recycledContentPct":{"oneOf":[{"type":"string","description":"Recycled content, 0–100.","uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentPct.oneOf.0","typeLabel":"string"},{"type":"null","description":"Recycled content, 0–100.","uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentPct.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentPct","typeLabel":"string | null"},"recycledContentSource":{"oneOf":[{"type":"string","enum":["pcr","pir",null],"description":"`pcr` = post-consumer, `pir` = post-industrial.","uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentSource.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["pcr","pir",null],"description":"`pcr` = post-consumer, `pir` = post-industrial.","uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentSource.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentSource","typeLabel":"enum\u003cstring> | null"},"recycledContentMethod":{"oneOf":[{"type":"string","enum":["physical","mass_balance",null],"description":"How the recycled content is attributed: `physical` or `mass_balance`. Required together with `recycledContentSource` when `recycledContentPct` is above 0.","uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentMethod.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["physical","mass_balance",null],"description":"How the recycled content is attributed: `physical` or `mass_balance`. Required together with `recycledContentSource` when `recycledContentPct` is above 0.","uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentMethod.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].recycledContentMethod","typeLabel":"enum\u003cstring> | null"},"contactSensitive":{"oneOf":[{"type":"boolean","description":"Contact-sensitive packaging. Blank = `false` on a create and unchanged on an update; an explicit `false` switches a stored `true` off (an overwrite).","uniqueKey":"oneOf.1.rows.items.[INDEX].contactSensitive.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Contact-sensitive packaging. Blank = `false` on a create and unchanged on an update; an explicit `false` switches a stored `true` off (an overwrite).","uniqueKey":"oneOf.1.rows.items.[INDEX].contactSensitive.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].contactSensitive","typeLabel":"boolean | null"},"foodContact":{"oneOf":[{"type":"boolean","description":"Food-contact packaging. Blank = `false` on a create and unchanged on an update; an explicit `false` switches a stored `true` off (an overwrite). Switching it off is refused with `foodContactOffWithPfasData` while PFAS data is stored for the component — the import never deletes it; switch food contact off in the app's component editor, which removes the PFAS data. Implies `contactSensitive`; when the row states a flag or a PFAS value, both rules are checked on the stored values merged with the row, so a blank flag on an update is judged by the stored one.","uniqueKey":"oneOf.1.rows.items.[INDEX].foodContact.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Food-contact packaging. Blank = `false` on a create and unchanged on an update; an explicit `false` switches a stored `true` off (an overwrite). Switching it off is refused with `foodContactOffWithPfasData` while PFAS data is stored for the component — the import never deletes it; switch food contact off in the app's component editor, which removes the PFAS data. Implies `contactSensitive`; when the row states a flag or a PFAS value, both rules are checked on the stored values merged with the row, so a blank flag on an update is judged by the stored one.","uniqueKey":"oneOf.1.rows.items.[INDEX].foodContact.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].foodContact","typeLabel":"boolean | null"},"heavyMetalsMgPerKg":{"oneOf":[{"type":"string","description":"Sum of the four regulated heavy metals, mg/kg.","uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsMgPerKg.oneOf.0","typeLabel":"string"},{"type":"null","description":"Sum of the four regulated heavy metals, mg/kg.","uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsMgPerKg.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsMgPerKg","typeLabel":"string | null"},"heavyMetalsBasis":{"oneOf":[{"type":"string","enum":["test_report","supplier_declaration","not_substantiated",null],"description":"Provenance of the heavy-metals claim.","uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsBasis.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["test_report","supplier_declaration","not_substantiated",null],"description":"Provenance of the heavy-metals claim.","uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsBasis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsBasis","typeLabel":"enum\u003cstring> | null"},"heavyMetalsMethod":{"oneOf":[{"type":"string","description":"Annex VII d) measurement standard (free text, e.g. `CEN/CR 13695-1`). Accepted on every component.","uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsMethod.oneOf.0","typeLabel":"string"},{"type":"null","description":"Annex VII d) measurement standard (free text, e.g. `CEN/CR 13695-1`). Accepted on every component.","uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsMethod.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].heavyMetalsMethod","typeLabel":"string | null"},"pfasCompliant":{"oneOf":[{"type":"boolean","description":"Tri-state: blank = unknown. Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasCompliant.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Tri-state: blank = unknown. Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasCompliant.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].pfasCompliant","typeLabel":"boolean | null"},"pfasBasis":{"oneOf":[{"type":"string","enum":["test_report","supplier_declaration","not_substantiated",null],"description":"Provenance of the PFAS claim. Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasBasis.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["test_report","supplier_declaration","not_substantiated",null],"description":"Provenance of the PFAS claim. Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasBasis.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].pfasBasis","typeLabel":"enum\u003cstring> | null"},"pfasMethod":{"oneOf":[{"type":"string","description":"PFAS measurement method (free text). Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasMethod.oneOf.0","typeLabel":"string"},{"type":"null","description":"PFAS measurement method (free text). Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasMethod.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].pfasMethod","typeLabel":"string | null"},"pfasSumPpb":{"oneOf":[{"type":"string","description":"Measured PFAS sum in ppb. Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasSumPpb.oneOf.0","typeLabel":"string"},{"type":"null","description":"Measured PFAS sum in ppb. Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasSumPpb.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].pfasSumPpb","typeLabel":"string | null"},"pfasTotalFluorineMgPerKg":{"oneOf":[{"type":"string","description":"Total fluorine in mg/kg — the screening route. Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasTotalFluorineMgPerKg.oneOf.0","typeLabel":"string"},{"type":"null","description":"Total fluorine in mg/kg — the screening route. Food-contact components only.","uniqueKey":"oneOf.1.rows.items.[INDEX].pfasTotalFluorineMgPerKg.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].pfasTotalFluorineMgPerKg","typeLabel":"string | null"},"notes":{"oneOf":[{"type":"string","description":"Free-text notes.","uniqueKey":"oneOf.1.rows.items.[INDEX].notes.oneOf.0","typeLabel":"string"},{"type":"null","description":"Free-text notes.","uniqueKey":"oneOf.1.rows.items.[INDEX].notes.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.rows.items.[INDEX].notes","typeLabel":"string | null"}},"required":["code","name","materials"],"description":"One packaging-component row for `POST /api/v1/ppwr/components`. Upsert key: `code` + resolved supplier. Cells are coerced exactly as the in-app CSV/Excel importer coerces them, so a JSON-native value and its string spelling are equivalent (`12` = `\"12\"`, `[\"plastic\"]` = `\"plastic;paper_board\"`, `true` = `\"yes\"`/`\"ja\"`/`\"1\"`). An empty or omitted field is a no-op — it never clears a stored value. Cross-field rules (each rejects the row with the named key): a `recycledContentPct` above 0 requires `recycledContentSource` **and** `recycledContentMethod` (`recycledProvenanceRequired`); `foodContact` requires `contactSensitive` (`foodContactImpliesContactSensitive`); the five PFAS fields are only accepted on a food-contact component (`pfasOnlyFoodContact`); switching `foodContact` off while PFAS data is stored is refused (`foodContactOffWithPfasData`). On an update these rules read a blank flag as the stored value.","uniqueKey":"oneOf.1.rows.items.[INDEX]","typeLabel":"object"},"maxItems":1000,"description":"The rows, at most 1000 per request.","isRequired":true,"uniqueKey":"oneOf.1.rows","typeLabel":"object[]"},"overwrite":{"type":"boolean","default":false,"description":"Authorises overwriting values that are already filled (including supplier- and AI-attested ones). Without it a batch containing any such change is refused with `409 overwriteRequired` and **nothing** is written.","uniqueKey":"oneOf.1.overwrite","typeLabel":"boolean"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object[] | object"},"example":{"rows":[{"code":"K-1","name":"Folding box","materials":["paper_board"],"massGrams":"12.5","recycledContentPct":"80","recycledContentSource":"pcr","recycledContentMethod":"physical","heavyMetalsMgPerKg":"12","heavyMetalsBasis":"test_report","heavyMetalsMethod":"CEN/CR 13695-1"}],"overwrite":false},"examples":{"Example":{"title":"Example","value":{"rows":[{"code":"K-1","name":"Folding box","materials":["paper_board"],"massGrams":"12.5","recycledContentPct":"80","recycledContentSource":"pcr","recycledContentMethod":"physical","heavyMetalsMgPerKg":"12","heavyMetalsBasis":"test_report","heavyMetalsMethod":"CEN/CR 13695-1"}],"overwrite":false}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"2678b182-6730-409d-bbdd-e2d4f9cff71b":{"description":"Intake result (partial accept — see the schema).","content":{"application/json":{"schema":{"type":"object","description":"Result of a synchronous PPWR intake. **Partial accept:** valid rows commit even when other rows are `invalid` or `failed` — the one exception is the `409` overwrite confirmation, which is all-or-nothing. **Idempotent:** replaying an identical request changes nothing (matched rows return as `skipped`), except unit rows without `internalRef`, which are always creates.","required":["imported","updated","skipped","failed","invalid"],"properties":{"imported":{"type":"integer","description":"ENTITIES created (units, components, links) — never sizes.","isRequired":true,"uniqueKey":"imported","typeLabel":"integer"},"updated":{"type":"array","items":{"type":"string","uniqueKey":"updated.items.[INDEX]","typeLabel":"string"},"description":"Identifiers of rows whose existing match changed. A size created on an existing unit appears as `\u003cunit ref> / \u003csize ref>`.","isRequired":true,"uniqueKey":"updated","typeLabel":"string[]"},"skipped":{"type":"array","items":{"type":"string","uniqueKey":"skipped.items.[INDEX]","typeLabel":"string"},"description":"Identifiers of rows that matched with nothing to change.","isRequired":true,"uniqueKey":"skipped","typeLabel":"string[]"},"failed":{"type":"array","items":{"type":"object","description":"A row the upsert engine rejected. Carries no `index` — the engine reports by identifier.","properties":{"identifier":{"type":"string","description":"Identifies the rejected row, e.g. its `code` (components) or `internalRef` (units).","uniqueKey":"failed.items.[INDEX].identifier","typeLabel":"string"},"error":{"type":"string","description":"Stable machine key (clamped: anything unexpected becomes `dbError`).","uniqueKey":"failed.items.[INDEX].error","typeLabel":"string"}},"uniqueKey":"failed.items.[INDEX]","typeLabel":"object"},"description":"Rows the upsert engine rejected (unknown reference, ambiguous match, a new unit over the plan's unit quota → `packagingUnitQuotaReached`, …). A row refused before its write (these, and a new unit over the quota) writes nothing — not even the supplier it names; a unit written whose component or article link then failed is reported here with that link's key. Its `error` values are stable machine keys.","isRequired":true,"uniqueKey":"failed","typeLabel":"object[]"},"invalid":{"type":"array","items":{"type":"object","description":"A row rejected before the upsert engine ran, reported by its position in the request.","properties":{"index":{"type":"integer","description":"0-based position of the row in the request.","uniqueKey":"invalid.items.[INDEX].index","typeLabel":"integer"},"identifier":{"type":"string","description":"The row's key as sent (`code`, `internalRef`, `specInternalRef` or `zsvrCategory`, depending on the endpoint); empty string when the row carried none.","uniqueKey":"invalid.items.[INDEX].identifier","typeLabel":"string"},"error":{"type":"string","description":"Usually a stable machine key; a field with no custom message falls back to the validator's own English text.","uniqueKey":"invalid.items.[INDEX].error","typeLabel":"string"}},"uniqueKey":"invalid.items.[INDEX]","typeLabel":"object"},"description":"Rows rejected by schema validation before the engine ran. Most `error` values are stable machine keys, but a field with no custom message falls back to the validator's own English text — match on the key, fall back to displaying the string.","isRequired":true,"uniqueKey":"invalid","typeLabel":"object[]"},"sizesCreated":{"type":"integer","description":"Unit intake only: sizes created for the rows' units.","uniqueKey":"sizesCreated","typeLabel":"integer"},"articleNumbersUnmatched":{"type":"integer","description":"Unit intake only: distinct `articleNumbers` no live article matched. Skipped, never a row error.","uniqueKey":"articleNumbersUnmatched","typeLabel":"integer"},"articleLinksCreated":{"type":"integer","description":"Unit intake only: unit⇄article links created from `articleNumbers`.","uniqueKey":"articleLinksCreated","typeLabel":"integer"},"componentLinksCreated":{"type":"integer","description":"Unit intake only: unit⇄component links created from `componentCodes`.","uniqueKey":"componentLinksCreated","typeLabel":"integer"},"componentStubsCreated":{"type":"integer","description":"Unit intake only: minimal placeholder components created for unknown `componentCodes`.","uniqueKey":"componentStubsCreated","typeLabel":"integer"},"suppliersCreated":{"type":"array","items":{"type":"string","uniqueKey":"suppliersCreated.items.[INDEX]","typeLabel":"string"},"description":"Unit + component intake: names of the name-only suppliers created for `supplierName`s that matched no existing supplier.","uniqueKey":"suppliersCreated","typeLabel":"string[]"},"unitsWithoutComponents":{"type":"integer","description":"Unit intake only: units created with neither `componentCodes` nor a `material`. They hold no component yet, so no regulated value can be recorded on them — send `componentCodes`, or `material` for single-part packaging.","uniqueKey":"unitsWithoutComponents","typeLabel":"integer"},"mainPartsCreated":{"type":"integer","description":"Unit intake only: main-part components created from rows' `material` (one per unit that had no component yet).","uniqueKey":"mainPartsCreated","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"imported":1,"updated":[],"skipped":[],"failed":[],"invalid":[],"suppliersCreated":[]},"examples":{"Example":{"title":"Example","value":{"imported":1,"updated":[],"skipped":[],"failed":[],"invalid":[],"suppliersCreated":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"8ac6bc2e-5bf5-41f1-bd1a-dbca6fdafabd":{"description":"Invalid request data","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable message, or a stable machine key (e.g. `batchTooLarge`, `overwriteRequired`, `duplicate`) on the batch, PPWR and upload endpoints.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code on some `400` and `409` answers, e.g. `plot_geometry_invalid` or `FORK_HAS_ORDER`. Match on it rather than on `error`. Further flat keys may accompany it (e.g. `precisionDigits`, `field`).","uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine code of the issue, e.g. `invalid_type`, `too_small`, `custom`.","isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"string"},"path":{"type":"array","items":{"oneOf":[{"type":"string","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string | number"},"description":"Location of the offending value in the request: object keys and 0-based array positions.","isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"(string | number)[]"},"message":{"type":"string","description":"Human-readable English explanation. The wording may change; match on `code` and `path`.","isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["code","path","message"],"additionalProperties":{"oneOf":[{}],"uniqueKey":"details.items.[INDEX].additionalProperties","typeLabel":"any"},"description":"One validation issue. Issue-specific keys (e.g. `expected`, `minimum`) may accompany the three listed.","uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"description":"The validation issues on a `400` validation error.","uniqueKey":"details","typeLabel":"object[]"},"warnings":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["duplicateName","duplicateEan"],"description":"`duplicateName`: a live article of your company already has this name. `duplicateEan`: a live article already has this EAN.","isRequired":true,"uniqueKey":"warnings.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"existingInternalArticleNr":{"type":"string","description":"`duplicateName` only: internal article number of the existing article.","uniqueKey":"warnings.items.[INDEX].existingInternalArticleNr","typeLabel":"string"},"existingArticleName":{"type":"string","description":"`duplicateEan` only: name of the existing article.","uniqueKey":"warnings.items.[INDEX].existingArticleName","typeLabel":"string"}},"required":["type"],"uniqueKey":"warnings.items.[INDEX]","typeLabel":"object"},"description":"`POST /articles` `409` only: soft duplicate warnings. Resend with `acknowledgeWarnings: true` to create the article anyway.","uniqueKey":"warnings","typeLabel":"object[]"}},"required":["error"],"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"description":"Error body of every endpoint except the `429` the edge answers. Some errors add flat machine-readable keys next to `error`, e.g. `maxBatchSize` on `413 batchTooLarge` or `confirmUpdateCount` on `409 overwriteRequired`.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Validation failed","details":[{"origin":"string","code":"too_small","minimum":1,"inclusive":true,"path":["address","street"],"message":"Address is required."}]},"examples":{"Example":{"title":"Example","value":{"error":"Validation failed","details":[{"origin":"string","code":"too_small","minimum":1,"inclusive":true,"path":["address","street"],"message":"Address is required."}]}}},"exampleType":"examples"}},"exampleType":"examples"},"93844ed1-360b-4ee3-bf6b-0e0dae70113f":{"description":"Invalid or expired API key, or the key's user account is not active.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable message, or a stable machine key (e.g. `batchTooLarge`, `overwriteRequired`, `duplicate`) on the batch, PPWR and upload endpoints.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code on some `400` and `409` answers, e.g. `plot_geometry_invalid` or `FORK_HAS_ORDER`. Match on it rather than on `error`. Further flat keys may accompany it (e.g. `precisionDigits`, `field`).","uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine code of the issue, e.g. `invalid_type`, `too_small`, `custom`.","isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"string"},"path":{"type":"array","items":{"oneOf":[{"type":"string","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string | number"},"description":"Location of the offending value in the request: object keys and 0-based array positions.","isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"(string | number)[]"},"message":{"type":"string","description":"Human-readable English explanation. The wording may change; match on `code` and `path`.","isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["code","path","message"],"additionalProperties":{"oneOf":[{}],"uniqueKey":"details.items.[INDEX].additionalProperties","typeLabel":"any"},"description":"One validation issue. Issue-specific keys (e.g. `expected`, `minimum`) may accompany the three listed.","uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"description":"The validation issues on a `400` validation error.","uniqueKey":"details","typeLabel":"object[]"},"warnings":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["duplicateName","duplicateEan"],"description":"`duplicateName`: a live article of your company already has this name. `duplicateEan`: a live article already has this EAN.","isRequired":true,"uniqueKey":"warnings.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"existingInternalArticleNr":{"type":"string","description":"`duplicateName` only: internal article number of the existing article.","uniqueKey":"warnings.items.[INDEX].existingInternalArticleNr","typeLabel":"string"},"existingArticleName":{"type":"string","description":"`duplicateEan` only: name of the existing article.","uniqueKey":"warnings.items.[INDEX].existingArticleName","typeLabel":"string"}},"required":["type"],"uniqueKey":"warnings.items.[INDEX]","typeLabel":"object"},"description":"`POST /articles` `409` only: soft duplicate warnings. Resend with `acknowledgeWarnings: true` to create the article anyway.","uniqueKey":"warnings","typeLabel":"object[]"}},"required":["error"],"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"description":"Error body of every endpoint except the `429` the edge answers. Some errors add flat machine-readable keys next to `error`, e.g. `maxBatchSize` on `413 batchTooLarge` or `confirmUpdateCount` on `409 overwriteRequired`.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Invalid or expired API key"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid or expired API key"}}},"exampleType":"examples"}},"exampleType":"examples"},"84b7251d-ee1c-449e-a89b-613bdeb56d6b":{"description":"Insufficient permissions for this resource","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable message, or a stable machine key (e.g. `batchTooLarge`, `overwriteRequired`, `duplicate`) on the batch, PPWR and upload endpoints.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code on some `400` and `409` answers, e.g. `plot_geometry_invalid` or `FORK_HAS_ORDER`. Match on it rather than on `error`. Further flat keys may accompany it (e.g. `precisionDigits`, `field`).","uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine code of the issue, e.g. `invalid_type`, `too_small`, `custom`.","isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"string"},"path":{"type":"array","items":{"oneOf":[{"type":"string","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string | number"},"description":"Location of the offending value in the request: object keys and 0-based array positions.","isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"(string | number)[]"},"message":{"type":"string","description":"Human-readable English explanation. The wording may change; match on `code` and `path`.","isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["code","path","message"],"additionalProperties":{"oneOf":[{}],"uniqueKey":"details.items.[INDEX].additionalProperties","typeLabel":"any"},"description":"One validation issue. Issue-specific keys (e.g. `expected`, `minimum`) may accompany the three listed.","uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"description":"The validation issues on a `400` validation error.","uniqueKey":"details","typeLabel":"object[]"},"warnings":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["duplicateName","duplicateEan"],"description":"`duplicateName`: a live article of your company already has this name. `duplicateEan`: a live article already has this EAN.","isRequired":true,"uniqueKey":"warnings.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"existingInternalArticleNr":{"type":"string","description":"`duplicateName` only: internal article number of the existing article.","uniqueKey":"warnings.items.[INDEX].existingInternalArticleNr","typeLabel":"string"},"existingArticleName":{"type":"string","description":"`duplicateEan` only: name of the existing article.","uniqueKey":"warnings.items.[INDEX].existingArticleName","typeLabel":"string"}},"required":["type"],"uniqueKey":"warnings.items.[INDEX]","typeLabel":"object"},"description":"`POST /articles` `409` only: soft duplicate warnings. Resend with `acknowledgeWarnings: true` to create the article anyway.","uniqueKey":"warnings","typeLabel":"object[]"}},"required":["error"],"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"description":"Error body of every endpoint except the `429` the edge answers. Some errors add flat machine-readable keys next to `error`, e.g. `maxBatchSize` on `413 batchTooLarge` or `confirmUpdateCount` on `409 overwriteRequired`.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Forbidden"},"examples":{"Example":{"title":"Example","value":{"error":"Forbidden"}}},"exampleType":"examples"}},"exampleType":"examples"},"cf267e80-29b3-4095-863f-11eb6ac043c0":{"description":"Unconfirmed overwrite — nothing was written.","content":{"application/json":{"schema":{"type":"object","description":"The batch contains at least one change that would overwrite an already-filled value. Nothing was written — resubmit with `overwrite: true`, or drop those rows.","required":["error","confirmUpdateCount"],"properties":{"error":{"type":"string","enum":["overwriteRequired"],"description":"Always `overwriteRequired`.","isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"confirmUpdateCount":{"type":"integer","description":"How many rows in the batch need confirmation.","isRequired":true,"uniqueKey":"confirmUpdateCount","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"overwriteRequired","confirmUpdateCount":1},"examples":{"Example":{"title":"Example","value":{"error":"overwriteRequired","confirmUpdateCount":1}}},"exampleType":"examples"}},"exampleType":"examples"},"d008db56-e354-4c4d-9478-fbc2b4fd4e34":{"description":"Rate limit exceeded: currently 1000 requests per 60 seconds per client IP across all `/api` paths. Issued by the edge before the application runs, so the JSON body differs from every other error: `error` is an object. A `429` with an HTML body instead of JSON means the request carried no API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"],"description":"Always `rate_limited`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"description":"Unlike every other error body, `error` is an object here.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"rate_limited","message":"…"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"…"}}}},"exampleType":"examples"}},"exampleType":"examples"},"26566346-20bd-4612-a740-72d975f8030b":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable message, or a stable machine key (e.g. `batchTooLarge`, `overwriteRequired`, `duplicate`) on the batch, PPWR and upload endpoints.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code on some `400` and `409` answers, e.g. `plot_geometry_invalid` or `FORK_HAS_ORDER`. Match on it rather than on `error`. Further flat keys may accompany it (e.g. `precisionDigits`, `field`).","uniqueKey":"code","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Machine code of the issue, e.g. `invalid_type`, `too_small`, `custom`.","isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"string"},"path":{"type":"array","items":{"oneOf":[{"type":"string","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string | number"},"description":"Location of the offending value in the request: object keys and 0-based array positions.","isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"(string | number)[]"},"message":{"type":"string","description":"Human-readable English explanation. The wording may change; match on `code` and `path`.","isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"}},"required":["code","path","message"],"additionalProperties":{"oneOf":[{}],"uniqueKey":"details.items.[INDEX].additionalProperties","typeLabel":"any"},"description":"One validation issue. Issue-specific keys (e.g. `expected`, `minimum`) may accompany the three listed.","uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"description":"The validation issues on a `400` validation error.","uniqueKey":"details","typeLabel":"object[]"},"warnings":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["duplicateName","duplicateEan"],"description":"`duplicateName`: a live article of your company already has this name. `duplicateEan`: a live article already has this EAN.","isRequired":true,"uniqueKey":"warnings.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"existingInternalArticleNr":{"type":"string","description":"`duplicateName` only: internal article number of the existing article.","uniqueKey":"warnings.items.[INDEX].existingInternalArticleNr","typeLabel":"string"},"existingArticleName":{"type":"string","description":"`duplicateEan` only: name of the existing article.","uniqueKey":"warnings.items.[INDEX].existingArticleName","typeLabel":"string"}},"required":["type"],"uniqueKey":"warnings.items.[INDEX]","typeLabel":"object"},"description":"`POST /articles` `409` only: soft duplicate warnings. Resend with `acknowledgeWarnings: true` to create the article anyway.","uniqueKey":"warnings","typeLabel":"object[]"}},"required":["error"],"additionalProperties":{"oneOf":[{}],"uniqueKey":"additionalProperties","typeLabel":"any"},"description":"Error body of every endpoint except the `429` the edge answers. Some errors add flat machine-readable keys next to `error`, e.g. `maxBatchSize` on `413 batchTooLarge` or `confirmUpdateCount` on `409 overwriteRequired`.","uniqueKey":"","typeLabel":"object"},"example":{"error":"Internal server error"},"examples":{"Example":{"title":"Example","value":{"error":"Internal server error"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"bae4c7a0-d716-46dc-bfdc-909a8704f12f":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"API key generated in Settings > API Keys. Include as `Authorization: Bearer \u003ckey>`.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"525ee7a2-0b29-4150-83c9-6311c95aea37":{"url":"https://app.polygon-one.com","description":"Production Server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"API key generated in Settings > API Keys. Include as `Authorization: Bearer \u003ckey>`.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key generated in Settings > API Keys. Include as `Authorization: Bearer \u003ckey>`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"polygonone","siteName":"Polygon One Helpcenter","title":"Upsert Packaging Components - Polygon One Helpcenter","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"de":{"href":"/api-reference/endpoint/ppwr/components/upsert","matchLevel":1},"en":{"href":"/en/api-reference/endpoint/ppwr/components/upsert","matchLevel":0},"fr":{"href":"/fr/lieferanten/start","matchLevel":4},"es":{"href":"/es/lieferanten/start","matchLevel":4},"zh":{"href":"/zh/lieferanten/start","matchLevel":4}}},"lastModified":"2026-09-14T11:37:40.563Z","originalFileLocation":"en/api-reference/endpoint/ppwr/components/upsert.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;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=\"system\"}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=\"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: code plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs overwrite: true — without it the whole batch is refused with 409 and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (400 otherwise). Requires packaging:write; customer workspace with the PPWR module enabled — see the guide.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Polygon One Helpcenter\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/polygonone/32k2Y3_9P8MpmQgs/_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/polygonone/32k2Y3_9P8MpmQgs/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/polygonone/32k2Y3_9P8MpmQgs/_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/polygonone/32k2Y3_9P8MpmQgs/_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/polygonone/32k2Y3_9P8MpmQgs/_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/polygonone/32k2Y3_9P8MpmQgs/_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/polygonone/32k2Y3_9P8MpmQgs/_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/polygonone/32k2Y3_9P8MpmQgs/_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/polygonone/32k2Y3_9P8MpmQgs/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Upsert Packaging Components - Polygon One Helpcenter\">\u003cmeta data-mint-head property=\"og:description\" content=\"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: code plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs overwrite: true — without it the whole batch is refused with 409 and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (400 otherwise). Requires packaging:write; customer workspace with the PPWR module enabled — see the guide.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Polygon One Helpcenter\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://polygonone.mintlify.app/_mintlify/api/og/v2?division=PPWR+%E2%80%93+Packaging+Data\u0026amp;title=Upsert+Packaging+Components\u0026amp;description=Bulk+upsert+of+packaging+components+%E2%80%94+the+same+engine%2C+row+schema%2C+validation+and+idempotency+as+the+in-app+CSV%2FExcel+importer.+Upsert+key%3A+%60code%60+plus+the+reso\u0026amp;theme=0c175d962800f7cffd688852\u0026amp;signature=d2fd3e1d87653c2535f83cc761d97fe487975f302b5bc95d29b4a78cdc77367f\">\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=\"Upsert Packaging Components - Polygon One Helpcenter\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: code plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs overwrite: true — without it the whole batch is refused with 409 and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (400 otherwise). Requires packaging:write; customer workspace with the PPWR module enabled — see the guide.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://polygonone.mintlify.app/_mintlify/api/og/v2?division=PPWR+%E2%80%93+Packaging+Data\u0026amp;title=Upsert+Packaging+Components\u0026amp;description=Bulk+upsert+of+packaging+components+%E2%80%94+the+same+engine%2C+row+schema%2C+validation+and+idempotency+as+the+in-app+CSV%2FExcel+importer.+Upsert+key%3A+%60code%60+plus+the+reso\u0026amp;theme=0c175d962800f7cffd688852\u0026amp;signature=d2fd3e1d87653c2535f83cc761d97fe487975f302b5bc95d29b4a78cdc77367f\">\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/polygonone/32k2Y3_9P8MpmQgs/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Polygon One Helpcenter\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#15803D\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/api-reference/endpoint/ppwr/components/upsert.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://help.polygon-one.com/api-reference/endpoint/ppwr/components/upsert\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://help.polygon-one.com/api-reference/endpoint/ppwr/components/upsert\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.polygon-one.com/#organization\",\"name\":\"Polygon One Helpcenter\",\"url\":\"https://help.polygon-one.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/polygonone/AMoRp9VbcW46gNsT/logo/light.svg?fit=max\u0026auto=format\u0026n=AMoRp9VbcW46gNsT\u0026q=85\u0026s=4a316da81d50e49c7f9f6480a235558e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.polygon-one.com#website\",\"name\":\"Polygon One Helpcenter\",\"url\":\"https://help.polygon-one.com\",\"publisher\":{\"@id\":\"https://help.polygon-one.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert#webpage\",\"url\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert\",\"name\":\"Upsert Packaging Components\",\"description\":\"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: code plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs overwrite: true — without it the whole batch is refused with 409 and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (400 otherwise). Requires packaging:write; customer workspace with the PPWR module enabled — see the guide.\",\"dateModified\":\"2026-09-14T11:37:40.563Z\",\"isPartOf\":{\"@id\":\"https://help.polygon-one.com#website\"},\"breadcrumb\":{\"@id\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"PPWR – Packaging Data\",\"item\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/list\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upsert Packaging Components\",\"item\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert#apireference\",\"headline\":\"Upsert Packaging Components\",\"name\":\"Upsert Packaging Components\",\"description\":\"Bulk upsert of packaging components — the same engine, row schema, validation and idempotency as the in-app CSV/Excel importer. Upsert key: code plus the resolved supplier. Fill-only by default: an empty cell never clears a stored value, a cell that fills an empty field is applied automatically, and a cell that would overwrite a non-empty (including supplier- or AI-attested) value needs overwrite: true — without it the whole batch is refused with 409 and nothing is written. Provenance and evidence columns are never writable through this API. At most 1000 rows per request (400 otherwise). Requires packaging:write; customer workspace with the PPWR module enabled — see the guide.\",\"url\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert\",\"mainEntityOfPage\":{\"@id\":\"https://help.polygon-one.com/en/api-reference/endpoint/ppwr/components/upsert#webpage\"},\"dateModified\":\"2026-09-14T11:37:40.563Z\",\"publisher\":{\"@id\":\"https://help.polygon-one.com/#organization\"},\"isPartOf\":{\"@id\":\"https://help.polygon-one.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Polygon One Helpcenter\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Polygon One Helpcenter","nav":{"global":{"anchors":[]},"languages":[{"language":"de","default":true,"pages":[{"title":"de","href":"/api-reference/endpoint/ppwr/components/upsert"}]},{"language":"en","tabs":[{"tab":"EUDR","pages":[{"title":"EUDR","href":"/en"}]},{"tab":"PPWR","pages":[{"title":"PPWR","href":"/en/ppwr/uebersicht"}]},{"tab":"API Reference","groups":[{"group":"API Documentation","pages":[{"title":"Introduction","href":"/en/api-reference/introduction"},{"title":"Quickstart","href":"/en/api-reference/quickstart"},{"title":"Recommended integration flows","sidebarTitle":"Integration flows","href":"/en/api-reference/integration-flows"},{"title":"Connect Claude, ChatGPT and Copilot (MCP)","sidebarTitle":"AI assistants (MCP)","href":"/en/api-reference/ki-assistenten"},{"title":"Batch Import (async)","href":"/en/api-reference/batch-import"},{"title":"Orders: lines, positions, status, delta sync","sidebarTitle":"Orders","href":"/en/api-reference/orders"},{"title":"PPWR: Packaging Data, Quantities, Volume Reports","href":"/en/api-reference/ppwr"},{"title":"Geo analysis over the API","href":"/en/api-reference/geo-analysis"},{"title":"Errors \u0026 limits","href":"/en/api-reference/errors-and-limits"},{"title":"Changelog","href":"/en/api-reference/changelog"}]},{"group":"Articles","pages":[{"title":"List Articles","openapi":"GET /api/v1/articles","href":"/en/api-reference/endpoint/articles/list"},{"title":"Create Article","openapi":"POST /api/v1/articles","href":"/en/api-reference/endpoint/articles/create"},{"title":"Get Article by ID","openapi":"GET /api/v1/articles/{id}","href":"/en/api-reference/endpoint/articles/get"},{"title":"Update Article","openapi":"PATCH /api/v1/articles/{id}","href":"/en/api-reference/endpoint/articles/update"},{"title":"Delete Article","openapi":"DELETE /api/v1/articles/{id}","href":"/en/api-reference/endpoint/articles/delete"}]},{"group":"Suppliers","pages":[{"title":"List Suppliers","openapi":"GET /api/v1/suppliers","href":"/en/api-reference/endpoint/suppliers/list"},{"title":"Create Supplier","openapi":"POST /api/v1/suppliers","href":"/en/api-reference/endpoint/suppliers/create"},{"title":"Get Supplier by ID","openapi":"GET /api/v1/suppliers/{id}","href":"/en/api-reference/endpoint/suppliers/get"},{"title":"Update Supplier","openapi":"PATCH /api/v1/suppliers/{id}","href":"/en/api-reference/endpoint/suppliers/update"},{"title":"Delete Supplier","openapi":"DELETE /api/v1/suppliers/{id}","href":"/en/api-reference/endpoint/suppliers/delete"}]},{"group":"Plots","pages":[{"title":"List Plots","openapi":"GET /api/v1/plots","href":"/en/api-reference/endpoint/plots/list"},{"title":"Create Plot","openapi":"POST /api/v1/plots","href":"/en/api-reference/endpoint/plots/create"},{"title":"Validate Plot Geometry","openapi":"POST /api/v1/plots/validate","href":"/en/api-reference/endpoint/plots/validate"},{"title":"Get Plot by ID","openapi":"GET /api/v1/plots/{id}","href":"/en/api-reference/endpoint/plots/get"},{"title":"Download Plot Report","openapi":"GET /api/v1/plots/{id}/report","href":"/en/api-reference/endpoint/plots/report"},{"title":"Update Plot Links","openapi":"PATCH /api/v1/plots/{id}","href":"/en/api-reference/endpoint/plots/update"},{"title":"Delete Plot","openapi":"DELETE /api/v1/plots/{id}","href":"/en/api-reference/endpoint/plots/delete"}]},{"group":"Evidence","pages":[{"title":"Create Evidence Upload URL","openapi":"POST /api/v1/evidence/upload-url","href":"/en/api-reference/endpoint/evidence/upload-url"},{"title":"Attach Evidence","openapi":"POST /api/v1/evidence","href":"/en/api-reference/endpoint/evidence/create"},{"title":"List Evidence","openapi":"GET /api/v1/evidence","href":"/en/api-reference/endpoint/evidence/list"}]},{"group":"Orders","pages":[{"title":"List Orders","openapi":"GET /api/v1/orders","href":"/en/api-reference/endpoint/orders/list"},{"title":"Create Order","openapi":"POST /api/v1/orders","href":"/en/api-reference/endpoint/orders/create"},{"title":"Get Order by ID","openapi":"GET /api/v1/orders/{id}","href":"/en/api-reference/endpoint/orders/get"},{"title":"Update Order","openapi":"PATCH /api/v1/orders/{id}","href":"/en/api-reference/endpoint/orders/update"},{"title":"Delete Order","openapi":"DELETE /api/v1/orders/{id}","href":"/en/api-reference/endpoint/orders/delete"},{"title":"Request Supplier Origin Confirmation","openapi":"POST /api/v1/orders/{id}/origin-confirmation","href":"/en/api-reference/endpoint/orders/origin-confirmation"}]},{"group":"Import Jobs","pages":[{"title":"Get Import Job","openapi":"GET /api/v1/import-jobs/{jobId}","href":"/en/api-reference/endpoint/import-jobs/get"}]},{"group":"DDS Statements","pages":[{"title":"List DDS Statements","openapi":"GET /api/v1/dds-statements","href":"/en/api-reference/endpoint/dds-statements/list"},{"title":"Create DDS Statement","openapi":"POST /api/v1/dds-statements","href":"/en/api-reference/endpoint/dds-statements/create"},{"title":"Get DDS Statement","openapi":"GET /api/v1/dds-statements/{id}","href":"/en/api-reference/endpoint/dds-statements/get"},{"title":"Update DDS Statement","openapi":"PATCH /api/v1/dds-statements/{id}","href":"/en/api-reference/endpoint/dds-statements/update"},{"title":"Delete DDS Statement","openapi":"DELETE /api/v1/dds-statements/{id}","href":"/en/api-reference/endpoint/dds-statements/delete"}]},{"group":"PPWR – Packaging Data","pages":[{"title":"List Packaging Components","openapi":"GET /api/v1/ppwr/components","description":"Retrieve your company's live packaging components as stored. Soft-deleted components are never returned. Rows are ordered naturally by `code` (`CMP-2` before `CMP-10`), then by `id`, so paging can neither repeat nor skip a component. Requires `packaging:read` (a `packaging:write` key satisfies it); customer workspace with the PPWR module enabled.","href":"/en/api-reference/endpoint/ppwr/components/list"},{"title":"Upsert Packaging Components","openapi":"POST /api/v1/ppwr/components","href":"/en/api-reference/endpoint/ppwr/components/upsert"},{"title":"Get Packaging Component by ID","openapi":"GET /api/v1/ppwr/components/{id}","description":"Retrieve one packaging component as stored. A component of another company, a soft-deleted component and an `id` that is not a UUID all answer `404` — never `403`. Requires `packaging:read` (a `packaging:write` key satisfies it); customer workspace with the PPWR module enabled.","href":"/en/api-reference/endpoint/ppwr/components/get"},{"title":"List Packaging Units","openapi":"GET /api/v1/ppwr/units","href":"/en/api-reference/endpoint/ppwr/units/list"},{"title":"Upsert Packaging Units","openapi":"POST /api/v1/ppwr/units","href":"/en/api-reference/endpoint/ppwr/units/upsert"},{"title":"Get Packaging Unit by ID","openapi":"GET /api/v1/ppwr/units/{id}","href":"/en/api-reference/endpoint/ppwr/units/get"},{"title":"Upsert Packaging Sizes","openapi":"POST /api/v1/ppwr/formats","href":"/en/api-reference/endpoint/ppwr/formats/upsert"},{"title":"Create Bill-of-Materials Links","openapi":"POST /api/v1/ppwr/links","href":"/en/api-reference/endpoint/ppwr/links/create"},{"title":"Create Article Links","openapi":"POST /api/v1/ppwr/article-links","href":"/en/api-reference/endpoint/ppwr/article-links/create"}]},{"group":"PPWR – Documents","pages":[{"title":"Create Document Upload URL","openapi":"POST /api/v1/ppwr/documents/upload-url","href":"/en/api-reference/endpoint/ppwr/documents/upload-url"},{"title":"Attach Document","openapi":"POST /api/v1/ppwr/documents","href":"/en/api-reference/endpoint/ppwr/documents/create"}]},{"group":"PPWR – Declarations of Conformity","pages":[{"title":"List Declarations of Conformity","openapi":"GET /api/v1/ppwr/declarations","href":"/en/api-reference/endpoint/ppwr/declarations/list"},{"title":"Get Declaration of Conformity by ID","openapi":"GET /api/v1/ppwr/declarations/{id}","href":"/en/api-reference/endpoint/ppwr/declarations/get"},{"title":"Download Declaration of Conformity","openapi":"GET /api/v1/ppwr/declarations/{id}/pdf","href":"/en/api-reference/endpoint/ppwr/declarations/pdf"}]},{"group":"PPWR – Quantities \u0026 Volume Reports","pages":[{"title":"Push SKU Quantities","openapi":"POST /api/v1/ppwr/quantities","href":"/en/api-reference/endpoint/ppwr/quantities/create"},{"title":"Push Material Tonnage","openapi":"POST /api/v1/ppwr/tonnage","href":"/en/api-reference/endpoint/ppwr/tonnage/create"},{"title":"Delete Material Tonnage","openapi":"DELETE /api/v1/ppwr/tonnage","href":"/en/api-reference/endpoint/ppwr/tonnage/delete"},{"title":"List Volume Reports","openapi":"GET /api/v1/ppwr/mengenmeldung/reports","href":"/en/api-reference/endpoint/ppwr/mengenmeldung/list"},{"title":"Generate Volume Report","openapi":"POST /api/v1/ppwr/mengenmeldung/reports","href":"/en/api-reference/endpoint/ppwr/mengenmeldung/create"},{"title":"Download Volume Report File","openapi":"GET /api/v1/ppwr/mengenmeldung/{reportId}/xml","href":"/en/api-reference/endpoint/ppwr/mengenmeldung/download"}]}]},{"tab":"For suppliers","icon":"truck","pages":[{"title":"For suppliers","href":"/en/lieferanten/start"}]}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/lieferanten/start"}]},{"language":"es","pages":[{"title":"es","href":"/es/lieferanten/start"}]},{"language":"zh","pages":[{"title":"zh","href":"/zh/lieferanten/start"}]}]},"title":"Upsert Packaging Components - Polygon One Helpcenter","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}