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

Referensi REST API

Dokumentasi API interaktif dengan contoh request/response tersedia di http://localhost:1349/api/docs.

Spesifikasi yang dapat dibaca mesin:

  • /api/v1/openapi.yaml - Spesifikasi OpenAPI 3.1
  • /llms.txt - Ringkasan ramah LLM
  • /llms-full.txt - Dokumentasi lengkap ramah LLM

Autentikasi

Semua endpoint memerlukan autentikasi kecuali AUTH_ENABLED=false.

Token Sesi

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

Sesi kedaluwarsa setelah 7 hari (dapat dikonfigurasi melalui SESSION_DURATION_HOURS).

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

Kunci diberi awalan si_ dan disimpan sebagai hash scrypt - kunci mentah ditampilkan sekali dan tidak pernah dapat diambil kembali.

Endpoint Autentikasi

MethodPathAksesDeskripsi
POST/api/auth/loginPublikLogin, dapatkan token sesi
POST/api/auth/logoutAuthHancurkan sesi saat ini
GET/api/auth/sessionAuthValidasi sesi saat ini
POST/api/auth/change-passwordAuthUbah kata sandi sendiri (membatalkan semua sesi lain + kunci API)
GET/api/auth/usersAdminDaftar semua pengguna
POST/api/auth/registerAdminBuat pengguna baru
PUT/api/auth/users/:idAdminPerbarui peran atau tim pengguna
POST/api/auth/users/:id/reset-passwordAdminAtur ulang kata sandi pengguna
DELETE/api/auth/users/:idAdminHapus pengguna
GET/api/v1/config/authPublikPeriksa apakah autentikasi diaktifkan ({ authEnabled: bool })
POST/api/auth/mfa/enrollAuthMulai pendaftaran TOTP MFA. Memerlukan fitur enterprise mfa
POST/api/auth/mfa/verifyAuthKonfirmasi pendaftaran MFA dengan kode TOTP
POST/api/auth/mfa/completePublikSelesaikan tantangan login MFA yang tertunda
POST/api/auth/mfa/disableAuthNonaktifkan MFA untuk pengguna saat ini
POST/api/auth/users/:id/mfa/resetAdmin (users:manage)Atur ulang MFA untuk seorang pengguna
GET/api/auth/oidc/loginPublikMulai login OIDC ketika OIDC diaktifkan
GET/api/auth/oidc/callbackPublikCallback otorisasi OIDC
GET/api/auth/saml/metadataPublikXML metadata SP SAML ketika SAML diaktifkan
GET/api/auth/saml/loginPublikMulai login SAML
POST/api/auth/saml/callbackPublikLayanan konsumen asersi SAML

