Цю сторінку перекладено машинним способом. Помітили помилку?Допоможіть її покращити.
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 (tool routes are POST multipart)
curl -X POST http://localhost:1349/api/v1/tools/image/resize \
  -H "Authorization: Bearer <session-token>" \
  -F "file=@photo.jpg" \
  -F 'settings={"width":800}'

Сесії завершуються через 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 -X POST http://localhost:1349/api/v1/tools/image/resize \
  -H "Authorization: Bearer si_<your-key>" \
  -F "file=@photo.jpg" \
  -F 'settings={"width":800}'

Ключі мають префікс 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Автентиф.Підтвердження реєстрації MFA кодом TOTP
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ПублічнийXML метаданих SAML SP, коли SAML увімкнено
GET/api/auth/saml/loginПублічнийПочаток входу SAML
POST/api/auth/saml/callbackПублічнийСлужба споживача твердження SAML

Коли для користувача ввімкнено MFA, POST /api/auth/login повертає {"requiresMfa":true,"mfaToken":"..."} замість токена сесії. Надішліть цей 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, якщо його налаштовано. Повертає 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 "file=@input.jpg" \
  -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 "files=@a.jpg" \
  -F "files=@b.jpg" \
  -F 'settings={...}'

<section> є одним з image, video, audio, pdf або files.

  • Завантаження здійснюється через multipart/form-data.
  • settings є JSON-рядком з опціями, специфічними для інструмента.
  • clientJobId є необов'язковим полем форми для наданого викликачем співвіднесення прогресу.
  • fileId є необов'язковим полем форми, що посилається на наявний елемент бібліотеки файлів. Коли воно присутнє, оброблений результат зберігається як нова версія, а відповідь містить savedFileId.
  • Швидкі інструменти зазвичай повертають JSON зі статусом 200: {"jobId":"...","downloadUrl":"/api/v1/download/<jobId>/<filename>","originalSize":1234,"processedSize":567}. Отримайте оброблений файл з downloadUrl.
  • Будь-який поставлений у чергу інструмент може повернути JSON зі статусом 202, якщо він тривалий або перевищує вікно синхронного очікування: {"jobId":"...","async":true}. Підключіться до SSE для відстеження прогресу, а потім завантажте результат після завершення (див. Відстеження прогресу).
  • Пакетні маршрути повертають ZIP-архів, що передається напряму (із заголовком X-Job-Id), для інструментів, зареєстрованих у загальному пакетному реєстрі.

Довідник інструментів

Пресети конвертації

Спільний каталог містить 83 виділені кінцеві точки пресетів конвертації, як-от jpg-to-png, mov-to-mp4, m4a-to-mp3, pdf-to-jpg і excel-to-csv. Пресети є повноцінними маршрутами інструментів:

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

Кожен пресет фіксує вихідний формат і делегує базовому інструменту, як-от convert, convert-video, extract-audio, convert-audio, image-to-pdf, pdf-to-image, svg-to-raster або convert-spreadsheet. Повну таблицю маршрутів і необов'язкові налаштування див. у Пресети конвертації.

Основне

ID інструментаНазваКлючові налаштування
resizeЗміна розміруwidth, height, fit (cover/contain/fill/inside/outside), percentage, withoutEnlargement, плюс 23 пресети для соцмереж
cropОбрізанняleft, top, width, height, unit (px/percent)
rotateОбертання і віддзеркаленняangle, horizontal (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), quality, maxWidth, maxHeight, progressive, stripMetadata
strip-metadataВидалення метаданих-
edit-metadataРедагування метаданихtitle, description, author, copyright, keywords, gps (lat/lon), dateTime
bulk-renameМасове перейменуванняpattern (підтримує {n}, {date}, {original}), startIndex, padding
image-to-pdfЗображення в PDFpageSize (A4/Letter/...), orientation, margin, targetSize ({value, unit})
faviconГенератор фавіконокpadding, backgroundColor, borderRadius - генерує всі стандартні розміри

Коригування

ID інструментаНазваКлючові налаштування
adjust-colorsКоригування кольорівbrightness, contrast, exposure, saturation, temperature, tint, hue, sharpness, red, green, blue, effect (none/grayscale/sepia/invert)
sharpeningРізкістьmethod (adaptive/unsharp-mask/high-pass), sigma, m1, m2, x1, y2, y3, amount, radius, threshold, strength, kernelSize (3/5), denoise (off/light/medium/strong)
replace-colorЗаміна кольоруsourceColor, targetColor (замінник), makeTransparent, tolerance
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), radius, softness, roundness, centerX, centerY

