SAM API 가이드

SOONSOON AI Manager는 다중 AI 프로바이더를 통합하여 텍스트 생성, 이미지 생성 및 편집 기능을 제공하는 통합 API 플랫폼입니다.

🎉 새로운 기능! Gemini 2.5 Flash Image Preview로 이미지 편집 및 스타일 변경이 가능합니다.

주요 기능

🤖 텍스트 생성

Google Gemini, AWS Claude 모델로 고품질 텍스트 생성

  • 대화형 AI 채팅
  • 코드 생성 및 리뷰
  • 추론 과정 포함 모델

🎨 이미지 생성

텍스트 프롬프트로 고품질 이미지 생성

  • Gemini 2.5 Flash NEW
  • AWS Nova Canvas
  • Stable Diffusion Ultra

✂️ 이미지 편집

기존 이미지를 업로드하여 AI로 편집

  • 스타일 변경 (만화, 수채화 등)
  • 배경 제거 및 변경
  • 색상 및 밝기 조정

⚡ 빠른 시작

💡 시작하기: 관리자에게 API 키를 요청하거나 계정을 생성하세요.

1분 내에 시작하기

# 1. API 키 받기 (계정 생성 후 대시보드에서) # 관리자에게 문의하여 API 키를 받으세요 # 2. 텍스트 생성 테스트 curl -X POST https://api.soonsoon.ai/generate/text \ -H "Content-Type: application/json" \ -H "X-API-Key: YOUR_API_KEY" \ -d '{ "messages": [{"role": "user", "content": "안녕하세요!"}], "model_id": "gemini-2.0-flash-lite", "provider": "gemini-text" }' # 3. 이미지 생성 테스트 curl -X POST https://api.soonsoon.ai/create/image \ -H "Content-Type: application/json" \ -H "X-API-Key: YOUR_API_KEY" \ -d '{ "prompt": "귀여운 고양이", "model_id": "gemini-2.5-flash-image-preview", "provider": "gemini-image" }'
import requests # API 설정 BASE_URL = "https://api.soonsoon.ai" API_KEY = "YOUR_API_KEY" # 대시보드에서 받은 API 키 headers = {"X-API-Key": API_KEY, "Content-Type": "application/json"} # 텍스트 생성 response = requests.post(f"{BASE_URL}/generate/text", headers=headers, json={ "messages": [{"role": "user", "content": "안녕하세요!"}], "model_id": "gemini-2.0-flash-lite", "provider": "gemini-text" } ) print(response.json()) # 이미지 생성 response = requests.post(f"{BASE_URL}/create/image", headers=headers, json={ "prompt": "귀여운 고양이", "model_id": "gemini-2.5-flash-image-preview", "provider": "gemini-image" } ) result = response.json() print(f"이미지 생성 성공: {len(result.get('images', []))}개")
const API_KEY = 'YOUR_API_KEY'; // 대시보드에서 받은 API 키 const BASE_URL = 'https://api.soonsoon.ai'; // 텍스트 생성 async function generateText() { const response = await fetch(`${BASE_URL}/generate/text`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY }, body: JSON.stringify({ messages: [{role: 'user', content: '안녕하세요!'}], model_id: 'gemini-2.0-flash-lite', provider: 'gemini-text' }) }); const result = await response.json(); console.log(result); } // 이미지 생성 async function generateImage() { const response = await fetch(`${BASE_URL}/create/image`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY }, body: JSON.stringify({ prompt: '귀여운 고양이', model_id: 'gemini-2.5-flash-image-preview', provider: 'gemini-image' }) }); const result = await response.json(); console.log(`이미지 생성 성공: ${result.images?.length || 0}개`); } generateText(); generateImage();

🔐 인증

모든 API 요청에는 X-API-Key 헤더가 필요합니다.

curl -H "X-API-Key: your_api_key_here" https://api.soonsoon.ai/providers

API 키 받기

  1. https://api.soonsoon.ai 에 로그인
  2. 대시보드에서 API 키 확인
  3. 헤더에 X-API-Key로 추가

🔗 API 엔드포인트

