This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

REST API 参考

带请求/响应示例的交互式 API 文档见 http://localhost:1349/api/docs

机器可读规范:

  • /api/v1/openapi.yaml - OpenAPI 3.1 规范
  • /llms.txt - 面向 LLM 的摘要
  • /llms-full.txt - 完整的面向 LLM 的文档

身份验证

除非 AUTH_ENABLED=false,否则所有端点都需要身份验证。

会话令牌

bash
# Login
curl -X POST http://localhost:1349/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"admin"}'
# Returns: {"token":"<session-token>"}

# Use token
curl http://localhost:1349/api/v1/tools/image/resize \
  -H "Authorization: Bearer <session-token>"

会话在 7 天后过期(可通过 SESSION_DURATION_HOURS 配置)。

API 密钥

bash
# Create a key (returns key once - store it)
curl -X POST http://localhost:1349/api/v1/api-keys \
  -H "Authorization: Bearer <session-token>" \
  -H "Content-Type: application/json" \
  -d '{"name":"my-script"}'
# Returns: {"key":"si_<96 hex chars>","id":"...","name":"my-script"}

# Use the key
curl http://localhost:1349/api/v1/tools/image/resize \
  -H "Authorization: Bearer si_<your-key>"

密钥以 si_ 为前缀,并以 scrypt 哈希形式存储,原始密钥只显示一次,之后再也无法取回。

身份验证端点

