Upload Images

Web interface

Log in and drag files to upload, or click to browse. The web UI supports batch upload and automatically copies share links on completion.

curl

# Authenticated upload
curl -X POST http://localhost:18080/api/v1/images \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "file=@image.png"

# With expiry (24 hours)
curl -X POST http://localhost:18080/api/v1/images \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "file=@image.png" \
  -F "expires_in=24h"

# Guest upload (if enabled)
curl -X POST http://localhost:18080/api/v1/upload \
  -F "file=@image.png"

ShareX

PicFast provides a built-in ShareX config endpoint. See the ShareX Integration page for full setup instructions.

Other tools

PicFast also supports PicGo, PicList, uPic, Dropshare, and any tool compatible with a standard REST upload endpoint. The built-in Connections page in the admin console provides step-by-step setup instructions for each tool, including Obsidian (via Image auto upload + PicGo).

MCP (AI agents)

AI assistants can upload images through PicFast's MCP server. See the MCP Integration page for setup and the full tool reference.

Python

import requests

url = "https://pics.example.com/api/v1/images"
headers = {"Authorization": "Bearer YOUR_TOKEN"}
with open("image.png", "rb") as f:
    files = {"file": f}
    r = requests.post(url, headers=headers, files=files)
    print(r.json()["links"]["url"])

JavaScript

const form = new FormData();
const file = await fs.openAsBlob("image.png");
form.append("file", file);

const res = await fetch("https://pics.example.com/api/v1/images", {
  method: "POST",
  headers: { "Authorization": "Bearer YOUR_TOKEN" },
  body: form,
});
const data = await res.json();
console.log(data.links.markdown);

Response

A successful upload returns:

{"id": 1,"key": "abc123","origin_name": "image.png",
  "size_bytes": 204800,"mimetype": "image/png","extension": "png",
  "width": 1920,"height": 1080,
  "links": {"url": "https://pics.example.com/i/abc123.png",
    "html": "<img src=\"https://pics.example.com/i/abc123.png\" />",
    "markdown": "![](https://pics.example.com/i/abc123.png)",
    "bbcode": "[img]https://pics.example.com/i/abc123.png[/img]",
    "thumbnail_url": "https://pics.example.com/t/abc123.png"},
  "created_at": "2026-05-02T00:00:00Z"}

Formats & limits

Accepted formats: jpg, png, gif, webp, svg, bmp, ico.

Maximum file size is configured per group. Default is 50 MB per file.

Guest upload TTL can be configured separately via app.guest_image_ttl — useful for giving guest uploads a shorter lifespan than authenticated ones. See Configuration for details.