File Sharing API for Developers
What is a File Sharing API?
A file sharing API is a programming interface that allows developers to upload, download and share files programmatically. EasySend provides a free REST API that requires no authentication, no API key and no signup. Upload a file with one POST request and get a shareable link back in the JSON response.
Integrate file sharing into your app, script or workflow with a straightforward REST API. cURL, Python and JavaScript examples that work in under 5 minutes.
An API Built for Developers Who Value Their Time
We've used enough APIs to know what makes a good one. Clear documentation, minimal authentication overhead, predictable responses and examples that actually work when you paste them into a terminal. That's what we built.
The EasySend API lets you upload files, generate shareable links and manage transfers programmatically. Whether you're building a web app that needs file sharing, automating backup distribution or integrating file transfers into a CI/CD pipeline - we've got you covered.
No API Key Required
For basic uploads you don't need an API key. Seriously. Hit the endpoint, send your file and get a link back. We removed the key requirement for simple use cases because we know the pain of signing up for an account, verifying an email, generating a key, storing it securely and rotating it periodically - all just to send a file.
Optional features like password protection on the share page, download notification emails and bundle descriptions are all available on the same unauthenticated endpoint. Just send them as additional form fields. For the common case of "I need to upload a file and get a link" you can start right now without any setup.
Quick Start Examples
cURL
curl -X POST https://easysend.co/api/v1/upload \
-F "files[]=@/path/to/your/file.zip"
That's a complete working example. One command, one file, one link back in the JSON response. You can pipe this into jq, use it in a bash script or call it from any language that can shell out to cURL.
Python
import requests
with open("report.pdf", "rb") as f:
response = requests.post(
"https://easysend.co/api/v1/upload",
files={"files[]": f}
)
print(response.json()["share_url"])
Four lines of meaningful code. No SDK to install beyond the requests library that every Python developer already has. The response JSON includes the share URL, upload token, expiration timestamp and per-file metadata.
JavaScript (Node.js)
const fs = require("fs");
const FormData = require("form-data");
const form = new FormData();
form.append("files[]", fs.createReadStream("./data.csv"));
const response = await fetch("https://easysend.co/api/v1/upload", {
method: "POST",
body: form
});
const result = await response.json();
console.log(result.share_url);
Works with Node 18+ using the built-in fetch API. For browser-side uploads the Fetch API works the same way with a standard FormData object.
API Keys for Bots and Long-Running Workflows
Anonymous use is great for one-off uploads. For bots, scheduled jobs and internal services that hit the API regularly, the operator can mint an API key that unlocks a higher tier.
Keyed requests get bigger ceilings across the board: bundles default to 7-day expiry instead of 3, max bundle size goes from 1 GB to 5 GB and the rate limit moves from 60 requests per hour per IP to 300 per hour per key. Everything else about the API stays the same.
Send the key as a standard Bearer token on any existing endpoint:
curl -X POST https://easysend.co/api/v1/upload \
-H "Authorization: Bearer es_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-F "files[][email protected]"
Keys also unlock a small set of /my/* endpoints. GET /api/v1/my/bundles returns every bundle uploaded with that key, newest first. GET /api/v1/my/usage returns key metadata plus running totals. DELETE /api/v1/my/bundles/{short_code} removes a bundle you own.
That listing endpoint is the interesting one for multi-agent setups. Every bot or worker that holds the same key sees the same set of bundles. Treat it as a shared bucket: one agent uploads a generated report, the next agent in the chain calls my/bundles, picks up the newest entry and downloads it. No external coordination layer needed.
Keys are available for self-service purchase at /api-keys, with monthly subscription or one-time options starting at $5. Operators can also mint internal keys via the admin dashboard for staff or trusted partners. Either way the key is shown in plaintext exactly once at mint time, so save the es_live_... string somewhere safe right then because there is no recovery path. To rotate, revoke the old key and issue a new one.
CLI Tool for Terminal Workflows
We built a command-line tool for developers who live in the terminal. Install it once and you get a simple command that uploads files and returns links. It's perfect for scripting, automation and those moments when you need to share a log file with a colleague without leaving your terminal session.
The CLI supports piping from stdin so you can do things like pipe the output of a database dump directly into an upload. It handles chunked uploads automatically for large files and shows a progress bar so you know what's happening.
MCP Plugin
For teams using AI-assisted development workflows we offer an MCP (Model Context Protocol) plugin. This lets AI assistants upload and share files through EasySend as part of their tool use. If you're building AI agents that need to generate and share files - reports, exports, processed data - the MCP plugin handles the file transfer side cleanly.
The plugin follows the MCP specification and works with any compatible AI framework. Setup takes about 2 minutes and requires no API key for basic operations.
Embeddable Upload Widget
Need to add file uploads to your website without building the UI yourself? Our embeddable widget drops into any webpage with a single script tag. It handles the upload interface, progress display, encryption and link generation. You get a callback with the file URL when the upload completes.
The widget is customizable - you can match it to your site's color scheme, set size limits and configure allowed file types. It's a solid option for freelancers and small teams who need file upload functionality without the engineering overhead of building it from scratch.
Full Documentation
Our complete API documentation covers every endpoint, parameter and response format. We include request and response examples for each endpoint, error code explanations and rate limit details. The docs are written by the same developers who built the API so they're accurate and kept up to date.
Frequently Asked Questions
Do I need an API key to use the API?
No. The upload endpoint is fully unauthenticated, including optional features like password protection on the share page, download notification emails and bundle descriptions. API keys are optional and only needed if you want the higher tier or the /my/* listing endpoints. Buy a key in seconds at /api-keys, with monthly subscription or one-time options starting at $5.
Are there rate limits?
Yes. Anonymous requests are limited to 60 requests per hour per IP address. Keyed requests get higher limits depending on tier, counted per key across every machine using it. The Starter tier is 300 per hour, Pro is 600, and Power and Max are 1200. See full tier details and pricing at /api-keys.
Can I use the API to upload files larger than 1GB?
Anonymous uploads cap at 1 GB per bundle, matching the web interface. With an API key on the request, the cap goes up to 5 GB per bundle and bundles default to a 7-day expiry instead of 3. The API handles large transfers cleanly so the bigger ceiling does not change how you write client code.
Is the API encrypted like the web interface?
All API transfers use HTTPS. For client-side encryption matching our web interface you can encrypt files before uploading them via the API. We provide encryption helper functions in our documentation that implement the same AES-256-GCM encryption used by our web uploader.
What response format does the API use?
All responses are JSON. A successful upload returns the download URL, file size, expiration timestamp, deletion token and a unique file ID. Error responses include a human-readable message and an error code for programmatic handling.