Ketika MFA diaktifkan untuk seorang pengguna, POST /api/auth/login mengembalikan {"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false} alih-alih token sesi. Kirim mfaToken tersebut ditambah kode TOTP atau kode pemulihan ke /api/auth/mfa/complete.

Izin

IzinAdminPengguna
Gunakan tool
File/pipeline/kunci API milik sendiri
Lihat file/pipeline/kunci semua pengguna-
Tulis pengaturan-
Kelola pengguna & tim-
Kelola branding-

Pemeriksaan Kesehatan

MethodPathAksesDeskripsi
GET/api/v1/healthPublikPemeriksaan kesehatan dasar. Mengembalikan {"status":"healthy","version":"..."} dengan 200, atau {"status":"unhealthy"} dengan 503 jika basis data tidak dapat dijangkau.
GET/api/v1/readyzPublikProbe kesiapan. Memeriksa PostgreSQL, Redis, ruang disk, dan S3 ketika dikonfigurasi. Mengembalikan 503 ketika instans tidak seharusnya menerima lalu lintas.
GET/api/v1/admin/healthAdmin (system:health)Diagnostik terperinci termasuk waktu aktif, mode penyimpanan, status basis data, keadaan antrean, dan ketersediaan GPU.

Menggunakan Tool

Setiap tool mengikuti pola yang sama:

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> adalah salah satu dari image, video, audio, pdf, atau files.

  • Unggahan bersifat multipart/form-data.
  • settings adalah string JSON dengan opsi spesifik tool.
  • clientJobId adalah field formulir opsional untuk korelasi progres yang disediakan pemanggil.
  • fileId adalah field formulir opsional yang mereferensikan item pustaka file yang sudah ada. Ketika hadir, keluaran yang diproses disimpan sebagai versi baru dan response menyertakan savedFileId.
  • Tool cepat biasanya mengembalikan JSON 200: {"jobId":"...","downloadUrl":"/api/v1/download/<jobId>/<filename>","originalSize":1234,"processedSize":567}. Ambil file yang diproses dari downloadUrl.
  • Setiap tool yang diantrekan dapat mengembalikan JSON 202 jika berjalan lama atau melampaui jendela tunggu sinkron: {"jobId":"...","async":true}. Sambungkan ke SSE untuk progres, lalu unduh setelah selesai (lihat Pelacakan Progres).
  • Batch mengembalikan arsip ZIP yang dialirkan secara langsung (dengan header X-Job-Id) untuk tool yang terdaftar di registri batch generik.

Referensi Tool

Preset Konversi

Katalog bersama menyertakan 83 endpoint preset konversi khusus seperti jpg-to-png, mov-to-mp4, m4a-to-mp3, pdf-to-jpg, dan excel-to-csv. Preset adalah rute tool kelas satu:

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

Setiap preset mengunci format keluaran dan mendelegasikan ke tool dasar seperti convert, convert-video, extract-audio, convert-audio, image-to-pdf, pdf-to-image, svg-to-raster, atau convert-spreadsheet. Lihat Preset Konversi untuk tabel rute lengkap dan pengaturan opsional.

Esensial

ID ToolNamaPengaturan utama
resizeResizewidth, height, fit (cover/contain/fill/inside/outside), percentage, withoutEnlargement, plus 23 preset media sosial
cropCropleft, top, width, height, unit (px/persen)
rotateRotate & Flipangle, horizontal (bool), vertical (bool)
convertConvertformat (jpg/png/webp/avif/tiff/gif/heic/heif), quality
compressCompressmode (quality/targetSize), quality (1–100), targetSizeKb

Optimasi

ID ToolNamaPengaturan utama
optimize-for-webOptimize for Webformat (webp/jpeg/avif/png), quality, maxWidth, maxHeight, progressive, stripMetadata
strip-metadataStrip Metadata-
edit-metadataEdit Metadatatitle, description, author, copyright, keywords, gps (lat/lon), dateTime
bulk-renameBulk Renamepattern (mendukung {n}, {date}, {original}), startIndex, padding
image-to-pdfImage to PDFpageSize (A4/Letter/...), orientation, margin, targetSize ({value, unit})
faviconFavicon Generatorpadding, backgroundColor, borderRadius - menghasilkan semua ukuran standar

Penyesuaian

ID ToolNamaPengaturan utama
adjust-colorsAdjust Colorsbrightness, contrast, exposure, saturation, temperature, tint, hue, sharpness, red, green, blue, effect (none/grayscale/sepia/invert)
sharpeningSharpeningmethod (adaptive/unsharp-mask/high-pass), sigma, m1, m2, x1, y2, y3, amount, radius, threshold, strength, kernelSize (3/5), denoise (off/light/medium/strong)
replace-colorReplace ColorsourceColor, targetColor (pengganti), makeTransparent, tolerance
color-blindnessColor Blindness SimulationsimulationType (protanopia/deuteranopia/tritanopia/protanomaly/deuteranomaly/tritanomaly/achromatopsia/blueConeMonochromacy, default "deuteranomaly")
duotoneDuotoneshadow (hex), highlight (hex), intensity (0-100)
pixelatePixelateblockSize (2-128), region ({left, top, width, height} untuk pikselasi parsial)
vignetteVignettestrength (0.1-1), color (hex), radius, softness, roundness, centerX, centerY

Tool AI

Semua tool AI berjalan di perangkat keras Anda: CPU secara default, atau NVIDIA CUDA ketika GPU NVIDIA yang didukung tersedia. Akselerasi iGPU Intel/AMD melalui VA-API, Quick Sync, atau OpenCL saat ini tidak didukung untuk inferensi AI. Tidak memerlukan internet.

ID ToolNamaModel AIPengaturan utama
remove-backgroundRemove Backgroundrembg (BiRefNet / U2-Net)model, backgroundType (transparent/color/gradient/blur/image), backgroundColor, gradientColor1, gradientColor2, gradientAngle, blurEnabled, blurIntensity, shadowEnabled, shadowOpacity
upscaleImage UpscalingRealESRGANscale (2/4), model, faceEnhance, denoise, format, quality
erase-objectObject EraserLaMa (ONNX)Mask dikirim sebagai bagian file kedua (fieldname mask), format, quality
ocrOCR / Ekstraksi TeksPaddleOCR / Tesseractquality (fast/balanced/best), language, enhance
blur-facesFace / PII BlurMediaPipeblurRadius, sensitivity
smart-cropSmart CropMediaPipe + Sharpmode (subject/face/trim), strategy (attention/entropy), width, height, padding, facePreset (closeup/head-shoulders/upper-body/half-body), sensitivity, threshold, padToSquare, padColor, targetSize, quality
image-enhancementImage EnhancementBerbasis analisismode (auto/exposure/contrast/color/sharpness), strength
enhance-facesFace EnhancementGFPGAN / CodeFormermodel (gfpgan/codeformer), strength, sensitivity, centerFace
colorizeAI ColorizationDDColorintensity, model
noise-removalNoise RemovalDenoising bertingkattier (quick/balanced/quality/maximum), strength, detailPreservation, colorNoise, format, quality
red-eye-removalRed Eye RemovalLandmark wajah + analisis warnasensitivity, strength
restore-photoPhoto RestorationPipeline multi-langkahmode (auto/light/heavy), scratchRemoval, faceEnhancement, fidelity, denoise, denoiseStrength, colorize
passport-photoPassport PhotoLandmark MediaPipeAlur dua fase. Analyze menggunakan multipart file; generate menggunakan JSON dengan countryCode, bgColor, printLayout (none/4x6/a4), landmark, dimensi gambar
content-aware-resizeContent-Aware ResizeSeam carving (caire)width, height, protectFaces, blurRadius, sobelThreshold, square
transparency-fixerPNG Transparency FixerBiRefNet HR-mattingdefringe (0-100), outputFormat (png/webp)
background-replaceBackground Replacerembg (BiRefNet)backgroundType (color/gradient), color (hex), gradientColor1, gradientColor2, gradientAngle, feather (0-20), format (png/webp)
blur-backgroundBlur Backgroundrembg (BiRefNet)intensity (1-100), feather (0-20), format (png/webp)
ai-canvas-expandAI Canvas ExpandLaMa (outpainting)extendTop, extendRight, extendBottom, extendLeft (px), tier (fast/balanced/high), format, quality

Watermark & Overlay

ID ToolNamaPengaturan utama
watermark-textText Watermarktext, font, fontSize, color, opacity, position, rotation, tile
watermark-imageImage Watermarkopacity, position, scale - file kedua adalah watermark
text-overlayText Overlaytext, font, fontSize, color, x, y, background, padding, borderRadius
composeImage Compositionx, y, opacity, blend - file kedua dilapiskan di atas
meme-generatorMeme GeneratortemplateId, textLayout (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), fontSize, textColor, strokeColor, textAlign, allCaps. Mendukung mode template (body JSON dengan templateId) atau mode gambar kustom (multipart dengan file).

Utilitas

ID ToolNamaPengaturan utama
infoImage Info- (mengembalikan width, height, format, size, channels, hasAlpha, DPI, EXIF)
compareImage Comparemode (side-by-side/overlay/diff), diffThreshold - file kedua adalah target perbandingan
find-duplicatesFind Duplicatesthreshold (jarak perceptual hash, default 8) - multi-file
color-paletteColor Palettecount (jumlah warna dominan), format (hex/rgb)
qr-generateQR Code Generatordata, size, margin, colorDark, colorLight, errorCorrectionLevel, dotStyle, cornerStyle, logo (file opsional)
barcode-readBarcode Reader- (mendeteksi otomatis QR, EAN, Code128, DataMatrix, dll.)
image-to-base64Image to Base64format (data-uri/plain), mimeType
html-to-imageHTML to Imageurl, format (png/jpg/webp), quality, fullPage, devicePreset (desktop/tablet/mobile/custom), viewportWidth, viewportHeight
histogramHistogramscale (linear/log) - mengembalikan grafik histogram RGB + statistik per kanal
lqip-placeholderLQIP Placeholderwidth (4-64), blur, strategy (blur/pixelate/solid), format (webp/png/jpeg), quality
barcode-generateBarcode Generatortext, type (code128/ean13/upca/code39/itf14/datamatrix), scale (1-8), includeText (bool). Body JSON, tanpa unggah file.

Tata Letak & Komposisi

ID ToolNamaPengaturan utama
collageCollage / Gridtemplate (25+ tata letak), gap, backgroundColor, borderRadius - multi-file
stitchStitch / Combinedirection (horizontal/vertical/grid), gap, backgroundColor, alignment - multi-file
splitImage Splittingmode (grid/rows/cols), rows, cols, tileWidth, tileHeight
borderBorder & Framewidth, color, style (solid/gradient/pattern), borderRadius, padding, shadow
beautifyBeautify ScreenshotbackgroundType (solid/linear-gradient/radial-gradient/image/transparent), gradientStops, padding, borderRadius, shadowPreset, frame (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), watermarkText, outputFormat
circle-cropCircle Cropzoom (1-5), offsetX, offsetY, borderWidth, borderColor, background (transparent/hex), outputSize
image-padImage Padtarget (16:9/9:16/1:1/4:3/3:4/custom), ratioW, ratioH, background (color/transparent/blur), color (hex), padding (0-50%)
sprite-sheetSprite Sheetcolumns (1-16), padding, background (hex), format (png/webp/jpeg), quality - multi-file (2-64 gambar)

Format & Konversi

ID ToolNamaPengaturan utama
svg-to-rasterSVG to Rasterformat (png/jpeg/webp/avif/tiff/gif/heif), width, height, scale, dpi, background
vectorizeImage to SVGcolorMode (bw/color), threshold, colorPrecision, filterSpeckle, pathMode (none/polygon/spline)
gif-toolsGIF Toolsaction (resize/optimize/reverse/speed/extract-frames/rotate/add-text), parameter spesifik aksi
gif-webpGIF/WebP Converterquality (1-100), lossless (bool), resizePercent (10-100)

Tool Video

ID ToolNamaPengaturan utama
convert-videoConvert Videoformat (mp4/mov/webm/avi/mkv), quality (high/balanced/small)
compress-videoCompress Videoquality (light/balanced/strong), resolution (original/1080p/720p/480p)
trim-videoTrim VideostartS, endS, precise (bool, potongan akurat per frame)
mute-videoMute Video-
video-to-gifVideo to GIFfps (1-30), width, startS, durationS (maks 60d)
resize-videoResize Videowidth, height, preset (custom/2160p/1440p/1080p/720p/480p/360p)
crop-videoCrop Videowidth, height, x, y
rotate-videoRotate Videotransform (cw90/ccw90/180/hflip/vflip)
change-fpsChange FPSfps (1-120)
video-colorVideo Colorbrightness, contrast, saturation, gamma
video-speedVideo Speedfactor (0.25-4), keepPitch (bool)
reverse-videoReverse Video- (maks 5 menit)
video-loudnormNormalize Audio- (EBU R128)
aspect-padAspect Padtarget (16:9/9:16/1:1/4:3/3:4), color (hex)
blur-padBlur Padtarget (16:9/9:16/1:1/4:3/3:4), blur (2-50)
watermark-videoWatermark Videotext, position, fontSize, opacity, color
stabilize-videoStabilize Videosmoothing (5-60, dalam frame)
gif-to-videoGIF to Videoformat (mp4/webm/mov)
video-to-webpVideo to WebPfps, width, quality, loop (bool)
video-to-framesVideo to Framesmode (all/nth/timestamps), n, timestamps, format (png/jpg)
merge-videosMerge Videos- (multi-file, dinormalisasi ke resolusi video pertama)
replace-audioReplace Audio- (file video + audio, dua file)
burn-subtitlesBurn SubtitlesfontSize (8-72) - file video + subtitle
embed-subtitlesEmbed Subtitleslanguage (kode ISO 639-2/B) - file video + subtitle
extract-subtitlesExtract Subtitles- (menghasilkan SRT)
images-to-videoImages to VideosecondsPerImage (0.5-10), resolution (1080p/720p/square), fps - multi-file
video-metadataClean Video Metadata-
auto-subtitlesAuto Subtitles (AI)language (auto/en/de/fr/es/zh/ja/ko/id/th/vi), format (srt/vtt)
extract-audioExtract Audioformat (mp3/wav/m4a/ogg)

Tool Audio

ID ToolNamaPengaturan utama
convert-audioConvert Audioformat (mp3/wav/ogg/flac/m4a), bitrateKbps (32-320)
trim-audioTrim AudiostartS, endS
volume-adjustVolume AdjustgainDb (-30 hingga 30)
normalize-audioNormalize Audio- (EBU R128, -16 LUFS)
fade-audioFade AudiofadeInS (0-30), fadeOutS (0-30)
reverse-audioReverse Audio-
audio-speedAudio Speedfactor (0.25-4)
pitch-shiftPitch Shiftsemitones (-12 hingga 12)
audio-channelsAudio Channelsmode (stereo-to-mono/mono-to-stereo/swap)
silence-removalSilence RemovalthresholdDb (-80 hingga -20), minSilenceS (0.1-5)
noise-reductionNoise Reductionstrength (light/medium/strong)
merge-audioMerge Audioformat (mp3/wav/flac/m4a) - multi-file
split-audioSplit Audiomode (time/parts/silence), segmentS, parts, thresholdDb, minSilenceS
ringtone-makerRingtone MakerstartS, durationS (1-30)
waveform-imageWaveform Imagewidth, height, color (hex)
audio-metadataAudio Metadatastrip (bool), title, artist, album
transcribe-audioTranscribe Audio (AI)language (auto/en/de/fr/es/zh/ja/ko/id/th/vi), outputFormat (txt/srt/vtt)

Tool Dokumen

ID ToolNamaPengaturan utama
merge-pdfMerge PDFs- (multi-file, hingga 20 PDF)
split-pdfSplit PDFmode (range/every), range, everyN (1-500)
compress-pdfCompress PDFmode (quality/targetSize), quality (1-100), targetSizeKb
rotate-pdfRotate PDFangle (90/180/270), range (rentang halaman)
extract-pagesExtract Pagesrange (sintaks qpdf, mis. "1-5,8,10-z")
remove-pagesRemove Pagespages (rentang qpdf yang akan dihapus)
organize-pdfOrganize PDForder (urutan halaman qpdf, mis. "3,1,2,5-z")
protect-pdfProtect PDFuserPassword, ownerPassword (AES-256)
unlock-pdfUnlock PDFpassword
repair-pdfRepair PDF-
linearize-pdfWeb-Optimize PDF- (linearisasi untuk penayangan web cepat)
grayscale-pdfGrayscale PDF-
pdfa-convertPDF/A Convert- (PDF/A-2 arsip)
crop-pdfCrop PDFmargin (0-2000 poin)
nup-pdfN-up PDFperSheet (2/3/4/8/9/12/16)
booklet-pdfBooklet PDFperSheet (2/4/6/8)
watermark-pdfWatermark PDFtext, position, fontSize, opacity, rotation
pdf-page-numbersPDF Page Numbersposition (bl/bc/br/tl/tc/tr), fontSize
flatten-pdfFlatten PDF- (memanggang formulir dan anotasi)
redact-pdfRedact PDFterms (string[]), caseSensitive (bool)
sign-pdfSign PDFRute multipart kustom dengan PDF file, file tanda tangan sig0, sig1, dan array JSON placements
pdf-to-textPDF to Text-
pdf-to-wordPDF to Word-
pdf-metadataPDF Metadatatitle, author, subject, keywords
convert-documentConvert Documentformat (docx/odt/rtf/txt)
convert-presentationConvert Presentationformat (pptx/odp)
convert-spreadsheetConvert Spreadsheetformat (xlsx/ods/csv)
excel-to-pdfExcel to PDF-
word-to-pdfWord to PDF-
powerpoint-to-pdfPowerPoint to PDF-
html-to-pdfHTML to PDF- (sumber daya jarak jauh dinonaktifkan)
markdown-to-docxMarkdown to Word-
markdown-to-htmlMarkdown to HTML-
markdown-to-pdfMarkdown to PDF- (sumber daya jarak jauh dinonaktifkan)
epub-convertConvert EPUBformat (pdf/docx/html/md)
to-epubConvert to EPUB- (menerima .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 to Imagepages (all/range), format, dpi, quality
pdf-to-jpgPDF to JPGpages, dpi, quality, colorMode
pdf-to-pngPDF to PNGpages, dpi, quality, colorMode
pdf-to-tiffPDF to TIFFpages, dpi, quality, colorMode

Tool File

ID ToolNamaPengaturan utama
chart-makerChart Makerkind (bar/line/pie), title, width, height
csv-excelCSV to Excelsheet (nomor lembar kerja untuk input XLSX) - dua arah
csv-jsonCSV to JSONpretty (bool) - dua arah
json-xmlJSON to XMLpretty (bool) - dua arah
split-csvSplit CSVrowsPerFile (1-1000000), keepHeader (bool)
merge-csvsMerge CSVs- (multi-file, kolom yang cocok)
yaml-jsonYAML / JSON- (dua arah)
xml-to-csvXML to CSV- (menemukan elemen berulang secara otomatis)
excel-to-csvExcel to CSVpreset konversi khusus yang didukung oleh convert-spreadsheet
create-zipCreate ZIP- (multi-file, 2-50 file)
extract-zipExtract ZIP- (terlindungi dari bomb)

HTML to Image

Tangkap halaman web sebagai gambar. Tidak seperti tool lain, endpoint ini menerima application/json alih-alih data formulir multipart (tidak perlu unggah file).

Endpoint: POST /api/v1/tools/image/html-to-image

Content-Type: application/json

ParameterTipeDefaultDeskripsi
urlstring(wajib)URL untuk ditangkap (hanya http/https)
formatstring"png"Format keluaran: jpg, png, webp
qualitynumber90Kualitas 1-100 (hanya JPG/WebP)
fullPagebooleanfalseTangkap seluruh halaman yang dapat digulir
devicePresetstring"desktop"desktop, tablet, mobile, custom
viewportWidthnumber1280Lebar viewport kustom 320-3840
viewportHeightnumber720Tinggi viewport kustom 320-2160

Contoh:

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

Response:

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

Sub-Rute Tool

Beberapa tool mengekspos endpoint tambahan di luar POST /api/v1/tools/<section>/<toolId> standar:

MethodPathDeskripsi
GET/api/v1/tools/popularMengembalikan ID tool populer, kembali ke daftar default terkurasi ketika data penggunaan minim
POST/api/v1/tools/image/remove-background/effectsTerapkan efek latar belakang (color/gradient/blur/shadow) tanpa menjalankan ulang AI. Menggunakan mask yang di-cache dari penghapusan awal.
POST/api/v1/tools/image/edit-metadata/inspectBaca metadata EXIF/IPTC/XMP yang ada dari sebuah gambar
POST/api/v1/tools/image/strip-metadata/inspectPeriksa field metadata sebelum penghapusan
POST/api/v1/tools/image/passport-photo/analyzeFase 1: Deteksi wajah AI + penghapusan latar belakang. Mengembalikan landmark wajah dan data yang di-cache.
POST/api/v1/tools/image/passport-photo/generateFase 2: Crop, resize, dan tile menggunakan analisis yang di-cache. Tanpa menjalankan ulang AI.
POST/api/v1/tools/image/gif-tools/infoDapatkan metadata GIF (jumlah frame, dimensi, durasi)
POST/api/v1/tools/pdf/pdf-to-image/infoDapatkan metadata PDF (jumlah halaman, dimensi)
POST/api/v1/tools/pdf/pdf-to-image/previewHasilkan pratinjau halaman PDF tertentu
POST/api/v1/tools/pdf/pdf-to-jpg/infoDapatkan metadata PDF untuk preset JPG khusus
POST/api/v1/tools/pdf/pdf-to-jpg/previewHasilkan pratinjau halaman PDF preset JPG
POST/api/v1/tools/pdf/pdf-to-png/infoDapatkan metadata PDF untuk preset PNG khusus
POST/api/v1/tools/pdf/pdf-to-png/previewHasilkan pratinjau halaman PDF preset PNG
POST/api/v1/tools/pdf/pdf-to-tiff/infoDapatkan metadata PDF untuk preset TIFF khusus
POST/api/v1/tools/pdf/pdf-to-tiff/previewHasilkan pratinjau halaman PDF preset TIFF
POST/api/v1/tools/image/svg-to-raster/batchKonversi batch beberapa SVG ke raster
POST/api/v1/tools/image/image-enhancement/analyzeAnalisis kualitas gambar dan kembalikan rekomendasi peningkatan
POST/api/v1/tools/image/optimize-for-web/previewPratinjau ringan untuk penyetelan parameter secara langsung. Mengembalikan gambar yang dioptimalkan dengan header ukuran.

Pemrosesan Batch

Terapkan tool generik yang mendukung batch ke beberapa file sekaligus. Mengembalikan arsip ZIP. Rute multi-file atau multi-langkah kustom, seperti penandatanganan PDF, OCR PDF, dan rute preset PDF-ke-gambar, menggunakan kontrak endpoint sendiri alih-alih rute /batch generik.

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}'

Konkurensi dikendalikan oleh CONCURRENT_JOBS (default: dideteksi otomatis dari inti CPU). MAX_BATCH_SIZE membatasi jumlah file per batch (default: 100; setel 0 untuk tanpa batas).

Pipeline

Menjalankan pipeline

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}}]}'

