GhostDrop

drop files or click to browse

max 100MB per file · multiple files make a folder link

up to 12 hours
uploaded
link
expires
6h 0m
GhostDrop
quick share

Paste text

Write something and get a short paste ID.

developer

API Reference

Base URL: https://api.ghostdrop.qzz.io  ·  No account auth  ·  Passwords protect individual resources  ·  CORS open
GET /health/ health check

Returns the server information about the server such as the amount of files present the uptime the ram and cpu usage

// 200 OK { "files_stored": 1, "cpu_usage": "6.9%", "memory_usage": "63.9%", "uptime": "31.02 seconds" }
POST /paste/add create a text paste

Creates a text paste and returns a shareable link. Paste data is stored as UTF-8 text. A custom slug can be used instead of the generated six-character ID.

fieldtyperequireddescription
datastringyestext content to store
slugstringnocustom ID with letters, numbers, hyphens, or underscores
passwordstringnooptional password; stored server-side as a hash
curl -X POST "https://link.ghostdrop.qzz.io/paste/add" \ -H "Content-Type: application/json" \ -d '{"data":"hello from GhostDrop","slug":"hello","password":"my-secret"}'
// 200 OK { "id": "hello", "has_password": true } share link: https://link.ghostdrop.qzz.io/paste/hello
400 { "error": "Request body must contain a string 'data' field" } 409 { "error": "Paste slug already exists" } 500 { "error": "Failed to create paste" }
GET /paste/{paste_id} view paste page

Returns the HTML paste viewer. Unprotected pastes display immediately. Password-protected pastes show a password form and load their contents after authentication.

curl "https://link.ghostdrop.qzz.io/paste/{paste_id}"
200 HTML paste viewer 404 { "error": "Paste not found" }
GET /paste/{paste_id}/raw read paste text

Returns the raw UTF-8 paste contents. Password-protected pastes require the X-Paste-Password header. A password can also be supplied as the password query parameter, although the header is recommended because query strings may be logged.

curl "https://link.ghostdrop.qzz.io/paste/{paste_id}/raw" \ -H "X-Paste-Password: my-secret"
200 raw text content 401 { "error": "Paste password required" } 404 { "error": "Paste not found" } 500 { "error": "Failed to read paste" }
POST /upload/ upload a file

Accepts multipart/form-data with a single file field. Returns a short file ID (either a 6-character random string or your custom slug) and expiry metadata.

Warning: API file uploads are limited to ~4.5 MB. Larger files will be rejected.

fieldtyperequireddescription
filefileyesthe file to upload
slugformnocustom identifier (2+ chars, only letters/numbers/hyphens/underscores). Must not be a reserved slug (see below).
passwordformnooptional file password for protected downloads
durationformnoretention length from 1 to 12 hours, 1 to 6 days, or 1 to 3 weeks (defaults to 6 hours)
duration_unitformnohours, days, or weeks

Reserved slugs — these cannot be used: upload, download, delete, health, files, metadata, api, admin, static, assets, public, docs, openapi, redoc, www, root, system, config, help, status

curl -X POST "https://link.ghostdrop.qzz.io/upload/" \ -F "[email protected]" \ -F "slug=my-file" \ -F "password=my-secret" \ -F "duration=3" \ -F "duration_unit=days"
// 200 OK { "id": "my-file", "original_name": "example.txt", "expires_in_hours": 72, "duration": 3, "duration_unit": "days" }
400 { "detail": "Slug can only contain letters, numbers, hyphens and underscores" } 400 { "detail": "That slug is reserved and cannot be used" } 400 { "detail": "Slug must be at least 2 characters long" } 409 { "detail": "Slug already in use" } 413 { "detail": "File too large" }
GET /files/{file_id} download a file

Downloads a file by ID (either a custom slug or a short random string). Serves the original filename. If the file is password protected, send the password header or the API returns 401. If expired, deletes and returns 410.

paramindescription
file_idpaththe ID or slug returned from POST /upload/
passwordheaderrequired only for protected files
curl -O -J "https://link.ghostdrop.qzz.io/files/{file_id}" \ -H "password: my-secret"
200 binary file stream 401 { "error": "Unauthorized" } 404 { "error": "File not found" } 410 { "error": "this file is gone" } 500 { "error": "Internal server error" }
GET /metadata/{file_id} fetch file metadata

Fetches metadata for an uploaded file by ID (slug or random string). Returns the original filename, expiry timestamp, current view count, and whether a password is required.

paramindescription
file_idpaththe ID or slug from POST /upload/
curl "https://link.ghostdrop.qzz.io/metadata/{file_id}"
// 200 OK { "original_name": "example.txt", "expires_at": "2026-04-20T18:30:00+00:00", "views": 3, "has_password": true }
404 { "detail": "File not found" } 410 { "error": "this file is gone" }
DELETE /delete/{file_id} delete a file

Self-hosted only. This endpoint is not available on the public GhostDrop instance. It only works on your own deployment.

