OpenAPI 스펙¶
본 페이지는 백엔드 컨트롤러 테스트(MockMvcRestDocumentationWrapper.document(...))로부터
자동 생성된 OpenAPI 3 명세를 그대로 임베드합니다. 테스트가 통과하지 않으면 endpoint가
명세에 포함되지 않으므로, 본 문서가 누락 없는 단일 출처임이 보장됩니다.
SeMu-GPT API 0.0.1¶
SeMu-GPT 백엔드 REST API (Spring REST Docs 기반 자동 생성)
Servers¶
| Description | URL |
|---|---|
| http://localhost:8080 | http://localhost:8080 |
accounts¶
POST /accounts/coupons¶
Request body
Responses
GET /accounts/info¶
Responses
GET /accounts/memberships¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:18.068853807\",\n \"code\" : \"OK\",\n \"data\" : {\n \"currentMembership\" : {\n \"membershipId\" : 1,\n \"paymentId\" : \"test-payment-id\",\n \"couponCode\" : null,\n \"startDate\" : \"2026-05-11\",\n \"endDate\" : \"2026-06-10\",\n \"paidTime\" : \"2026-05-11T08:21:17.983920449\",\n \"status\" : \"COMPLETE\",\n \"membershipType\" : \"STANDARD\",\n \"paidAmount\" : 10000,\n \"paymentType\" : \"신용/체크카드\",\n \"note\" : null\n },\n \"isWithdrawalAvailable\" : true,\n \"isWithdrawal\" : false,\n \"paymentMethodInfo\" : {\n \"cardName\" : \"현대\",\n \"cardNumber\" : \"10131313******13\",\n \"isAvailable\" : true\n },\n \"allMemberships\" : [ {\n \"membershipId\" : 1,\n \"paymentId\" : \"test-payment-id\",\n \"couponCode\" : null,\n \"startDate\" : \"2026-05-11\",\n \"endDate\" : \"2026-06-10\",\n \"paidTime\" : \"2026-05-11T08:21:17.983920449\",\n \"status\" : \"COMPLETE\",\n \"membershipType\" : \"STANDARD\",\n \"paidAmount\" : 10000,\n \"paymentType\" : \"신용/체크카드\",\n \"note\" : null\n } ]\n }\n}"
POST /accounts/name¶
Request body
Responses
POST /accounts/payments¶
Request body
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:17.576822307\",\n \"code\" : \"OK\",\n \"data\" : {\n \"paymentId\" : \"test-payment-id\",\n \"clientKey\" : \"test-client-key\",\n \"orderId\" : \"test-order-id\",\n \"amount\" : 10000,\n \"buyerPhone\" : \"01012345678\",\n \"productName\" : \"스탠다드 멤버십\"\n }\n}"
POST /accounts/withdrawal¶
Responses
GET /accounts/memberships/current¶
Responses
POST /accounts/memberships/withdrawal¶
Responses
admin¶
GET /admin/coupons¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:20.786844934\",\n \"code\" : \"OK\",\n \"data\" : {\n \"currentSlice\" : 0,\n \"sizePerSlice\" : 10,\n \"numberOfElements\" : 1,\n \"hasPrevious\" : false,\n \"hasNext\" : false,\n \"isFirst\" : true,\n \"isLast\" : true,\n \"contents\" : [ {\n \"publishedDate\" : \"2026-05-11\",\n \"code\" : \"TEST-COUPON-CODE\",\n \"usedAccountName\" : null,\n \"codeType\" : \"STANDARD\",\n \"isUsed\" : false,\n \"isUsing\" : false,\n \"startDate\" : null,\n \"endDate\" : null\n } ],\n \"totalCount\" : null\n }\n}"
POST /admin/coupons¶
Request body
Responses
GET /admin/feedbacks¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:20.988019689\",\n \"code\" : \"OK\",\n \"data\" : {\n \"currentSlice\" : 0,\n \"sizePerSlice\" : 10,\n \"numberOfElements\" : 1,\n \"hasPrevious\" : false,\n \"hasNext\" : false,\n \"isFirst\" : true,\n \"isLast\" : true,\n \"contents\" : [ {\n \"feedbackId\" : 1,\n \"sessionId\" : 1,\n \"turnId\" : 1,\n \"turnNumber\" : 1,\n \"accountId\" : \"user-123\",\n \"accountName\" : \"홍길동\",\n \"userQuestion\" : \"상속세 계산 방법을 알려주세요\",\n \"rating\" : 5,\n \"reason\" : \"답변이 매우 정확했습니다\",\n \"createdAt\" : \"2026-05-11T08:21:20.982162244\"\n } ],\n \"totalCount\" : 1\n }\n}"
GET /admin/payments¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:20.694306447\",\n \"code\" : \"OK\",\n \"data\" : {\n \"currentSlice\" : 0,\n \"sizePerSlice\" : 10,\n \"numberOfElements\" : 1,\n \"hasPrevious\" : false,\n \"hasNext\" : false,\n \"isFirst\" : true,\n \"isLast\" : true,\n \"contents\" : [ {\n \"membershipId\" : 1,\n \"paymentId\" : \"test-payment-id\",\n \"couponCode\" : null,\n \"paidTime\" : \"2026-05-11T08:21:20.689816189\",\n \"status\" : \"COMPLETE\",\n \"membershipType\" : \"STANDARD\",\n \"paidAmount\" : 10000,\n \"paymentType\" : \"무통장입금\",\n \"accountName\" : \"홍길동\",\n \"recommender\" : null,\n \"isBankConfirmed\" : true,\n \"bankPaymentInfo\" : {\n \"isCashReceiptRequired\" : true,\n \"cashReceiptType\" : \"INDIVIDUAL\",\n \"cashReceiptNumber\" : \"01039218382\",\n \"depositBank\" : \"국민은행 91938281-39192301 온비즈택스\",\n \"depositorName\" : \"김동근\",\n \"isReceiptPublished\" : false\n }\n } ],\n \"totalCount\" : null\n }\n}"
GET /admin/accounts/list¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:21.361472942\",\n \"code\" : \"OK\",\n \"data\" : {\n \"currentSlice\" : 0,\n \"sizePerSlice\" : 10,\n \"numberOfElements\" : 1,\n \"hasPrevious\" : false,\n \"hasNext\" : false,\n \"isFirst\" : true,\n \"isLast\" : true,\n \"contents\" : [ {\n \"accountId\" : \"test-user-00000000-0000-0000-0000-000000000001\",\n \"name\" : \"홍길동\",\n \"phone\" : \"01012345678\",\n \"joinDate\" : \"2026-05-11\",\n \"membershipType\" : \"STANDARD\",\n \"remainingDays\" : 25\n } ],\n \"totalCount\" : null\n }\n}"
GET /admin/accounts/roles¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:20.270937356\",\n \"code\" : \"OK\",\n \"data\" : {\n \"currentSlice\" : 0,\n \"sizePerSlice\" : 10,\n \"numberOfElements\" : 1,\n \"hasPrevious\" : false,\n \"hasNext\" : false,\n \"isFirst\" : true,\n \"isLast\" : true,\n \"contents\" : [ {\n \"accountId\" : \"test-user-00000000-0000-0000-0000-000000000001\",\n \"name\" : \"홍길동\",\n \"phone\" : \"01012345678\",\n \"email\" : null,\n \"role\" : \"USER\",\n \"accountStatus\" : \"ACTIVATED\",\n \"joinDate\" : \"2026-05-11\"\n } ],\n \"totalCount\" : null\n }\n}"
PATCH /admin/accounts/{accountId}¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
path | string | No |
Request body
Responses
DELETE /admin/coupons/{code}¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
code |
path | string | No |
Responses
GET /admin/elastic/indices¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:23.056050935\",\n \"code\" : \"OK\",\n \"data\" : {\n \"indices\" : [ {\n \"name\" : \"tax-laws\",\n \"displayName\" : \"법령 조문\",\n \"documentCount\" : 12345,\n \"crudEnabled\" : true\n }, {\n \"name\" : \"tax-precedents\",\n \"displayName\" : \"판례/예규\",\n \"documentCount\" : 5678,\n \"crudEnabled\" : true\n }, {\n \"name\" : \"conversation-memory\",\n \"displayName\" : \"대화 히스토리\",\n \"documentCount\" : 999,\n \"crudEnabled\" : false\n } ]\n }\n}"
GET /admin/feedbacks/statistics¶
Responses
GET /admin/reports/list¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:20.513780097\",\n \"code\" : \"OK\",\n \"data\" : {\n \"currentSlice\" : 0,\n \"sizePerSlice\" : 10,\n \"numberOfElements\" : 1,\n \"hasPrevious\" : false,\n \"hasNext\" : false,\n \"isFirst\" : true,\n \"isLast\" : true,\n \"contents\" : [ {\n \"id\" : 1,\n \"status\" : \"답변 완료\",\n \"question\" : \"상속세 계산 방법은?\",\n \"createdDate\" : \"2024-01-15T10:30:00\"\n } ],\n \"totalCount\" : null\n }\n}"
DELETE /admin/reports/{reportId}¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
reportId |
path | string | No |
Responses
GET /admin/accounts/{accountId}/payments¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
path | string | No |
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:21.313633125\",\n \"code\" : \"OK\",\n \"data\" : {\n \"totalCount\" : 1,\n \"contents\" : [ {\n \"membershipId\" : 1,\n \"paymentId\" : \"test-payment-id\",\n \"couponCode\" : null,\n \"startDate\" : \"2026-05-11\",\n \"endDate\" : \"2026-06-10\",\n \"paidTime\" : \"2026-05-11T08:21:21.310838018\",\n \"status\" : \"COMPLETE\",\n \"membershipType\" : \"STANDARD\",\n \"paidAmount\" : 10000,\n \"paymentType\" : \"신용/체크카드\",\n \"note\" : null\n } ],\n \"metadata\" : null\n }\n}"
PATCH /admin/accounts/{accountId}/role¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
path | string | No |
Request body
Responses
PATCH /admin/accounts/{accountId}/status¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
path | string | No |
Request body
Responses
GET /admin/elastic/{indexName}/documents¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
indexName |
path | string | No |
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:22.919529962\",\n \"code\" : \"OK\",\n \"data\" : {\n \"documents\" : [ {\n \"id\" : \"소득세법_B0178021\",\n \"index\" : \"tax-laws\",\n \"source\" : {\n \"law_name\" : \"소득세법\",\n \"article_title\" : \"제1조 (목적)\",\n \"content\" : \"이 법은 개인의 소득에 대하여...\"\n },\n \"score\" : 1.0\n } ],\n \"totalCount\" : 12345,\n \"page\" : 0,\n \"size\" : 20,\n \"hasNext\" : true\n }\n}"
POST /admin/elastic/{indexName}/documents¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
indexName |
path | string | No |
Request body
Responses
PATCH /admin/payments/{paymentId}/bank-confirm¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
paymentId |
path | string | No |
Request body
Responses
PATCH /admin/payments/{paymentId}/cash-receipt¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
paymentId |
path | string | No |
Responses
GET /admin/elastic/{indexName}/documents/{documentId}¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
documentId |
path | string | No | ||
indexName |
path | string | No |
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:22.804742669\",\n \"code\" : \"OK\",\n \"data\" : {\n \"id\" : \"소득세법_B0178021\",\n \"index\" : \"tax-laws\",\n \"source\" : {\n \"law_name\" : \"소득세법\",\n \"article_title\" : \"제1조 (목적)\",\n \"content\" : \"이 법은 개인의 소득에 대하여...\",\n \"collected_at\" : \"2024-01-15T10:30:00Z\"\n },\n \"score\" : null\n }\n}"
PUT /admin/elastic/{indexName}/documents/{documentId}¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
documentId |
path | string | No | ||
indexName |
path | string | No |
Request body
Responses
DELETE /admin/elastic/{indexName}/documents/{documentId}¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
documentId |
path | string | No | ||
indexName |
path | string | No |
Responses
auth¶
POST /auth/reissue¶
Responses
POST /auth/phone-authentications/change¶
Request body
Responses
POST /auth/phone-authentications/issue¶
Request body
Responses
conversations¶
POST /conversations/stream¶
Request body
Responses
"event:metadata\ndata:{\"rewrittenQuestion\":null,\"referenceIds\":[\"doc1\",\"doc2\"],\"referenceDetails\":[]}\n\nevent:chunk\ndata:상속세는%20\n\nevent:chunk\ndata:상속재산가액에서%20\n\nevent:chunk\ndata:각종%20공제를%20차감한%20후%20계산합니다.\n\nevent:complete\ndata:{\"turn\":{\"sessionId\":\"test-session-uuid\",\"turnId\":1,\"turnNumber\":1,\"userQuestion\":\"상속세 계산 방법을 알려주세요\",\"rewrittenQuestion\":null,\"assistantAnswer\":\"상속세는 상속재산가액에서 각종 공제를 차감한 후 계산합니다.\",\"createdAt\":\"2026-05-11T08:21:43.409258908\",\"referenceIds\":[],\"referenceDetails\":[]},\"usageAfter\":null}\n\n"
"event:metadata\ndata:{\"rewrittenQuestion\":null,\"referenceIds\":[\"doc1\",\"doc2\"],\"referenceDetails\":[]}\n\nevent:chunk\ndata:상속세는%20\n\nevent:chunk\ndata:상속재산가액에서%20\n\nevent:chunk\ndata:각종%20공제를%20차감한%20후%20계산합니다.\n\nevent:complete\ndata:{\"turn\":{\"sessionId\":\"test-session-uuid\",\"turnId\":1,\"turnNumber\":1,\"userQuestion\":\"상속세 계산 방법을 알려주세요\",\"rewrittenQuestion\":null,\"assistantAnswer\":\"상속세는 상속재산가액에서 각종 공제를 차감한 후 계산합니다.\",\"createdAt\":\"2026-05-11T08:21:43.345409573\",\"referenceIds\":[],\"referenceDetails\":[]},\"usageAfter\":null}\n\n"
GET /conversations/token-usage¶
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:43.646189508\",\n \"code\" : \"OK\",\n \"data\" : {\n \"membershipType\" : \"FREE\",\n \"usedTokens\" : 5000,\n \"limitTokens\" : 10000,\n \"remainingTokens\" : 5000,\n \"isUnlimited\" : false,\n \"warningLevel\" : \"NONE\",\n \"percentage\" : 50\n }\n}"
POST /conversations/{sessionId}/turns/stream¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
sessionId |
path | string | No |
Request body
Responses
"event:metadata\ndata:{\"rewrittenQuestion\":\"상속세 계산시 예외 사항은 무엇인가요?\",\"referenceIds\":[\"doc3\",\"doc4\"],\"referenceDetails\":[]}\n\nevent:chunk\ndata:상속세%20계산시%20\n\nevent:chunk\ndata:주요%20예외%20사항으로는%20\n\nevent:chunk\ndata:배우자%20상속공제,%20기초공제%20등이%20있습니다.\n\nevent:complete\ndata:{\"turn\":{\"sessionId\":\"test-session-uuid\",\"turnId\":2,\"turnNumber\":2,\"userQuestion\":\"그거 예외는 뭐가 있어?\",\"rewrittenQuestion\":\"상속세 계산시 예외 사항은 무엇인가요?\",\"assistantAnswer\":\"상속세 계산시 주요 예외 사항으로는 배우자 상속공제, 기초공제 등이 있습니다.\",\"createdAt\":\"2026-05-11T08:21:42.880947774\",\"referenceIds\":[],\"referenceDetails\":[]},\"usageAfter\":null}\n\n"
GET /conversations/{sessionId}/turns/{turnId}/feedback¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
sessionId |
path | string | No | ||
turnId |
path | string | No |
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:44.872385538\",\n \"code\" : \"OK\",\n \"data\" : {\n \"feedbackId\" : 1,\n \"turnId\" : 10,\n \"rating\" : 4,\n \"reason\" : \"좋은 답변이었습니다\",\n \"createdAt\" : \"2026-05-11T08:21:44.869591878\",\n \"lastModifiedAt\" : \"2026-05-11T08:21:44.869602308\"\n }\n}"
POST /conversations/{sessionId}/turns/{turnId}/feedback¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
sessionId |
path | string | No | ||
turnId |
path | string | No |
Request body
Responses
"{\n \"responseTime\" : \"2026-05-11T08:21:44.737053164\",\n \"code\" : \"OK\",\n \"data\" : {\n \"feedbackId\" : 1,\n \"turnId\" : 10,\n \"rating\" : 3,\n \"reason\" : null,\n \"createdAt\" : \"2026-05-11T08:21:44.733354924\",\n \"lastModifiedAt\" : \"2026-05-11T08:21:44.733369767\"\n }\n}"
"{\n \"responseTime\" : \"2026-05-11T08:21:44.761264454\",\n \"code\" : \"OK\",\n \"data\" : {\n \"feedbackId\" : 1,\n \"turnId\" : 10,\n \"rating\" : 5,\n \"reason\" : \"답변이 매우 정확하고 도움이 되었습니다\",\n \"createdAt\" : \"2026-05-11T08:21:44.757803591\",\n \"lastModifiedAt\" : \"2026-05-11T08:21:44.757807627\"\n }\n}"
DELETE /conversations/{sessionId}/turns/{turnId}/feedback¶
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
sessionId |
path | string | No | ||
turnId |
path | string | No |
Responses