<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by Vipin Banka | Learnings & Insights</title><link href="http://world.optimizely.com" /><updated>2026-07-08T03:20:06.0000000Z</updated><id>https://world.optimizely.com/blogs/vipin-banka--learnings--insights/</id> <generator uri="http://world.optimizely.com" version="2.0">Optimizely World</generator> <entry><title>Optimizely Content JS SDK v2.1.0 — What&#39;s New and Why It Matters</title><link href="https://world.optimizely.com/blogs/vipin-banka--learnings--insights/dates/2026/7/optimizely-content-js-sdk-v2.1.0--what-actually-changed-and-why-it-matters" /><id>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;v2.1.0 of the Optimizely Content JS SDK and CLI landed on July 7, 2026. This is a substantial release bringing a wave of capabilities for developers building headless experiences on Optimizely CMS SaaS &amp;mdash; including content type contracts, programmatic application management, a new project scaffolding command, and OpenTelemetry observability.&lt;/p&gt;
&lt;p&gt;Alongside these major features, the release addresses critical stability fixes that resolve key edge cases in content fetching, previews, and routing. Below is a deep dive into what has changed, why these updates matter, and how they improve your development workflow.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Content Type Sprawl and the New Contract Enhancements&lt;/h2&gt;
&lt;p&gt;If you&#39;ve been building with the SDK for a while, you&#39;ve probably felt this. Your content model grows. You have a Blog content type, a News Article, a Press Release. They&#39;re different types, but they share a bunch of the same properties &amp;mdash; &lt;strong&gt;category&lt;/strong&gt;, &lt;strong&gt;tags&lt;/strong&gt;, &lt;strong&gt;author&lt;/strong&gt;, &lt;strong&gt;publishedDate&lt;/strong&gt;. So you define those properties three separate times across three separate &lt;strong&gt;contentType()&lt;/strong&gt; calls. Then a product manager asks you to add a region field to all of them, and you make the same change in three places and hope you didn&#39;t miss one.&lt;/p&gt;
&lt;p&gt;While you could previously declare shared interfaces, &lt;strong&gt;v2.1.0 introduces major enhancements to how the SDK handles content type contracts&lt;/strong&gt; at runtime to eliminate this duplicate work:&lt;/p&gt;
&lt;ul class=&quot;tight&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Allowed and restricted types on contracts&lt;/strong&gt; &amp;mdash; specify exactly which content types can or must implement a contract&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automatic GraphQL fragment generation&lt;/strong&gt; &amp;mdash; when you query a contracted type, the SDK auto-generates the correct inline fragments so all implementing types return their contracted fields without manual query writing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Component fallback mechanism&lt;/strong&gt; &amp;mdash; if a content item implements a contract but you haven&#39;t registered a specific React component for that particular type, the SDK now falls back to a contract-level component rather than rendering nothing. Silent blank renders caused by missing component registrations were a real source of confusion &amp;mdash; this addresses that.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the CLI side, the &lt;strong&gt;pull&lt;/strong&gt; command now generates and validates contract definitions as part of your code generation step. One sync, and your contracts are in code.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/292&quot;&gt;&lt;em&gt;CMS-46677, PR #292&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Programmatic Application Management via CLI&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The Context: &lt;/strong&gt;The SDK and CLI provide a highly automated workflow for managing content types in code, but CMS applications (the configuration mapping your frontend hostnames to CMS start pages) historically required manual configuration in the CMS admin UI.&lt;/p&gt;
&lt;p&gt;For teams running multiple environments (Development, Staging, Production) or spinning up ephemeral environments for feature branches, this manual step was a deployment bottleneck. If a team member created an environment, they had to manually configure the application in the UI or routing wouldn&#39;t resolve. It wasn&#39;t version-controlled, automated, or easily reproducible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Solution: &lt;/strong&gt;v2.1.0 introduces full &lt;strong&gt;application type definitions and validation&lt;/strong&gt; to the SDK and exposes three new programmatic management commands in the CLI:&lt;/p&gt;
&lt;pre class=&quot;code-block&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;cms-cli createApplication    # Create a new CMS application programmatically
cms-cli updateApplication    # Update an existing application&#39;s configuration
cms-cli checkApplications    # Validate registered applications against your local config&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;**Refer to the &lt;a class=&quot;_667h42 _1l4j4nad _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;https://docs.developers.optimizely.com/content-management-system/v1.0.0-CMS-SaaS/docs/configure-javascript-sdk&quot;&gt;official CLI documentation&lt;/a&gt;&amp;nbsp;for exact command syntax and options.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Your application configuration can now live in code with the rest of your schema. For teams running automated CI/CD pipelines, this closes a significant orchestration gap.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/333&quot;&gt;&lt;em&gt;CMS-51342, PR #333&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;A Seamless Editing Experience with NextPreviewComponent&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The Context:&lt;/strong&gt;In headless setups, keeping the live preview fast and interactive is critical for content editors. However, standard preview routing setups in Next.js App Router projects often triggered full page reloads upon saving content drafts in the CMS. Editors had to wait for the entire route to re-render and often lost their scroll position or current tab context.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Solution:&lt;/strong&gt;v2.1.0 ships the &lt;strong&gt;NextPreviewComponent&lt;/strong&gt;, a preview component specifically optimized for the Next.js App Router rendering lifecycle:&lt;/p&gt;
&lt;ul class=&quot;tight&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimized save-event listener&lt;/strong&gt; &amp;mdash; hooks into the content-saved webhook efficiently to detect draft saves immediately without polling&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Soft refresh support&lt;/strong&gt; &amp;mdash; updates draft content on-screen in place. The editor sees their changes reflect instantly without a full browser reload or losing scroll position&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This significantly reduces the friction of the editorial feedback loop, making visual editing in CMS SaaS feel smooth and instant.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/319&quot;&gt;&lt;em&gt;CMS-52407, PR #319&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Observability Built In: OpenTelemetry Support&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The Context: &lt;/strong&gt;Performance tuning in decoupled architectures is notoriously difficult. If a page load feels laggy, it can be hard to identify whether the delay is happening during client-side hydration, SDK query construction, network latency to Optimizely Graph, or &lt;span class=&quot;far4bl _667h42&quot;&gt;the query processing time within Optimizely Graph&lt;/span&gt;. Without deep instrumentation, developers are left guessing or manually wrapping every&amp;nbsp;&lt;strong&gt;getContentByPath()&lt;/strong&gt; call in custom tracing blocks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Solution: &lt;/strong&gt;The SDK now features native &lt;strong&gt;OpenTelemetry (OTEL) tracing and metrics&lt;/strong&gt;. If your hosting environment or application infrastructure runs an OTEL-compatible collector (such as Datadog, New Relic, Honeycomb, Grafana, or Jaeger), the SDK&#39;s fetch layer will automatically emit trace spans.&lt;/p&gt;
&lt;p&gt;You can now natively profile the duration of your content queries, see exactly how long Optimizely Graph takes to respond, and spot any nested reference fetches that are impacting your latency budget.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/309&quot;&gt;&lt;em&gt;CMS-50199, PR #309&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Getting Started Faster with create-opti-app&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The Context: &lt;/strong&gt;Historically, starting a new project on CMS SaaS required cloning a complete demo repository, stripping out demo content and styling, configuring environment variables from scratch, and adjusting boilerplates. It lacked a lightweight, standardized onboarding command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Solution: &lt;/strong&gt;The CLI now features a dedicated onboarding and scaffolding utility:&lt;/p&gt;
&lt;pre class=&quot;code-block&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;npx @optimizely/cms-cli@latest create-opti-app&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This utility lets you quickly scaffold a clean, working project from three officially maintained starter templates:&lt;/p&gt;
&lt;ul class=&quot;tight&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stride&lt;/strong&gt; &amp;mdash; The modern recommended starter preconfigured for Visual Builder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Alloy&lt;/strong&gt; &amp;mdash; The classic Optimizely demonstration site&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;TanStack&lt;/strong&gt; &amp;mdash; TanStack Router + React for projects opting out of Next.js&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These templates are maintained alongside the core SDK, ensuring they stay aligned with the latest framework best practices.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/382&quot;&gt;&lt;em&gt;CMS-49618, PR #382&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Key Stability and Bug Fixes&lt;/h2&gt;
&lt;p&gt;Behind the major feature updates, v2.1.0 delivers key bug fixes addressing critical routing, caching, and serialization edge cases.&lt;/p&gt;
&lt;h3&gt;Correcting getContent() Versioning Behavior&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; In certain configurations, the &lt;strong&gt;getContent()&lt;/strong&gt; method (which retrieves a content item by its programmatic ID) was returning the&amp;nbsp;&lt;strong&gt;draft version&lt;/strong&gt; of a page or block to anonymous public visitors rather than the active published version. If an editor had an in-progress draft saved in the CMS, those unapproved changes &lt;span class=&quot;far4bl _667h42&quot;&gt;could unintentionally appear on the live website&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The SDK has been corrected to ensure &lt;strong&gt;getContent()&lt;/strong&gt; strictly returns the published version of content for public delivery, safeguarding editorial workflows.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/307&quot;&gt;&lt;em&gt;CMS-52026, PR #307&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Resolving getContentByPath() 404s on Simple Addresses&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; Optimizely CMS allows editors to assign a &quot;simple address&quot; to any page (e.g., a short URL alias like &lt;strong&gt;/about&lt;/strong&gt; instead of a long hierarchical path). When a page used a simple address, &lt;strong&gt;getContentByPath()&lt;/strong&gt; was throwing a 404 error, breaking routing for pages where custom slugs had been configured.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; Path-resolution logic has been updated to correctly resolve pages using CMS simple addresses, ensuring routing works smoothly across all customized URLs.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/312&quot;&gt;&lt;em&gt;CMS-52209, PR #312&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Resolving Empty DAM Asset References in Compositions&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; When assets from Digital Asset Management (DAM) systems were referenced inside Visual Builder compositions (experiences structured using rows, columns, and sections), the returned fields occasionally resolved as &lt;strong&gt;null&lt;/strong&gt;&amp;nbsp;or empty. The query was executing successfully, but the auto-generated GraphQL query was missing the necessary inline fragments to serialize the nested DAM properties.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The query generator has been updated to guarantee proper DAM asset fragment resolution inside experience compositions.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/318&quot;&gt;&lt;em&gt;CMS-52404, PR #318&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Circular Reference Support in Code Generation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; In complex content models, types frequently reference each other circularly (for example, a &lt;strong&gt;Category&lt;/strong&gt; type containing a &lt;strong&gt;parentCategory&lt;/strong&gt; property of type &lt;strong&gt;Category&lt;/strong&gt;, or a &lt;strong&gt;MenuItem&lt;/strong&gt; pointing to child &lt;strong&gt;MenuItems&lt;/strong&gt;). When the CLI encountered these models, the code generator would enter an infinite loop or fail to compile the output.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; Both the SDK and CLI have been updated to support circular and self-referential content types by outputting string-based type references at the boundary of a detected cycle, allowing code generation to compile cleanly.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/409&quot;&gt;SDK: CMS-53737, PR #409 &lt;/a&gt;&amp;middot; &lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/305&quot;&gt;CLI: CMS-44353, PR #305&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Consistent RichText HTML Entity Decoding&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; Certain encoded HTML entities (such as non-breaking spaces &lt;strong&gt;&amp;amp;nbsp;&lt;/strong&gt;, em dashes &lt;strong&gt;&amp;amp;ndash;&lt;/strong&gt;, or custom characters) inside &lt;strong&gt;RichText&lt;/strong&gt; properties were decoded inconsistently, sometimes rendering raw entity markup directly to the page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The entity decoding logic inside the &lt;strong&gt;RichText&lt;/strong&gt; parser has been standardized to ensure consistent rendering across all HTML entities.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/353&quot;&gt;&lt;em&gt;CMS-53226, PR #353&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Preview Mode: Synchronized Element Focus and Attributes&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; In preview mode, two visual editing issues impacted the editor experience:&lt;/p&gt;
&lt;ol class=&quot;tight&quot;&gt;
&lt;li&gt;
&lt;p&gt;Selecting an element in the Visual Builder sidebar didn&#39;t reliably focus or highlight that corresponding element inside the live iframe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Visual editing attributes (&lt;strong&gt;data-epi-*&lt;/strong&gt; metadata) were missing from custom &lt;strong&gt;OptimizelyComposition&lt;/strong&gt; and &lt;strong&gt;OptimizelyGridSection&lt;/strong&gt; wrappers, rendering some on-page edit boundaries inactive.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The preview attribute delivery and sidebar communication have been fully synchronized. On-page edit boundaries now map perfectly to the visual structure, and sidebar element selections correctly shift iframe focus.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/346&quot;&gt;Focus: CMS-52749, PR #346 &lt;/a&gt;&amp;middot; &lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/393&quot;&gt;Attributes: CMS-53437, PR #393&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Fallback Resolution for types ending in &quot;...Property&quot;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; If a custom content type name ended with the suffix &lt;strong&gt;&quot;Property&quot;&lt;/strong&gt; (e.g., &lt;strong&gt;HeroImageProperty&lt;/strong&gt;, the component registry&#39;s fallback resolver incorrectly classified it as a system property type rather than a content element, failing to resolve a fallback component.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The matching algorithms have been refined to ensure custom content types ending in &quot;Property&quot; correctly evaluate and resolve fallback layouts.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/304&quot;&gt;&lt;em&gt;CMS-51995, PR #304&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Additional Improvements&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; border-width: 1px; border-spacing: 5px; border-style: solid;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Change&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Base type properties in queries&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/392&quot;&gt;CMS-41847, PR #392&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Some inherited base type fields were missing from auto-generated GraphQL queries, requiring manual query extensions&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;All base type properties are now automatically included&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Locale on ContentType&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/400&quot;&gt;CMS-53704, PR #400&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;No way to specify locale at the type definition level for multilingual setups&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;ContentType&lt;/strong&gt; and &lt;strong&gt;RICHTEXT_PRESET&lt;/strong&gt; now accept an optional &lt;strong&gt;locale&lt;/strong&gt; parameter&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Section fragments in compositions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/388&quot;&gt;CMS-53436, PR #388&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Sections inside Visual Builder experiences didn&#39;t generate proper GraphQL fragments&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Section fragment handling added to &lt;strong&gt;OptimizelyComposition&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Display template for experiences&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/335&quot;&gt;CMS-52750, PR #335&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Top-level experience content didn&#39;t respect its assigned display template&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Display template resolution now works for top-level experiences&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Type re-exports&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/405&quot;&gt;CMS-53656, PR #405&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Missing re-exports caused broken &lt;strong&gt;.d.ts&lt;/strong&gt; declaration files in consuming projects&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Type re-exports added for proper declaration file generation&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Empty contracts config&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/342&quot;&gt;CMS-52849, PR #342&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Passing an empty contracts array in config threw an error&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Empty contracts are now allowed without errors&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Self-signed certificates (CLI)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/322&quot;&gt;CMS-52494, PR #322&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;CLI couldn&#39;t connect to CMS instances behind self-signed certs in dev/staging&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Self-signed certificate support added&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;RichText editor settings (CLI)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/348&quot;&gt;CMS-52547, PR #348&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;No way to configure editor settings for RichText properties via the CLI&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Editor settings for RichText are now supported&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Duplicate applications (CLI)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/403&quot;&gt;CMS-53768, PR #403&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;CLI threw errors when multiple applications shared entry points or had missing entry points&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Duplicate handling and missing entry point filtering added&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;Preview URL with inProcessWebsite (CLI)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/pull/351&quot;&gt;CMS-53120, PR #351&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;Preview URLs didn&#39;t resolve correctly when using &lt;strong&gt;inProcessWebsite&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;border-style: solid; border-width: 1px; text-align: left; vertical-align: top; padding: 1px;&quot;&gt;
&lt;p&gt;URL resolution logic fixed&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;How to Upgrade&lt;/h2&gt;
&lt;pre class=&quot;code-block&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;# Upgrade the SDK
npm install @optimizely/cms-sdk@2.1.0

