Files
SnapOtter/apps/docs/ko/api/rest.md
T
SnapOtterandGitHub d10d0f544f fix: release QA hardening across processing, media, security, and CI gates (#649)
A release-readiness QA pass over the whole product. The commits split into
defects a user would hit and gates that were reporting green while measuring
nothing.

## Fixes that change behaviour

Rate limiting was bypassable on every install: TRUST_PROXY defaulted to true, so
request.ip came from a client-set header and a forged X-Forwarded-For got past
the login limiter. The default is now a private-network trust list.

A transient Postgres outage stranded in-flight jobs, leaving finished output on
disk with no row pointing at it. A reconciler now resolves those rows and adopts
the bytes rather than dropping the work.

A Redis connection that moved to a new address wedged every read-blocked
consumer, so completions stopped signalling while health still answered 200.
Socket timeouts plus subscriber pings recover it.

Installing more than one AI bundle left the shared venv multi-versioned and
silently broke three tools. The installer now reconciles distributions to one
version each.

Converting an image to JXL at quality 1 through 4 returned a 500, because
libjxl 0.7 rejects the distance those values compute. The quality is floored at
what the encoder honours. A missing ffmpeg was also reported to the user as a
corrupt upload; it now says the engine is unavailable.

RAW uploads reached an unpatched LibRaw on arm64, so it is built from source at
0.22.2, and the release scan was split so it can fail on an unfixed critical
instead of hiding it behind ignore-unfixed.

## Gates that could not fail

Two mutation lanes ran zero mutants because Stryker crawled the gitignored docs
build; coverage discarded its whole report on any failing test; the lint gate
skipped root tests, scripts, and two workspaces; and several generated matrices
counted a host missing ffmpeg as a passing tool. Each now measures what it
claims.

Full evidence and the outstanding release items are tracked locally and are not
part of this branch.
2026-07-27 15:37:30 +08:00

49 KiB
Raw Blame History

description, i18n_output_hash, i18n_source_hash, i18n_provenance
description i18n_output_hash i18n_source_hash i18n_provenance
전체 REST API 레퍼런스. 도구 엔드포인트, 배치 처리, 파이프라인, 파일 라이브러리, 인증, 팀, 관리 작업. a4289adc1b56 7e0a0db4abe0 human

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가 아닌 한 모든 엔드포인트는 인증이 필요합니다.

세션 토큰

# 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 키

# 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 인증 TOTP 코드로 MFA 등록 확인
POST /api/auth/mfa/complete 공개 대기 중인 MFA 로그인 챌린지 완료
POST /api/auth/mfa/disable 인증 현재 사용자의 MFA 비활성화
POST /api/auth/users/:id/mfa/reset 관리자(users:manage) 사용자의 MFA 재설정
GET /api/auth/oidc/login 공개 OIDC 활성화 시 OIDC 로그인 시작
GET /api/auth/oidc/callback 공개 OIDC 인가 콜백
GET /api/auth/saml/metadata 공개 SAML 활성화 시 SAML SP 메타데이터 XML
GET /api/auth/saml/login 공개 SAML 로그인 시작
POST /api/auth/saml/callback 공개 SAML 어설션 컨슈머 서비스

사용자에 대해 MFA가 활성화되면 POST /api/auth/login는 세션 토큰 대신 {"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false}를 반환합니다. 해당 mfaToken와 함께 TOTP 또는 복구 코드를 /api/auth/mfa/complete로 전송하세요.

권한

권한 관리자 사용자
도구 사용
본인 파일/파이프라인/API 키
전체 사용자의 파일/파이프라인/키 조회 -
설정 쓰기 -
사용자 및 팀 관리 -
브랜딩 관리 -

상태 확인

메서드 경로 접근 권한 설명
GET /api/v1/health 공개 기본 상태 확인. 200과 함께 {"status":"healthy","version":"..."}를 반환하거나, 데이터베이스에 연결할 수 없으면 503과 함께 {"status":"unhealthy"}을 반환합니다.
GET /api/v1/readyz 공개 준비 상태 프로브. PostgreSQL, Redis, 디스크 공간, 그리고 구성된 경우 S3를 확인합니다. 인스턴스가 트래픽을 받으면 안 되는 경우 503을 반환합니다.
GET /api/v1/admin/health 관리자(system:health) 가동 시간, 스토리지 모드, 데이터베이스 상태, 큐 상태, GPU 가용성을 포함한 상세 진단.

도구 사용

모든 도구는 동일한 패턴을 따릅니다:

# 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가 포함됩니다.
  • 빠른 도구는 보통 200 JSON을 반환합니다: {"jobId":"...","downloadUrl":"/api/v1/download/<jobId>/<filename>","originalSize":1234,"processedSize":567}. 처리된 파일은 downloadUrl에서 가져오세요.
  • 큐에 들어간 모든 도구는 장시간 실행되거나 동기 대기 창을 초과하면 202 JSON을 반환할 수 있습니다: {"jobId":"...","async":true}. 진행률을 위해 SSE에 연결한 다음 완료되면 다운로드하세요(진행률 추적 참고).
  • 배치 경로는 제네릭 배치 레지스트리에 등록된 도구의 경우 ZIP 아카이브를 직접 스트리밍하여(X-Job-Id 헤더 포함) 반환합니다.

도구 레퍼런스

변환 프리셋

공유 카탈로그에는 jpg-to-png, mov-to-mp4, m4a-to-mp3, pdf-to-jpg, excel-to-csv과 같은 83개의 전용 변환 프리셋 엔드포인트가 포함되어 있습니다. 프리셋은 일급 도구 경로입니다:

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(1100), 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 이미지를 PDF로 pageSize(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 GPU가 있는 경우 NVIDIA CUDA. VA-API, Quick Sync 또는 OpenCL을 통한 Intel/AMD iGPU 가속은 현재 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 이미지 업스케일 RealESRGAN scale(2/4), model, faceEnhance, denoise, format, quality
erase-object 오브젝트 지우개 LaMa(ONNX) 마스크는 두 번째 파일 파트로 전송(필드명 mask), format, quality
ocr OCR / 텍스트 추출 Tesseract(빠름); RapidOCR + PP-OCR ONNX(균형 잡힌/최고) quality(빠름/균형/최고), language, enhance
blur-faces 얼굴 / PII 블러 MediaPipe blurRadius, sensitivity
smart-crop 스마트 자르기 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 이미지 향상 분석 기반 mode(auto/exposure/contrast/color/sharpness), strength
enhance-faces 얼굴 향상 GFPGAN / CodeFormer model(gfpgan/codeformer), strength, sensitivity, centerFace
colorize AI 색상화 DDColor intensity, 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 랜드마크 2단계 플로우. 분석은 멀티파트 file을 사용하고, 생성은 countryCode, bgColor, printLayout(none/4x6/a4), 랜드마크, 이미지 크기를 담은 JSON을 사용합니다
content-aware-resize 콘텐츠 인식 크기 조정 심 카빙(caire) width, height, protectFaces, blurRadius, sobelThreshold, square
transparency-fixer PNG 투명도 수정기 BiRefNet HR-매팅 defringe(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-expand AI 캔버스 확장 LaMa(아웃페인팅) 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. 템플릿 모드(templateId를 담은 JSON 본문) 또는 커스텀 이미지 모드(파일을 담은 멀티파트)를 지원합니다.

유틸리티

도구 ID 이름 주요 설정
info 이미지 정보 - (너비, 높이, 형식, 크기, 채널, hasAlpha, DPI, EXIF 반환)
compare 이미지 비교 mode(side-by-side/overlay/diff), diffThreshold - 두 번째 파일이 비교 대상입니다
find-duplicates 중복 찾기 threshold(지각적 해시 거리, 기본값 8) - 다중 파일
color-palette 색상 팔레트 count(주요 색상 개수), format(hex/rgb)
qr-generate QR 코드 생성기 data, size, margin, colorDark, colorLight, errorCorrectionLevel, dotStyle, cornerStyle, logo(선택적 파일)
barcode-read 바코드 리더 - (QR, EAN, Code128, DataMatrix 등을 자동 감지)
image-to-base64 이미지를 Base64로 format(data-uri/plain), mimeType
html-to-image HTML을 이미지로 url, format(png/jpg/webp), quality, fullPage, devicePreset(desktop/tablet/mobile/custom), viewportWidth, viewportHeight
histogram 히스토그램 scale(linear/log) - RGB 히스토그램 차트 + 채널별 통계 반환
lqip-placeholder LQIP 플레이스홀더 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-raster SVG를 래스터로 format(png/jpeg/webp/avif/tiff/gif/heif), width, height, scale, dpi, background
vectorize 이미지를 SVG로 colorMode(bw/color), threshold, colorPrecision, filterSpeckle, pathMode(none/polygon/spline)
gif-tools GIF 도구 action(resize/optimize/reverse/speed/extract-frames/rotate/add-text), 액션별 매개변수
gif-webp GIF/WebP 변환기 quality(1-100), lossless(bool), resizePercent(10-100)

비디오 도구

도구 ID 이름 주요 설정
convert-video 비디오 변환 format(mp4/mov/webm/avi/mkv), quality(high/balanced/small)
compress-video 비디오 압축 quality(light/balanced/strong), resolution(original/1080p/720p/480p)
trim-video 비디오 자르기 startS, endS, precise(bool, 프레임 단위 정밀 컷)
mute-video 비디오 음소거 -
video-to-gif 비디오를 GIF로 fps(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 FPS 변경 fps(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-video GIF를 비디오로 format(mp4/webm/mov)
video-to-webp 비디오를 WebP로 fps, 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 PDF 분할 mode(range/every), range, everyN(1-500)
compress-pdf PDF 압축 mode(quality/targetSize), quality(1-100), targetSizeKb
rotate-pdf PDF 회전 angle(90/180/270), range(페이지 범위)
extract-pages 페이지 추출 range(qpdf 구문, 예: "1-5,8,10-z")
remove-pages 페이지 제거 pages(제거할 qpdf 범위)
organize-pdf PDF 정리 order(qpdf 페이지 순서, 예: "3,1,2,5-z")
protect-pdf PDF 보호 userPassword, ownerPassword(AES-256)
unlock-pdf PDF 잠금 해제 password
repair-pdf PDF 복구 -
linearize-pdf PDF 웹 최적화 - (빠른 웹 뷰잉을 위한 선형화)
grayscale-pdf PDF 흑백화 -
pdfa-convert PDF/A 변환 - (보존용 PDF/A-2)
crop-pdf PDF 자르기 margin(0-2000 포인트)
nup-pdf N-up PDF perSheet(2/3/4/8/9/12/16)
booklet-pdf 소책자 PDF perSheet(2/4/6/8)
watermark-pdf PDF 워터마크 text, position, fontSize, opacity, rotation
pdf-page-numbers PDF 페이지 번호 position(bl/bc/br/tl/tc/tr), fontSize
flatten-pdf PDF 병합(플래튼) - (양식과 주석을 굽습니다)
redact-pdf PDF 검정 처리 terms(string[]), caseSensitive(bool)
sign-pdf PDF 서명 PDF file, 서명 파일 sig0, sig1, placements JSON 배열을 사용하는 커스텀 멀티파트 경로
pdf-to-text PDF를 텍스트로 -
pdf-to-word PDF를 Word로 -
pdf-metadata PDF 메타데이터 title, author, subject, keywords
convert-document 문서 변환 format(docx/odt/rtf/txt)
convert-presentation 프레젠테이션 변환 format(pptx/odp)
convert-spreadsheet 스프레드시트 변환 format(xlsx/ods/csv)
excel-to-pdf Excel을 PDF로 -
word-to-pdf Word를 PDF로 -
powerpoint-to-pdf PowerPoint를 PDF로 -
html-to-pdf HTML을 PDF로 - (원격 리소스 비활성화)
markdown-to-docx Markdown을 Word로 -
markdown-to-html Markdown을 HTML로 -
markdown-to-pdf Markdown을 PDF로 - (원격 리소스 비활성화)
epub-convert EPUB 변환 format(pdf/docx/html/md)
to-epub EPUB으로 변환 - (.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를 이미지로 pages(all/range), format, dpi, quality
pdf-to-jpg PDF를 JPG로 pages, dpi, quality, colorMode
pdf-to-png PDF를 PNG로 pages, dpi, quality, colorMode
pdf-to-tiff PDF를 TIFF로 pages, dpi, quality, colorMode

파일 도구

도구 ID 이름 주요 설정
chart-maker 차트 제작기 kind(bar/line/pie), title, width, height
csv-excel CSV를 Excel로 sheet(XLSX 입력용 워크시트 번호) - 양방향
csv-json CSV를 JSON으로 pretty(bool) - 양방향
json-xml JSON을 XML로 pretty(bool) - 양방향
split-csv CSV 분할 rowsPerFile(1-1000000), keepHeader(bool)
merge-csvs CSV 병합 - (다중 파일, 일치하는 열)
yaml-json YAML / JSON - (양방향)
xml-to-csv XML을 CSV로 - (반복 요소 자동 탐지)
excel-to-csv Excel을 CSV로 convert-spreadsheet로 지원되는 전용 변환 프리셋
create-zip ZIP 생성 - (다중 파일, 2-50개 파일)
extract-zip ZIP 추출 - (봄 보호)

HTML을 이미지로

웹페이지를 이미지로 캡처합니다. 다른 도구와 달리 이 엔드포인트는 멀티파트 폼 데이터 대신 application/json를 허용합니다(파일 업로드 불필요).

엔드포인트: POST /api/v1/tools/image/html-to-image

Content-Type: application/json

매개변수 유형 기본값 설명
url string (필수) 캡처할 URL(http/https만)
format string "png" 출력 형식: jpg, png, webp
quality number 90 품질 1-100(JPG/WebP만)
fullPage boolean false 전체 스크롤 페이지 캡처
devicePreset string "desktop" desktop, tablet, mobile, custom
viewportWidth number 1280 커스텀 뷰포트 너비 320-3840
viewportHeight number 720 커스텀 뷰포트 높이 320-2160

예시:

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

응답:

{
  "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 AI 재실행 없이 배경 효과(color/gradient/blur/shadow) 적용. 초기 제거에서 캐시된 마스크를 사용합니다.
POST /api/v1/tools/image/edit-metadata/inspect 이미지에서 기존 EXIF/IPTC/XMP 메타데이터 읽기
POST /api/v1/tools/image/strip-metadata/inspect 제거 전 메타데이터 필드 확인
POST /api/v1/tools/image/passport-photo/analyze 1단계: AI 얼굴 감지 + 배경 제거. 얼굴 랜드마크와 캐시된 데이터를 반환합니다.
POST /api/v1/tools/image/passport-photo/generate 2단계: 캐시된 분석을 사용해 자르기, 크기 조정, 타일링. AI 재실행 없음.
POST /api/v1/tools/image/gif-tools/info GIF 메타데이터 획득(프레임 수, 크기, 재생 시간)
POST /api/v1/tools/pdf/pdf-to-image/info PDF 메타데이터 획득(페이지 수, 크기)
POST /api/v1/tools/pdf/pdf-to-image/preview 특정 PDF 페이지의 미리보기 생성
POST /api/v1/tools/pdf/pdf-to-jpg/info 전용 JPG 프리셋용 PDF 메타데이터 획득
POST /api/v1/tools/pdf/pdf-to-jpg/preview JPG 프리셋 PDF 페이지 미리보기 생성
POST /api/v1/tools/pdf/pdf-to-png/info 전용 PNG 프리셋용 PDF 메타데이터 획득
POST /api/v1/tools/pdf/pdf-to-png/preview PNG 프리셋 PDF 페이지 미리보기 생성
POST /api/v1/tools/pdf/pdf-to-tiff/info 전용 TIFF 프리셋용 PDF 메타데이터 획득
POST /api/v1/tools/pdf/pdf-to-tiff/preview TIFF 프리셋 PDF 페이지 미리보기 생성
POST /api/v1/tools/image/svg-to-raster/batch 여러 SVG를 래스터로 일괄 변환
POST /api/v1/tools/image/image-enhancement/analyze 이미지 품질 분석 및 향상 권장 사항 반환
POST /api/v1/tools/image/optimize-for-web/preview 실시간 매개변수 조정을 위한 경량 미리보기. 크기 헤더가 포함된 최적화된 이미지를 반환합니다.

배치 처리

제네릭 배치 지원 도구를 여러 파일에 한 번에 적용합니다. ZIP 아카이브를 반환합니다. PDF 서명 및 PDF를 이미지로 변환하는 프리셋 경로와 같은 커스텀 다중 파일 또는 다단계 경로는 제네릭 /batch 경로 대신 자체 엔드포인트 계약을 사용합니다.

ocr-pdf 도구는 이 제네릭 /batch 경로를 지원합니다.

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으로 설정).

파이프라인

파이프라인 실행

# 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 헤더를 보낼 필요가 없습니다.

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

이벤트 형식:

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

POST /api/v1/jobs/:jobId/cancel로 큐에 들어갔거나 실행 중인 작업의 취소를 요청할 수 있습니다. 응답은 {"canceled":true|false}입니다.

파일 라이브러리

버전 이력이 있는 영구 파일 저장소.

메서드 경로 설명
POST /api/v1/upload 워크스페이스에 파일 업로드(임시 처리)
POST /api/v1/files/upload 영구 파일 라이브러리에 파일 업로드
POST /api/v1/files/save-result 도구 처리 결과를 새 파일 버전으로 저장
GET /api/v1/files 저장된 파일 목록(페이지 처리, 검색 포함)
GET /api/v1/files/:id 파일 메타데이터 + 버전 체인 획득
GET /api/v1/files/:id/download 파일 다운로드
GET /api/v1/files/:id/thumbnail 300px JPEG 썸네일 획득
DELETE /api/v1/files 파일 및 버전 체인 일괄 삭제(본문: { ids: [...] })
POST /api/v1/fetch-urls URL 기반 가져오기를 위해 원격 URL을 워크스페이스로 페치
POST /api/v1/preview 브라우저 호환 WebP 미리보기 생성(HEIC/HEIF/RAW 형식용)
GET /api/v1/files/:id/preview 저장된 PDF, 오피스 문서, 비디오 또는 오디오 파일에 대해 캐시되었거나 생성된 브라우저 호환 미리보기 스트리밍
POST /api/v1/preview/generate 업로드된 미디어 파일을 먼저 저장하지 않고 온디맨드 MP4 또는 MP3 미리보기 생성
GET /api/v1/download/:jobId/:filename 워크스페이스에서 처리된 파일 다운로드

도구 결과를 라이브러리에 자동 저장하려면 기존 라이브러리 파일을 참조하는 fileId을 멀티파트 폼 필드로 포함하세요. 처리된 결과가 새 버전으로 저장됩니다.

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(도구 ID의 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, 샘플 레이트). 컴파일 타임 베이크 또는 인스턴스 analyticsEnabled 설정으로 인해 분석이 꺼져 있으면 키, DSN, 인스턴스 ID는 비어 있습니다.
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 기능 번들 관리(Docker 환경에서 AI 모델 패키지 설치/제거). 커스텀 자동화에서 도구를 활성화할 때는 도구 수준 설치 엔드포인트를 선호하세요: 일부 AI 도구는 둘 이상의 공유 번들이 필요하며, 이 엔드포인트는 이미 설치된 번들을 건너뛰고 누락된 번들만 큐에 넣습니다.

OCR 는 하드 종속성이 아닌 선택적 향상 기능입니다. fast Tesseract 계층은 팩 없이 작동합니다. POST /api/v1/admin/features/ocr/installbalancedbest에 대해 서명된 RapidOCR 팩을 Linux amd64 또는 arm64 에 설치합니다. 정확한 OCR 런타임은 CPU 전용 및 NVIDIA 호스트에서 CPU 를 사용하며 최소 4 GiB 의 유효 메모리(구성된 컨테이너 cgroup 제한, 그렇지 않으면 호스트 메모리)가 필요합니다. SnapOtter 는 requiredMemoryBytes, effectiveMemoryBytesinsufficient-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) 도구에 필요한 모든 번들 설치; 번들별 큐잉/건너뜀 상태 반환
POST /api/v1/admin/features/:bundleId/uninstall 관리자(features:manage) 기능 번들 제거 및 모델 파일 정리
GET /api/v1/admin/features/disk-usage 관리자(features:manage) AI 모델의 총 디스크 사용량 획득
POST /api/v1/admin/features/import 관리자(features:manage) 레거시 AI 번들(file) 또는 서명된 오프라인 OCR 릴리스(index + archive) 가져오기

에어 갭 OCR 가져오기에는 릴리스의 서명이 포함되어야 합니다. ocr-runtime-index.json 그리고 일치하는 플랫폼 아카이브. SnapOtter 동일하게 적용됩니다 Ed25519 서명, 아티팩트 해시, 호환성, 추출, 온라인 설치에 사용되는 연기 테스트 검사:

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) SCIM 베어러 토큰 생성, 한 번만 반환됨
DELETE /api/v1/enterprise/scim/token 관리자(users:manage) 현재 SCIM 베어러 토큰 취소
GET /api/v1/enterprise/siem/config 관리자(webhooks:manage) SIEM 포워딩 구성 읽기
PUT /api/v1/enterprise/siem/config 관리자(webhooks:manage) SIEM 포워딩 구성 업데이트
GET /api/v1/enterprise/webhooks 관리자(webhooks:manage) 웹훅 대상 목록
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 디스커버리 엔드포인트는 공개입니다. 사용자 및 그룹 엔드포인트는 위에서 생성한 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을 반환합니다:

{
  "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 내부 서버 오류