A simple API to handle any file in your app.

Receive, transform, or deliver any file with our API without owning or managing infrastructure.

Try Transloadit for free
✓ 5 GB free usage every month
✓ No credit card required
Since 2009, over 25,000 startups & enterprises from 135+ countries have converted 26 million gigabytes of media on our platform. Are your needs too specific? Good. We thrive on that.

Read Case Studies

How can Transloadit process your files?

Handle user uploads.
Serverless

Combine Uppy.io with Transloadit and
offer file handling like never before.

  • Pick locally or from Dropbox & friends
  • Resumes after bad Wi-Fi & crashes
  • Crop & resize in-browser
  • Easier on batteries & data plans
  • Open source and Free forever
  • Reject viruses
  • Optimize and store in your S3 bucket
  • Own your data
Try Transloadit for free

Try it: Upload any photo and we will recognize if there's a face on it.
Excellent for cropping profile pictures! Learn more.

$ npm install @uppy/core @uppy/dashboard @uppy/instagram @uppy/tus
import Uppy from '@uppy/core'
import Dashboard from '@uppy/dashboard'
import Instagram from '@uppy/instagram'
import Tus from '@uppy/tus'

Uppy()
  .use(Dashboard, {
    trigger: '#select-files',
    showProgressDetails: true
  })
  .use(Instagram, {
    target: Dashboard,
    companionUrl: 'https://companion.uppy.io'
  })
  .use(Tus, { endpoint: 'https://tusd.tusdemo.net/files/' })
  .on('complete', (result) => {
    console.log('Upload result:', result)
  })

Deliver images faster. Transform on the fly

Transloadit can serve files from a data center close to your user, wherever that may be.

  • Up to 20x faster image delivery
  • Instant URL-based transformations
  • Short and secure URLs
  • Works with existing storage
  • Complex transforms via Templates
  • No code — save time and budget
  • Avoid abuse with Signatures
Try Transloadit for free
 
 

Automate processing
millions of files

Have large media asset libraries that need to be transcoded? Transloadit makes light work of this with our highly scalable platform.

  • Import from any cloud bucket
  • Convert and optimize files in parallel
  • Export to any cloud bucket
  • Integrates with any programming language
  • Command-line tool available
  • Leverage AI to make media searchable
  • 50 more features available
Try Transloadit for free
Your files
  • 01241126.jpg
    Encoding
    Done
  • 01241126.webp
    Encoding
    Done
  • 01241125.mp4
    Encoding
    Done
  • 01241126.jpg
    Encoding
    Done
  • 01241126.jpg
    Encoding
    Done
  • 01241126.jpg
    Encoding
    Done

One tool to meet all your file processing needs

  • Upload & Import

    We accept file uploads and imports from various sources, including mobile apps, web browsers, URLs, Amazon S3, Cloud Files, Azure, FTP, Facebook, Dropbox, and more.

  • Convert & Encode

    We offer a variety of file conversions for all media, including images, videos, audio, and documents.

  • Export & Save

    Export uploads and encoded results to services of your choice, then save the URLs to your database for later use.

  • Display & Enjoy

    Embed the file URLs into your app, so users can enjoy media files with the best possible quality for their device.

What makes us the default choice

  • Cut Costs

    Encoding platforms require ongoing investment to deal with encoding, scaling, and stack headaches. Transloadit lets you free up development & server capacity.

  • Custom Workflows

    Combine 58 features (Robots) to create workflows unique to your business. An elegant declarative JSON language makes this fool- and bullet proof.

  • Rock Solid

    Our platform is globally distributed, highly available, and scales to match any traffic. For 11 years in a row, that has paid off in an uptime of > 99.99%. See Server Status

  • Fantastic Support

    We pride ourselves in providing outstanding and timely support right from our developers, to all of our customers.

Our customers say

I'm not usually one for fanboy-ism but Transloadit is one service I would recommend without hesitation. Their product and customer support is outstanding.

Photo Dave Perrett Dave Perrett

Having a solution for both uploading and transcoding has been a godsend for the current scale that we are at five years after first choosing Transloadit.

Photo Jon Wong Jon Wong
Engineer at Coursera

Using Transloadit saves development and maintenance. Being able to focus on our product instead of reinventing the wheel cannot be understated.

Photo Matt Sumner Matt Sumner
Developer at thoughtbot

So many great features

Video Encoding

Choose from a variety of video encoding features to maximize file compatibility across platforms, as well as enrich video with effects, loops, watermarks, and more, to get the most out of your video content.

  • Resize and encode into various formats
  • Auto-correct badly rotated videos
  • Extract thumbnails
  • Watermark videos or surround them with a frame
  • +50 other video encoding features
Get started for free

Image Manipulation