AI-інструменти

Усі AI-інструменти працюють на вашому обладнанні: CPU за замовчуванням або NVIDIA CUDA, коли доступний підтримуваний GPU NVIDIA. Прискорення на iGPU Intel/AMD через VA-API, Quick Sync або OpenCL наразі не підтримується для AI-інференсу. Інтернет не потрібен.

ID інструментаНазваAI-модельКлючові налаштування
remove-backgroundВидалення фонуrembg (BiRefNet / U2-Net)model, backgroundType (transparent/color/gradient/blur/image), backgroundColor, gradientColor1, gradientColor2, gradientAngle, blurEnabled, blurIntensity, shadowEnabled, shadowOpacity
upscaleМасштабування зображенняRealESRGANscale (2/4), model, faceEnhance, denoise, format, quality
erase-objectЛастик об'єктівLaMa (ONNX)Маска надсилається як друга частина файлу (ім'я поля mask), format, quality
ocrOCR / Вилучення текстуTesseract (швидкий); RapidOCR + PP-OCR ONNX (збалансований/найкращий)quality (швидкий/збалансований/найкращий), language, enhance
blur-facesРозмиття облич / PIIMediaPipeblurRadius, sensitivity
smart-cropРозумне обрізанняMediaPipe + 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-enhancementПокращення зображенняНа основі аналізуmode (auto/exposure/contrast/color/sharpness), strength
enhance-facesПокращення обличGFPGAN / CodeFormermodel (gfpgan/codeformer), strength, sensitivity, centerFace
colorizeAI-розфарбовуванняDDColorintensity, model
noise-removalВидалення шумуБагаторівневе шумозаглушенняtier (quick/balanced/quality/maximum), strength, detailPreservation, colorNoise, format, quality
red-eye-removalВидалення ефекту червоних очейОрієнтири обличчя + аналіз кольоруsensitivity, strength
restore-photoРеставрація фотоБагатокроковий конвеєрmode (auto/light/heavy), scratchRemoval, faceEnhancement, fidelity, denoise, denoiseStrength, colorize
passport-photoФото на паспортОрієнтири MediaPipeДвофазний процес. Аналіз використовує multipart file; генерація використовує JSON з countryCode, bgColor, printLayout (none/4x6/a4), орієнтирами, розмірами зображення
content-aware-resizeЗміна розміру з урахуванням вмістуВиріз швів (caire)width, height, protectFaces, blurRadius, sobelThreshold, square
transparency-fixerВиправлення прозорості PNGBiRefNet HR-mattingdefringe (0-100), outputFormat (png/webp)
background-replaceЗаміна фонуrembg (BiRefNet)backgroundType (color/gradient), color (hex), gradientColor1, gradientColor2, gradientAngle, feather (0-20), format (png/webp)
blur-backgroundРозмиття фонуrembg (BiRefNet)intensity (1-100), feather (0-20), format (png/webp)
ai-canvas-expandAI-розширення полотнаLaMa (outpainting)extendTop, extendRight, extendBottom, extendLeft (px), tier (fast/balanced/high), format, quality

Водяні знаки й накладення

ID інструментаНазваКлючові налаштування
watermark-textТекстовий водяний знакtext, font, fontSize, color, opacity, position, rotation, tile
watermark-imageВодяний знак зображеннямopacity, position, scale - другий файл є водяним знаком
text-overlayНакладення текстуtext, font, fontSize, color, x, y, background, padding, borderRadius
composeКомпозиція зображеньx, y, opacity, blend - другий файл накладається зверху
meme-generatorГенератор мемівtemplateId, 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. Підтримує режим шаблону (тіло JSON з templateId) або режим власного зображення (multipart з файлом).

Утиліти