# Upgrade the CLI
npm install -D @optimizely/cms-cli@2.1.0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There are no breaking changes in this release. Your existing &lt;strong&gt;contentType()&lt;/strong&gt; schemas, registry configurations, and React component mappings continue to work without modification.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Full Changelog&lt;/h2&gt;
&lt;ul class=&quot;tight&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/releases/tag/%40optimizely%2Fcms-sdk%402.1.0&quot;&gt;&lt;strong&gt;@optimizely/cms-sdk@2.1.0&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/episerver/content-js-sdk/releases/tag/%40optimizely%2Fcms-cli%402.1.0&quot;&gt;&lt;strong&gt;@optimizely/cms-cli@2.1.0&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;This post is a community-authored summary based on the&amp;nbsp;&lt;a class=&quot;_667h42 _1l4j4nad _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;https://github.com/episerver/content-js-sdk/releases/tag/%40optimizely%2Fcms-sdk%402.1.0&quot;&gt;official v2.1.0 release notes&lt;/a&gt;. For authoritative guidance, always refer to the official Optimizely documentation.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;</id><updated>2026-07-08T03:20:06.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Exploring Asset Lifecycle Management Approaches for Bynder and Optimizely SaaS CMS</title><link href="https://world.optimizely.com/blogs/vipin-banka--learnings--insights/dates/2026/7/exploring-asset-lifecycle-management-approaches-for-bynder-and-optimizely-saas-cms/" /><id>&lt;p&gt;&lt;span class=&quot;far4bl _667h42&quot;&gt;Note: This is Part 3 of our Bynder integration series. For setup and filtering prerequisites, see &lt;a class=&quot;_667h42 _1l4j4nac _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;/link/4f215cd334254dfcbc121d5f4e20edd6.aspx&quot;&gt;Part 1&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a class=&quot;_667h42 _1l4j4nac _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;/link/30275ac47c4843148eeda8b7d6ed282a.aspx&quot;&gt;Part 2&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In my previous article, I explored approaches for controlling asset ingestion from Bynder into Optimizely SaaS CMS through metadata-based filtering.&lt;/p&gt;
&lt;p&gt;Filtering assets before they enter the platform is an important first step, but in many enterprise DAM integrations, it only addresses part of the lifecycle.&lt;/p&gt;
&lt;p&gt;Once assets have been synchronized, a different set of challenges begins to emerge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What happens when an asset&#39;s metadata changes after synchronization?&lt;/li&gt;
&lt;li&gt;How should previously synchronized assets be handled when they no longer meet business rules?&lt;/li&gt;
&lt;li&gt;How can organizations govern assets across Development, Staging, and Production environments?&lt;/li&gt;
&lt;li&gt;How can teams safely determine whether an asset is still being used before removing it?&lt;/li&gt;
&lt;li&gt;When does it make sense to extend an existing integration versus building a completely custom connector?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These questions gradually shift the conversation from asset synchronization to asset lifecycle management.&lt;/p&gt;
&lt;p&gt;This article explores some architectural considerations and potential approaches that may help address those challenges.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;The Asset Lifecycle Challenge&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Synchronization is rarely a one-time event.&amp;nbsp;Assets constantly evolve throughout their lifetime.&amp;nbsp;&lt;br /&gt;A typical lifecycle might look something like this:&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-7100fui-FluentProviderr6av ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-681&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;strong&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset Created&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset Synchronized&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset Referenced by Content&amp;nbsp; &amp;gt;&amp;nbsp; Asset &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Metadata Updated&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Visibility Rules Changed&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Environment Assignment Changed&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset No Longer Valid&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;Most DAM integrations handle the first half of this journey very well.&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;The second half is often where complexity starts to appear.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An image may no longer belong to a target environment.&lt;/li&gt;
&lt;li&gt;An image may become hidden through metadata changes.&lt;/li&gt;
&lt;li&gt;An image may remain inside Optimizely despite no longer being available within Bynder.&lt;/li&gt;
&lt;li&gt;An image may still be actively referenced by content authors even though business rules indicate it should be removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These scenarios introduce governance challenges that extend well beyond initial synchronization.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Orphaned Assets&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;One scenario that stood out during evaluation was the possibility of orphaned assets.&lt;/p&gt;
&lt;p&gt;Consider the following sequence:&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-6816fui-FluentProviderr6b8 ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-682&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;strong&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset synchronized&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Metadata changes&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset moves out of scope&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Synchronization account &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;can no longer access asset&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset remains in Optimizely&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;From the perspective of the synchronization process, the asset has effectively disappeared.&lt;/p&gt;
&lt;p&gt;The integration can no longer retrieve information about the asset.&lt;/p&gt;
&lt;p&gt;However, the existing record may continue to exist inside Optimizely.&lt;/p&gt;
&lt;p&gt;Over time, these records could accumulate, creating a divergence between the source DAM and the target CMS repository.&lt;/p&gt;
&lt;p&gt;While this may not create an immediate problem, organizations with large asset libraries may eventually start asking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which assets are still valid?&lt;/li&gt;
&lt;li&gt;Which assets should still exist?&lt;/li&gt;
&lt;li&gt;Which assets are no longer governed by the current synchronization rules?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These questions become increasingly important as repositories grow.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Environment Governance&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Another consideration involves environment ownership.&lt;/p&gt;
&lt;p&gt;Most enterprise implementations maintain separate environments:&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-1565fui-FluentProviderr6bh ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-683&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Development&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Staging&lt;/li&gt;
&lt;li&gt;Production&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;However, DAM platforms are often centrally managed.&lt;/p&gt;
&lt;p&gt;A common scenario looks something like this:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border-width: 1px; border-style: solid;&quot; src=&quot;/link/4c2f0e70051d44828bb2530d6be7e584.aspx&quot; alt=&quot;&quot; width=&quot;722&quot; height=&quot;482&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Without additional controls, all environments may receive identical assets.&lt;/p&gt;
&lt;p&gt;This can introduce several concerns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Increased storage consumption&lt;/li&gt;
&lt;li&gt;Cluttered non-production environments&lt;/li&gt;
&lt;li&gt;Difficult testing scenarios&lt;/li&gt;
&lt;li&gt;Confusion around environment-specific assets&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;Suggested Environment Metadata Approach&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;One possible approach is introducing an additional metadata property or use tags inside Bynder.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;&quot;website-environment&quot; metadata property with p&lt;/span&gt;ossible values:&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-9217fui-FluentProviderr6cc ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-686&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Development&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Staging&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Production&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This metadata could travel alongside normal asset synchronization and provide additional governance information to downstream systems.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Suggested Visibility Configuration&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Unlike visibility-based filtering rules, this property/tags does not need to setup separate profiles/users and any explicit filtering rules.&lt;/p&gt;
&lt;p&gt;The goal is not to hide assets. The goal is to communicate intent.&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-2862fui-FluentProviderr6cu ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-688&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;For example: If an asset that is tagged for development environment received in production environement then that asset should be treated as out of scope and vice versa for other environments.&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;Asset target Environment: Development&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;Asset Synced in: Production&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;Result: Potentially Out of Scope&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;scriptor-highlightWrapper&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;
&lt;div&gt;With this approach, a centralized DAM repository can continue serving multiple environments while still supporting environment-specific governance decisions.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Why Environment Metadata May Be Valuable&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Without environment metadata, every environment receives same assets.&lt;/p&gt;
&lt;p&gt;With environment metadata, environment validation processes can be setup to stop storing assets those are not required in the environment.&lt;/p&gt;
&lt;p&gt;This approach may provide a lightweight governance layer without introducing separate DAM repositories, separate taxonomies, or separate synchronization configurations.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Architectural Note&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The workflow described in the following sections represents an architectural approach that emerged during the evaluation of lifecycle management challenges associated with large-scale DAM integrations.&lt;/p&gt;
&lt;p&gt;While the individual platform capabilities required for this model&amp;mdash;including Bynder webhooks, permanent access tokens, Optimizely Graph/Content Management APIs, and Optimizely Graph reference queries&amp;mdash; are available today, the complete end-to-end workflow has not yet been fully validated in a production implementation.&lt;/p&gt;
&lt;p&gt;The intent of this article is to explore a potential governance pattern and discuss its trade-offs rather than present a proven production architecture.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Exploring an Event-Driven Governance Model&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;One approach that appears interesting from an architectural perspective is introducing a webhook-driven governance workflow.&lt;/p&gt;
&lt;p&gt;For simplicity, this article assumes the webhook endpoint is deployed inside the frontend nextjs application.&lt;/p&gt;
&lt;p&gt;In practice, the webhook could be hosted anywhere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Next.js API Route&lt;/li&gt;
&lt;li&gt;Azure Function&lt;/li&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Google Cloud Function&lt;/li&gt;
&lt;li&gt;Dedicated Middleware Service&lt;/li&gt;
&lt;li&gt;Integration Platform&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The location itself is less important than the validation process being executed.&lt;/p&gt;
&lt;p&gt;At a high level:&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-1675fui-FluentProviderr6dp ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-691&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;strong&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Bynder Calls Webhook&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Webhook Receives event&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Validation Logic&amp;nbsp; &amp;gt;&amp;nbsp; Asset remains or Deleted&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;strong&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;&lt;img style=&quot;border-width: 1px; border-style: solid;&quot; src=&quot;/link/6924927432474ebbbf0173898da1d109.aspx?1783236197175&quot; width=&quot;575&quot; height=&quot;699&quot; /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-1955fui-FluentProviderr6e2 ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-692&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;scriptor-code-scroll-proxy&quot;&gt;
&lt;h2&gt;&lt;strong&gt;Three Gates&lt;/strong&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;Gate 1: Visibility Validation&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The first validation stage could determine whether the asset remains visible to the synchronization account.&lt;br /&gt;Note: Use permanent token assigned for the synchronization account.&lt;/p&gt;
&lt;p&gt;Conceptually:&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-2459fui-FluentProviderr6eb ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-693&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset Updated&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Retrieve Asset&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Accessible&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;Decision&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-5518fui-FluentProviderr6ek ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-694&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Decision&amp;nbsp; &amp;gt;&amp;nbsp; YES&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Continue&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Decision&amp;nbsp; &amp;gt;&amp;nbsp; NO&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Potential Cleanup Candidate&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The objective is not necessarily to delete the asset immediately. Instead, the objective is to determine whether the asset still falls within the intended synchronization scope. If visibility has changed, additional evaluation may be required.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;Gate 2: Environment Validation&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The second validation stage could evaluate environmental ownership.&lt;/p&gt;
&lt;p&gt;Example workflow:&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-5562fui-FluentProviderr6et ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-695&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Asset Updated&amp;nbsp; &amp;gt; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Read website-environment&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Compare Against &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Current Environment&amp;nbsp; &amp;gt; &lt;/span&gt;Decision:&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-2919fui-FluentProviderr6f6 ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;CDXiecnD7ekDByb7Z+4oEA==&quot;&gt;
&lt;div class=&quot;r14iuplo fui-AriaLive__assertive&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Decision&amp;nbsp; &amp;gt;&amp;nbsp; Match&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Continue&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Decision&amp;nbsp; &amp;gt;&amp;nbsp; No Match&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Potential Cleanup Candidate&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This allows governance decisions to be made without requiring separate DAM repositories.&lt;/p&gt;
&lt;p&gt;An asset intended exclusively for Production could potentially be excluded from lower environments while remaining available in Production.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;Gate 3: Reference Validation&lt;/strong&gt;&lt;/h3&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;Before any removal occurs, a critical question must be answered: &lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;Is the asset still being used?&lt;/strong&gt;&lt;/div&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;Optimizely Graph does not currently expose a built-in reverse-reference lookup operator. This means there is no single, generic query to answer &quot;which content items reference this asset?&quot; without knowledge of the content model.&lt;/div&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;Possible implementation approaches include:&lt;/strong&gt;&lt;/div&gt;
&lt;ol class=&quot;_667h42 _1l4j4na7&quot;&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;Full-text search&lt;/strong&gt;&amp;nbsp;&amp;mdash; Query&amp;nbsp;&lt;code class=&quot;_667h42 _1l4j4na5&quot;&gt;Content&lt;/code&gt;&amp;nbsp;using&amp;nbsp;&lt;code class=&quot;_667h42 _1l4j4na5&quot;&gt;_fulltext: { match: &quot;asset-id&quot; }&lt;/code&gt;&amp;nbsp;to search across all indexed content. Quick but imprecise &amp;mdash; depends on how asset IDs are indexed.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;Schema introspection + targeted queries&lt;/strong&gt;&amp;nbsp;&amp;mdash; Use GraphQL introspection to discover all content types with reference-type fields, then query each one. More thorough but requires automation to be practical.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;Content Management API enumeration&lt;/strong&gt;&amp;nbsp;&amp;mdash; Use the CMS REST API to walk content and check references programmatically.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;The right approach depends on your content model complexity, performance requirements, and how frequently this validation runs.&amp;nbsp;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;This gate will likely require a custom implementation tailored to your environment.&lt;/strong&gt;&lt;/div&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;Deleting Assets from Optimizely&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Once an asset has been evaluated, a governance process may decide that removal should occur.&lt;/p&gt;
&lt;p&gt;Important questions include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is the asset still visible?&lt;/li&gt;
&lt;li&gt;Is the asset assigned to the current environment?&lt;/li&gt;
&lt;li&gt;Is the asset actively referenced?&lt;/li&gt;
&lt;li&gt;Should the asset remain synchronized?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If all validation checks indicate removal is appropriate, a deletion request could be submitted through the Content Management API.&lt;/p&gt;
&lt;p&gt;An important distinction exists between: &lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Soft Delete vs &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Hard Delete&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;For lifecycle-management scenarios, hard deletion may be more relevant because the objective is often to reduce repository footprint rather than move content into a recycle state.&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-9961fui-FluentProviderr6gs ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;CDXiecnD7ekDByb7Z+4oEA==&quot;&gt;
&lt;div class=&quot;r14iuplo fui-AriaLive__assertive&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.013%; margin-left: 0px; border-width: 1px; border-style: solid; margin-right: auto;&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9517%; text-align: left; vertical-align: top; border-style: solid; border-width: 1px;&quot;&gt;&lt;strong&gt;Url &amp;amp; Headers&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;width: 89.0357%; text-align: left; vertical-align: top; border-style: solid; border-width: 1px;&quot;&gt;
&lt;div class=&quot;_47QlA7XYWbfK2INfVvTUjg==&quot;&gt;
&lt;div class=&quot;iVmNpJv5Hu1Eu0ev0L3Ffg==&quot;&gt;
&lt;div class=&quot;KU8Z3uOm5OU11Ica53+OVA==&quot;&gt;
&lt;div class=&quot;fui-Overflow Ye6tJij6H1xMCTdS6F25rA== ___s5d2bt0 f3x039c facid5&quot;&gt;
&lt;div class=&quot;vCHKFE0-MqMN20DBXhx6Ow==&quot;&gt;
&lt;div class=&quot;fui-Badge r1p3wql8 _9liocQIfHYrfQrOa5IZ50A== ___engtnk0 f1soahph fyk0x7v f17ad7pc f1evqen2 f70w86f fmfhf0j f1ar0y7c f1fzzbuc f176ju0o&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
POST /api/content/v2/data?id=bynd HTTP/1.1&lt;br /&gt;Host: cg.optimizely.com&lt;br /&gt;Content-Type: application/x-ndjson&lt;br /&gt;Authorization: Basic V25KQmNtUlpSNTFYaDJuSmE1UWV5eEkwWW...[Your_Base64_Encoded_Credentials]&lt;br /&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-702&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9517%; text-align: left; vertical-align: top; border-style: solid; border-width: 1px;&quot;&gt;&lt;strong&gt;Body&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;width: 89.0357%; text-align: left; vertical-align: top; border-style: solid; border-width: 1px;&quot;&gt;{&quot;delete&quot;:{&quot;_id&quot;:&quot;bynder-asset-guid-12345&quot;,&quot;language_routing&quot;:&quot;en&quot;}}&lt;br /&gt;{}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.9517%; text-align: left; vertical-align: top; border-style: solid; border-width: 1px;&quot;&gt;&lt;strong&gt;Response&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;width: 89.0357%; text-align: left; vertical-align: top; border-style: solid; border-width: 1px;&quot;&gt;{&lt;br /&gt;&amp;nbsp; &quot;status&quot;: &quot;success&quot;,&lt;br /&gt;&amp;nbsp; &quot;total_records_processed&quot;: 1,&lt;br /&gt;&amp;nbsp; &quot;deleted&quot;: 1,&lt;br /&gt;&amp;nbsp; &quot;errors&quot;: [],&lt;br /&gt;&amp;nbsp; &quot;took&quot;: 42&lt;br /&gt;}&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;_47QlA7XYWbfK2INfVvTUjg==&quot;&gt;
&lt;div class=&quot;iVmNpJv5Hu1Eu0ev0L3Ffg==&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-702&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This would permanently remove the asset rather than transferring it into a recycle bin.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Monitoring and Troubleshooting&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Whenever automated deletion is introduced, observability becomes extremely important.&lt;/p&gt;
&lt;p&gt;Questions that operations teams will eventually ask include:&lt;/p&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-868fui-FluentProviderr6h5 ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-703&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Was a delete triggered?&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Which rule triggered it?&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Which asset was deleted?&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;When did it occur?&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;What response was returned?&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;A potential audit trail might capture:&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Asset identifier&lt;/li&gt;
&lt;li&gt;Event timestamp&lt;/li&gt;
&lt;li&gt;Validation results&lt;/li&gt;
&lt;li&gt;Environment&lt;/li&gt;
&lt;li&gt;API response&lt;/li&gt;
&lt;li&gt;Deletion outcome&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;Monitoring Deletion Activity&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;One area that would require validation during implementation is how deletion activity can be monitored within the platform.&lt;/p&gt;
&lt;p&gt;A potential starting point would be reviewing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Search &amp;amp; Navigation portal logs&lt;/li&gt;
&lt;li&gt;Graph activity logs&lt;/li&gt;
&lt;li&gt;API diagnostics&lt;/li&gt;
&lt;li&gt;Application telemetry&lt;/li&gt;
&lt;li&gt;Hosting platform logs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This would help determine whether delete operations are executing successfully and provide additional visibility during troubleshooting.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Extending the Existing Integration vs Building a Custom Connector&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;A natural question that often emerges is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If lifecycle governance is required, should we simply build a custom connector?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The answer depends on organizational priorities.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 79.5271%; border-width: 1px; height: 368.425px; border-spacing: 5px; border-style: solid;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 57.625px;&quot;&gt;
&lt;td style=&quot;text-align: left; vertical-align: top; border-width: 1px; width: 50.4919%; padding: 1px; border-style: solid; height: 57.625px;&quot;&gt;
&lt;h4&gt;&lt;strong&gt;Option 1: Extend the Existing Integration&lt;/strong&gt;&lt;/h4&gt;
&lt;/td&gt;
&lt;td style=&quot;text-align: left; vertical-align: top; border-width: 1px; width: 49.4881%; padding: 1px; border-style: solid; height: 57.625px;&quot;&gt;
&lt;h4&gt;&lt;strong&gt;Option 2: Build a Fully Custom Connector&lt;/strong&gt;&lt;/h4&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 310.8px;&quot;&gt;
&lt;td style=&quot;text-align: left; vertical-align: top; border-width: 1px; width: 50.4919%; padding: 1px; border-style: solid; height: 310.8px;&quot;&gt;
&lt;p&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Bynder&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;OOTB Connector&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Optimizely &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;+ Governance Layer&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faster implementation&lt;/li&gt;
&lt;li&gt;Lower maintenance overhead&lt;/li&gt;
&lt;li&gt;Vendor-supported synchronization&lt;/li&gt;
&lt;li&gt;Smaller operational footprint&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Potential limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Less control over synchronization internals&lt;/li&gt;
&lt;li&gt;Dependency on platform capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td style=&quot;text-align: left; vertical-align: top; border-width: 1px; width: 49.4881%; padding: 1px; border-style: solid; height: 310.8px;&quot;&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-9357fui-FluentProviderr6hn ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-705&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Bynder&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Custom Connector&amp;nbsp; &amp;gt;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;scriptor-textRun scriptor-inline&quot;&gt;Optimizely&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;scriptor-paragraph&quot;&gt;Advantages:&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Complete control&lt;/li&gt;
&lt;li&gt;Custom business logic&lt;/li&gt;
&lt;li&gt;Full synchronization ownership&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Potential considerations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Authentication management&lt;/li&gt;
&lt;li&gt;Delta synchronization&lt;/li&gt;
&lt;li&gt;Retry handling&lt;/li&gt;
&lt;li&gt;Error recovery&lt;/li&gt;
&lt;li&gt;Schema evolution&lt;/li&gt;
&lt;li&gt;Long-term maintenance costs&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;___77lcry0 f10pi13n&quot;&gt;
&lt;div class=&quot;___1hewfwb f10pi13n f7oukh6 f5p0z4x&quot;&gt;
&lt;div class=&quot;fui-FluentProvider codeBlock-3356fui-FluentProviderr6he ___1jk74h0 fzk5nv6 f6n0el9 f7x6x6c f1a9mlr7 flj889f f13g0yyb ffzn0d2&quot;&gt;
&lt;div class=&quot;scriptor-component-code-block NhtKn7PZLzk24rduw4FJVQ== scriptor-codeblock-virtualized&quot;&gt;
&lt;div class=&quot;UkrLoQNicnNa5hsNIz3QLw== SpjJXGAclwYtfY+SokpSTg== ZF-Q2MvOY8aWSpGWW7iKRQ== anUhzybDvd7+8CBdKK7ukg==&quot;&gt;
&lt;div class=&quot;AHKpBuU8t+rAbDNImLlOHQ== lHY5JJVFnU8S-jx-OGwJkg== IUtI8YkF5Dl2LTlcjMDTwg==&quot;&gt;
&lt;div class=&quot;___149cboo fssjx5q f11d9hfk fj2zk3l fmyxm6j f1ldmben f1rkeeuc&quot;&gt;
&lt;div class=&quot;___svqwvq0 fssjx5q f11d9hfk fj2zk3l f1ldmben fzdgvog f19k5jia fzv833z f1r8x5cv f1687457 fe71wc6 f1wco4xj f103jgab f12fk6ok f4j985t fv86erk f1b4dd42 f1qwtq3x f13gvrpj f132if0v f1vblqk2 fkxsc7s f18j3zqo f1386a7m f1w3nze9 f14pe09c f4skf1h f1lq0dgc f1jgwha3 fbf5vau fc8703c&quot;&gt;
&lt;div class=&quot;___ysqij10 fonrc96 f1d3un5n fdk4ulh f1cijgmw fzb3wgo fssjx5q f11d9hfk fee5icb fr1uqzy&quot;&gt;
&lt;div class=&quot;___sv9ola0 fj2zk3l f1f4vkoj scriptor-instance-704&quot;&gt;
&lt;div class=&quot;scriptor-canvas scriptor-styled-scrollbar focus-container&quot;&gt;
&lt;div class=&quot;scriptor-pageContainer&quot;&gt;
&lt;div class=&quot;scriptor-pageFrame scriptor-firstPage scriptor-webView scriptor-content-visibility-auto&quot;&gt;
&lt;div class=&quot;scriptor-code-editor scriptor-code-wrap-on scriptor-pageBody scriptor-webViewPage&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For many organizations, extending an existing integration with additional governance capabilities may represent a more balanced approach than replacing the synchronization engine altogether.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Assumptions and Validation Status&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The approaches discussed throughout this article are based on architectural evaluation and platform capability analysis rather than a fully validated production implementation.&lt;/p&gt;
&lt;p&gt;At the time of writing, the proposed event-driven webhook model remains an architectural concept that appears technically achievable based on the currently available capabilities of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bynder webhooks&lt;/li&gt;
&lt;li&gt;Bynder permanent tokens&lt;/li&gt;
&lt;li&gt;Optimizely Content Management /Graph APIs&lt;/li&gt;
&lt;li&gt;Optimizely Graph reference lookups&lt;/li&gt;
&lt;li&gt;Standard event-driven integration patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, several areas would benefit from additional validation before adoption within a production environment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Large-scale webhook processing behavior&lt;/li&gt;
&lt;li&gt;API rate limiting and throttling characteristics&lt;/li&gt;
&lt;li&gt;Long-running operational reliability&lt;/li&gt;
&lt;li&gt;Deletion timing and synchronization race conditions&lt;/li&gt;
&lt;li&gt;Monitoring and alerting strategies&lt;/li&gt;
&lt;li&gt;Reconciliation requirements for lost events&lt;/li&gt;
&lt;li&gt;Long-term maintenance implications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As with any architectural pattern, organizations should conduct their own validation, performance testing, and operational reviews before implementing the approach within production workloads.&lt;/p&gt;
&lt;div&gt;&lt;hr /&gt;
&lt;h2&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Asset synchronization is only one stage in the lifecycle of an enterprise DAM integration.&lt;/p&gt;
&lt;p&gt;As asset repositories grow, organizations may also need to consider how visibility changes, environment allocation, content relationships, and cleanup processes should be handled over time.&lt;/p&gt;
&lt;p&gt;The approaches discussed in this article should be viewed as architectural considerations rather than implementation recommendations. While the proposed event-driven governance model appears technically feasible based on the capabilities provided by Bynder, Optimizely SaaS CMS, and Optimizely Graph, additional validation and testing would be required before considering it for production adoption.&lt;/p&gt;
&lt;p&gt;Ultimately, long-term success is unlikely to depend solely on controlling what enters the system. It may also require thoughtful approaches to governing assets throughout their lifecycle&amp;mdash;from synchronization and distribution through validation, retention, and eventual removal.&lt;/p&gt;
&lt;hr /&gt;
&lt;h4 class=&quot;_1l4j4na1 _1qskm0h c8urk _1a0p899 _5hqrjx _667h42&quot;&gt;&#128218; Bynder + Optimizely SaaS CMS Integration Series&lt;/h4&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;This article is the final installment of a 3-part comprehensive architecture guide:&lt;/em&gt;&lt;/div&gt;
&lt;ul class=&quot;_667h42 _1l4j4na6&quot;&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;✅ Part 1:&amp;nbsp;&lt;a class=&quot;_667h42 _1l4j4nac _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;/link/4f215cd334254dfcbc121d5f4e20edd6.aspx&quot;&gt;Implementing the Connector &amp;mdash; Lessons Learned&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;What metadata syncs, how URLs behave, and how to query/render assets in a Next.js frontend.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;✅ Part 2:&amp;nbsp;&lt;a class=&quot;_667h42 _1l4j4nac _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;/link/30275ac47c4843148eeda8b7d6ed282a.aspx&quot;&gt;Planning &amp;amp; Filtering &amp;mdash; Avoiding Asset Sprawl and Unnecessary Sync&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;How we achieved metadata-based sync filtering with zero custom code.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;&#128073; Part 3: Exploring Asset Lifecycle Management &amp;amp; Three-Gate Governance&lt;/strong&gt;&amp;nbsp;&lt;em class=&quot;far4bl _667h42&quot;&gt;(You are here)&lt;/em&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;A webhook-driven, three-gate model to handle asset updates, environments, and usage verification.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</id><updated>2026-07-05T07:44:36.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Planning Your Bynder DAM and Optimizely SaaS CMS Integration the Right Way: Avoiding Asset Sprawl and Unnecessary Synchronization</title><link href="https://world.optimizely.com/blogs/vipin-banka--learnings--insights/dates/2026/7/planning-your-bynder-dam-integration-for-optimizely-saas-cms-avoiding-asset-sprawl-managing-costs-and-designing-for-scale/" /><id>&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;far4bl _667h42&quot;&gt;Note: This is Part 2 of our Bynder integration series. If you missed the Part 1, check out &quot;&lt;a href=&quot;/link/4f215cd334254dfcbc121d5f4e20edd6.aspx&quot;&gt;Implementing the Bynder DAM Connector with Optimizely SaaS CMS: Lessons Learned&lt;/a&gt;&quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;In my previous article, I explored how the Bynder DAM Connector integrates with Optimizely SaaS CMS and how synchronized assets become available through Optimizely Graph and the CMS authoring experience.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This article focuses specifically on the Out-of-the-Box (OOTB) Bynder Connector available through Optimizely Connect Platform (OCP). The goal is to understand how much control can be achieved using standard Optimizely and Bynder capabilities before introducing custom integrations, middleware, or synchronization processes.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;While the technical setup of the OOTB connector is relatively straightforward, I discovered that the most important decisions actually happen&amp;nbsp;&lt;em&gt;before&lt;/em&gt; the first synchronization is ever executed.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Many implementation teams focus on establishing the connection between Bynder and Optimizely. However, a more important architectural question is:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;What assets should Optimizely be allowed to see in the first place?&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;For organizations that use Bynder as a centralized Digital Asset Management platform, the answer has significant implications for governance, editor experience, operational overhead, and long-term scalability.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This article focuses on the planning and governance considerations that should be addressed before enabling the Bynder connector.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Understanding the Default Connector Behavior&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The Out-of-the-Box (OOTB) Bynder connector synchronizes assets that are visible to the authenticated Bynder account.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;In simple terms, the connector does not determine which assets should be synchronized. Bynder determines that by evaluating the permissions of the account used during the authorization process.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;As a result, the overall scope of synchronization is directly influenced by:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l10 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;The permission profile assigned to the integration account&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l10 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Asset visibility settings within Bynder&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l10 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Metadata visibility rules&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l10 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;The account used during connector authorization&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The connector can only synchronize assets that the authenticated account can access.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This seemingly simple behavior becomes extremely important when working with large DAM implementations.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Why Asset Scope Matters&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;In many organizations, Bynder contains assets for multiple business functions and audiences.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Examples include:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l3 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Website assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l3 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Campaign assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l3 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Product photography&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l3 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Internal communications&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l3 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Regional marketing materials&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l3 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Archived content&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l3 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Partner-specific assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l3 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Brand assets&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Not all of these assets are intended for websites powered by Optimizely.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Without careful planning, the connector can synchronize substantially more assets than editors actually need.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;At first glance this may not appear to be a major concern. However, every synchronized asset becomes another content item managed by the Optimizely ecosystem.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;As synchronization volume grows:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l12 level1 lfo3; tab-stops: list 36.0pt;&quot;&gt;More items are stored in Optimizely Graph&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l12 level1 lfo3; tab-stops: list 36.0pt;&quot;&gt;More content records are created&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l12 level1 lfo3; tab-stops: list 36.0pt;&quot;&gt;More synchronization events are processed&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l12 level1 lfo3; tab-stops: list 36.0pt;&quot;&gt;Asset selection becomes harder for editors&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l12 level1 lfo3; tab-stops: list 36.0pt;&quot;&gt;Governance becomes increasingly complex&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Most importantly, organizations should understand how content volume contributes to overall platform usage and operational overhead.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;For this reason, a successful DAM strategy is not about synchronizing everything that exists inside Bynder.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;It is about synchronizing only what is required.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Start With Governance, Not Technology&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;One of the biggest lessons learned during implementation was that DAM integrations are primarily a governance challenge rather than a technical challenge.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The connector itself can be configured very quickly.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Determining which assets should be synchronized requires considerably more thought.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Before connecting Bynder to Optimizely, I recommend answering questions such as:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l14 level1 lfo4; tab-stops: list 36.0pt;&quot;&gt;Which assets are intended for public websites?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l14 level1 lfo4; tab-stops: list 36.0pt;&quot;&gt;Which business teams own those assets?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l14 level1 lfo4; tab-stops: list 36.0pt;&quot;&gt;Which environments require those assets?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l14 level1 lfo4; tab-stops: list 36.0pt;&quot;&gt;Who approves synchronization scope changes?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l14 level1 lfo4; tab-stops: list 36.0pt;&quot;&gt;How will future asset growth be managed?&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Answering these questions early can prevent a significant amount of cleanup work later.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;The Common Mistake: Connecting With an Administrator Account&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The easiest way to enable the connector is often to authenticate using an administrator account.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The workflow usually looks something like this:&lt;/p&gt;
&lt;ol style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l4 level1 lfo5; tab-stops: list 36.0pt;&quot;&gt;Open the Bynder connector.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l4 level1 lfo5; tab-stops: list 36.0pt;&quot;&gt;Click Connect.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l4 level1 lfo5; tab-stops: list 36.0pt;&quot;&gt;Log in using administrative credentials.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l4 level1 lfo5; tab-stops: list 36.0pt;&quot;&gt;Approve access.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l4 level1 lfo5; tab-stops: list 36.0pt;&quot;&gt;Start synchronizing.&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The problem is that administrator accounts often see virtually everything.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;That means the connector can potentially see:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l8 level1 lfo6; tab-stops: list 36.0pt;&quot;&gt;Website assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l8 level1 lfo6; tab-stops: list 36.0pt;&quot;&gt;Internal assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l8 level1 lfo6; tab-stops: list 36.0pt;&quot;&gt;Historical assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l8 level1 lfo6; tab-stops: list 36.0pt;&quot;&gt;Regional assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l8 level1 lfo6; tab-stops: list 36.0pt;&quot;&gt;Unused assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l8 level1 lfo6; tab-stops: list 36.0pt;&quot;&gt;Archived assets&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;In other words, the connector effectively inherits access to the entire DAM repository.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This removes any meaningful synchronization boundaries.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Why Creating a New User Is Not Enough&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;A common assumption is:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&quot;I&#39;ll simply create a new user for Optimizely and restrict its permissions.&quot;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Unfortunately, this is where many implementations run into trouble.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Bynder permissions are primarily controlled through Permission Profiles.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The effective model looks like this:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Permission Profile&amp;nbsp; &amp;rarr;&amp;nbsp; User&amp;nbsp; &amp;rarr;&amp;nbsp; Asset Visibility&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This means that simply creating a new user does not automatically reduce visibility.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;If the new integration user remains associated with a highly privileged profile, that user may still inherit broad access to assets.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;In practice, creating a new user and placing it within an administrator-level permission profile often results in another highly privileged user.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The desired filtering behavior never materializes.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This is why a dedicated Permission Profile becomes essential.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;The Recommended Approach&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Instead of creating a user within an existing administrative profile, create:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo7; tab-stops: list 36.0pt;&quot;&gt;A dedicated synchronization user&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo7; tab-stops: list 36.0pt;&quot;&gt;A dedicated synchronization permission profile&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo7; tab-stops: list 36.0pt;&quot;&gt;Dedicated metadata visibility rules&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Together, these become the foundation of your synchronization strategy.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The goal is to create an account that acts as a read-only integration consumer and nothing more.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h4&gt;&lt;strong&gt;1. Creating a Dedicated Synchronization Profile&lt;/strong&gt;&lt;/h4&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The dedicated synchronization profile should be configured with only the permissions required for integration purposes.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Recommended permissions include:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Asset Bank&lt;/strong&gt;&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l15 level1 lfo8; tab-stops: list 36.0pt;&quot;&gt;View assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l15 level1 lfo8; tab-stops: list 36.0pt;&quot;&gt;Search assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l15 level1 lfo8; tab-stops: list 36.0pt;&quot;&gt;View asset details&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l15 level1 lfo8; tab-stops: list 36.0pt;&quot;&gt;View metaproperties&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;General / Integration&lt;/strong&gt;&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l2 level1 lfo9; tab-stops: list 36.0pt;&quot;&gt;API Access&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l2 level1 lfo9; tab-stops: list 36.0pt;&quot;&gt;Manage Webhooks&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Permissions that generally do not need to be enabled include:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l7 level1 lfo10; tab-stops: list 36.0pt;&quot;&gt;Upload assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l7 level1 lfo10; tab-stops: list 36.0pt;&quot;&gt;Edit assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l7 level1 lfo10; tab-stops: list 36.0pt;&quot;&gt;Delete assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l7 level1 lfo10; tab-stops: list 36.0pt;&quot;&gt;Manage taxonomy&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l7 level1 lfo10; tab-stops: list 36.0pt;&quot;&gt;Administrative functions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;&lt;strong&gt;2. Create a Dedicated Synchronization Account&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Once the synchronization profile has been configured, create a dedicated service account and assign it exclusively to that profile.&lt;/p&gt;
&lt;p&gt;This account will be used during the Bynder authorization process and will ultimately determine which assets the Optimizely connector can access.&lt;/p&gt;
&lt;p&gt;Avoid assigning the account to an existing administrative profile or a profile used by content creators. The goal is to create a narrowly scoped integration account whose sole responsibility is synchronizing approved assets into Optimizely.&lt;/p&gt;
&lt;p&gt;By separating the integration account from day-to-day user accounts, you gain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Predictable synchronization behavior&lt;/li&gt;
&lt;li&gt;Easier troubleshooting&lt;/li&gt;
&lt;li&gt;Clear ownership of integration permissions&lt;/li&gt;
&lt;li&gt;Reduced risk of unintentionally exposing additional assets to Optimizely&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;3. Using Metadata as a Synchronization Boundary&lt;/strong&gt;&lt;/h4&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Many teams think about metadata exclusively in terms of search and categorization.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;During this implementation, I found it equally useful to think of metadata as a governance mechanism.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Metadata can help answer questions such as:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l13 level1 lfo11; tab-stops: list 36.0pt;&quot;&gt;Should this asset be visible to websites?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l13 level1 lfo11; tab-stops: list 36.0pt;&quot;&gt;Which business unit owns this asset?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l13 level1 lfo11; tab-stops: list 36.0pt;&quot;&gt;Which region can use this asset?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l13 level1 lfo11; tab-stops: list 36.0pt;&quot;&gt;Which environments should receive this asset?&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;By implementing metadata-driven visibility, organizations can define synchronization boundaries before assets enter Optimizely.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This keeps governance as close as possible to the source system.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h4 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;4. Configuring Metadata Visibility&lt;/strong&gt;&lt;/h4&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;One effective approach is to use a &lt;strong&gt;required metadata property&lt;/strong&gt; that identifies whether an asset is intended for website consumption.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;For example: &lt;strong&gt;VisibleTo&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;border-width: 1px; border-style: solid;&quot; src=&quot;/link/9b93cf8ded06433fb473d4ee88ef7f0d.aspx?1783186950489&quot; width=&quot;447&quot; height=&quot;174&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;To configure this:&lt;/p&gt;
&lt;ol style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l17 level1 lfo12; tab-stops: list 36.0pt;&quot;&gt;Navigate to &lt;strong&gt;Settings&amp;nbsp; &amp;rarr;&amp;nbsp; Taxonomy&amp;nbsp; &amp;rarr;&amp;nbsp; Metaproperties Management&lt;/strong&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l17 level1 lfo12; tab-stops: list 36.0pt;&quot;&gt;Select the metadata property&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l17 level1 lfo12; tab-stops: list 36.0pt;&quot;&gt;Open the &lt;strong&gt;Visibility&lt;/strong&gt; configuration&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l17 level1 lfo12; tab-stops: list 36.0pt;&quot;&gt;Select the synchronization profile&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l17 level1 lfo12; tab-stops: list 36.0pt;&quot;&gt;Grant/deny visibility only to approved metadata values.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img style=&quot;border-width: 1px; border-style: solid;&quot; src=&quot;/link/f4763bfeca7d40b780f19110f800e0c8.aspx?1783187024542&quot; width=&quot;564&quot; height=&quot;330&quot; /&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;When configured correctly, the synchronization account becomes effectively blind to assets outside the approved scope.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h4 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;5. Validate Before Connecting&lt;/strong&gt;&lt;/h4&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;One of the most valuable steps in the entire process happens before Optimizely is connected.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;After creating the synchronization account and permission profile:&lt;/p&gt;
&lt;ol style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l11 level1 lfo13; tab-stops: list 36.0pt;&quot;&gt;Open an Incognito or InPrivate browser session.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l11 level1 lfo13; tab-stops: list 36.0pt;&quot;&gt;Login using the synchronization account.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l11 level1 lfo13; tab-stops: list 36.0pt;&quot;&gt;Search for assets.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l11 level1 lfo13; tab-stops: list 36.0pt;&quot;&gt;Browse collections.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l11 level1 lfo13; tab-stops: list 36.0pt;&quot;&gt;Verify metadata visibility.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l11 level1 lfo13; tab-stops: list 36.0pt;&quot;&gt;Validate that only the intended assets are available.&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Ask yourself:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;If I connect Optimizely using this account right now, am I comfortable synchronizing every asset visible on this screen?&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;If the answer is no, continue refining the profile before proceeding.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This simple validation step can save considerable troubleshooting effort later.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;The Authorization Flow Trap&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Another lesson learned during implementation is that the authorization process deserves more attention than most teams initially give it.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The connector authorization flow uses the account that participates in the OAuth approval process.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;If an existing browser session already contains administrative Bynder credentials, those credentials may inadvertently be used during authorization.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;To avoid this:&lt;/p&gt;
&lt;ol style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l6 level1 lfo14; tab-stops: list 36.0pt;&quot;&gt;Open a fresh InPrivate or Incognito browser window.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l6 level1 lfo14; tab-stops: list 36.0pt;&quot;&gt;Login to Optimizely SaaS CMS.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l6 level1 lfo14; tab-stops: list 36.0pt;&quot;&gt;Start the Bynder App installation and connection process.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;strong&gt;Most Important:&lt;/strong&gt;
&lt;ol style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l6 level1 lfo14; tab-stops: list 36.0pt;&quot;&gt;Installation process must open the Bynder login page.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l6 level1 lfo14; tab-stops: list 36.0pt;&quot;&gt;Login using the dedicated synchronization account.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l6 level1 lfo14; tab-stops: list 36.0pt;&quot;&gt;Complete the authorization flow.&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Using a clean browser session helps ensure the connector is authorized with the intended account rather than accidentally inheriting access from an existing administrative session.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h4 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Understanding the Synchronization Flow&lt;/strong&gt;&lt;/h4&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Scenario A : Asset is visible to the synchronization account&lt;/strong&gt;&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;Asset uploaded/updated into Bynder.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;Bynder triggers the OCP connector webhook.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;Bynder receives a request from the connector.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;The synchronization account is authorized to view the asset.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;Bynder returns the asset payload.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;OCP processes the response.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;The asset is synchronized into Optimizely Graph.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;The asset may become available within CMS depending on configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;img style=&quot;border-width: 1px; border-style: solid;&quot; src=&quot;/link/a927f1a971c74079be8d3e97e45419be.aspx?1783187744711&quot; width=&quot;582&quot; height=&quot;391&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Scenario B : Asset is not visible to the synchronization account&lt;/strong&gt;&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li&gt;Asset uploaded/updated into Bynder.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;Bynder triggers the OCP connector webhook.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo15; tab-stops: list 36.0pt;&quot;&gt;Bynder receives a request from the connector.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l9 level1 lfo16; tab-stops: list 36.0pt;&quot;&gt;Bynder evaluates permissions.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l9 level1 lfo16; tab-stops: list 36.0pt;&quot;&gt;Access is denied because the synchronization account cannot see the asset.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l9 level1 lfo16; tab-stops: list 36.0pt;&quot;&gt;No asset payload is returned.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l9 level1 lfo16; tab-stops: list 36.0pt;&quot;&gt;OCP connector skips synchronization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This means filtering occurs naturally through the permission model rather than through custom synchronization logic.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;img style=&quot;border-width: 1px; border-style: solid;&quot; src=&quot;/link/cae36a1cec544c05918e7bcee09a60d8.aspx?1783187879183&quot; width=&quot;447&quot; height=&quot;428&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Key Lessons Learned&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;One of the biggest realizations are that successful DAM integrations are defined long before the first asset is synchronized.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;A few recommendations I would strongly encourage:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l5 level1 lfo18; tab-stops: list 36.0pt;&quot;&gt;Define synchronization boundaries before configuring the connector.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l5 level1 lfo18; tab-stops: list 36.0pt;&quot;&gt;Create a dedicated integration profile instead of reusing administrative profiles.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l5 level1 lfo18; tab-stops: list 36.0pt;&quot;&gt;Use metadata strategically rather than treating it purely as a categorization tool.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l5 level1 lfo18; tab-stops: list 36.0pt;&quot;&gt;Validate permissions using a private browser session before connecting Optimizely.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l5 level1 lfo18; tab-stops: list 36.0pt;&quot;&gt;Think carefully about which assets truly belong inside the website ecosystem.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l5 level1 lfo18; tab-stops: list 36.0pt;&quot;&gt;Start with a smaller, controlled asset scope and expand incrementally if needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Most importantly:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Just because an asset exists in Bynder does not mean it needs to exist in Optimizely.&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The Bynder connector makes it very easy to bring DAM assets into Optimizely SaaS CMS.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;However, the long-term success of the integration depends less on connector configuration and more on governance decisions made beforehand.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;By investing time in permission profiles, metadata design, synchronization boundaries, and dedicated integration accounts, organizations can significantly reduce operational overhead and create a much cleaner experience for both editors and developers.&lt;/p&gt;
&lt;div&gt;In my next article, I&#39;ll take a deeper look at what happens after synchronization is established. We&#39;ll explore how asset visibility changes can create orphan records, how synchronization behavior is impacted when assets move in and out of scope, and the operational challenges that emerge in multi-environment implementations. I&#39;ll also discuss environment-specific asset governance considerations, common pitfalls organizations encounter as their DAM footprint grows, and architectural approaches for keeping Optimizely environments clean, scalable, and maintainable over time.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 class=&quot;_1l4j4na1 _1qskm0h c8urk _1a0p899 _5hqrjx _667h42&quot;&gt;&#128218; Bynder + Optimizely SaaS CMS Integration Series&lt;/h4&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot;&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;This article is the second installment of a 3-part comprehensive architecture guide:&lt;/em&gt;&lt;/div&gt;
&lt;ul class=&quot;_667h42 _1l4j4na6&quot;&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;✅ Part 1:&amp;nbsp;&lt;a class=&quot;_667h42 _1l4j4nac _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;/link/4f215cd334254dfcbc121d5f4e20edd6.aspx&quot;&gt;Implementing the Connector &amp;mdash; Lessons Learned&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;What metadata syncs, how URLs behave, and how to query/render assets in a Next.js frontend.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;&#128073; Part 2: Planning &amp;amp; Filtering &amp;mdash; Avoiding Asset Sprawl and Unnecessary Sync&lt;/strong&gt;&amp;nbsp;&lt;em class=&quot;far4bl _667h42&quot;&gt;(You are here)&lt;/em&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;How we achieved metadata-based sync filtering with zero custom code.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;⏭️ Part 3:&amp;nbsp;&lt;a class=&quot;_667h42 _1l4j4nac _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;/link/650c1d72d9a84c28b2355e8942fc7cda.aspx&quot;&gt;Exploring Asset Lifecycle Management &amp;amp; Three-Gate Governance&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;Explore a webhook-driven, three-gate model to handle asset updates, environments, and usage verification.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</id><updated>2026-07-04T18:28:12.0000000Z</updated><summary type="html">Blog post</summary></entry> <entry><title>Implementing the Bynder DAM Connector with Optimizely SaaS CMS: Lessons Learned</title><link href="https://world.optimizely.com/blogs/vipin-banka--learnings--insights/dates/2026/7/implementing-the-bynder-dam-connector-with-optimizely-saas-cms-lessons-learned/" /><id>&lt;p class=&quot;MsoNormal&quot;&gt;&lt;em&gt;What I learned while integrating Bynder DAM with Optimizely SaaS CMS, exploring Optimizely Graph, and building a headless frontend experience.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;
&lt;h2 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;While working on an Optimizely SaaS CMS implementation, I spent considerable time understanding how the Bynder DAM connector works, what data gets synchronized, how assets appear in Optimizely Graph, and how frontend applications should consume those assets.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Although both Optimizely and Bynder provide documentation, I found very little content that shows the complete end-to-end picture:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;What metadata gets synchronized?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;How do assets appear in Optimizely CMS?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;What does the data look like in Optimizely Graph?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;How do developers render images, videos, and documents?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;How do public and private assets behave?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;What are the limitations of the connector?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 12.0pt; line-height: 115%; font-family: &#39;Aptos&#39;,sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Aptos; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: &#39;Times New Roman&#39;; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-IN; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;&quot;&gt;This article summarizes my findings and lessons learned from exploring the integration.&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;What is Optimizely SaaS CMS?&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Optimizely SaaS CMS is a cloud-native content management platform that enables organizations to create and manage content experiences across websites, mobile applications, portals, and other digital channels.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Key capabilities include:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Content modeling&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Headless content delivery&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Visual editing&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Multi-site architecture&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Optimizely Graph integration&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;API-first content management&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Unlike traditional CMS platforms, content in Optimizely SaaS is managed through content types and delivered through APIs and Optimizely Graph.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;What is Bynder?&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Bynder is an enterprise Digital Asset Management (DAM) platform.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Organizations typically use Bynder to manage:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Images&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Videos&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Brand assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Product photography&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Brochures and documents&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Marketing collateral&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Digital media libraries&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Bynder often serves as the single source of truth for digital assets while Optimizely serves as the source of truth for content.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;Why Do We Need a Connector?&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Without a connector, editorial teams typically follow this process:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Bynder DAM &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Download Asset &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Upload Asset to CMS &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Use Asset on Website&lt;br /&gt;OR&lt;br /&gt;Bynder DAM &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Copy Asset URL &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Paste Asset URL to CMS &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Use Asset on Website&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;This creates multiple problems:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Duplicate storage&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Asset versioning issues&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Governance challenges&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Increased maintenance effort&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Multiple sources of truth&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;The Bynder Connector changes the process significantly:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Bynder DAM &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; DAM Connector &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Optimizely Graph &amp;amp; CMS &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Frontend Application&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Benefits include:&lt;/p&gt;
&lt;ul style=&quot;margin-top: 0cm;&quot;&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Single source of truth&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;No duplicate assets&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Improved governance&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Centralized asset management&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;&quot;&gt;Better scalability&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Editors never need to download and re-upload assets.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Instead, references to Bynder assets become available directly within Optimizely CMS.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Understanding the Bynder Asset Model&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;One of the first things I wanted to understand was what data becomes available. &lt;span style=&quot;font-size: 12.0pt; line-height: 115%; font-family: &#39;Aptos&#39;,sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Aptos; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: &#39;Times New Roman&#39;; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-IN; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;&quot;&gt;A Bynder asset can be thought of as a combination of following:&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;article-editor-bullet-list&quot;&gt;
&lt;li class=&quot;article-editor-list-item&quot;&gt;
&lt;p class=&quot;article-editor-paragraph&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Bynder Managed Fields - &lt;/strong&gt;Maintained automatically by Bynder. These fields describe the physical asset itself.&lt;/p&gt;
&lt;/li&gt;
&lt;li class=&quot;article-editor-list-item&quot; style=&quot;text-align: left;&quot;&gt;
&lt;p class=&quot;article-editor-paragraph&quot;&gt;&lt;strong&gt;User Managed Fields - &lt;/strong&gt;These fields are managed by DAM users and are often used for: Search, Categorization, Filtering, Metadata enrichment.&lt;/p&gt;
&lt;/li&gt;
&lt;li class=&quot;article-editor-list-item&quot; style=&quot;text-align: left;&quot;&gt;
&lt;p class=&quot;article-editor-paragraph&quot;&gt;&lt;strong&gt;User Managed Flags: &lt;/strong&gt;These fields can influence asset behavior. These become particularly important when assets are exposed to public-facing websites.&lt;/p&gt;
&lt;/li&gt;
&lt;li class=&quot;article-editor-list-item&quot; style=&quot;text-align: left;&quot;&gt;
&lt;p class=&quot;article-editor-paragraph&quot;&gt;&lt;strong&gt;URLs:&lt;/strong&gt; Assets URLs based on asset object and various configurations and enabled features in Bynder.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 12.0pt; line-height: 115%; font-family: &#39;Aptos&#39;,sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Aptos; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: &#39;Times New Roman&#39;; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-IN; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;&quot;&gt;&lt;br /&gt;&lt;img src=&quot;/link/717b08ca5a0f40aaa9d6924e17798cc1.aspx&quot; /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Understanding the Available Asset URLs&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;One of the most useful discoveries was understanding which URLs are available for different asset types.&amp;nbsp;Not every asset type exposes the same URLs.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h4 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Image Assets - &lt;/strong&gt;Image assets typically provide:&lt;/h4&gt;
&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; margin-left: 0px; margin-right: auto; width: 79.5455%; height: 233px; border-image: initial; border: medium none currentcolor;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 40.7625px;&quot;&gt;
&lt;td style=&quot;width: 33.7357%; border: 1pt solid windowtext; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 40.7625px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Original URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 32.4977%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 40.7625px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Thumbnail URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.5809%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 40.7625px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Transform Base URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 65.2px;&quot;&gt;
&lt;td style=&quot;width: 33.7357%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: currentcolor windowtext windowtext; border-image: initial; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 65.2px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Represents the original uploaded file.&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 32.4977%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 65.2px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;Represents a smaller version of the image.&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.5809%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 65.2px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;Instead of generating multiple physical image versions, Bynder allows images to be transformed dynamically.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 135.262px;&quot;&gt;
&lt;td style=&quot;width: 33.7357%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: currentcolor windowtext windowtext; border-image: initial; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 135.262px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Use cases:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;High-resolution download, &lt;br /&gt;Print-quality rendering, &lt;br /&gt;Internal consumption&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 32.4977%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 135.262px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Use cases:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Asset pickers, &lt;br /&gt;Search results, &lt;br /&gt;Content listings, &lt;br /&gt;Media libraries&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.5809%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; line-height: 1; height: 135.262px; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Use cases:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Hero banners, &lt;br /&gt;Product images, &lt;br /&gt;Responsive image delivery, &lt;br /&gt;Mobile optimization, &lt;br /&gt;Social sharing images&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;Transform Base URL helps improve:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Performance&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Page speed&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Bandwidth consumption&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h4 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Video Assets - &lt;/strong&gt;Video assets typically provide:&lt;/h4&gt;
&lt;table class=&quot;MsoTableGrid&quot; style=&quot;width: 948px; border-collapse: collapse; border-image: initial; height: 188px; border: medium none currentcolor;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes;&quot;&gt;
&lt;td style=&quot;width: 301.017px; border: 1pt solid windowtext; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Original URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 300.742px; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Thumbnail URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 299.905px; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Video Preview URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 1;&quot;&gt;
&lt;td style=&quot;width: 301.017px; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: currentcolor windowtext windowtext; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;The complete video asset&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 300.742px; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;Poster image for the video.&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 299.905px; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;Optimized preview version.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 2; mso-yfti-lastrow: yes;&quot;&gt;
&lt;td style=&quot;width: 301.017px; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: currentcolor windowtext windowtext; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Use cases:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Full playback,&lt;br /&gt;Downloads,&lt;br /&gt;Media processing&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 300.742px; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Use cases:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Video cards,&lt;br /&gt;Search results,&lt;br /&gt;Carousel view&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 299.905px; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Use cases:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;Video galleries,&lt;br /&gt;Content previews,&lt;br /&gt;Editorial review&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h4 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Document Assets - &lt;/strong&gt;Document assets typically provide:&lt;/h4&gt;
&lt;table class=&quot;MsoTableGrid&quot; style=&quot;width: 584px; border-collapse: collapse; border-image: initial; height: 177px; border: medium none currentcolor;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes;&quot;&gt;
&lt;td style=&quot;width: 276.225px; border: 1pt solid windowtext; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Original URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 276.238px; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Thumbnail URL&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 1; mso-yfti-lastrow: yes;&quot;&gt;
&lt;td style=&quot;width: 276.225px; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: currentcolor windowtext windowtext; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Used for:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Document downloads,&lt;br /&gt;Direct viewing,&lt;br /&gt;PDF rendering&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 276.238px; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Used for:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Document previews,&lt;br /&gt;Search results,&lt;br /&gt;Asset browsers&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Setting Up the Connector&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Connector setup is relatively straightforward. Follow the documentation here:&lt;br /&gt;&lt;a href=&quot;https://support.optimizely.com/hc/en-us/articles/37465644973069-Configure-the-Bynder-app&quot;&gt;https://support.optimizely.com/hc/en-us/articles/37465644973069-Configure-the-Bynder-app&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Typical configuration requires:&lt;/p&gt;
&lt;ol&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;!-- [if !supportLists]--&gt;Bynder Admin Access&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;!--[endif]--&gt;Webhook permissions on your Bynder user profile to authorize this integration.&lt;br /&gt;&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;&lt;img src=&quot;/link/9c05c0fedea141afa9dab9a3c5c06c34.aspx&quot; width=&quot;333&quot; height=&quot;338&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;&lt;span style=&quot;text-indent: -18pt;&quot;&gt;Bynder OAuth App, Client ID, Client Secret&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-indent: -18pt;&quot;&gt;OCP (Connect Platform) access in Optimizely SaaS instance.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Note that:&lt;br /&gt;a) Setup separate sync for:&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;margin-left: 54pt; text-indent: -18pt; text-align: left;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-bidi-font-family: Aptos; mso-bidi-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;1.&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Each Bynder object i.e. image, document, video.&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin-left: 54pt; text-indent: -18pt; text-align: left;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-bidi-font-family: Aptos; mso-bidi-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;2.&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Each Optimizely environment i.e. Dev, Stage, Prod (test1, test2, Production)&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;margin-left: 54pt; text-indent: -18pt; text-align: left;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-bidi-font-family: Aptos; mso-bidi-theme-font: minor-latin;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;3.&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Each Language (if applicable) otherwise use Neutral language&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;b) &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;In the Destination create separate ContentType for each object i.e. Image &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; BynderImage, Document &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; BynderDocument, Video &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; BynderVideo&lt;br /&gt;&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;&lt;!-- [if gte vml 1]&gt;&lt;v:shape id=&quot;Picture_x0020_1&quot;
 o:spid=&quot;_x0000_i1027&quot; type=&quot;#_x0000_t75&quot; style=&#39;width:141.6pt;height:142.8pt;
 visibility:visible;mso-wrap-style:square&#39;&gt;
 &lt;v:imagedata src=&quot;file:///C:/Users/VBanka/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png&quot;
  o:title=&quot;&quot;/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!-- [if !vml]--&gt;&lt;img src=&quot;/link/f5f31192a9884124b0db9dd9fd09fd70.aspx&quot; width=&quot;240&quot; height=&quot;241&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;c) Ensure selection of &amp;ldquo;Make available as CMS Content&amp;rdquo; checkbox.&lt;br /&gt;&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;&lt;!-- [if gte vml 1]&gt;&lt;v:shape id=&quot;Picture_x0020_18&quot;
 o:spid=&quot;_x0000_i1026&quot; type=&quot;#_x0000_t75&quot; style=&#39;width:277.8pt;height:293.4pt;
 visibility:visible;mso-wrap-style:square&#39;&gt;
 &lt;v:imagedata src=&quot;file:///C:/Users/VBanka/AppData/Local/Temp/msohtmlclip1/01/clip_image005.png&quot;
  o:title=&quot;&quot;/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!-- [if !vml]--&gt;&lt;img src=&quot;/link/282149262aa94df1b3376c4a82e1ac77.aspx&quot; width=&quot;370&quot; height=&quot;391&quot; border=&quot;0&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Once configured successfully:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Bynder Assets &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; DAM Connector &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Optimizely Graph + CMS Content Type&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Assets become available inside Optimizely Graph and CMS both without custom code.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Content Manager Experience&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;From an editorial perspective, this is where things become interesting.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;After configuration, editors can browse DAM assets directly inside CMS.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;The Content Manager navigation typically exposes a dedicated content provider area.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;&lt;!-- [if gte vml 1]&gt;&lt;v:shapetype
 id=&quot;_x0000_t75&quot; coordsize=&quot;21600,21600&quot; o:spt=&quot;75&quot; o:preferrelative=&quot;t&quot;
 path=&quot;m@4@5l@4@11@9@11@9@5xe&quot; filled=&quot;f&quot; stroked=&quot;f&quot;&gt;
 &lt;v:stroke joinstyle=&quot;miter&quot;/&gt;
 &lt;v:formulas&gt;
  &lt;v:f eqn=&quot;if lineDrawn pixelLineWidth 0&quot;/&gt;
  &lt;v:f eqn=&quot;sum @0 1 0&quot;/&gt;
  &lt;v:f eqn=&quot;sum 0 0 @1&quot;/&gt;
  &lt;v:f eqn=&quot;prod @2 1 2&quot;/&gt;
  &lt;v:f eqn=&quot;prod @3 21600 pixelWidth&quot;/&gt;
  &lt;v:f eqn=&quot;prod @3 21600 pixelHeight&quot;/&gt;
  &lt;v:f eqn=&quot;sum @0 0 1&quot;/&gt;
  &lt;v:f eqn=&quot;prod @6 1 2&quot;/&gt;
  &lt;v:f eqn=&quot;prod @7 21600 pixelWidth&quot;/&gt;
  &lt;v:f eqn=&quot;sum @8 21600 0&quot;/&gt;
  &lt;v:f eqn=&quot;prod @7 21600 pixelHeight&quot;/&gt;
  &lt;v:f eqn=&quot;sum @10 21600 0&quot;/&gt;
 &lt;/v:formulas&gt;
 &lt;v:path o:extrusionok=&quot;f&quot; gradientshapeok=&quot;t&quot; o:connecttype=&quot;rect&quot;/&gt;
 &lt;o:lock v:ext=&quot;edit&quot; aspectratio=&quot;t&quot;/&gt;
