How Local & Remote Uploads Work
How Local & Remote Uploads Work
This guide details the full flow to upload files using the Frame.io V4 API. It covers the raw API requests and responses for both local and remote uploads.
Looking for SDK-specific guides? For upload implementations with built-in chunking, retries, and progress tracking, see the Python SDK Upload Guide.
Prerequisites
Before you begin uploading files, ensure you have completed these setup steps:
Frame.io V4 Account
You have a Frame.io V4 account administered via the Adobe Admin Console, OR you have switched to Adobe authentication for your account user
Adobe Developer Console Setup
You have logged into the Adobe Developer Console and have added the Frame.io API to a new or existing project
Authentication Credentials
You have generated the appropriate Authentication credentials for your project
Choosing your upload method
There are two ways to upload a file using the Frame.io API: Create File (local upload) and Create File (remote upload).
Use when the media is locally accessible to your application, similar to dragging a file from your desktop
Use when the media is accessed over the network, such as through an integration with another service
In this guide we’ll start with the simpler case of completing a remote upload.
Remote Upload
To create a file through remote upload, select the Create File (remote upload) endpoint. The request body requires the file name and its source url.
Remote upload currently has a 50 GB file size limit. For files larger than 50 GB, use local upload instead.
Request Example
Response Example
A successful request will yield a response like the one below:
Local Upload
To create a file through local upload, select the Create File (local upload) endpoint. The request body requires the file name and its file size specified in bytes.
Request Example
Response Example
If the request is successful, a placeholder file resource is created without any content. Depending on the file size, the response body will include one or more upload_urls. Given this example, we will need to manage this upload in multiple parts.
Important Upload Requirements:
These are important details to keep in mind when sending the subsequent upload request(s):
- The HTTP request method must be
PUT - The
x-amz-aclheader must be included and be set to private - The
Content-Typeheader must match themedia_typespecified in the original Create File (local upload) request. This is true even when uploading the file as separate parts. In the example above, the value formedia_typeisimage/jpeg. Therefore, the value forContent-Typemust also beimage/jpeg.
Multi-part Upload
When a given file results in more than one upload url, you will need to split the source file into chunks and issue a PUT request for each one.
Recommended: The Python SDK Upload Guide covers multi-part upload using FrameioUploader, which handles chunking, parallel uploads, retries, and progress tracking out of the box.
If you need to implement the upload manually — for example, in a language without an SDK or for full control over the process — the script below shows how to split a file into chunks and upload each one using the presigned URLs.
Python Implementation Example
Upload Flow Summary
Next Steps: Once your file is uploaded, you can use the returned file ID to add comments, create shares, or perform other operations using the Frame.io V4 API.