Documentation Index

Fetch the complete documentation index at: https://cloudinary.com/documentation/llms.txt

Use this file to discover all available pages before exploring further.

Image & Video APIs

Upload UGC

Last updated: Jul-27-2026

Upload is an essential feature of UGC: you have to provide your users a way to add their media to your site or app. In addition to storing the media in your product environment, there are many features that you can invoke while uploading, for example, limiting the size of the uploads, moderating the content that's uploaded, and analyzing the media for management purposes.

This page focuses on how upload applies to the four example use cases followed throughout this guide: profile pictures, video reviews, marketplace products, and try before you buy.

Note
Moderation and analysis are discussed under Manage and analyze, although they can (and should) be invoked as part of the upload flow.

Recommended features by use case

The following table shows which features we recommend (marked ✅) for each of these use cases:

Profile pictures Video reviews Marketplace products Try before you buy
Upload
Define upload behavior
Control access to uploaded media
Track uploads
Transform on upload
Prepare delivery transformations

Ways to upload

API and SDKs

There are many ways to allow users to upload their content to your site. Using the Upload API, either directly, or via an SDK, you can tailor how images and videos are uploaded, analyzed and managed to suit your needs.

The following code shows how to:

Upload widget

For a complete, interactive user interface that enables users to upload files from a variety of sources, and includes options to crop on upload and limit file types, amongst others, consider implementing the Cloudinary Upload widget.

This example of the Upload widget restricts file types to images only and displays the uploaded image following a successful upload:


Some of the community-developed libraries have a CldUploadWidget component for adding the widget to your app.

Watch a clip about the Upload widget from the Cloudinary Academy UGC workshop:

This video is brought to you by Cloudinary's video player - embed your own!
Use the controls to set the playback speed, navigate to chapters of interest and select subtitles in your preferred language.

Tip
Head to the Cloudinary Academy to take the full workshop or browse others - free for all Cloudinary users!

Minisite

Non-developers can create a hosted, standalone site for the Upload widget by creating a minisite. See this no-code uploads blog post to learn more.

Portals

If you're on an Enterprise plan, you can use the external uploader feature of Portals to allow third-party stakeholders to upload assets directly to your product environment using the Upload Widget, embedded within the portal.

You can configure the external uploader to:

  • Automatically apply auto-tagging
  • Assign an identifying tag to all assets uploaded via the portal

Media Library

For trusted content providers, there's also the option to provide them with their own Media Library user login to your product environment, where they can not only upload, but also search, view and download assets within the folders that they have permission to see.

Define upload behavior

You can use upload presets to define a set of upload options that are applied every time a user uploads content to your site. For example, you can specify that all assets are moderated on upload, or that certain transformations are applied.

Watch a clip about upload presets from the Cloudinary Academy UGC workshop:

This video is brought to you by Cloudinary's video player - embed your own!
Use the controls to set the playback speed, navigate to chapters of interest and select subtitles in your preferred language.

Tip
Head to the Cloudinary Academy to take the full workshop or browse others - free for all Cloudinary users!

Control access to uploaded media

By default, files uploaded to your product environment are publicly available via a URL. If you want to control who can access your assets and whether or not they can transform them, you should consider the different media access methods.

Track uploads

You can get notified when content is uploaded to your site via webhook notifications. Use these notifications to trigger further steps in your workflow automatically, or prompt subsequent interaction.

Transform on upload

You can apply transformations to images and videos as they're uploaded. These are called incoming transformations and result in the transformed assets being stored, rather than the original assets. Incoming transformations are useful to limit the size of uploaded assets, and allow you to standardize a set of transformations for your use case.

Tip
You can also transform images and videos on delivery (leaving the original intact), which allow users to make customizations on the fly, apply different transformations to the same assets, and make optimizations based on the user's device.

Watch a clip about incoming transformations from the Cloudinary Academy UGC workshop:

This video is brought to you by Cloudinary's video player - embed your own!
Use the controls to set the playback speed, navigate to chapters of interest and select subtitles in your preferred language.

Tip
Head to the Cloudinary Academy to take the full workshop or browse others - free for all Cloudinary users!

Limit dimensions of images and videos

If you know that when displaying your users' images or videos they'll never exceed certain dimensions, then you can resize the media to a defined limit on upload to save storage costs.

Truncate long videos

To prevent users from uploading overly long videos, you can set a limit and truncate anything longer than that limit.

Strip metadata

For privacy reasons, and also to reduce storage costs, it's advisable to remove metadata (IPTC, EXIF and XMP) associated with images on upload.

Prepare delivery transformations on upload (cache warm up)

It can sometimes take more than a couple of a seconds to transform an image or video on the fly for delivery, for example, when transforming long videos or using generative AI transformations. You can prepare derived (transformed) versions of an asset in advance of delivering them for the first time by using eager transformations to warm up the cache.

You can specify eager transformations in an upload preset, or use the eager parameter in the upload call:

Related topics

✔️ Feedback sent!

Rate this page:

one star two stars three stars four stars five stars