Deletes an uploaded file and its metadata by ID. If the file is password protected, the correct password must be sent as a header.

paramindescription
file_idpaththe ID or slug from POST /upload/
passwordheaderrequired only for protected files
curl -X DELETE "https://your-instance/delete/{file_id}" \ -H "password: my-secret"
200 { "message": "File deleted" } 401 { "detail": "Unauthorized" } 404 { "detail": "File not found" } 410 { "detail": "this file is gone" }
camera

Scan a GhostDrop QR

Point your camera at a GhostDrop QR code. Only links from link.ghostdrop.qzz.io will open. Anything else is treated as invalid.

Allow camera access or tap start camera to begin scanning.
release notes

Changelog

All notable changes after v1.2 are listed here in reverse chronological order.

Updated May 22, 2026

v1.4 — Custom Slugs & Password Protection

Custom upload identifiers, password-protected files, Docker support, and a rebuilt download page.

1c7de9eHEAD

Added

  • Custom slug support — upload with a user-chosen identifier; validated server-side with reserved slug protection.
  • Password-protected uploads — optional file passwords hashed with Argon2; prompted on download.
  • File metadata on the download page — displays original name, size, view count, and remaining expiry time.
  • Discord embed support — shared file links show rich previews with file name, size, and expiry.
  • \
  • Share popup UI — dedicated modal with direct link, QR code, and NFC share actions.
  • Client download page with Windows installer script (install.ps1) and Android APK support.
  • Debug overlay (GHOSTDROP_DEBUG_UI) — developer panel with real-time frontend event logging.
  • Dockerfile for self-hosted deployment.

Changed

  • Download page overhaul — complete redesign showing file metadata (name, size, views, expiry) with smoother animations.
  • Slug input now validates in real time with inline error messages.
  • Upload error handling uses distinct HTTP status codes (400, 409, 413) with frontend-specific toasts and inline feedback.
  • Metadata structure updated with views counter and size bytes for embed descriptions.
  • Backend server URL resolution fixed to avoid leaking the dev server in production.

Fixed

  • Slug parameter mismatch — backend was reading from headers while frontend sent it as form data; corrected to Form().
  • File overwrite with duplicate slugs — uploading an existing slug now returns HTTP 409 instead of silently replacing the file.
  • Broken Docker build due to incorrect dependency file path.
  • Various slug validation edge cases — format, length, and reserved word checks.

2026-05-01

Desktop navigation ergonomics update.

5657138

Added

  • Added a draggable desktop nav handle with direction-aware motion and release settling.
  • Added an active-state indicator for sidebar navigation.

2026-04-30

Sharing improvements and mobile download fix.

90ff0f1 3a056e2

Changed

  • Expanded share actions for supported mobile and native environments, with better share button visibility rules.

Fixed

  • Fixed the mobile download link visibility issue.

2026-04-29

Upload flow hardening and search indexing setup.

b7b8d80 0b06897

Added

  • Added Google Analytics to the public landing page.
  • Added sitemap.xml and robots.txt support for search indexing and crawler control.

Changed

  • Improved upload validation around file-size limits and cleaned up the upload result flow.
  • Added share functionality for the upload result flow.
legal

Terms of Service

These Terms apply to GhostDrop, the GhostDrop website and API, the GhostClient Windows uploader, GhostBot for Discord, and related share pages or integrations. By using any of them, you agree to these Terms.

1. Acceptance and scope

If you do not agree to these Terms, do not access or use GhostDrop or its related tools. If you use GhostBot on behalf of a Discord server, team, or organization, you represent that you are authorized to do so.

2. What the tools do

GhostDrop is a lightweight file-sharing service that accepts uploads, assigns file IDs or custom slugs, and makes files available for a limited time. In the default configuration, files are intended to expire automatically after about 6 hours. GhostClient can upload local files from Windows and copy share links to your clipboard. GhostBot can upload Discord attachments to GhostDrop, fetch GhostDrop metadata, and send GhostDrop files back into Discord.

3. Third-party platforms and dependencies

Your use of these tools may also be subject to the terms, privacy notices, and technical controls of third-party services and platforms, including Discord, GitHub, hosting providers, analytics providers, QR code providers, and your operating system. Running GhostClient may download an executable and register a Windows context-menu entry. Using GhostBot requires a Discord bot integration and remains subject to Discord's platform rules.

4. Your content and responsibilities

You retain responsibility for any file, text, password, slug, or other material you submit. You represent that you have the necessary rights and permissions to upload, transfer, or share that content, including where it contains personal data, confidential information, or third-party intellectual property.

5. Acceptable use

You may not use GhostDrop, GhostClient, or GhostBot to upload, distribute, request, automate, or facilitate:

6. Links, passwords, and sensitive data

GhostDrop links function like bearer links: anyone with the link may be able to reach the file. Password protection, where supported, adds another layer but is not a guarantee of secrecy. Do not treat GhostDrop as a backup service, long-term archive, or a suitable place for extremely sensitive data without your own safeguards.