ID інструментаНазваКлючові налаштування
infoІнформація про зображення- (повертає width, height, format, size, channels, hasAlpha, DPI, EXIF)
compareПорівняння зображеньmode (side-by-side/overlay/diff), diffThreshold - другий файл є ціллю порівняння
find-duplicatesПошук дублікатівthreshold (відстань перцептивного хешу, за замовчуванням 8) - багатофайловий
color-paletteПалітра кольорівcount (кількість домінантних кольорів), format (hex/rgb)
qr-generateГенератор QR-кодуdata, size, margin, colorDark, colorLight, errorCorrectionLevel, dotStyle, cornerStyle, logo (необов'язковий файл)
barcode-readЗчитувач штрихкодів- (автоматично розпізнає QR, EAN, Code128, DataMatrix тощо)
image-to-base64Зображення в Base64format (data-uri/plain), mimeType
html-to-imageHTML у зображенняurl, format (png/jpg/webp), quality, fullPage, devicePreset (desktop/tablet/mobile/custom), viewportWidth, viewportHeight
histogramГістограмаscale (linear/log) - повертає діаграму RGB-гістограми + статистику по кожному каналу
lqip-placeholderLQIP-заповнювачwidth (4-64), blur, strategy (blur/pixelate/solid), format (webp/png/jpeg), quality
barcode-generateГенератор штрихкодівtext, type (code128/ean13/upca/code39/itf14/datamatrix), scale (1-8), includeText (bool). Тіло JSON, без завантаження файлу.

Компонування й композиція

ID інструментаНазваКлючові налаштування
collageКолаж / Сіткаtemplate (25+ макетів), gap, backgroundColor, borderRadius - багатофайловий
stitchЗшивання / Об'єднанняdirection (horizontal/vertical/grid), gap, backgroundColor, alignment - багатофайловий
splitРозділення зображенняmode (grid/rows/cols), rows, cols, tileWidth, tileHeight
borderРамка й обрамленняwidth, color, style (solid/gradient/pattern), borderRadius, padding, shadow
beautifyПрикрашання скріншотаbackgroundType (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-cropКругле обрізанняzoom (1-5), offsetX, offsetY, borderWidth, borderColor, background (transparent/hex), outputSize
image-padЗаповнення зображенняtarget (16:9/9:16/1:1/4:3/3:4/custom), ratioW, ratioH, background (color/transparent/blur), color (hex), padding (0-50%)
sprite-sheetСпрайт-листcolumns (1-16), padding, background (hex), format (png/webp/jpeg), quality - багатофайловий (2-64 зображення)

Формат і конвертація

ID інструментаНазваКлючові налаштування
svg-to-rasterSVG у растрformat (png/jpeg/webp/avif/tiff/gif/heif), width, height, scale, dpi, background
vectorizeЗображення в SVGcolorMode (bw/color), threshold, colorPrecision, filterSpeckle, pathMode (none/polygon/spline)
gif-toolsGIF-інструментиaction (resize/optimize/reverse/speed/extract-frames/rotate/add-text), параметри, специфічні для дії
gif-webpКонвертер GIF/WebPquality (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Обрізання відеоstartS, endS, precise (bool, покадрово точний виріз)
mute-videoВимкнення звуку відео-
video-to-gifВідео в GIFfps (1-30), width, startS, durationS (макс. 60 с)
resize-videoЗміна розміру відеоwidth, height, preset (custom/2160p/1440p/1080p/720p/480p/360p)
crop-videoОбрізання відео за краямиwidth, height, x, y
rotate-videoОбертання відеоtransform (cw90/ccw90/180/hflip/vflip)
change-fpsЗміна FPSfps (1-120)
video-colorКолір відеоbrightness, contrast, saturation, gamma
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Водяний знак на відеоtext, position, fontSize, opacity, color
stabilize-videoСтабілізація відеоsmoothing (5-60, у кадрах)
gif-to-videoGIF у відеоformat (mp4/webm/mov)
video-to-webpВідео в WebPfps, width, quality, loop (bool)
video-to-framesВідео в кадриmode (all/nth/timestamps), n, timestamps, format (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Обрізання аудіоstartS, endS
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), segmentS, parts, thresholdDb, minSilenceS
ringtone-makerСтворення рінгтонаstartS, durationS (1-30)
waveform-imageЗображення хвиліwidth, height, color (hex)
audio-metadataМетадані аудіоstrip (bool), title, artist, album
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), range, everyN (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Захист PDFuserPassword, ownerPassword (AES-256)
unlock-pdfРозблокування PDFpassword
repair-pdfВідновлення PDF-
linearize-pdfВеб-оптимізація PDF- (лінеаризація для швидкого перегляду у вебі)
grayscale-pdfPDF у відтінках сірого-
pdfa-convertКонвертація в PDF/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-pdfВодяний знак PDFtext, position, fontSize, opacity, rotation
pdf-page-numbersНомери сторінок PDFposition (bl/bc/br/tl/tc/tr), fontSize
flatten-pdfЗведення PDF- (запікає форми й анотації)
redact-pdfРедагування PDFterms (string[]), caseSensitive (bool)
sign-pdfПідпис PDFВласний multipart-маршрут з PDF file, файлами підписів sig0, sig1 і JSON-масивом placements
pdf-to-textPDF у текст-
pdf-to-wordPDF у Word-
pdf-metadataМетадані PDFtitle, author, subject, keywords
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), format, dpi, quality
pdf-to-jpgPDF у JPGpages, dpi, quality, colorMode
pdf-to-pngPDF у PNGpages, dpi, quality, colorMode
pdf-to-tiffPDF у TIFFpages, dpi, quality, colorMode

Файлові інструменти

ID інструментаНазваКлючові налаштування
chart-makerСтворення діаграмkind (bar/line/pie), title, width, height
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 у CSVвиділений пресет конвертації на основі convert-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"Вихідний формат: jpg, png, webp
qualitynumber90Якість 1-100 (лише JPG/WebP)
fullPagebooleanfalseЗахоплення всієї прокручуваної сторінки
devicePresetstring"desktop"desktop, tablet, mobile, custom
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Отримати метадані PDF для виділеного пресета JPG
POST/api/v1/tools/pdf/pdf-to-jpg/previewЗгенерувати попередній перегляд сторінки PDF для пресета JPG
POST/api/v1/tools/pdf/pdf-to-png/infoОтримати метадані PDF для виділеного пресета PNG
POST/api/v1/tools/pdf/pdf-to-png/previewЗгенерувати попередній перегляд сторінки PDF для пресета PNG
POST/api/v1/tools/pdf/pdf-to-tiff/infoОтримати метадані PDF для виділеного пресета TIFF
POST/api/v1/tools/pdf/pdf-to-tiff/previewЗгенерувати попередній перегляд сторінки PDF для пресета TIFF
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-у-зображення, використовують власний контракт кінцевої точки замість загального маршруту /batch.

Інструмент ocr-pdf підтримує цей загальний маршрут /batch.

bash
curl -X POST http://localhost:1349/api/v1/tools/image/compress/batch \
  -H "Authorization: Bearer <token>" \
  -F "files=@a.jpg" \
  -F "files=@b.jpg" \
  -F "files=@c.jpg" \
  -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 "file=@input.jpg" \
  -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 "files=@a.jpg" \
  -F "files=@b.jpg" \
  -F 'pipeline={"steps":[{"toolId":"resize","settings":{"width":800}}]}'

Вихід кожного кроку є входом наступного кроку. Конвеєри дозволяють 20 кроків за замовчуванням, налаштовується через MAX_PIPELINE_STEPS. Встановіть MAX_PIPELINE_STEPS=0, щоб зняти обмеження.

Збереження конвеєрів і керування ними

МетодШляхОпис
POST/api/v1/pipeline/saveЗберегти іменований конвеєр (name, description, steps[])
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Отримати мініатюру JPEG 300px
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, офісного документа, відео чи аудіофайлу
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)Видалити команду (не можна видалити команду за замовчуванням або команди з учасниками)

Налаштування

Конфігурація середовища виконання використовує закритий набір розпізнаваних ключів. Для читання потрібен дозвіл settings:read, а для запису — settings:write; ключі безпеки та відповідності додатково вимагають security:manage або compliance:manage. Секретні налаштування вимагають повноважень повного адміністратора, а облікові дані та стан, якими керують спеціалізовані кінцеві точки, тут доступні лише для читання. Пакетні оновлення перевіряються до запису будь-якого значення.

МетодШляхОпис
GET/api/v1/settingsОтримати всі налаштування
PUT/api/v1/settingsМасове оновлення налаштувань (тіло JSON з парами ключ-значення)
GET/api/v1/settings/:keyОтримати конкретне налаштування за ключем

Приклади ключів: disabledTools (JSON-масив ідентифікаторів інструментів), enableExperimentalTools (логічне значення), loginAttemptLimit (політика безпеки) та auditRetentionDays (політика відповідності). Невідомі ключі відхиляються.

Уподобання

Уподобання окремих користувачів відокремлені від налаштувань екземпляра. Будь-який автентифікований користувач може читати й оновлювати власну карту уподобань.

МетодШляхОпис
GET/api/v1/preferencesОтримати уподобання поточного користувача як { "preferences": { ... } }
PUT/api/v1/preferencesВставити або оновити один чи кілька ключів уподобань для поточного користувача

Ролі

Керування власними ролями з детальними дозволами.

МетодШляхДоступОпис
GET/api/v1/rolesАдмін (audit:read)Список усіх ролей з кількістю користувачів
POST/api/v1/rolesАдмін (security:manage)Створити власну роль (name, description, permissions)
PUT/api/v1/roles/:idАдмін (security:manage)Оновити власну роль (не можна змінювати вбудовані ролі)
DELETE/api/v1/roles/:idАдмін (security:manage)Видалити власну роль (не можна видаляти вбудовані ролі; постраждалі користувачі повертаються до ролі user)

Доступні дозволи (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.

Журнал аудиту

Кінцева точка лише для адміністраторів для перегляду дій, пов'язаних із безпекою.

МетодШляхДоступОпис
GET/api/v1/audit-logАдмін (audit:read)Журнал аудиту з розбивкою на сторінки з необов'язковими фільтрами

Параметри запиту:

ПараметрОпис
pageНомер сторінки (за замовчуванням: 1)
limitЗаписів на сторінку (за замовчуванням: 50, макс.: 100)
actionФільтр за типом дії (напр. ROLE_CREATED, ROLE_DELETED)
ipФільтр за IP-адресою джерела
fromФільтр записів після цієї дати ISO 8601
toФільтр записів до цієї дати ISO 8601

Аналітика

МетодШляхДоступОпис
GET/api/v1/config/analyticsПублічнийОтримати фактичну конфігурацію аналітики (ключ PostHog, Sentry DSN, частота вибірки). Ключі, DSN і ID екземпляра порожні, коли аналітику вимкнено, або через запікання під час компіляції, або через налаштування екземпляра analyticsEnabled.
POST/api/v1/feedbackАвтентиф.Надіслати явний відгук користувача до налаштованого проєкту PostHog як feedback_submitted. Маршрут дотримується шлюзу аналітики, обмежує швидкість подань, видаляє контактні поля, якщо contactOk не є true, і ніколи не приймає вмісту файлів, імен файлів, шляхів завантаження чи неопрацьованого приватного тексту помилок. Коли аналітику вимкнено, повертає { "ok": true, "accepted": false }.
PUT/api/v1/settingsАдмін (settings:write)Встановити відмову на рівні всього екземпляра. Надішліть тіло JSON { "analyticsEnabled": "false" }, щоб вимкнути аналітику для всіх, або "true", щоб знову її ввімкнути.

Можливості / AI-набори

Керування наборами AI-можливостей (встановлення/видалення пакетів AI-моделей у середовищі Docker). Віддавайте перевагу кінцевій точці встановлення на рівні інструмента, коли вмикаєте інструмент з власної автоматизації: деякі AI-інструменти потребують більш ніж одного спільного набору, а ця кінцева точка пропускає вже встановлені набори, ставлячи в чергу лише відсутні.

OCR — це додаткове розширення, а не жорстка залежність. Його рівень fast Tesseract працює без пакета; POST /api/v1/admin/features/ocr/install встановлює підписаний пакет RapidOCR для balanced і best на Linux amd64 або arm64. Точне середовище виконання OCR використовує CPU на хостах лише з процесором і NVIDIA і вимагає принаймні 4 GiB ефективної пам’яті (ліміт налаштованого контейнера cgroup, інакше пам’ять хосту). SnapOtter повідомляє requiredMemoryBytes, effectiveMemoryBytes і причину сумісності insufficient-memory і відхиляє несумісне встановлення перед завантаженням. Ця вимога до пам’яті не стосується fast. Пакет містить близько 208-234 MiB для завантаження та 409-488 MiB для встановлення, залежно від цілі; підписаний індекс прив’язує точні розміри, які застосовуються під час встановлення.

МетодШляхДоступОпис
GET/api/v1/featuresАвтентиф.Список усіх наборів можливостей та їхнього статусу встановлення
POST/api/v1/admin/features/:bundleId/installАдмін (features:manage)Встановити набір можливостей (асинхронно, повертає jobId для відстеження прогресу)
POST/api/v1/admin/tools/:toolId/features/installАдмін (features:manage)Встановити кожен набір, потрібний інструменту; повертає статус queued/skipped для кожного набору
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)Імпортуйте застарілий пакет штучного інтелекту (file) або підписаний автономний випуск OCR (index плюс archive)

Імпорт OCR із повітряним проміжком має містити підписаний ocr-runtime-index.json випуску та відповідний архів платформи. SnapOtter застосовує ті самі перевірки підпису Ed25519, хешу артефакту, сумісності, вилучення та димового тесту, які використовуються під час онлайн-інсталяції:

bash
curl -X POST http://localhost:1349/api/v1/admin/features/import \
  -H "Authorization: Bearer <admin-token>" \
  -F "index=@ocr-runtime-index.json" \
  -F "archive=@ocr-linux-amd64-cpu-py312.tar.gz"

Використовуйте архів linux-arm64-cpu-py311 на arm64. Підписаний артефакт для іншої цілі відхиляється, а не встановлюється.

Адміністративні операції

Операційні кінцеві точки для спостережуваності, підтримки, звітності про використання і стану резервного копіювання.

МетодШляхДоступОпис
GET/api/v1/admin/log-levelАдмін (settings:write)Прочитати поточний рівень журналювання середовища виконання
POST/api/v1/admin/log-levelАдмін (settings:write)Змінити рівень журналювання середовища виконання (fatal, error, warn, info, debug, trace або silent)
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.

Вбудований адміністратор із повними правами означає, що автентифікований суб’єкт має роль admin і повний набір фактичних дозволів адміністратора. Область дії ключа API, у якій відсутній хоча б один дозвіл адміністратора, не відповідає цій вимозі.

МетодШляхДоступОпис
GET/api/v1/enterprise/audit/exportАдмін (audit:read)Експортувати записи аудиту як JSON або CSV з фільтрами
GET/api/v1/enterprise/config/exportВбудований адміністратор із повними правамиЕкспортувати відредаговану конфігурацію екземпляра, власні ролі й команди
POST/api/v1/enterprise/config/importВбудований адміністратор із повними правамиІмпортувати конфігурацію, з необов'язковим пробним запуском
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)Згенерувати bearer-токен SCIM, повертається один раз
DELETE/api/v1/enterprise/scim/tokenАдмін (users:manage)Відкликати поточний bearer-токен 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)Список призначень вебхуків
POST/api/v1/enterprise/webhooksАдмін (webhooks:manage)Створити призначення вебхука
PUT/api/v1/enterprise/webhooks/:indexАдмін (webhooks:manage)Оновити призначення вебхука
DELETE/api/v1/enterprise/webhooks/:indexАдмін (webhooks:manage)Видалити призначення вебхука
POST/api/v1/enterprise/webhooks/:index/testАдмін (webhooks:manage)Надіслати тестове корисне навантаження вебхука
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 і схеми
GET/api/v1/admin/migrations/pendingАдмін (system:health)Порівняти упаковані міграції із застосованими міграціями
GET/api/v1/admin/upgrade-checkАдмін (system:health)Запустити перевірки готовності до оновлення

