---
title: Get started with Optimizely Graph for CMS 13
slug: cms-13/docs/get-started-with-optimizely-graph-for-cms-13
docTags: 
createdAt: 2026-07-30T20:22:00.693Z
---

Optimizely Graph provides a GraphQL-based content delivery layer for CMS 13 that lets you query, search, and retrieve content across channels from a single endpoint. Use Optimizely Graph to power headless front ends, build advanced search experiences, and replace Optimizely Search & Navigation with a cloud-hosted alternative.

For more information about Optimizely Graph, go to the [Optimizely Graph overview](docId\:ghnlNOMuC53LrLMoTZopV).

:::hint{type="info"}
**Note**
If you already use Optimizely Graph on Content Management System (CMS) 12, go to [Project migration for CMS 12 with Optimizely Graph](docId:5IIpWhRi9sd4hvXlqyaHY).
:::

## Prerequisites

Verify the following before you start:

- A running CMS 13 instance with an environment configured.
- Optimizely Graph connected to your CMS 13 instance. Go to [Enable Graph service to sync DAM and CMS](docId\:GHPdKRxNshVI1_ghsWOXf) for instructions.

## Enable Optimizely Graph

Register the Optimizely Graph integration in your startup configuration so CMS 13 syncs content to the Graph service.

Add the following code to your startup class:

```csharp
services.AddContentGraph();
```

## Understand the SDK purpose

The .NET (C#) SDK helps developers migrate from Optimizely Search & Navigation to Optimizely Graph. It provides patterns to implement search and content retrieval through a Graph-based approach.

For more information, go to the [.NET (C#) SDK overview](docId\:ZQSzbbACAIXmzMLIe4NIk).

## Choose a content search mode

Optimizely Graph supports three search modes. Select the mode that fits your use case.

### Content search

Use content search when you need CMS-integrated results. This mode offers the following capabilities:

- Compile-time type safety for filters.
- Data loading through `IContentLoader`.
- `IContent` instances in results.
- Content permission and URL enforcement.

### Typed search

Use typed search for structured external or global search scenarios. This mode offers the following capabilities:

- Response deserialization into defined contracts.
- Compile-time type safety for filters.
- Support for global search pages and advanced listings.

### Untyped search

Use untyped search for maximum flexibility. This mode offers the following capabilities:

- Types and fragments accepted as strings.
- Raw `JsonElement` results.
- No compile-time type safety.

### Implement search functionality

Optimizely Graph enables the following search capabilities across all modes:

- Full-text search with highlighted terms.
- Filters, operators, and logical connectors.
- Fuzzy matching.
- Extension methods for defining filters.
- Locale-based and ID-based queries.
- Sorting, including semantic sorting.
- Cursor-based pagination.
- Autocomplete and query suggestions.
- Variations, facets, and boosting.
- Pinned results.

## Configure security and performance

Optimizely Graph includes built-in security and performance features you can configure for your deployment.

### Security

The following security features are available:

- Integrated tracking that respects "Do Not Track" settings.
- Authentication through a [single API key](docId\:sNcLLcLYgWv_QVb0Mtqus) by default.
- Optional [HMAC authentication](docId\:sNcLLcLYgWv_QVb0Mtqus).
- Authorization through `FilterForVisitor`, using `IPrincipal` and locale.
- Option to include deleted documents.

### Performance and observability

The following performance and observability features are available:

- Built-in metrics for `HttpClient`.
- Observability and query categorization.
- Optional caching support.

## Understand SDK limitations

The SDK does not replicate all features from Search & Navigation. The following features are not supported:

- Full Language Integrated Query (LINQ) provider.
- Direct link support. Use `IContentLoader.GetAncestors()` instead.
- Recursive directives. Use `IContentLoader.Get()` instead.
- Routing. Use `IUrlResolver.Route()` and `ContentLoader.Get()` instead.
- Single document retrieval by ID.
- Filtering on the current site.
- Multi-search.

## Next steps

- Go to [Migrate from Optimizely Search and Navigation to Optimizely Graph](docId\:aM0WpNsNXe_n26IhkX5sG) for a migration guide.