Keluaran setiap langkah adalah masukan langkah berikutnya. Pipeline mengizinkan 20 langkah secara default, dapat dikonfigurasi melalui MAX_PIPELINE_STEPS. Setel MAX_PIPELINE_STEPS=0 untuk menghapus batas.

Menyimpan dan mengelola pipeline

MethodPathDeskripsi
POST/api/v1/pipeline/saveSimpan pipeline bernama (name, description, steps[])
GET/api/v1/pipeline/listDaftar pipeline tersimpan (admin melihat semua; pengguna melihat milik sendiri)
DELETE/api/v1/pipeline/:idHapus (pemilik atau admin)
GET/api/v1/pipeline/toolsDaftar ID tool yang valid untuk langkah pipeline

Pelacakan Progres

Job yang berjalan lama, tool yang diantrekan, job batch, dan pipeline memancarkan progres real-time melalui Server-Sent Events. Aliran progres bersifat publik dan dikunci berdasarkan ID job, jadi klien tidak perlu mengirim header Authorization untuk membacanya.

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

Format event:

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":[]}

Anda dapat meminta pembatalan untuk job yang diantrekan atau sedang berjalan dengan POST /api/v1/jobs/:jobId/cancel. Response-nya adalah {"canceled":true|false}.

Pustaka File