Tailor your image content to fit your specific needs by making use of our various image manipulation features. Transloadit can convert, resize and crop images, and much more.

  • Convert images into various formats
  • Apply effects and watermarks to images
  • Crop, rotate and resizes images via smart strategies
  • Optimize images, reducing size by up to 80% without quality loss
  • + Many other image manipulation features
Get started for free

Document Processing

Processing documents can be a tedious and time-consuming task, so why not let us take care of that? Transloadit offers a wide array of features to automate your document processing needs, saving you both time and money.

  • Convert document files into PDF format
  • Make screenshots of URLs and HTML files
  • Convert PDF pages into images
  • Overlay videos with dynamic artwork, generated with HTML & JS
  • + Many other document processing features
Get started for free

Audio Encoding

Utilize a versatile toolkit of audio encoding features to maximize file compatibility across platforms, and enrich audio tracks with effects, loops, overlays, and more, to get the most out of your audio content.

  • Loop audio tracks
  • Generate waveform images from audio files
  • Concatenate two audio files
  • Normalize loudness on an audio track
  • + Many other audio encoding options
Get started for free

And there’s more!

File Filtering
Our file filtering service guarantees that each file finds its way into the appropriate encoding pipeline, and offers you protection against the many dangers of the digital world. Millions of trojans, viruses, malware, and other malicious threats are eliminated before they even reach your platform.
Artificial Intelligence
Transloadit offers Artificial Intelligence as a service, so you don't have to run your own models or install complicated software. Benefit from various AI capabilities that are available right inside our encoding pipelines to further automate your media processing.
Smart CDN
A Content Delivery Network (CDN) is the best place to host content. Files are cached and distributed globally in order to keep latencies low. Transloadit can make sure that content is delivered from a data center close to you or your user, wherever in the world that may be.
File Compression
With encoding jobs potentially involving large amounts of input files, file compression can be instrumental for keeping data usage under control. Transloadit is able to archive and extract entire media libraries, and supports a wide variety of compression algorithms and formats.

Import and export to any of these services

Easy integration

RestAPI

Instead of sending Assembly Instructions directly to Transloadit, you can also save them in a secured way as a Template. You can then refer to the template_id in your requests, making sure that secrets and Instructions no longer have to be transmitted, which is a security risk in many cases.

Here is a 'raw' Template, in case you would like to save these Instructions safely in your account, or use these Instructions to talk directly to our REST API without using any SDK.

{
  "thumb": {
    "use": ":original",
    "robot": "/image/resize",
    "width": 75,
    "height": 75,
    "resize_strategy": "fit"
  }
}

We would not recommend to use the cURL integration for production, but it can be convenient for a quick test when you don't have an SDK lying around.

# Prerequisites: brew install curl jq || sudo apt install curl jq
# To avoid tampering, use Signature Authentication
echo '{
  "auth": {
    "key": "YOUR_TRANSLOADIT_KEY"
  },
  "steps": {
    "thumb": {
      "use": ":original",
      "robot": "/image/resize",
      "width": 75,
      "height": 75,
      "resize_strategy": "fit"
    }
  }
}' |curl \
    --request POST \
    --form 'params=<-' \
    --form my_file1=@./chameleon.jpg \
  https://api2.transloadit.com/assemblies \
|jq

It's easy to start using Transloadit in Objective-C and Swift using CocoaPods or Carthage and leverage file uploading & encoding in macOS and iOS apps.

// Add 'Transloadit' to your Podfile, run 'pod install', add credentials to 'Info.plist'
import Arcane
import TransloaditKit

// Set Encoding Instructions
var AssemblySteps: Array = Array<Step>() // An array to hold the Steps

var Step1 = Step (key: "thumb") // Create a Step object
Step1?.setValue(":original", forOption: "use") // Add the details
Step1?.setValue("/image/resize", forOption: "robot") // Add the details
Step1?.setValue(75, forOption: "width") // Add the details
Step1?.setValue(75, forOption: "height") // Add the details
Step1?.setValue("fit", forOption: "resize_strategy") // Add the details
AssemblySteps.append(Step1) // Add the Step to the array

// We then create an Assembly Object with the Steps and files
var MyAssembly: Assembly = Assembly(steps: AssemblySteps, andNumberOfFiles: 1)

// Add files to upload
MyAssembly.addFile("./chameleon.jpg")

// Start the Assembly
Transloadit.createAssembly(MyAssembly) 

// Fires after your Assembly has completed
transloadit.assemblyStatusBlock = {(_ completionDictionary: [AnyHashable: Any]) -> Void in
  print("\(completionDictionary.description)")
}

Until Uppy reached 1.0, our jQuery SDK was the recommended way to integrate Transloadit with web browsers. This is no longer the case and we'd now like everybody to use Uppy instead. The form method of the Robodog Plugin offers a very easy migration for jQuery SDK users.

