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

REST API 參考

可在 http://localhost:1349/api/docs 取得含請求/回應範例的互動式 API 文件。

機器可讀規格:

  • /api/v1/openapi.yaml - OpenAPI 3.1 規格
  • /llms.txt - 便於 LLM 使用的摘要
  • /llms-full.txt - 完整的 LLM 友善文件

驗證

除非 AUTH_ENABLED=false,所有端點都需要驗證。

Session Token

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>"

Session 會在 7 天後過期(可透過 SESSION_DURATION_HOURS 設定)。

API Keys

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>"

Key 以 si_ 為前綴並以 scrypt 雜湊儲存,原始 key 只會顯示一次,之後無法再取回。

驗證端點

MethodPath存取權限說明
POST/api/auth/loginPublic登入,取得 session token
POST/api/auth/logoutAuth銷毀目前的 session
GET/api/auth/sessionAuth驗證目前的 session
POST/api/auth/change-passwordAuth變更自己的密碼(會使所有其他 session 與 API key 失效)
GET/api/auth/usersAdmin列出所有使用者
POST/api/auth/registerAdmin建立新使用者
PUT/api/auth/users/:idAdmin更新使用者角色或團隊
POST/api/auth/users/:id/reset-passwordAdmin重設使用者密碼
DELETE/api/auth/users/:idAdmin刪除使用者
GET/api/v1/config/authPublic檢查是否已啟用驗證({ authEnabled: bool }
POST/api/auth/mfa/enrollAuth啟動 TOTP MFA 註冊。需要企業版 mfa 功能
POST/api/auth/mfa/verifyAuth以 TOTP 代碼確認 MFA 註冊
POST/api/auth/mfa/completePublic完成待處理的 MFA 登入挑戰
POST/api/auth/mfa/disableAuth為目前使用者停用 MFA
POST/api/auth/users/:id/mfa/resetAdmin(users:manage重設某使用者的 MFA
GET/api/auth/oidc/loginPublic啟用 OIDC 時啟動 OIDC 登入
GET/api/auth/oidc/callbackPublicOIDC 授權回呼
GET/api/auth/saml/metadataPublic啟用 SAML 時的 SAML SP metadata XML
GET/api/auth/saml/loginPublic啟動 SAML 登入
POST/api/auth/saml/callbackPublicSAML assertion consumer service

當使用者啟用 MFA 時,POST /api/auth/login 會回傳 {"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false} 而非 session token。將該 mfaToken 加上 TOTP 或復原代碼送至 /api/auth/mfa/complete

權限

權限AdminUser
使用工具
擁有檔案/管線/API key
查看所有使用者的檔案/管線/key-
寫入設定-
管理使用者與團隊-
管理品牌-

健康檢查

MethodPath存取權限說明
GET/api/v1/healthPublic基本健康檢查。健康時回傳 {"status":"healthy","version":"..."} 與 200;若資料庫無法連線則回傳 {"status":"unhealthy"} 與 503。
GET/api/v1/readyzPublic就緒探測。檢查 PostgreSQL、Redis、磁碟空間,以及設定後的 S3。當該執行個體不應接收流量時回傳 503。
GET/api/v1/admin/healthAdmin(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。完整的路由表與選用設定請見 轉換預設

基本功能

Tool 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

最佳化

Tool ID名稱主要設定
optimize-for-webWeb 最佳化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})
faviconFavicon 產生器paddingbackgroundColorborderRadius - 產生所有標準尺寸

調整

Tool 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 iGPU 加速做 AI 推論。無需連網。

Tool 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;產生使用 JSON,含 countryCodebgColorprintLayout(none/4x6/a4)、特徵點、影像尺寸
content-aware-resize內容感知調整大小Seam carving(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

浮水印與疊加

Tool 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)。

公用工具

Tool ID名稱主要設定
info影像資訊- (回傳寬度、高度、格式、大小、通道、hasAlpha、DPI、EXIF)
compare影像比較mode(side-by-side/overlay/diff)、diffThreshold - 第二個檔案為比較目標
find-duplicates尋找重複threshold(感知雜湊距離,預設 8) - 多檔案
color-palette色彩調色盤count(主要顏色數量)、format(hex/rgb)
qr-generateQR Code 產生器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 主體,不需上傳檔案。

版面與構圖

Tool 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 張圖片)

格式與轉換

Tool 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)

影片工具

Tool 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變更 FPSfps(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)

音訊工具

Tool 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)

文件工具

Tool 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-pdfWeb 最佳化 PDF- (線性化以便快速網頁檢視)
grayscale-pdf灰階 PDF-
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-pdf遮蔽 PDFterms(string[])、caseSensitive(bool)
sign-pdf簽署 PDF自訂 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

檔案工具

Tool 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- (防炸彈保護)

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> 之外還提供額外端點:

MethodPath說明
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 以移除限制。

儲存與管理管線

MethodPath說明
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}

檔案庫

具版本歷史的持久性檔案儲存。

MethodPath說明
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 Key 管理