Penyimpanan file persisten dengan riwayat versi.

MethodPathDeskripsi
POST/api/v1/uploadUnggah file ke ruang kerja (pemrosesan sementara)
POST/api/v1/files/uploadUnggah file ke pustaka file persisten
POST/api/v1/files/save-resultSimpan hasil pemrosesan tool sebagai versi file baru
GET/api/v1/filesDaftar file tersimpan (berhalaman, dengan pencarian)
GET/api/v1/files/:idDapatkan metadata file + rantai versi
GET/api/v1/files/:id/downloadUnduh file
GET/api/v1/files/:id/thumbnailDapatkan thumbnail JPEG 300px
DELETE/api/v1/filesHapus massal file dan rantai versinya (body: { ids: [...] })
POST/api/v1/fetch-urlsAmbil URL jarak jauh ke dalam ruang kerja untuk impor berbasis URL
POST/api/v1/previewHasilkan pratinjau WebP yang kompatibel dengan peramban (untuk format HEIC/HEIF/RAW)
GET/api/v1/files/:id/previewAlirkan pratinjau yang di-cache atau dihasilkan yang kompatibel dengan peramban untuk file PDF, dokumen office, video, atau audio tersimpan
POST/api/v1/preview/generateHasilkan pratinjau MP4 atau MP3 sesuai permintaan untuk file media yang diunggah tanpa menyimpannya terlebih dahulu
GET/api/v1/download/:jobId/:filenameUnduh file yang diproses dari ruang kerja