<body>
  <form action="/uploads" enctype="multipart/form-data" method="POST">
    <input type="file" name="my_file" multiple="multiple" />
  </form>

  <script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
  <script src="//assets.transloadit.com/js/jquery.transloadit2-v3-latest.js"></script>
  <script type="text/javascript">
  $(function() {
    $('form').transloadit({
      wait: true,
      triggerUploadOnFileSelection: true,
      params: {
        auth: {
          // To avoid tampering use signatures:
          // https://transloadit.com/docs/api/#authentication
          key: 'YOUR_TRANSLOADIT_KEY',
        },
        // It's often better store encoding instructions in your account
        // and use a `template_id` instead of adding these steps inline
        steps: {
          thumb: {
            use: ':original',
            robot: '/image/resize',
            width: 75,
            height: 75,
            resize_strategy: 'fit'
          }
        }
      }
    });
  });
  </script>
</body>

Uppy is an open source file uploader for web browsers by Transloadit. With over 23,000 stargazers on GitHub it is the #1 file uploader in the world. Uploads can survive network hiccups, browser crashes, and accidental navigate-aways thanks to Tus support built-in, and it is the recommended way to integrate Transloadit with web browsers.

<!-- This pulls Uppy from our CDN. Alternatively use `npm i @uppy/robodog --save` -->
<!-- if you want smaller self-hosted bundles and/or to use modern JavaScript -->
<link href="//releases.transloadit.com/uppy/robodog/v1.10.4/robodog.min.css" rel="stylesheet">
<script src="//releases.transloadit.com/uppy/robodog/v1.10.4/robodog.min.js"></script>
<button id="browse">Select Files</button>
<script>
  document.getElementById('browse').addEventListener('click', function () {
    var uppy = window.Robodog.pick({
      providers: [ 'instagram', 'url', 'webcam', 'dropbox', 'google-drive', 'facebook', 'onedrive' ],
      waitForEncoding: true,
      params: {
        // To avoid tampering, use Signature Authentication
        auth: { key: 'YOUR_TRANSLOADIT_KEY' },
        // To hide your `steps`, use a `template_id` instead
        steps: {
          thumb: {
            use: ':original',
            robot: '/image/resize',
            width: 75,
            height: 75,
            resize_strategy: 'fit'
          }
        }
      }
    }).then(function (bundle) {
      // Due to `waitForEncoding: true` this is fired after encoding is done.
      // Alternatively, set `waitForEncoding` to `false` and provide a `notify_url`
      // for Async Mode where your back-end receives the encoding results
      // so that your user can be on their way as soon as the upload completes.
      console.log(bundle.transloadit) // Array of Assembly Statuses
      console.log(bundle.results)     // Array of all encoding results
    }).catch(console.error)
  })
</script>

We have a fully featured software development kit for Node.js, to make it easy to talk to the Transloadit REST API from your Node apps.

// yarn add transloadit || npm i transloadit --save-exact
const Transloadit = require('transloadit')

const transloadit = new Transloadit({
  authKey: 'YOUR_TRANSLOADIT_KEY',
  authSecret: 'YOUR_TRANSLOADIT_SECRET'
})

// Set Encoding Instructions
const options = {
  files: {
    // Add files to upload
    'myfile_1': './chameleon.jpg',
  },
  params: {
    steps: {
      thumb: {
        use: ':original',
        robot: '/image/resize',
        width: 75,
        height: 75,
        resize_strategy: 'fit',
      },
    }
  }
}
// Start the Assembly
const result = await transloadit.createAssembly(options)
console.log({ result })

Don't feel like coding? Use our command line tool to watch an ./input/ directory for incoming files and automatically convert them through instructions that you saved locally in: ./steps.json.

The results will be saved in the ./output/ directory.

You can optionally automatically remove successfully processed input files.

[sudo] npm install transloadify -g

export TRANSLOADIT_KEY="YOUR_TRANSLOADIT_KEY"
export TRANSLOADIT_SECRET="YOUR_TRANSLOADIT_SECRET"

# Save Encoding Instructions
echo '{
  "thumb": {
    "use": ":original",
    "robot": "/image/resize",
    "width": 75,
    "height": 75,
    "resize_strategy": "fit"
  }
}' > ./steps.json

transloadify \
  --input "./chameleon.jpg" \
  --output "./output.example" \
  --steps "./steps.json"  

Our PHP SDK allows you to automate the uploading of files through the Transloadit REST API using PHP.

It can be installed via composer.

// composer require transloadit/php-sdk
use transloadit\Transloadit;
$transloadit = new Transloadit([
  "key" => "YOUR_TRANSLOADIT_KEY",
  "secret" => "YOUR_TRANSLOADIT_SECRET",
]);

// Add files to upload
$files = [];
array_push($files, "./chameleon.jpg")