7. Availability and changes

We may change, rate-limit, suspend, or discontinue any part of GhostDrop, GhostClient, GhostBot, or related endpoints at any time. Files may expire earlier than expected, integrations may fail, and features may differ across clients or deployments.

8. Enforcement and removal

We may delete content, disable links, block access, revoke integrations, or investigate misuse at any time to address abuse, legal requests, security incidents, platform-policy concerns, or operational needs.

9. Disclaimer of warranties

GhostDrop and related tools are provided "as is" and "as available" without warranties of any kind, express or implied, including any warranty of availability, fitness for a particular purpose, confidentiality, or non-infringement.

10. Limitation of liability

To the maximum extent permitted by law, GhostDrop and its operators will not be liable for any indirect, incidental, special, consequential, or punitive damages, or for any loss of data, profits, business, goodwill, or access arising from or related to use of the service or tools.

11. Changes and contact

We may update these Terms from time to time. The version posted here is the current version. Questions about these Terms can be directed to the project repository or project contact channels listed there.

Last updated: May 24, 2026 · GhostDrop Terms of Service
legal

Privacy Policy

GhostDrop is designed to collect as little as practical, but GhostDrop and its related tools still process files, metadata, technical logs, and some third-party platform data to operate uploads, downloads, sharing, and integrations.

Scope

This Privacy Policy covers the GhostDrop website and API, the GhostClient Windows uploader, GhostBot for Discord, and related share pages or integrations that link to this policy.

What GhostDrop stores temporarily

When you upload a file, GhostDrop stores the file contents under a short file ID or custom slug together with metadata such as the original filename, file size, expiry timestamp, view count, and whether password protection is enabled. In the default configuration, uploaded files and their metadata are intended to be automatically deleted after about 6 hours, or sooner if removed.

Passwords and protected files

When password protection is accepted by the GhostDrop API, the service stores a derived Argon2 password hash so later download requests can be verified. The plaintext password is not intended to be retained by the core service after upload, although it may still pass through the client, bot, browser, operating system, or network stack that you use.

Website usage, cookies, and device permissions

The public website may set a small functional cookie, such as to remember dismissed release notes. The landing page also currently loads Google Analytics, which may collect standard analytics data such as page views, device or browser information, and related telemetry under Google's policies. If you use camera-based QR scanning, NFC, clipboard, or native share features, your browser or device may request those permissions and process data locally to perform the requested action.

GhostClient-specific processing

GhostClient reads the file you choose on your Windows device, uploads that file and its filename to GhostDrop, fetches the current API base URL from the GhostDrop GitHub repository, and copies the resulting share link to your clipboard. Its installer downloads an executable to your local app-data directory and writes per-user Windows registry entries to add a context-menu action.

GhostBot-specific processing

GhostBot processes slash-command inputs, Discord attachment metadata, Discord-hosted file URLs, and the files or metadata needed to complete commands such as /drop, /peek, /health, and /get. When you use /drop, the bot fetches the attachment from Discord and uploads it to GhostDrop. When you use /get, the bot downloads a GhostDrop file and re-sends it into Discord. Some responses are marked ephemeral in Discord, but Discord still processes the interaction under its own policies.

Third-party services

Depending on how you use GhostDrop, information may also be processed by third parties such as Discord, GitHub, Google Analytics, QR-code providers, your hosting provider, CDN, reverse proxy, or operating system. For example, the share popup can request a QR image from api.qrserver.com, which receives the file link embedded in that QR request.

What we generally do not require

File access

Files may be reachable by anyone who has the valid file link or ID. If a file is password protected, the password is intended to be required before download. Treat file links, IDs, slugs, and passwords as sensitive secrets, and assume that anything you deliberately send through Discord or other third-party services is also subject to those services' processing.

Server logs

The service may generate standard HTTP and application logs during normal operation, which can include IP addresses, request paths, response status codes, timestamps, user-agent details, and operational error data. Log retention depends on deployment, hosting, reverse-proxy, and infrastructure settings.

Retention

GhostDrop file retention is intended to be temporary, but logs, analytics records, Discord-side data, GitHub-side requests, and other third-party records may persist longer according to the policies and infrastructure of those services.

Security

Password hashes are designed to reduce exposure of stored passwords, but files are not encrypted at rest in the default GhostDrop configuration. Transport security, access control, hosting isolation, and log retention depend on your deployment and third-party infrastructure. Do not rely on GhostDrop or its related tools as your only safeguard for highly sensitive information.

Children's privacy

GhostDrop, GhostClient, and GhostBot are not directed to children under 13, and we do not knowingly design these tools to solicit data from children.

Changes

We may update this policy at any time. The current version is always available here.

Contact

Questions about this policy can be directed to the project repository.

Last updated: May 24, 2026 · GhostDrop Privacy Policy