메소드 엔드포인트 설명 인증
GET /providers 프로바이더 목록 조회 ✓ API Key
GET /models/{provider} 모델 목록 조회 ✓ API Key
POST /generate/text 텍스트 생성 ✓ API Key
POST /create/image 이미지 생성 ✓ API Key
POST /generate/image 이미지 분석/편집 ✓ API Key

🔌 프로바이더

GET /providers

요청 예시

curl -H "X-API-Key: your_api_key" https://api.soonsoon.ai/providers

응답 예시

{ "providers": [ "gemini-text", "gemini-image", "aws-bedrock-text", "aws-bedrock-image" ] }

지원 프로바이더

🤖 Gemini Text

gemini-text

Google Gemini 텍스트 생성 모델

🖼️ Gemini Image

gemini-image

Google Gemini 이미지 생성/분석 모델

📝 AWS Bedrock Text

aws-bedrock-text

AWS Bedrock Claude 텍스트 모델

🎨 AWS Bedrock Image

aws-bedrock-image

AWS Nova Canvas, Stable Diffusion

🎯 모델

GET /models/{provider}

요청 예시

curl -H "X-API-Key: your_api_key" https://api.soonsoon.ai/models/gemini-image

응답 예시

{ "models": [ "gemini-2.5-flash-image-preview", "gemini-2.0-flash-preview-image-generation", "imagen-4.0-generate-preview-06-06" ] }

💬 텍스트 생성

POST /generate/text

요청 형식

{ "messages": [ {"role": "user", "content": "안녕하세요!"} ], "model_id": "gemini-2.0-flash-lite", "provider": "gemini-text", "stream": false, "include_reasoning": false }

cURL 예시

curl -X POST https://api.soonsoon.ai/generate/text \ -H "Content-Type: application/json" \ -H "X-API-Key: your_api_key" \ -d '{ "messages": [{"role": "user", "content": "Python으로 Hello World 출력하는 코드 작성해줘"}], "model_id": "gemini-2.0-flash-lite", "provider": "gemini-text" }'

🎨 이미지 생성

POST /create/image

요청 형식

{ "prompt": "아름다운 일몰 풍경", "model_id": "gemini-2.5-flash-image-preview", "provider": "gemini-image" }

cURL 예시

curl -X POST https://api.soonsoon.ai/create/image \ -H "Content-Type: application/json" \ -H "X-API-Key: your_api_key" \ -d '{ "prompt": "귀여운 고양이가 공원에서 뛰어노는 모습", "model_id": "gemini-2.5-flash-image-preview", "provider": "gemini-image" }'

✂️ 이미지 편집

POST /generate/image

요청 형식

{ "prompt": "이 이미지를 만화 스타일로 바꿔줘", "image_data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...", "model_id": "gemini-2.5-flash-image-preview", "provider": "gemini-image" }

🎯 모델 레퍼런스

Gemini 텍스트 모델

모델 ID 설명 특징
gemini-2.0-flash-lite 빠른 응답 모델 높은 속도, 비용 효율적
gemini-2.0-flash-exp 실험적 기능 모델 최신 기능, 베타 상태
gemini-2.0-flash-thinking-exp BETA 추론 과정 포함 사고 과정 노출, 논리적 추론

Gemini 이미지 모델

모델 ID 설명 기능
gemini-2.5-flash-image-preview NEW 이미지 편집/생성 전문 이미지 생성, 편집, 스타일 변경
gemini-2.0-flash-preview-image-generation 이미지 생성 모델 텍스트에서 이미지 생성
imagen-4.0-generate-preview-06-06 Imagen 4.0 고품질 고해상도 이미지 생성

📤 이미지 업로드

💡 팁: 이미지 편집은 gemini-2.5-flash-image-preview 모델을 사용하는 것이 가장 좋은 결과를 얻을 수 있습니다.

Base64 변환 방법

