Was this page helpful?
Control asset access using visibility settings and enable secure delivery using signed URLs.
Asset visibility controls how individual assets like images and files can be accessed from Sanity’s Content Delivery Network (CDN). This feature ensures Media Library can securely manage confidential assets, embargoed launches, and other sensitive or licensed materials.
Private visibility is not yet available for video assets. Uploaded videos are public, so plan your use of video content with this in mind.

Note that switching visibility does not require a Publish action for changes to take affect.
By default, assets are uploaded with public visibility. To change this for your session, select Upload at the top of the asset grid and use the visibility switcher in the upload modal before uploading.
When switching an asset's visibility from public to private, the CDN may continue serving cached responses for up to 30 days. To minimize exposure, set sensitive assets to private before upload.
Signed URLs provide a secure way to deliver private assets through Sanity's CDN. Each URL includes a signature that both validates access and ensures the asset is served only with the exact transformations specified in the URL. This prevents unauthorized use, hotlinking, and unapproved image manipulation.
To display images with private visibility using signed URLs, the @sanity/image-url package exports an extended image URL builder with signing methods via the @sanity/image-url/signed export path.
For non-image assets such as PDFs and audio files, use the lower level @sanity/signed-urls package to create a signed version of a given asset URL.
Check the READMEs of both packages for more details on signing URLs.
Signing URLs using the above packages requires providing a private key and an associated key ID to whichever helper functions you are using. Signing keys are managed in the Media Library itself:

