{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown","redocly_category":"Guides","api_domain":"Cross API"},"seo":{"title":"Protect data before REST changes with Time Layer","description":"Check a Cloud Time Layer copy before risky Sales Layer REST API changes, and understand backup availability and restoration scope.","siteUrl":"https://docs.api.saleslayer.com","image":"/assets/sales-layer-horizontal-dark-green.224c048d0bb386d3c2683ba504140512b6233d3c6cbf706ca81e2e3f2f02dbd0.9c1bb791.svg","keywords":["Sales Layer","Sales Layer API","REST API","OpenAPI","PIM API","Product Information Management API","DAM API","Catalog API","product catalog API","product data synchronization","ecommerce integration API","ERP integration","marketplace integration","image management API","digital asset management API","API integration","Model Context Protocol","MCP server","Sales Layer MCP","AI assistant connector","PIM AI assistant"],"lang":"en-US","meta":[{"name":"og:type","content":"website"},{"name":"og:site_name","content":"Sales Layer REST API Documentation"},{"name":"og:title","content":"Sales Layer REST API Documentation"},{"name":"og:description","content":"Technical REST API docs for Sales Layer PIM, Catalog, DAM, ecommerce, ERP, and marketplace integrations."},{"name":"og:image","content":"/assets/sales-layer-horizontal-dark-green.224c048d0bb386d3c2683ba504140512b6233d3c6cbf706ca81e2e3f2f02dbd0.9c1bb791.svg"},{"name":"twitter:card","content":"summary_large_image"},{"name":"twitter:site","content":"@saleslayer"},{"name":"twitter:title","content":"Sales Layer REST API Documentation"},{"name":"twitter:description","content":"Technical REST API docs for Sales Layer PIM, Catalog, DAM, ecommerce, ERP, and marketplace integrations."},{"name":"twitter:image","content":"/assets/sales-layer-horizontal-dark-green.224c048d0bb386d3c2683ba504140512b6233d3c6cbf706ca81e2e3f2f02dbd0.9c1bb791.svg"}],"llmstxt":{"hide":false,"title":"Sales Layer REST API Documentation","description":"Technical guides and OpenAPI references for Sales Layer DAM and Catalog REST APIs.","sections":[{"title":"Guides","description":"Static API guides for authentication, headers, query parameters, responses, rate limiting, and best practices.","includeFiles":["guides/**/*.md","changelog.md","rest-api-evolution-and-compatibility-policy.md"]},{"title":"API Reference","description":"OpenAPI-based references and API overview pages for Sales Layer REST APIs.","includeFiles":["apis/**/*.md","apis/**/*.yaml"]},{"title":"Postman collections","description":"Importable Postman collection and environment instructions for testing Sales Layer REST APIs.","includeFiles":["postman/**/*.md"]},{"title":"MCP server","description":"Documentation for the Sales Layer MCP Server, its tools, access profiles, and how AI assistants consume the Catalog REST API.","includeFiles":["mcp-server/**/*.md"]}]},"jsonLd":{"@context":"https://schema.org","@type":"WebSite","name":"Sales Layer REST API Documentation","url":"https://docs.api.saleslayer.com/","publisher":{"@type":"Organization","name":"Sales Layer","url":"https://www.saleslayer.com/"}}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"protect-data-before-rest-changes-with-time-layer","__idx":0},"children":["Protect data before REST changes with Time Layer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A REST request that creates, changes, or deletes data does ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," request a Time Layer copy. Catalog also does not request one separately when it applies an attribute-definition change. Treat the request as unprotected unless you have checked a suitable copy yourself. This applies even when the change is initiated through the Catalog attribute-management REST routes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Catalog SPA may offer a copy before a risky change and request it directly from Time Layer. That internal flow is not available to REST integrators. REST endpoints for managing Time Layer copies are a future proposal, not a current API capability."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"before-a-risky-rest-request","__idx":1},"children":["Before a risky REST request"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Identify the account and the change you intend to make. Read the current attribute definition and review the affected items or values before preparing a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PATCH"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE"]},". See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/entity-metadata"},"children":["Entity metadata and attribute management"]}," for the read routes."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Sales Layer Cloud"]},", open ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Activity"]}," and its recent activity view. If your account offers the action to generate a backup (labelled ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["“Generar copia de seguridad”"]}," in the Spanish interface), use it before sending the REST request. The action appears only when Time Layer is active and included for the account, the user can view recent activity, the account has activity visible within the past year, and the Activity view offers a copy at that point. Availability depends on the account and what the screen displays."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Wait for Cloud to finish, then find a new ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Time Layer"]}," entry in the activity feed and check its date and time. Copies appear among activity entries, within the date range shown on the current page. Confirm that the entry represents a copy made before your planned REST change. A green message saying a copy was ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not necessary"]}," does not mean a new copy was created. A success message alone is not enough: verify the entry."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Send the REST request only after you have confirmed the copy you intend to rely on. Record its date and time alongside your change record so that you can identify it later."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do not rely on a scheduled, session-triggered, or operation-triggered Cloud copy as proof that your REST request is protected. Such copies may not be created, and a Cloud operation can continue when its attempted copy fails. Verify a suitable copy in Activity before proceeding."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the backup action is unavailable, Cloud reports that no new copy was needed, or you cannot find and verify a suitable copy, pause the risky REST change. Ask Sales Layer Support or your account contact to help confirm your account's Time Layer availability and the copy you can use. Do not assume that the REST API provides another way to create or check a copy."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"catalog-metadata-changes-to-check-carefully","__idx":2},"children":["Catalog Metadata changes to check carefully"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following effects are defined by the current ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/apis/catalog-v2.0"},"children":["Catalog endpoint reference"]}," for the four attribute route families: Categories, Products, Variants, and Custom Entities. The copy rule above applies to all of them."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"REST change"},"children":["REST change"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Documented effect"},"children":["Documented effect"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PATCH .../attributes('{attributeId}')"]}," with a new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Converts an attribute. Values that the destination type cannot carry are emptied. Only the tenant's own attributes can be converted."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PATCH .../attributes('{attributeId}')"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["deleteExistingValues: true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Empties that attribute's value on every item, whatever else the request changes. Omitting the field does not request that clearing; a type conversion may still empty values it cannot carry."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PATCH .../attributes('{attributeId}')"]}," with checklist ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["options"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A supplied list replaces the whole option list. An omitted option stops being offered; items tagged with it keep the text they carry. An empty list is rejected."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE .../attributes('{attributeId}')"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Deletes a tenant-owned attribute definition and its item values. Platform attributes cannot be deleted."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Product or Variant ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onlyFromForm=true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Removes the attribute only from the default form, or from the form selected by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["attributeSetId"]},". The definition and item values remain. Categories and Custom Entities do not support this form-only mode."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For example, a Product attribute deletion without ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onlyFromForm=true"]}," removes its values from every Product. Before sending that request, check the definition and affected data, then complete the Cloud copy check above. For a checklist update, compare the full proposed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["options"]}," list with the existing list; removing an option from the definition does not remove the text already held by tagged items. For ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["deleteExistingValues: true"]},", expect all values of that attribute to be emptied."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The OpenAPI ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE"]}," descriptions say that no snapshot is taken before the request. This describes the REST operation; it does not prevent you from creating a separate copy in Cloud first."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"retention-and-restoration-scope","__idx":3},"children":["Retention and restoration scope"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Time Layer copies may not remain available indefinitely. Check that the copy you intend to rely on is available in Cloud when you need it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Restoring a copy affects the account's catalog, rather than a single attribute. It may replace catalog changes made after the copy. If your integration depends on creating, retaining, or restoring Time Layer copies, consult your Sales Layer contact or Customer Success for information about your account before planning the workflow."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-pages","__idx":4},"children":["Related pages"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/entity-metadata"},"children":["Entity metadata and attribute management"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/current-limitations"},"children":["Current limitations"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/apis/catalog-v2.0"},"children":["Catalog endpoint reference"]}]}]}]},"headings":[{"value":"Protect data before REST changes with Time Layer","id":"protect-data-before-rest-changes-with-time-layer","depth":1},{"value":"Before a risky REST request","id":"before-a-risky-rest-request","depth":2},{"value":"Catalog Metadata changes to check carefully","id":"catalog-metadata-changes-to-check-carefully","depth":2},{"value":"Retention and restoration scope","id":"retention-and-restoration-scope","depth":2},{"value":"Related pages","id":"related-pages","depth":2}],"frontmatter":{"seo":{"title":"Protect data before REST changes with Time Layer","description":"Check a Cloud Time Layer copy before risky Sales Layer REST API changes, and understand backup availability and restoration scope."},"keywords":{"includes":["Time Layer","backup","REST API data protection","Catalog Metadata"]},"metadata":{"redocly_category":"Guides","api_domain":"Cross API"}},"lastModified":"2026-11-06T13:08:52.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/protect-data-with-time-layer","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}