{"openapi":"3.1.0","info":{"title":"몽글 API","description":"꿈 기록과 꿈 세계관 서비스 API","version":"v1"},"servers":[{"url":"https://api.mongle.art","description":"Generated server url"}],"tags":[{"name":"Payment","description":"크레딧 단건 충전 상품과 본인 주문"},{"name":"Refund","description":"본인 유료 크레딧 환불 접수 및 조회"},{"name":"DreamImage","description":"꿈 이미지 생성 및 보존 결과 조회"},{"name":"Dream","description":"꿈 기록·자동저장·미완성 기록 복구"},{"name":"World Composition","description":"고정 성공 서사로 세계관을 구성합니다. 연결·부분 반영은 무료입니다."},{"name":"Credit","description":"내 크레딧 조회. 임의 지급·예약·확정·해제는 서버 내부 전용이며 일일 보상은 Attendance API에서 수령합니다."},{"name":"WorldImage","description":"세계관 완성본 이미지"},{"name":"Legal","description":"버전별 필수 문서 동의"},{"name":"World Folder","description":"세계관 폴더와 선택 목록 관리. AI 생성·크레딧 차감 없이 편집합니다."},{"name":"Auth","description":"로그인은 카카오만 지원합니다. 카카오 웹 로그인은 /oauth2/authorization/kakao로 브라우저 전체 이동합니다. 완료 화면에서 쿠키를 포함해 CSRF 조회 후 Refresh를 한 번 호출합니다. OAuth 시작/Callback은 보안 필터가 처리합니다."},{"name":"Attendance","description":"한국 시간 기준 하루 한 번 출석 보상 수령"},{"name":"Archive","description":"내 완성한 꿈 기록 탐색"},{"name":"DreamStory","description":"꿈 서사화 및 이야기 조회"},{"name":"World Summary","description":"완성 세계관의 AI 제목·근거 기반 공통 키워드·반복 감정. 크레딧을 사용하지 않습니다."},{"name":"DreamAnalysis","description":"꿈 장면 구조화 및 분석 조회"},{"name":"PayAppFeedback","description":"페이앱 서버 전용 결제 통보. 프론트에서 호출하지 않습니다."},{"name":"RecentInterpretation","description":"최근 꿈 분석 기반 무료 종합 해석"},{"name":"Dream Generation","description":"저장 완료 후 자동 분석·서사화 상태 및 재시도"},{"name":"User","description":"내 정보·닉네임 온보딩 및 변경"},{"name":"AnalysisRecord","description":"꿈 분석 기록 통계"}],"paths":{"/api/v1/worlds/{worldId}/dreams/{dreamId}":{"put":{"tags":["World Folder"],"summary":"세계관에 꿈 선택","description":"내 COMPLETED 기록만 추가합니다. AI 결과 성공 여부와 무관하며 AI 생성 중에도 선택할 수 있습니다. 최신 폴더 revision을 JSON으로 전달합니다. 이미 선택했으면 같은 revision을 유지합니다. 이전 revision은 409입니다.","operationId":"select","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldRevisionRequest"}}},"required":true},"responses":{"400":{"description":"입력 오류: WORLD_400_1 이름 / WORLD_400_2 페이지 / WORLD_400_3 커서 / WORLD_400_4 검색어. 필수값·양수 검증은 COMMON_400_2, 형식 오류는 COMMON_400_1","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"WORLD_404_1 폴더 없음·타인 폴더 / DREAM_404_1 꿈 없음·타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"409":{"description":"WORLD_409_1 폴더 revision 충돌 / WORLD_409_2 미완성 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"선택 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldFolderResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["World Folder"],"summary":"세계관에서 꿈 제외","description":"최신 폴더 revision을 쿼리로 전달합니다. 원본 꿈·개별 AI 결과를 삭제하지 않습니다. 선택되지 않은 내 완성 꿈이면 같은 revision을 유지합니다. 이전 revision은 409입니다.","operationId":"exclude","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"revision","in":"query","required":true,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"400":{"description":"입력 오류: WORLD_400_1 이름 / WORLD_400_2 페이지 / WORLD_400_3 커서 / WORLD_400_4 검색어. 필수값·양수 검증은 COMMON_400_2, 형식 오류는 COMMON_400_1","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"WORLD_404_1 폴더 없음·타인 폴더 / DREAM_404_1 꿈 없음·타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"409":{"description":"WORLD_409_1 폴더 revision 충돌 / WORLD_409_2 미완성 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"제외 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldFolderResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/emotions":{"put":{"tags":["Dream"],"summary":"감정 선택 및 기록 완성","description":"HAPPY(행복), CALM(편안함), EXCITED(설렘), SAD(슬픔), ANXIOUS(불안), ANGRY(화남), CONFUSED(당황) 중 중복 없이 1~2개를 선택합니다. 대표 감정과 순위는 없습니다. EMOTION_PENDING에서 COMPLETED로 저장하고 자동 분석·서사화 작업을 예약합니다. AI 완료를 기다리지 않고 응답하며, 생성 실패도 기록 완성을 되돌리지 않습니다.","operationId":"complete","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamEmotionsRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/drafts/{dreamedAt}":{"put":{"tags":["Dream"],"summary":"입력 중 꿈 자동저장","description":"최초 저장에는 dreamId와 revision을 생략하고 빈 원문도 허용합니다. 이후 응답의 dreamId·revision을 다음 요청에 전달합니다. DRAFT와 EMOTION_PENDING만 수정하며 날짜는 최초 저장 이후 변경할 수 없습니다. 최초 요청 재시도 중 409가 오면 미완성 목록에서 복구해주세요.","operationId":"saveDraft","parameters":[{"name":"dreamedAt","in":"path","required":true,"schema":{"type":"string","format":"date"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamDraftRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds":{"get":{"tags":["World Folder"],"summary":"내 세계관 폴더 목록","description":"폴더 ID 내림차순. 기본 size=20, 최대 50. query는 폴더 이름의 부분 일치이며 영문 대소문자를 구분하지 않습니다. %, _, !도 문자 그대로 검색합니다. 앞뒤 Unicode 공백 제외 최대 50 코드포인트, 생략·공백만이면 전체 조회, 초과하면 WORLD_400_4입니다. 꿈 본문·공통 키워드는 검색하지 않습니다. hasNext이면 같은 query와 nextBeforeId를 beforeId에 전달합니다. 검색어를 바꾸면 beforeId를 제거합니다. 기존 폴더 필드에 composedDreamCount(현재 공개 완성본의 꿈 수), representativeDream(가장 오래된 꿈의 현재 제목·날짜), summary를 더합니다. summary는 기존 생성 제목·공통 키워드·반복 감정 및 상태입니다. summary.sourceCount는 이전 요약의 출처 수일 수 있으므로 현재 연결 개수로 사용하지 않습니다. 빈 폴더도 포함하며 조회는 AI 호출·생성 접수·크레딧 차감 없이 처리합니다. 결과가 없으면 name을 제목으로 표시할 수 있습니다.","operationId":"list","parameters":[{"name":"beforeId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}},{"name":"query","in":"query","description":"폴더 이름 검색어. 앞뒤 공백 제외 최대 50 코드포인트","required":false,"schema":{"type":"string"},"example":"바다"}],"responses":{"400":{"description":"입력 오류: WORLD_400_1 이름 / WORLD_400_2 페이지 / WORLD_400_3 커서 / WORLD_400_4 검색어. 필수값·양수 검증은 COMMON_400_2, 형식 오류는 COMMON_400_1","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"WORLD_404_1 폴더 없음·타인 폴더 / DREAM_404_1 꿈 없음·타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"409":{"description":"WORLD_409_1 폴더 revision 충돌 / WORLD_409_2 미완성 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldFolderPage"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["World Folder"],"summary":"세계관 폴더 생성","description":"이름은 공백만 입력할 수 없고 최대 100 Unicode 코드포인트입니다. 이름 중복은 허용하며 빈 폴더를 revision=0으로 생성합니다.","operationId":"create","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldFolderRequest"}}},"required":true},"responses":{"400":{"description":"입력 오류: WORLD_400_1 이름 / WORLD_400_2 페이지 / WORLD_400_3 커서 / WORLD_400_4 검색어. 필수값·양수 검증은 COMMON_400_2, 형식 오류는 COMMON_400_1","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"WORLD_404_1 폴더 없음·타인 폴더 / DREAM_404_1 꿈 없음·타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"409":{"description":"WORLD_409_1 폴더 revision 충돌 / WORLD_409_2 미완성 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"201":{"description":"생성 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldFolderResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}/summary":{"get":{"tags":["World Summary"],"summary":"세계관 제목·키워드·감정 및 생성 상태 조회","description":"GET은 AI를 호출하지 않습니다. 폴더 name과 generatedTitle은 별개입니다. 세계관 완성·부분 반영 성공 후 자동 접수됩니다. commonKeywords와 recurringEmotions는 고정된 서사 버전의 분석·감정에서 서로 다른 꿈 2개 이상에 등장한 항목이며 dreamCount는 해당 꿈 수입니다. 근거가 없으면 빈 배열입니다. sourceCount는 표시 결과의 출처 수이며, limitedEvidence는 꿈이 2개 미만이거나 일부 구버전 분석·감정 스냅샷이 없는 경우입니다. refreshNeeded는 원문 변경·완성본 교체·설정 변경·미생성 안내입니다. 원문 변경은 먼저 새 서사를 세계관에 반영해야 합니다. 생성 중·실패 시 hasPreviousResult=true이면 이전 성공 결과를 표시할 수 있습니다. 삭제된 꿈을 사용한 텍스트 결과는 제거합니다. compositionRevision은 현재 완성본, resultCompositionRevision은 표시 결과의 버전입니다. 본인 소유·온보딩 완료 회원만 접근 가능합니다.","operationId":"get","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldSummaryResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["World Summary"],"summary":"세계관 제목·키워드·감정 생성 또는 재시도 접수","description":"요청 본문이 없습니다. 현재 완성본으로 무료 생성하며 같은 입력의 성공 결과·진행 작업은 재사용합니다. 202=PENDING/PROCESSING, 200=완료 재사용 또는 EMPTY. 기존 완성본도 이 API로 생성합니다. 접수 후 GET으로 상태를 확인합니다. 실패는 자동 재호출하지 않으며 같은 POST로 명시적으로 재시도합니다. 세계관 구성 생성 중은 409, 완성본 없음은 409, 입력 크기 초과는 400, 생성 비활성·미설정은 503입니다. 출처가 0개면 EMPTY이며 AI를 호출하지 않습니다. 1개인 기존 완성본도 제목을 만들 수 있으나 반복 근거는 빈 배열입니다. 세계관 이미지의 최소 꿈 2개 정책과는 별개입니다.","operationId":"request","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"202":{"description":"작업 접수 또는 진행 중","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldSummaryResponse"}}}},"200":{"description":"완료 결과 재사용 또는 출처 없음","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldSummaryResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}/image":{"get":{"tags":["WorldImage"],"summary":"세계관 이미지 상태 조회","description":"이전 성공 이미지와 compositionChanged/sourceChanged/sourceDeleted를 확인합니다. sourceDeleted는 삭제 전 구성 이미지 안내에 사용합니다. 기본 비용은 최초 생성 3, 세계관별 첫 재생성 성공 1회 무료, 이후 1크레딧입니다. freeRegenerationAvailable/nextRegenerationCost로 다음 비용을 표시합니다. 구성 변경·꿈 삭제는 무료 이력을 초기화하지 않습니다. 조회는 AI 호출·과금이 없습니다.","operationId":"get_1","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldImageResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["WorldImage"],"summary":"세계관 이미지 생성·재생성","description":"선택 목록 대신 완성본의 고정 이야기·연결을 사용합니다. compositionRevision 필수. 재생성은 regenerate=true와 최신 imageVersion이 필요합니다. 생성과 재생성은 설정된 크레딧을 사용하며 성공 결과 재사용·진행 중복은 추가 과금하지 않습니다. 새 요청은 비동기 처리 완료 후 200, 동일 진행 요청은 202입니다. 생성 중 구성 변경/삭제/만료는 새 결과 채택을 막고 예약을 해제합니다. 완성본에 서로 다른 꿈이 2개 이상 있어야 새로운 생성·재생성을 요청할 수 있습니다. 0~1개에서는 WORLD_IMAGE_409_1로 거절하며 기존 이미지 조회·다운로드는 유지합니다.","operationId":"generate","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldImageRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldImageResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}/composition":{"get":{"tags":["World Composition"],"summary":"세계관 완성본·작업 상태 조회","description":"폴더 revision·완성본 compositionRevision·작업 jobVersion을 구분합니다. GET은 AI를 호출하지 않습니다. 생성 중이거나 실패해도 hasResult=true이면 기존 완성본을 표시할 수 있습니다. attemptId=null은 아직 생성 요청이 없음을 뜻합니다. selectionChanged·sourceChanged·newStoryAvailable·hasConnectionGaps로 현재 완성본의 변경 안내를 표시합니다.","operationId":"get_2","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"400":{"description":"입력 형식·페이지 커서 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"404":{"description":"없는 폴더·출처 또는 타인 소유","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"409":{"description":"COMPOSITION_409_1 버전 충돌, COMPOSITION_409_2 최소 꿈 수, COMPOSITION_409_3 현재 서사 필요, COMPOSITION_409_4 작업 중, COMPOSITION_409_5 재시도 상태 오류, WORLD_409_1 폴더 버전 충돌, DREAM_409_4 서사 생성 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"503":{"description":"COMPOSITION_503_1 생성 비활성","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"200":{"description":"상태 조회","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["World Composition"],"summary":"세계관 완성본 생성","description":"선택한 꿈이 2개 이상이고 현재 원문·감정으로 완료한 서사가 필요합니다. 성공 버전을 날짜순으로 고정합니다. POST는 작업 접수만 수행하며 상태를 조회해야 합니다. 같은 진행 요청은 재사용하고 실패 시 이전 완성본을 보존합니다. folderRevision과 compositionRevision은 필수이며 최초 구성 버전은 0입니다. 크레딧은 차감하지 않습니다.","operationId":"build","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldBuildRequest"}}},"required":true},"responses":{"400":{"description":"입력 형식·페이지 커서 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"404":{"description":"없는 폴더·출처 또는 타인 소유","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"409":{"description":"COMPOSITION_409_1 버전 충돌, COMPOSITION_409_2 최소 꿈 수, COMPOSITION_409_3 현재 서사 필요, COMPOSITION_409_4 작업 중, COMPOSITION_409_5 재시도 상태 오류, WORLD_409_1 폴더 버전 충돌, DREAM_409_4 서사 생성 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"503":{"description":"COMPOSITION_503_1 생성 비활성","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"202":{"description":"작업 접수","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}/composition/retry":{"post":{"tags":["World Composition"],"summary":"실패한 세계관 작업 재시도","description":"실패·만료 작업의 최신 jobVersion으로 명시적으로 재시도합니다. 고정 출처와 이미 성공한 후보 연결을 재사용합니다. 폴더·구성·출처·생성 설정이 바뀌었으면 새 생성 또는 부분 반영 요청이 필요합니다. 불확실한 외부 호출을 자동 재전송하지 않습니다.","operationId":"retry","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldRetryRequest"}}},"required":true},"responses":{"400":{"description":"입력 형식·페이지 커서 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"404":{"description":"없는 폴더·출처 또는 타인 소유","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"409":{"description":"COMPOSITION_409_1 버전 충돌, COMPOSITION_409_2 최소 꿈 수, COMPOSITION_409_3 현재 서사 필요, COMPOSITION_409_4 작업 중, COMPOSITION_409_5 재시도 상태 오류, WORLD_409_1 폴더 버전 충돌, DREAM_409_4 서사 생성 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"503":{"description":"COMPOSITION_503_1 생성 비활성","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"202":{"description":"재시도 접수","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}/composition/dreams/{dreamId}/apply":{"post":{"tags":["World Composition"],"summary":"세계관에 새 서사 부분 반영","description":"완성본의 해당 꿈 서사와 앞뒤 연결만 갱신합니다. 다른 꿈에 새 버전이 있어도 기존 버전을 유지합니다. 영향 연결이 모두 성공한 뒤 함께 교체합니다. 같은 서사 버전은 변경 없이 반환합니다. 크레딧을 차감하지 않습니다.","operationId":"apply","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldApplyRequest"}}},"required":true},"responses":{"200":{"description":"동일 서사 버전으로 변경 없음","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"202":{"description":"부분 반영 접수","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"400":{"description":"입력 형식·페이지 커서 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"404":{"description":"없는 폴더·출처 또는 타인 소유","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"409":{"description":"COMPOSITION_409_1 버전 충돌, COMPOSITION_409_2 최소 꿈 수, COMPOSITION_409_3 현재 서사 필요, COMPOSITION_409_4 작업 중, COMPOSITION_409_5 재시도 상태 오류, WORLD_409_1 폴더 버전 충돌, DREAM_409_4 서사 생성 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}},"503":{"description":"COMPOSITION_503_1 생성 비활성","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldCompositionResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/me/onboarding":{"post":{"tags":["User"],"summary":"닉네임 온보딩 완료","description":"한글·영문·숫자 2~10자입니다. 최초 완료 시 가입 혜택 기본 3크레딧을 같은 트랜잭션으로 지급합니다. 같은 닉네임의 재요청은 추가 지급 없이 성공하며, 기존 완료 계정에 소급 지급하거나 다른 닉네임으로 덮어쓰지 않습니다. 크레딧 기능 미준비·지급 실패 시 가입 완료도 롤백합니다.","operationId":"onboarding","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingRequest"}}},"required":true},"responses":{"200":{"description":"온보딩 완료","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"400":{"description":"닉네임 검증 실패","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"401":{"description":"미인증 또는 유효하지 않은 토큰","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"409":{"description":"다른 닉네임으로 이미 완료됨","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"503":{"description":"CREDIT_503_1 크레딧 기능 비활성 또는 가입 지급량 미준비. 온보딩 변경 없음","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/me/agreements":{"post":{"tags":["Legal"],"summary":"이용약관·개인정보 필수 수집·이용 동의","description":"온보딩 전/기존 회원 모두 가능합니다. 두 필수 항목·만14세 이상 확인·현재 문서 버전과 SHA-256이 필요합니다. 시각은 서버 UTC로 기록하며 동일 버전 재요청은 최초 시각을 보존합니다. 회원 ID나 동의 시각을 요청에 넣지 않습니다.","operationId":"accept","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegalConsentRequest"}}},"required":true},"responses":{"200":{"description":"갱신된 회원 상태","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"400":{"description":"LEGAL_400_1 필수 동의/연령 확인 누락 또는 거절","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"409":{"description":"LEGAL_409_1 요청한 문서 버전·해시가 현재와 다름","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"503":{"description":"LEGAL_503_1 공개 전/문서 미준비, LEGAL_503_2 동일 버전의 해시 충돌","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/payments/refunds":{"get":{"tags":["Refund"],"summary":"본인 환불 접수 목록 조회","description":"기본 20개, 최대 50개입니다.","operationId":"page","parameters":[{"name":"beforeId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseRefundPage"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Refund"],"summary":"본인 주문의 환불 신청 접수","description":"같은 요청 UUID와 주문·사유를 재전송하면 같은 접수번호를 반환합니다. 대상 구매분을 보류하고 문의 이메일을 반환합니다.","operationId":"receive","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseRefundReceipt"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/payments/payapp/feedback":{"post":{"tags":["PayAppFeedback"],"summary":"페이앱 결제 통보","description":"FORM POST. 서버 인증 값·응답 시각·해시·주문별 비밀 상관값·금액·거래를 검증합니다. DB 커밋 완료 후에만 plain text SUCCESS를 반환합니다. 중복 통보는 재지급하지 않습니다. 오류는 FAIL이며 payload를 반환하지 않습니다.","operationId":"feedback","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Fields"}}},"required":true},"responses":{"200":{"description":"커밋 완료 또는 정확한 중복 통보","content":{"text/plain":{"schema":{"type":"string","example":"SUCCESS"}}}},"400":{"description":"통보 검증 실패","content":{"text/plain":{"schema":{"type":"string"}}}},"503":{"description":"처리 실패. 지급하지 않고 재통보 대기","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/payments/orders":{"get":{"tags":["Payment"],"summary":"내 크레딧 구매 주문 내역","description":"본인의 주문만 주문 ID 내림차순으로 조회합니다. 기본 size=20, 최대50. hasNext이면 nextBeforeId를 beforeId에 전달합니다. 요청 중·미확정·취소·결제 완료 상태를 구분합니다.","operationId":"page_1","parameters":[{"name":"beforeId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"400":{"description":"PAYMENT_400_2 페이지 크기/커서 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderPage"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderPage"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderPage"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderPage"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["Payment"],"summary":"크레딧 충전 주문 생성","description":"requestId는 결제 버튼 한 번의 UUID이며 재전송 시 유지합니다. 같은 ID의 상품/휴대폰 변경은 409입니다. 결제 요청 결과와 결제 완료는 다르며 지급은 검증된 통보로만 이루어집니다. REQUESTING/UNKNOWN은 결제 요청을 자동 재전송하지 말고 주문을 조회하세요. 설정 미준비는503입니다.","operationId":"create_1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentOrderRequest"}}},"required":true},"responses":{"200":{"description":"주문 상태 반환. 결제 완료를 뜻하지 않음","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"202":{"description":"동일 주문의 결제 요청 진행 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"400":{"description":"입력 형식/휴대폰 검증 실패","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"409":{"description":"PAYMENT_409_1 판매 불가, PAYMENT_409_2 식별자 충돌, PAYMENT_409_3 거래 충돌, CREDIT_409_5 결제 확인 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"503":{"description":"PAYMENT_503_1 설정 미준비, PAYMENT_503_2 동시 요청 한도","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/images/download-urls":{"post":{"tags":["DreamImage"],"summary":"내 꿈 이미지 임시 URL 일괄 발급","description":"중복 제거 전 1~31개의 양수 imageIds가 필요합니다. 중복은 최초 순서로 한 번만 반환합니다.\nHTTP 200 안의 items[].status와 failureCode를 항목별로 확인합니다. 전체 실패여도 200입니다.\n타인·없는 이미지·삭제·성공 파일 없음은 모두 FAILED/IMAGE_404_1이며 imageVersion은 null입니다.\n재생성 진행/실패 중에도 보존된 성공 파일이 있으면 발급합니다. 일부 발급 실패는 다른 항목에 영향을 주지 않습니다.\nSUCCESS 항목의 imageVersion은 조회 시점의 스냅샷 버전이며 url/expiresAt을 제공합니다.\n저장소 미설정은 IMAGE_503_1, 서명·URL 검증 실패는 IMAGE_502_2입니다. 실패 시 url/expiresAt은 null입니다.\nHTTPS·최대 5분·Cache-Control:no-store를 유지하며 AI 호출이나 과금은 없습니다.\n서명 중 DB 트랜잭션·잠금을 유지하지 않습니다. 배치 내 순차 처리, 인스턴스 동시 배치 수 제한을 적용합니다.\n조회 후 삭제·재생성하면 이미 발급된 URL은 만료 전까지 유효하거나 파일 정리로 먼저 사용할 수 없게 될 수 있습니다.\n반환 URL은 원본 파일 주소이며 작은 썸네일 파일을 생성하지 않습니다. 세계관 이미지 ID는 대상이 아닙니다.\n","operationId":"downloadUrls","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchImageDownloadRequest"}}},"required":true},"responses":{"200":{"description":"항목별 성공·실패 결과","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseBatchImageDownloadResponse"}}}},"400":{"description":"배열 1~31개, null·0·음수 ID 불가","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseBatchImageDownloadResponse"}}}},"503":{"description":"IMAGE_503_2 동시 배치 한도 초과. 잠시 후 재시도","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseBatchImageDownloadResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams":{"post":{"tags":["Dream"],"summary":"꿈 원문 등록","description":"자동저장 없이 다음을 누를 때 사용합니다. 원문 최대 500자, 한국 날짜 기준 미래 불가, 날짜당 1개입니다. 제목 없이 EMOTION_PENDING으로 저장합니다. 이미 초안이 있으면 submit을 호출해주세요.","operationId":"create_2","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamCreateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/submit":{"post":{"tags":["Dream"],"summary":"원문 작성 완료","description":"최신 revision을 전달합니다. 저장된 초안의 원문을 검증한 뒤 EMOTION_PENDING으로 이동합니다. 자동저장 응답을 받은 후 호출해주세요.","operationId":"submit","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamRevisionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/story":{"get":{"tags":["DreamStory"],"summary":"꿈의 이야기 조회","description":"이야기가 없거나 타인의 꿈이면 404입니다.","operationId":"latest","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseStoryResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["DreamStory"],"summary":"완성 꿈 이야기 생성·재생성","description":"현재 꿈 revision과 완료된 장면 분석이 필요합니다. 원문과 분석 버전이 다르면 409입니다.\nregenerate=false이면 완료 결과를 재사용하고 실패·만료 작업은 재시도합니다.\nregenerate=true이면 조회한 storyVersion도 전달합니다. 오래된 재생성 요청은 409입니다.\n진행 중 중복 요청은 202, 완료·실패 결과는 200, Gateway 키 미설정은 503입니다.\n실패는 status와 failureCode로 구분하며 재생성 실패 시 이전 결과를 유지합니다.\nresultVersionId는 표시 중인 성공 결과의 고정 버전 ID입니다. 실패·진행 중에는 이전 성공 ID를 유지합니다.\nSCENE은 AI가 다듬은 장면, AI_BRIDGE는 AI가 보완한 연결부입니다.\n","operationId":"generate_1","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseStoryResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/image":{"get":{"tags":["DreamImage"],"summary":"꿈의 이미지 상태 조회","operationId":"latest_1","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseImageResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["DreamImage"],"summary":"꿈 이미지 생성·재생성","description":"생성 응답은 비동기로 완료되며 외부 대기 동안 요청 스레드를 점유하지 않습니다.\n최신 꿈 revision과 현재 원문으로 완료한 분석·이야기가 필요합니다.\n중복 요청은 진행 중 202, 완료 결과 재사용은 200입니다. 옵션·이야기 변경은 재생성이 필요합니다.\nregenerate=true일 때 조회한 imageVersion도 전달합니다. 오래된 요청은 409입니다.\n새 작업의 인스턴스 처리 한도 초과는 IMAGE_503_2입니다. 기존 결과 재사용은 한도와 무관합니다.\nProvider/스토리지/스타일 미설정은 503입니다. 처리 실패는 status=FAILED와 failureCode로 표시합니다.\nProvider 실패는 인증/요청 제한/시간 초과/연결 불가/요청 거절로 분류하며 자동 재호출하지 않습니다.\n새 생성은 크레딧을 예약하고 성공 이미지 저장과 함께 차감을 확정합니다. 실패·만료 시 예약을 해제합니다.\n기본 정책은 최초 생성 3크레딧, 꿈별 첫 재생성 성공 1회 무료, 이후 1크레딧입니다.\n기존 결과 조회·재사용과 진행 요청 중복은 추가 차감하지 않습니다. 실패·만료는 무료 횟수를 소진하지 않습니다.\nfreeRegenerationAvailable/nextRegenerationCost로 다음 비용을 표시합니다. 원문·감정 변경은 무료 횟수를 초기화하지 않습니다.\n재생성 실패 시 이전 성공 결과를 유지합니다. 생성 도중 결제 사용 보류 시 CREDIT_PAYMENT_REVIEW로 실패합니다.\n","operationId":"generate_2","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageRequest"}}},"required":true},"responses":{"200":{"description":"완료 또는 실패 상태, 기존 결과 재사용","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseImageResponse"}}}},"202":{"description":"동일 이미지 생성 진행 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseImageResponse"}}}},"409":{"description":"버전/재생성 충돌 또는 CREDIT_409_1 잔액 부족, CREDIT_409_5 결제 확인 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseImageResponse"}}}},"503":{"description":"Provider/저장소/옵션 미준비, IMAGE_503_2 처리 한도, CREDIT_503_1 과금 비활성 또는 사용량 미설정","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseImageResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/generation/retry":{"post":{"tags":["Dream Generation"],"summary":"실패한 자동 생성 단계 재시도","description":"최신 꿈 revision을 전달합니다. 분석 성공 후 서사화가 실패하면 서사화만 재시도합니다.\n202는 현재 상태의 반환이며, FAILED 작업만 재예약합니다.\n대기·진행·완료 작업은 재예약하지 않습니다. 원문이 바뀐 작업은 409입니다.\n재시도 시 외부 호출 비용이 발생할 수 있습니다.\n","operationId":"retry_1","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamRevisionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamGenerationResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/generation/regenerate":{"post":{"tags":["Dream Generation"],"summary":"최신 입력으로 분석·서사 명시적 재생성","description":"꿈 revision과 generation 조회의 generationVersion을 전달합니다.\n진행 중 동일 입력 작업은 재사용하며 완료된 요청의 재전송은 409입니다.\n새 분석·서사가 모두 성공할 때만 기존 결과를 교체합니다. 이미지·세계관은 갱신하지 않습니다.\n대기·진행 중 꿈 수정·삭제는 409입니다. 이미지·브리지 작업 진행 중에는 신규 재생성을 예약하지 않습니다.\n            크레딧 차감은 아직 연동하지 않습니다.\n","operationId":"regenerate","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamRegenerationRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamGenerationResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/analysis":{"post":{"tags":["DreamAnalysis"],"summary":"완성 꿈 장면 구조화","description":"장면·요소와 20자 이내 자동 제목, 표시 키워드 1~5개를 함께 생성합니다. 사용자가 정하거나 직접 비운 제목은 유지합니다. 자동 제목 저장 후 revision은 dreamRevision을 사용하거나 꿈을 다시 조회하세요. sourceRevision은 유지됩니다. 중복 요청은 기존 분석을 반환하며 scene-v1의 제목·키워드는 자동 보충하지 않습니다. 실패 분석은 최신 revision으로 재시도하며 Gateway 키 미설정은 503입니다.","operationId":"analyze","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamRevisionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseAnalysisResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/auth/refresh":{"post":{"tags":["Auth"],"summary":"인증 토큰 재발급","description":"HttpOnly Refresh 쿠키와 CSRF 헤더가 필요합니다. 성공 시 Refresh 쿠키가 교체되며 이전 값은 사용할 수 없습니다. credentials를 포함하고 동시 갱신 요청을 하나로 합쳐야 합니다. 응답 user.onboardingCompleted로 온보딩을 분기합니다.","operationId":"refresh","responses":{"200":{"description":"새 Access Token 및 사용자 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseTokenResponse"}}}},"401":{"description":"Refresh 쿠키가 없거나 만료·변조됨","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseTokenResponse"}}}},"403":{"description":"CSRF 검증 실패","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseTokenResponse"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["Auth"],"summary":"현재 로그인 세션 로그아웃","description":"현재 Refresh 쿠키를 삭제하고 연결된 Access Token을 무효화합니다. 다른 기기의 로그인은 유지합니다. CSRF 헤더가 필요합니다.","operationId":"logout","responses":{"200":{"description":"로그아웃 완료, 이미 로그아웃한 경우 포함","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}},"403":{"description":"CSRF 검증 실패","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}}}}},"/api/v1/attendance/claim":{"post":{"tags":["Attendance"],"summary":"오늘 출석 보상 수령","description":"요청 본문 없이 호출합니다. 사용자·날짜·지급량은 서버에서 결정합니다. 한국 시간 자정에 새 보상이 열리며 소급 지급하지 않습니다. 반복 요청도 200이며 alreadyClaimed=true와 기존 지급량·현재 잔액을 반환합니다. 이미 수령한 당일 보상의 재확인은 기능 비활성 상태에서도 가능합니다.","operationId":"claim","responses":{"200":{"description":"수령 또는 기존 수령 재확인","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseAttendanceClaim"}}}},"409":{"description":"CREDIT_409_2 지급 키 충돌 / CREDIT_409_4 잔액 범위 초과","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"503":{"description":"CREDIT_503_1 전체 크레딧 또는 출석 보상 비활성","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"CREDIT_404_1 사용자 없음","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/analysis-records/interpretation":{"get":{"tags":["RecentInterpretation"],"summary":"종합 해석 및 갱신 필요 여부 조회","description":"AI 호출 없이 최신 완성본과 상태를 조회합니다. 대상 없음은 EMPTY, 최초 생성 전은 NOT_GENERATED입니다. 삭제된 꿈을 사용한 본문은 노출하지 않습니다.","operationId":"get_3","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseInterpretationResponse"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["RecentInterpretation"],"summary":"첫 진입 종합 해석 생성","description":"화면 첫 진입 시 호출합니다. 최초 성공 전만 생성/재시도하고 동일 대상은 재사용합니다. 이전 성공 후 대상 변경은 refreshNeeded로 안내하며 자동 갱신하지 않습니다. 진행 중은 202, 완료·실패·빈 상태는 200입니다. 무료이며 생성 비활성/키 미설정은 503입니다.","operationId":"ensure","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseInterpretationResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/analysis-records/interpretation/refresh":{"post":{"tags":["RecentInterpretation"],"summary":"종합 해석 명시적 갱신","description":"변경 안내 후 갱신 버튼에서 호출합니다. 현재 대상의 성공본이 이미 있으면 재사용하고, 진행 중 시도는 중복 생성하지 않습니다. 실패해도 유효한 이전 본문을 유지하며 재시도할 수 있습니다. 크레딧 차감 없이 동작합니다.","operationId":"refresh_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseInterpretationResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}":{"get":{"tags":["World Folder"],"summary":"세계관 폴더 상세","description":"메타데이터·선택 수·최신 revision을 반환합니다. 선택한 꿈은 별도 페이지 API로 조회합니다. 선택 수가 0~1개여도 유지합니다. 없는 ID와 타인 ID는 동일한 404입니다.","operationId":"get_4","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"400":{"description":"입력 오류: WORLD_400_1 이름 / WORLD_400_2 페이지 / WORLD_400_3 커서 / WORLD_400_4 검색어. 필수값·양수 검증은 COMMON_400_2, 형식 오류는 COMMON_400_1","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"WORLD_404_1 폴더 없음·타인 폴더 / DREAM_404_1 꿈 없음·타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"409":{"description":"WORLD_409_1 폴더 revision 충돌 / WORLD_409_2 미완성 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldFolderResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["World Folder"],"summary":"세계관 폴더 삭제","description":"최신 revision을 쿼리로 전달합니다. 폴더·선택 관계·해당 완성본과 후보 작업을 영구 삭제합니다. 원본 꿈·개별 AI 결과·다른 폴더와 공유 연결 결과는 보존합니다.","operationId":"delete","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"revision","in":"query","required":true,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"400":{"description":"입력 오류: WORLD_400_1 이름 / WORLD_400_2 페이지 / WORLD_400_3 커서 / WORLD_400_4 검색어. 필수값·양수 검증은 COMMON_400_2, 형식 오류는 COMMON_400_1","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"WORLD_404_1 폴더 없음·타인 폴더 / DREAM_404_1 꿈 없음·타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"409":{"description":"WORLD_409_1 폴더 revision 충돌 / WORLD_409_2 미완성 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"삭제 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["World Folder"],"summary":"세계관 폴더 이름 수정","description":"최신 revision 필수. 이름은 최대 100 Unicode 코드포인트이며 앞뒤 공백을 보존합니다. 같은 이름이면 revision·수정 시각을 유지합니다. 이전 revision이면 같은 값도 409입니다.","operationId":"rename","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldFolderUpdateRequest"}}},"required":true},"responses":{"400":{"description":"입력 오류: WORLD_400_1 이름 / WORLD_400_2 페이지 / WORLD_400_3 커서 / WORLD_400_4 검색어. 필수값·양수 검증은 COMMON_400_2, 형식 오류는 COMMON_400_1","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"WORLD_404_1 폴더 없음·타인 폴더 / DREAM_404_1 꿈 없음·타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"409":{"description":"WORLD_409_1 폴더 revision 충돌 / WORLD_409_2 미완성 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"수정 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldFolderResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/me/nickname":{"patch":{"tags":["User"],"summary":"내 닉네임 변경","description":"온보딩을 완료한 본인의 닉네임을 변경합니다. 한글·영문·숫자 2~10자이며 앞뒤 공백도 허용하지 않습니다. 닉네임 중복은 허용합니다. 같은 닉네임은 수정 시각을 바꾸지 않는 무변경 응답입니다. 닉네임만 입력하며 다른 필드는 거절합니다. 온보딩 상태와 크레딧은 유지하고 가입 혜택을 다시 지급하지 않습니다. 크레딧 비활성 상태에서도 변경 가능하며 기존 로그인 세션을 유지합니다.","operationId":"updateNickname","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NicknameUpdateRequest"}}},"required":true},"responses":{"200":{"description":"변경 후 사용자 정보. 동일 닉네임도 200","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"400":{"description":"COMMON_400_2 닉네임 검증 실패 / COMMON_400_1 잘못된 본문·허용하지 않은 필드","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"401":{"description":"미인증 또는 유효하지 않은 토큰","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"403":{"description":"USER_403_1 온보딩 미완료","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"404":{"description":"USER_404_1 사용자 없음","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}":{"get":{"tags":["Dream"],"summary":"내 꿈 단건 조회","description":"타인의 기록과 없는 기록은 모두 404입니다. 원문·감정·작성 상태·수정 표시·최신 revision과 AI 입력 버전 sourceRevision, 표시 키워드 displayKeywords, 이전 분석 입력 여부 analysisSourceChanged를 반환합니다. 이미지가 없어도 제목·키워드를 조회할 수 있습니다.","operationId":"get_5","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Dream"],"summary":"내 꿈 삭제","description":"최신 revision을 쿼리로 전달합니다. 꿈·감정·관련 분석·장면·요소·서사·모든 성공 버전·개별 이미지 기록과 연결 결과를 함께 영구 삭제합니다. 삭제 결과 조회는 404이며 통계·최근 분석에서 제외합니다. AI 호출·새 연결 생성은 없습니다. 이미지 파일은 확인 가능한 마지막 성공 키를 정리 요청으로 기록하며 실제 저장소 삭제 완료를 뜻하지 않습니다. 정리 요청 저장 실패 시 전체 삭제를 취소합니다. 활성 생성 중에는 409로 차단합니다. 세계관 선택 관계도 함께 삭제하고 해당 폴더의 선택 수·revision을 갱신합니다. 폴더와 다른 꿈은 보존합니다.","operationId":"delete_1","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"revision","in":"query","required":true,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["Dream"],"summary":"완성한 꿈 수정","description":"revision 필수. 미전달 항목은 유지합니다. originalText는 최대 500자이며 null·빈 내용은 불가합니다. 감정은 기존 7종 중 중복 없이 1~2개로 수정할 수 있습니다. title:null 또는 빈 문자열·공백만 있는 값은 제목 제거입니다. 제목은 최대 20자입니다. 날짜 및 사용자 ID는 변경할 수 없습니다. 제목 수정은 revision만 증가시키고 AI 입력 버전 sourceRevision은 유지합니다. 원문·감정 변경은 두 버전을 증가시키며 이전 분석·이야기는 보존합니다. 실제 변경 시 edited=true이며 같은 값 재전달은 수정 표시·버전을 바꾸지 않습니다. 이미지·브리지 생성 중에는 제목을 포함해 409로 차단합니다.","operationId":"update","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DreamUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}/image/download-url":{"get":{"tags":["WorldImage"],"summary":"세계관 이미지 다운로드 URL","description":"본인 세계관의 마지막 성공 이미지에 대해 최대 5분 HTTPS URL을 발급합니다. 재생성 중/실패 및 꿈 삭제 후에도 이전 이미지가 있으면 조회할 수 있습니다.","operationId":"download","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseDownloadUrl"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}/dreams":{"get":{"tags":["World Folder"],"summary":"선택한 꿈 페이지 조회","description":"꿈 날짜·ID 오름차순. size 기본 20, 최대 50이며 선택 총개수 제한은 없습니다. hasNext이면 nextCursor를 cursor로 전달합니다. 커서는 같은 폴더·revision에서만 유효하며 폴더 편집·꿈 삭제 후에는 409로 목록을 처음부터 새로 불러옵니다. 원문·제목은 현재 꿈 값이며 완성 세계관의 스냅샷이 아닙니다.","operationId":"selectedDreams","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"400":{"description":"입력 오류: WORLD_400_1 이름 / WORLD_400_2 페이지 / WORLD_400_3 커서 / WORLD_400_4 검색어. 필수값·양수 검증은 COMMON_400_2, 형식 오류는 COMMON_400_1","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"WORLD_404_1 폴더 없음·타인 폴더 / DREAM_404_1 꿈 없음·타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"409":{"description":"WORLD_409_1 폴더 revision 충돌 / WORLD_409_2 미완성 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseSelectedDreamPage"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/worlds/{worldId}/composition/entries":{"get":{"tags":["World Composition"],"summary":"완성 세계관 구성 페이지 조회","description":"날짜순이며 size는 1~50, 기본 20입니다. nextCursor를 그대로 전달하고 완성본이 바뀌면 409 후 처음부터 조회합니다. 완성된 구성만 반환합니다. 삭제로 연결이 비면 connectionGap=true입니다. 원본 수정만으로 저장된 본문이 바뀌지 않습니다.","operationId":"page_2","parameters":[{"name":"worldId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"400":{"description":"입력 형식·페이지 커서 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldEntryPage"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldEntryPage"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldEntryPage"}}}},"404":{"description":"없는 폴더·출처 또는 타인 소유","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldEntryPage"}}}},"409":{"description":"COMPOSITION_409_1 버전 충돌, COMPOSITION_409_2 최소 꿈 수, COMPOSITION_409_3 현재 서사 필요, COMPOSITION_409_4 작업 중, COMPOSITION_409_5 재시도 상태 오류, WORLD_409_1 폴더 버전 충돌, DREAM_409_4 서사 생성 중","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldEntryPage"}}}},"503":{"description":"COMPOSITION_503_1 생성 비활성","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldEntryPage"}}}},"200":{"description":"구성 조회","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldEntryPage"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/users/me":{"get":{"tags":["User"],"summary":"내 정보 조회","description":"온보딩 전에도 조회할 수 있습니다.","operationId":"me","responses":{"200":{"description":"사용자 정보 및 온보딩 완료 여부","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}},"401":{"description":"미인증 또는 유효하지 않은 토큰","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseUserResponse"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["User"],"summary":"회원탈퇴","description":"온보딩 전에도 가능합니다. 모든 로그인 세션을 무효화하고 개인 콘텐츠를 삭제합니다. 카카오 연결/이미지 파일은 후속 작업으로 정리합니다. 유료 잔액에 대한 환불 미접수 또는 결제 승인 미확정이면 차단합니다. 환불 접수 후에는 환불 완료를 기다리지 않습니다.","operationId":"withdraw","responses":{"200":{"description":"탈퇴 완료","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}},"401":{"description":"인증 필요 또는 이미 무효화된 세션","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}},"409":{"description":"USER_409_2 환불 신청 필요 / USER_409_3 결제 승인 확인 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}},"503":{"description":"USER_503_1 탈퇴 기능 미준비","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseVoid"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/stories/{storyId}":{"get":{"tags":["DreamStory"],"summary":"내 이야기 단건 조회","description":"꿈 삭제 시 이야기와 성공 버전도 제거합니다. 삭제·타인·없는 이야기는 모두 404입니다.\nsourceChanged는 표시 중인 성공 결과(없으면 시도)의 원문 버전 변경 여부입니다.\nhasPreviousResult=true이면 sections는 현재 시도가 아닌 이전 성공 결과입니다.\n","operationId":"get_6","parameters":[{"name":"storyId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseStoryResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/stories/{storyId}/versions":{"get":{"tags":["DreamStory"],"summary":"내 이야기의 성공 버전 목록","description":"최신 버전부터 조회합니다. limit은 1~50(기본 20), 다음 요청의 before에는 nextCursor를 전달합니다. 실패/진행 중 시도는 포함하지 않습니다. storyVersion은 요청 충돌 검사용이며 versionId와 다릅니다.","operationId":"versions","parameters":[{"name":"storyId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"before","in":"query","required":false,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseStoryVersionPage"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/stories/{storyId}/versions/{versionId}":{"get":{"tags":["DreamStory"],"summary":"내 이야기의 특정 성공 버전 조회","description":"versionId로 생성 당시 내용을 조회합니다. 이후 재생성으로 내용은 바뀌지 않습니다. 다른 이야기의 버전/타인 소유/없는 버전은 404입니다. sourceChanged는 현재 입력과의 차이입니다.","operationId":"version","parameters":[{"name":"storyId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"versionId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseStoryVersionResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/payments/refunds/{receiptId}":{"get":{"tags":["Refund"],"summary":"본인 환불 접수 상세 조회","operationId":"get_7","parameters":[{"name":"receiptId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseRefundReceipt"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/payments/refunds/estimate":{"get":{"tags":["Refund"],"summary":"본인 주문의 예상 환불액 조회","description":"구매별 미사용·예약 수량을 조회합니다. 예약 중이거나 별도 검토가 필요하면 금액은 null입니다.","operationId":"estimate","parameters":[{"name":"orderId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","default":"STANDARD","enum":["STANDARD","RIGHTS_REVIEW"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseRefundEstimate"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/payments/products":{"get":{"tags":["Payment"],"summary":"크레딧 충전 상품 목록","description":"신규 결제·크레딧·결제 Provider가 활성화된 경우 설정된 활성 상품을 반환합니다. 미준비·판매 중지·상품 미설정이면 빈 목록입니다. 회원별 결제 보류 및 외부 결제사 장애까지 보장하는 상태 점검은 아닙니다. 가격·지급량을 클라이언트에서 결정하지 않습니다.","operationId":"products","responses":{"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseListCreditProduct"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseListCreditProduct"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseListCreditProduct"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/payments/orders/{orderId}":{"get":{"tags":["Payment"],"summary":"내 결제 주문 상태 조회","description":"결제창 복귀 뒤 이 API로 확인합니다. 타인 주문과 없는 주문은 동일한404입니다. 오래된 REQUESTING은 UNKNOWN으로 표시하며 조회로 결제 요청·지급을 실행하지 않습니다.","operationId":"get_8","parameters":[{"name":"orderId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"404":{"description":"PAYMENT_404_1 없는 주문 또는 타인 주문","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/payments/orders/by-request-id/{requestId}":{"get":{"tags":["Payment"],"summary":"요청 식별자로 내 결제 주문 복구 조회","description":"POST 응답을 잃었을 때 보관한 requestId UUID로 본인 주문을 조회합니다. 기존 주문 응답을 재사용하며 결제 요청·신규 주문·지급을 실행하지 않습니다. 타인 주문/없는 주문은 동일한404입니다. 생성 트랜잭션이 진행 중이면 일시적으로404일 수 있으므로 한 번의404로 새 requestId를 만들거나 자동 재결제하지 마세요. REQUESTING/UNKNOWN은 같은 식별자를 보존해 재조회하고 장기 미확정은 문의로 전환합니다. 신규 판매 중지 후에도 조회할 수 있습니다.","operationId":"byRequestId","parameters":[{"name":"requestId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"400":{"description":"PAYMENT_400_1 UUID 형식 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"404":{"description":"PAYMENT_404_1 없는 주문 또는 타인 주문. 생성 중 일시적 미조회 가능","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsePaymentOrderResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/legal/documents":{"get":{"tags":["Legal"],"summary":"필수 동의 문서 버전·해시 조회","description":"공개 조회입니다. published=false이면 동의를 접수하지 않습니다. 프론트는 published=true인 현재 버전·해시와 동일한 문서를 각각 표시해야 합니다. 본문을 반환하는 API는 아니며 PRIVACY는 필수 개인정보 수집·이용 고지입니다.","operationId":"documents","responses":{"200":{"description":"문서 메타데이터","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseLegalDocumentCatalog"}}}},"503":{"description":"LEGAL_503_1 문서 미준비, LEGAL_503_2 동일 버전의 해시 충돌","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseLegalDocumentCatalog"}}}}}}},"/api/v1/images/{imageId}":{"get":{"tags":["DreamImage"],"summary":"내 이미지 단건 조회","description":"꿈 삭제 시 이미지 기록도 제거합니다. 삭제·타인·없는 결과는 모두 404입니다.\nhasPreviousResult=true이면 MIME·크기·resultStyle/resultMood는 이전 성공 결과입니다.\nsourceChanged/storyChanged는 표시 중인 결과의 입력 변경 여부입니다. 저장 키와 URL은 포함하지 않습니다.\n","operationId":"get_9","parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseImageResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/images/{imageId}/download-url":{"get":{"tags":["DreamImage"],"summary":"내 이미지 임시 다운로드 URL 발급","description":"소유권 확인 후 HTTPS URL을 최대 5분간 발급합니다. 꿈 삭제 후 새 URL 발급은 404이며 응답을 캐시하지 않습니다. 이미 발급한 URL은 만료 전까지 유효할 수 있습니다.","operationId":"downloadUrl","parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseDownloadUrl"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/image-options":{"get":{"tags":["DreamImage"],"summary":"허용 이미지 옵션 조회","description":"운영 설정의 허용 옵션을 반환합니다. 빈 styles이면 생성 기능이 준비되지 않았습니다.","operationId":"options","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseImageOptions"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/world-impacts":{"get":{"tags":["World Composition"],"summary":"꿈 영구 삭제의 세계관 영향 조회","description":"선택 관계만 있는 폴더와 실제 완성본에서 사용하는 세계관을 함께 조회합니다. 선택 목록에서 제외했어도 완성본 출처이면 포함합니다. ID 내림차순, size 1~50·기본 20입니다. 안내용 조회이며 실제 삭제 시 생성 보호를 재검사하고 관련 구성을 함께 변경합니다. 없는 꿈·타인 꿈은 동일한 404입니다. AI를 호출하지 않습니다.","operationId":"impacts","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}},{"name":"beforeId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"영향 세계관 목록","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldImpactPage"}}}},"400":{"description":"페이지 입력 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldImpactPage"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldImpactPage"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldImpactPage"}}}},"404":{"description":"없는 꿈 또는 타인 꿈","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseWorldImpactPage"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/mutation-status":{"get":{"tags":["Dream"],"summary":"꿈 수정·삭제 허용 상태 조회","description":"mutable과 blockingTasks(ANALYSIS_STORY/IMAGE/WORLD_BRIDGE)를 반환합니다. 이미지·브리지는 유효한 lease의 진행 작업만 차단합니다. 조회는 잠금이 아니며 실제 수정·삭제 시 서버가 재검사합니다. 차단 중에는 409 DREAM_409_4입니다.","operationId":"mutationStatus","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamMutationStatus"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/{dreamId}/generation":{"get":{"tags":["Dream Generation"],"summary":"자동 생성 진행 상태 조회","description":"stage는 ANALYSIS/STORY, status는 QUEUED/PROCESSING/COMPLETED/FAILED입니다.\nsourceChanged는 원문 변경 여부이며 결과 ID로 기존 조회 API를 사용합니다.\n원문과 감정은 반환하지 않습니다. 기존 기록에 자동 작업이 없으면 404입니다.\n","operationId":"get_10","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamGenerationResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/dreams/incomplete":{"get":{"tags":["Dream"],"summary":"미완성 꿈 복구 목록","description":"DRAFT와 EMOTION_PENDING을 날짜 내림차순으로 조회합니다. items의 dreamedAt·recordStatus로 안내 모달과 복구할 화면을 정합니다. 기본 20개, 최대 50개이며 hasNext이면 다음 페이지를 조회합니다.","operationId":"incomplete","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0,"minimum":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20,"maximum":50,"minimum":1}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseIncompleteDreams"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/credits/transactions":{"get":{"tags":["Credit"],"summary":"내 크레딧 이용 내역","description":"원장 ID 내림차순. 기본 size=20, 최대50. hasNext이면 nextBeforeId를 beforeId에 전달합니다. 지급·예약·사용 확정·예약 해제를 구분하며 내부 요청 식별자는 반환하지 않습니다.","operationId":"transactions","parameters":[{"name":"beforeId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseCreditTransactionPage"}}}},"400":{"description":"CREDIT_400_2 조회 개수/커서 오류","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"CREDIT_404_1 사용자 없음","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/credits/balance":{"get":{"tags":["Credit"],"summary":"내 크레딧 잔액","description":"사용 가능·예약 중·총 잔액을 조회합니다. 계정에 지급 내역이 없으면 모두 0이며 조회로 지급이나 계정 생성이 발생하지 않습니다. 크레딧 기능 비활성 상태에서도 조회할 수 있습니다.","operationId":"balance","responses":{"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"CREDIT_404_1 사용자 없음","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseCreditBalanceResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/auth/csrf":{"get":{"tags":["Auth"],"summary":"CSRF 토큰 조회","description":"쿠키를 유지하고 반환된 headerName과 token을 재발급·로그아웃 요청 헤더에 넣습니다.","operationId":"csrf","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseCsrfResponse"}}}}}}},"/api/v1/attendance":{"get":{"tags":["Attendance"],"summary":"오늘 출석 보상 상태","description":"조회만 하며 계정 생성·크레딧 지급은 없습니다. 기능 비활성 상태에서도 조회할 수 있습니다. rewardAmount는 수령 전에는 현재 설정량, 수령 후에는 실제 지급량입니다. nextClaimAt은 다음 날짜 보상이 열리는 시각입니다.","operationId":"status","responses":{"401":{"description":"인증 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"403":{"description":"온보딩 필요","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"404":{"description":"CREDIT_404_1 사용자 없음","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"200":{"description":"조회 성공","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponseAttendanceStatus"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/archives":{"get":{"tags":["Archive"],"summary":"Archive 목록 조회","description":"감정 선택을 완료한 내 꿈을 꿈 날짜·ID 순서로 조회합니다. sort=LATEST(기본 최신순) 또는 OLDEST(오래된순)를 지정합니다. month(YYYY-MM) 또는 date(YYYY-MM-DD) 중 하나를 사용하고 생략하면 전체를 조회합니다. query는 제목·원문·저장된 표시 키워드의 OR 부분 일치이며 영문 대소문자를 구분하지 않습니다. %, _, !도 문자 그대로 검색합니다. 앞뒤 Unicode 공백을 제외한 최대 50 코드포인트이며 생략·공백만이면 전체 조회, 초과하면 ARCHIVE_400_5입니다. 기본 size=20, 최대 50입니다. hasNext이면 같은 검색어·필터·정렬과 nextCursor로 이어서 조회합니다. 조건을 바꾸면 커서를 초기화합니다. 검색은 AI 호출·과금 없이 현재 제목·원문과 마지막 저장된 키워드를 조회합니다. 초안·삭제한 기록은 제외하며 분석·이미지가 없는 기록도 포함합니다. 수정·삭제에는 각 카드의 revision을 사용합니다.","operationId":"list_1","parameters":[{"name":"month","in":"query","required":false,"schema":{"type":"string"}},{"name":"date","in":"query","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"꿈 날짜 기준 정렬. 생략하면 LATEST","required":false,"schema":{"type":"string","default":"LATEST","enum":["LATEST","OLDEST"]}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}},{"name":"query","in":"query","description":"제목·원문·표시 키워드 검색어. 앞뒤 공백 제외 최대 50 코드포인트","required":false,"schema":{"type":"string"},"example":"바다"}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseArchivePage"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/archives/{dreamId}":{"get":{"tags":["Archive"],"summary":"Archive 상세 조회","description":"dream에 카드 정보·수정 표시·최신 revision·분석/서사/이미지 상태와 ID를, originalText에 사용자의 원문을 반환합니다. 감정은 기존 7종이며 키워드는 AI 생성값입니다. 타인·초안·삭제·없는 기록은 같은 404입니다. image.hasResult이면 GET /images/{imageId}/download-url로 임시 URL을 받습니다. 수정·삭제는 기존 /dreams/{dreamId} API를 사용합니다. 생성 본문은 해당 분석·이야기 API에서 조회합니다.","operationId":"detail","parameters":[{"name":"dreamId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseArchiveDetail"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/archives/calendar":{"get":{"tags":["Archive"],"summary":"꿈 캘린더 월별 조회","description":"month(YYYY-MM) 필수. 로그인한 사용자의 해당 월 완성 기록 날짜와 기록 일수를 반환합니다. 감정 선택을 완료한 COMPLETED 기록만 포함하며 분석·이미지가 없어도 포함합니다. 초안·감정 선택 전·삭제한 기록은 제외합니다. 생성 시각이 아닌 꿈 날짜를 기준으로 날짜 오름차순으로 반환합니다. 페이지네이션 없이 해당 월 전체를 반환하고 빈 달은 기록 일수 0과 빈 날짜 배열입니다. 선택한 날짜의 카드는 기존 GET /api/v1/archives?date=YYYY-MM-DD로 조회합니다.","operationId":"calendar","parameters":[{"name":"month","in":"query","description":"조회할 월. 생략하거나 형식이 잘못되면 ARCHIVE_400_1","required":true,"schema":{"type":"string"},"example":"2026-09"}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseDreamCalendarResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/analysis-records/recurring-elements":{"get":{"tags":["AnalysisRecord"],"summary":"월별 반복 장소·인물 조회","description":"month(YYYY-MM)을 생략하면 한국 시간의 현재 월입니다. 꿈 날짜 기준 본인의 완료 기록과 마지막 성공 분석을 집계합니다. 서로 다른 꿈 2개 이상에 등장한 PLACE와 CHARACTER를 각각 최대 5개 제공합니다. 같은 꿈의 여러 장면은 1건이며 기존 정규화 이름을 유형별로 집계합니다. 정규화 키가 없는 과거 요소는 제외합니다. dreamCount 내림차순·정규화 이름 오름차순이며 name은 해당 집계에 존재하는 표시 이름입니다. 재생성 진행·실패 시 유효한 이전 성공 결과를 유지하고 새 분석·서사 성공 확정 후 반영합니다. 원문·감정 수정만으로 자동 분석하지 않으며 삭제·초안·실패만 있는 분석은 제외합니다. analyzedDreamCount는 반복 요소가 없는 분석도 포함합니다. 빈 달이나 반복 근거가 없으면 빈 배열입니다. AI 호출·크레딧 차감 없이 조회하며, 다른 이름이 동일 인물인지 추론하지 않습니다.","operationId":"recurringElements","parameters":[{"name":"month","in":"query","description":"조회할 월. 생략 시 한국 시간 현재 월","required":false,"schema":{"type":"string"},"example":"2026-10"}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseMonthlyRecurringElementsResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/analysis-records/recent-context":{"get":{"tags":["AnalysisRecord"],"summary":"최근 꿈 해석 대상 조회","description":"현재 꿈이 존재하는 성공 분석만 꿈 날짜 기준 최근 30일·최대 10건입니다. 3건 미만이면 limitedEvidence=true입니다. 이 API는 분석 목록만 반환하며 종합 해석 생성·조회·갱신은 /analysis-records/interpretation API를 사용합니다.","operationId":"recent","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseRecent"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/analysis-records/monthly":{"get":{"tags":["AnalysisRecord"],"summary":"월별 꿈 요소 및 선택 감정 통계","description":"동일 키워드는 꿈별 1건으로 집계합니다. 삭제된 꿈과 과거 꿈 FK가 해제된 분석은 분석 건수·키워드·선택 감정에서 제외합니다.","operationId":"monthly","parameters":[{"name":"month","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseMonthly"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/analyses/{analysisId}":{"get":{"tags":["DreamAnalysis"],"summary":"내 분석 조회","description":"꿈 삭제 시 관련 분석도 제거합니다. 삭제·타인·없는 분석은 모두 404입니다. sourceRevision은 AI 입력 버전이며 제목만 수정하면 sourceChanged=false, 원문이 변경되면 true입니다. generatedTitle·displayKeywords는 생성 당시 결과입니다.","operationId":"get_11","parameters":[{"name":"analysisId","in":"path","required":true,"schema":{"type":"integer","format":"int64","exclusiveMinimum":0}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiResponseAnalysisResponse"}}}}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"WorldRevisionRequest":{"type":"object","properties":{"revision":{"type":"integer","format":"int64","description":"최신 폴더 revision","example":0,"minimum":0}},"required":["revision"]},"ApiResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"FieldErrorDetail":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}},"ApiResponseWorldFolderResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/WorldFolderResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"WorldFolderResponse":{"type":"object","properties":{"worldId":{"type":"integer","format":"int64"},"name":{"type":"string"},"selectedDreamCount":{"type":"integer","format":"int64","description":"현재 선택 수. 완성 세계관에 반영된 꿈의 개수와는 별개입니다."},"revision":{"type":"integer","format":"int64","description":"이름·선택 목록이 실제 변경될 때 증가합니다."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"DreamEmotionsRequest":{"type":"object","properties":{"revision":{"type":"integer","format":"int64","minimum":0},"emotions":{"type":"array","description":"기존 7종 중 중복 없이 1~2개. 대표 감정과 순위는 없습니다.","items":{"type":"string","enum":["HAPPY","CALM","EXCITED","SAD","ANXIOUS","ANGRY","CONFUSED"]},"maxItems":2,"minItems":1,"uniqueItems":true}},"required":["emotions","revision"]},"ApiResponseDreamResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/DreamResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"DreamGenerationResponse":{"type":"object","properties":{"dreamId":{"type":"integer","format":"int64"},"sourceRevision":{"type":"integer","format":"int64"},"sourceChanged":{"type":"boolean"},"stage":{"type":"string","enum":["ANALYSIS","STORY"]},"status":{"type":"string","enum":["QUEUED","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"analysisId":{"type":"integer","format":"int64"},"storyId":{"type":"integer","format":"int64"},"generationVersion":{"type":"integer","format":"int64"}}},"DreamResponse":{"type":"object","properties":{"dreamId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"originalText":{"type":"string"},"title":{"type":"string"},"displayKeywords":{"type":"array","description":"분석에서 생성한 순서 있는 표시 키워드. 이미지 불필요, 기존 분석은 빈 목록","items":{"type":"string"}},"analysisSourceChanged":{"type":"boolean","description":"완료 분석의 입력과 현재 원문·감정이 다르면 true. 기존 키워드는 유지"},"emotions":{"type":"array","items":{"type":"string","enum":["HAPPY","CALM","EXCITED","SAD","ANXIOUS","ANGRY","CONFUSED"]}},"recordStatus":{"type":"string","enum":["DRAFT","EMOTION_PENDING","COMPLETED"]},"analysisStatus":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"edited":{"type":"boolean"},"revision":{"type":"integer","format":"int64","description":"수정 충돌 검사용 버전. 다음 수정·분석·서사화 요청의 revision에 전달"},"sourceRevision":{"type":"integer","format":"int64","description":"AI 입력 버전. 원문·감정이 실제로 변경되면 증가, 제목만 변경하면 유지"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"analysisResultRevision":{"type":"integer","format":"int64"},"generation":{"$ref":"#/components/schemas/DreamGenerationResponse"}}},"DreamDraftRequest":{"type":"object","properties":{"originalText":{"type":"string"},"revision":{"type":"integer","format":"int64","minimum":0},"dreamId":{"type":"integer","format":"int64","exclusiveMinimum":0}},"required":["originalText"]},"WorldFolderRequest":{"type":"object","properties":{"name":{"type":"string","description":"공백만 입력 불가. 최대 100 Unicode 코드포인트. 입력한 앞뒤 공백은 보존합니다.","example":"바다의 세계","maxLength":100,"minLength":1}},"required":["name"]},"ApiResponseWorldSummaryResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/WorldSummaryResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"WorldSummaryEmotion":{"type":"object","properties":{"code":{"type":"string","enum":["HAPPY","CALM","EXCITED","SAD","ANXIOUS","ANGRY","CONFUSED"]},"label":{"type":"string"},"dreamCount":{"type":"integer","format":"int64"}}},"WorldSummaryKeyword":{"type":"object","properties":{"keyword":{"type":"string"},"dreamCount":{"type":"integer","format":"int64"}}},"WorldSummaryResponse":{"type":"object","properties":{"worldId":{"type":"integer","format":"int64"},"compositionRevision":{"type":"integer","format":"int64"},"resultCompositionRevision":{"type":"integer","format":"int64"},"generationVersion":{"type":"integer","format":"int64"},"status":{"type":"string","description":"EMPTY: 출처 없음, NOT_GENERATED: 미요청, PENDING: 대기, PROCESSING: 생성 중, COMPLETED: 완료, FAILED: 실패","enum":["EMPTY","NOT_GENERATED","PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"generatedTitle":{"type":"string"},"commonKeywords":{"type":"array","items":{"$ref":"#/components/schemas/WorldSummaryKeyword"}},"recurringEmotions":{"type":"array","items":{"$ref":"#/components/schemas/WorldSummaryEmotion"}},"sourceCount":{"type":"integer","format":"int32"},"limitedEvidence":{"type":"boolean"},"sourceChanged":{"type":"boolean"},"refreshNeeded":{"type":"boolean"},"hasPreviousResult":{"type":"boolean"},"generatedAt":{"type":"string","format":"date-time"},"promptVersion":{"type":"string"}}},"WorldImageRequest":{"type":"object","properties":{"compositionRevision":{"type":"integer","format":"int64","minimum":0},"style":{"type":"string","maxLength":50,"minLength":0},"mood":{"type":"string","maxLength":50,"minLength":0},"regenerate":{"type":"boolean"},"imageVersion":{"type":"integer","format":"int64","minimum":0},"regenerationVersionProvided":{"type":"boolean"}},"required":["compositionRevision","style"]},"ApiResponseWorldImageResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/WorldImageResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"WorldImageResponse":{"type":"object","properties":{"imageId":{"type":"integer","format":"int64"},"worldId":{"type":"integer","format":"int64"},"imageVersion":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"compositionRevision":{"type":"integer","format":"int64"},"resultCompositionRevision":{"type":"integer","format":"int64"},"compositionChanged":{"type":"boolean"},"sourceChanged":{"type":"boolean"},"sourceDeleted":{"type":"boolean"},"hasPreviousResult":{"type":"boolean"},"style":{"type":"string"},"mood":{"type":"string"},"resultStyle":{"type":"string"},"resultMood":{"type":"string"},"contentType":{"type":"string"},"width":{"type":"integer","format":"int32"},"height":{"type":"integer","format":"int32"},"freeRegenerationAvailable":{"type":"boolean","description":"성공 결과가 있고 무료 재생성을 아직 사용하지 않았는지. 처리 중에는 진행 중 결과를 조회합니다."},"nextRegenerationCost":{"type":["integer","null"],"format":"int64","description":"현재 이력 기준 다음 재생성 비용. 무료 0, 성공 결과나 가격 설정이 없으면 null. 실제 생성 가능 여부와 별개입니다."}}},"WorldBuildRequest":{"type":"object","properties":{"folderRevision":{"type":"integer","format":"int64","minimum":0},"compositionRevision":{"type":"integer","format":"int64","minimum":0}},"required":["compositionRevision","folderRevision"]},"ApiResponseWorldCompositionResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/WorldCompositionResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"WorldCompositionResponse":{"type":"object","properties":{"worldId":{"type":"integer","format":"int64"},"folderRevision":{"type":"integer","format":"int64"},"compositionRevision":{"type":"integer","format":"int64"},"hasResult":{"type":"boolean"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"attemptId":{"type":"string"},"jobVersion":{"type":"integer","format":"int64"},"selectionChanged":{"type":"boolean"},"sourceChanged":{"type":"boolean"},"newStoryAvailable":{"type":"boolean"},"hasConnectionGaps":{"type":"boolean"}}},"WorldRetryRequest":{"type":"object","properties":{"jobVersion":{"type":"integer","format":"int64","minimum":0}},"required":["jobVersion"]},"WorldApplyRequest":{"type":"object","properties":{"folderRevision":{"type":"integer","format":"int64","minimum":0},"compositionRevision":{"type":"integer","format":"int64","minimum":0},"storyVersionId":{"type":"integer","format":"int64","exclusiveMinimum":0}},"required":["compositionRevision","folderRevision","storyVersionId"]},"OnboardingRequest":{"type":"object","properties":{"nickname":{"type":"string","minLength":1,"pattern":"^[가-힣ㄱ-ㅎㅏ-ㅣa-zA-Z0-9]{2,10}$"}},"required":["nickname"]},"ApiResponseUserResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/UserResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"UserResponse":{"type":"object","properties":{"userId":{"type":"integer","format":"int64"},"email":{"type":"string"},"nickname":{"type":"string"},"onboardingCompleted":{"type":"boolean"},"termsAccepted":{"type":"boolean","description":"현재 공개된 이용약관과 개인정보 수집·이용 필수 동의를 모두 완료했는지 여부. 버전과 문서 해시를 서버 설정과 대조합니다."}}},"LegalConsentRequest":{"type":"object","properties":{"termsVersion":{"type":"string","example":"2026-11-07-v1"},"termsDigest":{"type":"string","pattern":"[0-9a-f]{64}"},"termsAccepted":{"type":"boolean","description":"이용약관에 실제 동의한 경우만 true"},"privacyVersion":{"type":"string","example":"2026-11-07-v1"},"privacyDigest":{"type":"string","pattern":"[0-9a-f]{64}"},"privacyAccepted":{"type":"boolean","description":"필수 개인정보 수집·이용 고지에 실제 동의한 경우만 true"},"age14OrOlder":{"type":"boolean","description":"만14세 이상임을 실제 확인한 경우만 true. 생년월일을 수집하지 않는 자기 확인입니다."}},"required":["age14OrOlder","privacyAccepted","privacyDigest","privacyVersion","termsAccepted","termsDigest","termsVersion"]},"RefundRequest":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid"},"orderId":{"type":"string","format":"uuid"},"reason":{"type":"string","enum":["STANDARD","RIGHTS_REVIEW"]}},"required":["orderId","reason","requestId"]},"ApiResponseRefundReceipt":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/RefundReceipt"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"RefundEstimate":{"type":"object","properties":{"orderId":{"type":"string"},"purchaseAmount":{"type":"integer","format":"int64"},"currency":{"type":"string"},"purchasedCredits":{"type":"integer","format":"int64"},"usedCredits":{"type":"integer","format":"int64"},"reservedCredits":{"type":"integer","format":"int64"},"unusedCredits":{"type":"integer","format":"int64"},"approvedAt":{"type":"string","format":"date-time"},"requestable":{"type":"boolean"},"status":{"type":"string","enum":["ESTIMATED","WAITING_RESERVATION","REVIEW_REQUIRED","NO_REFUNDABLE_BALANCE"]},"estimatedAmount":{"type":"integer","format":"int64"},"feePercent":{"type":"integer","format":"int32"}}},"RefundReceipt":{"type":"object","properties":{"receiptId":{"type":"string"},"orderId":{"type":"string","format":"uuid","description":"원래 결제 주문의 공개 UUID. 환불 처리 상태와 관계없이 결제 주문 조회의 orderId와 같습니다."},"requestId":{"type":"string"},"receivedAt":{"type":"string","format":"date-time"},"reason":{"type":"string","enum":["STANDARD","RIGHTS_REVIEW"]},"initialStatus":{"type":"string","enum":["ESTIMATED","WAITING_RESERVATION","REVIEW_REQUIRED","NO_REFUNDABLE_BALANCE"]},"unusedAtRequest":{"type":"integer","format":"int64"},"reservedAtRequest":{"type":"integer","format":"int64"},"usedAtRequest":{"type":"integer","format":"int64"},"estimatedAmountAtRequest":{"type":"integer","format":"int64"},"feePercentAtRequest":{"type":"integer","format":"int32"},"currentEstimate":{"$ref":"#/components/schemas/RefundEstimate"},"supportEmail":{"type":"string"},"processingStatus":{"type":"string","enum":["RECEIVED","COMPLETED","REJECTED","WITHDRAWN"]},"resolution":{"$ref":"#/components/schemas/Resolution"},"orderState":{"type":"string","description":"원주문의 현재 결제 상태. 환불 정산 후 새 취소를 확인 중이면 PAYMENT_REVIEW.","enum":["REQUESTING","READY","REQUEST_REJECTED","UNKNOWN","PENDING","PAID","CANCELLED","PAYMENT_REVIEW","CREDIT_RECLAIMED","REFUND_SETTLED"]},"confirmedCancellationAmount":{"type":"integer","format":"int64","description":"원주문에서 확인한 누적 취소액. 해당 접수의 최초 정산액은 resolution.refundedAmount로 별도 제공."}},"required":["orderId"]},"Resolution":{"type":"object","properties":{"refundedAmount":{"type":"integer","format":"int64"},"revokedCredits":{"type":"integer","format":"int64"},"resolvedAt":{"type":"string","format":"date-time"}}},"Fields":{"type":"object","properties":{"userid":{"type":"string"},"linkkey":{"type":"string"},"linkval":{"type":"string"},"responsedate":{"type":"string"},"hash":{"type":"string"},"var1":{"type":"string"},"var2":{"type":"string"},"mul_no":{"type":"string"},"pay_state":{"type":"string"},"price":{"type":"string"},"orig_mul_no":{"type":"string"},"orig_price":{"type":"string"}}},"PaymentOrderRequest":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid"},"productId":{"type":"string","minLength":1},"buyerPhone":{"type":"string","minLength":1,"pattern":"01[016789][0-9]{7,8}"}},"required":["buyerPhone","productId","requestId"]},"ApiResponsePaymentOrderResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PaymentOrderResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"PaymentOrderResponse":{"type":"object","description":"본인 주문. 결제창 URL 발급은 결제 완료가 아닙니다. PAID와 creditGranted를 확인하세요. CREDIT_RECLAIMED는 전액 승인취소된 미사용 구매분의 내부 회수 완료입니다. REFUND_SETTLED는 접수 건의 PG 취소와 내부 정산이 완료된 상태입니다. creditGranted는 과거 지급 연결 여부이며 현재 잔액이 아닙니다. UNKNOWN은 결과 미확정이며 같은 주문으로 결제를 자동 재요청하지 않습니다.","properties":{"orderId":{"type":"string"},"productId":{"type":"string"},"productName":{"type":"string"},"price":{"type":"integer","format":"int64"},"currency":{"type":"string"},"credits":{"type":"integer","format":"int64"},"state":{"type":"string","enum":["REQUESTING","READY","REQUEST_REJECTED","UNKNOWN","PENDING","PAID","CANCELLED","PAYMENT_REVIEW","CREDIT_RECLAIMED","REFUND_SETTLED"]},"paymentUrl":{"type":"string"},"creditGranted":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"confirmedCancellationAmount":{"type":"integer","format":"int64","description":"환불 정산 및 이후 재대조에서 확인한 주문 누적 취소액. 확인된 정산이 없으면 null."}}},"BatchImageDownloadRequest":{"type":"object","properties":{"imageIds":{"type":"array","description":"중복 제거 전 1~31개. 중복은 최초 순서로 한 번만 처리합니다.","items":{"type":"integer","format":"int64","minimum":1},"maxItems":31,"minItems":1}},"required":["imageIds"]},"ApiResponseBatchImageDownloadResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/BatchImageDownloadResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"BatchImageDownloadItem":{"type":"object","properties":{"imageId":{"type":"integer","format":"int64"},"imageVersion":{"type":["integer","null"],"format":"int64","description":"URL 발급에 사용한 이미지 스냅샷 버전. 찾을 수 없는 항목은 null입니다."},"status":{"type":"string","enum":["SUCCESS","FAILED"]},"url":{"type":["string","null"],"description":"SUCCESS인 항목의 HTTPS 임시 URL. 원본 파일 주소이며 작은 썸네일을 별도 생성하지 않습니다."},"expiresAt":{"type":["string","null"],"format":"date-time"},"failureCode":{"type":["string","null"],"description":"실패 시 IMAGE_404_1 / IMAGE_503_1 / IMAGE_502_2. SUCCESS이면 null입니다."}},"required":["expiresAt","failureCode","imageId","imageVersion","status","url"]},"BatchImageDownloadResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BatchImageDownloadItem"}}},"required":["items"]},"DreamCreateRequest":{"type":"object","properties":{"dreamedAt":{"type":"string","format":"date"},"originalText":{"type":"string"}},"required":["dreamedAt","originalText"]},"DreamRevisionRequest":{"type":"object","properties":{"revision":{"type":"integer","format":"int64","minimum":0}},"required":["revision"]},"StoryRequest":{"type":"object","properties":{"revision":{"type":"integer","format":"int64","minimum":0},"regenerate":{"type":"boolean"},"storyVersion":{"type":"integer","format":"int64","minimum":0},"regenerationVersionProvided":{"type":"boolean"}},"required":["revision"]},"ApiResponseStoryResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/StoryResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"Section":{"type":"object","properties":{"sequence":{"type":"integer","format":"int32"},"kind":{"type":"string","enum":["SCENE","AI_BRIDGE"]},"sceneSequence":{"type":"integer","format":"int32"},"content":{"type":"string"}}},"StoryResponse":{"type":"object","properties":{"storyId":{"type":"integer","format":"int64"},"analysisId":{"type":"integer","format":"int64"},"dreamId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"sourceRevision":{"type":"integer","format":"int64"},"storyVersion":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"sourceDeleted":{"type":"boolean"},"sourceChanged":{"type":"boolean"},"hasPreviousResult":{"type":"boolean"},"resultRevision":{"type":"integer","format":"int64"},"resultPromptVersion":{"type":"string"},"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"}},"resultVersionId":{"type":"integer","format":"int64"}}},"ImageRequest":{"type":"object","properties":{"revision":{"type":"integer","format":"int64","minimum":0},"style":{"type":"string","maxLength":50,"minLength":0},"mood":{"type":"string","maxLength":50,"minLength":0},"regenerate":{"type":"boolean"},"imageVersion":{"type":"integer","format":"int64","minimum":0},"regenerationVersionProvided":{"type":"boolean"}},"required":["revision","style"]},"ApiResponseImageResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/ImageResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"ImageResponse":{"type":"object","properties":{"imageId":{"type":"integer","format":"int64"},"analysisId":{"type":"integer","format":"int64"},"dreamId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"imageVersion":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string","description":"실패 시 원인 코드. ATTEMPT_EXPIRED, CREDIT_RESERVATION_EXPIRED, CREDIT_RESERVATION_MISSING, CREDIT_PAYMENT_REVIEW 등을 포함. 실패해도 이전 성공 결과는 유지될 수 있습니다."},"style":{"type":"string"},"mood":{"type":"string"},"sourceDeleted":{"type":"boolean"},"sourceChanged":{"type":"boolean"},"storyChanged":{"type":"boolean"},"hasPreviousResult":{"type":"boolean"},"resultRevision":{"type":"integer","format":"int64"},"resultStyle":{"type":"string"},"resultMood":{"type":"string"},"contentType":{"type":"string"},"width":{"type":"integer","format":"int32"},"height":{"type":"integer","format":"int32"},"freeRegenerationAvailable":{"type":"boolean","description":"성공 결과가 있고 무료 재생성을 아직 사용하지 않았는지. 처리 중에는 새 요청 대신 진행 중 결과를 조회합니다."},"nextRegenerationCost":{"type":["integer","null"],"format":"int64","description":"현재 이력 기준 다음 재생성 비용. 무료 0, 성공 결과나 가격 설정이 없으면 null. 기능 활성화·처리 중·입력 변경 여부는 별도로 확인합니다."}}},"ApiResponseDreamGenerationResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/DreamGenerationResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"DreamRegenerationRequest":{"type":"object","properties":{"revision":{"type":"integer","format":"int64","minimum":0},"generationVersion":{"type":"integer","format":"int64","minimum":0}},"required":["generationVersion","revision"]},"AnalysisResponse":{"type":"object","properties":{"analysisId":{"type":"integer","format":"int64"},"dreamId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"sourceRevision":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"sourceDeleted":{"type":"boolean"},"sourceChanged":{"type":"boolean"},"dreamRevision":{"type":"integer","format":"int64","description":"현재 꿈의 수정용 revision. 자동 제목 저장 후 증가할 수 있으며 삭제된 원문은 null"},"generatedTitle":{"type":"string","description":"분석 생성 시 제목 스냅샷. 현재 화면 제목은 DreamResponse.title 사용, 기존 분석은 null"},"displayKeywords":{"type":"array","description":"중요한 순서대로 1~5개, 각 20 코드포인트 이내. 기존 분석은 빈 목록","items":{"type":"string"}},"scenes":{"type":"array","items":{"$ref":"#/components/schemas/Scene"}},"elements":{"type":"array","items":{"$ref":"#/components/schemas/Element"}},"resultRevision":{"type":"integer","format":"int64"}}},"ApiResponseAnalysisResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/AnalysisResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"Element":{"type":"object","properties":{"key":{"type":"string"},"type":{"type":"string","enum":["CHARACTER","PLACE","SYMBOL","EMOTION"]},"name":{"type":"string"},"description":{"type":"string"}}},"Scene":{"type":"object","properties":{"sequence":{"type":"integer","format":"int32"},"content":{"type":"string"},"disconnectedFromPrevious":{"type":"boolean"},"elementKeys":{"type":"array","items":{"type":"string"}}}},"ApiResponseTokenResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/TokenResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"TokenResponse":{"type":"object","properties":{"accessToken":{"type":"string"},"tokenType":{"type":"string"},"expiresIn":{"type":"integer","format":"int64"},"user":{"$ref":"#/components/schemas/UserResponse"}}},"ApiResponseVoid":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"ApiResponseAttendanceClaim":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/AttendanceClaim"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"AttendanceClaim":{"type":"object","description":"출석 보상 수령 결과. 재요청은 기존 지급량을 반환하며 추가 지급하지 않습니다.","properties":{"date":{"type":"string","format":"date"},"amount":{"type":"integer","format":"int64","description":"해당 날짜에 실제 지급된 수량. 재요청에도 동일하며 추가 지급량이 아닙니다."},"alreadyClaimed":{"type":"boolean"},"balance":{"$ref":"#/components/schemas/CreditBalance","description":"현재 잔액. 과거 최초 수령 시점의 잔액이 아닙니다."},"nextClaimAt":{"type":"string","format":"date-time","description":"다음 날짜 보상이 열리는 한국 시간 자정의 UTC 시각"}}},"CreditBalance":{"type":"object","description":"현재 남은 크레딧. total은 available+reserved이며 이미 사용 확정된 양은 제외합니다. spendingBlocked=true이면 외부 결제 취소 확인 중으로 예약·새 사용 확정이 중단됩니다.","properties":{"available":{"type":"integer","format":"int64"},"reserved":{"type":"integer","format":"int64"},"total":{"type":"integer","format":"int64"},"spendingBlocked":{"type":"boolean"}}},"ApiResponseInterpretationResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/InterpretationResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"InterpretationResponse":{"type":"object","properties":{"status":{"type":"string","enum":["EMPTY","NOT_GENERATED","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"interpretation":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"promptVersion":{"type":"string"},"refreshNeeded":{"type":"boolean"},"limitedEvidence":{"type":"boolean"},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"targetCount":{"type":"integer","format":"int32"},"sources":{"type":"array","description":"완성본을 생성할 때 사용한 분석 목록. 현재 대상과 다르면 refreshNeeded=true","items":{"$ref":"#/components/schemas/Source"}}}},"Source":{"type":"object","properties":{"dreamId":{"type":"integer","format":"int64"},"analysisId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"sourceRevision":{"type":"integer","format":"int64"},"analysisRevision":{"type":"integer","format":"int64"},"publishedVersionId":{"type":"integer","format":"int64"},"analysisFingerprint":{"type":"string"}}},"WorldFolderUpdateRequest":{"type":"object","properties":{"name":{"type":"string","description":"공백만 입력 불가. 최대 100 Unicode 코드포인트.","maxLength":100,"minLength":1},"revision":{"type":"integer","format":"int64","description":"최신 폴더 revision","example":0,"minimum":0}},"required":["name","revision"]},"NicknameUpdateRequest":{"type":"object","properties":{"nickname":{"type":"string","description":"변경할 닉네임. 한글·영문·숫자 2~10자이며 공백·특수문자는 허용하지 않습니다.","example":"몽글러","minLength":1,"pattern":"^[가-힣ㄱ-ㅎㅏ-ㅣa-zA-Z0-9]{2,10}$"}},"required":["nickname"]},"DreamUpdateRequest":{"type":"object","properties":{"revision":{"type":"integer","format":"int64","minimum":0},"originalText":{"type":"string","description":"수정할 원문. 미전달 시 유지, null·공백만 있는 값은 불가, 최대 500자"},"emotions":{"type":"array","description":"수정할 감정. 기존 7종 중 중복 없이 1~2개, 미전달 시 유지. 순서만 바꾸면 무변경","items":{"type":"string","enum":["HAPPY","CALM","EXCITED","SAD","ANXIOUS","ANGRY","CONFUSED"]},"maxItems":2,"minItems":1,"uniqueItems":true},"title":{"type":"string","description":"최대 20자. 미전달 시 유지, null·빈 문자열·공백만 있는 값은 제목 제거"}},"required":["revision"]},"ApiResponseWorldFolderPage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/WorldFolderPage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"RepresentativeDream":{"type":"object","properties":{"dreamId":{"type":"integer","format":"int64"},"title":{"type":"string"},"dreamedAt":{"type":"string","format":"date"}}},"WorldFolderCardResponse":{"type":"object","properties":{"worldId":{"type":"integer","format":"int64"},"name":{"type":"string"},"selectedDreamCount":{"type":"integer","format":"int64"},"revision":{"type":"integer","format":"int64"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"composedDreamCount":{"type":"integer","format":"int64","description":"현재 공개 완성본의 서로 다른 꿈 수. 선택 수나 summary.sourceCount와 별개"},"representativeDream":{"$ref":"#/components/schemas/RepresentativeDream","description":"공개 완성본에서 가장 오래된 꿈. 현재 제목과 꿈 날짜이며 완성본 출처가 없으면 null"},"summary":{"$ref":"#/components/schemas/WorldSummaryResponse","description":"기존 세계관 요약의 저장 결과와 상태. 목록 조회는 새 생성을 접수하지 않음"}}},"WorldFolderPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WorldFolderCardResponse"}},"hasNext":{"type":"boolean"},"nextBeforeId":{"type":"integer","format":"int64"}}},"ApiResponseDownloadUrl":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/DownloadUrl"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"DownloadUrl":{"type":"object","properties":{"url":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}}},"ApiResponseSelectedDreamPage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/SelectedDreamPage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"SelectedDreamPage":{"type":"object","properties":{"worldId":{"type":"integer","format":"int64"},"revision":{"type":"integer","format":"int64"},"selectedDreamCount":{"type":"integer","format":"int64"},"items":{"type":"array","items":{"$ref":"#/components/schemas/SelectedDreamResponse"}},"hasNext":{"type":"boolean"},"nextCursor":{"type":"string"}}},"SelectedDreamResponse":{"type":"object","properties":{"dreamId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"title":{"type":"string"},"originalText":{"type":"string"}}},"ApiResponseWorldEntryPage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/WorldEntryPage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"Entry":{"type":"object","properties":{"dreamId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"storyVersionId":{"type":"integer","format":"int64"},"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"}},"bridgeBeforeId":{"type":"integer","format":"int64"},"bridgeBefore":{"type":"string"},"connectionGap":{"type":"boolean"},"sourceChanged":{"type":"boolean"},"newStoryAvailable":{"type":"boolean"}}},"WorldEntryPage":{"type":"object","properties":{"worldId":{"type":"integer","format":"int64"},"compositionRevision":{"type":"integer","format":"int64"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Entry"}},"hasNext":{"type":"boolean"},"nextCursor":{"type":"string"}}},"ApiResponseStoryVersionPage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/StoryVersionPage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"Item":{"type":"object","properties":{"versionId":{"type":"integer","format":"int64"},"sourceRevision":{"type":"integer","format":"int64"},"promptVersion":{"type":"string"},"storedAt":{"type":"string","format":"date-time"},"sourceChanged":{"type":"boolean"},"imported":{"type":"boolean"}}},"StoryVersionPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Item"}},"nextCursor":{"type":"integer","format":"int64"}}},"ApiResponseStoryVersionResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/StoryVersionResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"Request":{"type":"object","properties":{"provider":{"type":"string"},"requestedModel":{"type":"string"},"maxCompletionTokens":{"type":"integer","format":"int32"},"reasoningEffort":{"type":"string"},"outputFormat":{"type":"string"}}},"StoryVersionResponse":{"type":"object","properties":{"versionId":{"type":"integer","format":"int64"},"storyId":{"type":"integer","format":"int64"},"analysisId":{"type":"integer","format":"int64"},"dreamId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"sourceRevision":{"type":"integer","format":"int64"},"promptVersion":{"type":"string"},"storedAt":{"type":"string","format":"date-time"},"sourceDeleted":{"type":"boolean"},"sourceChanged":{"type":"boolean"},"imported":{"type":"boolean"},"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"}},"originalText":{"type":"string"},"emotions":{"type":"array","items":{"type":"string","enum":["HAPPY","CALM","EXCITED","SAD","ANXIOUS","ANGRY","CONFUSED"]}},"analysisPromptVersion":{"type":"string"},"analysis":{"$ref":"#/components/schemas/StructureResult"},"sourceSnapshotAvailable":{"type":"boolean"},"analysisSettings":{"$ref":"#/components/schemas/Request"},"storySettings":{"$ref":"#/components/schemas/Request"}}},"StructureResult":{"type":"object","properties":{"generatedTitle":{"type":"string"},"displayKeywords":{"type":"array","items":{"type":"string"}},"elements":{"type":"array","items":{"$ref":"#/components/schemas/Element"}},"scenes":{"type":"array","items":{"$ref":"#/components/schemas/Scene"}}}},"ApiResponseRefundPage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/RefundPage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"RefundPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RefundReceipt"}},"hasNext":{"type":"boolean"},"nextBeforeId":{"type":"integer","format":"int64"}}},"ApiResponseRefundEstimate":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/RefundEstimate"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"ApiResponseListCreditProduct":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/CreditProduct"}},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"CreditProduct":{"type":"object","description":"서버에 설정된 판매 상품. price는 원화 최종 결제금액이며 credits는 무기한 지급 수량입니다.","properties":{"productId":{"type":"string"},"name":{"type":"string"},"price":{"type":"integer","format":"int64"},"currency":{"type":"string"},"credits":{"type":"integer","format":"int64"}}},"ApiResponsePaymentOrderPage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/PaymentOrderPage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"PaymentOrderPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PaymentOrderResponse"}},"hasNext":{"type":"boolean"},"nextBeforeId":{"type":"integer","format":"int64"}}},"ApiResponseLegalDocumentCatalog":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/LegalDocumentCatalog"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"LegalDocumentCatalog":{"type":"object","properties":{"published":{"type":"boolean"},"documents":{"type":"array","items":{"$ref":"#/components/schemas/LegalDocumentMetadata"}}}},"LegalDocumentMetadata":{"type":"object","properties":{"type":{"type":"string"},"version":{"type":"string"},"digest":{"type":"string"},"required":{"type":"boolean"}}},"ApiResponseImageOptions":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/ImageOptions"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"ImageOptions":{"type":"object","properties":{"styles":{"type":"array","items":{"type":"string"}},"moods":{"type":"array","items":{"type":"string"}}}},"ApiResponseWorldImpactPage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/WorldImpactPage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"Impact":{"type":"object","properties":{"worldId":{"type":"integer","format":"int64"},"name":{"type":"string"},"selected":{"type":"boolean"},"usedInComposition":{"type":"boolean"},"compositionRevision":{"type":"integer","format":"int64"}}},"WorldImpactPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Impact"}},"hasNext":{"type":"boolean"},"nextBeforeId":{"type":"integer","format":"int64"}}},"ApiResponseDreamMutationStatus":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/DreamMutationStatus"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"DreamMutationStatus":{"type":"object","description":"꿈 수정·삭제 허용 여부의 조회 시점 스냅샷. 실제 변경 요청에서도 서버가 재검사합니다.","properties":{"mutable":{"type":"boolean"},"blockingTasks":{"type":"array","items":{"type":"string","enum":["ANALYSIS_STORY","IMAGE","WORLD_BRIDGE","WORLD_COMPOSITION"]}}}},"ApiResponseIncompleteDreams":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/IncompleteDreams"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"IncompleteDreams":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DreamResponse"}},"hasNext":{"type":"boolean"}}},"ApiResponseCreditTransactionPage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/CreditTransactionPage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"CreditTransaction":{"type":"object","description":"불변 크레딧 원장 내역. delta는 증감량, after는 해당 내역 직후 잔액입니다. 결제사 거래 키·내부 요청 키는 노출하지 않습니다.","properties":{"transactionId":{"type":"integer","format":"int64"},"kind":{"type":"string","enum":["GRANT","RESERVE","SETTLE","RELEASE","PAYMENT_HOLD","RECLAIM","FORFEIT"]},"source":{"type":"string","enum":["PAYMENT","SIGNUP","PROMOTION","ATTENDANCE"]},"usage":{"type":"string","enum":["DREAM_IMAGE_GENERATION","DREAM_IMAGE_REGENERATION","WORLD_IMAGE_GENERATION","WORLD_IMAGE_REGENERATION"]},"availableDelta":{"type":"integer","format":"int64"},"reservedDelta":{"type":"integer","format":"int64"},"availableAfter":{"type":"integer","format":"int64"},"reservedAfter":{"type":"integer","format":"int64"},"createdAt":{"type":"string","format":"date-time"}}},"CreditTransactionPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CreditTransaction"}},"hasNext":{"type":"boolean"},"nextBeforeId":{"type":"integer","format":"int64"}}},"ApiResponseCreditBalanceResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/CreditBalanceResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"CreditBalanceResponse":{"type":"object","description":"전체 잔액 및 유료(PAYMENT)/무료(SIGNUP,ATTENDANCE,PROMOTION)별 사용 가능·예약 수량. 예약분은 즉시 환불 가능 수량을 뜻하지 않습니다.","properties":{"available":{"type":"integer","format":"int64"},"reserved":{"type":"integer","format":"int64"},"total":{"type":"integer","format":"int64"},"spendingBlocked":{"type":"boolean"},"paidAvailable":{"type":"integer","format":"int64"},"paidReserved":{"type":"integer","format":"int64"},"freeAvailable":{"type":"integer","format":"int64"},"freeReserved":{"type":"integer","format":"int64"}}},"ApiResponseCsrfResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/CsrfResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"CsrfResponse":{"type":"object","properties":{"headerName":{"type":"string"},"token":{"type":"string"}}},"ApiResponseAttendanceStatus":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/AttendanceStatus"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"AttendanceStatus":{"type":"object","description":"한국 시간 기준 오늘의 출석 보상 상태. 조회로 지급하지 않습니다.","properties":{"date":{"type":"string","format":"date","description":"한국 시간 기준 오늘 날짜"},"claimed":{"type":"boolean","description":"오늘 보상 수령 여부"},"rewardAmount":{"type":"integer","format":"int64","description":"미수령이면 현재 설정량, 수령했으면 실제 지급량"},"claimable":{"type":"boolean","description":"오늘 미수령이며 전체 크레딧·출석 기능이 모두 활성화된 경우 true"},"nextClaimAt":{"type":"string","format":"date-time","description":"다음 날짜 보상이 열리는 한국 시간 자정의 UTC 시각. 현재 수령 가능 여부와 별개입니다."}}},"Analysis":{"type":"object","properties":{"analysisId":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"sourceChanged":{"type":"boolean"},"resultRevision":{"type":"integer","format":"int64"}}},"ApiResponseArchivePage":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/ArchivePage"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"ArchiveItem":{"type":"object","properties":{"dreamId":{"type":"integer","format":"int64"},"dreamedAt":{"type":"string","format":"date"},"title":{"type":"string"},"displayKeywords":{"type":"array","items":{"type":"string"}},"edited":{"type":"boolean","description":"실제 수정 이력이 있으면 true. 목록·상세에서 수정됨 표시"},"revision":{"type":"integer","format":"int64","description":"기존 꿈 수정·삭제 API에 전달할 최신 버전"},"sourceRevision":{"type":"integer","format":"int64"},"analysis":{"$ref":"#/components/schemas/Analysis","description":"아직 분석을 요청하지 않았으면 null"},"story":{"$ref":"#/components/schemas/Story","description":"아직 이야기 생성을 요청하지 않았으면 null"},"image":{"$ref":"#/components/schemas/Image","description":"아직 이미지 생성을 요청하지 않았으면 null"},"generation":{"$ref":"#/components/schemas/DreamGenerationResponse"}}},"ArchivePage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ArchiveItem"}},"hasNext":{"type":"boolean"},"nextCursor":{"type":"string"}}},"Image":{"type":"object","properties":{"imageId":{"type":"integer","format":"int64"},"imageVersion":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"hasResult":{"type":"boolean"},"hasPreviousResult":{"type":"boolean"},"resultRevision":{"type":"integer","format":"int64"},"sourceChanged":{"type":"boolean"},"storyChanged":{"type":"boolean"},"contentType":{"type":"string"},"width":{"type":"integer","format":"int32"},"height":{"type":"integer","format":"int32"}}},"Story":{"type":"object","properties":{"storyId":{"type":"integer","format":"int64"},"storyVersion":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED"]},"failureCode":{"type":"string"},"hasResult":{"type":"boolean"},"hasPreviousResult":{"type":"boolean"},"resultRevision":{"type":"integer","format":"int64"},"sourceChanged":{"type":"boolean"}}},"ApiResponseArchiveDetail":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/ArchiveDetail"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"ArchiveDetail":{"type":"object","properties":{"dream":{"$ref":"#/components/schemas/ArchiveItem"},"originalText":{"type":"string"},"emotions":{"type":"array","items":{"type":"string","enum":["HAPPY","CALM","EXCITED","SAD","ANXIOUS","ANGRY","CONFUSED"]}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"ApiResponseDreamCalendarResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/DreamCalendarResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"DreamCalendarResponse":{"type":"object","properties":{"month":{"type":"string","description":"조회한 월. YYYY-MM 형식","example":"2026-09"},"recordedDayCount":{"type":"integer","format":"int32","description":"해당 월에 완성한 꿈을 기록한 날짜 수","example":4},"recordedDates":{"type":"array","description":"완성한 꿈이 있는 날짜를 오름차순으로 반환. 기록이 없으면 빈 배열","items":{"type":"string","format":"date"}}}},"ApiResponseMonthlyRecurringElementsResponse":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/MonthlyRecurringElementsResponse"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"MonthlyRecurringElement":{"type":"object","properties":{"name":{"type":"string"},"dreamCount":{"type":"integer","format":"int64"}}},"MonthlyRecurringElementsResponse":{"type":"object","properties":{"month":{"type":"string"},"analyzedDreamCount":{"type":"integer","format":"int64"},"places":{"type":"array","items":{"$ref":"#/components/schemas/MonthlyRecurringElement"}},"characters":{"type":"array","items":{"$ref":"#/components/schemas/MonthlyRecurringElement"}}}},"ApiResponseRecent":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/Recent"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"Recent":{"type":"object","properties":{"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"maximumDreams":{"type":"integer","format":"int32"},"limitedEvidence":{"type":"boolean"},"dreams":{"type":"array","items":{"$ref":"#/components/schemas/AnalysisResponse"}}}},"ApiResponseMonthly":{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"string"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/Monthly"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldErrorDetail"}}}},"Monthly":{"type":"object","properties":{"month":{"type":"string"},"analyzedDreamCount":{"type":"integer","format":"int64"},"keywords":{"type":"array","items":{"$ref":"#/components/schemas/MonthlyAnalysisKeyword"}},"emotions":{"type":"array","items":{"$ref":"#/components/schemas/MonthlyAnalysisEmotion"}}}},"MonthlyAnalysisEmotion":{"type":"object","properties":{"emotion":{"type":"string","enum":["HAPPY","CALM","EXCITED","SAD","ANXIOUS","ANGRY","CONFUSED"]},"dreamCount":{"type":"integer","format":"int64"}}},"MonthlyAnalysisKeyword":{"type":"object","properties":{"name":{"type":"string"},"dreamCount":{"type":"integer","format":"int64"}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}}}