---
title: "Content items client"
slug: "content-items-client"
abstract: "Overview of the methods available for creating, updating, deleting, and publishing content items; and for retrieving various properties about a content item."
---
# Content items client

A content item contains the content data for a specific item. The following methods are available for content items.

| Method | Description |
| --- | --- |
| `GET /api/content/v1/items` | Retrieves the prefix, label, and visualization properties of all content item entities. |
| `POST /api/content/v1/items` | Creates a content item entity. |
| `GET /api/content/v1/items/<CONTENT_ITEM_ID>` | Retrieves a specific content item entity. |
| `PUT /api/content/v1/items/<CONTENT_ITEM_ID>` | Updates a specific content item entity. |
| `DELETE /api/content/v1/items/<CONTENT_ITEM_ID>` | Deletes a specific content item entity. |
| `POST /api/content/v1/items/<CONTENT_ITEM_ID>/publish` | Publishes a specific content item entity to the [Experience Edge](https://doc.sitecore.com/xmc/en/developers/xm-cloud/sitecore-experience-edge-for-xm.html). |
| `POST /api/content/v1/items/<CONTENT_TYPE_ID>` | Create a locale variant of a content item |
| `DELETE /api/content/v1/items/<CONTENT_ITEM_ID>/publish` | Deletes a specific content item entity from the Experience Edge. |

The following example illustrates these methods:

::::tabs
:::tab{title=".NET"}

```shell
public interface IContentItemClient
{
    /// POST /api/content/v1/items
    /// <summary>
    /// Creates a new content item.
    /// </summary>
    /// <param name="contentTypeId">The content type identifier.</param>
    /// <param name="contentItem"></param>
    /// <param name="localeId"></param>///
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<ContentItem> CreateAsync(
        string contentTypeId,
        ContentItem contentItem,
        string? localeId,
        CancellationToken cancellationToken = default);

    /// POST /api/content/v1/items
    /// <summary>
    /// Creates a new (not localized) content item
    /// </summary>
    /// <param name="contentTypeId">The content type identifier.</param>
    /// <param name="contentItem"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<ContentItem> CreateAsync(
        string contentTypeId,
        ContentItem contentItem,
        CancellationToken cancellationToken = default);

    /// PUT /api/content/v1/items/<contentItemId>
    /// <summary>
    /// Updates an existing content item.
    /// </summary>
    /// <param name="contentItem"></param>
    /// <param name="localeId"></param>///
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<ContentItem> UpdateAsync(
        ContentItem contentItem,
        string? localeId,
        CancellationToken cancellationToken = default);

    /// PUT /api/content/v1/items/<contentItemId>
    /// <summary>
    /// Updates an existing (not localized) content item.
    /// </summary>
    /// <param name="contentItem"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<ContentItem> UpdateAsync(
        ContentItem contentItem,
        CancellationToken cancellationToken = default);

    /// DELETE /api/content/v1/items/<contentItemId>
    /// <summary>
    /// Deletes the specified content item.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="localeId"></param>///
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task DeleteAsync(
        string contentItemId,
        string? localeId,
        CancellationToken cancellationToken = default);

    /// DELETE /api/content/v1/items/<contentItemId>
    /// <summary>
    /// Deletes the specified (not localized) content item.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task DeleteAsync(
        string contentItemId,
        CancellationToken cancellationToken = default);

    /// GET /api/content/v1/items
    /// <summary>
    /// Gets the content items.
    /// </summary>
    /// <param name="searchRequest"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<PagedResponse<ContentItem>> GetAsync(
        ContentItemSearchRequest? searchRequest = null,
        CancellationToken cancellationToken = default);

    /// <summary>
    /// Enumerates the content items.
    /// </summary>
    /// <param name="searchRequest"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    IAsyncEnumerable<ContentItem> EnumerateAsync(
        ContentItemSearchRequest? searchRequest = null,
        CancellationToken cancellationToken = default);

    /// GET /api/content/v1/items/<contentItemId>
    /// <summary>
    /// Gets a single content item by its identifier.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="localeId"></param>///
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<ContentItem?> SingleAsync(
        string contentItemId,
        string? localeId,
        CancellationToken cancellationToken = default);

    /// GET /api/content/v1/items/<contentItemId>
    /// <summary>
    /// Gets a single (not localized) content item by its identifier.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<ContentItem?> SingleAsync(
        string contentItemId,
        CancellationToken cancellationToken = default);

    /// GET /api/content/v1/items/<contentItemId>
    /// <summary>
    /// Gets a single content item by its identifier from the local in-memory cache, otherwise falls back to <see cref="SingleAsync(string,string?,CancellationToken)"/>.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="localeId"></param>///
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<ContentItem?> SingleCachedAsync(
        string contentItemId,
        string? localeId,
        CancellationToken cancellationToken = default);

    /// GET /api/content/v1/items/<contentItemId>
    /// <summary>
    /// Gets a single (not localized) content item by its identifier from the local in-memory cache, otherwise falls back to <see cref="SingleAsync(string,CancellationToken)"/>.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<ContentItem?> SingleCachedAsync(
        string contentItemId,
        CancellationToken cancellationToken = default);

    /// POST /api/content/v1/items/<contentItemId>/publish
    /// <summary>
    /// Publishes the specified content item.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="localeId"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task PublishAsync(
        string contentItemId,
        string? localeId,
        CancellationToken cancellationToken = default);

    /// POST /api/content/v1/items/<contentItemId>/publish
    /// <summary>
    /// Publishes the specified (not localized) content item.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task PublishAsync(
        string contentItemId,
        CancellationToken cancellationToken = default);

    /// DELETE /api/content/v1/items/<contentItemId>/publish
    /// <summary>
    /// Unpublishes the specified content item.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="localeId"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task UnpublishAsync(
        string contentItemId,
        string? localeId,
        CancellationToken cancellationToken = default);

    /// DELETE /api/content/v1/items/<contentItemId>/publish
    /// <summary>
    /// Unpublishes the specified (not localized) content item.
    /// </summary>
    /// <param name="contentItemId"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task UnpublishAsync(
        string contentItemId,
        CancellationToken cancellationToken = default);

    /// POST /api/content/v1/items/<contentItemId>/copy
    /// <summary>
    /// Create a locale variant of a content item.
    /// </summary>
    /// <param name="contentItemId">The content item identifier.</param>
    /// <param name="sourceLocale">Locale of the existing content item</param>
    /// <param name="primary"><see langword="true" /> to get source locale of the primary content item; otherwise <see langword="false" />.</param>
    /// <param name="locale">Locale to copy to</param>
    /// <param name="cancellationToken"></param>
    Task<ContentItem> LocaleCopyAsync(
        string contentItemId,
        string locale,
        string? sourceLocale = null,
        bool? primary = null,
        CancellationToken cancellationToken = default);
}
```

:::
:::tab{title="Javascript"}

```shell
export interface IContentItemClient {
  /**
   * POST /api/content/v1/items
   * Creates a new content item.
   * @param contentTypeId
   * @param contentItem
   * @param cancelToken
   */
  createAsync(
    contentTypeId: string,
    contentItem: ContentItem,
    cancelToken?: CancelToken
  ): Promise<Nullable<ContentItem>>;

  /**
   * PUT /api/content/v1/items/<contentItemId>
   * Updates an existing content item.
   * @param contentItem
   * @param cancelToken
   */
  updateAsync(
    contentItem: ContentItem,
    cancelToken?: CancelToken
  ): Promise<Nullable<ContentItem>>;

  /**
   * DELETE /api/content/v1/items/<contentItemId>
   * Deletes the specified content item.
   * @param contentItem - A string representing the content item ID, or a ContentItem object
   * @param cancelToken
   */
  deleteAsync(
    contentItem: string | ContentItem,
    cancelToken?: CancelToken
  ): Promise<void>;

  /**
   * GET /api/content/v1/items
   * Gets content items.
   * @param searchRequest
   * @param cancelToken
   */
  getAsync(
    searchRequest?: ContentItemSearchRequest,
    cancelToken?: CancelToken
  ): Promise<PagedResponse<ContentItem>>;

  /**
   * GET /api/content/v1/items/<contentItemId>
   * Gets a single content item by its identifier.
   * @param contentItem - A string representing the content item ID, or a ContentItem object
   * @param cancelToken
   */
  singleAsync(
    contentItem: string | ContentItem,
    cancelToken?: CancelToken
  ): Promise<Nullable<ContentItem>>;

  /**
   * GET /api/content/v1/items/<contentItemId>
   * Gets a single content item with the specified identifier from the local in-memory _cache, otherwise falls back to {@link singleAsync}.
   * @param contentItem - A string representing the content item ID, or a ContentItem object
   * @param cancelToken
   */
  singleCachedAsync(
    contentItem: string | ContentItem,
    cancelToken?: CancelToken
  ): Promise<Nullable<ContentItem>>;

  /**
   * POST /api/content/v1/items/<contentItemId>/publish
   * Publishes the specified content item.
   * @param contentItem - A string representing the content item ID, or a ContentItem object
   * @param cancelToken
   */
  publishAsync(
    contentItem: string | ContentItem,
    cancelToken?: CancelToken
  ): Promise<void>;

  /**
   * DELETE /api/content/v1/items/<contentItemId>/publish
   * Un-publishes the specified content item.
   * @param contentItem - A string representing the content item ID, or a ContentItem object
   * @param cancelToken
   */
  unPublishAsync(
    contentItem: string | ContentItem,
    cancelToken?: CancelToken
  ): Promise<void>;

  /**
   * POST /api/content/v1/items/<contentItemId>/copy
   * Creates a locale copy of a content item.
   * @param contentItem - A string representing the content item ID, or a ContentItem object
   * @param locale - The target locale
   * @param sourceParams Source content item params
   * @param cancelToken
   */
  createLocaleCopyAsync(
    contentItem: ContentItem,
    locale: string,
    sourceParams: ContentItemCreateVariantResource,
    cancelToken?: CancelToken
  ): Promise<Nullable<ContentItem>>;

  /**
   * Enumerates content items.
   * @param searchRequest
   * @param cancelToken
   */
  enumerate(
    searchRequest?: ContentItemSearchRequest,
    cancelToken?: CancelToken
  ): Promise<Array<ContentItem>>;
}
```

:::::::