MethodPath存取權限說明
POST/api/v1/api-keysAuth產生新 key,僅顯示一次
GET/api/v1/api-keysAuth列出 key(name、id、lastUsedAt,非原始 key)
DELETE/api/v1/api-keys/:idAuth刪除 key

團隊

MethodPath存取權限說明
GET/api/v1/teamsAdmin(teams:manage列出團隊
POST/api/v1/teamsAdmin(teams:manage建立團隊
PUT/api/v1/teams/:idAdmin(teams:manage重新命名團隊
DELETE/api/v1/teams/:idAdmin(teams:manage刪除團隊(無法刪除預設團隊或含成員的團隊)

設定

執行時的鍵值設定(任何已驗證使用者可讀取,僅管理員可寫入)。

MethodPath說明
GET/api/v1/settings取得所有設定
PUT/api/v1/settings批次更新設定(帶有鍵值對的 JSON 主體)
GET/api/v1/settings/:key依 key 取得特定設定

已知的 key:disabledTools(工具 ID 的 JSON 陣列)、enableExperimentalTools(bool 字串)、loginAttemptLimit(number)。

偏好設定

各使用者的偏好設定與執行個體設定分開。任何已驗證使用者都可讀取並更新自己的偏好設定對應表。

MethodPath說明
GET/api/v1/preferences{ "preferences": { ... } } 取得目前使用者的偏好設定
PUT/api/v1/preferences為目前使用者新增或更新一個以上的偏好設定 key

角色

具細緻權限的自訂角色管理。

MethodPath存取權限說明
GET/api/v1/rolesAdmin(audit:read列出所有角色及其使用者數
POST/api/v1/rolesAdmin(security:manage建立自訂角色(namedescriptionpermissions
PUT/api/v1/roles/:idAdmin(security:manage更新自訂角色(無法修改內建角色)
DELETE/api/v1/roles/:idAdmin(security:manage刪除自訂角色(無法刪除內建角色;受影響的使用者會還原為 user 角色)

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

稽核日誌

僅限管理員的端點,用於檢視與安全相關的動作。

MethodPath存取權限說明
GET/api/v1/audit-logAdmin(audit:read分頁的稽核日誌,含選用篩選條件

查詢參數:

參數說明
page頁碼(預設:1)
limit每頁項目數(預設:50,上限:100)
action依動作類型篩選(例如 ROLE_CREATEDROLE_DELETED
ip依來源 IP 位址篩選
from篩選此 ISO 8601 日期之後的項目
to篩選此 ISO 8601 日期之前的項目

分析

MethodPath存取權限說明
GET/api/v1/config/analyticsPublic取得有效的分析設定(PostHog key、Sentry DSN、取樣率)。當分析關閉時(無論來自編譯時的烘焙或執行個體的 analyticsEnabled 設定),key、DSN 與執行個體 ID 皆為空白。
POST/api/v1/feedbackAuth將明確的使用者意見回饋提交至設定的 PostHog 專案,作為 feedback_submitted。此路由遵守分析開關、對提交做速率限制,除非 contactOk 為 true 否則移除聯絡欄位,且永不接受檔案內容、檔名、上傳路徑或原始的私密錯誤文字。當分析停用時,回傳 { "ok": true, "accepted": false }
PUT/api/v1/settingsAdmin(settings:write設定整個執行個體的退出。送出 JSON 主體 { "analyticsEnabled": "false" } 為所有人關閉分析,或 "true" 重新開啟。

功能 / AI Bundle

管理 AI 功能 bundle(在 Docker 環境中安裝/解除安裝 AI 模型套件)。從自訂自動化流程啟用工具時,建議使用工具層級的安裝端點:某些 AI 工具需要一個以上的共用 bundle,而此端點會略過已安裝的 bundle,只將缺少的排入佇列。

MethodPath存取權限說明
GET/api/v1/featuresAuth列出所有功能 bundle 及其安裝狀態
POST/api/v1/admin/features/:bundleId/installAdmin(features:manage安裝功能 bundle(非同步,回傳 jobId 以追蹤進度)
POST/api/v1/admin/tools/:toolId/features/installAdmin(features:manage安裝某工具所需的每個 bundle;回傳各 bundle 的已排入佇列/已略過狀態
POST/api/v1/admin/features/:bundleId/uninstallAdmin(features:manage解除安裝功能 bundle 並清除模型檔案
GET/api/v1/admin/features/disk-usageAdmin(features:manage取得 AI 模型的總磁碟使用量
POST/api/v1/admin/features/importAdmin(features:manage匯入離線 AI bundle 封存

管理操作

用於可觀測性、支援、使用量報告與備份狀態的維運端點。

MethodPath存取權限說明
GET/api/v1/admin/log-levelAdmin(settings:write讀取目前執行時的日誌層級
POST/api/v1/admin/log-levelAdmin(settings:write變更執行時的日誌層級(fatalerrorwarninfodebugtracesilent
GET/api/v1/metricsAdmin(system:health文字格式的 Prometheus metrics
GET/api/v1/admin/support-bundleAdmin(system:health下載已遮蔽的診斷支援 bundle ZIP
GET/api/v1/admin/usageAdmin(audit:read使用量儀表板資料,含選用的 days 查詢參數
GET/api/v1/admin/backup-statusAdmin(system:health讀取最近一次備份的中繼資料與新鮮度狀態
POST/api/v1/admin/backup-statusAdmin(system:health記錄一次已完成的備份(type、選用 sizeBytes、選用 notes

企業 API

這些路由受其相關企業功能的授權控管。它們仍需要所列的 SnapOtter 權限。

MethodPath存取權限說明
GET/api/v1/enterprise/audit/exportAdmin(audit:read以 JSON 或 CSV 匯出稽核項目,可加篩選
GET/api/v1/enterprise/config/exportAdmin(system:health匯出已遮蔽的執行個體設定、自訂角色與團隊
POST/api/v1/enterprise/config/importAdmin(system:health匯入設定,可選乾跑
GET/api/v1/enterprise/ip-allowlistAdmin(security:manage讀取已設定的 CIDR 允許清單
PUT/api/v1/enterprise/ip-allowlistAdmin(security:manage更新 CIDR 允許清單,並防止自我鎖定
GET/api/v1/enterprise/legal-holdAdmin(compliance:manage列出使用者與團隊的法律保留
PUT/api/v1/enterprise/legal-holdAdmin(compliance:manage對使用者或團隊套用或解除法律保留
POST/api/v1/enterprise/scim/tokenAdmin(users:manage產生 SCIM bearer token,僅回傳一次
DELETE/api/v1/enterprise/scim/tokenAdmin(users:manage撤銷目前的 SCIM bearer token
GET/api/v1/enterprise/siem/configAdmin(webhooks:manage讀取 SIEM 轉發設定
PUT/api/v1/enterprise/siem/configAdmin(webhooks:manage更新 SIEM 轉發設定
GET/api/v1/enterprise/webhooksAdmin(webhooks:manage列出 webhook 目的地
POST/api/v1/enterprise/webhooksAdmin(webhooks:manage建立 webhook 目的地
PUT/api/v1/enterprise/webhooks/:indexAdmin(webhooks:manage更新 webhook 目的地
DELETE/api/v1/enterprise/webhooks/:indexAdmin(webhooks:manage刪除 webhook 目的地
POST/api/v1/enterprise/webhooks/:index/testAdmin(webhooks:manage送出測試 webhook 酬載
POST/api/v1/enterprise/users/:id/exportAdmin(compliance:manage啟動 GDPR 使用者匯出工作
GET/api/v1/enterprise/users/:id/export/:jobIdAdmin(compliance:manage讀取 GDPR 匯出狀態與下載 URL
DELETE/api/v1/enterprise/users/:id/purgeAdmin(compliance:manage確認後永久清除某使用者的資料
DELETE/api/v1/enterprise/teams/:id/purgeAdmin(compliance:manage確認後永久清除某團隊的資料
GET/api/v1/admin/versionAdmin(system:health讀取 app、build、Node 與 schema 版本中繼資料
GET/api/v1/admin/migrations/pendingAdmin(system:health比較封裝的遷移與已套用的遷移
GET/api/v1/admin/upgrade-checkAdmin(system:health執行升級就緒性檢查

SCIM 2.0

SCIM 探索端點為公開。使用者與群組端點需要上方產生的 SCIM bearer token。

MethodPath存取權限說明
GET/api/v1/scim/v2/ServiceProviderConfigPublicSCIM 伺服器能力
GET/api/v1/scim/v2/SchemasPublicSCIM schema 探索
GET/api/v1/scim/v2/ResourceTypesPublicSCIM 資源類型探索
GET/api/v1/scim/v2/UsersSCIM token列出使用者,可加選用的 SCIM 篩選
POST/api/v1/scim/v2/UsersSCIM token建立使用者
GET/api/v1/scim/v2/Users/:idSCIM token取得使用者
PUT/api/v1/scim/v2/Users/:idSCIM token取代使用者
DELETE/api/v1/scim/v2/Users/:idSCIM token軟性停用使用者
GET/api/v1/scim/v2/GroupsSCIM token以 SCIM 群組列出團隊
POST/api/v1/scim/v2/GroupsSCIM token建立團隊
GET/api/v1/scim/v2/Groups/:idSCIM token取得團隊
PUT/api/v1/scim/v2/Groups/:idSCIM token取代團隊與群組成員資格
DELETE/api/v1/scim/v2/Groups/:idSCIM token刪除團隊

迷因範本

支援迷因產生器工具的 API。

MethodPath存取權限說明
GET/api/v1/meme-templatesAuth列出所有可用的迷因範本及文字方塊位置
GET/api/v1/meme-templates/full/:filenameAuth提供全尺寸範本圖片
GET/api/v1/meme-templates/thumbs/:filenameAuth提供範本縮圖
GET/api/v1/meme-templates/fonts/:filenameAuth提供迷因文字繪製所用的字型檔

錯誤回應

所有錯誤都回傳 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 功能 bundle(FEATURE_NOT_INSTALLED
500內部伺服器錯誤