Getting Started
dropd. is a file and paste sharing tool. Drag a file onto the homepage, or type/paste text - you get a short link immediately. No account required.
Supported content: text and code, images, video, 3D models, and most binary files. Each upload gets a unique ID and its own viewer page.
Sharing
After uploading, you get a share link. Send it to anyone - no account needed to view. The viewer page renders the content and shows the QR code.
You can also embed any paste directly on another site using the embed link shown on the paste page. See Embedding below.
Embedding
Once you upload something to dropd., you can drop it straight into your own site or blog. No one needs to click away. Here are the three most common cases.
Text & Code
Paste any text directly, or drop a code file. dropd. maps file extensions to syntax highlighting languages automatically.
| Extensions | Language |
|---|---|
| .py | Python |
| .js .mjs .cjs .jsx | JavaScript |
| .ts .tsx | TypeScript |
| .php | PHP |
| .rb | Ruby |
| .go | Go |
| .rs | Rust |
| .c .h | C |
| .cpp .cc .cxx .hpp | C++ |
| .java | Java |
| .cs | C# |
| .sh .bash .zsh .fish | Bash |
| .ps1 .psm1 .psd1 | PowerShell |
| .sql | SQL |
| .json | JSON |
| .yaml .yml | YAML |
| .xml | XML |
| .css .scss .sass | CSS / SCSS |
| .md | Markdown |
| .toml .ini .env | TOML / INI |
| .diff .patch | Diff |
| .dockerfile | Dockerfile |
Code files dropped directly are auto-detected and stored as text pastes when under 1 MB.
Images
Images are displayed inline in the viewer and embed. SVG files are supported and rendered in the browser directly.
| Format | Extension | Max size |
|---|---|---|
| JPEG | .jpg .jpeg | 20 MB |
| PNG | .png | 20 MB |
| GIF | .gif | 20 MB |
| WebP | .webp | 20 MB |
| SVG | .svg | 20 MB |
Video
Video files play directly in the browser viewer using the native HTML5 player. No transcoding is done - the file is served as-is, so browser codec support applies.
| Format | Extension | Max size |
|---|---|---|
| MP4 (H.264/H.265) | .mp4 | 50 MB |
| WebM | .webm | 50 MB |
| QuickTime | .mov | 50 MB |
| Ogg Video | .ogv | 50 MB |
3D Models
3D model files open in an interactive WebGL viewer with orbit controls. You can rotate, pan, and zoom. The viewer supports both binary and ASCII variants of each format.
| Format | Extension | Max size |
|---|---|---|
| STL | .stl | 50 MB |
| OBJ | .obj | 50 MB |
| glTF Binary | .glb | 50 MB |
| glTF JSON | .gltf | 50 MB |
| PLY | .ply | 50 MB |
| 3MF | .3mf | 50 MB |
Binary Files
Any file with an extension that isn't a recognised image, video, or 3D model is stored as a binary and offered as a download. HTML files are excluded - paste HTML as text instead.
Max size: 50 MB. The file must have an extension.
QR Codes
Every paste page includes a QR code. By default the QR is branded - teal dots with the dropd. logo in the centre.
Accounts on plans with the custom QR flag get a plain, unbranded QR instead. You can download the QR as PNG (high-res) or SVG from the viewer sidebar.
Plans & Limits
See the Pricing page for a full breakdown. The main limits that vary by plan:
| Feature | No account | Free | Paid |
|---|---|---|---|
| Text pastes | ✓ | ✓ | ✓ |
| Image uploads | ✓ | ✓ | ✓ |
| Video & 3D models | - | ✓ | ✓ |
| Binary file uploads | - | - | ✓ |
| API access | - | - | ✓ |
| Analytics | - | Basic | Full |
| Custom QR (unbranded) | - | - | ✓ |
| Retention | Limited | Extended | Unlimited |
API - Authentication
API access requires a paid plan. Generate your key from Settings.
Include your key in every request as a header. Either form is accepted:
X-Api-Key: YOUR_KEY
Authorization: Bearer YOUR_KEY
Base URL
https://dropd.link/api/v1
API - Endpoints
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /api/v1/paste | Required | Create a text paste or upload a file |
| GET | /api/v1/paste/{id} | No | Get paste details and content |
| DELETE | /api/v1/paste/{id} | Required | Delete one of your pastes |
| GET | /api/v1/pastes | Required | List your pastes (paginated, 50 per page) |
| GET | /api/v1/me | Required | Return your user info |
POST /api/v1/paste - text
Send Content-Type: application/json with a JSON body:
| Field | Type | Description |
|---|---|---|
| type | string | Must be "text" |
| content | string | The paste text |
| title | string | Optional title |
| language | string | Syntax language, e.g. "python". Defaults to "auto" |
| expires_in | integer | Seconds until expiry. 0 = never |
POST /api/v1/paste - file
Send multipart/form-data. The file field name depends on the type:
| Field | Value |
|---|---|
| type | "image", "video", "model", or "file" |
| image / video / model / file | The file (field name must match the type value) |
| title | Optional |
| expires_in | Optional. Seconds, 0 = never |
GET /api/v1/pastes - query parameters
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (default 1, 50 per page) |
| type | string | Filter by type: text or image |
API - Examples
Create a text paste
curl -X POST https://dropd.link/api/v1/paste \
-H "X-Api-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"text","content":"Hello world","title":"My paste","language":"plaintext","expires_in":0}'
Upload an image
curl -X POST https://dropd.link/api/v1/paste \ -H "X-Api-Key: YOUR_KEY" \ -F "type=image" \ -F "image=@/path/to/screenshot.png" \ -F "title=My screenshot"
Get a paste
curl https://dropd.link/api/v1/paste/PASTE_ID
List your pastes
curl -H "X-Api-Key: YOUR_KEY" \ "https://dropd.link/api/v1/pastes?page=1"
Delete a paste
curl -X DELETE -H "X-Api-Key: YOUR_KEY" \ https://dropd.link/api/v1/paste/PASTE_ID
Create a text paste
$key = "YOUR_KEY"
$body = @{ type="text"; content="Hello world"; title="My paste"; language="plaintext"; expires_in=0 } | ConvertTo-Json
$resp = Invoke-RestMethod -Uri "https://dropd.link/api/v1/paste" `
-Method POST -Headers @{"X-Api-Key"=$key} `
-ContentType "application/json" -Body $body
$resp.url
Upload clipboard image (screenshot)
Add-Type -AssemblyName System.Windows.Forms
$img = [System.Windows.Forms.Clipboard]::GetImage()
if ($img) {
$tmp = [System.IO.Path]::GetTempFileName() + ".png"
$img.Save($tmp, [System.Drawing.Imaging.ImageFormat]::Png)
$form = [System.Net.Http.MultipartFormDataContent]::new()
$form.Add([System.Net.Http.StringContent]::new("image"), "type")
$fs = [System.IO.FileStream]::new($tmp, "Open")
$form.Add([System.Net.Http.StreamContent]::new($fs), "image", "clipboard.png")
$client = [System.Net.Http.HttpClient]::new()
$client.DefaultRequestHeaders.Add("X-Api-Key", "YOUR_KEY")
$res = $client.PostAsync("https://dropd.link/api/v1/paste", $form).Result
$json = $res.Content.ReadAsStringAsync().Result | ConvertFrom-Json
$json.url | Set-Clipboard
Write-Host "Copied: $($json.url)"
$fs.Dispose(); Remove-Item $tmp
}
List your pastes
$resp = Invoke-RestMethod -Uri "https://dropd.link/api/v1/pastes" `
-Headers @{"X-Api-Key"="YOUR_KEY"}
$resp.pastes | Format-Table id, type, title, url
Create a text paste
import requests
API_KEY = "YOUR_KEY"
BASE = "https://dropd.link/api/v1"
headers = {"X-Api-Key": API_KEY}
resp = requests.post(f"{BASE}/paste", headers=headers, json={
"type": "text",
"content": "Hello world",
"title": "My paste",
"language": "python",
"expires_in": 86400, # 1 day, or 0 for never
})
print(resp.json()["url"])
Upload an image file
with open("screenshot.png", "rb") as f:
resp = requests.post(f"{BASE}/paste", headers=headers,
data={"type": "image", "title": "Screenshot"},
files={"image": ("screenshot.png", f, "image/png")})
print(resp.json()["url"])
List pastes & delete one
pastes = requests.get(f"{BASE}/pastes", headers=headers).json()["pastes"]
for p in pastes:
print(p["id"], p["type"], p["title"])
# Delete by id
requests.delete(f"{BASE}/paste/{pastes[0]['id']}", headers=headers)
Paste clipboard text, echo the URL
; Add to your aliases file
; Usage: /dropd
alias dropd {
var %text = $cb
if (!%text) { echo -a dropd: clipboard is empty | return }
; headers must be a binvar
bset -t &dropdHdr 1 Content-Type: application/json $+ $crlf $+ X-Api-Key: YOUR_KEY
; body must be a binvar
bset -t &dropdBody 1 {"type":"text","content":" $+ $replace(%text,$chr(34),\$chr(34)) $+ ","title":"mIRC paste","language":"plaintext","expires_in":0}
; p=post, b=binvar target - noop discards the returned ID
noop $urlget(https://dropd.link/api/v1/paste, pb, &dropdResp, dropdDone, &dropdHdr, &dropdBody)
}
alias dropdDone {
var %resp = $bvar(&dropdResp, 1, $bvar(&dropdResp, 0)).text
if ($regex(%resp, /"url":"([^"]+)"/)) {
echo -a dropd: $regml(1)
.clipboard $regml(1)
}
else echo -a dropd: error - %resp
}
List your pastes
alias dropdList {
bset -t &dropdHdr 1 X-Api-Key: YOUR_KEY
noop $urlget(https://dropd.link/api/v1/pastes, gb, &dropdListResp, dropdListDone, &dropdHdr)
}
alias dropdListDone {
var %resp = $bvar(&dropdListResp, 1, $bvar(&dropdListResp, 0)).text
var %i = 1
while ($regex(%resp, /"id":"([^"]+)".*?"title":"([^"]+)"/g)) {
echo -a $regml(%i) - $regml($calc(%i + 1))
inc %i 2
}
}