Menu
Products
Products
Video Hosting
Upload and manage your videos in a centralized video library.
Image Hosting
Upload and manage all your images in a centralized library.
Galleries
Choose from 100+templates to showcase your media in style.
Video Messaging
Record, and send personalized video messages.
CincoTube
Create your own community video hub your team, students or fans.
Pages
Create dedicated webpages to share your videos and images.
Live
Create dedicated webpages to share your videos and images.
For Developers
Video API
Build a unique video experience.
DeepUploader
Collect and store user content from anywhere with our file uploader.
Solutions
Solutions
Enterprise
Supercharge your business with secure, internal communication.
Townhall
Webinars
Team Collaboration
Learning & Development
Creative Professionals
Get creative with a built in-suite of editing and marketing tools.
eCommerce
Boost sales with interactive video and easy-embedding.
Townhall
Webinars
Team Collaboration
Learning & Development
eLearning & Training
Host and share course materials in a centralized portal.
Sales & Marketing
Attract, engage and convert with interactive tools and analytics.
"Cincopa helped my Enterprise organization collaborate better through video."
Book a Demo
Resources
Resources
Blog
Learn about the latest industry trends, tips & tricks.
Help Centre
Get access to help articles FAQs, and all things Cincopa.
Partners
Check out our valued list of partners.
Product Updates
Stay up-to-date with our latest greatest features.
Ebooks, Guides & More
Customer Stories
Hear how we've helped businesses succeed.
Boost Campaign Performance Through Video
Discover how to boost your next campaign by using video.
Download Now
Pricing
Watch a Demo
Demo
Login
Start Free Trial
Effective video management in a headless CMS requires workflows that support upload, metadata handling, delivery optimization, and structured content referencing. Unlike traditional CMS platforms, headless systems separate content from presentation, making it essential to manage video assets with explicit control over delivery, security, and rendering on the front end. Uploading Video Files as Static Assets Headless CMS platforms allow you to upload video files via their web UI or API. These are stored as static files and delivered through a CDN. Example: Uploading a Video via Contentful CMA POST /spaces/{space_id}/assets { 'fields': { 'title': { 'en-US': 'Demo Video' }, 'file': { 'en-US': { 'contentType': 'video/mp4', 'fileName': 'demo.mp4', 'upload': 'https://example.com/demo.mp4' } } } } Explanation: POST /spaces/{space_id}/assets: Creates a new asset in Contentful by specifying metadata and an external video file to upload into a specific space. fields.title['en-US'] : Defines the asset's title in English ('Demo Video'), supporting Contentful's locale-based field structure for internationalization. fields.file['en-US'] : Specifies the video file's metadata for the English locale. contentType: 'video/mp4' : Sets the MIME type of the uploaded file, ensuring it's recognized as an MP4 video. fileName: 'demo.mp4' : Defines the filename that will be stored within Contentful. upload: 'https://example.com/demo.mp4' : Provides an external URL from which Contentful will fetch and upload the file asynchronously. Embedding Videos from External Platforms Instead of uploading video files, you can reference hosted videos from platforms like YouTube, Vimeo, or Mux. This offloads bandwidth, enables adaptive streaming, and simplifies playback. Example: Storing an Embed in a Rich Text Field (Contentful) { 'nodeType': 'embedded-entry-block', 'content': [], 'data': { 'target': { 'sys': { 'type': 'Link', 'linkType': 'Entry', 'id': 'videoEntry123' } } } } Explanation : embedded-entry-block : Embeds a referenced Contentful entry (e.g., a video) as a block-level element within a Rich Text field. nodeType: 'embedded-entry-block' : Specifies that the content node is a block-level embedded entry, rendered as a standalone component in the rich text flow. content: [] : Contains no nested content—embedding relies entirely on the referenced entry. data.target.sys : Points to the entry being embedded: type: 'Link' : Indicates this is a link to another Contentful resource. linkType: 'Entry' : Specifies the linked resource is an entry (not an asset or other type). id: 'videoEntry123' : The unique ID of the embedded entry, which can be resolved to fetch its full content (e.g., title, video URL, thumbnail). Structured Content Modeling for Videos In a headless CMS, video content should not be treated as a raw file attachment alone. Instead, it should be modeled as a distinct content type that stores relevant metadata alongside the video reference. This approach improves flexibility, enables richer frontend rendering, and simplifies querying across multiple content types like articles, courses, or product pages. Example: Video Embed Content Type { 'name': 'Video Embed', 'fields': [ { 'id': 'title', 'type': 'Symbol' }, { 'id': 'platform', 'type': 'Symbol' }, { 'id': 'videoUrl', 'type': 'Symbol' }, { 'id': 'duration', 'type': 'Integer' }, { 'id': 'thumbnail', 'type': 'Link', 'linkType': 'Asset' } ] } Explanation: videoUrl: Stores the external platform URL or embed ID. duration and thumbnail: Help display contextual UI elements in the frontend. Video Delivery Considerations When videos are uploaded directly to a headless CMS, they are served as static assets via a content delivery network (CDN). This approach is simple and reliable for lightweight video content but lacks advanced streaming features. Developers must account for these limitations when building video-driven experiences. Example (Contentful CDN URL): https://images.ctfassets.net/{space_id}/{asset_id}/demo.mp4 This is a permanent, public URL used to deliver the original uploaded file as-is. While fast and globally accessible, it does not offer dynamic playback features. Explanation : images.ctfassets.net : Contentful’s global CDN domain for serving both images and binary assets such as videos, ensuring fast and reliable delivery. {space_id} : Unique identifier for the Contentful space that owns the asset. {asset_id} : Unique identifier for the uploaded asset within the space. demo.mp4 : The original filename of the video, preserved for readability and download compatibility. Limitations No adaptive streaming : There is no support for HLS, DASH, or other protocols that adjust video quality based on the viewer's bandwidth. The full video file is streamed in a single quality regardless of device or network conditions. No format fallback or transformation : The CMS does not automatically create additional video formats (e.g., WebM, lower-resolution versions), which means developers must manually ensure compatibility across browsers. No built-in access control : Video URLs are publicly accessible by default, with no signing or token expiration. Anyone with the URL can access the file unless external restrictions are applied. Recommendations for Better Delivery Control Use Mux or Cloudinary : These platforms support adaptive bitrate streaming, automatic format conversion, thumbnail generation, and secure playback URLs. Integrating them with your CMS offloads the complexity of video processing and delivery. Proxy URLs via backend : To restrict access or apply authentication, route video delivery through a backend API that validates the request before serving or redirecting to the video asset. By understanding these delivery constraints and applying external services or proxy logic where needed, you can maintain flexibility while improving video playback performance and security in headless environments. Frontend Playback Implementation In a headless CMS setup, media delivery is decoupled from presentation. This means video playback—whether from direct uploads or external embeds—must be implemented manually on the frontend. The rendering logic depends on whether the video is hosted directly via the CMS or embedded from a third-party platform. Example : Rendering a Directly Uploaded Video
Your browser does not support the video tag.
Explanation:
: Embeds a video player in the browser with specified dimensions and native playback controls, rendering a Contentful-hosted video asset. width='640' / height='360' : Sets the visible dimensions of the video player in pixels (16:9 aspect ratio). controls : Enables default browser controls for play, pause, volume, and fullscreen interaction. Fallback text: 'Your browser does not support the video tag.' is displayed for browsers that lack HTML5 video support.
: Defines the video source using a direct link to a Contentful asset hosted on their CDN. Example : Rendering an Embedded YouTube Video
Explanation
: Embeds a YouTube-hosted video directly into the page, allowing in-place playback with configurable permissions and display properties. width='640' / height='360' : Sets the fixed display dimensions of the video player (16:9 aspect ratio). src='https://www.youtube.com/embed/abc123' : Points to the embeddable version of a YouTube video using its unique video ID (abc123), served via YouTube’s embed endpoint. title='Embedded YouTube Video' : Provides an accessible label for screen readers and assistive technologies, enhancing usability and compliance. frameBorder='0' : Removes the default border around the iframe for a cleaner visual presentation. allow='autoplay; encrypted-media' : Grants permission for specific features: autoplay : Allows the video to start playing automatically (if browser policies permit). encrypted-media : Enables use of DRM-protected or licensed media content. allowFullScreen : Enables the user to toggle the video into full-screen mode. Key Considerations Static
tags rely entirely on the quality and format of the uploaded file. Embedded players handle video delivery, quality adaptation, and streaming behind the scenes. For a consistent experience, ensure video metadata (like dimensions and duration) is available for responsive layout and fallback handling. This approach gives developers full control over how video content appears and behaves across different devices and contexts. Metadata Best Practices When managing video content in a headless CMS, storing metadata in a structured format is essential for dynamic rendering, searchability, and layout control. Rather than relying solely on raw asset fields, it's best to model metadata explicitly within your content types. This ensures the frontend has all the necessary information to render videos effectively and adapt to different devices and use cases. Recommended Metadata Fields videoUrl or embedId : Use for referencing external platforms like YouTube, Vimeo, or Mux. This allows the frontend to generate correct embed links or resolve player types dynamically. Duration: Store the video length in seconds or as a formatted string (e.g., '02:31'). This is useful for displaying runtime, sorting videos, or providing playback context to the user. resolution (width, height): Include resolution data to support responsive design. This helps calculate aspect ratios, apply correct layout spacing, and optimize rendering for mobile or desktop views. thumbnail: A preview image improves visual context before playback. It can be rendered as a static image, as part of a custom player UI, or used for lazy loading.