Untuk menyimpan otomatis hasil tool ke pustaka, sertakan fileId sebagai field formulir multipart yang mereferensikan file pustaka yang sudah ada. Hasil yang diproses akan disimpan sebagai versi baru.

Manajemen Kunci API

MethodPathAksesDeskripsi
POST/api/v1/api-keysAuthHasilkan kunci baru - ditampilkan sekali
GET/api/v1/api-keysAuthDaftar kunci (name, id, lastUsedAt - bukan kunci mentah)
DELETE/api/v1/api-keys/:idAuthHapus kunci

Tim

MethodPathAksesDeskripsi
GET/api/v1/teamsAdmin (teams:manage)Daftar tim
POST/api/v1/teamsAdmin (teams:manage)Buat tim
PUT/api/v1/teams/:idAdmin (teams:manage)Ganti nama tim
DELETE/api/v1/teams/:idAdmin (teams:manage)Hapus tim (tidak dapat menghapus tim default atau tim dengan anggota)

Pengaturan

Konfigurasi kunci-nilai runtime (dibaca oleh pengguna terautentikasi mana pun, ditulis hanya oleh admin).

MethodPathDeskripsi
GET/api/v1/settingsDapatkan semua pengaturan
PUT/api/v1/settingsPerbarui pengaturan secara massal (body JSON dengan pasangan kunci-nilai)
GET/api/v1/settings/:keyDapatkan pengaturan tertentu berdasarkan kunci

