Media Links
Frame.io stores and processes files uploaded to your projects — images, videos, PDFs, and more. When you retrieve a file via the API, the base response includes core metadata like the file name, status, and a view_url for opening it in the Frame.io app. To access the actual file content — the original, a preview, or different quality renditions — you use includes.
This guide explains the media link includes available on the List Files and Get File endpoints, what each one returns, and when to use each.
What are includes?
Includes are optional fields you can request alongside a file response. By default the API returns only core file metadata — name, status, type, timestamps, and view_url. Includes let you opt in to additional data, keeping responses lean when you don’t need everything.
How to add includes
Pass a comma-separated list of include names as the include query parameter on any Get File or List Files request:
Includes work the same way on both the single-file and list endpoints. When used on List Files, the includes are resolved for every file in the response.
SDK examples
Includes that aren’t requested are omitted from the response entirely.
Media link includes overview
The original uploaded file, exactly as it was uploaded
A PNG preview image for display purposes
The best available processed rendition
The smallest available rendition for low-bandwidth use cases
A low-resolution 180p H264 video transcode for streaming and playback
A WebP sprite sheet of video frame thumbnails for building scrubbing UI
media_links.original
Returns signed URLs pointing to the original file exactly as it was uploaded — no processing, no conversion.
Fields
When to use
Use media_links.original when you need the source file — for example, to let a user download the original MOV, MP4, MXF, AVI, PSD, PNG, or TIFF, or to pass the original bytes to another system.
Example request
Example response
These URLs are temporary signed S3 URLs — they expire. Do not cache or store them; request a fresh URL each time you need one.
media_links.thumbnail
Returns a PNG preview image of the asset, capped at 540px tall. This is a processed rendition — not the original file — and watermarks may be applied depending on your account settings.
Fields
When to use
Use media_links.thumbnail when you need to display a visual preview of the asset — for example in a grid view, a gallery, or a file picker. It loads faster than the original and is always a web-safe PNG format.
Example request
Example response
media_links.high_quality
Returns a download URL for the best available processed rendition of the image. For images, Frame.io picks the largest rendition available (image_high > image_full > image_small).
Fields
When to use
Use media_links.high_quality when you want the best quality version without needing the original — for example, exporting a high-res rendition for downstream processing, or presenting a full-resolution preview.
Example request
Example response
media_links.efficient
Returns a download URL for the smallest available processed rendition. This is the opposite of high_quality — Frame.io picks the lowest resolution rendition available.
Fields
When to use
Use media_links.efficient when bandwidth or file size matters more than quality — for example, generating quick previews in a low-bandwidth environment, or feeding a thumbnail pipeline that doesn’t need full resolution.
Example request
Example response
media_links.video_h264_180
Returns streaming and download URLs for a low-resolution 180p H264 video transcode of the asset.
This is a legacy include. It will be null if a 180p transcode was not generated for the asset. For most use cases prefer media_links.efficient, which selects the best available low-quality rendition rather than relying on a specific transcode existing.
Fields
When to use
Use media_links.video_h264_180 when you need a guaranteed 180p H264 transcode specifically — for example, integrating with a legacy player or pipeline that requires this exact format. If the transcode doesn’t exist for a given asset, both URLs will be null.
Example request
Example response
media_links.scrub_sheet
Returns a WebP sprite sheet — a single image containing a grid of video frame thumbnails sampled evenly across the video duration. This is used to build video scrubbing UI, where the player shows a preview frame as the user drags across the timeline.
Scrub sheets are generated for video assets only. The include will return null URLs for images, PDFs, and other non-video files.
Fields
metadata fields:
When to use
Use media_links.scrub_sheet when building a custom video player or timeline UI that needs to show a preview thumbnail as the user scrubs. Rather than making a separate request for each frame, the sprite sheet bundles all preview frames into a single image download.
Example request
Example response
Extracting a frame from the sprite sheet
The sprite sheet is a grid of tile_x columns × tile_y rows. To display the thumbnail for a given frame index (zero-based), calculate its position within the image:
You can then use CSS background-position to show the correct tile from the sprite sheet:
To map a playback position (in seconds) to a frame index, use the total video duration and the number of frames in the sheet:
The metadata field is only available on the experimental API version. On the stable v4 API, scrub_sheet returns download_url and url only.
Combining multiple includes
You can request multiple includes in a single API call:
Choosing the right include
view_url — available on every file response without needing an include — is a permanent deep-link into the Frame.io web app. It is not a media URL; it opens the Frame.io UI and has no expiry. Use it when you want to direct a user to review or comment on an asset directly in Frame.io, not when you need to serve or download the file programmatically.
Include availability
Media link includes are only populated once Frame.io has finished processing the uploaded file. If you request an include immediately after upload, the URLs may be null while transcoding is in progress. Check the status field on the file object — includes will be available once status is ready.