회원가입 및 인증 인가
인증코드 발송
Request
POST /api/auth/send?email=test@gmail.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
| Parameter | Description | Required |
|---|---|---|
|
인증 번호를 받을 이메일 주소 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
인증코드 검증
Request
GET /api/auth/verify?email=revi1337@gmail.com&code=123456 HTTP/1.1
Host: localhost:8080
| Parameter | Description | Required |
|---|---|---|
|
검증할 이메일 주소 |
true |
|
사용자가 입력한 인증 번호 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 77
{
"status" : 200,
"success" : true,
"data" : {
"valid" : true
}
}
이메일 중복 검사
Request
GET /api/members/check-email?value=david122123%40gmail.com HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
| Parameter | Description | Required |
|---|---|---|
|
검사할 Email |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 82
{
"status" : 200,
"success" : true,
"data" : {
"duplicate" : false
}
}
닉네임 중복 검사
Request
GET /api/members/check-nickname?value=revi1337 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
| Parameter | Description | Required |
|---|---|---|
|
검사할 Nickname |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 82
{
"status" : 200,
"success" : true,
"data" : {
"duplicate" : false
}
}
회원가입
Request
POST /api/members HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 202
Host: localhost:8080
{
"email" : "david122123@gmail.com",
"password" : "12345!@asa",
"passwordConfirm" : "12345!@asa",
"nickname" : "revi1337",
"address" : "REVI 주소",
"addressDetail" : "REVI 상세 주소"
}
| Field Name | Type | Description | Required |
|---|---|---|---|
|
|
이메일 |
true |
|
|
비밀번호 |
true |
|
|
비밀번호 확인 |
true |
|
|
닉네임 |
true |
|
|
주소 |
true |
|
|
상세 주소 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
일반 로그인
Request
POST /api/auth/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 64
Host: localhost:8080
{
"email" : "test@gmail.com",
"password" : "test-password"
}
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 181
{
"status" : 200,
"success" : true,
"data" : {
"accessToken" : "header.access-token-payload.signature",
"refreshToken" : "header.refresh-token-payload.signature"
}
}
OAuth2 로그인
OAuth2 로그인 주소 반환
Request
GET /api/login/oauth2/kakao HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Response
HTTP/1.1 200 OK
OAuth2 로그인 (인가서버가 수행)
Request
GET /api/login/oauth2/code/kakao?code=authorization-code HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Response
HTTP/1.1 302 Found
토큰 재발급
Request
POST /api/auth/reissue HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 48
Host: localhost:8080
{
"refreshToken" : "old-refresh-token-value"
}
| Field Name | Type | Description | Required |
|---|---|---|---|
|
|
만료되지 않은 유효한 Refresh Token |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 139
{
"status" : 201,
"success" : true,
"data" : {
"accessToken" : "new-access-token",
"refreshToken" : "new-refresh-token"
}
}
크루 도메인
크루 해시태그
크루 해시태그 목록
Request
GET /api/hashtags HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 626
{
"status" : 200,
"success" : true,
"data" : [ "활발한", "트랜디한", "내향적인", "외향적인", "조용한", "겜돌이", "겜순이", "집돌이", "집순이", "술꾼러버", "짜릿한", "모험적인", "창의적인", "열정적인", "도전적인", "긍정적인", "낙천적인", "사교적인", "친화적인", "유쾌한", "재치있는", "활기찬", "열린마음의", "자유로운", "독립적인", "여행", "즉흥적인", "영화", "리프레시", "일탈", "독서", "산책", "애견모임", "먹방", "맛집탐방", "모각공", "모각코", "카페러버", "분위기있는", "와인" ]
}
크루 참가
크루 참가 신청
Request
POST /api/crews/1/requests HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
크루 참가 신청 목록
Request
GET /api/crews/1/requests?page=0&size=5 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 (0부터 시작(1과 동일)) |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 602
{
"status" : 200,
"success" : true,
"data" : {
"size" : 5,
"page" : 1,
"totalPages" : 1,
"totalCount" : 2,
"resultsSize" : 2,
"results" : [ {
"id" : 12,
"requestAt" : "2026-01-04T06:00:00",
"requester" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTJ"
}
}, {
"id" : 11,
"requestAt" : "2026-01-04T03:00:00",
"requester" : {
"id" : 2,
"nickname" : "nickname-2",
"introduce" : "introduce-2",
"mbti" : "ENTP"
}
} ]
}
}
크루 참가 신청 수락
Request
PATCH /api/crews/1/requests/10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
|
가입 요청 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 참가 신청 거절
Request
DELETE /api/crews/1/requests/10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
|
가입 요청 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 참가 신청 취소
Request
DELETE /api/crews/1/requests/me HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 참여자
크루 참여자 목록
Request
GET /api/crews/1/members?page=0&size=10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 (0부터 시작(1과 동일)) |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 796
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 2,
"resultsSize" : 2,
"results" : [ {
"states" : {
"isMe" : false,
"canKick" : true,
"canDelegateOwner" : true
},
"participateAt" : "2026-01-04T06:00:00",
"member" : {
"id" : 2,
"nickname" : "nickname-2",
"introduce" : "introduce-2",
"mbti" : "ENTP"
}
}, {
"states" : {
"isMe" : true,
"canKick" : false,
"canDelegateOwner" : false
},
"participateAt" : "2026-01-04T03:00:00",
"member" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTJ"
}
} ]
}
}
크루 탈퇴
Request
DELETE /api/crews/1/members/me HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 참여자 추방
Request
DELETE /api/crews/1/members/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
|
강퇴할 멤버 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루장 위임
Request
PATCH /api/crews/1/members/2/owner HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
|
권한을 위임받을 멤버 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 리더보드
Request
GET /api/crews/1/leaderboard HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 594
{
"status" : 200,
"success" : true,
"data" : [ {
"crewId" : 1,
"memberId" : 100,
"nickname" : "name-100",
"mbti" : "INFJ",
"rank" : 1,
"score" : 1200,
"lastActivityTime" : "2026-01-07T00:00:00"
}, {
"crewId" : 1,
"memberId" : 50,
"nickname" : "name-50",
"mbti" : "ISTJ",
"rank" : 2,
"score" : 622,
"lastActivityTime" : "2026-01-06T00:00:00"
}, {
"crewId" : 1,
"memberId" : 70,
"nickname" : "nick-name-70",
"mbti" : "ISTP",
"rank" : 3,
"score" : 622,
"lastActivityTime" : "2026-01-06T00:00:00"
} ]
}
크루 공지사항
크루 공지사항 작성
Request
POST /api/crews/1/announces HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 66
Host: localhost:8080
{
"title" : "announce-title",
"content" : "announce-content"
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
크루 공지사항 상세 정보
Request
GET /api/crews/1/announces/2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
|
공지사항 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 463
{
"status" : 200,
"success" : true,
"data" : {
"states" : {
"role" : "OWNER",
"canPin" : true,
"canModify" : true
},
"id" : 2,
"title" : "announce-title",
"content" : "announce-content",
"createdAt" : "2026-01-04T00:00:00",
"pinned" : true,
"pinnedAt" : "2026-01-05T00:00:00",
"writer" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
}
}
크루 공지사항 목록
Request
GET /api/crews/1/announces HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 894
{
"status" : 200,
"success" : true,
"data" : {
"states" : {
"canWrite" : true
},
"announces" : [ {
"states" : {
"role" : "OWNER"
},
"id" : 2,
"title" : "announce-title-2",
"content" : "announce-content-2",
"createdAt" : "2026-01-04T20:00:00",
"pinned" : true,
"pinnedAt" : "2026-01-05T00:00:00",
"writer" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTJ"
}
}, {
"states" : {
"role" : "MANAGER"
},
"id" : 1,
"title" : "announce-title-1",
"content" : "announce-content-1",
"createdAt" : "2026-01-04T18:00:00",
"pinned" : false,
"writer" : {
"id" : 2,
"nickname" : "nickname-2",
"introduce" : "introduce-2",
"mbti" : "ENTP"
}
} ]
}
}
크루 공지사항 수정
Request
PUT /api/crews/1/announces/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 82
Host: localhost:8080
{
"title" : "changed-announce-title",
"content" : "changed-announce-content"
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
|
공지사항 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 공지사항 상단 고정
Request
PATCH /api/crews/1/announces/1/pin?state=true HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
|
공지사항 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
공지사항 상단 고정 여부 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 공지사항 삭제
Request
DELETE /api/crews/1/announces/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
|
공지사항 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 이름 중복 검사
Request
GET /api/crews/check?name=crew-name HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description | Required |
|---|---|---|
|
검사할 크루 이름 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 81
{
"status" : 200,
"success" : true,
"data" : {
"duplicate" : true
}
}
크루 생성
Request
POST /api/crews HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer header.payload.signature
Host: localhost:8080
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request; filename=request
Content-Type: application/json
{"name":"crew-name","introduce":"introduce","detail":"detail","hashtags":["활발한","맛집탐방"],"kakaoLink":"https://크루_카카오_링크.com"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=file; filename=dummy.png
Content-Type: multipart/form-data
�PNG
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Part | Description |
|---|---|
|
크루 이미지 파일 (Content-Type: multipart/form-data) |
|
크루 생성 요청 JSON 데이터 (Content-Type: application/json) |
| Path | Type | Description |
|---|---|---|
|
|
크루 이름 |
|
|
크루 한줄 소개 |
|
|
크루 상세 정보 |
|
|
크루 해시태그 |
|
|
크루 오픈 카카오톡 링크 |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
크루 메인
Request
GET /api/crews/1/main?page=0&size=2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 (0부터 시작(1과 동일)) |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 1538
{
"status" : 200,
"success" : true,
"data" : {
"states" : {
"canManage" : true
},
"crew" : {
"id" : 1,
"name" : "crew-name",
"introduce" : "crew-introduce",
"detail" : "crew-detail",
"imageUrl" : "",
"kakaoLink" : "kakao-link",
"hashtags" : [ "활발한", "긍정적인" ],
"memberCount" : 1,
"owner" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
},
"announces" : [ {
"states" : {
"role" : "OWNER"
},
"id" : 1,
"title" : "title",
"content" : "content",
"createdAt" : "2026-01-04T00:00:00",
"pinned" : false,
"writer" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
} ],
"rankers" : [ {
"crewId" : 1,
"memberId" : 1,
"nickname" : "nickname",
"mbti" : "ENTJ",
"rank" : 1,
"score" : 10,
"lastActivityTime" : "2026-01-04T00:00:00"
} ],
"squads" : [ {
"id" : 1,
"title" : "title",
"content" : "content",
"capacity" : 10,
"remain" : 9,
"address" : "address",
"addressDetail" : "address-detail",
"kakaoLink" : "kakao-link",
"discordLink" : "discord-link",
"categories" : [ "게임" ],
"leader" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
} ]
}
}
크루 상세 조회
Request
GET /api/crews/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
false |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
Token이 없을 때 (states 가 비어있음)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 426
{
"status" : 200,
"success" : true,
"data" : {
"states" : { },
"id" : 1,
"name" : "crew-name",
"introduce" : "crew-introduce",
"detail" : "crew-detail",
"imageUrl" : "",
"kakaoLink" : "https://kakao-link",
"hashtags" : [ "활발한" ],
"memberCount" : 1,
"owner" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
}
}
Token이 있을 때 (states 가 비어있지 않음)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 496
{
"status" : 200,
"success" : true,
"data" : {
"states" : {
"alreadyRequest" : true,
"alreadyParticipant" : false
},
"id" : 1,
"name" : "crew-name",
"introduce" : "crew-introduce",
"detail" : "crew-detail",
"imageUrl" : "",
"kakaoLink" : "https://kakao-link",
"hashtags" : [ "활발한" ],
"memberCount" : 1,
"owner" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
}
}
크루 검색 및 조회
Request
GET /api/crews?name=crew-name&page=0&size=2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
| Parameter | Description | Required |
|---|---|---|
|
검색할 크루 이름 |
false |
|
페이지 번호 (0부터 시작(1과 동일)) |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 567
{
"status" : 200,
"success" : true,
"data" : {
"size" : 2,
"page" : 1,
"totalPages" : 1,
"totalCount" : 1,
"resultsSize" : 1,
"results" : [ {
"id" : 1,
"name" : "crew-name-1",
"introduce" : "crew-introduce-1",
"detail" : "crew-detail-1",
"imageUrl" : "",
"kakaoLink" : "https://kakao-link",
"hashtags" : [ "활발한" ],
"memberCount" : 1,
"owner" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
} ]
}
}
크루 관리
Request
GET /api/crews/1/manage HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 195
{
"status" : 200,
"success" : true,
"data" : {
"states" : {
"canModify" : true,
"canDelete" : true
},
"requestCnt" : 0,
"squadCnt" : 1,
"memberCnt" : 1
}
}
크루 정보 수정
Request
PUT /api/crews/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 182
Host: localhost:8080
{
"name" : "changed-name",
"introduce" : "changed-introduce",
"detail" : "changed-introduce-detail",
"hashtags" : [ "일탈" ],
"kakaoLink" : "https://changed-kakao-link"
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 아이디 |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 이미지 수정
Request
PATCH /api/crews/1/image HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 이미지 삭제
Request
DELETE /api/crews/1/image HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
크루 삭제
Request
DELETE /api/crews/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 도메인
스쿼드 카테고리
스쿼드 카테고리 목록
Request
GET /api/categories HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: localhost:8080
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 477
{
"status" : 200,
"success" : true,
"data" : [ "게임", "배드민턴", "테니스", "풋살", "축구", "탁구", "당구", "농구", "야구", "골프", "낚시", "스쿠버다이빙", "서핑", "카약/레프팅/보트", "헬스", "여행", "러닝", "등산", "액티비티", "영화", "공연", "전시", "뮤지컬", "방탈출", "만화카페", "VR", "수영장", "워터파크", "빠지", "계곡", "스키장", "스케이트", "빙어낚시", "눈꽃축제" ]
}
스쿼드 참가
스쿼드 참가 신청
Request
POST /api/squads/1/requests HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
스쿼드 참가 신청 목록
Request
GET /api/squads/1/requests HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 390
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 1,
"resultsSize" : 1,
"results" : [ {
"id" : 10,
"requestAt" : "2026-01-04T00:00:00",
"requester" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTJ"
}
} ]
}
}
스쿼드 참가 신청 수락
Request
PATCH /api/squads/1/requests/10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
|
참가 신청 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 참가 신청 거절
Request
DELETE /api/squads/1/requests/10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
|
참가 신청 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 참가 신청 취소
Request
DELETE /api/squads/1/requests/me HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 참여자
스쿼드 참여자 목록
Request
GET /api/squads/1/members HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 |
false |
|
한 페이지당 개수 |
false |
Response
본인이 스쿼드 참여자인 경우
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 488
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 1,
"resultsSize" : 1,
"results" : [ {
"states" : {
"isMe" : true,
"canKick" : false,
"canDelegateLeader" : false
},
"participateAt" : "2026-01-04T00:00:00",
"member" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTP"
}
} ]
}
}
본인이 스쿼드 참여하지 않은 경우(크루 오너) (isMe & canKick & canDelegateLeader 는 내려오지 않음)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 396
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 1,
"resultsSize" : 1,
"results" : [ {
"states" : { },
"participateAt" : "2026-01-04T00:00:00",
"member" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTP"
}
} ]
}
}
스쿼드 탈퇴
Request
DELETE /api/squads/1/members/me HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 참여자 추방
Request
DELETE /api/squads/1/members/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
|
추방 대상 회원 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 리더 위임
Request
PATCH /api/squads/1/members/2/leader HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
|
위임받을 대상 회원 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 댓글
스쿼드 댓글 작성
Request
POST /api/squads/1/comments HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 43
Host: localhost:8080
{
"content" : "댓글 내용입니다."
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
스쿼드 대댓글 작성
Request
POST /api/squads/1/replies/10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 43
Host: localhost:8080
{
"content" : "답글 내용입니다."
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
|
부모 댓글 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
스쿼드 댓글 목록
Request
GET /api/squads/1/comments HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 795
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 2,
"resultsSize" : 2,
"results" : [ {
"states" : {
"canDelete" : true
},
"id" : 2,
"deleted" : false,
"content" : "부모 댓글입니다.",
"createdAt" : "2026-01-04T00:00:00",
"updatedAt" : "2026-01-04T00:00:00",
"writer" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTP"
},
"replies" : [ ]
}, {
"states" : {
"canDelete" : false
},
"id" : 1,
"deleted" : true,
"content" : "삭제된 댓글입니다.",
"deletedAt" : "2026-01-04T00:00:00",
"replies" : [ ]
} ]
}
}
스쿼드 대댓글 목록
Request
GET /api/squads/1/comments HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 795
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 2,
"resultsSize" : 2,
"results" : [ {
"states" : {
"canDelete" : true
},
"id" : 2,
"deleted" : false,
"content" : "부모 댓글입니다.",
"createdAt" : "2026-01-04T00:00:00",
"updatedAt" : "2026-01-04T00:00:00",
"writer" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTP"
},
"replies" : [ ]
}, {
"states" : {
"canDelete" : false
},
"id" : 1,
"deleted" : true,
"content" : "삭제된 댓글입니다.",
"deletedAt" : "2026-01-04T00:00:00",
"replies" : [ ]
} ]
}
}
스쿼드 댓글 수정
Request
PATCH /api/squads/1/comments/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 53
Host: localhost:8080
{
"content" : "수정된 댓글 내용입니다."
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
|
댓글 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 댓글 삭제
Request
DELETE /api/squads/1/comments/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
|
댓글 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
스쿼드 생성
Request
POST /api/crews/1/squads HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 219
Host: localhost:8080
{
"title" : "title",
"content" : "content",
"capacity" : 20,
"address" : "addr",
"addressDetail" : "addr-detail",
"categories" : [ "게임" ],
"kakaoLink" : "kakao-link",
"discordLink" : "discord-link"
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Field Name | Type | Description | Required |
|---|---|---|---|
|
|
스쿼드 제목 |
true |
|
|
스쿼드 상세 내용 |
true |
|
|
스쿼드 최대 정원 |
true |
|
|
스쿼드 활동 장소 (기본 주소) |
|
|
|
스쿼드 활동 장소 (상세 주소) |
|
|
|
스쿼드 카테고리 목록 |
true |
|
|
스쿼드 오픈 카카오톡 링크 |
|
|
|
스쿼드 디스코드 링크 |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 201,
"success" : true,
"data" : ""
}
스쿼드 상세 조회
Request
GET /api/squads/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
Response
본인이 스쿼드 참여자인 경우 (alreadyRequest 는 내려오지 않음)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 628
{
"status" : 200,
"success" : true,
"data" : {
"states" : {
"alreadyParticipant" : true,
"isLeader" : true,
"canSeeParticipants" : true,
"canLeave" : false,
"canDelete" : true
},
"id" : 1,
"title" : "title",
"content" : "content",
"capacity" : 8,
"remain" : 7,
"address" : "",
"addressDetail" : "",
"kakaoLink" : "https://kakao-link",
"discordLink" : "https://discord-link",
"categories" : [ "게임", "영화" ],
"leader" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
}
}
본인이 스쿼드 참여자가 아닌 경우(크루에만 소속) (isLeader & canLeave 는 내려오지 않음)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 610
{
"status" : 200,
"success" : true,
"data" : {
"states" : {
"alreadyRequest" : false,
"alreadyParticipant" : false,
"canSeeParticipants" : true,
"canDelete" : true
},
"id" : 1,
"title" : "title",
"content" : "content",
"capacity" : 8,
"remain" : 7,
"address" : "",
"addressDetail" : "",
"kakaoLink" : "https://kakao-link",
"discordLink" : "https://discord-link",
"categories" : [ "게임", "영화" ],
"leader" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
}
}
스쿼드 검색 및 조회
Request
GET /api/crews/1/squads?category=%EA%B2%8C%EC%9E%84 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description | Required |
|---|---|---|
|
검색할 카테고리 |
false |
|
페이지 번호 |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 618
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 1,
"resultsSize" : 1,
"results" : [ {
"id" : 1,
"title" : "title",
"content" : "content",
"capacity" : 8,
"remain" : 7,
"address" : "",
"addressDetail" : "",
"kakaoLink" : "https://kakao-link",
"discordLink" : "https://discord-link",
"categories" : [ "게임", "영화" ],
"leader" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
} ]
}
}
스쿼드 관리
Request
GET /api/crews/1/squads/manage HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
크루 식별자(ID) |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 517
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 1,
"resultsSize" : 1,
"results" : [ {
"states" : {
"isLeader" : true,
"canDestroy" : true
},
"id" : 1,
"title" : "title",
"capacity" : 20,
"remain" : 19,
"categories" : [ ],
"leader" : {
"id" : 1,
"nickname" : "nickname",
"introduce" : "introduce",
"mbti" : "ENTJ"
}
} ]
}
}
스쿼드 삭제
Request
DELETE /api/squads/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
스쿼드 식별자(ID) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
회원 도메인
회원 알림
회원 알림 SSE 연결
Request
GET /api/notifications/sse?accessToken=header.access-token-payload.signature HTTP/1.1
Accept: text/event-stream
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
수신 가능한 미디어 타입 (반드시 text/event-stream이어야 함) |
true |
|
마지막으로 수신한 이벤트 ID (유실된 알림 복구용) |
false |
| Parameter | Description | Required |
|---|---|---|
|
사용자 JWT 액세스 토큰 (EventSource 헤더 제약으로 인해 파라미터로 전달) |
true |
Response
HTTP/1.1 200 OK
회원 알림 목록
Request
GET /api/members/me/notifications?page=0&size=4 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 (0부터 시작(1과 동일)) |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 830
{
"status" : 200,
"success" : true,
"data" : {
"size" : 4,
"page" : 1,
"totalPages" : 1,
"totalCount" : 3,
"resultsSize" : 3,
"results" : [ {
"id" : 3,
"receiverId" : 2,
"publisherId" : 3,
"topic" : "USER",
"detail" : "CREW_REQUEST",
"occurredAt" : "2026-01-10T00:00:00",
"read" : false,
"payload" : { }
}, {
"id" : 2,
"receiverId" : 2,
"publisherId" : 3,
"topic" : "USER",
"detail" : "CREW_ACCEPT",
"occurredAt" : "2026-01-09T00:00:00",
"read" : true,
"payload" : { }
}, {
"id" : 1,
"receiverId" : 2,
"publisherId" : 3,
"topic" : "USER",
"detail" : "CREW_REJECT",
"occurredAt" : "2026-01-08T00:00:00",
"read" : false,
"payload" : { }
} ]
}
}
회원 알림 읽기
Request
PATCH /api/notifications/1/read HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description |
|---|---|
|
읽음 처리할 알림 ID |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
회원 알림 모두 읽기
Request
PATCH /api/notifications/read-all HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
회원 히스토리
회원 히스토리 목록
Request
GET /api/members/me/histories?from=2026-01-04&to=2026-01-09&page=0&size=4 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description | Required |
|---|---|---|
|
조회 시작 날짜 (yyyy-MM-dd) |
true |
|
조회 종료 날짜 (yyyy-MM-dd) |
true |
|
활동 유형 (HistoryType): [CREW_CREATE, CREW_REQUEST, CREW_ACCEPT, CREW_REJECT, CREW_CANCEL, SQUAD_CREATE, SQUAD_REQUEST, SQUAD_ACCEPT, SQUAD_REJECT, SQUAD_CANCEL, SQUAD_COMMENT, SQUAD_COMMENT_REPLY] |
false |
|
페이지 번호 (0부터 시작(1과 동일)) |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 900
{
"status" : 200,
"success" : true,
"data" : {
"size" : 4,
"page" : 1,
"totalPages" : 1,
"totalCount" : 4,
"resultsSize" : 4,
"results" : [ {
"crewId" : 1,
"type" : "CREW_CREATE",
"message" : "[crew-name-1] 크루를 생성했습니다.",
"recordedAt" : "2026-01-09T00:00:00"
}, {
"crewId" : 1,
"type" : "CREW_REQUEST",
"message" : "[crew-name-1] 크루 합류를 요청했습니다.",
"recordedAt" : "2026-01-07T00:00:00"
}, {
"crewId" : 1,
"type" : "CREW_ACCEPT",
"message" : "[crew-name-1] requester 님의 크루 합류를 수락했습니다.",
"recordedAt" : "2026-01-06T00:00:00"
}, {
"crewId" : 1,
"type" : "CREW_REJECT",
"message" : "[crew-name-1] requester 님의 크루 합류를 거절헀습니다.",
"recordedAt" : "2026-01-05T00:00:00"
} ]
}
}
크루
내가 참여중인 크루
Request
GET /api/members/me/crew-participants?page=0&size=10 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 (0부터 시작(1과 동일)) |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 1504
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 3,
"resultsSize" : 3,
"results" : [ {
"states" : {
"isOwner" : true
},
"participateAt" : "2026-01-04T06:00:00",
"crew" : {
"id" : 1,
"name" : "crew-name-1",
"introduce" : "crew-introduce-1",
"kakaoLink" : "crew-detail-1",
"imageUrl" : "",
"owner" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTJ"
}
}
}, {
"states" : {
"isOwner" : true
},
"participateAt" : "2026-01-04T05:00:00",
"crew" : {
"id" : 2,
"name" : "crew-name-2",
"introduce" : "crew-introduce-2",
"kakaoLink" : "crew-detail-2",
"imageUrl" : "",
"owner" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTJ"
}
}
}, {
"states" : {
"isOwner" : false
},
"participateAt" : "2026-01-04T08:00:00",
"crew" : {
"id" : 3,
"name" : "crew-name-3",
"introduce" : "crew-introduce-3",
"kakaoLink" : "crew-detail-3",
"imageUrl" : "",
"owner" : {
"id" : 2,
"nickname" : "nickname-2",
"introduce" : "introduce-2",
"mbti" : "ENTP"
}
}
} ]
}
}
참가 신청
나의 크루 가입 신청 내역
Request
GET /api/members/me/crew-requests?page=0&size=5 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 978
{
"status" : 200,
"success" : true,
"data" : {
"size" : 5,
"page" : 1,
"totalPages" : 1,
"totalCount" : 2,
"resultsSize" : 2,
"results" : [ {
"id" : 2,
"requestAt" : "2026-01-04T05:00:00",
"crew" : {
"id" : 1,
"name" : "crew-name-1",
"introduce" : "crew-introduce-1",
"kakaoLink" : "crew-detail-1",
"imageUrl" : "",
"owner" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTJ"
}
}
}, {
"id" : 1,
"requestAt" : "2026-01-04T04:00:00",
"crew" : {
"id" : 2,
"name" : "crew-name-2",
"introduce" : "crew-introduce-2",
"kakaoLink" : "crew-detail-2",
"imageUrl" : "",
"owner" : {
"id" : 2,
"nickname" : "nickname-2",
"introduce" : "introduce-2",
"mbti" : "ENTP"
}
}
} ]
}
}
스쿼드
내가 참여중인 스쿼드
Request
GET /api/members/me/squad-participants HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 843
{
"status" : 200,
"success" : true,
"data" : [ {
"states" : {
"isOwner" : true
},
"crew" : {
"id" : 1,
"name" : "테스트 크루",
"imageUrl" : "https://image.url",
"owner" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTP"
},
"squads" : [ {
"states" : {
"isLeader" : true
},
"participateAt" : "2026-01-04T00:00:00",
"squad" : {
"id" : 1,
"title" : "스쿼드명",
"capacity" : 10,
"remain" : 5,
"categories" : [ "게임" ],
"leader" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTP"
}
}
} ]
}
} ]
}
참가 신청
나의 스쿼드 가입 신청 내역
Request
GET /api/members/me/squad-requests HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Parameter | Description | Required |
|---|---|---|
|
페이지 번호 |
false |
|
한 페이지당 개수 |
false |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 877
{
"status" : 200,
"success" : true,
"data" : {
"size" : 10,
"page" : 1,
"totalPages" : 1,
"totalCount" : 1,
"resultsSize" : 1,
"results" : [ {
"id" : 100,
"requestAt" : "2026-01-04T00:00:00",
"crew" : {
"id" : 1,
"name" : "크루명",
"introduce" : "소개",
"kakaoLink" : "상세",
"imageUrl" : "",
"owner" : {
"id" : 1,
"nickname" : "nickname-1",
"introduce" : "introduce-1",
"mbti" : "ENTJ"
}
},
"squad" : {
"id" : 1,
"title" : "스쿼드명",
"capacity" : 10,
"remain" : 5,
"categories" : [ "게임" ],
"leader" : {
"id" : 2,
"nickname" : "nickname-2",
"introduce" : "introduce-2",
"mbti" : "ENTP"
}
}
} ]
}
}
내 프로필
Request
GET /api/members/me HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 441
{
"status" : 200,
"success" : true,
"data" : {
"id" : 1,
"email" : "david122123@gmail.com",
"nickname" : "revi1337",
"introduce" : "Hello World REVI",
"mbti" : "ISTP",
"kakaoLink" : "https://revi.kakao.com",
"profileImage" : "https://d3jao8gvkosd1k.cloudfront.net/onsquad/default/member-default.svg",
"userType" : "일반",
"address" : "REVI 주소",
"addressDetail" : "REVI 상세 주소"
}
}
프로필 업데이트
Request
PUT /api/members/me HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 197
Host: localhost:8080
{
"nickname" : "revi1337",
"introduce" : "Hello World REVI",
"mbti" : "ISTP",
"kakaoLink" : "https://revi.kakao.com",
"address" : "REVI 주소",
"addressDetail" : "REVI 상세 주소"
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
비밀번호 변경
Request
PATCH /api/members/me/password HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Content-Length: 109
Host: localhost:8080
{
"currentPassword" : "12345!@asa",
"newPassword" : "12345!@asb",
"newPasswordConfirm" : "12345!@asb"
}
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
프로필 이미지 변경
Request
PATCH /api/members/me/image HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
| Part | Description |
|---|---|
|
사용자 이미지 파일 (Content-Type: multipart/form-data) |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
프로필 이미지 삭제
Request
DELETE /api/members/me/image HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}
회원 탈퇴
Request
DELETE /api/members/me HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer header.payload.signature
Host: localhost:8080
| Header Name | Description | Required |
|---|---|---|
|
사용자 JWT 인증 정보 |
true |
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55
{
"status" : 204,
"success" : true,
"data" : ""
}