7eyes 서비스 개요
7eyes(SevenEyes)는 AI 기반 비서·창작 서비스입니다. 스타일·아바타·스티커·라이브 아바타·AI 통화를 하나의 계정·크레딧 체계로 제공합니다. 서비스명은 변경될 수 있으며, 본 문서의 API 경로·연동 규약은 동일하게 유지됩니다.
대상 독자 — Product 탭: 기획·운영·파트너. Android & API 탭: 안드로이드·백엔드 연동 개발자.
7eyes(SevenEyes)는 AI 기반 비서·창작 서비스입니다. 스타일·아바타·스티커·라이브 아바타·AI 통화를 하나의 계정·크레딧 체계로 제공합니다. 서비스명은 변경될 수 있으며, 본 문서의 API 경로·연동 규약은 동일하게 유지됩니다.
| 제품 | 설명 | 웹 | 과금 service (V2) |
|---|---|---|---|
| Style | 헤어·안경·의상 등 AI 스타일링 | style.html | style_general / style_premium |
| Avatar | 대화용 AI 아바타 이미지 | avata.html | avatar_general / avatar_premium |
| Sticker | 아바타 기반 AI 스티커 | sticker.html | sticker_general / sticker_premium |
| Live | 실시간 라이브 아바타 상담 | live.html | live_avatar (세션) |
| Call | AI 전화·메모·예약 보조 | call.html | 별도 과금 가이드 범위 외 |
Authorization: Bearer 사용(설정 예외 제외).credits/{uid} 단일 문서. 웹(토스)·안드로이드(구글 인앱) 동일 잔액.POST /api/live-avatar/ensure-server로 미디어 서버 기동 후 LiveKit 세션 연결.| 환경 | Base URL |
|---|---|
| 운영 | 배포 환경에 설정된 공개 API Base URL (빌드·CI에서 주입, 끝에 /api 붙이지 않음) |
모든 경로는 {API_BASE}/api/... 형태입니다. 예: GET {API_BASE}/api/credits/config
curl -s "{API_BASE}/health"
POST /api/kakao-auth → Firebase 커스텀 토큰으로 로그인 → ID Token 확보.POST /api/user/check, 필요 시 POST /api/user/save-profile.GET /api/credits/config (인증 없음).check → quoteId → 생성 API 호출 → deduct → 실패 시 deduct/rollback.POST {API_BASE}/api/kakao-auth
Content-Type: application/json
{ "accessToken": "<카카오 액세스 토큰>" }
// 성공 시 customToken 등 — 앱에서 FirebaseAuth.signInWithCustomToken
Authorization: Bearer <Firebase ID Token>
purchaseToken 등은 로그·스크린샷·공개 문서에 남기지 마세요. 예제의 userId는 형식 설명용 placeholder입니다.
uid는 kakao_{숫자} 형태입니다.
구 앱이 경로·바디에 숫자만 넣어도 서버가 동일 사용자로 인정합니다.
Firestore credits 문서 id는 항상 토큰의 uid(kakao_…) 기준입니다.
| 메서드 | 경로 | 용도 |
|---|---|---|
| POST | /api/user/check | 가입 존재·추가정보 완료(isComplete) |
| POST | /api/user/save-profile | 프로필·관심사 저장(암호화) |
상세 스펙은 팀 내부 크레딧 API 정본 문서(V4.0)를 참고하세요. 아래는 안드로이드 연동용 공개 요약입니다.
1. POST /api/credits/check → sufficient, quoteId (TTL 기본 30초)
2. POST /api/credits/deduct → quoteId 소비, 잔액 차감
3. (비즈니스 실패 시)
POST /api/credits/deduct/rollback → refId 또는 quoteId로 원복
| 메서드 | 경로 | 인증 |
|---|---|---|
| GET | /api/credits/config | 없음 |
| GET | /api/credits/balance/:userId | Bearer |
| GET | /api/credits/history/:userId?type=all|deduct|purchase | Bearer |
| POST | /api/credits/check | Bearer |
| POST | /api/credits/deduct | Bearer |
| POST | /api/credits/deduct/rollback | Bearer |
| POST | /api/credits/purchase/google-complete | Bearer |
POST /api/credits/check
Authorization: Bearer <token>
Content-Type: application/json
{
"userId": "kakao_<카카오숫자ID>",
"service": "style_premium"
}
POST /api/credits/deduct
{
"userId": "kakao_<카카오숫자ID>",
"service": "style_premium",
"quoteId": "",
"refId": "<클라이언트 멱등 키, 권장>"
}
POST /api/credits/deduct/rollback
{
"userId": "kakao_<카카오숫자ID>",
"quoteId": "<차감에 사용한 quoteId>"
// 또는 "refId": "<차감 시 사용한 refId>"
}
| service | 크레딧 | 비고 |
|---|---|---|
style_general | 5 | |
style_premium | 20 | |
avatar_general | 5 | |
avatar_premium | 20 | |
sticker_general | 5 | |
sticker_premium | 20 | |
motion_video_per_sec | 28×초 | meta.durationSeconds, 1~10초 클램프 |
avatar_video | 100 | |
live_avatar | 220 | 세션 1회 |
check와 deduct의 service·durationSeconds(모션)를 반드시 동일하게.quoteId는 약 30초 TTL — 만료 시 check 재호출.refId 또는 quoteId 중 하나면 됨(둘 다 권장).purchase/google-complete, 멱등 키는 purchaseToken.| 메서드 | 경로 | 용도 |
|---|---|---|
| GET | /api/catalog/style | 스타일 모델·옵션 목록 |
| GET | /api/catalog/avatar | 아바타 모델·옵션 목록 |
| POST | /api/generate/style | 스타일 이미지 생성 |
| POST | /api/generate/avatar | 아바타 이미지 생성 |
생성 API 호출 전후 크레딧 순서: check → (생성) → deduct 성공 또는 팀 정책에 맞는 시점. 실패 시 rollback.
| 메서드 | 경로 |
|---|---|
| POST | /api/motion-video/generate |
| POST | /api/motion-video/status |
차감: motion_video_per_sec + meta.durationSeconds (루트에만 넣어도 서버가 meta로 병합).
GET /api/live-avatar/public-avatars — 스톡 아바타 목록(인증 없음).POST /api/live-avatar/ensure-server — 미디어 서버 준비(status: ready, endpoint).endpoint로 클라이언트 실시간 세션 연결 · LiveAvatar 연동.외부 SDK·세션 프로토콜: LiveAvatar 공식 문서
POST /api/live-avatar/ensure-server
// 200
{ "status": "ready", "endpoint": "wss://...", "message": "..." }
크레딧: live_avatar (기본 220C). check/deduct에 동일 service 사용.
GET /api/notices
GET /api/notices/:id
| 영역 | Prefix |
|---|---|
| OAuth | /api/kakao-auth |
| 사용자 | /api/user/* |
| 크레딧 | /api/credits/* |
| 카탈로그·생성 | /api/catalog/*, /api/generate/* |
| 모션 | /api/motion-video/* |
| 라이브 | /api/live-avatar/* (앱 연동), LiveKit 토큰·룸 API는 팀 내부 스펙 |
| 공지 | /api/notices |
| 헬스 | /health |
| HTTP | 의미 | 앱 처리 |
|---|---|---|
| 400 | 필수 필드·잘못된 service | 요청 수정 |
| 402 | 잔액 부족 | 충전 UI |
| 403 | 토큰·userId 불일치 | 재로그인 |
| 409 | quote 만료·service/cost 불일치 | check 재호출 |
| 429 | 1초 내 중복 deduct | 재시도 지연 |
quoteId 지원. check durationSeconds 병합.POST /api/credits/deduct/rollback, history type 필터.purchase/google-complete.