The file stays encrypted on our servers, but we would be able to read it. With a password, only you and the recipient can.
That looks like text
file.txt · 0 KB
DMCA Takedown Policy
Information for copyright holders
Overview
tmp0.cc respects the intellectual property rights of others. We are committed to responding to valid DMCA takedown notices in accordance with the Digital Millennium Copyright Act.
While we cannot prevent all users from uploading copyrighted content, we take copyright infringement seriously and will promptly remove files when we receive a valid takedown request.
Safe Harbor Notice
tmp0.cc operates as a neutral hosting provider under DMCA Section 512. We do not monitor, review, or control the content uploaded by users. We have no knowledge of potentially infringing content until notified. Upon receiving valid takedown notices, we act expeditiously to remove or disable access to the material.
Upon receipt of a valid notice, we will review and remove infringing content, typically within 24-48 hours.
Counter-Notification
If you believe your content was removed in error, you may submit a counter-notification to legal@tmp0.cc
Frequently Asked Questions
The short answers.
How does it work?
Drop a file, pick how long it should live, and share the link. When the timer runs out — or the download limit is reached — the file is deleted.
Do I need an account?
No. Everything works without registration. Signing in with Discord is optional and only adds a dashboard that lists what you have shared.
What are the limits?
2 GB per upload, and storage from one hour up to 30 days. Multiple files are bundled into a single ZIP automatically.
How private is it?
Set a password and your file is encrypted in your browser before it leaves your device — we never see the password or the contents. Without one, files are still encrypted at rest on our servers.
Can I delete something early?
Yes. Every upload comes with a private delete link. Keep it — anyone who has it can remove your file.
What about text and code?
Use tmp0.cc/paste for a proper editor with syntax highlighting, or just press Ctrl + V anywhere on the home page.
Can I send a file without uploading it?
Direct transfer sends files browser to browser while both tabs stay open. Nothing is stored on our servers.
Is there an API?
Yes — see the for endpoints, ShareX setup and the CLI.
Privacy Policy
What we store, what we don't, and for how long. Last updated November 2026.
In short
No account is needed, and nothing you upload is linked to one unless you log in.
A file you protect with a password on the website is encrypted in your browser. We cannot read it.
Everything is deleted when it expires or reaches its limit.
Your IP address is never written to the database. It is counted in memory as a hash, for hours at most.
No tracking cookies, no third-party analytics, no advertising.
A file uploaded without a password is readable by the server while it is processed. A paste is stored as you sent it, with or without a password.
How a file is protected
How much we can see depends on how the file is uploaded.
With a password on the website: end-to-end encrypted
The file is encrypted in your browser with AES-256-GCM, using a key derived from your password with Argon2id. The password never leaves your device, and the page refuses passwords below 50 bits of entropy. We store ciphertext only and cannot recover the file if the password is lost. The same applies to the command line tool with -e. With the zero-knowledge option the server likewise does no processing of the content.
Without a password: encrypted by the server
The page shows a warning before such an upload. The server receives the file as it is, computes its hash, removes metadata where it can, scans it for malware and then stores it encrypted with AES-256-GCM. The server can read the file during this processing and whenever it is downloaded.
With a password sent through the API: checked by the server
A password field in an API upload is stored as a bcrypt hash and asked for again on download. The file itself is encrypted by the server as above. This is access control, not end-to-end encryption.
What we store for a file
The encrypted file
Its name, size and content type. The file name is stored readable in every mode, also for end-to-end encrypted files
Upload time, expiry, download limit, and counters for views and downloads
SHA-256 hashes of the file as received and as stored, for the blocklist and the transparency log
The result of the malware scan and of the file type check
The delete token, the note if you wrote one, and the password hash if a password was sent through the API
If you are logged in: a keyed hash of your Discord ID, so the file appears in your dashboard
Your IP address, in any form
Your password, or anything it could be derived from, for end-to-end encrypted files
Who downloaded the file
Malware scan and blocklist
Uploads are scanned with ClamAV, and a file can only be downloaded once its scan has finished. Infected files are removed. The SHA-256 of every upload is compared with a blocklist of known malicious or illegal content.
Files larger than 500 MB are not scanned.
For end-to-end encrypted files only the encrypted blob passes through the scanner and the blocklist. That catches files merely labelled as encrypted and reveals nothing about real ciphertext.
Scanning is best effort. A file marked clean can still be harmful. Download at your own risk.
Metadata removal
For files encrypted by the server, we remove metadata from the formats we can handle:
Images (JPEG, PNG, WebP): everything not needed to show the picture, including EXIF (GPS, camera, timestamps), XMP, IPTC, comments, embedded thumbnails and anything appended after the image, such as the video of a motion photo. The picture is not re-encoded and its rotation is kept.
PDF documents: author, title, subject, keywords and the creating software.
Other formats (GIF, TIFF, HEIC/AVIF, camera RAW, Word, Excel, MP3, MP4, ZIP and so on) are stored unchanged, including the files inside an archive.
Large files are stored unchanged: images over 25 MB and PDFs over 10 MB.
End-to-end encrypted files cannot be processed. Remove metadata yourself before uploading.
File size is not padded and can itself be identifying.
Pastes
Pastes created at tmp0.cc/paste or through the API are stored in our database until they expire (1 hour to 30 days), reach their view limit or are deleted. We store the content, language, title, line and character count, expiry, counters and the delete token.
The content is stored as you sent it and is readable by the server. Unlike files, pastes are not encrypted at rest.
A password on a paste is checked by the server. We store a bcrypt hash of it and ask for it before showing the paste. It does not encrypt the content, and five wrong attempts delete the paste.
For an end-to-end encrypted paste use the command line tool with -e. It encrypts before sending and we store ciphertext only. Such a paste is read back with the tool as well.
IP addresses and abuse protection
The server needs your IP address to answer you. It is not written to the database, and the following is all that is derived from it. All of it lives in memory and is gone after a restart.
Rate limiting: request counts per address, kept under a keyed hash (HMAC-SHA256 with a server secret) and dropped after minutes to hours of inactivity.
Failed attempts: wrong delete tokens and requests for IDs that do not exist are counted per hashed address for up to one hour. Too many lead to a block of 30 minutes to one hour.
Abuse score: failed API keys, rapid uploads, repeated identical uploads, scanning for IDs and rate limit hits add to a score per hashed address. Above a threshold the address is blocked for 15 minutes. The score is dropped after a few minutes without new findings.
Recognising bots: for clients that uploaded something or did something suspicious, the keyed hash is linked for at most 24 hours to their recent uploads (ID, size and a content fingerprint) and to failed or refused requests. Our team sees this under a pseudonym and can block that hash, also for longer, or remove what it uploaded. The address itself is never shown.
A keyed hash cannot be turned back into an address without the server's secret. It is still a pseudonym, not anonymity: while it exists, requests from the same address can be recognised as such.
Statistics and logs
Usage statistics
To run the service we record that something happened: an upload, a download, a paste, a page view, a login, a refused request. A record holds the kind of event, the time, a size where that applies, and one short label such as a file extension, a paste language, a route with every ID masked, or the name of a blog post. There is no field for an address, an account, a file name or any content. Records are kept for 400 days and are visible to our team only. Details are in this blog post.
Server log
The application keeps no web access log. Its operational log notes each upload with the file's ID, size, type and expiry, together with the first ten characters of the keyed hash of the uploader's address. It contains no IP addresses and no file names.
Transparency log
Every upload, download and deletion adds an entry to a signed, append-only log that anyone can check through the or at /verify.
Logged: the file's ID, the SHA-256 of the stored content, its size, whether it was encrypted in the browser, the kind of operation and the time
Not logged: IP addresses, user agents, file names, content, passwords
Entries stay in the log after the file is gone. That is what makes the log verifiable.
Someone who knows a file's hash or ID can therefore see when it was uploaded, downloaded and deleted. For an end-to-end encrypted file the hash is that of the ciphertext and says nothing about the original.
Cookies and browser storage
No cookie is set as long as you are not logged in.
Logging in with Discord sets one session cookie. It is not readable by scripts and is not sent with background requests made by other websites.
Your browser remembers your last upload settings (storage time and options) in its local storage, and holds a paste draft while you move between pages. Neither is sent to us.
Discord login (optional)
Logging in is voluntary and only adds a dashboard that lists what you shared while logged in. We ask Discord for basic identification and nothing else.
What we store:
A keyed hash of your Discord user ID (HMAC-SHA256). The ID itself is not stored
Username and avatar address, shown in your dashboard
The time of your first and of your last login
What we do not receive or store:
Your email address
Your friends, servers, messages or activity
Deleting the account: you can remove the connection in your dashboard at any time. That deletes the data above. Files and pastes you shared stay available until they expire but are no longer linked to you, and logging in again does not bring the link back. Delete them first if you want them gone.
Direct transfer
Direct transfer sends a file from one browser to another over an encrypted WebRTC connection. The file, its name, its size and its type never reach our server.
To connect the two browsers, our server passes connection details between them. These include the IP addresses of both sides. They are held in memory and discarded with the room, after ten minutes at most.
The other side learns your IP address. That is how a direct connection works.
Your browser asks STUN servers run by Google and Cloudflare for its public address. They see your IP address, not the transfer.
If no direct connection is possible, a relay (TURN) may carry the encrypted traffic. It cannot decrypt it.
Third parties
Scripts, styles, icons and fonts come from our own server. Loading a page sends no request to a CDN or font service, and our Content Security Policy makes browsers refuse scripts, styles and fonts from anywhere else. QR codes are generated in your browser.
The exceptions are named above: Discord, if you log in (including your profile picture from cdn.discordapp.com), and the STUN servers during a direct transfer. We do not sell or share data, and we use no outside processors for it.
What browser encryption depends on
End-to-end encryption in a browser relies on the JavaScript our server delivers. If the server were compromised, altered code could read a password before it is used. This is a limit of every browser-based encryption.
All of that code comes from our own server, so no third party can alter it. If you do not want to rely on it, use the command line tool, which encrypts locally and does not load code from the website.
Retention and deletion
Files and pastes are deleted when they expire (1 hour to 30 days), when their download or view limit is reached, after five wrong server-side passwords, or when you use the delete link.
The database entry is deleted together with the file. Files up to 50 MB are overwritten with random data first.
Every upload comes with a delete link containing a 32-character token. Anyone who has it can delete the file, so keep it private. We cannot restore what was deleted.
Entries in the transparency log and the usage statistics remain, as described above. Neither contains content, names or addresses.
No backups of your files. We keep no backups of uploaded files or pastes. A server failure can therefore lose them for good. If you need a file beyond its expiry, keep your own copy.
Limits of overwriting. On SSDs the drive itself may keep old blocks, so overwriting cannot be guaranteed at hardware level. What remains is ciphertext. For sensitive files use a password: without it, even recovered data cannot be decrypted.
Encryption keys
Files encrypted by the server each get their own key, derived with HKDF-SHA256 from a master key and a random salt stored with the file.
The master key is part of the server's configuration and is not stored with the files. Whoever holds both the key and the stored files can decrypt them. That includes us.
For end-to-end encrypted files none of this matters: the key is derived from your password in your browser and never reaches us.
Jurisdiction
Operating Jurisdiction: Iceland
tmp0.cc operates under Icelandic law. Iceland is a member of the European Economic Area (EEA), ensuring strong privacy protections equivalent to EU standards while benefiting from Iceland's robust legal framework for digital privacy and freedom of expression.
All legal matters, disputes, and data protection inquiries are governed exclusively by Icelandic law and subject to the jurisdiction of Icelandic courts.
GDPR and EEA data protection
As an EEA member state, Iceland has incorporated the General Data Protection Regulation (GDPR) into national law through the Icelandic Data Protection Act (Lög um persónuvernd og vinnslu persónuupplýsinga).
Data processing principles:
Lawful basis: Processing based on legitimate interest (service provision) and user consent (file upload action)
Data minimisation: We collect only data strictly necessary for service operation, as listed in this policy
Purpose limitation: Data is used for hosting, security and operating the service; never sold, shared, or used for profiling
Storage limitation: Automatic deletion after the expiry you choose (1 hour to 30 days)
No outside processors: We do not share personal data with third-party processors. All processing happens on our own infrastructure
Your rights:
Erasure: Use your delete link for immediate deletion, delete your Discord connection in the dashboard, or contact us
Access: Your file and its metadata are available through your share link; logged-in users can export their dashboard
Portability: Download your file at any time before it expires
Supervisory authority: Persónuvernd (Icelandic Data Protection Authority), personuvernd.is
Government and legal requests
We protect user privacy to the fullest extent permitted by law. Any government or law enforcement request for user data is subject to rigorous legal scrutiny.
Validity assessment: All requests are reviewed for legal validity under Icelandic law. Invalid or overly broad requests are rejected outright.
Jurisdictional challenge: Requests from non-Icelandic authorities must comply with applicable mutual legal assistance treaties (MLATs) and Icelandic procedural requirements.
Legal contest: We will challenge requests that we believe are unlawful, disproportionate, or infringe on fundamental rights. Legal challenges will be pursued through all available appellate channels.
Minimum disclosure: If legally compelled to comply, we provide only the specific data explicitly required by a valid court order, nothing more.
What we could hand over at all: for an end-to-end encrypted file, ciphertext and the metadata listed above, never the content, because we do not have the key. For a file or paste without a password, the content is within our reach while it exists.
Transparency report
We publish annual figures on the legal and takedown requests we receive.
Year
DMCA Requests
Government/Legal Requests
Data Disclosed
2025
0
0
0
2026
0
0
0
Last updated: February 2026 • Next update: January 2027
Contact
Questions about this policy or your data: privacy@tmp0.cc. How files are protected is summarised under .
Terms of Service
The rules for using tmp0.cc. Last updated November 2026.
1. Agreement
By using tmp0.cc, you agree to these Terms. If you don't agree, don't use the service.
2. The service
tmp0.cc stores files and text for a limited time and makes them available through a link. It can be used without an account. Logging in with Discord is optional and only adds a dashboard.
Files with a password set on the website are encrypted in your browser before upload. We cannot decrypt them, and we cannot recover them if the password is lost.
Files without a password are processed by the server (hash, metadata removal, malware scan) and then stored encrypted. The page warns you before such an upload.
Pastes are text and code shared at tmp0.cc/paste. They are stored as sent. A password on a paste restricts who can open it; it does not encrypt the content.
Direct transfer sends a file from one browser to another. Our server only helps the two browsers find each other and never receives the file.
The API and the command line tool offer the same functions to scripts. They are described in the .
What exactly is stored, and how files are protected, is set out in the and under . Those descriptions are part of how the service works, not a guarantee of a particular level of security.
3. Your responsibilities
You are responsible for everything you upload, paste or transfer, and for having the right to share it.
Don't use the service for anything illegal.
Don't try to get around rate limits, blocks, scans or other protective measures.
Keep your links, passwords and delete tokens safe. We cannot restore any of them.
4. Prohibited content
Child sexual abuse material (CSAM)
Non-consensual intimate imagery
Terrorist or violent extremist content
Malware, ransomware and other harmful software
Stolen data or credentials
Copyrighted material shared without authorisation
These rules apply to files, pastes and direct transfers alike. We may block, flag or remove any content that violates them, and block the client it came from.
5. Scanning and refused files
Uploads are scanned for malware and compared with a blocklist of known content. A file can only be downloaded once its scan has finished.
Programs, scripts, Office files with macros and disk images are refused.
The content of an end-to-end encrypted file cannot be scanned, and files over 500 MB are not scanned at all.
A direct transfer never passes through our server, so none of these checks apply to it. Receivers accept such files at their own risk.
6. Limits
Files: up to 2 GB each, kept for 1 hour to 30 days
Pastes: up to 10,000 lines or 500,000 characters each, kept for 1 hour to 30 days
Direct transfer: both sides must be online at the same time, a room expires ten minutes after it was created, and an interrupted transfer has to start again
Storage: the total space for files and for pastes is limited. When it is used up, new uploads are refused until space is free again
Requests: the number of uploads, downloads and lookups per minute is limited per client. The current figures are in the
7. Expiry and deletion
Files and pastes are deleted when they expire or when their download or view limit is reached.
Every upload comes with a secret delete link. Anyone who has it can delete the file or paste.
Five wrong passwords delete a file or paste whose password is checked by the server. An end-to-end encrypted file is unlocked in your browser, where the server cannot count attempts.
Deleted and expired content cannot be recovered. We keep no backups of it.
8. Abuse prevention
We limit requests per client, count failed attempts and watch for patterns of automated abuse, such as rapid or repeated uploads and scanning for links. A client that trips these measures is blocked temporarily, and our team may block it for longer and remove what it uploaded. How this works without storing IP addresses is described in the .
9. Age Requirement
You must be at least 13 years old to use this service. If you are under 18, you should have parental consent.
10. Service Availability
We do not guarantee uninterrupted service. The service may be modified or discontinued at any time without notice.
11. Disclaimer of Warranties
THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED.
We make no warranties regarding reliability, accuracy, availability, security, or fitness for any particular purpose. We do not warrant that files are virus-free, safe, legal, or free from harmful content.
12. Limitation of Liability
YOU USE THIS SERVICE AND DOWNLOAD FILES ENTIRELY AT YOUR OWN RISK.
We are NOT liable for any damages, losses, or harm caused by files downloaded from this service
We are NOT liable for viruses, malware, ransomware, or any malicious content
We are NOT liable for copyright infringement by users
We are NOT liable for data loss, corruption, or unauthorized access
We are NOT liable for any direct, indirect, incidental, consequential, or punitive damages
We are NOT liable for any illegal content uploaded by users
In no event shall we be liable for any claims, damages, or losses exceeding the amount you paid to use the service (which is zero).
13. User-Generated Content
We are a neutral hosting platform. We do not control, endorse, or take responsibility for any content uploaded by users. Users are solely responsible for their uploads.
Our only commitment is to review and remove content upon receiving valid abuse reports or legal requests (DMCA, law enforcement, etc.).
14. Indemnification
You agree to indemnify, defend, and hold harmless the service operator from any claims, damages, losses, or expenses (including legal fees) arising from your use of the service, your uploaded content, or your violation of these terms.
15. Safe Harbor
As a hosting provider, we operate under applicable safe harbor provisions (such as DMCA Section 512). We respond to valid takedown requests but bear no liability for user-uploaded content. How to report content is described under .
16. Changes to Terms
We may update these terms at any time. Continued use of the service constitutes acceptance of any changes.
17. Governing Law & Jurisdiction
Icelandic Law
These Terms of Service are governed exclusively by the laws of Iceland. Any disputes arising from or relating to these terms, the service, or your use thereof shall be subject to the exclusive jurisdiction of the courts of Iceland.
Iceland is a member of the European Economic Area (EEA), providing strong legal protections for privacy and data protection under GDPR-equivalent standards.
Type: Privacy-focused hosting service (non-commercial)
Jurisdiction: Iceland (EEA member state)
Legal Structure
Service Model
tmp0.cc operates as a privacy-focused file hosting service. All uploads are temporary and auto-delete based on the configured retention period (1 hour to 30 days).
Applicable Law
EU General Data Protection Regulation (GDPR), ePrivacy Directive, Digital Services Act (DSA), DMCA Safe Harbor (Section 512). All disputes subject to Icelandic jurisdiction.
Content Responsibility
As a hosting provider, we are not responsible for user-uploaded content under applicable safe harbor provisions. We respond to valid takedown requests within 24 hours.
For all contact channels (support, legal, abuse, privacy, security), see:
File and paste IDs are 12 letters and digits. A delete token is 32. The delete token is returned once, when the file or paste is created, and cannot be looked up later.
Expiry
1h, 6h, 12h, 1d, 3d, 7d, 14d or 30d. The default is 7d, and a value that is not recognised falls back to it instead of failing.
Passwords
A password sent to the API is checked by the server and stored as a hash; it may be up to 72 bytes long. Five wrong attempts delete the file or paste. For end-to-end encryption, encrypt before you upload, as the does with -e.
Timestamps
expiresAt on files and pastes is the server's local time without a UTC offset. Signed links and the transparency log use UTC.
API keys
Send X-API-Key with POST /v1/upload to raise the limit from 10 to 30 uploads a minute (200 an hour). Keys are issued by us on request, see . A key that is not valid is answered with 401, never treated as anonymous.
Browsers
The API is made for scripts, servers and tools. It sends no CORS headers, and a request from another website that changes something is refused with 403.
Timing
Lookups, deletions and refused downloads take at least 200 ms, so the timing does not reveal whether an ID exists.
Files
Upload a file, read its status, download it and delete it. Every stored file is encrypted at rest and removed when it expires or reaches its download limit.
POST/v1/uploadUpload a file
Send multipart/form-data. Only file is required.
Field
Type
Description
filerequired
file
The file, up to 2 GB.
expires
string
How long to keep it. Default 7d.
maxDownloads
integer
Delete after this many downloads. At least 1; unlimited when left out.
burnAfterReading
boolean
Delete after the first download.
password
string
Required again to download. Up to 72 bytes.
note
string
Shown to the recipient on the download page. Cut off after 500 characters.
clientEncrypted
boolean
The file is already encrypted in the tmp0 end-to-end format. The download page then asks for the password and decrypts in the browser. Parameters: GET /v1/crypto/manifest.
fullUrl is the page to share. sha256 is the hash of the bytes as the server received them. directDownloadUrl answers to POST, not GET.
Refused with 400: empty files, programs and scripts (.exe, .msi, .bat, .sh, .js, .jar, Office files with macros, disk images and similar, also as a double extension or recognised by content), and files on the hash blocklist.
GET/file/{id}/infoStatus, expiry and counters
Always answers 200. A file that does not exist, has expired or has used up its downloads comes back as "available": false with a message. Fields without a value are left out.
scanStatus is PENDING, CLEAN, INFECTED, ERROR or SKIPPED. Files encrypted before upload cannot be scanned. After 15 requests for IDs that do not exist, an address is locked out of this route for 30 minutes.
GET/v2/files/{id}The same, with 404 for missing files
Returns 404 with { "success": false, "error": "…" } when the file is not available, which is easier to handle in a script. On success every field is present; text fields without a value are empty strings and maxDownloads is 0 for unlimited.
Answers with the file itself and a Content-Disposition header carrying its name. The request counts as a download: it uses up one of maxDownloads and destroys a burn-after-reading file. For a protected file, send password as a form field.
$ curl -X POST -OJ https://tmp0.cc/api/file/a1B2c3D4e5F6/download
$ curl -X POST -OJ -d "password=correct horse" \
https://tmp0.cc/api/file/a1B2c3D4e5F6/download
Status
Meaning
400
Not found, expired, download limit reached, blocked, or a password is required and none was sent. The reason is in error.
401
Wrong password. remainingAttempts says how many are left.
409
The malware scan has not finished. Try again after the seconds in Retry-After.
410
The fifth wrong password deleted the file.
A file that was encrypted before upload is sent as it was stored. Decrypting it is up to the client.
DELETE/file/{id}?token={deleteToken}Delete before it expires
A wrong token is answered with 403 and remainingAttempts. After ten wrong tokens the address is blocked from deleting for an hour (429).
GET/file/{id}/previewInline preview of an image
Returns the image for PNG, JPEG, GIF, WebP and SVG files that have no password, and 404 for everything else. It does not count as a download and supports ETag / If-None-Match.
Pastes
Text and code with syntax highlighting. A paste holds up to 10,000 lines or 500,000 characters.
POST/snippet/createCreate a paste from text or JSON
With Content-Type: text/plain the body is the paste and the options are query parameters, which suits a pipe. With application/json the same options go into the body, next to content.
Option
Type
Description
contentrequired
string
JSON only. With text/plain it is the request body.
language
string
For highlighting, such as python, go, json or bash. Detected from the content when left out.
autoDetect
boolean
Default true. Set false to store a paste without a language as plain text.
title
string
Shown above the paste. A file name here also helps detection.
Each GET counts as a view and uses up a burn-after-reading paste. HEAD on the same address only says whether the paste exists (200 or 404) and counts nothing. Errors on this route are plain text: 401 for a wrong password, 410 once the fifth wrong password has deleted the paste.
POST/snippet/{id}/contentThe paste as JSON, with its metadata
Takes password as a form field or query parameter when the paste is protected. Counts as a view, like /raw.
DELETE/snippet/{id}?token={deleteToken}Delete a paste
Works like deleting a file: 200 with "success": true, 403 with remainingAttempts for a wrong token.
Direct upload
Two steps instead of one: announce the upload, then send the raw bytes to a single-use address. The body is streamed to disk without multipart encoding, and the address can be handed to another machine, which then needs nothing but the URL.
POST/v2/presignReserve an upload address
Field
Type
Description
fileNamerequired
string
Name the file is stored and offered under. Up to 255 characters.
fileSize
integer
Size in bytes. Refused right away if it is over the limit.
JSON types are strict: a number in quotes or "true" as a string is answered with 400. Reserving counts against the upload limit; the upload itself does not. A server-side password cannot be set on this route.
PUT/v2/upload/direct/{token}Send the file
Send the bytes with Content-Type: application/octet-stream. Alternatively, POST to the same address as multipart/form-data with a part named file.
The address works once and for 30 minutes. An upload that fails gives it back, up to three attempts in total. 404 means unknown or already used, 410 expired, 413 larger than 2 GB.
Signed download links
A plain GET address for a file, signed with HMAC-SHA256, that expires by itself. Useful wherever a POST is impractical: wget, a build script, a link in a message. Files with a password cannot be served this way.
POST/v1/signed/generateCreate a signed link
Field
Type
Description
fileIdrequired
string
The file to link to.
ttl
integer
Lifetime in seconds, from 1 to 604800 (7 days). Default 3600.
oneTimeUse
boolean
The link works for one download.
ipBinding
boolean
The link works only from the address that requested it.
downloadCount, maxDownloads (-1 for unlimited), timestamp
maxReached
The download limit is used up.
message
expiring
Every 30 seconds during the last hour.
minutesRemaining
deleted
The file is deleted. The stream ends.
reason, timestamp
unavailable
The file expired or is gone. The stream ends.
reason
error
The subscription was refused. The stream ends.
error
A keepalive comment is written every 30 seconds. A stream is closed after 30 minutes; reconnect to keep watching. One address may hold five streams at a time.
Verification
Every upload, download and deletion is recorded in an append-only, signed log that contains hashes only. These routes let anyone check a file against it, and read how files are encrypted. They are read-only and need nothing but a file ID.
Endpoint
Returns
GET /v1/transparency/verify/{id}
Whether the file's log entry and its signature check out: valid, message, logId, merkleRoot, timestamp, signature.
GET /v1/transparency/log/{id}
The latest entry for a file: operationType, contentHash, entryHash, merkleRoot, treeSize, totalEntries. 404 if there is none.
GET /v1/transparency/verify/entry/{logId}
The check for a single entry, with its previousHash.
GET /v1/transparency/sth
The signed tree head: treeSize, merkleRoot, timestamp, signature.
GET /v1/transparency/public-log?limit=50
The most recent entries, at most 100.
GET /v1/transparency/stats
Entries per operation, tree size and current root.
GET /v1/crypto/manifest
The algorithms and parameters in use, for end-to-end and at-rest encryption.
GET /v1/crypto/manifest/{id}
The same for one file, with a badgeHash over the answer.
POST /v1/crypto/verify-badge
Body { "fileId", "badgeHash" }. Says whether a badge hash seen earlier still matches the file.
The verify routes answer 200 with "valid": false when there is nothing to verify. The same checks have a page of their own at /verify.
Service information
GET /v2/config
Limits and features as the server enforces them: maxFileSize, storageTimes, features, endpoints. Read this instead of hard-coding the values.
GET /storage/status
Storage in bytes: used, limit, available, usedPercent.
GET /v2/stream/status
Open event streams: activeConnections, trackedFiles, status.
Rate limits
Limits are counted per IP address and refill continuously over a minute. An address is never stored; it is counted as a keyed hash that is forgotten within hours.
What
Limit
Applies to
File uploads
10 / min
POST /v1/upload, POST /v2/presign
File uploads with a key
30 / min, 200 / h
POST /v1/upload with X-API-Key, counted per key
Pastes
5 / min
POST /snippet/create
Downloads and reads
60 / min
File downloads, signed downloads, /raw, /content
Downloads of one file
50 / min
Counted per file, across all addresses
Metadata
30 / min
File and paste info, /v2/files, previews, opening an event stream, ShareX configs
Over the limit, the answer is 429. Uploads, pastes and the verification routes add Retry-After in seconds; uploads and pastes also send X-RateLimit-Limit and X-RateLimit-Remaining. Wait for the time given instead of retrying at once: an address that keeps running into the upload limit, or sends wrong API keys, is blocked for a while.
Errors
Errors use HTTP status codes and a JSON body with a readable error. The upload, paste and /v2 routes add "success": false.
{ "success": false, "error": "maxDownloads must be at least 1.", "statusCode": 400 }
Status
Meaning
400
The request cannot be carried out: a missing or malformed field, a file type that is not accepted, a file that has expired. Read error.
401
Wrong password for a file or paste, or an API key that is not valid.
403
Wrong delete token, a signed link that does not verify, or a request sent by another website.
404
No such file, entry or upload address. The older /file and /snippet info routes answer 200 with "available": false instead.
409
The file is still being scanned for malware. Retry after Retry-After.
410
Gone for good: deleted after five wrong passwords, a one-time link already used, or an upload address that expired.
413
The body is too large: 2 GB for uploads, 4 MB for everything else.
429
Too many requests, or too many failed attempts.
Tools
Two ready-made clients for the routes above.
ShareX
Import a custom uploader for screenshots, files and text. Uploads are kept for 30 days.
For other defaults, fetch a config from /v1/sharex-config or /v1/sharex-text-config with ?expires=1d or &burnAfterReading=true.
Command line
A Node script that uploads, downloads and verifies, and can encrypt end-to-end before anything leaves your machine.
Commands: upload, download, paste, paste-get, info, verify, delete, manifest. Add -j for JSON output and --help for the options of each.
Security
How your files are protected.
Encryption
When you set a password, the file is encrypted in your browser before upload using AES-256-GCM with an Argon2id-derived key. The password is never transmitted, so we cannot read the file or recover it if you lose the password. Files uploaded without a password are still encrypted at rest with AES-256-GCM.
What we store
Only what the service needs: the encrypted file, its size and type, the expiry date and a counter. No IP addresses are kept in plain form — they are hashed with a keyed HMAC for rate limiting and expire within hours.
Deletion
Expired files are removed automatically every few minutes, and files up to 50 MB are overwritten on disk first. Burn-after-reading destroys a file the moment it has been downloaded once. You can delete anything early with the delete link you receive on upload.
Abuse protection
Uploads that the server can read are scanned for malware and checked against a hash blocklist. Rate limits apply per IP address. Files you encrypt yourself are opaque to us, so their contents cannot be scanned.