Kunci yang diketahui: disabledTools (array JSON dari ID tool), enableExperimentalTools (string bool), loginAttemptLimit (number).

Preferensi

Preferensi per pengguna terpisah dari pengaturan instans. Setiap pengguna terautentikasi dapat membaca dan memperbarui peta preferensi mereka sendiri.

MethodPathDeskripsi
GET/api/v1/preferencesDapatkan preferensi pengguna saat ini sebagai { "preferences": { ... } }
PUT/api/v1/preferencesUpsert satu atau lebih kunci preferensi untuk pengguna saat ini

Peran

Manajemen peran kustom dengan izin terperinci.

MethodPathAksesDeskripsi
GET/api/v1/rolesAdmin (audit:read)Daftar semua peran dengan jumlah pengguna
POST/api/v1/rolesAdmin (security:manage)Buat peran kustom (name, description, permissions)
PUT/api/v1/roles/:idAdmin (security:manage)Perbarui peran kustom (tidak dapat mengubah peran bawaan)
DELETE/api/v1/roles/:idAdmin (security:manage)Hapus peran kustom (tidak dapat menghapus peran bawaan; pengguna terdampak kembali ke peran user)

Izin yang tersedia (17): tools:use, files:own, files:all, apikeys:own, apikeys:all, pipelines:own, pipelines:all, settings:read, settings:write, users:manage, teams:manage, features:manage, system:health, audit:read, compliance:manage, webhooks:manage, security:manage.

