Uploading files with the File Storage API
The Apideck File Storage API supports two ways to upload files. The direct file upload API supports files up to 100MB in size and sends all the binary file data in a single API call.
The upload sessions API allows you to upload files of any size in parts. Note that some file storage connectors have their own limits.
Note 🚨
File upload API calls use https://upload.apideck.com as the base URL.
Direct upload
To upload a file via direct upload, make an API call to the POST /file-storage/files
endpoint with the content of the file, the file name
and parent_folder_id
.
Request body
The request body should be the raw binary content of the file. Do not use form data.
File metadata
Provide the file's name
and parent_folder_id
as JSON in the x-apideck-metadata
header.
terminal
Upload sessions
The upload sessions API requires you to make multiple API calls:
Note 🚨
Our Node.js SDK includes a utility to handle file uploads. You can find it here.
1. Create upload session
To create an upload session, make an API call to the POST /file-storage/upload-sessions
endpoint with the file name
, file size
and parent_folder_id
.
terminal
2. Get upload session
After creating an upload session, make an API call to GET /file-storage/upload-sessions/ID
. Use the ID you received after creating the upload session.
terminal
3. Upload parts of file
Use the part_size
from the previous step to split the file to be uploaded into parts. You can use the split command to do this:
terminal
Upload the parts in sequence to the PUT /file-storage/upload-sessions/ID
endpoint. Send a valid part_number
with each request (part_number
starts at 0). Always provide valid Content-Type
and Content-Length
headers. If you are unsure of the content type of the uploaded file, use application/octet-stream
.
terminal
Note 🚨
For the Box connector it is required to send a `Digest` header with a hash of the part’s contents. More info in the Box API documentation here.
4. Finish upload session
The final step is to finish the session using the POST /file-storage/upload-sessions/ID/finish
endpoint. The result of the API call is a complete File resource.
terminal
Note 🚨
For the Box connector it is required to send a Digest header with a hash of the whole file’s contents. More info in the Box API documentation here.