方法路径访问权限说明
POST/api/auth/login公开登录,获取会话令牌
POST/api/auth/logout需身份验证销毁当前会话
GET/api/auth/session需身份验证校验当前会话
POST/api/auth/change-password需身份验证修改自己的密码(会使所有其他会话和 API 密钥失效)
GET/api/auth/users管理员列出所有用户
POST/api/auth/register管理员创建新用户
PUT/api/auth/users/:id管理员更新用户角色或团队
POST/api/auth/users/:id/reset-password管理员重置用户密码
DELETE/api/auth/users/:id管理员删除用户
GET/api/v1/config/auth公开检查是否启用了身份验证({ authEnabled: bool }
POST/api/auth/mfa/enroll需身份验证开始 TOTP MFA 注册。需要企业版 mfa 功能
POST/api/auth/mfa/verify需身份验证用 TOTP 验证码确认 MFA 注册
POST/api/auth/mfa/complete公开完成待处理的 MFA 登录挑战
POST/api/auth/mfa/disable需身份验证为当前用户禁用 MFA
POST/api/auth/users/:id/mfa/reset管理员(users:manage为用户重置 MFA
GET/api/auth/oidc/login公开启用 OIDC 时开始 OIDC 登录
GET/api/auth/oidc/callback公开OIDC 授权回调
GET/api/auth/saml/metadata公开启用 SAML 时提供 SAML SP 元数据 XML
GET/api/auth/saml/login公开开始 SAML 登录
POST/api/auth/saml/callback公开SAML 断言消费者服务

当用户启用了 MFA 时,POST /api/auth/login 会返回 {"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false} 而不是会话令牌。将该 mfaToken 连同 TOTP 或恢复码一起发送到 /api/auth/mfa/complete

权限

权限管理员用户
使用工具
自己的文件/流水线/API 密钥
查看所有用户的文件/流水线/密钥-
写入设置-
管理用户与团队-
管理品牌设置-

健康检查

方法路径访问权限说明
GET/api/v1/health公开基础健康检查。数据库可用时返回 {"status":"healthy","version":"..."} 与 200,数据库不可达时返回 {"status":"unhealthy"} 与 503。
GET/api/v1/readyz公开就绪探针。检查 PostgreSQL、Redis、磁盘空间,以及在配置了 S3 时检查 S3。当实例不应接收流量时返回 503。
GET/api/v1/admin/health管理员(system:health详细诊断信息,包括运行时长、存储模式、数据库状态、队列状态以及 GPU 可用性。

使用工具

每个工具都遵循相同的模式:

bash
# Single file
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId> \
  -H "Authorization: Bearer <token>" \
  -F "[email protected]" \
  -F 'settings={"width":800,"height":600}'

# Batch (returns ZIP)
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId>/batch \
  -H "Authorization: Bearer <token>" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F 'settings={...}'

<section>imagevideoaudiopdffiles 之一。

  • 上传为 multipart/form-data
  • settings 是一个包含工具专属选项的 JSON 字符串。
  • clientJobId 是一个可选的表单字段,用于调用方提供的进度关联标识。
  • fileId 是一个可选的表单字段,引用现有文件库项目。存在时,处理输出会保存为一个新版本,且响应中会包含 savedFileId
  • 快速工具 通常返回 200 JSON:{"jobId":"...","downloadUrl":"/api/v1/download/<jobId>/<filename>","originalSize":1234,"processedSize":567}。从 downloadUrl 获取处理后的文件。
  • 任何排队工具 若为长时间运行或超过同步等待窗口,都可能返回 202 JSON:{"jobId":"...","async":true}。连接 SSE 获取进度,完成后再下载(参见 进度跟踪)。
  • 批处理 路由会直接以流式返回一个 ZIP 归档(带 X-Job-Id 头),适用于在通用批处理注册表中注册的工具。

工具参考

转换预设

共享目录包含 83 个专用的转换预设端点,例如 jpg-to-pngmov-to-mp4m4a-to-mp3pdf-to-jpgexcel-to-csv。预设是一等的工具路由:

POST /api/v1/tools/<section>/<presetId>

每个预设锁定输出格式,并委托给某个基础工具,例如 convertconvert-videoextract-audioconvert-audioimage-to-pdfpdf-to-imagesvg-to-rasterconvert-spreadsheet。完整的路由表和可选设置见 转换预设

基础工具

工具 ID名称主要设置
resize调整尺寸widthheightfit(cover/contain/fill/inside/outside)、percentagewithoutEnlargement,另加 23 个社交媒体预设
crop裁剪lefttopwidthheightunit(px/percent)
rotate旋转与翻转anglehorizontal(bool)、vertical(bool)
convert转换format(jpg/png/webp/avif/tiff/gif/heic/heif)、quality
compress压缩mode(quality/targetSize)、quality(1–100)、targetSizeKb

优化

工具 ID名称主要设置
optimize-for-web网页优化format(webp/jpeg/avif/png)、qualitymaxWidthmaxHeightprogressivestripMetadata
strip-metadata去除元数据-
edit-metadata编辑元数据titledescriptionauthorcopyrightkeywordsgps(lat/lon)、dateTime
bulk-rename批量重命名pattern(支持 {n}{date}{original})、startIndexpadding
image-to-pdf图片转 PDFpageSize(A4/Letter/...)、orientationmargintargetSize({value, unit})
favicon网站图标生成器paddingbackgroundColorborderRadius - 生成所有标准尺寸

调整

工具 ID名称主要设置
adjust-colors调整颜色brightnesscontrastexposuresaturationtemperaturetinthuesharpnessredgreenblueeffect(none/grayscale/sepia/invert)
sharpening锐化method(adaptive/unsharp-mask/high-pass)、sigmam1m2x1y2y3amountradiusthresholdstrengthkernelSize(3/5)、denoise(off/light/medium/strong)
replace-color替换颜色sourceColortargetColor(替换色)、makeTransparenttolerance
color-blindness色盲模拟simulationType(protanopia/deuteranopia/tritanopia/protanomaly/deuteranomaly/tritanomaly/achromatopsia/blueConeMonochromacy,默认 "deuteranomaly")
duotone双色调shadow(hex)、highlight(hex)、intensity(0-100)
pixelate像素化blockSize(2-128)、region({left, top, width, height},用于局部像素化)
vignette暗角strength(0.1-1)、color(hex)、radiussoftnessroundnesscenterXcenterY

AI 工具

所有 AI 工具都在你自己的硬件上运行:默认使用 CPU,或在有受支持的 NVIDIA GPU 时使用 NVIDIA CUDA。目前不支持通过 VA-API、Quick Sync 或 OpenCL 使用 Intel/AMD 核显进行 AI 推理加速。无需联网。

工具 ID名称AI 模型主要设置
remove-background移除背景rembg (BiRefNet / U2-Net)modelbackgroundType(transparent/color/gradient/blur/image)、backgroundColorgradientColor1gradientColor2gradientAngleblurEnabledblurIntensityshadowEnabledshadowOpacity
upscale图片放大RealESRGANscale(2/4)、modelfaceEnhancedenoiseformatquality
erase-object对象擦除LaMa (ONNX)蒙版作为第二个文件部分发送(字段名 mask)、formatquality
ocrOCR / 文本提取PaddleOCR / Tesseractquality(fast/balanced/best)、languageenhance
blur-faces人脸 / PII 模糊MediaPipeblurRadiussensitivity
smart-crop智能裁剪MediaPipe + Sharpmode(subject/face/trim)、strategy(attention/entropy)、widthheightpaddingfacePreset(closeup/head-shoulders/upper-body/half-body)、sensitivitythresholdpadToSquarepadColortargetSizequality
image-enhancement图片增强基于分析mode(auto/exposure/contrast/color/sharpness)、strength
enhance-faces人脸增强GFPGAN / CodeFormermodel(gfpgan/codeformer)、strengthsensitivitycenterFace
colorizeAI 上色DDColorintensitymodel
noise-removal降噪分级降噪tier(quick/balanced/quality/maximum)、strengthdetailPreservationcolorNoiseformatquality
red-eye-removal去红眼人脸关键点 + 颜色分析sensitivitystrength
restore-photo照片修复多步流水线mode(auto/light/heavy)、scratchRemovalfaceEnhancementfidelitydenoisedenoiseStrengthcolorize
passport-photo证件照MediaPipe 关键点两阶段流程。分析使用 multipart file;生成使用带 countryCodebgColorprintLayout(none/4x6/a4)、关键点、图片尺寸的 JSON
content-aware-resize内容感知调整尺寸接缝裁剪 (caire)widthheightprotectFacesblurRadiussobelThresholdsquare
transparency-fixerPNG 透明度修复BiRefNet HR-mattingdefringe(0-100)、outputFormat(png/webp)
background-replace背景替换rembg (BiRefNet)backgroundType(color/gradient)、color(hex)、gradientColor1gradientColor2gradientAnglefeather(0-20)、format(png/webp)
blur-background背景模糊rembg (BiRefNet)intensity(1-100)、feather(0-20)、format(png/webp)
ai-canvas-expandAI 画布扩展LaMa (outpainting)extendTopextendRightextendBottomextendLeft(px)、tier(fast/balanced/high)、formatquality

水印与叠加

工具 ID名称主要设置
watermark-text文字水印textfontfontSizecoloropacitypositionrotationtile
watermark-image图片水印opacitypositionscale - 第二个文件是水印
text-overlay文字叠加textfontfontSizecolorxybackgroundpaddingborderRadius
compose图片合成xyopacityblend - 第二个文件叠在上层
meme-generator表情包生成器templateIdtextLayout(top-bottom/top-only/bottom-only/center/side-by-side)、textBoxes([{id, text}])、fontFamily(anton/arial-black/comic-sans/montserrat/bebas-neue/permanent-marker/roboto)、fontSizetextColorstrokeColortextAlignallCaps。支持模板模式(带 templateId 的 JSON 请求体)或自定义图片模式(带文件的 multipart)。

实用工具

工具 ID名称主要设置
info图片信息-(返回宽度、高度、格式、大小、通道数、hasAlpha、DPI、EXIF)
compare图片对比mode(side-by-side/overlay/diff)、diffThreshold - 第二个文件是对比目标
find-duplicates查找重复threshold(感知哈希距离,默认 8)- 多文件
color-palette调色板count(主色数量)、format(hex/rgb)
qr-generate二维码生成器datasizemargincolorDarkcolorLighterrorCorrectionLeveldotStylecornerStylelogo(可选文件)
barcode-read条形码识别-(自动识别 QR、EAN、Code128、DataMatrix 等)
image-to-base64图片转 Base64format(data-uri/plain)、mimeType
html-to-imageHTML 转图片urlformat(png/jpg/webp)、qualityfullPagedevicePreset(desktop/tablet/mobile/custom)、viewportWidthviewportHeight
histogram直方图scale(linear/log)- 返回 RGB 直方图图表 + 各通道统计
lqip-placeholderLQIP 占位图width(4-64)、blurstrategy(blur/pixelate/solid)、format(webp/png/jpeg)、quality
barcode-generate条形码生成器texttype(code128/ean13/upca/code39/itf14/datamatrix)、scale(1-8)、includeText(bool)。JSON 请求体,无需上传文件。

布局与合成

工具 ID名称主要设置
collage拼贴 / 网格template(25+ 种布局)、gapbackgroundColorborderRadius - 多文件
stitch拼接 / 合并direction(horizontal/vertical/grid)、gapbackgroundColoralignment - 多文件
split图片分割mode(grid/rows/cols)、rowscolstileWidthtileHeight
border边框与相框widthcolorstyle(solid/gradient/pattern)、borderRadiuspaddingshadow
beautify美化截图backgroundType(solid/linear-gradient/radial-gradient/image/transparent)、gradientStopspaddingborderRadiusshadowPresetframe(none/macos-light/macos-dark/windows-light/windows-dark/browser-light/browser-dark/iphone/macbook/ipad/...)、socialPreset(none/twitter/linkedin/instagram-square/instagram-story/facebook/producthunt)、watermarkTextoutputFormat
circle-crop圆形裁剪zoom(1-5)、offsetXoffsetYborderWidthborderColorbackground(transparent/hex)、outputSize
image-pad图片留白target(16:9/9:16/1:1/4:3/3:4/custom)、ratioWratioHbackground(color/transparent/blur)、color(hex)、padding(0-50%)
sprite-sheet精灵图columns(1-16)、paddingbackground(hex)、format(png/webp/jpeg)、quality - 多文件(2-64 张图片)

格式与转换

工具 ID名称主要设置
svg-to-rasterSVG 转位图format(png/jpeg/webp/avif/tiff/gif/heif)、widthheightscaledpibackground
vectorize图片转 SVGcolorMode(bw/color)、thresholdcolorPrecisionfilterSpecklepathMode(none/polygon/spline)
gif-toolsGIF 工具action(resize/optimize/reverse/speed/extract-frames/rotate/add-text)、动作专属参数
gif-webpGIF/WebP 转换器quality(1-100)、lossless(bool)、resizePercent(10-100)

视频工具

工具 ID名称主要设置
convert-video转换视频format(mp4/mov/webm/avi/mkv)、quality(high/balanced/small)
compress-video压缩视频quality(light/balanced/strong)、resolution(original/1080p/720p/480p)
trim-video裁剪视频(时长)startSendSprecise(bool,逐帧精确剪切)
mute-video视频静音-
video-to-gif视频转 GIFfps(1-30)、widthstartSdurationS(最长 60 秒)
resize-video调整视频尺寸widthheightpreset(custom/2160p/1440p/1080p/720p/480p/360p)
crop-video裁剪视频(画面)widthheightxy
rotate-video旋转视频transform(cw90/ccw90/180/hflip/vflip)
change-fps更改帧率fps(1-120)
video-color视频调色brightnesscontrastsaturationgamma
video-speed视频速度factor(0.25-4)、keepPitch(bool)
reverse-video倒放视频-(最长 5 分钟)
video-loudnorm音频归一化-(EBU R128)
aspect-pad比例留白target(16:9/9:16/1:1/4:3/3:4)、color(hex)
blur-pad模糊留白target(16:9/9:16/1:1/4:3/3:4)、blur(2-50)
watermark-video视频加水印textpositionfontSizeopacitycolor
stabilize-video视频防抖smoothing(5-60,以帧计)
gif-to-videoGIF 转视频format(mp4/webm/mov)
video-to-webp视频转 WebPfpswidthqualityloop(bool)
video-to-frames视频转帧mode(all/nth/timestamps)、ntimestampsformat(png/jpg)
merge-videos合并视频-(多文件,归一化到第一个视频的分辨率)
replace-audio替换音频-(视频 + 音频文件,两个文件)
burn-subtitles烧录字幕fontSize(8-72)- 视频 + 字幕文件
embed-subtitles嵌入字幕language(ISO 639-2/B 代码)- 视频 + 字幕文件
extract-subtitles提取字幕-(输出 SRT)
images-to-video图片转视频secondsPerImage(0.5-10)、resolution(1080p/720p/square)、fps - 多文件
video-metadata清理视频元数据-
auto-subtitles自动字幕(AI)language(auto/en/de/fr/es/zh/ja/ko/id/th/vi)、format(srt/vtt)
extract-audio提取音频format(mp3/wav/m4a/ogg)

音频工具

工具 ID名称主要设置
convert-audio转换音频format(mp3/wav/ogg/flac/m4a)、bitrateKbps(32-320)
trim-audio裁剪音频startSendS
volume-adjust调整音量gainDb(-30 至 30)
normalize-audio音频归一化-(EBU R128,-16 LUFS)
fade-audio音频淡入淡出fadeInS(0-30)、fadeOutS(0-30)
reverse-audio倒放音频-
audio-speed音频速度factor(0.25-4)
pitch-shift音调变换semitones(-12 至 12)
audio-channels音频声道mode(stereo-to-mono/mono-to-stereo/swap)
silence-removal去除静音thresholdDb(-80 至 -20)、minSilenceS(0.1-5)
noise-reduction降噪strength(light/medium/strong)
merge-audio合并音频format(mp3/wav/flac/m4a)- 多文件
split-audio分割音频mode(time/parts/silence)、segmentSpartsthresholdDbminSilenceS
ringtone-maker铃声制作startSdurationS(1-30)
waveform-image波形图widthheightcolor(hex)
audio-metadata音频元数据strip(bool)、titleartistalbum
transcribe-audio音频转写(AI)language(auto/en/de/fr/es/zh/ja/ko/id/th/vi)、outputFormat(txt/srt/vtt)

文档工具

工具 ID名称主要设置
merge-pdf合并 PDF-(多文件,最多 20 个 PDF)
split-pdf拆分 PDFmode(range/every)、rangeeveryN(1-500)
compress-pdf压缩 PDFmode(quality/targetSize)、quality(1-100)、targetSizeKb
rotate-pdf旋转 PDFangle(90/180/270)、range(页面范围)
extract-pages提取页面range(qpdf 语法,例如 "1-5,8,10-z")
remove-pages删除页面pages(要删除的 qpdf 范围)
organize-pdf整理 PDForder(qpdf 页面顺序,例如 "3,1,2,5-z")
protect-pdf保护 PDFuserPasswordownerPassword(AES-256)
unlock-pdf解锁 PDFpassword
repair-pdf修复 PDF-
linearize-pdf网页优化 PDF-(线性化以便快速网页查看)
grayscale-pdfPDF 灰度化-
pdfa-convertPDF/A 转换-(归档级 PDF/A-2)
crop-pdf裁剪 PDFmargin(0-2000 点)
nup-pdfN-up PDFperSheet(2/3/4/8/9/12/16)
booklet-pdf小册子 PDFperSheet(2/4/6/8)
watermark-pdfPDF 加水印textpositionfontSizeopacityrotation
pdf-page-numbersPDF 页码position(bl/bc/br/tl/tc/tr)、fontSize
flatten-pdf展平 PDF-(将表单和批注固化)
redact-pdfPDF 涂黑terms(string[])、caseSensitive(bool)
sign-pdfPDF 签名自定义 multipart 路由,带 PDF file、签名文件 sig0sig1placements JSON 数组
pdf-to-textPDF 转文本-
pdf-to-wordPDF 转 Word-
pdf-metadataPDF 元数据titleauthorsubjectkeywords
convert-document转换文档format(docx/odt/rtf/txt)
convert-presentation转换演示文稿format(pptx/odp)
convert-spreadsheet转换电子表格format(xlsx/ods/csv)
excel-to-pdfExcel 转 PDF-
word-to-pdfWord 转 PDF-
powerpoint-to-pdfPowerPoint 转 PDF-
html-to-pdfHTML 转 PDF-(已禁用远程资源)
markdown-to-docxMarkdown 转 Word-
markdown-to-htmlMarkdown 转 HTML-
markdown-to-pdfMarkdown 转 PDF-(已禁用远程资源)
epub-convert转换 EPUBformat(pdf/docx/html/md)
to-epub转换为 EPUB-(接受 .docx、.md、.html、.txt)
ocr-pdfPDF OCR(AI)quality(fast/balanced/best)、language(auto/en/de/fr/es/zh/ja/ko)、pages
pdf-to-imagePDF 转图片pages(all/range)、formatdpiquality
pdf-to-jpgPDF 转 JPGpagesdpiqualitycolorMode
pdf-to-pngPDF 转 PNGpagesdpiqualitycolorMode
pdf-to-tiffPDF 转 TIFFpagesdpiqualitycolorMode

文件工具

工具 ID名称主要设置
chart-maker图表制作kind(bar/line/pie)、titlewidthheight
csv-excelCSV 转 Excelsheet(XLSX 输入的工作表编号)- 双向
csv-jsonCSV 转 JSONpretty(bool)- 双向
json-xmlJSON 转 XMLpretty(bool)- 双向
split-csv拆分 CSVrowsPerFile(1-1000000)、keepHeader(bool)
merge-csvs合并 CSV-(多文件,列匹配)
yaml-jsonYAML / JSON-(双向)
xml-to-csvXML 转 CSV-(自动查找重复元素)
excel-to-csvExcel 转 CSVconvert-spreadsheet 支撑的专用转换预设
create-zip创建 ZIP-(多文件,2-50 个文件)
extract-zip解压 ZIP-(已做 ZIP 炸弹防护)

HTML 转图片

将网页捕获为图片。与其他工具不同,该端点接受 application/json 而非 multipart 表单数据(无需上传文件)。

端点: POST /api/v1/tools/image/html-to-image

Content-Type: application/json

参数类型默认值说明
urlstring(必填)要捕获的 URL(仅限 http/https)
formatstring"png"输出格式:jpgpngwebp
qualitynumber90质量 1-100(仅 JPG/WebP)
fullPagebooleanfalse捕获整个可滚动页面
devicePresetstring"desktop"desktoptabletmobilecustom
viewportWidthnumber1280自定义视口宽度 320-3840
viewportHeightnumber720自定义视口高度 320-2160

示例:

bash
curl -X POST http://localhost:1349/api/v1/tools/image/html-to-image \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://snapotter.com", "format": "png", "devicePreset": "desktop"}'

响应:

json
{
  "jobId": "uuid",
  "downloadUrl": "/api/v1/download/{jobId}/screenshot.png",
  "originalSize": 0,
  "processedSize": 54321
}

工具子路由

某些工具在标准的 POST /api/v1/tools/<section>/<toolId> 之外还暴露了额外端点:

方法路径说明
GET/api/v1/tools/popular返回热门工具 ID,当使用数据稀少时回退到精选默认列表
POST/api/v1/tools/image/remove-background/effects应用背景效果(color/gradient/blur/shadow)而无需重新运行 AI。使用初次移除时缓存的蒙版。
POST/api/v1/tools/image/edit-metadata/inspect从图片读取现有的 EXIF/IPTC/XMP 元数据
POST/api/v1/tools/image/strip-metadata/inspect在去除前检查元数据字段
POST/api/v1/tools/image/passport-photo/analyze第 1 阶段:AI 人脸检测 + 背景移除。返回人脸关键点和缓存数据。
POST/api/v1/tools/image/passport-photo/generate第 2 阶段:使用缓存分析进行裁剪、调整尺寸和平铺。无需重新运行 AI。
POST/api/v1/tools/image/gif-tools/info获取 GIF 元数据(帧数、尺寸、时长)
POST/api/v1/tools/pdf/pdf-to-image/info获取 PDF 元数据(页数、尺寸)
POST/api/v1/tools/pdf/pdf-to-image/preview生成指定 PDF 页面的预览
POST/api/v1/tools/pdf/pdf-to-jpg/info获取专用 JPG 预设的 PDF 元数据
POST/api/v1/tools/pdf/pdf-to-jpg/preview生成 JPG 预设的 PDF 页面预览
POST/api/v1/tools/pdf/pdf-to-png/info获取专用 PNG 预设的 PDF 元数据
POST/api/v1/tools/pdf/pdf-to-png/preview生成 PNG 预设的 PDF 页面预览
POST/api/v1/tools/pdf/pdf-to-tiff/info获取专用 TIFF 预设的 PDF 元数据
POST/api/v1/tools/pdf/pdf-to-tiff/preview生成 TIFF 预设的 PDF 页面预览
POST/api/v1/tools/image/svg-to-raster/batch将多个 SVG 批量转换为位图
POST/api/v1/tools/image/image-enhancement/analyze分析图片质量并返回增强建议
POST/api/v1/tools/image/optimize-for-web/preview用于实时参数调节的轻量预览。返回带尺寸头的优化图片。

批处理

将某个支持批处理的通用工具一次性应用到多个文件。返回一个 ZIP 归档。自定义的多文件或多步路由(例如 PDF 签名、PDF OCR 以及 PDF 转图片预设路由)使用它们自己的端点约定,而非通用的 /batch 路由。

bash
curl -X POST http://localhost:1349/api/v1/tools/image/compress/batch \
  -H "Authorization: Bearer <token>" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F 'settings={"quality":80}'

并发由 CONCURRENT_JOBS 控制(默认:从 CPU 核心数自动检测)。MAX_BATCH_SIZE 限制每个批次的文件数量(默认:100;设为 0 表示无限制)。

流水线

执行流水线

bash
# Single file
curl -X POST http://localhost:1349/api/v1/pipeline/execute \
  -H "Authorization: Bearer <token>" \
  -F "[email protected]" \
  -F 'pipeline={"steps":[
    {"toolId":"resize","settings":{"width":1200}},
    {"toolId":"compress","settings":{"quality":80}},
    {"toolId":"watermark-text","settings":{"text":"© 2025"}}
  ]}'

# Batch (multiple files → ZIP)
curl -X POST http://localhost:1349/api/v1/pipeline/batch \
  -H "Authorization: Bearer <token>" \
  -F "[email protected]" \
  -F "[email protected]" \
  -F 'pipeline={"steps":[{"toolId":"resize","settings":{"width":800}}]}'

每一步的输出是下一步的输入。流水线默认允许 20 步,可通过 MAX_PIPELINE_STEPS 配置。设置 MAX_PIPELINE_STEPS=0 可移除该限制。

保存和管理流水线

方法路径说明
POST/api/v1/pipeline/save保存一个命名流水线(namedescriptionsteps[]
GET/api/v1/pipeline/list列出已保存的流水线(管理员看到全部;用户看到自己的)
DELETE/api/v1/pipeline/:id删除(所有者或管理员)
GET/api/v1/pipeline/tools列出可用于流水线步骤的工具 ID

进度跟踪

长时间运行的作业、排队工具、批处理作业和流水线会通过 Server-Sent Events 实时发出进度。进度流是公开的,以作业 ID 作为键,因此客户端无需发送 Authorization 头即可读取。

bash
# Connect to the SSE stream (jobId is in the JSON response body from the tool endpoint)
curl -N http://localhost:1349/api/v1/jobs/<jobId>/progress

事件格式:

data: {"jobId":"...","type":"single","phase":"processing","stage":"Upscaling","percent":42}
data: {"jobId":"...","type":"single","phase":"complete","percent":100,"result":{"downloadUrl":"/api/v1/download/..."}}
data: {"jobId":"...","type":"batch","status":"processing","completedFiles":2,"totalFiles":5,"failedFiles":0,"errors":[]}

你可以用 POST /api/v1/jobs/:jobId/cancel 请求取消一个已排队或正在运行的作业。响应为 {"canceled":true|false}

文件库

带版本历史的持久化文件存储。

方法路径说明
POST/api/v1/upload将文件上传到工作区(临时处理)
POST/api/v1/files/upload将文件上传到持久化文件库
POST/api/v1/files/save-result将工具处理结果保存为一个新文件版本
GET/api/v1/files列出已保存文件(分页,带搜索)
GET/api/v1/files/:id获取文件元数据 + 版本链
GET/api/v1/files/:id/download下载文件
GET/api/v1/files/:id/thumbnail获取 300px JPEG 缩略图
DELETE/api/v1/files批量删除文件及其版本链(请求体:{ ids: [...] }
POST/api/v1/fetch-urls将远程 URL 抓取到工作区,用于基于 URL 的导入
POST/api/v1/preview生成浏览器兼容的 WebP 预览(适用于 HEIC/HEIF/RAW 格式)
GET/api/v1/files/:id/preview为已保存的 PDF、Office 文档、视频或音频文件流式传输已缓存或生成的浏览器兼容预览
POST/api/v1/preview/generate为已上传的媒体文件按需生成 MP4 或 MP3 预览,无需先保存
GET/api/v1/download/:jobId/:filename从工作区下载已处理的文件

要将工具结果自动保存到文件库,请将 fileId 作为一个 multipart 表单字段包含进去,引用一个现有的库文件。处理结果将保存为一个新版本。

API 密钥管理

方法路径访问权限说明
POST/api/v1/api-keys需身份验证生成新密钥 - 只显示一次
GET/api/v1/api-keys需身份验证列出密钥(name、id、lastUsedAt - 不含原始密钥)
DELETE/api/v1/api-keys/:id需身份验证删除密钥

团队

方法路径访问权限说明
GET/api/v1/teams管理员(teams:manage列出团队
POST/api/v1/teams管理员(teams:manage创建团队
PUT/api/v1/teams/:id管理员(teams:manage重命名团队
DELETE/api/v1/teams/:id管理员(teams:manage删除团队(无法删除默认团队或有成员的团队)

设置

运行时键值配置(任何已验证用户可读,仅管理员可写)。

方法路径说明
GET/api/v1/settings获取所有设置
PUT/api/v1/settings批量更新设置(带键值对的 JSON 请求体)
GET/api/v1/settings/:key按键获取指定设置

已知键:disabledTools(工具 ID 的 JSON 数组)、enableExperimentalTools(bool 字符串)、loginAttemptLimit(数字)。

偏好设置

每用户偏好设置与实例设置是分开的。任何已验证用户都可以读取和更新自己的偏好映射。

方法路径说明
GET/api/v1/preferences{ "preferences": { ... } } 获取当前用户的偏好设置
PUT/api/v1/preferences为当前用户新增或更新一个或多个偏好键

角色

带细粒度权限的自定义角色管理。

方法路径访问权限说明
GET/api/v1/roles管理员(audit:read列出所有角色及其用户数量
POST/api/v1/roles管理员(security:manage创建自定义角色(namedescriptionpermissions
PUT/api/v1/roles/:id管理员(security:manage更新自定义角色(无法修改内置角色)
DELETE/api/v1/roles/:id管理员(security:manage删除自定义角色(无法删除内置角色;受影响用户回退到 user 角色)

可用权限(17 个):tools:usefiles:ownfiles:allapikeys:ownapikeys:allpipelines:ownpipelines:allsettings:readsettings:writeusers:manageteams:managefeatures:managesystem:healthaudit:readcompliance:managewebhooks:managesecurity:manage

审计日志

仅管理员的端点,用于审查与安全相关的操作。

方法路径访问权限说明
GET/api/v1/audit-log管理员(audit:read带可选过滤器的分页审计日志

查询参数:

参数说明
page页码(默认:1)
limit每页条目数(默认:50,最大:100)
action按操作类型过滤(例如 ROLE_CREATEDROLE_DELETED
ip按来源 IP 地址过滤
from过滤此 ISO 8601 日期之后的条目
to过滤此 ISO 8601 日期之前的条目

分析

方法路径访问权限说明
GET/api/v1/config/analytics公开获取生效的分析配置(PostHog 密钥、Sentry DSN、采样率)。当分析关闭时(无论来自编译期烘焙还是实例 analyticsEnabled 设置),密钥、DSN 和实例 ID 均为空。
POST/api/v1/feedback需身份验证将显式的用户反馈以 feedback_submitted 提交到已配置的 PostHog 项目。该路由遵守分析开关,对提交进行限流,除非 contactOk 为 true 否则会剥离联系字段,并且从不接受文件内容、文件名、上传路径或原始私有错误文本。分析被禁用时,返回 { "ok": true, "accepted": false }
PUT/api/v1/settings管理员(settings:write设置实例范围的选择退出。发送 JSON 请求体 { "analyticsEnabled": "false" } 为所有人关闭分析,或 "true" 重新开启。

功能 / AI 捆绑包

管理 AI 功能捆绑包(在 Docker 环境中安装/卸载 AI 模型包)。从自定义自动化启用某个工具时,优先使用工具级安装端点:某些 AI 工具需要多个共享捆绑包,而该端点会跳过已安装的捆绑包,仅将缺失的排队安装。

方法路径访问权限说明
GET/api/v1/features需身份验证列出所有功能捆绑包及其安装状态
POST/api/v1/admin/features/:bundleId/install管理员(features:manage安装一个功能捆绑包(异步,返回 jobId 用于进度跟踪)
POST/api/v1/admin/tools/:toolId/features/install管理员(features:manage安装某工具所需的每个捆绑包;返回每个捆绑包的已排队/已跳过状态
POST/api/v1/admin/features/:bundleId/uninstall管理员(features:manage卸载一个功能捆绑包并清理模型文件
GET/api/v1/admin/features/disk-usage管理员(features:manage获取 AI 模型的总磁盘占用
POST/api/v1/admin/features/import管理员(features:manage导入一个离线 AI 捆绑包归档

管理操作

用于可观测性、支持、用量报告和备份状态的运维端点。

方法路径访问权限说明
GET/api/v1/admin/log-level管理员(settings:write读取当前运行时日志级别
POST/api/v1/admin/log-level管理员(settings:write更改运行时日志级别(fatalerrorwarninfodebugtracesilent
GET/api/v1/metrics管理员(system:health文本格式的 Prometheus 指标
GET/api/v1/admin/support-bundle管理员(system:health下载一个已脱敏的诊断支持包 ZIP
GET/api/v1/admin/usage管理员(audit:read用量仪表盘数据,带可选的 days 查询参数
GET/api/v1/admin/backup-status管理员(system:health读取上次备份元数据和新鲜度状态
POST/api/v1/admin/backup-status管理员(system:health记录一次已完成的备份(type,可选 sizeBytes,可选 notes

企业版 API

这些路由由其相关的企业版功能进行许可证限制。它们仍需要列出的 SnapOtter 权限。

方法路径访问权限说明
GET/api/v1/enterprise/audit/export管理员(audit:read带过滤器将审计条目导出为 JSON 或 CSV
GET/api/v1/enterprise/config/export管理员(system:health导出已脱敏的实例配置、自定义角色和团队
POST/api/v1/enterprise/config/import管理员(system:health导入配置,可选试运行
GET/api/v1/enterprise/ip-allowlist管理员(security:manage读取已配置的 CIDR 允许列表
PUT/api/v1/enterprise/ip-allowlist管理员(security:manage更新 CIDR 允许列表,并防止自我锁定
GET/api/v1/enterprise/legal-hold管理员(compliance:manage列出用户和团队的法律保留
PUT/api/v1/enterprise/legal-hold管理员(compliance:manage对用户或团队施加或解除法律保留
POST/api/v1/enterprise/scim/token管理员(users:manage生成一个 SCIM 承载令牌,仅返回一次
DELETE/api/v1/enterprise/scim/token管理员(users:manage吊销当前 SCIM 承载令牌
GET/api/v1/enterprise/siem/config管理员(webhooks:manage读取 SIEM 转发配置
PUT/api/v1/enterprise/siem/config管理员(webhooks:manage更新 SIEM 转发配置
GET/api/v1/enterprise/webhooks管理员(webhooks:manage列出 webhook 目标
POST/api/v1/enterprise/webhooks管理员(webhooks:manage创建一个 webhook 目标
PUT/api/v1/enterprise/webhooks/:index管理员(webhooks:manage更新一个 webhook 目标
DELETE/api/v1/enterprise/webhooks/:index管理员(webhooks:manage删除一个 webhook 目标
POST/api/v1/enterprise/webhooks/:index/test管理员(webhooks:manage发送一个测试 webhook 载荷
POST/api/v1/enterprise/users/:id/export管理员(compliance:manage启动一个 GDPR 用户导出作业
GET/api/v1/enterprise/users/:id/export/:jobId管理员(compliance:manage读取 GDPR 导出状态和下载 URL
DELETE/api/v1/enterprise/users/:id/purge管理员(compliance:manage确认后永久清除用户数据
DELETE/api/v1/enterprise/teams/:id/purge管理员(compliance:manage确认后永久清除团队数据
GET/api/v1/admin/version管理员(system:health读取应用、构建、Node 和 schema 版本元数据
GET/api/v1/admin/migrations/pending管理员(system:health比较打包的迁移与已应用的迁移
GET/api/v1/admin/upgrade-check管理员(system:health运行升级就绪检查

SCIM 2.0

SCIM 发现端点是公开的。用户和组端点需要上面生成的 SCIM 承载令牌。

方法路径访问权限说明
GET/api/v1/scim/v2/ServiceProviderConfig公开SCIM 服务器能力
GET/api/v1/scim/v2/Schemas公开SCIM schema 发现
GET/api/v1/scim/v2/ResourceTypes公开SCIM 资源类型发现
GET/api/v1/scim/v2/UsersSCIM 令牌列出用户,带可选的 SCIM 过滤器
POST/api/v1/scim/v2/UsersSCIM 令牌创建一个用户
GET/api/v1/scim/v2/Users/:idSCIM 令牌获取一个用户
PUT/api/v1/scim/v2/Users/:idSCIM 令牌替换一个用户
DELETE/api/v1/scim/v2/Users/:idSCIM 令牌软停用一个用户
GET/api/v1/scim/v2/GroupsSCIM 令牌将团队列为 SCIM 组
POST/api/v1/scim/v2/GroupsSCIM 令牌创建一个团队
GET/api/v1/scim/v2/Groups/:idSCIM 令牌获取一个团队
PUT/api/v1/scim/v2/Groups/:idSCIM 令牌替换一个团队及组成员关系
DELETE/api/v1/scim/v2/Groups/:idSCIM 令牌删除一个团队

表情包模板

为表情包生成器工具提供支持的 API。

方法路径访问权限说明
GET/api/v1/meme-templates需身份验证列出所有可用的表情包模板及文本框位置
GET/api/v1/meme-templates/full/:filename需身份验证提供完整尺寸的模板图片
GET/api/v1/meme-templates/thumbs/:filename需身份验证提供模板缩略图
GET/api/v1/meme-templates/fonts/:filename需身份验证提供用于表情包文本渲染的字体文件

错误响应

所有错误都返回 JSON:

json
{
  "error": "Human-readable message",
  "code": "MACHINE_READABLE_CODE"
}
状态码含义
400请求无效 / 校验失败
401未通过身份验证
403权限不足
404资源未找到
413文件过大(见 MAX_UPLOAD_SIZE_MB
422校验通过后处理失败
429已被限流(见 RATE_LIMIT_PER_MIN
501所需的 AI 功能捆绑包未安装(FEATURE_NOT_INSTALLED
500服务器内部错误