Log Audit

Endpoint khusus admin untuk meninjau tindakan yang relevan dengan keamanan.

MethodPathAksesDeskripsi
GET/api/v1/audit-logAdmin (audit:read)Log audit berhalaman dengan filter opsional

Parameter query:

ParameterDeskripsi
pageNomor halaman (default: 1)
limitEntri per halaman (default: 50, maks: 100)
actionFilter berdasarkan tipe tindakan (mis. ROLE_CREATED, ROLE_DELETED)
ipFilter berdasarkan alamat IP sumber
fromFilter entri setelah tanggal ISO 8601 ini
toFilter entri sebelum tanggal ISO 8601 ini

Analitik

MethodPathAksesDeskripsi
GET/api/v1/config/analyticsPublikDapatkan konfigurasi analitik efektif (kunci PostHog, DSN Sentry, sample rate). Kunci, DSN, dan ID instans kosong ketika analitik nonaktif, baik dari bake waktu kompilasi maupun pengaturan instans analyticsEnabled.
POST/api/v1/feedbackAuthKirim umpan balik pengguna eksplisit ke proyek PostHog yang dikonfigurasi sebagai feedback_submitted. Rute ini menghormati gerbang analitik, membatasi laju pengiriman, menghapus field kontak kecuali contactOk bernilai true, dan tidak pernah menerima konten file, nama file, jalur unggahan, atau teks kesalahan pribadi mentah. Ketika analitik dinonaktifkan, rute mengembalikan { "ok": true, "accepted": false }.
PUT/api/v1/settingsAdmin (settings:write)Setel opt-out untuk seluruh instans. Kirim body JSON { "analyticsEnabled": "false" } untuk menonaktifkan analitik bagi semua orang, atau "true" untuk mengaktifkannya kembali.

Fitur / AI Bundle

Kelola bundle fitur AI (pasang/hapus paket model AI di lingkungan Docker). Utamakan endpoint pemasangan tingkat tool ketika mengaktifkan sebuah tool dari otomasi kustom: beberapa tool AI memerlukan lebih dari satu bundle bersama, dan endpoint ini melewati bundle yang sudah terpasang sambil hanya mengantrekan yang belum ada.

MethodPathAksesDeskripsi
GET/api/v1/featuresAuthDaftar semua bundle fitur dan status pemasangannya
POST/api/v1/admin/features/:bundleId/installAdmin (features:manage)Pasang bundle fitur (async, mengembalikan jobId untuk pelacakan progres)
POST/api/v1/admin/tools/:toolId/features/installAdmin (features:manage)Pasang setiap bundle yang dibutuhkan sebuah tool; mengembalikan status queued/skipped per bundle
POST/api/v1/admin/features/:bundleId/uninstallAdmin (features:manage)Hapus bundle fitur dan bersihkan file model
GET/api/v1/admin/features/disk-usageAdmin (features:manage)Dapatkan total penggunaan disk oleh model AI
POST/api/v1/admin/features/importAdmin (features:manage)Impor arsip bundle AI offline

Operasi Admin

Endpoint operasional untuk observabilitas, dukungan, pelaporan penggunaan, dan status pencadangan.

MethodPathAksesDeskripsi
GET/api/v1/admin/log-levelAdmin (settings:write)Baca tingkat log runtime saat ini
POST/api/v1/admin/log-levelAdmin (settings:write)Ubah tingkat log runtime (fatal, error, warn, info, debug, trace, atau silent)
GET/api/v1/metricsAdmin (system:health)Metrik Prometheus dalam format teks
GET/api/v1/admin/support-bundleAdmin (system:health)Unduh ZIP bundle dukungan diagnostik yang disunting
GET/api/v1/admin/usageAdmin (audit:read)Data dasbor penggunaan, dengan parameter query days opsional
GET/api/v1/admin/backup-statusAdmin (system:health)Baca metadata pencadangan terakhir dan status kesegaran
POST/api/v1/admin/backup-statusAdmin (system:health)Catat pencadangan yang selesai (type, sizeBytes opsional, notes opsional)

API Enterprise

Rute ini dibatasi lisensi oleh fitur enterprise terkaitnya. Rute ini tetap memerlukan izin SnapOtter yang tercantum.

