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

A media item is an uploaded asset, plus the description and metadata associated with it.

The following methods are available for the media client.

| Method | Description |
| --- | --- |
| `GET /api/content/v1/media` | Retrieves media items. |
| `POST /api/content/v1/media` | Creates a media item. |
| `GET /api/content/v1/media/<MEDIA_ITEM_ID>` | Retrieves a specific media item. |
| `PUT /api/content/v1/media/<MEDIA_ID>` | Updates a specific media item. |
| `DELETE /api/content/v1/media/<MEDIA_ITEM_ID>` | Deletes a specific media item. |
| `POST /api/content/v1/media/<MEDIA_ITEM_ID>/publish` | Publishes a specific media item to the [Experience Edge](https://doc.sitecore.com/xmc/en/developers/xm-cloud/sitecore-experience-edge-for-xm.html) tenant. |
| `DELETE /api/content/v1/media/<MEDIA_ITEM_ID>/publish` | Deletes a specific media item from the Experience Edge tenant. |

The following example illustrates these methods:

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

```shell
public interface IMediaClient
{
  // POST /api/content/v1/media
  Task<MediaItem?> CreateAsync(
    MediaItem mediaItem,
    IUploadSource uploadSource,
    CancellationToken cancellationToken = default);

  // PUT /api/content/v1/media/<MEDIA_ITEM_ID>
  Task<MediaItem?> UpdateAsync(
    MediaItem mediaItem,
    IUploadSource? uploadSource = null,
    CancellationToken cancellationToken = default);

  // DELETE /api/content/v1/media/<MEDIA_ITEM_ID>
  Task DeleteAsync(
    string mediaItemId,
    CancellationToken cancellationToken = default);

  // GET /api/content/v1/media
  Task<PagedResponse<MediaItem>>  GetAsync(
    MediaSearchRequest? searchRequest = null,
    CancellationToken cancellationToken = default);

  // Same as GetAsync, but processing the results as an enumerator.
  IAsyncEnumerable<MediaItem> EnumerateAsync(
    MediaSearchRequest? searchRequest = null,
    CancellationToken cancellationToken = default);

  // GET /api/content/v1/media/<MEDIA_ITEM_ID>
  Task<MediaItem?> SingleAsync(
    string mediaItemId,
    CancellationToken cancellationToken = default);

  // POST /api/content/v1/media/<MEDIA_ITEM_ID>/publish
  Task PublishAsync(
    string mediaId,
    CancellationToken cancellationToken = default);

  // DELETE /api/content/v1/media/<MEDIA_ITEM_ID>/publish
  Task UnpublishAsync(
    string mediaId,
    CancellationToken cancellationToken = default);
}
```

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

```shell
export interface IMediaClient {
 /**
  * POST /api/content/v1/media
  */
 createAsync(
  mediaItem: MediaItem,
  uploadSource: IUploadSource,
  cancelToken?: CancelToken
 ): Promise<Nullable<MediaItem>>;

 /**
  * PUT /api/content/v1/media/<MEDIA_ITEM_ID>
  */
 updateAsync(
  mediaItem: MediaItem,
  uploadSource?: IUploadSource,
  cancelToken?: CancelToken
 ): Promise<Nullable<MediaItem>>;

 /**
  * DELETE /api/content/v1/media/<MEDIA_ITEM_ID>
  */
 deleteAsync(
  mediaItemId: string,
  cancelToken?: CancelToken
 ): Promise<Nullable<void>>;

 /**
  * GET /api/content/v1/media
  */
 getAsync(
  searchRequest?: MediaSearchRequest,
  cancelToken?: CancelToken
 ): Promise<PagedResponse<MediaItem>>;

 /**
  * Same as getAsync, but processing the results as an enumerator.
  */
 enumerate(
  searchRequest?: MediaSearchRequest,
  cancelToken?: CancelToken
 ): Promise<Array<MediaItem>>;

 /**
  * GET /api/content/v1/media/<MEDIA_ITEM_ID>
  */
 singleAsync(
  mediaItemId: string,
  cancelToken?: CancelToken
 ): Promise<Nullable<MediaItem>>;

 /**
  * POST /api/content/v1/media/<MEDIA_ITEM_ID>/publish
  */
 publishAsync(mediaItemId: string, cancelToken?: CancelToken): Promise<void>;

 /**
  * DELETE /api/content/v1/media/{mediaItemId}/publish
  */
 unPublishAsync(mediaItemId: string, cancelToken?: CancelToken): Promise<void>;
}
```

:::::::
