FilePost vs Cloudinary: Which File Hosting API Should You Choose?

April 3, 2026 · 10 min read

Cloudinary has been the default choice for image and media management for years. It offers powerful transformations, automatic format optimization, and a massive feature set. But for many developers, that power comes with complexity and cost they do not actually need. If your use case is "upload a file, get a URL," you might be paying for features you never touch.

FilePost takes the opposite approach: a single API endpoint, instant CDN URLs, and flat pricing with no per-GB fees. This comparison breaks down exactly where each service fits, so you can pick the right tool for your project instead of the most popular one.

Quick Overview

Before diving into the details, here is a high-level summary of what each service is built for:

Pricing Comparison

Pricing is where these two services diverge most sharply. Cloudinary uses a credit-based system that combines transformations, storage, and bandwidth into a single metric. FilePost uses flat monthly pricing based on upload count, with unlimited storage and bandwidth on every plan.

Feature FilePost Free FilePost Starter ($9/mo) FilePost Pro ($29/mo) Cloudinary Free Cloudinary Plus ($89/mo)
Monthly uploads 300 5,000 25,000 Shared credit pool Shared credit pool
Max file size 50 MB 200 MB 500 MB 10 MB (free) 100 MB
Storage Unlimited Unlimited Unlimited 25 credits (shared) 225 credits (shared)
Bandwidth Unlimited Unlimited Unlimited 25 credits (shared) 225 credits (shared)
CDN delivery Yes Yes Yes Yes Yes
File types Any Any Any Images, video, raw Images, video, raw
Image transforms No No No Yes (uses credits) Yes (uses credits)

The key difference: Cloudinary's credit system means that storage, bandwidth, and transformations all draw from the same pool. If your app goes viral and bandwidth spikes, you burn through credits faster, even if you are not uploading new files. With FilePost, bandwidth is always unlimited. You only pay based on how many files you upload per month.

For teams that just need file hosting without image manipulation, FilePost's Starter plan at $9/month covers 5,000 uploads. Cloudinary's cheapest paid plan starts at $89/month. That is a 10x price difference for a use case Cloudinary was not really designed for.

API Simplicity

Both services offer REST APIs, but the developer experience is dramatically different.

Uploading a file with FilePost

curl -X POST https://filepost.dev/v1/upload \
  -H "X-API-Key: your_api_key_here" \
  -F "file=@photo.png"

Response:

{
  "url": "https://cdn.filepost.dev/file/filepost/uploads/a1/a1b2c3.png",
  "file_id": "a1b2c3d4e5f6",
  "size": 84210
}

That is the entire integration. One endpoint, one header, one form field. No SDK, no configuration, no upload presets.

Uploading a file with Cloudinary

curl https://api.cloudinary.com/v1_1/your_cloud_name/image/upload \
  -X POST \
  -F "file=@photo.png" \
  -F "upload_preset=your_preset" \
  -F "api_key=your_api_key" \
  -F "timestamp=1234567890" \
  -F "signature=generated_signature"

Cloudinary requires a cloud name, an API key, an API secret (for signed uploads), an upload preset (for unsigned uploads), and a timestamp-based signature. The response includes dozens of fields covering image dimensions, format, color analysis, and transformation metadata. If you just need the URL, most of that data is noise.

For unsigned uploads, you first need to create an upload preset in the Cloudinary dashboard. For signed uploads, you need to generate a signature server-side using your API secret, which means you cannot upload directly from a browser without a backend proxy.

SDK requirements

Task FilePost Cloudinary
Upload a file Any HTTP client (cURL, fetch, requests) SDK recommended, manual signing required otherwise
List files GET /v1/files Admin API with separate auth
Delete a file DELETE /v1/files/:id Admin API or upload API with signature
Get CDN URL Returned in upload response Construct from cloud name + public_id + format

File Type Support

Cloudinary splits its upload API into three resource types: image, video, and raw. Each type has its own endpoint and its own set of capabilities. Images get transformations and analysis. Videos get transcoding and streaming. Raw files are stored but get limited functionality.

FilePost accepts any file type through a single endpoint. Whether you are uploading a PNG, a PDF, a ZIP archive, a CSV, or a firmware binary, the API call is identical. There is no need to specify a resource type, and every file gets the same CDN delivery.

If your application handles diverse file types (think: a SaaS where users upload contracts, images, spreadsheets, and archives), FilePost's "any file, one endpoint" model is simpler to integrate and maintain.

When to Choose Cloudinary

Cloudinary is the better choice when your application is fundamentally about images or video and you need server-side transformations. Specific use cases where Cloudinary excels:

When to Choose FilePost

FilePost is the better choice when you need simple, reliable file hosting without the complexity of a media management platform. Specific scenarios where FilePost fits better:

Integration Examples

To illustrate the difference in developer experience, here is the same task (upload a file, get a URL) implemented in Python for both services.