MethodPathAksesDeskripsi
GET/api/v1/enterprise/audit/exportAdmin (audit:read)Ekspor entri audit sebagai JSON atau CSV dengan filter
GET/api/v1/enterprise/config/exportAdmin (system:health)Ekspor konfigurasi instans, peran kustom, dan tim yang disunting
POST/api/v1/enterprise/config/importAdmin (system:health)Impor konfigurasi, dengan dry run opsional
GET/api/v1/enterprise/ip-allowlistAdmin (security:manage)Baca allowlist CIDR yang dikonfigurasi
PUT/api/v1/enterprise/ip-allowlistAdmin (security:manage)Perbarui allowlist CIDR dengan pencegahan penguncian diri
GET/api/v1/enterprise/legal-holdAdmin (compliance:manage)Daftar legal hold pengguna dan tim
PUT/api/v1/enterprise/legal-holdAdmin (compliance:manage)Terapkan atau lepaskan legal hold pada pengguna atau tim
POST/api/v1/enterprise/scim/tokenAdmin (users:manage)Hasilkan token bearer SCIM, dikembalikan sekali
DELETE/api/v1/enterprise/scim/tokenAdmin (users:manage)Cabut token bearer SCIM saat ini
GET/api/v1/enterprise/siem/configAdmin (webhooks:manage)Baca konfigurasi penerusan SIEM
PUT/api/v1/enterprise/siem/configAdmin (webhooks:manage)Perbarui konfigurasi penerusan SIEM
GET/api/v1/enterprise/webhooksAdmin (webhooks:manage)Daftar tujuan webhook
POST/api/v1/enterprise/webhooksAdmin (webhooks:manage)Buat tujuan webhook
PUT/api/v1/enterprise/webhooks/:indexAdmin (webhooks:manage)Perbarui tujuan webhook
DELETE/api/v1/enterprise/webhooks/:indexAdmin (webhooks:manage)Hapus tujuan webhook
POST/api/v1/enterprise/webhooks/:index/testAdmin (webhooks:manage)Kirim payload webhook uji
POST/api/v1/enterprise/users/:id/exportAdmin (compliance:manage)Mulai job ekspor pengguna GDPR
GET/api/v1/enterprise/users/:id/export/:jobIdAdmin (compliance:manage)Baca status ekspor GDPR dan URL unduhan
DELETE/api/v1/enterprise/users/:id/purgeAdmin (compliance:manage)Hapus permanen data pengguna setelah konfirmasi
DELETE/api/v1/enterprise/teams/:id/purgeAdmin (compliance:manage)Hapus permanen data tim setelah konfirmasi
GET/api/v1/admin/versionAdmin (system:health)Baca metadata versi app, build, Node, dan skema
GET/api/v1/admin/migrations/pendingAdmin (system:health)Bandingkan migrasi yang dipaketkan dengan migrasi yang diterapkan
GET/api/v1/admin/upgrade-checkAdmin (system:health)Jalankan pemeriksaan kesiapan pemutakhiran

SCIM 2.0

Endpoint penemuan SCIM bersifat publik. Endpoint pengguna dan grup memerlukan token bearer SCIM yang dihasilkan di atas.

MethodPathAksesDeskripsi
GET/api/v1/scim/v2/ServiceProviderConfigPublikKapabilitas server SCIM
GET/api/v1/scim/v2/SchemasPublikPenemuan skema SCIM
GET/api/v1/scim/v2/ResourceTypesPublikPenemuan tipe sumber daya SCIM
GET/api/v1/scim/v2/UsersToken SCIMDaftar pengguna, dengan filter SCIM opsional
POST/api/v1/scim/v2/UsersToken SCIMBuat pengguna
GET/api/v1/scim/v2/Users/:idToken SCIMDapatkan pengguna
PUT/api/v1/scim/v2/Users/:idToken SCIMGanti pengguna
DELETE/api/v1/scim/v2/Users/:idToken SCIMNonaktifkan lunak pengguna
GET/api/v1/scim/v2/GroupsToken SCIMDaftar tim sebagai grup SCIM
POST/api/v1/scim/v2/GroupsToken SCIMBuat tim
GET/api/v1/scim/v2/Groups/:idToken SCIMDapatkan tim
PUT/api/v1/scim/v2/Groups/:idToken SCIMGanti tim dan keanggotaan grup
DELETE/api/v1/scim/v2/Groups/:idToken SCIMHapus tim

Template Meme

API pendukung untuk tool generator meme.

MethodPathAksesDeskripsi
GET/api/v1/meme-templatesAuthDaftar semua template meme yang tersedia dengan posisi kotak teks
GET/api/v1/meme-templates/full/:filenameAuthSajikan gambar template ukuran penuh
GET/api/v1/meme-templates/thumbs/:filenameAuthSajikan thumbnail template
GET/api/v1/meme-templates/fonts/:filenameAuthSajikan file font yang digunakan untuk render teks meme

Response Kesalahan

Semua kesalahan mengembalikan JSON:

json
{
  "error": "Human-readable message",
  "code": "MACHINE_READABLE_CODE"
}
StatusArti
400Request tidak valid / validasi gagal
401Tidak terautentikasi
403Izin tidak mencukupi
404Sumber daya tidak ditemukan
413File terlalu besar (lihat MAX_UPLOAD_SIZE_MB)
422Pemrosesan gagal setelah validasi
429Terkena batas laju (lihat RATE_LIMIT_PER_MIN)
501Bundle fitur AI yang diperlukan tidak terpasang (FEATURE_NOT_INSTALLED)
500Kesalahan server internal