Search K
REST API-referentie
Interactieve API-documentatie met voorbeelden van requests en responses is beschikbaar op http://localhost:1349/api/docs.
Machineleesbare specificaties:
/api/v1/openapi.yaml- OpenAPI 3.1-spec/llms.txt- LLM-vriendelijke samenvatting/llms-full.txt- Volledige LLM-vriendelijke documentatie
Authenticatie
Alle endpoints vereisen authenticatie, tenzij AUTH_ENABLED=false.
Sessietoken
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>"Sessies verlopen na 7 dagen (configureerbaar via SESSION_DURATION_HOURS).
API-sleutels
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>"Sleutels krijgen het voorvoegsel si_ en worden opgeslagen als scrypt-hashes. De ruwe sleutel wordt eenmaal getoond en is daarna nooit meer op te vragen.
Auth-endpoints
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
POST | /api/auth/login | Publiek | Inloggen, sessietoken ophalen |
POST | /api/auth/logout | Auth | Huidige sessie beëindigen |
GET | /api/auth/session | Auth | Huidige sessie valideren |
POST | /api/auth/change-password | Auth | Eigen wachtwoord wijzigen (maakt alle andere sessies + API-sleutels ongeldig) |
GET | /api/auth/users | Admin | Alle gebruikers weergeven |
POST | /api/auth/register | Admin | Een nieuwe gebruiker aanmaken |
PUT | /api/auth/users/:id | Admin | Rol of team van gebruiker bijwerken |
POST | /api/auth/users/:id/reset-password | Admin | Wachtwoord van gebruiker opnieuw instellen |
DELETE | /api/auth/users/:id | Admin | Een gebruiker verwijderen |
GET | /api/v1/config/auth | Publiek | Controleren of authenticatie is ingeschakeld ({ authEnabled: bool }) |
POST | /api/auth/mfa/enroll | Auth | TOTP MFA-registratie starten. Vereist de enterprise-functie mfa |
POST | /api/auth/mfa/verify | Auth | MFA-registratie bevestigen met een TOTP-code |
POST | /api/auth/mfa/complete | Publiek | Een openstaande MFA-inlogverificatie voltooien |
POST | /api/auth/mfa/disable | Auth | MFA uitschakelen voor de huidige gebruiker |
POST | /api/auth/users/:id/mfa/reset | Admin (users:manage) | MFA opnieuw instellen voor een gebruiker |
GET | /api/auth/oidc/login | Publiek | OIDC-login starten wanneer OIDC is ingeschakeld |
GET | /api/auth/oidc/callback | Publiek | OIDC-autorisatiecallback |
GET | /api/auth/saml/metadata | Publiek | SAML SP-metadata-XML wanneer SAML is ingeschakeld |
GET | /api/auth/saml/login | Publiek | SAML-login starten |
POST | /api/auth/saml/callback | Publiek | SAML assertion consumer service |
Wanneer MFA is ingeschakeld voor een gebruiker, retourneert POST /api/auth/login een {"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false} in plaats van een sessietoken. Stuur die mfaToken samen met een TOTP- of herstelcode naar /api/auth/mfa/complete.
Permissies
| Permissie | Admin | Gebruiker |
|---|---|---|
| Tools gebruiken | ✓ | ✓ |
| Eigen bestanden/pipelines/API-sleutels | ✓ | ✓ |
| Bestanden/pipelines/sleutels van alle gebruikers bekijken | ✓ | - |
| Instellingen schrijven | ✓ | - |
| Gebruikers & teams beheren | ✓ | - |
| Branding beheren | ✓ | - |
Health check
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/health | Publiek | Basale health check. Retourneert {"status":"healthy","version":"..."} met 200, of {"status":"unhealthy"} met 503 als de database onbereikbaar is. |
GET | /api/v1/readyz | Publiek | Readiness-probe. Controleert PostgreSQL, Redis, schijfruimte en S3 indien geconfigureerd. Retourneert 503 wanneer de instance geen verkeer zou moeten ontvangen. |
GET | /api/v1/admin/health | Admin (system:health) | Gedetailleerde diagnostiek, inclusief uptime, opslagmodus, databasestatus, queue-status en GPU-beschikbaarheid. |
Tools gebruiken
Elke tool volgt hetzelfde patroon:
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> is een van image, video, audio, pdf of files.
- Uploaden gebeurt met
multipart/form-data. settingsis een JSON-string met tool-specifieke opties.clientJobIdis een optioneel formulierveld voor door de aanroeper aangeleverde voortgangscorrelatie.fileIdis een optioneel formulierveld dat verwijst naar een bestaand item in de bestandsbibliotheek. Wanneer aanwezig, wordt de verwerkte uitvoer opgeslagen als een nieuwe versie en bevat de responsesavedFileId.- Snelle tools retourneren meestal 200 JSON:
{"jobId":"...","downloadUrl":"/api/v1/download/<jobId>/<filename>","originalSize":1234,"processedSize":567}. Haal het verwerkte bestand op viadownloadUrl. - Elke tool in de wachtrij kan 202 JSON retourneren als deze langlopend is of het synchrone wachtvenster overschrijdt:
{"jobId":"...","async":true}. Verbind met SSE voor voortgang en download bij voltooiing (zie Voortgang volgen). - Batch-routes retourneren een ZIP-archief dat rechtstreeks wordt gestreamd (met
X-Job-Id-header) voor tools die zijn geregistreerd in het generieke batchregister.
Tools-referentie
Conversiepresets
De gedeelde catalogus bevat 83 speciale conversiepreset-endpoints zoals jpg-to-png, mov-to-mp4, m4a-to-mp3, pdf-to-jpg en excel-to-csv. Presets zijn eersteklas tool-routes:
POST /api/v1/tools/<section>/<presetId>
Elke preset vergrendelt het uitvoerformaat en delegeert naar een basistool zoals convert, convert-video, extract-audio, convert-audio, image-to-pdf, pdf-to-image, svg-to-raster of convert-spreadsheet. Zie Conversiepresets voor de volledige routetabel en optionele instellingen.
Essentials
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
resize | Formaat wijzigen | width, height, fit (cover/contain/fill/inside/outside), percentage, withoutEnlargement, plus 23 social media-presets |
crop | Bijsnijden | left, top, width, height, unit (px/percent) |
rotate | Roteren & spiegelen | angle, horizontal (bool), vertical (bool) |
convert | Converteren | format (jpg/png/webp/avif/tiff/gif/heic/heif), quality |
compress | Comprimeren | mode (quality/targetSize), quality (1–100), targetSizeKb |
Optimalisatie
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
optimize-for-web | Optimaliseren voor web | format (webp/jpeg/avif/png), quality, maxWidth, maxHeight, progressive, stripMetadata |
strip-metadata | Metadata verwijderen | - |
edit-metadata | Metadata bewerken | title, description, author, copyright, keywords, gps (lat/lon), dateTime |
bulk-rename | Bulk hernoemen | pattern (ondersteunt {n}, {date}, {original}), startIndex, padding |
image-to-pdf | Afbeelding naar PDF | pageSize (A4/Letter/...), orientation, margin, targetSize ({value, unit}) |
favicon | Favicon-generator | padding, backgroundColor, borderRadius - genereert alle standaardformaten |
Aanpassingen
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
adjust-colors | Kleuren aanpassen | brightness, contrast, exposure, saturation, temperature, tint, hue, sharpness, red, green, blue, effect (none/grayscale/sepia/invert) |
sharpening | Verscherpen | 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 | Kleur vervangen | sourceColor, targetColor (vervanging), makeTransparent, tolerance |
color-blindness | Kleurenblindheidssimulatie | simulationType (protanopia/deuteranopia/tritanopia/protanomaly/deuteranomaly/tritanomaly/achromatopsia/blueConeMonochromacy, standaard "deuteranomaly") |
duotone | Duotone | shadow (hex), highlight (hex), intensity (0-100) |
pixelate | Pixeleren | blockSize (2-128), region ({left, top, width, height} voor gedeeltelijke pixelering) |
vignette | Vignet | strength (0.1-1), color (hex), radius, softness, roundness, centerX, centerY |
AI-tools
Alle AI-tools draaien op je eigen hardware: standaard op CPU, of op NVIDIA CUDA wanneer een ondersteunde NVIDIA-GPU beschikbaar is. Intel/AMD-iGPU-versnelling via VA-API, Quick Sync of OpenCL wordt momenteel niet ondersteund voor AI-inferentie. Geen internet vereist.
| Tool-ID | Naam | AI-model | Belangrijkste instellingen |
|---|---|---|---|
remove-background | Achtergrond verwijderen | rembg (BiRefNet / U2-Net) | model, backgroundType (transparent/color/gradient/blur/image), backgroundColor, gradientColor1, gradientColor2, gradientAngle, blurEnabled, blurIntensity, shadowEnabled, shadowOpacity |
upscale | Afbeelding upscalen | RealESRGAN | scale (2/4), model, faceEnhance, denoise, format, quality |
erase-object | Objectgum | LaMa (ONNX) | Masker verzonden als tweede bestandsdeel (veldnaam mask), format, quality |
ocr | OCR / Tekstextractie | PaddleOCR / Tesseract | quality (fast/balanced/best), language, enhance |
blur-faces | Gezicht / PII vervagen | MediaPipe | blurRadius, sensitivity |
smart-crop | Slim bijsnijden | MediaPipe + Sharp | mode (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 | Afbeelding verbeteren | Op analyse gebaseerd | mode (auto/exposure/contrast/color/sharpness), strength |
enhance-faces | Gezicht verbeteren | GFPGAN / CodeFormer | model (gfpgan/codeformer), strength, sensitivity, centerFace |
colorize | AI-inkleuring | DDColor | intensity, model |
noise-removal | Ruis verwijderen | Getrapte ruisonderdrukking | tier (quick/balanced/quality/maximum), strength, detailPreservation, colorNoise, format, quality |
red-eye-removal | Rode ogen verwijderen | Gezichtslandmark + kleuranalyse | sensitivity, strength |
restore-photo | Fotorestauratie | Meerstaps-pipeline | mode (auto/light/heavy), scratchRemoval, faceEnhancement, fidelity, denoise, denoiseStrength, colorize |
passport-photo | Pasfoto | MediaPipe-landmarks | Tweefasige flow. Analyse gebruikt multipart file; genereren gebruikt JSON met countryCode, bgColor, printLayout (none/4x6/a4), landmarks, afbeeldingsafmetingen |
content-aware-resize | Content-Aware Resize | Seam carving (caire) | width, height, protectFaces, blurRadius, sobelThreshold, square |
transparency-fixer | PNG-transparantiehersteller | BiRefNet HR-matting | defringe (0-100), outputFormat (png/webp) |
background-replace | Achtergrond vervangen | rembg (BiRefNet) | backgroundType (color/gradient), color (hex), gradientColor1, gradientColor2, gradientAngle, feather (0-20), format (png/webp) |
blur-background | Achtergrond vervagen | rembg (BiRefNet) | intensity (1-100), feather (0-20), format (png/webp) |
ai-canvas-expand | AI-canvas uitbreiden | LaMa (outpainting) | extendTop, extendRight, extendBottom, extendLeft (px), tier (fast/balanced/high), format, quality |
Watermerk & overlay
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
watermark-text | Tekstwatermerk | text, font, fontSize, color, opacity, position, rotation, tile |
watermark-image | Afbeeldingswatermerk | opacity, position, scale - het tweede bestand is het watermerk |
text-overlay | Tekstoverlay | text, font, fontSize, color, x, y, background, padding, borderRadius |
compose | Afbeeldingscompositie | x, y, opacity, blend - het tweede bestand wordt bovenop gelegd |
meme-generator | 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. Ondersteunt sjabloonmodus (JSON-body met templateId) of aangepaste afbeeldingsmodus (multipart met bestand). |
Hulpmiddelen
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
info | Afbeeldingsinfo | - (retourneert width, height, format, size, channels, hasAlpha, DPI, EXIF) |
compare | Afbeeldingen vergelijken | mode (side-by-side/overlay/diff), diffThreshold - het tweede bestand is het vergelijkingsdoel |
find-duplicates | Duplicaten zoeken | threshold (perceptuele hash-afstand, standaard 8) - meerdere bestanden |
color-palette | Kleurenpalet | count (aantal dominante kleuren), format (hex/rgb) |
qr-generate | QR-codegenerator | data, size, margin, colorDark, colorLight, errorCorrectionLevel, dotStyle, cornerStyle, logo (optioneel bestand) |
barcode-read | Barcodelezer | - (detecteert automatisch QR, EAN, Code128, DataMatrix, enz.) |
image-to-base64 | Afbeelding naar Base64 | format (data-uri/plain), mimeType |
html-to-image | HTML naar afbeelding | url, format (png/jpg/webp), quality, fullPage, devicePreset (desktop/tablet/mobile/custom), viewportWidth, viewportHeight |
histogram | Histogram | scale (linear/log) - retourneert een RGB-histogramgrafiek + statistieken per kanaal |
lqip-placeholder | LQIP-placeholder | width (4-64), blur, strategy (blur/pixelate/solid), format (webp/png/jpeg), quality |
barcode-generate | Barcodegenerator | text, type (code128/ean13/upca/code39/itf14/datamatrix), scale (1-8), includeText (bool). JSON-body, geen bestandsupload. |
Layout & compositie
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
collage | Collage / raster | template (25+ layouts), gap, backgroundColor, borderRadius - meerdere bestanden |
stitch | Aan elkaar plakken / combineren | direction (horizontal/vertical/grid), gap, backgroundColor, alignment - meerdere bestanden |
split | Afbeelding opsplitsen | mode (grid/rows/cols), rows, cols, tileWidth, tileHeight |
border | Rand & kader | width, color, style (solid/gradient/pattern), borderRadius, padding, shadow |
beautify | Screenshot verfraaien | 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 | Cirkelvormig bijsnijden | zoom (1-5), offsetX, offsetY, borderWidth, borderColor, background (transparent/hex), outputSize |
image-pad | Afbeelding opvullen | 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 | Sprite sheet | columns (1-16), padding, background (hex), format (png/webp/jpeg), quality - meerdere bestanden (2-64 afbeeldingen) |
Formaat & conversie
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
svg-to-raster | SVG naar raster | format (png/jpeg/webp/avif/tiff/gif/heif), width, height, scale, dpi, background |
vectorize | Afbeelding naar SVG | colorMode (bw/color), threshold, colorPrecision, filterSpeckle, pathMode (none/polygon/spline) |
gif-tools | GIF-tools | action (resize/optimize/reverse/speed/extract-frames/rotate/add-text), actie-specifieke parameters |
gif-webp | GIF/WebP-converter | quality (1-100), lossless (bool), resizePercent (10-100) |
Videotools
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
convert-video | Video converteren | format (mp4/mov/webm/avi/mkv), quality (high/balanced/small) |
compress-video | Video comprimeren | quality (light/balanced/strong), resolution (original/1080p/720p/480p) |
trim-video | Video inkorten | startS, endS, precise (bool, frame-nauwkeurige knip) |
mute-video | Video dempen | - |
video-to-gif | Video naar GIF | fps (1-30), width, startS, durationS (max 60s) |
resize-video | Videoformaat wijzigen | width, height, preset (custom/2160p/1440p/1080p/720p/480p/360p) |
crop-video | Video bijsnijden | width, height, x, y |
rotate-video | Video roteren | transform (cw90/ccw90/180/hflip/vflip) |
change-fps | FPS wijzigen | fps (1-120) |
video-color | Videokleur | brightness, contrast, saturation, gamma |
video-speed | Videosnelheid | factor (0.25-4), keepPitch (bool) |
reverse-video | Video omkeren | - (max 5 minuten) |
video-loudnorm | Audio normaliseren | - (EBU R128) |
aspect-pad | Aspect-opvulling | target (16:9/9:16/1:1/4:3/3:4), color (hex) |
blur-pad | Blur-opvulling | target (16:9/9:16/1:1/4:3/3:4), blur (2-50) |
watermark-video | Video van watermerk voorzien | text, position, fontSize, opacity, color |
stabilize-video | Video stabiliseren | smoothing (5-60, in frames) |
gif-to-video | GIF naar video | format (mp4/webm/mov) |
video-to-webp | Video naar WebP | fps, width, quality, loop (bool) |
video-to-frames | Video naar frames | mode (all/nth/timestamps), n, timestamps, format (png/jpg) |
merge-videos | Video's samenvoegen | - (meerdere bestanden, genormaliseerd naar de resolutie van de eerste video) |
replace-audio | Audio vervangen | - (video- + audiobestand, twee bestanden) |
burn-subtitles | Ondertitels inbranden | fontSize (8-72) - video- + ondertitelbestand |
embed-subtitles | Ondertitels insluiten | language (ISO 639-2/B-code) - video- + ondertitelbestand |
extract-subtitles | Ondertitels extraheren | - (levert SRT) |
images-to-video | Afbeeldingen naar video | secondsPerImage (0.5-10), resolution (1080p/720p/square), fps - meerdere bestanden |
video-metadata | Videometadata opschonen | - |
auto-subtitles | Automatische ondertitels (AI) | language (auto/en/de/fr/es/zh/ja/ko/id/th/vi), format (srt/vtt) |
extract-audio | Audio extraheren | format (mp3/wav/m4a/ogg) |
Audiotools
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
convert-audio | Audio converteren | format (mp3/wav/ogg/flac/m4a), bitrateKbps (32-320) |
trim-audio | Audio inkorten | startS, endS |
volume-adjust | Volume aanpassen | gainDb (-30 tot 30) |
normalize-audio | Audio normaliseren | - (EBU R128, -16 LUFS) |
fade-audio | Audio faden | fadeInS (0-30), fadeOutS (0-30) |
reverse-audio | Audio omkeren | - |
audio-speed | Audiosnelheid | factor (0.25-4) |
pitch-shift | Toonhoogte verschuiven | semitones (-12 tot 12) |
audio-channels | Audiokanalen | mode (stereo-to-mono/mono-to-stereo/swap) |
silence-removal | Stilte verwijderen | thresholdDb (-80 tot -20), minSilenceS (0.1-5) |
noise-reduction | Ruisonderdrukking | strength (light/medium/strong) |
merge-audio | Audio samenvoegen | format (mp3/wav/flac/m4a) - meerdere bestanden |
split-audio | Audio splitsen | mode (time/parts/silence), segmentS, parts, thresholdDb, minSilenceS |
ringtone-maker | Ringtone-maker | startS, durationS (1-30) |
waveform-image | Golfvormafbeelding | width, height, color (hex) |
audio-metadata | Audiometadata | strip (bool), title, artist, album |
transcribe-audio | Audio transcriberen (AI) | language (auto/en/de/fr/es/zh/ja/ko/id/th/vi), outputFormat (txt/srt/vtt) |
Documenttools
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
merge-pdf | PDF's samenvoegen | - (meerdere bestanden, tot 20 PDF's) |
split-pdf | PDF splitsen | mode (range/every), range, everyN (1-500) |
compress-pdf | PDF comprimeren | mode (quality/targetSize), quality (1-100), targetSizeKb |
rotate-pdf | PDF roteren | angle (90/180/270), range (paginabereik) |
extract-pages | Pagina's extraheren | range (qpdf-syntaxis, bijv. "1-5,8,10-z") |
remove-pages | Pagina's verwijderen | pages (te verwijderen qpdf-bereik) |
organize-pdf | PDF ordenen | order (qpdf-paginavolgorde, bijv. "3,1,2,5-z") |
protect-pdf | PDF beveiligen | userPassword, ownerPassword (AES-256) |
unlock-pdf | PDF ontgrendelen | password |
repair-pdf | PDF repareren | - |
linearize-pdf | PDF web-optimaliseren | - (lineariseren voor snelle weergave op het web) |
grayscale-pdf | PDF grijswaarden | - |
pdfa-convert | PDF/A-conversie | - (archief-PDF/A-2) |
crop-pdf | PDF bijsnijden | margin (0-2000 punten) |
nup-pdf | N-up-PDF | perSheet (2/3/4/8/9/12/16) |
booklet-pdf | Boekje-PDF | perSheet (2/4/6/8) |
watermark-pdf | PDF van watermerk voorzien | text, position, fontSize, opacity, rotation |
pdf-page-numbers | PDF-paginanummers | position (bl/bc/br/tl/tc/tr), fontSize |
flatten-pdf | PDF plat maken | - (bakt formulieren en annotaties in) |
redact-pdf | PDF redigeren | terms (string[]), caseSensitive (bool) |
sign-pdf | PDF ondertekenen | Aangepaste multipart-route met PDF file, handtekeningbestanden sig0, sig1 en placements JSON-array |
pdf-to-text | PDF naar tekst | - |
pdf-to-word | PDF naar Word | - |
pdf-metadata | PDF-metadata | title, author, subject, keywords |
convert-document | Document converteren | format (docx/odt/rtf/txt) |
convert-presentation | Presentatie converteren | format (pptx/odp) |
convert-spreadsheet | Spreadsheet converteren | format (xlsx/ods/csv) |
excel-to-pdf | Excel naar PDF | - |
word-to-pdf | Word naar PDF | - |
powerpoint-to-pdf | PowerPoint naar PDF | - |
html-to-pdf | HTML naar PDF | - (externe resources uitgeschakeld) |
markdown-to-docx | Markdown naar Word | - |
markdown-to-html | Markdown naar HTML | - |
markdown-to-pdf | Markdown naar PDF | - (externe resources uitgeschakeld) |
epub-convert | EPUB converteren | format (pdf/docx/html/md) |
to-epub | Converteren naar EPUB | - (accepteert .docx, .md, .html, .txt) |
ocr-pdf | PDF-OCR (AI) | quality (fast/balanced/best), language (auto/en/de/fr/es/zh/ja/ko), pages |
pdf-to-image | PDF naar afbeelding | pages (all/range), format, dpi, quality |
pdf-to-jpg | PDF naar JPG | pages, dpi, quality, colorMode |
pdf-to-png | PDF naar PNG | pages, dpi, quality, colorMode |
pdf-to-tiff | PDF naar TIFF | pages, dpi, quality, colorMode |
Bestandstools
| Tool-ID | Naam | Belangrijkste instellingen |
|---|---|---|
chart-maker | Grafiekmaker | kind (bar/line/pie), title, width, height |
csv-excel | CSV naar Excel | sheet (werkbladnummer voor XLSX-invoer) - bidirectioneel |
csv-json | CSV naar JSON | pretty (bool) - bidirectioneel |
json-xml | JSON naar XML | pretty (bool) - bidirectioneel |
split-csv | CSV splitsen | rowsPerFile (1-1000000), keepHeader (bool) |
merge-csvs | CSV's samenvoegen | - (meerdere bestanden, overeenkomende kolommen) |
yaml-json | YAML / JSON | - (bidirectioneel) |
xml-to-csv | XML naar CSV | - (vindt automatisch herhalende elementen) |
excel-to-csv | Excel naar CSV | speciale conversiepreset ondersteund door convert-spreadsheet |
create-zip | ZIP maken | - (meerdere bestanden, 2-50 bestanden) |
extract-zip | ZIP uitpakken | - (beschermd tegen zip-bommen) |
HTML naar afbeelding
Leg een webpagina vast als afbeelding. Anders dan andere tools accepteert dit endpoint application/json in plaats van multipart-formuliergegevens (geen bestandsupload nodig).
Endpoint: POST /api/v1/tools/image/html-to-image
Content-Type: application/json
| Parameter | Type | Standaard | Beschrijving |
|---|---|---|---|
url | string | (vereist) | Vast te leggen URL (alleen http/https) |
format | string | "png" | Uitvoerformaat: jpg, png, webp |
quality | number | 90 | Kwaliteit 1-100 (alleen JPG/WebP) |
fullPage | boolean | false | Volledige scrollbare pagina vastleggen |
devicePreset | string | "desktop" | desktop, tablet, mobile, custom |
viewportWidth | number | 1280 | Aangepaste viewport-breedte 320-3840 |
viewportHeight | number | 720 | Aangepaste viewport-hoogte 320-2160 |
Voorbeeld:
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
}Tool-subroutes
Sommige tools stellen aanvullende endpoints beschikbaar naast de standaard POST /api/v1/tools/<section>/<toolId>:
| Methode | Pad | Beschrijving |
|---|---|---|
GET | /api/v1/tools/popular | Populaire tool-ID's retourneren, met terugval naar een samengestelde standaardlijst wanneer er weinig gebruiksdata is |
POST | /api/v1/tools/image/remove-background/effects | Achtergrondeffecten toepassen (color/gradient/blur/shadow) zonder AI opnieuw uit te voeren. Gebruikt een gecacht masker van de oorspronkelijke verwijdering. |
POST | /api/v1/tools/image/edit-metadata/inspect | Bestaande EXIF/IPTC/XMP-metadata uit een afbeelding lezen |
POST | /api/v1/tools/image/strip-metadata/inspect | Metadatavelden inspecteren vóór het verwijderen |
POST | /api/v1/tools/image/passport-photo/analyze | Fase 1: AI-gezichtsdetectie + achtergrondverwijdering. Retourneert gezichtslandmarks en gecachte data. |
POST | /api/v1/tools/image/passport-photo/generate | Fase 2: bijsnijden, formaat wijzigen en tegelen met behulp van gecachte analyse. Geen nieuwe AI-run. |
POST | /api/v1/tools/image/gif-tools/info | GIF-metadata ophalen (aantal frames, afmetingen, duur) |
POST | /api/v1/tools/pdf/pdf-to-image/info | PDF-metadata ophalen (aantal pagina's, afmetingen) |
POST | /api/v1/tools/pdf/pdf-to-image/preview | Een voorbeeld van een specifieke PDF-pagina genereren |
POST | /api/v1/tools/pdf/pdf-to-jpg/info | PDF-metadata ophalen voor de speciale JPG-preset |
POST | /api/v1/tools/pdf/pdf-to-jpg/preview | Een voorbeeld van een PDF-pagina genereren voor de JPG-preset |
POST | /api/v1/tools/pdf/pdf-to-png/info | PDF-metadata ophalen voor de speciale PNG-preset |
POST | /api/v1/tools/pdf/pdf-to-png/preview | Een voorbeeld van een PDF-pagina genereren voor de PNG-preset |
POST | /api/v1/tools/pdf/pdf-to-tiff/info | PDF-metadata ophalen voor de speciale TIFF-preset |
POST | /api/v1/tools/pdf/pdf-to-tiff/preview | Een voorbeeld van een PDF-pagina genereren voor de TIFF-preset |
POST | /api/v1/tools/image/svg-to-raster/batch | Meerdere SVG's in batch naar raster converteren |
POST | /api/v1/tools/image/image-enhancement/analyze | Afbeeldingskwaliteit analyseren en verbeteringsaanbevelingen retourneren |
POST | /api/v1/tools/image/optimize-for-web/preview | Lichtgewicht voorbeeld voor live parameterafstemming. Retourneert een geoptimaliseerde afbeelding met formaatheaders. |
Batchverwerking
Pas een generieke batch-geschikte tool tegelijk toe op meerdere bestanden. Retourneert een ZIP-archief. Aangepaste routes voor meerdere bestanden of meerdere stappen, zoals PDF-ondertekening, PDF-OCR en PDF-naar-afbeelding-preset-routes, gebruiken hun eigen endpointcontract in plaats van de generieke /batch-route.
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}'Concurrency wordt bepaald door CONCURRENT_JOBS (standaard: automatisch gedetecteerd op basis van CPU-cores). MAX_BATCH_SIZE beperkt het aantal bestanden per batch (standaard: 100; stel 0 in voor onbeperkt).
Pipelines
Een pipeline uitvoeren
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}}]}'De uitvoer van elke stap is de invoer van de volgende stap. Pipelines staan standaard 20 stappen toe, configureerbaar via MAX_PIPELINE_STEPS. Stel MAX_PIPELINE_STEPS=0 in om de limiet te verwijderen.
Pipelines opslaan en beheren
| Methode | Pad | Beschrijving |
|---|---|---|
POST | /api/v1/pipeline/save | Een benoemde pipeline opslaan (name, description, steps[]) |
GET | /api/v1/pipeline/list | Opgeslagen pipelines weergeven (admins zien alles; gebruikers zien de eigen) |
DELETE | /api/v1/pipeline/:id | Verwijderen (eigenaar of admin) |
GET | /api/v1/pipeline/tools | Tool-ID's weergeven die geldig zijn voor pipelinestappen |
Voortgang volgen
Langlopende taken, tools in de wachtrij, batchtaken en pipelines geven realtime voortgang door via Server-Sent Events. De voortgangsstroom is publiek en gekoppeld aan de job-ID, dus clients hoeven geen Authorization-header te sturen om deze te lezen.
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>/progressEvent-formaat:
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":[]}Je kunt annulering aanvragen voor een taak in de wachtrij of een lopende taak met POST /api/v1/jobs/:jobId/cancel. De response is {"canceled":true|false}.
Bestandsbibliotheek
Persistente bestandsopslag met versiegeschiedenis.
| Methode | Pad | Beschrijving |
|---|---|---|
POST | /api/v1/upload | Bestanden uploaden naar de werkruimte (tijdelijke verwerking) |
POST | /api/v1/files/upload | Bestanden uploaden naar de persistente bestandsbibliotheek |
POST | /api/v1/files/save-result | Een tool-verwerkingsresultaat opslaan als een nieuwe bestandsversie |
GET | /api/v1/files | Opgeslagen bestanden weergeven (gepagineerd, met zoekfunctie) |
GET | /api/v1/files/:id | Bestandsmetadata + versieketen ophalen |
GET | /api/v1/files/:id/download | Bestand downloaden |
GET | /api/v1/files/:id/thumbnail | 300px JPEG-thumbnail ophalen |
DELETE | /api/v1/files | Bestanden en hun versieketens in bulk verwijderen (body: { ids: [...] }) |
POST | /api/v1/fetch-urls | Externe URL's ophalen in de werkruimte voor URL-gebaseerde imports |
POST | /api/v1/preview | Een browsercompatibele WebP-preview genereren (voor HEIC/HEIF/RAW-formaten) |
GET | /api/v1/files/:id/preview | Een gecachte of gegenereerde browsercompatibele preview streamen voor een opgeslagen PDF, Office-document, video of audiobestand |
POST | /api/v1/preview/generate | Een on-demand MP4- of MP3-preview genereren voor een geüpload mediabestand zonder het eerst op te slaan |
GET | /api/v1/download/:jobId/:filename | Een verwerkt bestand downloaden uit een werkruimte |
Om een tool-resultaat automatisch op te slaan in de bibliotheek, voeg je fileId toe als multipart-formulierveld dat verwijst naar een bestaand bibliotheekbestand. Het verwerkte resultaat wordt opgeslagen als een nieuwe versie.
API-sleutelbeheer
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
POST | /api/v1/api-keys | Auth | Nieuwe sleutel genereren - eenmaal getoond |
GET | /api/v1/api-keys | Auth | Sleutels weergeven (name, id, lastUsedAt - niet de ruwe sleutel) |
DELETE | /api/v1/api-keys/:id | Auth | Sleutel verwijderen |
Teams
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/teams | Admin (teams:manage) | Teams weergeven |
POST | /api/v1/teams | Admin (teams:manage) | Team aanmaken |
PUT | /api/v1/teams/:id | Admin (teams:manage) | Team hernoemen |
DELETE | /api/v1/teams/:id | Admin (teams:manage) | Team verwijderen (het standaardteam of teams met leden kunnen niet worden verwijderd) |
Instellingen
Runtime key-value-configuratie (leesbaar door elke geauthenticeerde gebruiker, alleen schrijfbaar door admin).
| Methode | Pad | Beschrijving |
|---|---|---|
GET | /api/v1/settings | Alle instellingen ophalen |
PUT | /api/v1/settings | Instellingen in bulk bijwerken (JSON-body met key-value-paren) |
GET | /api/v1/settings/:key | Een specifieke instelling ophalen op sleutel |
Bekende sleutels: disabledTools (JSON-array van tool-ID's), enableExperimentalTools (bool-string), loginAttemptLimit (getal).
Voorkeuren
Gebruikersvoorkeuren staan los van instance-instellingen. Elke geauthenticeerde gebruiker kan de eigen voorkeurenmap lezen en bijwerken.
| Methode | Pad | Beschrijving |
|---|---|---|
GET | /api/v1/preferences | De voorkeuren van de huidige gebruiker ophalen als { "preferences": { ... } } |
PUT | /api/v1/preferences | Een of meer voorkeurssleutels voor de huidige gebruiker upserten |
Rollen
Beheer van aangepaste rollen met gedetailleerde permissies.
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/roles | Admin (audit:read) | Alle rollen weergeven met aantallen gebruikers |
POST | /api/v1/roles | Admin (security:manage) | Een aangepaste rol aanmaken (name, description, permissions) |
PUT | /api/v1/roles/:id | Admin (security:manage) | Een aangepaste rol bijwerken (ingebouwde rollen kunnen niet worden gewijzigd) |
DELETE | /api/v1/roles/:id | Admin (security:manage) | Een aangepaste rol verwijderen (ingebouwde rollen kunnen niet worden verwijderd; getroffen gebruikers keren terug naar de rol user) |
Beschikbare permissies (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.
Auditlog
Alleen voor admins bestemd endpoint voor het beoordelen van beveiligingsrelevante acties.
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/audit-log | Admin (audit:read) | Gepagineerd auditlog met optionele filters |
Query-parameters:
| Parameter | Beschrijving |
|---|---|
page | Paginanummer (standaard: 1) |
limit | Vermeldingen per pagina (standaard: 50, max: 100) |
action | Filteren op actietype (bijv. ROLE_CREATED, ROLE_DELETED) |
ip | Filteren op bron-IP-adres |
from | Vermeldingen filteren na deze ISO 8601-datum |
to | Vermeldingen filteren vóór deze ISO 8601-datum |
Analytics
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/config/analytics | Publiek | De effectieve analytics-configuratie ophalen (PostHog-sleutel, Sentry-DSN, sample rate). Sleutels, DSN en instance-ID zijn leeg wanneer analytics uit staat, hetzij door de compile-time-bake, hetzij door de instance-instelling analyticsEnabled. |
POST | /api/v1/feedback | Auth | Expliciete gebruikersfeedback indienen bij het geconfigureerde PostHog-project als feedback_submitted. De route respecteert de analytics-gate, beperkt de frequentie van inzendingen, verwijdert contactvelden tenzij contactOk waar is, en accepteert nooit bestandsinhoud, bestandsnamen, uploadpaden of ruwe private foutmeldingstekst. Wanneer analytics is uitgeschakeld, retourneert de route { "ok": true, "accepted": false }. |
PUT | /api/v1/settings | Admin (settings:write) | De instance-brede opt-out instellen. Stuur een JSON-body { "analyticsEnabled": "false" } om analytics voor iedereen uit te schakelen, of "true" om deze weer in te schakelen. |
Features / AI-bundels
Beheer AI-feature-bundels (installeer/verwijder AI-modelpakketten in de Docker-omgeving). Geef bij het inschakelen van een tool vanuit aangepaste automatisering de voorkeur aan het tool-niveau-installatie-endpoint: sommige AI-tools hebben meer dan één gedeelde bundel nodig, en dit endpoint slaat reeds geïnstalleerde bundels over en zet alleen de ontbrekende in de wachtrij.
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/features | Auth | Alle feature-bundels en hun installatiestatus weergeven |
POST | /api/v1/admin/features/:bundleId/install | Admin (features:manage) | Een feature-bundel installeren (async, retourneert jobId voor voortgangsvolging) |
POST | /api/v1/admin/tools/:toolId/features/install | Admin (features:manage) | Elke bundel installeren die een tool vereist; retourneert de queued/skipped-status per bundel |
POST | /api/v1/admin/features/:bundleId/uninstall | Admin (features:manage) | Een feature-bundel verwijderen en modelbestanden opruimen |
GET | /api/v1/admin/features/disk-usage | Admin (features:manage) | Het totale schijfgebruik van AI-modellen ophalen |
POST | /api/v1/admin/features/import | Admin (features:manage) | Een offline AI-bundelarchief importeren |
Beheerbewerkingen
Operationele endpoints voor observability, support, gebruiksrapportage en backupstatus.
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/admin/log-level | Admin (settings:write) | Het huidige runtime-logniveau lezen |
POST | /api/v1/admin/log-level | Admin (settings:write) | Het runtime-logniveau wijzigen (fatal, error, warn, info, debug, trace of silent) |
GET | /api/v1/metrics | Admin (system:health) | Prometheus-metrics in tekstformaat |
GET | /api/v1/admin/support-bundle | Admin (system:health) | Een geredigeerde diagnostische supportbundel-ZIP downloaden |
GET | /api/v1/admin/usage | Admin (audit:read) | Gegevens voor het gebruiksdashboard, met optionele days-queryparameter |
GET | /api/v1/admin/backup-status | Admin (system:health) | Metadata en actualiteitsstatus van de laatste backup lezen |
POST | /api/v1/admin/backup-status | Admin (system:health) | Een voltooide backup registreren (type, optioneel sizeBytes, optioneel notes) |
Enterprise-API's
Deze routes zijn licentiegebonden door de bijbehorende enterprise-functie. Ze vereisen nog steeds de vermelde SnapOtter-permissie.
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/enterprise/audit/export | Admin (audit:read) | Auditvermeldingen exporteren als JSON of CSV met filters |
GET | /api/v1/enterprise/config/export | Admin (system:health) | Geredigeerde instance-configuratie, aangepaste rollen en teams exporteren |
POST | /api/v1/enterprise/config/import | Admin (system:health) | Configuratie importeren, met optionele dry run |
GET | /api/v1/enterprise/ip-allowlist | Admin (security:manage) | Geconfigureerde CIDR-allowlist lezen |
PUT | /api/v1/enterprise/ip-allowlist | Admin (security:manage) | CIDR-allowlist bijwerken met bescherming tegen zelf-buitensluiting |
GET | /api/v1/enterprise/legal-hold | Admin (compliance:manage) | Legal holds voor gebruikers en teams weergeven |
PUT | /api/v1/enterprise/legal-hold | Admin (compliance:manage) | Een legal hold op een gebruiker of team toepassen of opheffen |
POST | /api/v1/enterprise/scim/token | Admin (users:manage) | Een SCIM-bearertoken genereren, eenmaal geretourneerd |
DELETE | /api/v1/enterprise/scim/token | Admin (users:manage) | Het huidige SCIM-bearertoken intrekken |
GET | /api/v1/enterprise/siem/config | Admin (webhooks:manage) | SIEM-forwardingconfiguratie lezen |
PUT | /api/v1/enterprise/siem/config | Admin (webhooks:manage) | SIEM-forwardingconfiguratie bijwerken |
GET | /api/v1/enterprise/webhooks | Admin (webhooks:manage) | Webhook-bestemmingen weergeven |
POST | /api/v1/enterprise/webhooks | Admin (webhooks:manage) | Een webhook-bestemming aanmaken |
PUT | /api/v1/enterprise/webhooks/:index | Admin (webhooks:manage) | Een webhook-bestemming bijwerken |
DELETE | /api/v1/enterprise/webhooks/:index | Admin (webhooks:manage) | Een webhook-bestemming verwijderen |
POST | /api/v1/enterprise/webhooks/:index/test | Admin (webhooks:manage) | Een test-webhook-payload versturen |
POST | /api/v1/enterprise/users/:id/export | Admin (compliance:manage) | Een GDPR-gebruikersexporttaak starten |
GET | /api/v1/enterprise/users/:id/export/:jobId | Admin (compliance:manage) | GDPR-exportstatus en download-URL lezen |
DELETE | /api/v1/enterprise/users/:id/purge | Admin (compliance:manage) | De gegevens van een gebruiker na bevestiging permanent verwijderen |
DELETE | /api/v1/enterprise/teams/:id/purge | Admin (compliance:manage) | De gegevens van een team na bevestiging permanent verwijderen |
GET | /api/v1/admin/version | Admin (system:health) | App-, build-, Node- en schemaversiemetadata lezen |
GET | /api/v1/admin/migrations/pending | Admin (system:health) | Meegeleverde migraties vergelijken met toegepaste migraties |
GET | /api/v1/admin/upgrade-check | Admin (system:health) | Upgrade-gereedheidscontroles uitvoeren |
SCIM 2.0
SCIM-discovery-endpoints zijn publiek. User- en group-endpoints vereisen het hierboven gegenereerde SCIM-bearertoken.
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/scim/v2/ServiceProviderConfig | Publiek | SCIM-servercapaciteiten |
GET | /api/v1/scim/v2/Schemas | Publiek | SCIM-schema-discovery |
GET | /api/v1/scim/v2/ResourceTypes | Publiek | SCIM-resourcetype-discovery |
GET | /api/v1/scim/v2/Users | SCIM-token | Gebruikers weergeven, met optioneel SCIM-filter |
POST | /api/v1/scim/v2/Users | SCIM-token | Een gebruiker aanmaken |
GET | /api/v1/scim/v2/Users/:id | SCIM-token | Een gebruiker ophalen |
PUT | /api/v1/scim/v2/Users/:id | SCIM-token | Een gebruiker vervangen |
DELETE | /api/v1/scim/v2/Users/:id | SCIM-token | Een gebruiker soft-deactiveren |
GET | /api/v1/scim/v2/Groups | SCIM-token | Teams weergeven als SCIM-groepen |
POST | /api/v1/scim/v2/Groups | SCIM-token | Een team aanmaken |
GET | /api/v1/scim/v2/Groups/:id | SCIM-token | Een team ophalen |
PUT | /api/v1/scim/v2/Groups/:id | SCIM-token | Een team en groepslidmaatschap vervangen |
DELETE | /api/v1/scim/v2/Groups/:id | SCIM-token | Een team verwijderen |
Meme-sjablonen
Ondersteunende API voor de meme-generatortool.
| Methode | Pad | Toegang | Beschrijving |
|---|---|---|---|
GET | /api/v1/meme-templates | Auth | Alle beschikbare meme-sjablonen weergeven met tekstvakposities |
GET | /api/v1/meme-templates/full/:filename | Auth | Sjabloonafbeelding op volledige grootte serveren |
GET | /api/v1/meme-templates/thumbs/:filename | Auth | Sjabloonthumbnail serveren |
GET | /api/v1/meme-templates/fonts/:filename | Auth | Fontbestand serveren dat wordt gebruikt voor het renderen van meme-tekst |
Foutresponses
Alle fouten retourneren JSON:
json
{
"error": "Human-readable message",
"code": "MACHINE_READABLE_CODE"
}| Status | Betekenis |
|---|---|
| 400 | Ongeldig verzoek / validatie mislukt |
| 401 | Niet geauthenticeerd |
| 403 | Onvoldoende permissies |
| 404 | Resource niet gevonden |
| 413 | Bestand te groot (zie MAX_UPLOAD_SIZE_MB) |
| 422 | Verwerking mislukt na validatie |
| 429 | Rate-limited (zie RATE_LIMIT_PER_MIN) |
| 501 | Vereiste AI-feature-bundel is niet geïnstalleerd (FEATURE_NOT_INSTALLED) |
| 500 | Interne serverfout |