SCIM 2.0

Кінцеві точки виявлення SCIM є публічними. Кінцеві точки користувачів і груп потребують bearer-токена SCIM, згенерованого вище.

МетодШляхДоступОпис
GET/api/v1/scim/v2/ServiceProviderConfigПублічнийМожливості сервера SCIM
GET/api/v1/scim/v2/SchemasПублічнийВиявлення схеми SCIM
GET/api/v1/scim/v2/ResourceTypesПублічнийВиявлення типів ресурсів SCIM
GET/api/v1/scim/v2/UsersТокен SCIMСписок користувачів, з необов'язковим фільтром SCIM
POST/api/v1/scim/v2/UsersТокен SCIMСтворити користувача
GET/api/v1/scim/v2/Users/:idТокен SCIMОтримати користувача
PUT/api/v1/scim/v2/Users/:idТокен SCIMЗамінити користувача
DELETE/api/v1/scim/v2/Users/:idТокен SCIMМ'яко деактивувати користувача
GET/api/v1/scim/v2/GroupsТокен SCIMСписок команд як груп SCIM
POST/api/v1/scim/v2/GroupsТокен SCIMСтворити команду
GET/api/v1/scim/v2/Groups/:idТокен SCIMОтримати команду
PUT/api/v1/scim/v2/Groups/:idТокен SCIMЗамінити команду і членство в групі
DELETE/api/v1/scim/v2/Groups/:idТокен SCIMВидалити команду

Шаблони мемів

Допоміжний 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Внутрішня помилка сервера