Developers
Send and receive files straight from your terminal or your own scripts — with the exact same zero-storage, end-to-end encryption as the website. Great for servers, CI/CD, backups, and automation. Available on the Ultimate plan.
Zero-storage still applies: files always move directly between two devices. There is no “upload a file, get a link” endpoint — a transfer is run by the CLI (or the browser), never by our servers.
An API key is how the CLI and scripts prove they’re acting for your account, so your plan’s limits and transfer history apply.
A key starts with d2p_. It can transfer files and read your history — it can never change billing or account settings, and it can’t create or revoke other keys.
drop2p is a real Drop2p peer for your terminal. It streams files directly to the other device, encrypted end to end — no size ceiling, nothing stored.
The quickest way — a standalone binary, no Node toolchain required. Homebrew (macOS & Linux):
brew install webdeviant/drop2p/drop2p
drop2p --versionPrefer a direct download? Grab the archive for your platform from the latest release (macOS, Linux, Windows). Or, if you already have Node.js 20+, install from npm:
npm install -g @drop2p/cli
drop2p --versionPoint the CLI at your key. For a one-off or a script, set an environment variable:
export DROP2P_API_KEY="d2p_your_key_here"Or save it once so you don’t have to set it each time:
drop2p login --key d2p_your_key_here # stored in ~/.config/drop2p/config.json
drop2p whoami # confirms your email + planYou can also use the CLI without a key — it just falls back to free-tier limits.
drop2p send ./big-video.mp4It connects, prints a short share code (and a QR code), and waits. Keep the terminal open until it says it’s done.
On the other device, run with the code you were given:
drop2p receive 8QVY-Q9MZ4P # saves into the current folder
drop2p receive 8QVY-Q9MZ4P --out ~/DownloadsLayer a second, password-derived encryption on top of the code. The receiver needs the same passphrase to open the file.
drop2p send ./contract.pdf --password "correct horse battery staple"
drop2p receive <code> --password "correct horse battery staple"Pass --json for machine-readable output; exit code 0 means success, non-zero means failure. Everything can come from the environment, so no login step is needed:
DROP2P_API_KEY="d2p_…" drop2p send ./build.tar.gz --jsondrop2p send <file> [--password X] [--out-code-only] [--json]
drop2p receive <code> [--out DIR] [--password X] [--json]
drop2p login [--key d2p_…] | [--email [email protected] --password ••••]
drop2p whoami | logout
drop2p keys (create <name> | list | revoke <id>) # needs an email/password login
drop2p history [--limit N] [--json]
drop2p --version | --helpFor your own integrations, call the API directly. Base URL https://api.drop2p.com. The full surface is described by an OpenAPI 3.1 spec, and every /v1 response carries RateLimit-* headers. Authenticate every request with your key:
Authorization: Bearer d2p_your_key_herecurl -H "Authorization: Bearer d2p_…" https://api.drop2p.com/v1/meRecent transfers (metadata only — size, direction, status, time; never filenames):
curl -H "Authorization: Bearer d2p_…" https://api.drop2p.com/v1/historyBecause Drop2p stores nothing, there’s no endpoint to upload a file or fetch one by URL. The actual transfer happens peer-to-peer and is driven by the CLI or the browser. Managing keys (create / revoke) is also intentionally not available to an API key — do that on the account page (so a leaked key can’t mint more keys).