// HTML 파일 업로드 입력 <input type="file" id="imageInput" accept="image/*"> <button onclick="uploadAndEdit()">이미지 편집</button> // JavaScript 코드 function fileToBase64(file) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => resolve(reader.result); reader.onerror = error => reject(error); }); } async function uploadAndEdit() { const fileInput = document.getElementById('imageInput'); const file = fileInput.files[0]; if (!file) { alert('이미지를 선택해주세요.'); return; } // 이미지를 Base64로 변환 const base64 = await fileToBase64(file); // API 호출 const response = await fetch('https://api.soonsoon.ai/generate/image', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': 'YOUR_API_KEY' }, body: JSON.stringify({ prompt: '이 사진을 만화 스타일로 바꿔줘', image_data: base64, model_id: 'gemini-2.5-flash-image-preview', provider: 'gemini-image' }) }); const result = await response.json(); console.log('편집 결과:', result); }
import base64 import requests def image_to_base64(image_path): """이미지 파일을 Base64로 변환""" with open(image_path, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()).decode('utf-8') return f"data:image/jpeg;base64,{encoded_string}" def edit_image(image_path, prompt, api_key): """이미지 편집 요청""" # 이미지를 Base64로 변환 image_base64 = image_to_base64(image_path) response = requests.post( 'https://api.soonsoon.ai/generate/image', headers={ 'Content-Type': 'application/json', 'X-API-Key': api_key }, json={ 'prompt': prompt, 'image_data': image_base64, 'model_id': 'gemini-2.5-flash-image-preview', 'provider': 'gemini-image' } ) return response.json() # 사용 예시 result = edit_image( 'my_photo.jpg', '이 사진을 수채화 스타일로 바꿔줘', 'YOUR_API_KEY' ) # 결과 이미지 저장 if 'images' in result and result['images']: edited_image = base64.b64decode(result['images'][0]) with open('edited_photo.jpg', 'wb') as f: f.write(edited_image) print('편집된 이미지가 edited_photo.jpg로 저장되었습니다.')
#!/bin/bash # 이미지 파일을 Base64로 변환 IMAGE_PATH="my_photo.jpg" API_KEY="YOUR_API_KEY" # Base64 변환 IMAGE_BASE64=$(base64 -i "$IMAGE_PATH") IMAGE_DATA="data:image/jpeg;base64,$IMAGE_BASE64" # API 호출 curl -X POST https://api.soonsoon.ai/generate/image \ -H "Content-Type: application/json" \ -H "X-API-Key: $API_KEY" \ -d "{ \"prompt\": \"이 사진을 만화 스타일로 바꿔줘\", \"image_data\": \"$IMAGE_DATA\", \"model_id\": \"gemini-2.5-flash-image-preview\", \"provider\": \"gemini-image\" }" \ -o response.json echo "응답이 response.json에 저장되었습니다."

이미지 편집 프롬프트 예시

🎨 스타일 변경

  • "이 사진을 만화 스타일로 바꿔줘"
  • "수채화 스타일로 변환해줘"
  • "픽셀 아트 스타일로 만들어줘"

🌈 색상 조정

  • "이 이미지를 더 밝게 만들어줘"
  • "색상을 따뜻하게 조정해줘"
  • "흑백으로 바꿔줘"

🏭 배경 변경

  • "배경을 바다로 바꿔줘"
  • "배경을 투명하게 만들어줘"
  • "배경을 블러 처리해줘"

Claude Vision (AWS Bedrock) NEW

Claude 모델도 이미지 분석 기능을 지원합니다. 텍스트 생성 API에 image_data 파라미터를 추가하면 됩니다.

curl -X POST https://api.soonsoon.ai/generate/text \ -H "Content-Type: application/json" \ -H "X-API-Key: your_api_key" \ -d '{ "messages": [{"role": "user", "content": "이 이미지에 무엇이 있나요?"}], "model_id": "anthropic.claude-sonnet-4-5-20250929-v1:0", "provider": "aws-bedrock-text", "image_data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ..." }'
💡 팁: Claude Vision은 이미지 분석, 설명, OCR 등에 훌륭합니다. 이미지 편집은 Gemini 2.5 Flash를 사용하세요.

💻 코드 예제

Python 완전 예제

