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.

Tip: Drop a code file directly - dropd. detects the language from the extension and applies syntax highlighting automatically.

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.

Image

Got a screenshot, photo, or diagram? Upload it to dropd. and paste the image URL into a standard <img> tag. Works anywhere HTML is allowed.

Image embed
<img src="IMAGE_URL" alt="my image">
image will appear here

3D Model

Upload an STL, GLB, OBJ, or other 3D file and embed the interactive viewer on your portfolio, product page, or anywhere else. Visitors can rotate, zoom, and pan without leaving your site.

3D model embed
<iframe
  src="EMBED_LINK"
  width="100%"
  height="480"
  frameborder="0"
  allowfullscreen>
</iframe>
3D viewer will appear here

Text & Code

Paste a code snippet and embed it with syntax highlighting directly in a blog post or documentation page. The embed is read-only and renders exactly as it appears on the dropd. viewer.

Text & code embed
<iframe
  src="EMBED_LINK"
  width="100%"
  height="300"
  frameborder="0">
</iframe>
code embed will appear here

Text & Code

Paste any text directly, or drop a code file. dropd. maps file extensions to syntax highlighting languages automatically.

ExtensionsLanguage
.pyPython
.js .mjs .cjs .jsxJavaScript
.ts .tsxTypeScript
.phpPHP
.rbRuby
.goGo
.rsRust
.c .hC
.cpp .cc .cxx .hppC++
.javaJava
.csC#
.sh .bash .zsh .fishBash
.ps1 .psm1 .psd1PowerShell
.sqlSQL
.jsonJSON
.yaml .ymlYAML
.xmlXML
.css .scss .sassCSS / SCSS
.mdMarkdown
.toml .ini .envTOML / INI
.diff .patchDiff
.dockerfileDockerfile

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.

FormatExtensionMax size
JPEG.jpg .jpeg20 MB
PNG.png20 MB
GIF.gif20 MB
WebP.webp20 MB
SVG.svg20 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.

FormatExtensionMax size
MP4 (H.264/H.265).mp450 MB
WebM.webm50 MB
QuickTime.mov50 MB
Ogg Video.ogv50 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.

FormatExtensionMax size
STL.stl50 MB
OBJ.obj50 MB
glTF Binary.glb50 MB
glTF JSON.gltf50 MB
PLY.ply50 MB
3MF.3mf50 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.

Note: Uploading binary files requires an account on a plan that includes binary file support.

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:

FeatureNo accountFreePaid
Text pastes
Image uploads
Video & 3D models-
Binary file uploads--
API access--
Analytics-BasicFull
Custom QR (unbranded)--
RetentionLimitedExtendedUnlimited

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

MethodPathAuthDescription
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:

FieldTypeDescription
typestringMust be "text"
contentstringThe paste text
titlestringOptional title
languagestringSyntax language, e.g. "python". Defaults to "auto"
expires_inintegerSeconds until expiry. 0 = never

POST /api/v1/paste - file

Send multipart/form-data. The file field name depends on the type:

FieldValue
type"image", "video", "model", or "file"
image / video / model / fileThe file (field name must match the type value)
titleOptional
expires_inOptional. Seconds, 0 = never

GET /api/v1/pastes - query parameters

ParamTypeDescription
pageintegerPage number (default 1, 50 per page)
typestringFilter 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
  }
}