Python upload with FilePost

import requests

with open("report.pdf", "rb") as f:
    response = requests.post(
        "https://filepost.dev/v1/upload",
        headers={"X-API-Key": "your_api_key_here"},
        files={"file": f}
    )

url = response.json()["url"]
print(f"Hosted at: {url}")

Five lines of meaningful code. No configuration, no initialization, no SDK.

Python upload with Cloudinary

import cloudinary
import cloudinary.uploader

cloudinary.config(
    cloud_name="your_cloud_name",
    api_key="your_api_key",
    api_secret="your_api_secret"
)

result = cloudinary.uploader.upload(
    "report.pdf",
    resource_type="raw"
)

url = result["secure_url"]
print(f"Hosted at: {url}")

Cloudinary requires installing the cloudinary package, configuring three credentials (cloud name, API key, API secret), and specifying resource_type="raw" because PDFs are not images. The SDK handles signature generation internally, but you are now dependent on Cloudinary's Python library rather than using standard HTTP.

Node.js upload comparison

FilePost with built-in fetch:

import { readFile } from "fs/promises";

const file = new File([await readFile("report.pdf")], "report.pdf");
const form = new FormData();
form.append("file", file);

const res = await fetch("https://filepost.dev/v1/upload", {
    method: "POST",
    headers: { "X-API-Key": "your_api_key_here" },
    body: form,
});

const { url } = await res.json();
console.log(`Hosted at: ${url}`);

Cloudinary with their SDK:

const cloudinary = require("cloudinary").v2;

cloudinary.config({
    cloud_name: "your_cloud_name",
    api_key: "your_api_key",
    api_secret: "your_api_secret",
});

const result = await cloudinary.uploader.upload("report.pdf", {
    resource_type: "raw",
});

console.log(`Hosted at: ${result.secure_url}`);

Storage and Bandwidth Model

This is where the pricing philosophy difference has the biggest practical impact.

Cloudinary uses a unified credit system. Every transformation, every byte of storage, and every byte of bandwidth consumed draws from the same credit pool. This means:

FilePost charges a flat monthly fee based solely on upload count. Storage is unlimited, bandwidth is unlimited, and files live forever. This means:

For applications with unpredictable traffic patterns (viral content, seasonal spikes, public-facing file links), FilePost's model eliminates the risk of unexpected bills.

Performance and CDN

Both services deliver files through global CDN networks. Cloudinary uses a multi-CDN approach with Akamai, Fastly, and Cloudfront. FilePost delivers through Cloudflare's network, which spans 300+ data centers worldwide.

For end users, the performance difference is negligible. Both services serve cached files from edge locations close to the user. The practical difference is in cache behavior: Cloudinary's CDN is tightly integrated with its transformation pipeline, so requesting a new image variant triggers an origin fetch and transform. FilePost serves static files directly, so every request after the first is a cache hit with no processing overhead.

Migration Path

If you are currently using Cloudinary and want to evaluate FilePost, migration is straightforward because FilePost's API is simpler. The core change is replacing your Cloudinary upload call with a standard HTTP POST to FilePost's endpoint.

Here is a migration script that re-uploads files from Cloudinary URLs to FilePost:

import requests

FILEPOST_KEY = "your_filepost_api_key"
cloudinary_urls = [
    "https://res.cloudinary.com/demo/image/upload/sample.jpg",
    "https://res.cloudinary.com/demo/raw/upload/document.pdf",
]

for cloud_url in cloudinary_urls:
    # Download from Cloudinary
    file_data = requests.get(cloud_url).content
    filename = cloud_url.split("/")[-1]

    # Upload to FilePost
    response = requests.post(
        "https://filepost.dev/v1/upload",
        headers={"X-API-Key": FILEPOST_KEY},
        files={"file": (filename, file_data)}
    )

    result = response.json()
    print(f"{filename}: {result['url']}")

After migration, you can update your database URLs and remove the Cloudinary SDK from your dependencies.

Try FilePost Free

Get 300 free uploads per month with no credit card required. One API endpoint, instant CDN URLs, and flat pricing that scales.

Get Your Free API Key

Summary: Which Should You Choose?

Your need Best choice
Image resizing, cropping, format conversion Cloudinary
Video transcoding and streaming Cloudinary
Enterprise media library with DAM features Cloudinary
Simple file hosting with CDN URLs FilePost
Mixed file types (PDFs, ZIPs, images, CSVs) FilePost
Predictable pricing with no bandwidth fees FilePost
Fastest possible integration (no SDK) FilePost
Budget under $30/month FilePost

Cloudinary is a powerful platform for teams that need advanced media processing. FilePost is a simpler, cheaper alternative for teams that just need reliable file hosting with CDN delivery. The right choice depends entirely on whether you need transformations or just URLs.