---
title: Low-level APIs
slug: commerce-connect-13/docs/low-level-apis
docTags: 
createdAt: 2026-07-23T09:44:51.000Z
---

:::hint{type="info"}
**Note**
You should work with the catalog to use the [Catalog content](docId:64pF_M_hUYDT_aYq1lRho) 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 for working with catalogs are in the Mediachase.Commerce.Catalog namespace.

- Context classes are singletons that retrieve and save data from a database and put that data into collections or Data Transfer Objects (DTOs).
- **Commerce Connect 14** 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 retrieves and updates information in the catalog.
- The current property is an instance of a class which 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:

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

- To access the meta data 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*.
