{"pageKey":"Product_Upload","slug":"product-upload","locale":"en-US","localeResolved":"en-US","fallbackApplied":false,"version":"product-upload@2026-03-24T03:14:51.635Z","lastModified":"2026-03-24T03:14:51.635Z","canonicalUrl":"https://www.merchandaise.com/en-us/product-upload","payload":{"slug":"product-upload","purpose":"llm-product-upload","title":"Product Upload Workspace | Bulk Catalog Workbook Editor","description":"Open the live product workbook, review catalog rows, validate incremental edits, and update MerchandAise product data from one browser-based workspace.","sections":[{"heading":"Product Upload and Catalog Workbook Editor","paragraphs":["Load the live MerchandAise product workbook, review catalog rows, validate edits, and submit incremental updates from one browser-based workspace.","Use Load Live Workbook when you need the latest catalog rows. Use Open Sample Workbook when you want to rehearse the workflow, verify translations, or continue working while the API is unavailable."]},{"heading":"What this workspace is for","paragraphs":["Use this workspace to open the live MerchandAise product workbook, inspect catalog rows, validate edits before they are submitted, and push incremental updates without re-uploading the entire product database."]},{"heading":"Core workflow","list":["Choose the live workbook when you need current catalog data, or use the sample workbook to rehearse the workflow and verify the UI when the API is unavailable.","Search, sort, collapse columns, and inspect cells before you edit any row.","Double-click editable cells to make changes, then validate pending edits before opening the update review modal.","Confirm the update review summary and submit incremental changes to the product API."]},{"heading":"Primary actions","list":["Load live workbook data from the product export endpoint.","Open a sample workbook for offline rehearsal and outage recovery.","Search cells, change sort order, collapse columns, and reset edits.","Validate pending edits, review update scope, submit incremental updates, and export the current workbook."]},{"heading":"Fallback and recovery behavior","list":["If the live workbook fails to load, the route surfaces an explicit outage state with Retry API Load and Open Sample Workbook actions.","If the workbook contains no rows, the route shows an empty-state explanation instead of silently falling back.","Product ID cells stay locked so row-to-product mapping remains stable even when sorting is active."]},{"heading":"Frequently asked questions","items":[{"title":"When should I use the live workbook instead of the sample workbook?","description":"Use the live workbook when you need the current catalog export and intend to validate or submit changes. Use the sample workbook when you want to rehearse the flow, verify localization, or continue reviewing the UI while the API is unavailable."},{"title":"What happens when I validate changes?","description":"Validation checks each edited row for the required identifiers and mapped field rules, then returns a summary of valid, invalid, and warning states before you open the update review modal."},{"title":"How does the route keep updates matched to the correct product?","description":"The route keeps Product ID read-only and maps every edited row back to a product ID or SKU number before validation and update submission, even if the workbook is temporarily sorted in the UI."}]}],"source":{"type":"page-copy","id":"Product_Upload"}},"rawFiles":[{"relativePath":"structured/product-upload/page-copy.json","content":"{\n  \"navigation\": {\n    \"skipToActions\": \"Skip to workspace actions\",\n    \"skipToTable\": \"Skip to spreadsheet table\",\n    \"skipToStatus\": \"Skip to workspace status\"\n  },\n  \"hero\": {\n    \"headline\": \"Product Upload and Catalog Workbook Editor\",\n    \"description\": \"Load the live MerchandAise product workbook, review catalog rows, validate edits, and submit incremental updates from one browser-based workspace.\",\n    \"cardTitle\": \"Choose a workbook source\",\n    \"cardDescription\": \"Open the live workbook for production updates or start with a sample workbook for training, QA, and outage recovery.\",\n    \"quickStartLabel\": \"Quick start\",\n    \"quickStartBody\": \"Use Load Live Workbook when you need the latest catalog rows. Use Open Sample Workbook when you want to rehearse the workflow, verify translations, or continue working while the API is unavailable.\",\n    \"loadLiveWorkbookLabel\": \"Load Live Workbook\",\n    \"openSampleWorkbookLabel\": \"Open Sample Workbook\",\n    \"cartLabel\": \"Cart\",\n    \"loadingWorkspaceTitle\": \"Preparing product upload workspace\",\n    \"loadingWorkspaceDescription\": \"Loading the workbook editor and preserving your selected start mode.\"\n  },\n  \"seo\": {\n    \"title\": \"Product Upload Workspace | Bulk Catalog Workbook Editor\",\n    \"description\": \"Open the live product workbook, review catalog rows, validate incremental edits, and update MerchandAise product data from one browser-based workspace.\",\n    \"keywords\": [\n      \"product upload workspace\",\n      \"bulk catalog workbook editor\",\n      \"product spreadsheet validation\",\n      \"incremental product updates\",\n      \"catalog workbook editor\",\n      \"MerchandAise product upload\"\n    ],\n    \"openGraphTitle\": \"Product Upload Workspace | Bulk Catalog Workbook Editor | MerchandAise\",\n    \"openGraphDescription\": \"Review live catalog rows, validate edits, compare fallback sample data, and submit incremental product updates in the MerchandAise upload workspace.\",\n    \"twitterTitle\": \"Product Upload Workspace | Bulk Catalog Workbook Editor | MerchandAise\",\n    \"twitterDescription\": \"Load the live product workbook, validate edits, and push incremental catalog updates from one workspace.\"\n  },\n  \"breadcrumbs\": {\n    \"homeLabel\": \"Home\",\n    \"currentLabel\": \"Product Upload Workspace\"\n  },\n  \"assistive\": {\n    \"toolbarLabel\": \"Product upload actions\",\n    \"workspaceHelp\": \"Use the search field to find cells, then double-click a cell to edit it. Product ID cells stay read-only. Validate edits before you confirm an update. On smaller screens the controls wrap above the spreadsheet, and skip links jump to actions, the table, or the status region.\",\n    \"searchLabel\": \"Search in spreadsheet\",\n    \"searchPlaceholder\": \"Search in spreadsheet...\",\n    \"clearSearchLabel\": \"Clear search\",\n    \"previousSearchResultLabel\": \"Go to previous search result\",\n    \"previousSearchResultTitle\": \"Previous result (Shift+Enter)\",\n    \"nextSearchResultLabel\": \"Go to next search result\",\n    \"nextSearchResultTitle\": \"Next result (Enter)\",\n    \"searchOptionsToggleLabel\": \"Toggle search options\",\n    \"searchOptionsToggleTitle\": \"Search options\",\n    \"sortLabel\": \"Sort products\",\n    \"uploadFileLabel\": \"Upload Excel file\",\n    \"uploadFileAriaLabel\": \"Upload Excel file\",\n    \"tableRegionLabel\": \"Product spreadsheet workspace\",\n    \"tableCaption\": \"Editable product spreadsheet with {columns} columns and {rows} rows.\",\n    \"editCellLabel\": \"Edit {header} row {row}\",\n    \"collapseColumnLabel\": \"Collapse column {column}\",\n    \"expandColumnLabel\": \"Expand column {column}\",\n    \"sortAscendingTitle\": \"Click to sort ascending\",\n    \"sortDescendingTitle\": \"Click to sort descending\",\n    \"removeSortingTitle\": \"Click to remove sorting\",\n    \"clearSortingTitle\": \"Clear sorting by {header}\"\n  },\n  \"searchOptions\": {\n    \"title\": \"Search options\",\n    \"caseSensitive\": \"Case sensitive\",\n    \"wholeWord\": \"Match whole word\",\n    \"searchInHeaders\": \"Search in headers\",\n    \"searchInData\": \"Search in data\"\n  },\n  \"actions\": {\n    \"sortPlaceholder\": \"Sort by...\",\n    \"clearSortingLabel\": \"Clear Sorting\",\n    \"resetChangesLabel\": \"Reset Changes\",\n    \"clearSortAndResetLabel\": \"Clear Sort & Reset\",\n    \"clearSortAndResetTitle\": \"Clear sorting and reset all changes for simpler editing\",\n    \"debugLabel\": \"Debug\",\n    \"debugTitle\": \"Debug data mapping (check console)\",\n    \"testIntegrityLabel\": \"Test Integrity\",\n    \"testIntegrityTitle\": \"Test data integrity and mapping (check console)\",\n    \"validateChangesLabel\": \"Validate Changes ({count})\",\n    \"validatingLabel\": \"Validating...\",\n    \"updateProductsLabel\": \"Update Products ({count})\",\n    \"updatingLabel\": \"Updating...\",\n    \"exportExcelLabel\": \"Export Excel\",\n    \"collapseAllLabel\": \"Collapse All\",\n    \"collapseAllTitle\": \"Collapse all columns\",\n    \"expandAllLabel\": \"Expand All\",\n    \"expandAllTitle\": \"Expand all columns\",\n    \"shortcutsLabel\": \"Shortcuts:\",\n    \"retryApiLoadLabel\": \"Retry API Load\",\n    \"retryApiLoadAttemptLabel\": \"Retry API Load (Attempt {attempt})\",\n    \"retryLiveDataLabel\": \"Retry Live Data\",\n    \"confirmAndUpdateLabel\": \"Confirm and Update\",\n    \"cancelLabel\": \"Cancel\",\n    \"submittingLabel\": \"Submitting...\"\n  },\n  \"feedback\": {\n    \"workspaceInitializationFailed\": \"The product upload workspace could not be initialized. Please retry.\",\n    \"productIdLockedAlert\": \"Product ID cells stay locked to protect data integrity.\",\n    \"rowMappingFailedAlert\": \"We could not match this sorted row to the original product record. Refresh the workbook and try again.\",\n    \"workbookLoadFailed\": \"Unable to load product data.\",\n    \"validationIntegrityFailedTitle\": \"Validation failed because the workbook has integrity issues.\",\n    \"validationIntegrityFailedBody\": \"Run the integrity check and fix the flagged rows before validating again.\",\n    \"validationNoChangesTitle\": \"No changes to validate.\",\n    \"validationRequestFailedTitle\": \"Validation could not be completed. Try again in a moment.\",\n    \"updateIntegrityFailedTitle\": \"Update failed because the workbook has integrity issues.\",\n    \"updateIntegrityFailedBody\": \"Run the integrity check and resolve the flagged rows before updating.\",\n    \"updateNoChangesTitle\": \"No changes to update.\",\n    \"updateRequestFailedTitle\": \"The product API could not finish this update request. Try again.\",\n    \"unknownFieldTemplate\": \"Change {index}: field \\\"{field}\\\" is not mapped for product updates.\",\n    \"missingIdentifierTemplate\": \"Change {index}: each edited row must include a product ID or SKU number.\",\n    \"productIdChangeBlockedTemplate\": \"Change {index}: Product ID changes are blocked to protect record mapping.\"\n  },\n  \"status\": {\n    \"searchProgress\": \"{current} of {total}\",\n    \"searchProgressEmpty\": \"0 of 0\",\n    \"collapsedSummary\": \"{collapsed} of {total} columns collapsed\",\n    \"workflowValidating\": \"Validating {count} pending edits...\",\n    \"workflowUpdating\": \"Updating {count} pending edits...\",\n    \"workflowValidationFinished\": \"Validation finished: {valid} valid, {invalid} invalid, {warnings} warnings.\",\n    \"workflowUpdateFinished\": \"Update finished: {successful} successful, {failed} failed.\",\n    \"workflowValidationFailed\": \"Validation could not be completed. Review the details below and try again.\",\n    \"workflowUpdateFailed\": \"Update could not be completed. Review the details below and try again.\",\n    \"validationResultsTitle\": \"Validation Results\",\n    \"validationSummary\": \"Changes validated: {total} | Valid: {valid} | Invalid: {invalid}\",\n    \"updateResultsTitle\": \"Update Results\",\n    \"updateSummary\": \"Changes processed: {total} | Successful: {successful} | Failed: {failed} | Success rate: {successRate}\",\n    \"totalProductsSummary\": \"Total Products: {rows} | Columns: {columns}\",\n    \"sortedBadge\": \"Sorted by {header} ({direction})\",\n    \"sortedWarningTitle\": \"Warning:\",\n    \"sortedWarningBody\": \"You have pending edits while the table is sorted. MerchandAise still maps updates to the correct products by product ID and SKU, but clearing sorting keeps review simpler.\",\n    \"fieldMappingTitle\": \"Info:\",\n    \"fieldMappingBody\": \"Display labels stay localized, but edited workbook fields are still mapped back to the product API automatically. For example, minimumPurchaseQuantity is submitted as minimumPurchaseQuatity to match backend expectations.\",\n    \"fieldSecurityTitle\": \"Security:\",\n    \"fieldSecurityBody\": \"Product ID remains locked so product-to-row mapping stays stable during validation and update submission.\",\n    \"unsavedChanges\": \"{changes} pending edits across {products} product rows. Validate and update to save them.\",\n    \"workspaceReadyTitle\": \"Product upload workspace is ready\",\n    \"workspaceReadyDescription\": \"Start with live catalog data or open a sample workbook to rehearse the workflow.\",\n    \"loadingTitle\": \"Loading product data...\",\n    \"loadingDescription\": \"Please wait while MerchandAise loads the workbook and checks the current catalog export.\",\n    \"loadErrorTitle\": \"Unable to load live product data\",\n    \"loadErrorDescription\": \"Retry the API export or switch to a sample workbook so you can keep reviewing the route.\",\n    \"timeoutHint\": \"The workbook request timed out. Check backend responsiveness and try the live workbook again.\",\n    \"authHint\": \"The API rejected this request. Re-authenticate before trying the live workbook again.\",\n    \"repeatedFailureHint\": \"Multiple API failures were detected. Use the sample workbook for now, then retry live data when the backend is healthy.\",\n    \"genericFailureHint\": \"If the problem persists, continue with the sample workbook and retry live data after backend health recovers.\",\n    \"sampleModeFallback\": \"You are viewing the sample workbook because live product data could not be loaded.\",\n    \"sampleModeManual\": \"You are viewing the sample workbook.\",\n    \"noProductsTitle\": \"No products found\",\n    \"noProductsDescription\": \"The workbook loaded without product rows. Retry the live export or open the sample workbook.\",\n    \"showingRows\": \"Showing {visible} of {total} rows\",\n    \"loadMoreRows\": \"Load {count} More\",\n    \"reviewTitle\": \"Review update before submit\",\n    \"reviewDescription\": \"Confirm this change set before it is sent to the product API.\",\n    \"reviewRows\": \"Rows: {count}\",\n    \"reviewProducts\": \"Products: {count}\",\n    \"reviewFields\": \"Fields: {count}\",\n    \"topChangedFieldsTitle\": \"Top changed fields\",\n    \"noFieldChanges\": \"No field-level changes were detected.\",\n    \"statusBarSummary\": \"Sheet: {sheet} | Rows: {rows} | Columns: {columns}\",\n    \"renderedRows\": \"Rendered: {count}\",\n    \"sortedSafeToEdit\": \"Sorted by {header} ({direction}) | Safe to edit\",\n    \"pendingEditsBadge\": \"{count} pending edits\",\n    \"searchResultsBadge\": \"{count} search matches\",\n    \"selectedCell\": \"Selected: {cell}\",\n    \"directionAscendingLabel\": \"ASC\",\n    \"directionDescendingLabel\": \"DESC\"\n  },\n  \"sampleWorkbook\": {\n    \"rows\": [\n      {\n        \"name\": \"Sample product 1\",\n        \"productSubName\": \"Training variant 1\",\n        \"description\": \"Example product description 1\",\n        \"collections\": \"Collection A\",\n        \"sustainability\": \"Eco-friendly\",\n        \"clubs\": \"Club 1\",\n        \"essentials\": \"Essential item\"\n      },\n      {\n        \"name\": \"Sample product 2\",\n        \"productSubName\": \"Training variant 2\",\n        \"description\": \"Example product description 2\",\n        \"collections\": \"Collection B\",\n        \"sustainability\": \"Sustainable\",\n        \"clubs\": \"Club 2\",\n        \"essentials\": \"\"\n      },\n      {\n        \"name\": \"Sample product 3\",\n        \"productSubName\": \"Training variant 3\",\n        \"description\": \"Example product description 3\",\n        \"collections\": \"\",\n        \"sustainability\": \"Recycled\",\n        \"clubs\": \"Club 1, Club 3\",\n        \"essentials\": \"Must have\"\n      }\n    ]\n  },\n  \"fieldLabels\": {\n    \"productId\": \"Product ID\",\n    \"name\": \"Product name\",\n    \"productSubName\": \"Product subtitle\",\n    \"description\": \"Description\",\n    \"skuNumber\": \"SKU number\",\n    \"productionLeadTime\": \"Production lead time\",\n    \"makingTime\": \"Making time\",\n    \"minimumPurchaseQuantity\": \"Minimum purchase quantity\",\n    \"hsCode\": \"HS code\",\n    \"importClassifications\": \"Import classifications\",\n    \"incoterms\": \"Incoterms\",\n    \"modelUV\": \"Model UV\",\n    \"underReview\": \"Under review\",\n    \"sizeChart\": \"Size chart\",\n    \"collections\": \"Collections\",\n    \"sustainability\": \"Sustainability\",\n    \"clubs\": \"Clubs\",\n    \"essentials\": \"Essentials\",\n    \"products\": \"Products\",\n    \"envMapUrl\": \"Environment map URL\",\n    \"envMapIntensity\": \"Environment map intensity\",\n    \"envMapRoughness\": \"Environment map roughness\",\n    \"envMapSaturation\": \"Environment map saturation\",\n    \"envMapRotationX\": \"Environment map rotation X\",\n    \"envMapRotationY\": \"Environment map rotation Y\",\n    \"exposure\": \"Exposure\",\n    \"keyLightIntensity\": \"Key light intensity\",\n    \"keyLightKelvin\": \"Key light kelvin\",\n    \"keyLightPositionX\": \"Key light position X\",\n    \"keyLightPositionY\": \"Key light position Y\",\n    \"keyLightPositionZ\": \"Key light position Z\",\n    \"keyLightRotationX\": \"Key light rotation X\",\n    \"keyLightRotationY\": \"Key light rotation Y\",\n    \"keyLightRotationZ\": \"Key light rotation Z\",\n    \"fillLightIntensity\": \"Fill light intensity\"\n  },\n  \"sheetLabels\": {\n    \"products\": \"Products\"\n  },\n  \"llm\": {\n    \"overviewHeading\": \"What this workspace is for\",\n    \"overviewBody\": \"Use this workspace to open the live MerchandAise product workbook, inspect catalog rows, validate edits before they are submitted, and push incremental updates without re-uploading the entire product database.\",\n    \"workflowHeading\": \"Core workflow\",\n    \"workflowItems\": [\n      \"Choose the live workbook when you need current catalog data, or use the sample workbook to rehearse the workflow and verify the UI when the API is unavailable.\",\n      \"Search, sort, collapse columns, and inspect cells before you edit any row.\",\n      \"Double-click editable cells to make changes, then validate pending edits before opening the update review modal.\",\n      \"Confirm the update review summary and submit incremental changes to the product API.\"\n    ],\n    \"actionsHeading\": \"Primary actions\",\n    \"actionItems\": [\n      \"Load live workbook data from the product export endpoint.\",\n      \"Open a sample workbook for offline rehearsal and outage recovery.\",\n      \"Search cells, change sort order, collapse columns, and reset edits.\",\n      \"Validate pending edits, review update scope, submit incremental updates, and export the current workbook.\"\n    ],\n    \"recoveryHeading\": \"Fallback and recovery behavior\",\n    \"recoveryItems\": [\n      \"If the live workbook fails to load, the route surfaces an explicit outage state with Retry API Load and Open Sample Workbook actions.\",\n      \"If the workbook contains no rows, the route shows an empty-state explanation instead of silently falling back.\",\n      \"Product ID cells stay locked so row-to-product mapping remains stable even when sorting is active.\"\n    ],\n    \"faqHeading\": \"Frequently asked questions\",\n    \"faqs\": [\n      {\n        \"question\": \"When should I use the live workbook instead of the sample workbook?\",\n        \"answer\": \"Use the live workbook when you need the current catalog export and intend to validate or submit changes. Use the sample workbook when you want to rehearse the flow, verify localization, or continue reviewing the UI while the API is unavailable.\"\n      },\n      {\n        \"question\": \"What happens when I validate changes?\",\n        \"answer\": \"Validation checks each edited row for the required identifiers and mapped field rules, then returns a summary of valid, invalid, and warning states before you open the update review modal.\"\n      },\n      {\n        \"question\": \"How does the route keep updates matched to the correct product?\",\n        \"answer\": \"The route keeps Product ID read-only and maps every edited row back to a product ID or SKU number before validation and update submission, even if the workbook is temporarily sorted in the UI.\"\n      }\n    ]\n  }\n}","lastModified":"2026-03-24T03:14:51.635Z"}],"metadata":{"source":"page-content","schema":"2025-11-05"}}