Image Upload API

A REST API Built Specifically for Image Uploads

REST API for image uploads with global CDN delivery. Store and serve images at scale.

An image upload endpoint sounds trivial until you actually build it: you need somewhere durable to put the bytes, a way to avoid streaming large files through your own server, a CDN in front so thumbnails load fast, and access control for anything that isn't public. files.link gives you all of that as a three-call REST flow, and the design deliberately keeps big image payloads off your application server.

Step one, POST /v1/files/{folderId} with the image's metadata, returns a presigned PUT URL plus a file id. Step two, your client (or backend) PUTs the raw image bytes straight to that URL — they never transit your API process, which matters when users upload 12-megapixel phone photos. Step three, POST /v1/files/confirm-upload with {ids:[id]} finalizes the upload, and the file becomes available as a permanent CDN URL. A browser-side example that uploads directly after your backend has minted the presigned URL:

js
// backend mints step 1 and returns { url, id } to the client
async function uploadImage(file, presignedUrl) {
  await fetch(presignedUrl, {
    method: 'PUT',
    headers: { 'Content-Type': file.type },
    body: file,
  });
}

The Authorization header on the metadata and confirm calls is your raw API key — keep those two calls on your backend so the key never reaches the browser; only the presigned PUT is safe to expose to the client. Every common image type works as-is: JPEG, PNG, WebP, AVIF, GIF, SVG. files.link stores and serves the exact bytes you upload — it does not resize, re-encode, or generate variants, so if you need responsive srcset sizes or format conversion, do that in your pipeline (sharp, a build step, or your framework's image component) before the PUT, or after fetching from the CDN.

What you get in return is dead-simple integration and edge delivery: the moment confirm-upload returns, the CDN URL is live worldwide, so an avatar uploaded in São Paulo renders instantly for a viewer in Oslo. Compared to dropping in Cloudinary or imgix — which bundle transformations you may not need and bill per-transformation — this is a leaner, transform-free path priced from prepaid credits.

Benefits With No Complexity

Global CDN delivery

Your files are served from 450+ edge locations worldwide.

Edge-cached worldwide

Files are cached close to your users for fast delivery.

Signed-URL security

Private files stay protected with time-limited access.

What You Get

Unlimited files

Upload as many files as you need.

Unlimited storage

There is no storage limit.

Public + Private storage

Private files are fully secured.

CDN ready links

Upload directly to 450+ edge locations worldwide.

Prepaid credits

No subscription. Pay only for the storage and bandwidth you use.

More coming soon

We have plenty of features coming!

How files.link Works

1. Upload

Create a project and upload your first file.

2. Copy

Copy the CDN link.

3. Use Anywhere

Paste and enjoy the blazing speed.

Why Developers Choose files.link

A Better Way to Store & Deliver Files

Cloudinary APIimgixAmazon S3 PutObjectfiles.link
3-call REST upload, no SDK required
Presigned PUT keeps bytes off your server
Permanent CDN URL returned on confirm
On-the-fly image transformations
No per-transformation fees
Private images with signed URLs

Calculate Your Needs

Storage

0GB

Egress

0GB

CDN Bandwidth

0GB
Total: $0.000/month

Start Using the Image API

  • Global CDN delivery
  • Edge-cached worldwide
  • Signed-URL security
  • Unlimited files
  • Unlimited storage
  • Public + Private storage
  • No subscription — prepaid credits keep spend predictable
Start Using the Image API

Frequently Asked Questions

What are the exact API calls to upload an image?
Three: POST /v1/files/{folderId} with the image metadata returns a presigned PUT URL and a file id; PUT the raw bytes to that URL; POST /v1/files/confirm-upload with {ids:[id]}. After confirm, the permanent CDN URL is live.
Does the API resize or convert images?
No. files.link stores and delivers the exact bytes you upload. For responsive sizes or format conversion (e.g. to WebP/AVIF), process the image in your pipeline before the PUT or transform after fetching from the CDN.
Can I upload directly from the browser?
Yes — mint the presigned PUT URL on your backend (so the API key stays secret), return it to the client, and have the browser PUT the file straight to that URL. The large payload never passes through your API server.
Which image formats are supported?
All of them — JPEG, PNG, WebP, AVIF, GIF, SVG, TIFF, BMP and more. files.link is format-agnostic; it serves back whatever bytes you stored.
General Questions
Is there a subscription?
No. files.link uses prepaid credits, so storage, bandwidth, and API usage are deducted from your balance as you go. The app explains the payment step before uploads are enabled — no monthly subscription and no per-user fees.
What is files.link?
files.link is a developer-first file platform that makes it simple to store, secure, and deliver files globally. It provides signed URLs, public/private access, and an API-first design so you can integrate file delivery into any app without the usual complexity.
How does billing work?
files.link uses prepaid credits. As you use storage, bandwidth, and API requests, credits are deducted daily. When your balance runs low, we automatically recharge it using your saved card. If an auto-recharge doesn't go through, your files and links stay put — you simply update your payment method or top up manually to keep going. No monthly subscriptions — just simple usage-based pricing.
How secure is my data?
All files are encrypted at rest and in transit. You can use signed URLs for private files, control access with permissions, and rely on enterprise-grade infrastructure for data protection.

Related

files.link
Copyright © 2026
All rights reserved
ContactGuidesGlossaryStatusLegal