---
title: Low-level APIs
slug: commerce-connect-15/docs/low-level-apis
docTags: 
createdAt: 2026-07-30T20:34:43.000Z
---

:::hint{type="info"}
**Note**
You should work with the catalog to use the [Catalog content](docId\:Fzw0y8gKUx82f7gA5Xgva) APIs. However, Optimizely Commerce Connect also has a number of low-level APIs for working with the catalog. Most of them are considered legacy but can be useful in specific scenarios.
:::

Classes in this topic are available in the following namespace:

- `Mediachase.Commerce.Catalog`

Low-level APIs, which are considered legacy functionality, can be useful in specific scenarios.

- Context classes are singletons that retrieve and save data from a database and put that data into collections or Data Transfer Objects (DTOs).
- `CatalogOptions` options class for catalog configuration options.
  (Versions 10-13: Configuration classes are singletons that retrieve configuration information from config files).
- Manager classes also retrieve and save data from the database. Sometimes the context class uses the manager classes to access the database.
- Primary interface: `CatalogContext.Current`.
- The `Current` property is the singleton instance of the object that retrieves and updates information in the catalog.
- The current property is an instance of a class that implements the `ICatalogSystem` interface. By default, `Mediachase.Commerce.Catalog.Impl.CatalogContextImpl` is used. This is located in `BusinessLayer > CommerceLib > Catalog > Impl > SiteContextImpl.cs`.
- eCommerce Framework (ECF) also provides a starting version of a web service implementation class: `Mediachase.Commerce.Catalog.Impl.CatalogContextProxyImpl` > `SiteContextProxyImpl.cs`.
- The ECF Catalog interface returns either DTOs or Objects. The DTOs represent typed datasets. Typed dataset resembles the database with one-to-one mapping to related tables and their fields. Objects are a bit leaner and easier to work with, and are recommended for data retrieval.
- The DTO classes are located in `BusinessLayer/CommerceLib/Catalog/Dto`.
- The objects are located in `BusinessLayer/CommerceLib/Catalog/Objects`.
- The `Entry` and `CatalogNode` objects are the most fundamental objects you will access.
- DTOs are best for saving catalog data.

**Example:** looking for changed data in the DTO and saving new, changed, or deleted data

```csharp
ICatalogSystem target = CatalogContext.Current;
CatalogDto catalogs = target.GetCatalogDto();
foreach(CatalogDto.CatalogRow catalog in catalogs.Catalog) {
  existingCatalogId = catalog.CatalogId;
  break;
}

CatalogEntryDto dto = target.GetCatalogEntriesDto(existingCatalogId, response);
// Catalog entry create and set properties
CatalogEntryDto.CatalogEntryRow catalogEntryRow = dto.CatalogEntry.NewCatalogEntryRow();
catalogEntryRow.ApplicationId = CatalogConfiguration.Instance.ApplicationId;
dto.CatalogEntry.AddCatalogEntryRow(catalogEntryRow);
target.SaveCatalogEntry(dto);
```

You can also create objects from DTO objects. For example, there is a constructor for `CatalogNode` that lets you pass a `CatalogNodeRow` in:

```csharp
public CatalogNode(CatalogNodeDto.CatalogNodeRow input) 
```

- To access the metadata fields, use the object's `ItemAttributes` property.
- The `Entry` and `CatalogNode` objects contain virtually all of the associated information as properties.
- Other classes useful in retrieving other catalog data reside in `BusinessLayer/CommerceLib/Catalog/Managers`.
