회원가입 및 인증 인가

인증코드 발송

Request

POST /api/auth/send?email=test@gmail.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Table 1. Query Parameters
Parameter Description Required

email

인증 번호를 받을 이메일 주소

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
Table 2. Query Parameters
Parameter Description Required

email

검증할 이메일 주소

true

code

사용자가 입력한 인증 번호

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
Table 3. Query Parameters
Parameter Description Required

value

검사할 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
Table 4. Query Parameters
Parameter Description Required

value

검사할 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 상세 주소"
}
Table 5. Request Fields
Field Name Type Description Required

email

String

이메일

true

password

String

비밀번호

true

passwordConfirm

String

비밀번호 확인

true

nickname

String

닉네임

true

address

String

주소

true

addressDetail

String

상세 주소

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"
}
Table 6. Request Fields
Field Name Type Description Required

refreshToken

String

만료되지 않은 유효한 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
Table 7. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 8. /api/crews/{crewId}/requests
Parameter Description

crewId

크루 식별자(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
Table 9. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 10. /api/crews/{crewId}/requests
Parameter Description

crewId

크루 식별자(ID)

Table 11. Query Parameters
Parameter Description Required

page

페이지 번호 (0부터 시작(1과 동일))

false

size

한 페이지당 개수

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
Table 12. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 13. /api/crews/{crewId}/requests/{requestId}
Parameter Description

crewId

크루 식별자(ID)

requestId

가입 요청 식별자(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
Table 14. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 15. /api/crews/{crewId}/requests/{requestId}
Parameter Description

crewId

크루 식별자(ID)

requestId

가입 요청 식별자(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
Table 16. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 17. /api/crews/{crewId}/requests/me
Parameter Description

crewId

크루 식별자(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
Table 18. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 19. /api/crews/{crewId}/members
Parameter Description

crewId

크루 식별자(ID)

Table 20. Query Parameters
Parameter Description Required

page

페이지 번호 (0부터 시작(1과 동일))

false

size

한 페이지당 개수

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
Table 21. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 22. /api/crews/{crewId}/members/me
Parameter Description

crewId

크루 식별자(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
Table 23. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 24. /api/crews/{crewId}/members/{targetMemberId}
Parameter Description

crewId

크루 식별자(ID)

targetMemberId

강퇴할 멤버 식별자(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
Table 25. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 26. /api/crews/{crewId}/members/{targetMemberId}/owner
Parameter Description

crewId

크루 식별자(ID)

targetMemberId

권한을 위임받을 멤버 식별자(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
Table 27. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 28. /api/crews/{crewId}/leaderboard
Parameter Description

crewId

크루 식별자(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"
}
Table 29. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 30. /api/crews/{crewId}/announces
Parameter Description

crewId

크루 식별자(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
Table 31. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 32. /api/crews/{crewId}/announces/{announceId}
Parameter Description

crewId

크루 식별자(ID)

announceId

공지사항 식별자(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
Table 33. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 34. /api/crews/{crewId}/announces
Parameter Description

crewId

크루 식별자(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"
}
Table 35. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 36. /api/crews/{crewId}/announces/{announceId}
Parameter Description

crewId

크루 식별자(ID)

announceId

공지사항 식별자(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
Table 37. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 38. /api/crews/{crewId}/announces/{announceId}/pin
Parameter Description

crewId

크루 식별자(ID)

announceId

공지사항 식별자(ID)

Table 39. Query Parameters
Parameter Description Required

state

공지사항 상단 고정 여부

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
Table 40. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 41. /api/crews/{crewId}/announces/{announceId}
Parameter Description

crewId

크루 식별자(ID)

announceId

공지사항 식별자(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
Table 42. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 43. Query Parameters
Parameter Description Required

name

검사할 크루 이름

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--
Table 44. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Part Description

file

크루 이미지 파일 (Content-Type: multipart/form-data)

request

크루 생성 요청 JSON 데이터 (Content-Type: application/json)

Path Type Description

name

String

크루 이름

introduce

String

크루 한줄 소개

detail

String

크루 상세 정보

hashtags

Array

크루 해시태그

kakaoLink

String

크루 오픈 카카오톡 링크

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
Table 45. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 46. /api/crews/{crewId}/main
Parameter Description

crewId

크루 식별자(ID)

Table 47. Query Parameters
Parameter Description Required

page

페이지 번호 (0부터 시작(1과 동일))

false

size

한 페이지당 개수

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
Table 48. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

false

Table 49. /api/crews/{crewId}
Parameter Description

crewId

크루 식별자(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
Table 50. Query Parameters
Parameter Description Required

name

검색할 크루 이름

false

page

페이지 번호 (0부터 시작(1과 동일))

false

size

한 페이지당 개수

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
Table 51. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 52. /api/crews/{crewId}/manage
Parameter Description

crewId

크루 식별자(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"
}
Table 53. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 54. /api/crews/{crewId}
Parameter Description

crewId

크루 아이디

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
Table 55. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 56. /api/crews/{crewId}/image
Parameter Description

crewId

크루 식별자(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
Table 57. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 58. /api/crews/{crewId}/image
Parameter Description

crewId

크루 식별자(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
Table 59. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 60. /api/crews/{crewId}
Parameter Description

crewId

크루 식별자(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
Table 61. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 62. /api/squads/{squadId}/requests
Parameter Description

squadId

스쿼드 식별자(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
Table 63. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 64. /api/squads/{squadId}/requests
Parameter Description

squadId

스쿼드 식별자(ID)

Table 65. Query Parameters
Parameter Description Required

page

페이지 번호

false

size

한 페이지당 개수

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
Table 66. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 67. /api/squads/{squadId}/requests/{requestId}
Parameter Description

squadId

스쿼드 식별자(ID)

requestId

참가 신청 식별자(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
Table 68. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 69. /api/squads/{squadId}/requests/{requestId}
Parameter Description

squadId

스쿼드 식별자(ID)

requestId

참가 신청 식별자(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
Table 70. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 71. /api/squads/{squadId}/requests/me
Parameter Description

squadId

스쿼드 식별자(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
Table 72. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 73. /api/squads/{squadId}/members
Parameter Description

squadId

스쿼드 식별자(ID)

Table 74. Query Parameters
Parameter Description Required

page

페이지 번호

false

size

한 페이지당 개수

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
Table 75. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 76. /api/squads/{squadId}/members/me
Parameter Description

squadId

스쿼드 식별자(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
Table 77. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 78. /api/squads/{squadId}/members/{targetMemberId}
Parameter Description

squadId

스쿼드 식별자(ID)

targetMemberId

추방 대상 회원 식별자(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
Table 79. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 80. /api/squads/{squadId}/members/{targetMemberId}/leader
Parameter Description

squadId

스쿼드 식별자(ID)

targetMemberId

위임받을 대상 회원 식별자(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" : "댓글 내용입니다."
}
Table 81. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 82. /api/squads/{squadId}/comments
Parameter Description

squadId

스쿼드 식별자(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" : "답글 내용입니다."
}
Table 83. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 84. /api/squads/{squadId}/replies/{parentId}
Parameter Description

squadId

스쿼드 식별자(ID)

parentId

부모 댓글 식별자(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
Table 85. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 86. /api/squads/{squadId}/comments
Parameter Description

squadId

스쿼드 식별자(ID)

Table 87. Query Parameters
Parameter Description Required

page

페이지 번호

false

size

한 페이지당 개수

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
Table 88. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 89. /api/squads/{squadId}/comments
Parameter Description

squadId

스쿼드 식별자(ID)

Table 90. Query Parameters
Parameter Description Required

page

페이지 번호

false

size

한 페이지당 개수

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" : "수정된 댓글 내용입니다."
}
Table 91. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 92. /api/squads/{squadId}/comments/{commentId}
Parameter Description

squadId

스쿼드 식별자(ID)

commentId

댓글 식별자(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
Table 93. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 94. /api/squads/{squadId}/comments/{commentId}
Parameter Description

squadId

스쿼드 식별자(ID)

commentId

댓글 식별자(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"
}
Table 95. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 96. Request Fields
Field Name Type Description Required

title

String

스쿼드 제목

true

content

String

스쿼드 상세 내용

true

capacity

Number

스쿼드 최대 정원

true

address

String

스쿼드 활동 장소 (기본 주소)

addressDetail

String

스쿼드 활동 장소 (상세 주소)

categories

Array

스쿼드 카테고리 목록

true

kakaoLink

String

스쿼드 오픈 카카오톡 링크

discordLink

String

스쿼드 디스코드 링크

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
Table 97. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 98. /api/squads/{squadId}
Parameter Description

squadId

스쿼드 식별자(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
Table 99. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 100. Query Parameters
Parameter Description Required

category

검색할 카테고리

false

page

페이지 번호

false

size

한 페이지당 개수

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
Table 101. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 102. /api/crews/{crewId}/squads/manage
Parameter Description

crewId

크루 식별자(ID)

Table 103. Query Parameters
Parameter Description Required

page

페이지 번호

false

size

한 페이지당 개수

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
Table 104. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 105. /api/squads/{squadId}
Parameter Description

squadId

스쿼드 식별자(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
Table 106. Request Headers
Header Name Description Required

Accept

수신 가능한 미디어 타입 (반드시 text/event-stream이어야 함)

true

Last-Event-ID

마지막으로 수신한 이벤트 ID (유실된 알림 복구용)

false

Table 107. Query Parameters
Parameter Description Required

accessToken

사용자 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
Table 108. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 109. Query Parameters
Parameter Description Required

page

페이지 번호 (0부터 시작(1과 동일))

false

size

한 페이지당 개수

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
Table 110. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 111. /api/notifications/{notificationId}/read
Parameter Description

notificationId

읽음 처리할 알림 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
Table 112. Request Headers
Header Name Description Required

Authorization

사용자 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
Table 113. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 114. Query Parameters
Parameter Description Required

from

조회 시작 날짜 (yyyy-MM-dd)

true

to

조회 종료 날짜 (yyyy-MM-dd)

true

type

활동 유형 (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

page

페이지 번호 (0부터 시작(1과 동일))

false

size

한 페이지당 개수

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
Table 115. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 116. Query Parameters
Parameter Description Required

page

페이지 번호 (0부터 시작(1과 동일))

false

size

한 페이지당 개수

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
Table 117. Request Headers
Header Name Description Required

Authorization

사용자 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
Table 118. Request Headers
Header Name Description Required

Authorization

사용자 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
Table 119. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Table 120. Query Parameters
Parameter Description Required

page

페이지 번호

false

size

한 페이지당 개수

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
Table 121. Request Headers
Header Name Description Required

Authorization

사용자 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 상세 주소"
}
Table 122. Request Headers
Header Name Description Required

Authorization

사용자 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"
}
Table 123. Request Headers
Header Name Description Required

Authorization

사용자 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
Table 124. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Part Description

file

사용자 이미지 파일 (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
Table 125. Request Headers
Header Name Description Required

Authorization

사용자 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
Table 126. Request Headers
Header Name Description Required

Authorization

사용자 JWT 인증 정보

true

Response

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 55

{
  "status" : 204,
  "success" : true,
  "data" : ""
}