Upload API
Upload files to your Send Shed account from scripts, apps and tools like ShareX. You get a share link back, plus a direct image link for pictures. A free account is all you need.
Authentication
Create a key in your dashboard under ShareX, then send it on every request:
Authorization: Bearer ss_your_key_here
The key works like a password: keep it out of public code. Creating a new key replaces the old one, and you can revoke it in the dashboard. Accounts must have confirmed their email address.
Upload a file
POST https://sendshed.com/api/v1/upload
Content-Type: multipart/form-data
| Field | Required | What it does |
|---|---|---|
file | Yes | The file. Send other fields before it. |
filename | No | Name to use instead of the uploaded file’s own name (max 255 characters). |
expiryHours | No | Hours until the link expires, 1 to 720 (30 days). Default 168 (7 days). |
downloadLimit | No | Delete after this many downloads. |
idleExpiryHours | No | Also delete after this many hours without a download. |
password | No | Require a password to download. |
?folder=ID | No | Query parameter: add the file to one of your folders (the id from /f/ID). |
Each file can be up to 3 GB, and counts against your account’s storage (10 GB on a free account).
Response
{
"id": "Ab3dE6gH9jK2mN5p",
"url": "https://sendshed.com/d/Ab3dE6gH9jK2mN5p/screenshot.png",
"directUrl": "https://sendshed.com/i/Ab3dE6gH9jK2mN5p/screenshot_sendshed.com.png",
"link": "https://sendshed.com/i/Ab3dE6gH9jK2mN5p/screenshot_sendshed.com.png",
"thumbnailUrl": "https://sendshed.com/t/Ab3dE6gH9jK2mN5p.jpg",
"deletionUrl": "https://sendshed.com/delete/Ab3dE6gH9jK2mN5p/q8Wn...",
"deleteToken": "q8Wn...",
"expiresAt": 1792369682824,
"filename": "screenshot.png"
}
| Field | Meaning |
|---|---|
url | The download page. Share this one. |
directUrl | Only for public PNG, JPEG, GIF and WebP images: the image itself, for embedding in forums and chat. |
link | directUrl when there is one, otherwise url. Handy for screenshot tools. |
thumbnailUrl | Only for public images and videos: a preview picture (JPEG, up to 1200 px wide). |
deletionUrl | A link that deletes the file after a confirmation click. Anyone with it can delete the file, so keep it private. |
deleteToken | Keep it to delete the file later (see below). |
expiresAt | When the link expires, in milliseconds since 1970 (UTC). |
Images and videos with no password or download limit also get a real preview picture when the link is posted in Discord, X, WhatsApp or iMessage, and MP4 and WebM videos play inline.
Delete a file
DELETE https://sendshed.com/api/file/ID
X-Delete-Token: the deleteToken from the upload
You can also delete any of your files from the dashboard.
Errors and limits
Errors come back as JSON: {"error": "message"}.
| Status | Meaning |
|---|---|
| 401 | Missing or wrong API key. |
| 403 | Account suspended, or email address not confirmed yet. |
| 404 | The folder you named isn’t one of yours. |
| 413 | File too large, or not enough storage left on the account. |
| 429 | Too many uploads: the limit is 120 per hour per account. |
Examples
curl
curl -H "Authorization: Bearer $SENDSHED_KEY" \
-F expiryHours=24 \
-F "file=@clip.mp4" \
https://sendshed.com/api/v1/upload
Python
import os, requests
with open("report.pdf", "rb") as f:
r = requests.post(
"https://sendshed.com/api/v1/upload",
headers={"Authorization": "Bearer " + os.environ["SENDSHED_KEY"]},
data={"expiryHours": "72"},
files={"file": f},
)
r.raise_for_status()
print(r.json()["url"])
ShareX
Download a ready-made config from the dashboard; see the ShareX setup guide.