import requests import base64 # API 설정 BASE_URL = "https://api.soonsoon.ai" API_KEY = "your_api_key_here" headers = {"X-API-Key": API_KEY, "Content-Type": "application/json"} # 1. 프로바이더 목록 조회 response = requests.get(f"{BASE_URL}/providers", headers=headers) providers = response.json()["providers"] print("사용 가능한 프로바이더:", providers) # 2. 텍스트 생성 text_data = { "messages": [{"role": "user", "content": "AI에 대해 설명해줘"}], "model_id": "gemini-2.0-flash-lite", "provider": "gemini-text" } response = requests.post(f"{BASE_URL}/generate/text", headers=headers, json=text_data) print("생성된 텍스트:", response.json()) # 3. 이미지 생성 image_data = { "prompt": "미래도시의 모습", "model_id": "gemini-2.5-flash-image-preview", "provider": "gemini-image" } response = requests.post(f"{BASE_URL}/create/image", headers=headers, json=image_data) result = response.json() # Base64 이미지를 파일로 저장 if "images" in result and result["images"]: image_base64 = result["images"][0] with open("generated_image.jpg", "wb") as f: f.write(base64.b64decode(image_base64)) print("이미지가 generated_image.jpg로 저장되었습니다.")

🔧 문제 해결

🚫 인증 오류

401 Unauthorized - API 키가 잘못되었거나 만료되었습니다.
  • API 키가 올바른지 확인
  • X-API-Key 헤더가 올바르게 설정되었는지 확인
  • 대시보드에서 새 API 키 생성

🚫 권한 오류

403 Forbidden - 해당 모델이나 프로바이더에 대한 접근 권한이 없습니다.
  • 관리자에게 모델 접근 권한 요청
  • 사용 가능한 모델 목록 확인: GET /models/{provider}

⏱️ 타임아웃 오류

Timeout - 요청 처리 시간이 초과되었습니다.
  • 이미지 크기를 줄여서 다시 시도
  • 더 간단한 프롬프트 사용
  • 잠시 후 다시 시도

⚠️ 제한사항

사용량 제한

제한 유형 기본값 최대값
일일 토큰 사용량 100,000 1,000,000
일일 이미지 생성 50 500
API 키 수 1 10

파일 크기 제한

  • 이미지 업로드: 최대 10MB
  • 지원 형식: JPEG, PNG, GIF, WebP
  • 최대 해상도: 4096x4096 픽셀

📋 응답 구조

🔄 표준화된 응답: 모든 프로바이더가 일관된 응답 구조를 반환합니다.

텍스트 생성 응답

{ "response": "생성된 텍스트 내용", "model_id": "gemini-2.0-flash-lite", "provider": "gemini-text", "usageMetadata": { "promptTokenCount": 10, "candidatesTokenCount": 50, "totalTokenCount": 60 } }

이미지 생성 응답

{ "status": "success", "images": ["base64_encoded_image_data"], "prompt": "사용된 프롬프트", "model_id": "gemini-2.5-flash-image-preview", "provider": "gemini-image" }

응답 필드 설명

필드 타입 설명
response string 생성된 텍스트 (텍스트 생성 API만)
images array Base64 인코딩된 이미지 배열 (이미지 생성 API만)
model_id string 사용된 모델 ID
provider string 사용된 프로바이더명
usageMetadata object 토큰 사용량 정보

📝 변경사항

v4.0.1 (2024-01-16) LATEST

  • 🔄 응답 구조 표준화 - 모든 프로바이더가 일관된 응답 형식 반환
  • 🔧 Gemini Text 프로바이더 응답 구조 개선
  • 📊 프론트엔드 호환성 향상

v4.0.0 (2024-01-15)

  • Gemini 2.5 Flash Image Preview 모델 추가
  • ✨ 이미지 편집 및 스타일 변경 기능
  • 🔧 모델 권한 시스템 개선
  • 📊 상세한 API 가이드 문서 추가
  • 🐛 다양한 버그 수정 및 성능 개선

v3.2.1 (2024-01-10)

  • 🔧 AWS Bedrock 모델 안정성 개선
  • 📊 사용량 추적 정확도 향상
  • 🐛 이미지 업로드 오류 수정

v3.2.0 (2024-01-05)

  • ✨ Azure OpenAI 모델 지원 추가
  • ✨ 사용자별 일일 사용량 제한 기능
  • 🔐 API 키 관리 시스템 개선