&lt;/v:shapetype&gt;&lt;v:shape id=&quot;Picture_x0020_20&quot; o:spid=&quot;_x0000_i1052&quot; type=&quot;#_x0000_t75&quot;
 style=&#39;width:451.2pt;height:151.8pt;visibility:visible;mso-wrap-style:square&#39;
 o:bordertopcolor=&quot;yellow pure&quot; o:borderleftcolor=&quot;yellow pure&quot;
 o:borderbottomcolor=&quot;yellow pure&quot; o:borderrightcolor=&quot;yellow pure&quot;&gt;
 &lt;v:imagedata src=&quot;file:///C:/Users/VBanka/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png&quot;
  o:title=&quot;&quot;/&gt;
 &lt;w:bordertop type=&quot;single&quot; width=&quot;6&quot;/&gt;
 &lt;w:borderleft type=&quot;single&quot; width=&quot;6&quot;/&gt;
 &lt;w:borderbottom type=&quot;single&quot; width=&quot;6&quot;/&gt;
 &lt;w:borderright type=&quot;single&quot; width=&quot;6&quot;/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!-- [if !vml]--&gt;&lt;img src=&quot;/link/470118ee057e4cdcb0fbfd2a052e02bb.aspx&quot; width=&quot;603&quot; height=&quot;204&quot; /&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;mso-no-proof: yes;&quot;&gt;&lt;!-- [if gte vml 1]&gt;&lt;v:shape
 id=&quot;Picture_x0020_1&quot; o:spid=&quot;_x0000_i1051&quot; type=&quot;#_x0000_t75&quot; style=&#39;width:451.2pt;
 height:169.8pt;visibility:visible;mso-wrap-style:square&#39; o:bordertopcolor=&quot;yellow pure&quot;
 o:borderleftcolor=&quot;yellow pure&quot; o:borderbottomcolor=&quot;yellow pure&quot;
 o:borderrightcolor=&quot;yellow pure&quot;&gt;
 &lt;v:imagedata src=&quot;file:///C:/Users/VBanka/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png&quot;
  o:title=&quot;&quot;/&gt;
 &lt;w:bordertop type=&quot;single&quot; width=&quot;6&quot;/&gt;
 &lt;w:borderleft type=&quot;single&quot; width=&quot;6&quot;/&gt;
 &lt;w:borderbottom type=&quot;single&quot; width=&quot;6&quot;/&gt;
 &lt;w:borderright type=&quot;single&quot; width=&quot;6&quot;/&gt;
&lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!-- [if !vml]--&gt;&lt;img src=&quot;/link/aaa2751bab514ace865a38bbd7c8ab7d.aspx&quot; width=&quot;603&quot; height=&quot;228&quot; /&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;At this point, editors do not need to leave CMS to discover assets stored in Bynder.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;They can:&amp;nbsp;Search, Browse, Filter, Reference assets&amp;nbsp;directly from the content authoring experience.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;How Assets Appear in Optimizely Graph&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Once synchronized, DAM assets become queryable through Graph.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;A simplified query may look like (the exact query will depend on your field mappings)&lt;br style=&quot;mso-special-character: line-break;&quot; /&gt;&lt;!-- [if !supportLineBreakNewLine]--&gt;&lt;br style=&quot;mso-special-character: line-break;&quot; /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;
&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; margin-left: 0px; margin-right: auto; border-image: initial; height: 362px; width: 73.2839%; border: medium none currentcolor;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes;&quot;&gt;
&lt;td style=&quot;width: 0%; border: 1pt solid windowtext; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Image&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 0%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Video&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 0%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Document&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 1; mso-yfti-lastrow: yes;&quot;&gt;
&lt;td style=&quot;width: 0%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: currentcolor windowtext windowtext; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;query {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp; BynderImage {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; items {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; originalUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thumbnailUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transformBaseUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;}&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 0%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;query {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp; BynderVideo {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; items {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; originalUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thumbnailUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;videoPreviewURL&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;}&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 0%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;query {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp; BynderDocument {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; items {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; originalUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thumbnailUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;}&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;One of the biggest advantages is that content and media can now be retrieved through a single API layer.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Using DAM Assets in Content Types&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;The connector enables DAM-specific property types.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Example:&lt;/p&gt;
&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; border-image: initial; height: 203px; width: 67.718%; border: medium none currentcolor;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;&quot;&gt;
&lt;td style=&quot;width: 0%; border: 1pt solid windowtext; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;News Article Page&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level1 lfo1; margin: 0cm 0cm 0cm 54.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-ascii-font-family: Aptos; mso-fareast-font-family: Aptos; mso-hansi-font-family: Aptos; mso-bidi-font-family: Aptos;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;-&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Headline&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level1 lfo1; margin: 0cm 0cm 0cm 54.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-ascii-font-family: Aptos; mso-fareast-font-family: Aptos; mso-hansi-font-family: Aptos; mso-bidi-font-family: Aptos;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;-&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Summary&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level1 lfo1; margin: 0cm 0cm 0cm 54.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-ascii-font-family: Aptos; mso-fareast-font-family: Aptos; mso-hansi-font-family: Aptos; mso-bidi-font-family: Aptos;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;-&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Hero Image&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Where:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Hero Image&amp;nbsp;is a Bynder Image reference.&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 0%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Product Page&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level1 lfo1; margin: 0cm 0cm 0cm 54.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-ascii-font-family: Aptos; mso-fareast-font-family: Aptos; mso-hansi-font-family: Aptos; mso-bidi-font-family: Aptos;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;-&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Title&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level1 lfo1; margin: 0cm 0cm 0cm 54.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-ascii-font-family: Aptos; mso-fareast-font-family: Aptos; mso-hansi-font-family: Aptos; mso-bidi-font-family: Aptos;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;-&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Product Image&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level1 lfo1; margin: 0cm 0cm 0cm 54.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-ascii-font-family: Aptos; mso-fareast-font-family: Aptos; mso-hansi-font-family: Aptos; mso-bidi-font-family: Aptos;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;-&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Product Video&lt;/p&gt;
&lt;p class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level1 lfo1; margin: 0cm 0cm 0cm 54.0pt;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style=&quot;mso-ascii-font-family: Aptos; mso-fareast-font-family: Aptos; mso-hansi-font-family: Aptos; mso-bidi-font-family: Aptos;&quot;&gt;&lt;span style=&quot;mso-list: Ignore;&quot;&gt;-&lt;span style=&quot;font: 7.0pt &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Product Brochure&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Where:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;Each asset property can reference a different Bynder asset type i.e. BynderImage, BynderVideo, and BynderDocument&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h3 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Frontend Consumption&lt;/strong&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Once data is available through Graph, frontend applications can retrieve and render it.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Example:&lt;/p&gt;
&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; margin-left: 0px; margin-right: auto; border-image: initial; height: 714px; width: 76.9944%; border: medium none currentcolor;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes;&quot;&gt;
&lt;td style=&quot;width: 0%; border: 1pt solid windowtext; padding: 0cm 5.4pt; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;query {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp; NewsArticle {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; items {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; headline&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; heroImage {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thumbnailUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; originalUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transformBaseUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;}&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 0%; border: 1pt solid windowtext; padding: 0cm 5.4pt; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;query {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp; Product {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; items {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; productImage {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thumbnailUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; originalUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; transformBaseUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; productVideo {&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thumbnailUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; originalUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; videoPreviewUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; productBrochure{&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thumbnailUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; originalUrl&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8pt; line-height: 115%; text-align: left;&quot;&gt;}&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;
&lt;h3&gt;&lt;strong&gt;Asset Rendering:&lt;/strong&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; margin-left: 0px; margin-right: auto; width: 75.9895%; border-image: initial; height: 186px; border: medium none currentcolor;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;mso-yfti-irow: 0; mso-yfti-firstrow: yes;&quot;&gt;
&lt;td style=&quot;width: 30.8527%; border: 1pt solid windowtext; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Rendering Images&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.8999%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Rendering Videos&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 35.227%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Rendering Documents&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;mso-yfti-irow: 1; mso-yfti-lastrow: yes;&quot;&gt;
&lt;td style=&quot;width: 30.8527%; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: currentcolor windowtext windowtext; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Basic rendering:&lt;/strong&gt;&lt;br /&gt;&amp;lt;img src=&quot;{thumbnailUrl}&quot; /&amp;gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; text-align: center; line-height: normal;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;strong&gt;Responsive Rendering:&lt;/strong&gt;&lt;br /&gt;&amp;lt;img&lt;br /&gt;src=&quot;{transformBaseUrl}?width=200&quot; &lt;br /&gt;/&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 33.8999%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Video example:&lt;/strong&gt;&lt;br /&gt;&amp;lt;video controls&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;source src=&quot;{originalUrl}&quot; /&amp;gt;&lt;br /&gt;&amp;lt;/video&amp;gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; line-height: normal;&quot;&gt;&lt;strong&gt;Video Poster:&lt;br /&gt;&lt;/strong&gt;&amp;lt;img src=&quot;{thumbnailUrl}&quot; /&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 35.227%; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: currentcolor windowtext windowtext currentcolor; padding: 0cm 5.4pt; text-align: left; vertical-align: top;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;PDF example:&lt;/strong&gt;&lt;br /&gt;&amp;lt;a href=&quot;{originalUrl}&quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Download PDF&lt;br /&gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0cm; text-align: center; line-height: normal;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Preview example:&lt;br /&gt;&lt;/strong&gt;&amp;lt;img src=&quot;{thumbnailUrl}&quot; /&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;An ideal worflow (Bynder &lt;span style=&quot;font-size: 12.0pt; line-height: 115%; font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Aptos; mso-fareast-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: &#39;Times New Roman&#39;; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-IN; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;Optimizely &lt;span style=&quot;font-size: 12.0pt; line-height: 115%; font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Aptos; mso-fareast-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: &#39;Times New Roman&#39;; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-IN; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;Frontend application):&lt;/h2&gt;
&lt;ol&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Asset will be uploaded into Bynder along with metadata.&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Asset will be marked as Public in Bynder (if asset must be available using a public URL).&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;OCP Connector will sync the asset inforamtion into Optimizely Graph.&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Authors in Optimizely SaaS CMS will be able to ses/select the asset inside the content manager/content items for referencing on relevant fields.&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Content Items will be published in Optimizely SaaS CMS.&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Frontend application (nextjs) will retrieve the page item content along with asset URLs using Graph query.&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;Appropriate URL of asset will be used to render/retrieve the asset infroamtion in the application/browser.&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;If frontend application needs asset information that is not synced in Optimizely but available in Bynder then frontend application will use Bynder APIs to retrieve the information.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Public vs Private Assets&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;One area that deserves special attention is asset visibility.&lt;/p&gt;
&lt;table class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; width: 67.1769%; height: 327px; border-image: initial; border: medium none currentcolor;&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 308.862px;&quot;&gt;
&lt;td style=&quot;width: 50.0644%; border: 1pt solid windowtext; padding: 0cm 5.4pt; text-align: left; vertical-align: top; height: 308.862px;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Public Assets&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;IsPublic = true&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Typically means:&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: 115%;&quot;&gt;Frontend can access asset directly.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: 115%;&quot;&gt;No authentication required.&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50.0644%; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext currentcolor; border-image: initial; padding: 0cm 5.4pt; text-align: left; vertical-align: top; height: 308.862px;&quot;&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;&lt;strong&gt;Non-Public Assets&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;IsPublic = false&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;Potential implications:&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: 115%;&quot;&gt;Requires authentication&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: 115%;&quot;&gt;Requires authorization&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: 115%;&quot;&gt;URL will not be accessible publicly&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%;&quot;&gt;This becomes extremely important for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extranets&lt;/li&gt;
&lt;li&gt;Employee portals&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 8.0pt; line-height: 115%; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;&quot;&gt;Restricted content&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;margin-bottom: 8pt; line-height: 115%;&quot;&gt;Use &lt;a href=&quot;https://bynder-api-documentation.readme.io/reference/get_api-v4-media-id-download&quot;&gt;Retrieve asset download&lt;/a&gt; location from Bynder API to get the URL to dowlaod the asset item.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Things I Learned&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;After exploring Bynder and the connector, several observations stood out.&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Not every asset type exposes the same URLs&lt;br /&gt;&lt;/strong&gt;Images typically expose more transformation capabilities than videos or documents.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transform Base URL is incredibly useful&lt;br /&gt;&lt;/strong&gt;The Transform Base URL alone can eliminate the need for multiple image renditions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Public vs Private matters early&lt;br /&gt;&lt;/strong&gt;Teams should decide asset visibility strategy before building the frontend application.&lt;br /&gt;Changing this later can require rework.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Things to Validate Early&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Metadata Availability&lt;/strong&gt;
&lt;ul&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Not every Bynder field is necessarily synchronized.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Always validate:
&lt;ul&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Which fields are available?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Which fields are searchable?&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Which fields appear in Graph?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Filtering of Assets&lt;/strong&gt;
&lt;ul&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;You may not need to have all assets in Optimizely. Ideally Assets used on your website or target channel must be synced but rest assets should be avoided.&lt;br /&gt;Read the article &lt;a href=&quot;/link/30275ac47c4843148eeda8b7d6ed282a.aspx&quot;&gt;[Planning Your Bynder DAM and Optimizely SaaS CMS Integration the Right Way: Avoiding Asset Sprawl and Unnecessary Synchronization]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Private Asset Consumption&lt;/strong&gt;
&lt;ul&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Private assets often introduce additional frontend delivery considerations.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Validate architecture before implementation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transformation Support&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Image transformations are powerful.&lt;/li&gt;
&lt;li&gt;Equivalent functionality may not exist for every asset type.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Connector Scope&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;The connector solves many DAM scenarios, but not every possible Bynder feature, or workflow may be surfaced through the OOTB connector.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Language Translation&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Bynder does not have concept of language version of asset items hence if you need to store language specific content in your assets metadata properties then figure out where that content will be stored and how the translation workflow will be executed. One of the options to keep language specific content inside Bynder is to create language specific properties e.g. Title_en, Title_fr etc. These properties can then be read through the &lt;a href=&quot;https://bynder-api-documentation.readme.io/reference/get_api-v4-media-id&quot;&gt;Retrieve specific asset&lt;/a&gt; endpoint.&lt;/li&gt;
&lt;li&gt;Also note that&amp;nbsp; Bynder allows to set the language specific labels for the options inside single select and multi-select properties. But when you retrieve assets information using the API it only returns the default language labels. In case you need language specific labels in your frontend application then you need to get all metadata properties using &lt;a href=&quot;https://bynder-api-documentation.readme.io/reference/get_api-v4-metaproperties&quot;&gt;Retrieve metaproperties&lt;/a&gt; API endpoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Frequently Asked Questions&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Does the connector synchronize custom metadata fields?&lt;br /&gt;&lt;/strong&gt;All text type metadata fields in Bynder are supposed to be exposed through synchronization but actual synchronization depends on the connector configuration. &lt;br /&gt;Always validate available fields before finalizing content models.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Can filtering of assets be set during sync configuration?&lt;br /&gt;&lt;/strong&gt;OOTB connector does not support filtering; it is developed to sync all assets.&lt;br /&gt;&lt;span class=&quot;far4bl _667h42&quot;&gt;The connector itself has no filtering UI, but selective synchronization can be achieved through Bynder&#39;s permission profiles and metadata visibility rules &amp;mdash; see &lt;a href=&quot;/link/30275ac47c4843148eeda8b7d6ed282a.aspx&quot;&gt;[Planning Your Bynder DAM and Optimizely SaaS CMS Integration the Right Way: Avoiding Asset Sprawl and Unnecessary Synchronization]&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;Or Using the Bynder API custom connector can be developed to support filtering and other required features based on your business needs.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;strong&gt;Can I call Bynder APIs directly from my frontend application?&lt;br /&gt;&lt;/strong&gt;Absolutely. A common pattern is:&amp;nbsp;DAM Connector + Bynder APIs.&amp;nbsp;&lt;br /&gt;The connector handles asset references while custom APIs handle advanced functionality.&lt;br /&gt;Use &lt;a href=&quot;https://bynder-api-documentation.readme.io/reference/get_api-v4-media-id&quot;&gt;Retrieve specific asset&lt;/a&gt; endpoint from Bynder API to retrieve metadata and URLs (including custom metadata) for a specific assets.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;strong&gt;What if information is not synchronized?&lt;br /&gt;&lt;/strong&gt;Retrieve it directly from Bynder APIs. Examples: Workflow Status, Usage Rights, Approval State, Custom Metadata.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;!-- [if !supportLists]--&gt;&lt;strong&gt;Can frontend applications retrieve private assets?&lt;br /&gt;&lt;/strong&gt;It depends on the DAM security model and implementation approach.&amp;nbsp;&lt;br /&gt;Possible solutions include: Authentication, Proxy APIs, Token-based access.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h2 class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/h2&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;The Bynder DAM Connector provides a clean bridge between enterprise asset management and modern headless content delivery.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;The most important takeaway for me was that the connector is not simply an asset picker. It establishes a relationship between:&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;Bynder DAM &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Optimizely Graph &amp;amp; Optimizely CMS &lt;span style=&quot;font-family: Wingdings; mso-ascii-font-family: Aptos; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Aptos; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&lt;span style=&quot;mso-char-type: symbol; mso-symbol-font-family: Wingdings;&quot;&gt;&amp;agrave;&lt;/span&gt;&lt;/span&gt; Frontend Applications&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;When implemented correctly, it enables organizations to maintain Bynder as the single source of truth for digital assets while still providing content authors with a seamless CMS authoring experience.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot;&gt;For organizations already invested in Bynder and Optimizely SaaS CMS, the connector can significantly simplify asset governance, reduce duplication, and improve overall content delivery architecture.&lt;/p&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;text-align: left;&quot; align=&quot;center&quot;&gt;&lt;hr /&gt;&lt;/div&gt;
&lt;h4 class=&quot;_1l4j4na1 _1qskm0h c8urk _1a0p899 _5hqrjx _667h42&quot; style=&quot;text-align: left;&quot;&gt;&#128218; Bynder + Optimizely SaaS CMS Integration Series&lt;/h4&gt;
&lt;div class=&quot;_1l4j4na3 _667h42&quot; style=&quot;text-align: left;&quot;&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;This article is the first installment of a 3-part comprehensive architecture guide:&lt;/em&gt;&lt;/div&gt;
&lt;ul class=&quot;_667h42 _1l4j4na6&quot;&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;&#128073; Part 1: Implementing the Connector &amp;mdash; Lessons Learned&lt;/strong&gt;&amp;nbsp;&lt;em class=&quot;far4bl _667h42&quot;&gt;(You are here)&lt;/em&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;What metadata syncs, how URLs behave, and how to query/render assets in a Next.js frontend.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;⏭️ Part 2:&amp;nbsp;&lt;a class=&quot;_667h42 _1l4j4nac _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;/link/30275ac47c4843148eeda8b7d6ed282a.aspx&quot;&gt;Planning &amp;amp; Filtering &amp;mdash; Avoiding Asset Sprawl and Unnecessary Sync&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;Discover how we achieved metadata-based sync filtering with zero custom code.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li class=&quot;_667h42 _1l4j4na2&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong class=&quot;far4bl _1a0p899 _667h42&quot;&gt;⏭️ Part 3:&amp;nbsp;&lt;a class=&quot;_667h42 _1l4j4nac _1c9dtv3 _1by2b93 _1140xq1 _667h42&quot; href=&quot;/link/650c1d72d9a84c28b2355e8942fc7cda.aspx&quot;&gt;Exploring Asset Lifecycle Management &amp;amp; Three-Gate Governance&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em class=&quot;far4bl _667h42&quot;&gt;Explore a webhook-driven, three-gate model to handle asset updates, environments, and usage verification.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</id><updated>2026-07-03T12:46:54.0000000Z</updated><summary type="html">Blog post</summary></entry></feed>