// Start the Assembly
$response = $transloadit->createAssembly([
  "files" => $files, 
  "params" => [
    "steps" => [
      "thumb" => [
        "use" => ":original",
        "robot" => "/image/resize",
        "width" => 75,
        "height" => 75,
        "resize_strategy" => "fit",
      ],
    ],
  ],
]);

Our Ruby Gem allows you to automate the uploading of files through the Transloadit REST API.

If you run Ruby on Rails and are instead looking to integrate with the browser to handle file uploads, then we also have a Ruby on Rails SDK ready for you to use.

# gem install transloadit
transloadit = Transloadit.new(
  :key => "YOUR_TRANSLOADIT_KEY",
  :secret => "YOUR_TRANSLOADIT_SECRET"
)

# Set Encoding Instructions
thumb = transloadit.step "thumb", "/image/resize",
  :use => ":original",
  :width => 75,
  :height => 75,
  :resize_strategy => "fit"
)

assembly = transloadit.assembly(
  :steps => [ thumb ]
)

# Add files to upload
files = []
files.push("./chameleon.jpg")

# Start the Assembly
response = assembly.create! *files

until response.finished?
  sleep 1; response.reload!
end

if !response.error?
  # handle success
end
# pip install pytransloadit
from transloadit import client

tl = client.Transloadit('YOUR_TRANSLOADIT_KEY', 'YOUR_TRANSLOADIT_SECRET')
assembly = tl.new_assembly()

# Set Encoding Instructions
assembly.add_step('thumb', {
  'use': ':original',
  'robot': '/image/resize',
  'width': 75,
  'height': 75,
  'resize_strategy': 'fit'
})
# Add files to upload
assembly.add_file(open('./chameleon.jpg', 'rb'))

# Start the Assembly
assembly_response = assembly.create(retries=5, wait=True)

print assembly_response.data.get('assembly_id')

# or
print assembly_response.data['assembly_id']

We have a powerful Go client that makes using Transloadit easy.

// go get gopkg.in/transloadit/go-sdk.v1
package main

import (
	"fmt"

	"gopkg.in/transloadit/go-sdk.v1"
)

options := transloadit.DefaultConfig
options.AuthKey = "YOUR_TRANSLOADIT_KEY"
options.AuthSecret = "YOUR_TRANSLOADIT_SECRET"
client := transloadit.NewClient(options)

// Initialize new Assembly
assembly := transloadit.NewAssembly()

// Set Encoding Instructions
assembly.AddStep("thumb", map[string]interface{}{
  "use": ":original",
  "robot": "/image/resize",
  "width": 75,
  "height": 75,
  "resize_strategy": "fit"
})

// Add files to upload
assembly.AddFile("myfile_1", "./chameleon.jpg")

// Start the Assembly
info, err := client.StartAssembly(context.Background(), assembly)
if err != nil {
  panic(err)
}

// All files have now been uploaded and the Assembly has started but no
// results are available yet since the conversion has not finished.
// WaitForAssembly provides functionality for polling until the Assembly
// has ended.
info, err = client.WaitForAssembly(context.Background(), info)
if err != nil {
  panic(err)
}

fmt.Printf("You can check some results at: \n")
fmt.Printf("  - %s\n", info.Results["thumb"][0].SSLURL)

// compile 'com.transloadit.sdk:transloadit:0.1.5'
import com.transloadit.sdk.Assembly;
import com.transloadit.sdk.Transloadit;
import com.transloadit.sdk.exceptions.LocalOperationException;
import com.transloadit.sdk.exceptions.RequestException;
import com.transloadit.sdk.response.AssemblyResponse;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Transloadit transloadit = new Transloadit("YOUR_TRANSLOADIT_KEY", "YOUR_TRANSLOADIT_SECRET");
    Assembly assembly = transloadit.newAssembly();
    // Set Encoding Instructions

    Map<String Object> thumbStepOptions = new HashMap();
    thumbStepOptions.put("use", ":original");
    thumbStepOptions.put("width", 75);
    thumbStepOptions.put("height", 75);
    thumbStepOptions.put("resize_strategy", "fit");
    assembly.addStep("thumb", "/image/resize", thumbStepOptions);
      

    // Add files to upload
    assembly.addFile(new File("./chameleon.jpg"));
    
    // Start the Assembly
    try {
      AssemblyResponse response = assembly.save();
      
      // Wait for Assembly to finish executing
      while (!response.isFinished()) {
        response = transloadit.getAssemblyByUrl(response.getSslUrl());
      }
      
      System.out.println(response.getId());
      System.out.println(response.getUrl());
      System.out.println(response.json());
    } catch (RequestException | LocalOperationException e) {
      // Handle exception here
    }
  }
}

Built by Engineers who create industry standards

Our developers are major contributors of Node.js and have built a number of modules now inseparable from Node's core ecosystem. Transloadit is proud to be the first company to run Node.js in production.

These are our open source projects:

As seen on