Free File Infrastructure API
One API for file uploading, image transformation, and CDN delivery in your application.
Your free account includes
- 500 uploads via the API or file picker
- 1 GB storage in a managed S3 bucket
- 1 GB bandwidth for files served to users
- 1,000 transformations via URL parameters
$0 forever, no credit card required. 1 team member, 20 MB maximum file size, integrated CDN, and community support.
Trusted by teams at
Create your free Filestack account
One API for Upload, Processing, and Delivery
From the moment a user picks a file to the moment your application serves it back.
-
Upload
File Upload API
- REST API for any backend, plus a drop-in browser picker
- Connected sources from local device and webcam to Google Drive, Box, and OneDrive
- Resumable uploads for large files and mobile networks
-
Transform
Image Transformation
- Resize, crop, compress, and convert through URL parameters
- JPG, PNG, WEBP, GIF, and PDF conversion
- PDF page info, page format, and text extraction
-
Deliver
CDN Delivery
- Global CDN for every file the API ingests
- Responsive images sized to the requesting device
- Custom CNAME to serve files from your own domain
Additional capabilities
Signed URLs, access policies, domain allowlists, and virus detection.
Chain processing, security, and delivery into one pipeline with webhooks.
Detect faces, then crop, blur, or pixelate them automatically.
SDKs for the Frameworks You Already Use
Install the library for your stack and make the first upload in minutes. Every SDK wraps the same upload, transformation, and delivery API.
Your First Upload in a Few Lines
The same API key works across client-side and server-side SDKs. Pick a language to see the integration.
// const client = filestack.init('YOUR_API_KEY'); const options = { onUploadDone: (res) => console.log(res.filesUploaded), }; client.picker(options).open();
import React from 'react'; import { PickerOverlay } from 'filestack-react'; const FileUploader = () => ('YOUR_API_KEY'} onSuccess={(result) => console.log(result)} pickerOptions={{ maxFiles: 5 }} /> );
// npm install @filestack/angular // app.component.ts export class AppComponent implements OnInit { apikey: string; ngOnInit() { this.apikey = 'YOUR_API_KEY'; } }"apikey">
# pip install filestack-python from filestack import Client client = Client("YOUR_API_KEY") # Upload a file new_filelink = client.upload(filepath='/path/to/file.jpg') print(new_filelink.url) # Transform an image transformed_url = client.transform( 'RESIZE_HANDLE', {'resize': {'width': 100, 'height': 100}} )
// composer require --prefer-dist filestack/filestack-php use Filestack\FilestackClient; $client = new FilestackClient('YOUR_API_KEY'); // Upload a file $filelink = $client->upload('/path/to/file.jpg'); echo $filelink->handle;
// implementation 'org.filestack:filestack-java:1.0.1' Config config = new Config("YOUR_API_KEY"); Client client = new Client(config); // Synchronous, blocking upload FileLink file = client.upload("/path/to/file.jpg", false); System.out.println(file.getHandle());
# gem install filestack require 'filestack' client = FilestackClient.new('YOUR_API_KEY') # Upload a file filelink = client.upload(filepath: '/path/to/file.jpg') puts filelink.handle
// go get github.com/filestack/filestack-go package main import ( "context" "fmt" "log" "os" "github.com/filestack/filestack-go/client" ) func main() { file, _ := os.Open("/path/to/file.jpg") defer file.Close() cli, err := client.NewClient("YOUR_API_KEY") if err != nil { log.Fatalf("failed to initialize client: %v", err) } fileLink, _ := cli.Upload(context.Background(), file) fmt.Println(fileLink.AsString()) }
// pod 'Filestack' import Filestack import FilestackSDK let config = Filestack.Config() let client = Filestack.Client(apiKey: "YOUR_API_KEY", config: config) // Upload a local file let localURL = URL(string: "file:///path/to/file.jpg")! client.upload(using: localURL) { response in if let json = response?.json, let handle = json["handle"] as? String { print(handle) } }
// implementation 'com.filestack:filestack-android:...' Config config = new Config("YOUR_API_KEY"); FilestackPicker picker = new FilestackPicker.Builder() .config(config) .autoUploadEnabled(true) .build(); picker.launch(activity); // Receive the result in the calling activity if (FilestackPicker.canReadResult(requestCode, resultCode)) { Listselections = FilestackPicker.getSelectedFiles(data); }
Full reference, quick start guides, and tutorials are in the Filestack documentation.
Julian Connor, CTO, Grailed
Free Plan Questions
Is the Filestack Free plan actually free?
Yes. The Free plan costs $0 and stays active. It includes 500 uploads, 1 GB of storage, 1 GB of bandwidth, and 1,000 transformations.
Do I need a credit card to sign up?
No. Signup takes a name, email, country, and password. Your API key is available as soon as you confirm your email.
Who is the Free plan for?
Developers and product teams building file upload, processing, or delivery into an application. It covers one team member and a 20 MB maximum file size.
Which languages and frameworks have SDKs?
JavaScript, React, Angular, Python, PHP, Java, Ruby, Go, iOS, and Android, all documented in the SDK reference. Any language that can make an HTTP request can call the REST API directly.
How long does integration take?
The client-side picker takes three lines of JavaScript and an API key. Server-side uploads take an SDK install and a single upload call.
Where are uploaded files stored?
Filestack stores files in an internally managed S3 bucket by default. You can route storage to your own S3, Azure, Dropbox, or Rackspace account instead.
What happens when I reach the Free plan limits?
Compare paid plans on the Filestack pricing page and upgrade from your dashboard. Plan data and API keys carry over.
Ready to build? Your API key is one form away.