1. 게시판

1.1. 게시판 목록 조회

1.1.1. HTTP request

GET /boards HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

1.1.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 482

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "boards" : [ {
      "boardId" : 1,
      "title" : "자유 게시판",
      "imageUrl" : "IMAGE URL",
      "usedBoard" : true,
      "description" : "자유롭게 떠드는 공간입니다."
    }, {
      "boardId" : 2,
      "title" : "취업 게시판",
      "imageUrl" : "IMAGE URL",
      "usedBoard" : true,
      "description" : "취업에 대한 정보를 공유해보세요."
    } ]
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

1.1.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.boards

Array

게시판 목록

data.boards[].boardId

Number

게시판 목록의 ID

data.boards[].title

String

게시판 목록의 제목, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.boards[].imageUrl

String

게시판 배너 이미지

data.boards[].usedBoard

Boolean

게시판 사용 여부

data.boards[].description

String

게시판의 특성을 설명해주는 설명문

2. 게시글

2.1. 전체 게시글 목록 조회(Offset)

2.1.1. HTTP request

GET /posts/all/offset?page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.1.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 972

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "취업 게시판",
      "postId" : 6,
      "title" : "안녕하세요 반갑습니다.",
      "content" : "SSAFY 9기 합격했습니다!!",
      "likeCount" : 3,
      "commentCount" : 2,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 4,
      "title" : "싸피 어떤가요??",
      "content" : "저도 싸피에서 교육들으면 개발실력 엄청 오르겠죠?",
      "likeCount" : 11,
      "commentCount" : 29,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.1.4. Request parameters

Parameter Description

page

page값은 불러올 현재 페이지의 값을 의미함, 초기 page는 1(또는 첫 페이지는 1)

size

현재 페이지의 게시글 개수를 의미함, 최소 size는 10

2.1.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.2. 게시글 목록 조회(Cursor)

2.2.1. HTTP request

GET /posts/cursor?boardId=1&cursor=-1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.2.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 987

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 5,
      "title" : "삼성 B형 시험을 준비하려면 뭘 해야할까요?",
      "content" : "역시 B형 특강을 열심히 듣는게 맞나요?",
      "likeCount" : 5,
      "commentCount" : 14,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "익명",
      "anonymity" : true,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 4,
      "title" : "싸피 어떤가요??",
      "content" : "저도 싸피에서 교육들으면 개발실력 엄청 오르겠죠?",
      "likeCount" : 11,
      "commentCount" : 29,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "cursor" : null
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.2.4. Request parameters

Parameter Description

boardId

조회하려는 게시글의 게시판 고유 ID

cursor

cursor값은 다음 페이지를 가져올 마지막 페이지 번호를 의미함, 초기 cursor는 -1, 이후 cursor값은 응답 데이터로 제공되는 cursor값을 사용.

size

cursor를 기준으로 다음에 불러올 페이지의 size를 의미, 최소 size는 10

2.2.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.cursor

Number

다음에 요청할 cursor값, 응답되는 cursor값이 null이면 다음 페이지는 없음을 의미

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.3. 게시글 목록 조회(Offset)

2.3.1. HTTP request

GET /posts/offset?boardId=1&page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.3.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 1016

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 5,
      "title" : "삼성 B형 시험을 준비하려면 뭘 해야할까요?",
      "content" : "역시 B형 특강을 열심히 듣는게 맞나요?",
      "likeCount" : 5,
      "commentCount" : 14,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "익명",
      "anonymity" : true,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 4,
      "title" : "싸피 어떤가요??",
      "content" : "저도 싸피에서 교육들으면 개발실력 엄청 오르겠죠?",
      "likeCount" : 11,
      "commentCount" : 29,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.3.4. Request parameters

Parameter Description

boardId

조회하려는 게시글의 게시판 고유 ID

page

page값은 불러올 현재 페이지의 값을 의미함, 초기 page는 1(또는 첫 페이지는 1)

size

현재 페이지의 게시글 개수를 의미함, 최소 size는 10

2.3.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.4. 게시글 상세 보기(실명)

2.4.1. HTTP request

GET /posts/1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.4.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 875

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "post" : {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 1,
      "title" : "싸탈하고 싶다.",
      "content" : "싸탈하고 싶은 밤이네요",
      "likeCount" : 0,
      "commentCount" : 0,
      "scrapCount" : 0,
      "createdAt" : null,
      "anonymity" : false,
      "modified" : false,
      "scraped" : false,
      "liked" : false,
      "mine" : false,
      "images" : [ ],
      "author" : {
        "memberId" : 99,
        "nickname" : "KIM",
        "memberRole" : "user",
        "ssafyMember" : true,
        "isMajor" : true,
        "ssafyInfo" : {
          "semester" : 9,
          "campus" : "서울",
          "certificationState" : "CERTIFIED",
          "majorTrack" : "Java"
        }
      }
    }
  }
}
Cookie Description

accessToken

액세스 토큰 옵션(쿠키 유무에 따라 다른 응답을 반환합니다.)

2.4.4. Path parameters

Table 1. /posts/{postId}
Parameter Description

postId

조회할 게시글의 고유 ID

2.4.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.post

Object

게시글 정보

data.post.boardId

Number

게시글이 작성된 게시판 종류의 ID

data.post.boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.post.postId

Number

게시글의 고유 ID

data.post.title

String

게시글의 제목, 길이제한 2 ~ 100

data.post.content

String

게시글의 내용, 최소길이 2

data.post.likeCount

Number

게시글의 좋아요 개수

data.post.commentCount

Number

게시글의 댓글 개수

data.post.scrapCount

Number

게시글의 스크랩 개수

data.post.createdAt

String

게시글의 작성일

data.post.anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.post.modified

Boolean

게시글이 수정되었는지 여부를 나타내는 필드

data.post.scraped

Boolean

로그인한 사용자라면 자신이 해당 게시글을 스크랩 했는지 여부를 나타내는 필드

data.post.liked

Boolean

로그인한 사용자라면 자신이 해당 게시글을 좋아요 했는지 여부를 나타내는 필드

data.post.mine

Boolean

로그인한 사용자라면 이 게시글이 자신이 작성한 게시글인지 여부를 나타내는 필드

data.post.images

Array

게시글의 이미지 정보

data.post.author

Object

게시글 작성자의 정보

data.post.images[].imageUrl

String

게시글의 이미지 URL, S3에 저장된 CDN 주소.

data.post.author.memberId

Number

게시글 작성자의 PK(단, 익명이면 -1)

data.post.author.nickname

String

게시글 작성자의 닉네임

data.post.author.memberRole

String

게시글 작성자의 사용자 권한

data.post.author.ssafyMember

Boolean

게시글 작성자가 SSAFY 유저인지 나타내는 필드 값

data.post.author.isMajor

Boolean

게시글 작성자가 전공자인지 여부, true면 전공자, false면 비전공자

data.post.author.ssafyInfo

Object

게시글 작성자가 선택한 SSAFY 정보 단, SSAFY 인증을 받지 않아도, 해당 필드는 존재하지만 익명이면 null값이 들어감.

data.post.author.ssafyInfo.semester

Number

작성자의 SSAFY 기수를 의미

data.post.author.ssafyInfo.campus

String

작성자의 SSAFY 캠퍼스를 의미

data.post.author.ssafyInfo.certificationState

String

작성자의 SSAFY 인증 여부를 의미함, CERTIFIED | UNCERTIFIED

data.post.author.ssafyInfo.majorTrack

String

작성자의 전공트랙 정보를 의미, Java | Python | Mobile | Embedded

2.5. 게시글 상세 보기(익명)

2.5.1. HTTP request

GET /posts/2 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.5.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 718

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "post" : {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 2,
      "title" : "삼성 B형을 봤는데",
      "content" : "결과가 암울해",
      "likeCount" : 0,
      "commentCount" : 0,
      "scrapCount" : 0,
      "createdAt" : null,
      "anonymity" : true,
      "modified" : false,
      "scraped" : false,
      "liked" : false,
      "mine" : true,
      "images" : [ ],
      "author" : {
        "memberId" : -1,
        "nickname" : "익명",
        "memberRole" : null,
        "ssafyMember" : null,
        "isMajor" : null,
        "ssafyInfo" : null
      }
    }
  }
}
Cookie Description

accessToken

액세스 토큰 옵션(쿠키 유무에 따라 다른 응답을 반환합니다.)

2.5.4. Path parameters

Table 1. /posts/{postId}
Parameter Description

postId

조회할 게시글의 고유 ID

2.5.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.post

Object

게시글 정보

data.post.boardId

Number

게시글이 작성된 게시판 종류의 ID

data.post.boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.post.postId

Number

게시글의 고유 ID

data.post.title

String

게시글의 제목, 길이제한 2 ~ 100

data.post.content

String

게시글의 내용, 최소길이 2

data.post.likeCount

Number

게시글의 좋아요 개수

data.post.commentCount

Number

게시글의 댓글 개수

data.post.scrapCount

Number

게시글의 스크랩 개수

data.post.createdAt

String

게시글의 작성일

data.post.anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.post.modified

Boolean

게시글이 수정되었는지 여부를 나타내는 필드

data.post.scraped

Boolean

로그인한 사용자라면 자신이 해당 게시글을 스크랩 했는지 여부를 나타내는 필드

data.post.liked

Boolean

로그인한 사용자라면 자신이 해당 게시글을 좋아요 했는지 여부를 나타내는 필드

data.post.mine

Boolean

로그인한 사용자라면 이 게시글이 자신이 작성한 게시글인지 여부를 나타내는 필드

data.post.images

Array

게시글의 이미지 정보

data.post.author

Object

게시글 작성자의 정보

data.post.images[].imageUrl

String

게시글의 이미지 URL, S3에 저장된 CDN 주소.

data.post.author.memberId

Number

게시글 작성자의 PK

data.post.author.nickname

String

게시글 작성자의 닉네임

data.post.author.memberRole

String

게시글 작성자의 사용자 권한

data.post.author.ssafyMember

Boolean

게시글 작성자가 SSAFY 유저인지 나타내는 필드 값

data.post.author.isMajor

Boolean

게시글 작성자가 전공자인지 여부, true면 전공자, false면 비전공자

data.post.author.ssafyInfo

Object

게시글 작성자가 선택한 SSAFY 정보 단, SSAFY 인증을 받지 않아도, 해당 필드는 존재하지만 익명이면 null값이 들어감.

data.post.author.ssafyInfo.semester

Number

작성자의 SSAFY 기수를 의미

data.post.author.ssafyInfo.campus

String

작성자의 SSAFY 캠퍼스를 의미

data.post.author.ssafyInfo.certificationState

String

작성자의 SSAFY 인증 여부를 의미함, CERTIFIED | UNCERTIFIED

data.post.author.ssafyInfo.majorTrack

String

작성자의 전공트랙 정보를 의미, Java | Python | Mobile | Embedded

2.6. 전체 게시글 검색(Offset)

2.6.1. HTTP request

GET /posts/all/search/offset?keyword=%EC%8B%B8%ED%94%BC&page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.6.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 968

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "취업 게시판",
      "postId" : 7,
      "title" : "싸피는 뭐지",
      "content" : "싸피는 취업 꿈나무를 위한 공간",
      "likeCount" : 3,
      "commentCount" : 2,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 4,
      "title" : "싸피 어떤가요??",
      "content" : "저도 싸피에서 교육들으면 개발실력 엄청 오르겠죠?",
      "likeCount" : 11,
      "commentCount" : 29,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.6.4. Request parameters

Parameter Description

keyword

검색하려는 게시글의 검색어, 최소 2글자

page

page값은 불러올 현재 페이지의 값을 의미함, 초기 page는 1(또는 첫 페이지는 1)

size

현재 페이지의 게시글 개수를 의미함, 최소 size는 10

2.6.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.7. 게시글 검색(Cursor)

2.7.1. HTTP request

GET /posts/search/cursor?boardId=1&keyword=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94&cursor=-1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.7.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 511

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "취업 게시판",
      "postId" : 6,
      "title" : "안녕하세요 반갑습니다.",
      "content" : "SSAFY 9기 합격했습니다!!",
      "likeCount" : 3,
      "commentCount" : 2,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "cursor" : null
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.7.4. Request parameters

Parameter Description

boardId

검색하려는 게시판 고유 ID

keyword

검색하려는 게시글의 검색어, 최소 2글자

cursor

cursor값은 다음 페이지를 가져올 마지막 페이지 번호를 의미함, 초기 cursor는 -1, 이후 cursor값은 응답 데이터로 제공되는 cursor값을 사용.

size

cursor를 기준으로 다음에 불러올 페이지의 size를 의미, 최소 size는 10

2.7.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.cursor

Number

다음에 요청할 cursor값, 응답되는 cursor값이 null이면 다음 페이지는 없음을 의미

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.8. 게시글 검색(Offset)

2.8.1. HTTP request

GET /posts/search/offset?boardId=1&keyword=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94&page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.8.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 540

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "취업 게시판",
      "postId" : 6,
      "title" : "안녕하세요 반갑습니다.",
      "content" : "SSAFY 9기 합격했습니다!!",
      "likeCount" : 3,
      "commentCount" : 2,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.8.4. Request parameters

Parameter Description

boardId

검색하려는 게시판 고유 ID

keyword

검색하려는 게시글의 검색어, 최소 2글자

page

page값은 불러올 현재 페이지의 값을 의미함, 초기 page는 1(또는 첫 페이지는 1)

size

현재 페이지의 게시글 개수를 의미함, 최소 size는 10

2.8.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.9. 게시글 작성

2.9.1. HTTP request

POST /posts?boardId=1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 170
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "title" : "안녕하세요 첫 글이네요",
  "content" : "싸피도 드디어 익명 커뮤니티가 생기다니..",
  "anonymity" : true,
  "images" : [ ]
}

2.9.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 86

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "postId" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.9.4. Request parameters

Parameter Description

boardId

게시글을 작성할 게시판의 고유 ID

2.9.5. Request fields

Path Type Description

title

String

게시글 제목

content

String

게시글 내용

anonymity

Boolean

게시글 작성자의 익명 여부를 나타내는 필드

images

Array

게시글 사진 목록

images[].imagePath

String

s3에 저장된 경로를 의미하는 필드, s3에 저장된 데이터를 삭제할 때 사용

images[].imageUrl

String

s3에 저장된 이미지를 CDN URL 주소로 가져오기 위한 필드, 해당 URL에 접근만 해도 이미지에 접근할 수 있는 경로를 의미

2.9.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.postId

Number

작성한 게시글 ID

2.10. 게시글 수정

2.10.1. HTTP request

PATCH /posts/1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 150
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "title" : "수정한 게시글의 제목",
  "content" : "수정한 게시글의 내용입니다.",
  "anonymity" : false,
  "images" : [ ]
}

2.10.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 86

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "postId" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.10.4. Path parameters

Table 1. /posts/{postId}
Parameter Description

postId

수정할 게시글의 고유 ID

2.10.5. Request fields

Path Type Description

title

String

게시글 제목

content

String

게시글 내용

anonymity

Boolean

게시글 작성자의 익명 여부를 나타내는 필드

images

Array

게시글 사진 목록

images[].imagePath

String

s3에 저장된 경로를 의미하는 필드, s3에 저장된 데이터를 삭제할 때 사용

images[].imageUrl

String

s3에 저장된 이미지를 CDN URL 주소로 가져오기 위한 필드, 해당 URL에 접근만 해도 이미지에 접근할 수 있는 경로를 의미

2.10.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.postId

Number

수정한 게시글 ID

2.11. 게시글 삭제

2.11.1. HTTP request

DELETE /posts/1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.11.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 86

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "postId" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.11.4. Path parameters

Table 1. /posts/{postId}
Parameter Description

postId

삭제할 게시글의 고유 ID

2.11.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.postId

Number

삭제한 게시글 ID

2.12. 게시글 좋아요

2.12.1. HTTP request

POST /posts/1/like HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.12.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 111

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "likeCount" : 10,
    "liked" : true
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.12.4. Path parameters

Table 1. /posts/{postId}/like
Parameter Description

postId

좋아요를 누를 게시글 고유 ID

2.12.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.likeCount

Number

좋아요를 클릭 한 후 현재 게시글의 좋아요 개수

data.liked

Boolean

해당 게시글의 좋아요를 눌렀는지 여부, true면 좋아요 등록, false면 좋아요 취소

2.13. 게시글 스크랩

2.13.1. HTTP request

POST /posts/1/scrap HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.13.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 114

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "scrapCount" : 9,
    "scraped" : false
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.13.4. Path parameters

Table 1. /posts/{postId}/scrap
Parameter Description

postId

스크랩을 누를 게시글 고유 ID

2.13.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.scrapCount

Number

스크랩을 클릭 한 후 현재 게시글의 스크랩 개수

data.scraped

Boolean

해당 게시글의 스크랩을 눌렀는지 여부, true면 스크랩 등록, false면 스크랩 취소

2.14. Hot 게시글 목록 조회(Cursor)

2.14.1. HTTP request

GET /posts/hot/cursor?cursor=-1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.14.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 942

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 7,
      "title" : "Hot 게시글에 가는 방법",
      "content" : "은 실력입니다.",
      "likeCount" : 202,
      "commentCount" : 54,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "익명",
      "anonymity" : true,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 2,
      "boardTitle" : "취업 게시판",
      "postId" : 7,
      "title" : "취업을 하기 위한 꿀팁",
      "content" : "열심히 SSAFY 9기를 수료하시면 취업에 성공하실겁니다.",
      "likeCount" : 102,
      "commentCount" : 33,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "cursor" : null
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.14.4. Request parameters

Parameter Description

cursor

cursor값은 다음 페이지를 가져올 마지막 페이지 번호를 의미함, 초기 cursor는 -1, 이후 cursor값은 응답 데이터로 제공되는 cursor값을 사용.

size

cursor를 기준으로 다음에 불러올 페이지의 size를 의미, 최소 size는 10

2.14.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.cursor

Number

다음에 요청할 cursor값, 응답되는 cursor값이 null이면 다음 페이지는 없음을 의미

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.15. Hot 게시글 목록 조회(Offset)

2.15.1. HTTP request

GET /posts/hot/offset?page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.15.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 971

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 7,
      "title" : "Hot 게시글에 가는 방법",
      "content" : "은 실력입니다.",
      "likeCount" : 202,
      "commentCount" : 54,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "익명",
      "anonymity" : true,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 2,
      "boardTitle" : "취업 게시판",
      "postId" : 7,
      "title" : "취업을 하기 위한 꿀팁",
      "content" : "열심히 SSAFY 9기를 수료하시면 취업에 성공하실겁니다.",
      "likeCount" : 102,
      "commentCount" : 33,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.15.4. Request parameters

Parameter Description

page

page값은 불러올 현재 페이지의 값을 의미함, 초기 page는 1(또는 첫 페이지는 1)

size

현재 페이지의 게시글 개수를 의미함, 최소 size는 10

2.15.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.16. Hot 게시글 검색(Cursor)

2.16.1. HTTP request

GET /posts/hot/search/cursor?keyword=%EC%B7%A8%EC%97%85&cursor=-1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.16.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 553

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 2,
      "boardTitle" : "취업 게시판",
      "postId" : 7,
      "title" : "취업을 하기 위한 꿀팁",
      "content" : "열심히 SSAFY 9기를 수료하시면 취업에 성공하실겁니다.",
      "likeCount" : 102,
      "commentCount" : 33,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "cursor" : null
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.16.4. Request parameters

Parameter Description

keyword

검색하려는 게시글의 검색어, 최소 2글자

cursor

cursor값은 다음 페이지를 가져올 마지막 페이지 번호를 의미함, 초기 cursor는 -1, 이후 cursor값은 응답 데이터로 제공되는 cursor값을 사용.

size

cursor를 기준으로 다음에 불러올 페이지의 size를 의미, 최소 size는 10

2.16.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.cursor

Number

다음에 요청할 cursor값, 응답되는 cursor값이 null이면 다음 페이지는 없음을 의미

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.17. Hot 게시글 검색(Offset)

2.17.1. HTTP request

GET /posts/hot/search/offset?keyword=%EC%B7%A8%EC%97%85&page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.17.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 582

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 2,
      "boardTitle" : "취업 게시판",
      "postId" : 7,
      "title" : "취업을 하기 위한 꿀팁",
      "content" : "열심히 SSAFY 9기를 수료하시면 취업에 성공하실겁니다.",
      "likeCount" : 102,
      "commentCount" : 33,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 불필요

2.17.4. Request parameters

Parameter Description

keyword

검색하려는 게시글의 검색어, 최소 2글자

page

page값은 불러올 현재 페이지의 값을 의미함, 초기 page는 1(또는 첫 페이지는 1)

size

현재 페이지의 게시글 개수를 의미함, 최소 size는 10

2.17.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.18. 나의 게시글 목록 조회(Cursor)

2.18.1. HTTP request

GET /posts/my/cursor?cursor=-1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.18.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 956

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 2,
      "boardTitle" : "취업 게시판",
      "postId" : 7,
      "title" : "취업을 하기 위한 꿀팁",
      "content" : "열심히 SSAFY 9기를 수료하시면 취업에 성공하실겁니다.",
      "likeCount" : 102,
      "commentCount" : 33,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 6,
      "title" : "안녕하세요 반갑습니다.",
      "content" : "SSAFY 9기 합격했습니다!!",
      "likeCount" : 3,
      "commentCount" : 2,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "cursor" : null
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.18.4. Request parameters

Parameter Description

cursor

cursor값은 다음 페이지를 가져올 마지막 페이지 번호를 의미함, 초기 cursor는 -1, 이후 cursor값은 응답 데이터로 제공되는 cursor값을 사용.

size

cursor를 기준으로 다음에 불러올 페이지의 size를 의미, 최소 size는 10

2.18.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.cursor

Number

다음에 요청할 cursor값, 응답되는 cursor값이 null이면 다음 페이지는 없음을 의미

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.19. 나의 게시글 목록 조회(Offset)

2.19.1. HTTP request

GET /posts/my/offset?page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.19.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 985

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 2,
      "boardTitle" : "취업 게시판",
      "postId" : 7,
      "title" : "취업을 하기 위한 꿀팁",
      "content" : "열심히 SSAFY 9기를 수료하시면 취업에 성공하실겁니다.",
      "likeCount" : 102,
      "commentCount" : 33,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 6,
      "title" : "안녕하세요 반갑습니다.",
      "content" : "SSAFY 9기 합격했습니다!!",
      "likeCount" : 3,
      "commentCount" : 2,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.19.4. Request parameters

Parameter Description

page

page값은 불러올 현재 페이지의 값을 의미함, 초기 page는 1(또는 첫 페이지는 1)

size

현재 페이지의 게시글 개수를 의미함, 최소 size는 10

2.19.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.20. 나의 스크랩 게시글 목록 조회(Cursor)

2.20.1. HTTP request

GET /posts/my-scrap/cursor?cursor=-1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.20.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 987

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 5,
      "title" : "삼성 B형 시험을 준비하려면 뭘 해야할까요?",
      "content" : "역시 B형 특강을 열심히 듣는게 맞나요?",
      "likeCount" : 5,
      "commentCount" : 14,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "익명",
      "anonymity" : true,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 4,
      "title" : "싸피 어떤가요??",
      "content" : "저도 싸피에서 교육들으면 개발실력 엄청 오르겠죠?",
      "likeCount" : 11,
      "commentCount" : 29,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "cursor" : null
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.20.4. Request parameters

Parameter Description

cursor

cursor값은 다음 페이지를 가져올 마지막 페이지 번호를 의미함, 초기 cursor는 -1, 이후 cursor값은 응답 데이터로 제공되는 cursor값을 사용.

size

cursor를 기준으로 다음에 불러올 페이지의 size를 의미, 최소 size는 10

2.20.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.cursor

Number

다음에 요청할 cursor값, 응답되는 cursor값이 null이면 다음 페이지는 없음을 의미

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

2.21. 나의 스크랩 게시글 목록 조회(Offset)

2.21.1. HTTP request

GET /posts/my-scrap/offset?page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

2.21.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 1016

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "posts" : [ {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 5,
      "title" : "삼성 B형 시험을 준비하려면 뭘 해야할까요?",
      "content" : "역시 B형 특강을 열심히 듣는게 맞나요?",
      "likeCount" : 5,
      "commentCount" : 14,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "익명",
      "anonymity" : true,
      "thumbnail" : "썸네일 URL"
    }, {
      "boardId" : 1,
      "boardTitle" : "자유 게시판",
      "postId" : 4,
      "title" : "싸피 어떤가요??",
      "content" : "저도 싸피에서 교육들으면 개발실력 엄청 오르겠죠?",
      "likeCount" : 11,
      "commentCount" : 29,
      "createdAt" : "2023-12-30T20:26:12.5638994",
      "nickname" : "이용준",
      "anonymity" : false,
      "thumbnail" : "썸네일 URL"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

2.21.4. Request parameters

Parameter Description

page

page값은 불러올 현재 페이지의 값을 의미함, 초기 page는 1(또는 첫 페이지는 1)

size

현재 페이지의 게시글 개수를 의미함, 최소 size는 10

2.21.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.posts

Array

게시글 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.posts[].boardId

Number

게시글이 작성된 게시판 종류의 ID

data.posts[].boardTitle

String

게시글이 작성된 게시판의 종류, 자유 게시판 | 취업 게시판 | 맛집 게시판 | 질문 게시판 | 싸피 예비생 게시판

data.posts[].postId

Number

게시글의 고유 ID

data.posts[].title

String

게시글의 제목

data.posts[].content

String

게시글의 내용

data.posts[].likeCount

Number

게시글의 좋아요 개수

data.posts[].commentCount

Number

게시글의 댓글 개수

data.posts[].createdAt

String

게시글의 작성일

data.posts[].nickname

String

게시글 작성자의 닉네임

data.posts[].anonymity

Boolean

게시글 작성자의 익명 여부인지 나타내는 필드

data.posts[].thumbnail

String

게시판의 썸네일, 게시글의 사진이 여러개가 있을 때 첫 번째 사진이 해당 게시글의 썸네일이 됨.

3. 댓글

3.1. 댓글 목록 조회

3.1.1. HTTP request

GET /comments?postId=1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

3.1.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 1283

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "comments" : [ {
      "commentId" : 1,
      "content" : "반가워요",
      "likeCount" : 3,
      "createdAt" : "2023-12-30T20:26:12.5428976",
      "anonymity" : true,
      "modified" : false,
      "liked" : true,
      "mine" : false,
      "deletedComment" : false,
      "author" : {
        "memberId" : 2,
        "nickname" : "박싸피",
        "memberRole" : "user",
        "ssafyMember" : false,
        "isMajor" : false,
        "ssafyInfo" : null
      },
      "replies" : [ {
        "commentId" : 1,
        "content" : "안녕하세요",
        "likeCount" : 10,
        "createdAt" : "2023-12-30T20:26:12.5378984",
        "anonymity" : false,
        "modified" : false,
        "liked" : false,
        "mine" : false,
        "deletedComment" : false,
        "author" : {
          "memberId" : 1,
          "nickname" : "김싸피",
          "memberRole" : "user",
          "ssafyMember" : true,
          "isMajor" : true,
          "ssafyInfo" : {
            "semester" : 9,
            "campus" : "서울",
            "certificationState" : "CERTIFIED",
            "majorTrack" : "Java"
          }
        }
      } ]
    } ]
  }
}
Cookie Description

accessToken

액세스 토큰 옵션(쿠키 유무에 따라 다른 응답을 반환합니다.)

3.1.4. Request parameters

Parameter Description

postId

댓글을 작성하려는 게시글의 고유 ID

3.1.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.comments

Array

댓글 목록(대댓글 포함)

data.comments[].commentId

Number

댓글의 고유 ID

data.comments[].content

String

댓글의 내용

data.comments[].likeCount

Number

댓글에 달린 좋아요 개수

data.comments[].createdAt

String

댓글 작성일

data.comments[].anonymity

Boolean

댓글의 작성자가 익명인지 여부

data.comments[].modified

Boolean

댓글이 수정되었는지 여부

data.comments[].liked

Boolean

로그인한 사용자일 때 이 댓글이 내가 좋아요를 누른 댓글인지 여부

data.comments[].mine

Boolean

로그인한 사용자일 때 이 댓글이 내가 작성한 댓글인지 여부

data.comments[].deletedComment

Boolean

삭제된 댓글인지 여부(삭제된 댓글이어도 대댓글의 내용은 출력되어야 하기 때문)

data.comments[].author

Object

댓글 작성자의 정보

data.comments[].replies

Array

댓글의 대댓글(대댓글의 최대 Depth는 1)

data.comments[].author.memberId

Number

댓글 작성자의 고유 ID(단, 익명이면 -1)

data.comments[].author.nickname

String

댓글 작성자의 닉네임

data.comments[].author.memberRole

String

댓글 작성자의 사용자 권한

data.comments[].author.ssafyMember

Boolean

댓글 작성자가 SSAFY 유저인지 나타내는 필드 값

data.comments[].author.isMajor

Boolean

댓글 작성자가 전공자인지 여부, true면 전공자, false면 비전공자

data.comments[].author.ssafyInfo

Object

댓글 작성자가 선택한 SSAFY 정보 단, SSAFY 인증을 받지 않아도, 해당 필드는 존재하지만 익명이면 null값이 들어감.

data.comments[].author.ssafyInfo.semester

Number

작성자의 SSAFY 기수를 의미

data.comments[].author.ssafyInfo.campus

String

작성자의 SSAFY 캠퍼스를 의미

data.comments[].author.ssafyInfo.certificationState

String

작성자의 SSAFY 인증 여부를 의미함, CERTIFIED | UNCERTIFIED

data.comments[].author.ssafyInfo.majorTrack

String

작성자의 전공트랙 정보를 의미, Java | Python | Mobile | Embedded

data.comments[].replies[].commentId

Number

대댓글의 고유 ID

data.comments[].replies[].content

String

대댓글의 내용

data.comments[].replies[].likeCount

Number

대댓글에 달린 좋아요 개수

data.comments[].replies[].createdAt

String

대댓글의 작성일

data.comments[].replies[].anonymity

Boolean

대댓글의 작성자가 익명인지 여부

data.comments[].replies[].modified

Boolean

대댓글이 수정되었는지 여부

data.comments[].replies[].liked

Boolean

로그인한 사용자일 때 이 대댓글이 내가 좋아요를 누른 대댓글인지 여부

data.comments[].replies[].mine

Boolean

로그인한 사용자일 때 이 대댓글이 내가 작성한 대댓글인지 여부

data.comments[].replies[].deletedComment

Boolean

삭제된 대댓글인지 여부

data.comments[].replies[].author

Object

대댓글 작성자의 정보

data.comments[].replies[].author.memberId

Number

대댓글 작성자의 고유 ID(단, 익명이면 -1)

data.comments[].replies[].author.nickname

String

대댓글 작성자의 닉네임

data.comments[].replies[].author.memberRole

String

대댓글 작성자의 사용자 권한

data.comments[].replies[].author.ssafyMember

Boolean

대댓글 작성자가 SSAFY 유저인지 나타내는 필드 값

data.comments[].replies[].author.isMajor

Boolean

대댓글 작성자가 전공자인지 여부, true면 전공자, false면 비전공자

data.comments[].replies[].author.ssafyInfo

Object

대댓글 작성자가 선택한 SSAFY 정보 단, SSAFY 인증을 받지 않아도, 해당 필드는 존재하지만 익명이면 null값이 들어감.

data.comments[].replies[].author.ssafyInfo.semester

Number

작성자의 SSAFY 기수를 의미

data.comments[].replies[].author.ssafyInfo.campus

String

작성자의 SSAFY 캠퍼스를 의미

data.comments[].replies[].author.ssafyInfo.certificationState

String

작성자의 SSAFY 인증 여부를 의미함, CERTIFIED | UNCERTIFIED

data.comments[].replies[].author.ssafyInfo.majorTrack

String

작성자의 전공트랙 정보를 의미, Java | Python | Mobile | Embedded

3.2. 댓글 쓰기

3.2.1. HTTP request

POST /comments?postId=1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 70
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "content" : "댓글 내용 입니다.",
  "anonymity" : false
}

3.2.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 89

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "commentId" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

3.2.4. Request parameters

Parameter Description

postId

댓글을 작성할 게시글의 고유 ID

3.2.5. Request fields

Path Type Description

content

String

댓글 내용

anonymity

Boolean

댓글 작성자의 익명 여부를 나타내는 필드

3.2.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.commentId

Number

작성한 댓글 ID

3.3. 대댓글 쓰기

3.3.1. HTTP request

POST /comments/reply?commentId=1&postId=1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 72
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "content" : "대댓글 내용 입니다.",
  "anonymity" : true
}

3.3.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 89

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "commentId" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

3.3.4. Request parameters

Parameter Description

commentId

대댓글을 작성할 댓글의 고유 ID

postId

대댓글을 작성할 게시글의 고유 ID

3.3.5. Request fields

Path Type Description

content

String

댓글 내용

anonymity

Boolean

댓글 작성자의 익명 여부를 나타내는 필드

3.3.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.commentId

Number

작성한 대댓글 ID

3.4. 댓글 수정

3.4.1. HTTP request

PATCH /comments/1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 79
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "content" : "수정된 댓글 내용 입니다.",
  "anonymity" : true
}

3.4.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 89

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "commentId" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

3.4.4. Path parameters

Table 1. /comments/{commentId}
Parameter Description

commentId

수정할 댓글의 고유 ID

3.4.5. Request fields

Path Type Description

content

String

댓글 내용

anonymity

Boolean

댓글 작성자의 익명 여부를 나타내는 필드

3.4.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.commentId

Number

수정한 댓글 ID

3.5. 댓글 삭제

3.5.1. HTTP request

DELETE /comments/1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

3.5.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 89

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "commentId" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

3.5.4. Path parameters

Table 1. /comments/{commentId}
Parameter Description

commentId

삭제할 댓글의 고유 ID

3.5.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.commentId

Number

삭제한 댓글 ID

3.6. 댓글 좋아요

3.6.1. HTTP request

POST /comments/1/like HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

3.6.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 111

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "likeCount" : 12,
    "liked" : true
  }
}
Cookie Description

accessToken

액세스 토큰 필수

3.6.4. Path parameters

Table 1. /comments/{commentId}/like
Parameter Description

commentId

좋아요할 댓글의 고유 ID

3.6.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.likeCount

Number

좋아요를 누른 시점의 댓글 좋아요 개수

data.liked

Boolean

내가 좋아요를 눌렀을 때 현재 좋아요 상태(좋아요 등록, 좋아요 취소)

4. 메타데이터

4.1. 캠퍼스 목록 조회

4.1.1. HTTP request

GET /meta/campuses HTTP/1.1
Host: api.ssafsound.com

4.1.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 352

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "campuses" : [ {
      "id" : 1,
      "name" : "서울"
    }, {
      "id" : 2,
      "name" : "대전"
    }, {
      "id" : 3,
      "name" : "광주"
    }, {
      "id" : 4,
      "name" : "구미"
    }, {
      "id" : 5,
      "name" : "부울경"
    } ]
  }
}

4.1.3. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.campuses[].id

Number

캠퍼스 id (미사용)

data.campuses[].name

String

캠퍼스 이름

4.2. 스킬 목록 조회

4.2.1. HTTP request

GET /meta/skills HTTP/1.1
Host: api.ssafsound.com

4.2.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 1027

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "skills" : [ {
      "id" : 1,
      "name" : "Spring"
    }, {
      "id" : 2,
      "name" : "React"
    }, {
      "id" : 3,
      "name" : "IOS"
    }, {
      "id" : 4,
      "name" : "Vue"
    }, {
      "id" : 5,
      "name" : "Java"
    }, {
      "id" : 6,
      "name" : "JavaScript"
    }, {
      "id" : 7,
      "name" : "TypeScript"
    }, {
      "id" : 8,
      "name" : "Nodejs"
    }, {
      "id" : 9,
      "name" : "Nextjs"
    }, {
      "id" : 10,
      "name" : "Nuxtjs"
    }, {
      "id" : 11,
      "name" : "XD"
    }, {
      "id" : 12,
      "name" : "Swift"
    }, {
      "id" : 13,
      "name" : "Figma"
    }, {
      "id" : 14,
      "name" : "Svelte"
    }, {
      "id" : 15,
      "name" : "Android"
    }, {
      "id" : 16,
      "name" : "Flutter"
    }, {
      "id" : 17,
      "name" : "Django"
    }, {
      "id" : 18,
      "name" : "기타"
    } ]
  }
}

4.2.3. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.skills[].id

Number

스킬 id (미사용)

data.skills[].name

String

스킬 이름

4.3. 리크루트 목록 조회

4.3.1. HTTP request

GET /meta/recruit-types HTTP/1.1
Host: api.ssafsound.com

4.3.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 375

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitTypes" : [ {
      "id" : 0,
      "name" : "스터디"
    }, {
      "id" : 1,
      "name" : "기획/디자인"
    }, {
      "id" : 2,
      "name" : "프론트엔드"
    }, {
      "id" : 3,
      "name" : "백엔드"
    }, {
      "id" : 4,
      "name" : "앱"
    } ]
  }
}

4.3.3. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitTypes[].id

Number

리크루트 모집타입 id (미사용)

data.recruitTypes[].name

String

리크루트 모집타입 이름

5. 인증

5.1. Oauth 로그인 페이지 리다이렉트

5.1.1. Path parameters

Table 1. /auth/{oauthName}
Parameter Description

oauthName

google, kakao, github, apple 중 하나를 입력하세요

5.1.2. HTTP request

GET /auth/kakao HTTP/1.1
Host: api.ssafsound.com

5.1.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers

5.2. 로그인

5.2.1. HTTP request

POST /auth/callback HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 65
Host: api.ssafsound.com

{
  "code" : "82309899c459f9aebeea",
  "oauthName" : "kakao"
}

5.2.2. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.accessToken

String

액세스 토큰

data.refreshToken

String

리프레시 토큰

5.2.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c; Path=/; Domain=ssafsound.com; Max-Age=2629744; Expires=Mon, 29 Jan 2024 21:55:15 GMT; Secure; HttpOnly
Set-Cookie: refreshToken=syJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IsdfserwetweSflKxwRJeSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c; Path=/auth/reissue; Domain=ssafsound.com; Max-Age=2629744; Expires=Mon, 29 Jan 2024 21:55:15 GMT; Secure; HttpOnly
Content-Type: application/json
Content-Length: 422

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "accessToken" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
    "refreshToken" : "syJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IsdfserwetweSflKxwRJeSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
  }
}

5.3. 로그아웃시(accessToken 또는 refreshToken이 존재하는 경우)

5.3.1. HTTP request

DELETE /auth/logout HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie: refreshToken=refreshTokenValue

5.3.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=; Path=/; Domain=ssafsound.com; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Set-Cookie: refreshToken=; Path=/; Domain=ssafsound.com; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

5.3.3. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

5.4. 로그아웃시(토큰 존재하지 않을 경우)

5.4.1. HTTP request

DELETE /auth/logout HTTP/1.1
Host: api.ssafsound.com

5.4.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=; Path=/; Domain=ssafsound.com; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Set-Cookie: refreshToken=; Path=/; Domain=ssafsound.com; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

5.4.3. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

5.5. 토큰 재발급

5.5.1. HTTP request

POST /auth/reissue HTTP/1.1
Host: api.ssafsound.com
Cookie: refreshToken=refreshTokenValue

5.5.2. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.accessToken

String

액세스 토큰

5.5.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Content-Type: application/json
Content-Length: 247

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "accessToken" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
  }
}

6. 멤버

6.1. 소셜 로그인 후 멤버를 조회 했을때, 나갈 수 있기 때문에 ssafyMember가 null 이라면 회원가입을 진행해야 합니다.

Cookie Description

accessToken

액세스 토큰 필수

6.1.2. HTTP request

GET /members HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

6.1.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 215

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "memberId" : 1,
    "memberRole" : "user",
    "nickname" : null,
    "ssafyMember" : null,
    "isMajor" : null,
    "ssafyInfo" : null
  }
}

6.1.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.memberId

Number

멤버 ID

data.memberRole

String

멤버 권한

data.nickname

Null

닉네임

data.ssafyMember

Null

싸피인 여부

data.isMajor

Null

전공자 여부

data.ssafyInfo

Null

싸피인 정보

6.2. 일반 멤버 정보 조회

Cookie Description

accessToken

액세스 토큰 필수

6.2.2. HTTP request

GET /members HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

6.2.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 219

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "memberId" : 1,
    "memberRole" : "user",
    "nickname" : "james",
    "ssafyMember" : false,
    "isMajor" : true,
    "ssafyInfo" : null
  }
}

6.2.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.memberId

Number

멤버 ID

data.memberRole

String

멤버 권한

data.nickname

String

닉네임

data.ssafyMember

Boolean

싸피인 여부

data.isMajor

Boolean

전공자 여부

data.ssafyInfo

Null

싸피인 정보 NULL

6.3. 회원 탈퇴

Cookie Description

accessToken

액세스 토큰 필수

6.3.2. HTTP request

DELETE /members HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

6.3.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=; Path=/; Domain=ssafsound.com; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Set-Cookie: refreshToken=; Path=/; Domain=ssafsound.com; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

6.3.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

6.4. 싸피생 멤버 정보 조회

Cookie Description

accessToken

액세스 토큰 필수

6.4.2. HTTP request

GET /members HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

6.4.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 345

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "memberId" : 1,
    "memberRole" : "user",
    "nickname" : "james",
    "ssafyMember" : true,
    "isMajor" : true,
    "ssafyInfo" : {
      "semester" : 9,
      "campus" : "서울",
      "certificationState" : "CERTIFIED",
      "majorTrack" : "Java"
    }
  }
}

6.4.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.memberId

Number

멤버 ID

data.memberRole

String

멤버 권한

data.nickname

String

닉네임

data.ssafyMember

Boolean

싸피인 여부

data.isMajor

Boolean

전공자 여부

data.ssafyInfo

Object

싸피인 정보

data.ssafyInfo.semester

Number

싸피 기수 정보

data.ssafyInfo.campus

String

캠퍼스 이름

data.ssafyInfo.certificationState

String

싸피생 인증상태(CERTIFIED/UNCERTIFIED)

data.ssafyInfo.majorTrack

String

전공 트랙(인증상태가 UNCERTIFIED라면 NULL)

6.5. 회원가입 시 일반 멤버 정보 입력

Cookie Description

accessToken

액세스 토큰 필수

6.5.2. HTTP request

PUT /members HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 145
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "nickname" : "james",
  "ssafyMember" : false,
  "isMajor" : true,
  "semester" : null,
  "campus" : null,
  "termIds" : [ 1, 2, 3 ]
}

6.5.3. Request body

{
  "nickname" : "james",
  "ssafyMember" : false,
  "isMajor" : true,
  "semester" : null,
  "campus" : null,
  "termIds" : [ 1, 2, 3 ]
}

6.5.4. Request fields

Path Type Description

nickname

String

닉네임

ssafyMember

Boolean

싸피인 여부

isMajor

Boolean

전공자 여부

semester

Null

싸피 기수

campus

Null

캠퍼스 이름

termIds

Array

필수 약관 동의 아이디 값

6.5.5. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 219

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "memberId" : 1,
    "memberRole" : "user",
    "nickname" : "james",
    "ssafyMember" : false,
    "isMajor" : true,
    "ssafyInfo" : null
  }
}

6.5.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.memberId

Number

멤버 ID

data.memberRole

String

멤버 권한

data.nickname

String

닉네임

data.ssafyMember

Boolean

싸피인 여부

data.isMajor

Boolean

전공자 여부

data.ssafyInfo

Object

싸피인 정보

data.ssafyInfo.semester

Number

싸피 기수 정보

data.ssafyInfo.campus

String

캠퍼스 이름

data.ssafyInfo.certificationState

String

싸피생 인증상태(CERTIFIED/UNCERTIFIED)

data.ssafyInfo.majorTrack

String

전공 트랙(인증상태가 UNCERTIFIED라면 NULL)

6.6. 회원가입 시 싸피 멤버 정보 입력

Cookie Description

accessToken

액세스 토큰 필수

6.6.2. HTTP request

PUT /members HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 137
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "nickname" : "james",
  "ssafyMember" : true,
  "isMajor" : true,
  "semester" : 9,
  "campus" : "서울",
  "termIds" : [ ]
}

6.6.3. Request body

{
  "nickname" : "james",
  "ssafyMember" : true,
  "isMajor" : true,
  "semester" : 9,
  "campus" : "�꽌�슱",
  "termIds" : [ ]
}

6.6.4. Request fields

Path Type Description

nickname

String

닉네임

ssafyMember

Boolean

싸피인 여부

isMajor

Boolean

전공자 여부

semester

Number

싸피 기수

campus

String

캠퍼스 이름

termIds

Array

필수 약관 동의 아이디 값

6.6.5. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 345

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "memberId" : 1,
    "memberRole" : "user",
    "nickname" : "james",
    "ssafyMember" : true,
    "isMajor" : true,
    "ssafyInfo" : {
      "semester" : 9,
      "campus" : "서울",
      "certificationState" : "UNCERTIFIED",
      "majorTrack" : null
    }
  }
}

6.6.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.memberId

Number

멤버 ID

data.memberRole

String

멤버 권한

data.nickname

String

닉네임

data.ssafyMember

Boolean

싸피인 여부

data.isMajor

Boolean

전공자 여부

data.ssafyInfo

Object

싸피인 정보

data.ssafyInfo.semester

Number

싸피 기수 정보

data.ssafyInfo.campus

String

캠퍼스 이름

data.ssafyInfo.certificationState

String

싸피생 인증상태(CERTIFIED/UNCERTIFIED)

data.ssafyInfo.majorTrack

String

전공 트랙(인증상태가 UNCERTIFIED라면 NULL)

6.7. 싸피생 인증

Cookie Description

accessToken

액세스 토큰 필수

6.7.2. HTTP request

POST /members/ssafy-certification HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 71
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "majorTrack" : "Java",
  "semester" : 9,
  "answer" : "great"
}

6.7.3. Request fields

Path Type Description

majorTrack

String

전공트랙

semester

Number

기수

answer

String

기수에 따른 출제 문제에 대한 정답

6.7.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 129

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "possible" : true,
    "certificationInquiryCount" : 3
  }
}

6.7.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.possible

Boolean

인증 상태 여부

data.certificationInquiryCount

Number

인증 시도 횟수

6.8. 나의 포트폴리오 조회

Cookie Description

accessToken

액세스 토큰 필수

6.8.2. HTTP request

GET /members/portfolio HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

6.8.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 395

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "portfolioElement" : {
      "selfIntroduction" : "자기소개 하겠습니다.",
      "skills" : [ "Android", "Java" ],
      "memberLinks" : [ {
        "linkName" : "t-story",
        "path" : "http://test-link2"
      }, {
        "linkName" : "velog",
        "path" : "http://test-link1"
      } ]
    }
  }
}

6.8.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.portfolioElement.selfIntroduction

String

멤버 소개 글

data.portfolioElement.skills

Array

멤버 기술 스택들

data.portfolioElement.memberLinks

Array

멤버 소개 링크들

data.portfolioElement.memberLinks[].linkName

String

멤버의 소개 링크 이름

data.portfolioElement.memberLinks[].path

String

멤버의 소개 링크 경로

6.9. 다른 멤버 포트폴리오 조회

Cookie Description

accessToken

액세스 토큰 불필요

6.9.2. HTTP request

GET /members/99/portfolio HTTP/1.1
Host: api.ssafsound.com

6.9.3. Path parameters

Table 1. /members/{memberId}/portfolio
Parameter Description

memberId

멤버 Id

6.9.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 395

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "portfolioElement" : {
      "selfIntroduction" : "자기소개 하겠습니다.",
      "skills" : [ "Android", "Java" ],
      "memberLinks" : [ {
        "linkName" : "t-story",
        "path" : "http://test-link2"
      }, {
        "linkName" : "velog",
        "path" : "http://test-link1"
      } ]
    }
  }
}

6.9.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.portfolioElement.selfIntroduction

String

멤버 소개 글

data.portfolioElement.skills

Array

멤버 기술 스택들

data.portfolioElement.memberLinks

Array

멤버 소개 링크들

data.portfolioElement.memberLinks[].linkName

String

멤버의 소개 링크 이름

data.portfolioElement.memberLinks[].path

String

멤버의 소개 링크 경로

6.10. 멤버 포트폴리오 수정

Cookie Description

accessToken

액세스 토큰 필수

6.10.2. HTTP request

PUT /members/portfolio HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 268
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "selfIntroduction" : "안녕하세요 자기소개합니다.",
  "skills" : [ "Java", "Spring" ],
  "memberLinks" : [ {
    "linkName" : "velog",
    "path" : "http://test-link1"
  }, {
    "linkName" : "t-story",
    "path" : "http://test-link2"
  } ]
}

6.10.3. Request fields

Path Type Description

selfIntroduction

String

자기소개

skills[]

Array

기술 스택들

memberLinks[]

Array

소개 링크들

memberLinks[].linkName

String

링크 이름

memberLinks[].path

String

링크 경로

6.10.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

6.10.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

6.11. 멤버의 기본 정보 조회

Cookie Description

accessToken

액세스 토큰 불필요

6.11.2. HTTP request

GET /members/99/default-information HTTP/1.1
Host: api.ssafsound.com

6.11.3. Path parameters

Table 1. /members/{memberId}/default-information
Parameter Description

memberId

멤버 Id

6.11.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 294

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "nickname" : "KIM",
    "ssafyMember" : true,
    "isMajor" : true,
    "ssafyInfo" : {
      "semester" : 9,
      "campus" : "서울",
      "certificationState" : "CERTIFIED",
      "majorTrack" : "Java"
    }
  }
}

6.11.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.nickname

String

닉네임

data.ssafyMember

Boolean

싸피인 여부

data.isMajor

Boolean

전공자 여부

data.ssafyInfo

Object

싸피인 정보

data.ssafyInfo.semester

Number

싸피 기수 정보

data.ssafyInfo.campus

String

캠퍼스 이름

data.ssafyInfo.certificationState

String

싸피생 인증상태(CERTIFIED/UNCERTIFIED)

data.ssafyInfo.majorTrack

String

전공 트랙(인증상태가 UNCERTIFIED라면 NULL)

6.12. 멤버의 기본 정보 수정

Cookie Description

accessToken

액세스 토큰 필수

6.12.2. HTTP request

PATCH /members/default-information HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 71
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "ssafyMember" : false,
  "semester" : null,
  "campus" : null
}

6.12.3. Request fields

Path Type Description

ssafyMember

Boolean

싸피인 여부

semester

Null

기수

campus

Null

캠퍼스

6.12.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

6.12.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

6.13. 나의 프로필 공개 여부 조회

Cookie Description

accessToken

액세스 토큰 필수

6.13.2. HTTP request

GET /members/public-profile HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

6.13.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 91

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "isPublic" : true
  }
}

6.13.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.isPublic

Boolean

프로필 공개 여부

6.14. 다른 멤버의 프로필 공개 여부 조회

Cookie Description

accessToken

액세스 토큰 불필요

6.14.2. HTTP request

GET /members/99/public-profile HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

6.14.3. Path parameters

Table 1. /members/{memberId}/public-profile
Parameter Description

memberId

멤버 Id

6.14.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 91

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "isPublic" : true
  }
}

6.14.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.isPublic

Boolean

프로필 공개 여부

6.15. 프로필 공개 여부 수정

Cookie Description

accessToken

액세스 토큰 필수

6.15.2. HTTP request

PATCH /members/public-profile HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 26
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "isPublic" : false
}

6.15.3. Request fields

Path Type Description

isPublic

Boolean

프로필 공개 여부 수정

6.15.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

6.15.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

6.16. 닉네임 중복 검사

Cookie Description

accessToken

액세스 토큰 불필요

6.16.2. HTTP request

POST /members/nickname HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 28
Host: api.ssafsound.com

{
  "nickname" : "james"
}

6.16.3. Request fields

Path Type Description

nickname

String

닉네임

6.16.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 91

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "possible" : true
  }
}

6.16.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.possible

Boolean

닉네임 사용 가능 여부

6.17. 닉네임 변경

Cookie Description

accessToken

액세스 토큰 필수

6.17.2. HTTP request

PATCH /members/nickname HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 28
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "nickname" : "james"
}

6.17.3. Request fields

Path Type Description

nickname

String

닉네임

6.17.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

6.17.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

6.18. 멤버의 전공자 여부 수정

Cookie Description

accessToken

액세스 토큰 필수

6.18.2. HTTP request

PATCH /members/major HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 25
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "isMajor" : false
}

6.18.3. Request fields

Path Type Description

isMajor

Boolean

전공자유무

6.18.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

6.18.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

6.19. 멤버의 전공트랙 수정

Cookie Description

accessToken

액세스 토큰 필수

6.19.2. HTTP request

PATCH /members/major-track HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 33
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "majorTrack" : "Embedded"
}

6.19.3. Request fields

Path Type Description

majorTrack

String

전공트랙("Embedded" , "Python" , "Java" , "Mobile")

6.19.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

6.19.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

7. 약관

7.1. 사용중인 약관 목록 불러오기

Cookie Description

accessToken

액세스 토큰 불필요

7.1.2. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.termElements[]termId

Number

약관 아이디

data.termElements[]termName

String

약관 이름

data.termElements[]content

String

약관 내용

data.termElements[]required

Boolean

필수 여부

data.termElements[]sequence

Number

약관 배치 순서

7.1.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 528

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "termElements" : [ {
      "termId" : 1,
      "termName" : "이용 약관1",
      "content" : "test1",
      "required" : true,
      "sequence" : 1
    }, {
      "termId" : 2,
      "termName" : "이용 약관2",
      "content" : "test2",
      "required" : true,
      "sequence" : 2
    }, {
      "termId" : 3,
      "termName" : "이용 약관3",
      "content" : "test3",
      "required" : true,
      "sequence" : 3
    } ]
  }
}

8. 점심

8.1. 점심 목록 조회

8.1.1. HTTP request

GET /lunch?campus=%EC%84%9C%EC%9A%B8&date=2023-08-12 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 옵션(쿠키 유무에 따라 다른 응답을 반환합니다.)

8.1.3. Request parameters

Parameter Description

date

조회하려는 yyyy-MM-DD 형식 일자. 당일과 익일만 가능합니다.

campus

조회하려는 캠퍼스 한글명. (서울 | 부울경 | 구미 | 광주 )( 대전은 현재 미지원 )

8.1.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 979

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "totalPollCount" : 156,
    "polledAt" : 1,
    "menus" : [ {
      "lunchId" : 1,
      "mainMenu" : "메인메뉴1",
      "extraMenu" : "메뉴1, 메뉴2, 메뉴3",
      "sumKcal" : "1,544 kcal",
      "imagePath" : "http://samsungwelstory.com/data/manager/recipe/E110/20230814/s20230727144547.png",
      "pollCount" : 22
    }, {
      "lunchId" : 2,
      "mainMenu" : "메인메뉴2",
      "extraMenu" : "메뉴1, 메뉴2, 메뉴3",
      "sumKcal" : "1,994 kcal",
      "imagePath" : "http://samsungwelstory.com/data/manager/recipe/E110/20230814/s20230802100210.png",
      "pollCount" : 42
    }, {
      "lunchId" : 3,
      "mainMenu" : "메인메뉴3",
      "extraMenu" : "메뉴1, 메뉴2, 메뉴3",
      "sumKcal" : "2,012 kcal",
      "imagePath" : "http://samsungwelstory.com/data/manager/recipe/E110/20230811/s20220325094317.jpg",
      "pollCount" : 92
    } ]
  }
}

8.1.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.totalPollCount

Number

전체 메뉴의 투표수 합계

data.polledAt

Number

점심 메뉴 목록에서 인증된 사용자의 투표 선택지 인덱스. 미인증 혹은 투표하지 않았을 경우 -1

data.menus

Array

점심 메뉴 목록

data.menus[].lunchId

Number

점심 메뉴 아이디

data.menus[].mainMenu

String

메인 메뉴명

data.menus[].extraMenu

String

전체 메뉴 | 서브 메뉴

data.menus[].sumKcal

String

총 칼로리

data.menus[].imagePath

String

메인 메뉴 이미지 주소

data.menus[].pollCount

Number

메뉴 투표수

8.2. 점심 투표하기

8.2.1. HTTP request

POST /lunch/poll/2 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

8.2.3. Path parameters

Table 1. /lunch/poll/{lunchId}
Parameter Description

lunchId

점심 메뉴 아이디

8.2.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 92

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "pollCount" : 4327
  }
}

8.2.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.pollCount

Number

메뉴 투표수

8.3. 점심 투표 취소하기

8.3.1. HTTP request

POST /lunch/poll/revert/2 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

8.3.3. Path parameters

Table 1. /lunch/poll/revert/{lunchId}
Parameter Description

lunchId

점심 메뉴 아이디

8.3.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 92

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "pollCount" : 4327
  }
}

8.3.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.pollCount

Number

메뉴 투표수

9. 리크루트

9.1. 리크루트 등록

9.1.1. HTTP request

POST /recruits HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 1257
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "category" : "PROJECT",
  "recruitEnd" : "2024-01-06",
  "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
  "content" : "<p>[프로젝트 소개]</p>\n저희 프로젝트는 대학생들의 공모전 경험에 있어 누구나 참고할 레퍼런스를 제공받고, 또 자발적으로 공유할 수 있는 환경을 구축하고자 시작하게 되었습니다! 저희 프로젝트는 아래와 같은 특징을 가지고 있습니다.\n현재 PM 1명, 프론트엔드 개발자 2명, 백엔드 개발자 1명이 있으며, 디자인의 경우 PM이 1차 MVP의 UI/UX를 제작했습니다.\n",
  "contactURI" : "https://open.kakao.com/o/sA8Kb83b",
  "registerRecruitType" : "백엔드",
  "skills" : [ "Spring", "React", "IOS", "Vue", "Java", "JavaScript", "TypeScript", "Nodejs", "Nextjs", "Nuxtjs", "XD", "Swift", "Figma", "Svelte", "Android", "Flutter", "Django", "기타" ],
  "questions" : [ "프로젝트에 참여하고자 하는 동기가 무엇인가요?" ],
  "limitations" : [ {
    "recruitType" : "백엔드",
    "limit" : 3
  }, {
    "recruitType" : "프론트엔드",
    "limit" : 3
  }, {
    "recruitType" : "앱",
    "limit" : 3
  } ]
}

9.1.2. Request fields

Path Type Description

category

String

PROJECT | STUDY

recruitEnd

String

yyyy-MM-dd 모집 종료 일자, 당일 날짜 이후의 값으로만 설정 가능

title

String

리크루트 모집글 제목, 글자 수 제한 50자

content

String

리크루트 본문, 글자 수 제한 3000자, html 포함 4000자

contactURI

String

리크루트 작성자와 연락 가능한 오픈톡 링크

registerRecruitType

String

리크루트 작성자가 선택한 자신의 역할군, 메타데이터-리크루트 목록 조회 참고

skills[]

Array

리크루트와 연관된 기술 스택, 메타데이터-스킬 목록 조회 참고

questions[]

Array

리크루트 참석자에게 할 질문, 1개만 등록 가능

limitations[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

limitations[].limit

Number

인원 제한 1명이상 10명 이하

Cookie Description

accessToken

액세스 토큰 필수

9.1.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 89

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitId" : 1
  }
}

9.1.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitId

Number

생성된 리크루트 ID

9.2. 리크루트 스크랩 토글

9.2.1. HTTP request

POST /recruits/1/scrap HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

9.2.3. Path parameters

Table 1. /recruits/{recruitId}/scrap
Parameter Description

recruitId

리크루트 아이디

9.2.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 113

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "scrapCount" : 1,
    "scraped" : true
  }
}

9.2.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.scrapCount

Number

전체 스크랩 갯수

data.scraped

Boolean

스크랩 여부

9.3. 리크루트 완료

9.3.1. HTTP request

POST /recruits/1/expired HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

9.3.3. Path parameters

Table 1. /recruits/{recruitId}/expired
Parameter Description

recruitId

리크루트 아이디

9.3.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

9.3.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

9.4. 리크루트 상세 조회

9.4.1. HTTP request

GET /recruits/1 HTTP/1.1
Host: api.ssafsound.com
Cookie Description

accessToken

액세스 토큰 옵션(쿠키 유무에 따라 다른 응답을 반환합니다.)

9.4.3. Path parameters

Table 1. /recruits/{recruitId}
Parameter Description

recruitId

리크루트 아이디

9.4.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 1774

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "category" : "PROJECT",
    "recruitId" : 1,
    "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
    "content" : "<p>[프로젝트 소개]</p>\n저희 프로젝트는 대학생들의 공모전 경험에 있어 누구나 참고할 레퍼런스를 제공받고, 또 자발적으로 공유할 수 있는 환경을 구축하고자 시작하게 되었습니다! 저희 프로젝트는 아래와 같은 특징을 가지고 있습니다.\n현재 PM 1명, 프론트엔드 개발자 2명, 백엔드 개발자 1명이 있으며, 디자인의 경우 PM이 1차 MVP의 UI/UX를 제작했습니다.\n",
    "contactURI" : "https://open.kakao.com/o/sA8Kb83b",
    "view" : 1,
    "finishedRecruit" : false,
    "recruitStart" : "2023-12-30",
    "recruitEnd" : "2024-01-06",
    "skills" : [ {
      "skillId" : 1,
      "name" : "Spring"
    }, {
      "skillId" : 2,
      "name" : "React"
    } ],
    "limits" : [ {
      "recruitType" : "백엔드",
      "limit" : 3,
      "currentNumber" : 1
    }, {
      "recruitType" : "프론트엔드",
      "limit" : 3,
      "currentNumber" : 0
    } ],
    "questions" : [ "프로젝트에 참여하고자 하는 동기가 무엇인가요?" ],
    "author" : {
      "memberId" : 99,
      "nickname" : "KIM",
      "memberRole" : "user",
      "ssafyMember" : true,
      "isMajor" : true,
      "ssafyInfo" : {
        "semester" : 9,
        "campus" : "서울",
        "certificationState" : "CERTIFIED",
        "majorTrack" : "Java"
      }
    },
    "scrapCount" : 1,
    "scraped" : true,
    "matchStatus" : "INITIAL",
    "mine" : true
  }
}

9.4.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.category

String

PROJECT | STUDY

data.recruitId

Number

리크루트 id

data.title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.content

String

리크루트 본문, 글자 수 제한 3000자, html 포함 4000자

data.contactURI

String

리크루트 작성자와 연락 가능한 오픈톡 링크

data.view

Number

리크루트 상세 조회 수

data.finishedRecruit

Boolean

리크루트 종료 여부

data.recruitStart

String

yyyy-MM-dd 모집 시작 일자

data.recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.skills[].skillId

Number

스킬 id (미사용)

data.skills[].name

String

스킬명, 메타데이터-스킬 목록 조회 참고

data.limits[].recruitType

String

리크루트 모집 타입, 메타데이터-리크루트 목록 조회 참고

data.limits[].limit

Number

리크루트 모집제한 인원

data.limits[].currentNumber

Number

리크루트 모집인원

data.author.memberId

Number

리크루트 등록자 PK

data.author.nickname

String

리크루트 등록자 닉네임

data.author.isMajor

Boolean

리크루트 등록자 전공자 여부

data.author.ssafyInfo

Object

싸피 정보 여부, null 또는 object

data.author.ssafyInfo.semester

Number

리크루트 등록자 SSAFY 기수 1이상 10이하

data.author.ssafyInfo.campus

String

리크루트 등록자 소속 캠퍼스, 메타데이터-캠퍼스 목록 조회 참고

data.author.ssafyInfo.certificationState

String

리크루트 등록자 SSAFY 인증 여부

data.author.ssafyInfo.majorTrack

String

리크루트 등록자 전공 트랙 Embedded | Mobile | Python | Java

data.author.memberRole

String

사용자 권한

data.author.ssafyMember

Boolean

싸피 멤버 여부

data.questions

Array

리쿠르트 질문

data.scraped

Boolean

조회자 리크루트 스크랩 여부

data.mine

Boolean

내가 작성한 리크루트 여부

data.scrapCount

Number

리쿠르트 스크랩 갯수

data.matchStatus

String

조회 유저 신청 상태

9.5. 리크루트 업데이트

9.5.1. HTTP request

PATCH /recruits/1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 411
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "category" : "PROJECT",
  "registerRecruitType" : "백엔드",
  "recruitEnd" : "2025-12-01",
  "title" : "제목 수정",
  "content" : "<p>컨텐츠 수정입니다. </p>",
  "contactURI" : "github.com",
  "skills" : [ "React", "Spring", "Svelte" ],
  "limitations" : [ {
    "recruitType" : "백엔드",
    "limit" : 5
  }, {
    "recruitType" : "프론트엔드",
    "limit" : 5
  } ]
}
Cookie Description

accessToken

액세스 토큰 필수

9.5.3. Path parameters

Table 1. /recruits/{recruitId}
Parameter Description

recruitId

리크루트 아이디

9.5.4. Request fields

Path Type Description

category

String

리크루트 카테고리 : PROJECT | STUDY

registerRecruitType

String

리크루트 등록자 리크루트 모집 타입, 메타데이터-리크루트 목록 조회 참고

recruitEnd

String

yyyy-MM-dd 모집 종료 일자, 당일 날짜 이후의 값으로만 설정 가능

title

String

리크루트 모집글 제목, 글자 수 제한 50자

content

String

리크루트 본문, 글자 수 제한 3000자, html 포함 4000자

contactURI

String

리크루트 작성자와 연락 가능한 오픈톡 링크

skills[]

Array

리크루트와 연관된 기술 스택, 메타데이터-스킬 목록 조회 참고

limitations[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

limitations[].limit

Number

인원 제한 1명이상 10명 이하

9.5.5. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

9.5.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

9.6. 리크루트 삭제

9.6.1. HTTP request

DELETE /recruits/1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

9.6.3. Path parameters

Table 1. /recruits/{recruitId}
Parameter Description

recruitId

리크루트 아이디

9.6.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

9.6.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

9.7. 리크루트 목록 조회(Cursor)

9.7.1. HTTP request

GET /recruits/cursor?size=20&category=project&keyword=%EC%82%AC%EC%9D%B4%EB%93%9C&isFinished=false&recruitTypes=%EB%B0%B1%EC%97%94%EB%93%9C&recruitTypes=%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C&skills=Spring&skills=React HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

9.7.2. Request parameters

Parameter Description

next

조회할 커서 번호 default(초기화면)에서는 미포함

size

페이징 사이즈

category

카테고리 project|study

keyword

리크루트 게시글 제목 검색 키워드

isFinished

리크루트 종료 여부

recruitTypes

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

skills

리크루트와 연관된 기술 스택, 메타데이터-스킬 목록 조회 참고

9.7.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 927

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruits" : [ {
      "recruitId" : 1,
      "category" : "PROJECT",
      "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
      "finishedRecruit" : false,
      "recruitEnd" : "2024-01-06",
      "content" : "<p>[프로젝트 소개]</p>\n저희 ",
      "skills" : [ {
        "skillId" : 1,
        "name" : "Spring"
      }, {
        "skillId" : 2,
        "name" : "React"
      } ],
      "participants" : [ {
        "recruitType" : "백엔드",
        "limit" : 4,
        "members" : [ {
          "nickname" : "KIM",
          "isMajor" : true
        } ]
      }, {
        "recruitType" : "프론트엔드",
        "limit" : 3,
        "members" : [ ]
      } ],
      "mine" : false
    } ],
    "nextCursor" : 1,
    "isLast" : true
  }
}

9.7.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.nextCursor

Number

다음 조회할 커서 번호

data.isLast

Boolean

마지막 페이지 여부

data.recruits[].recruitId

Number

리크루트 id

data.recruits[].category

String

카테고리 project|study

data.recruits[].mine

Boolean

내가 쓴 글 여부(토큰 기준)

data.recruits[].title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.recruits[].content

String

리크루트 본문 요약본 최대 50자

data.recruits[].recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.recruits[].finishedRecruit

Boolean

리크루트 종료 여부

data.recruits[].participants[].members[]

Array

리크루트 참여 멤버

data.recruits[].skills[].skillId

Number

스킬 id 미사용

data.recruits[].skills[].name

String

리크루트와 연관된 기술 스택명, 메타데이터-스킬 목록 조회 참고

data.recruits[].participants[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

data.recruits[].participants[].limit

Number

리크루트 모집 인원 제한 1명이상 10명 이하

data.recruits[].participants[].members[].nickname

String

리크루트 참여자 닉네임

data.recruits[].participants[].members[].isMajor

Boolean

리크루트 참여자 전공 여부

9.8. 리크루트 목록 조회(Offset)

9.8.1. HTTP request

GET /recruits/offset?size=20&category=project&keyword=%EC%82%AC%EC%9D%B4%EB%93%9C&isFinished=false&recruitTypes=%EB%B0%B1%EC%97%94%EB%93%9C&recruitTypes=%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C&skills=Spring&skills=React HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

9.8.2. Request parameters

Parameter Description

next

조회할 page 번호

size

페이징 사이즈

category

카테고리 project|study

keyword

리크루트 게시글 제목 검색 키워드

isFinished

리크루트 종료 여부

recruitTypes

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

skills

리크루트와 연관된 기술 스택, 메타데이터-스킬 목록 조회 참고

9.8.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 933

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruits" : [ {
      "recruitId" : 1,
      "category" : "PROJECT",
      "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
      "finishedRecruit" : false,
      "recruitEnd" : "2024-01-06",
      "content" : "<p>[프로젝트 소개]</p>\n저희 ",
      "skills" : [ {
        "skillId" : 1,
        "name" : "Spring"
      }, {
        "skillId" : 2,
        "name" : "React"
      } ],
      "participants" : [ {
        "recruitType" : "백엔드",
        "limit" : 4,
        "members" : [ {
          "nickname" : "KIM",
          "isMajor" : true
        } ]
      }, {
        "recruitType" : "프론트엔드",
        "limit" : 3,
        "members" : [ ]
      } ],
      "mine" : false
    } ],
    "currentPage" : 0,
    "totalPageCount" : 1
  }
}

9.8.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.currentPage

Number

현재 조회한 페이지 번호

data.totalPageCount

Number

total 페이지 갯수

data.recruits[].recruitId

Number

리크루트 id

data.recruits[].category

String

카테고리 project|study

data.recruits[].mine

Boolean

내가 쓴 글 여부(토큰 기준)

data.recruits[].title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.recruits[].content

String

리크루트 본문 요약본 최대 50자

data.recruits[].recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.recruits[].finishedRecruit

Boolean

리크루트 종료 여부

data.recruits[].participants[].members[]

Array

리크루트 참여 멤버

data.recruits[].skills[].skillId

Number

스킬 id 미사용

data.recruits[].skills[].name

String

리크루트와 연관된 기술 스택명, 메타데이터-스킬 목록 조회 참고

data.recruits[].participants[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

data.recruits[].participants[].limit

Number

리크루트 모집 인원 제한 1명이상 10명 이하

data.recruits[].participants[].members[].nickname

String

리크루트 참여자 닉네임

data.recruits[].participants[].members[].isMajor

Boolean

리크루트 참여자 전공 여부

9.9. 사용자 지원 리크루트 목록 조회(Cursor)

9.9.1. HTTP request

GET /recruits/applied/cursor?size=10&category=project HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

9.9.3. Request parameters

Parameter Description

cursor

다음 조회 커서 default(초기화면)에서는 미포함

size

페이징 사이즈

category

카테고리 project|study

matchStatus

리크루트 매칭 상태

9.9.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 1013

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruits" : [ {
      "recruitId" : 1,
      "category" : "PROJECT",
      "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
      "finishedRecruit" : false,
      "recruitEnd" : "2024-01-06",
      "content" : "<p>[프로젝트 소개]</p>\n저희 ",
      "skills" : [ {
        "skillId" : 1,
        "name" : "Spring"
      }, {
        "skillId" : 2,
        "name" : "React"
      } ],
      "participants" : [ {
        "recruitType" : "백엔드",
        "limit" : 4,
        "members" : [ {
          "nickname" : "KIM",
          "isMajor" : true
        } ]
      }, {
        "recruitType" : "프론트엔드",
        "limit" : 3,
        "members" : [ ]
      } ],
      "mine" : false,
      "matchStatus" : "PENDING",
      "appliedAt" : "2023-12-30T20:26:21.7363223"
    } ],
    "nextCursor" : 1,
    "isLast" : true
  }
}

9.9.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.nextCursor

Number

다음 조회할 커서 번호

data.isLast

Boolean

마지막 페이지 여부

data.recruits[].recruitId

Number

리크루트 id

data.recruits[].category

String

카테고리 project|study

data.recruits[].mine

Boolean

내가 쓴 글 여부(토큰 기준)

data.recruits[].title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.recruits[].matchStatus

String

사용자 리크루트 매칭 상태

data.recruits[].appliedAt

String

사용자 리크루트 신청일

data.recruits[].content

String

리크루트 본문 요약본 최대 50자

data.recruits[].recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.recruits[].finishedRecruit

Boolean

리크루트 종료 여부

data.recruits[].participants[].members[]

Array

리크루트 참여 멤버

data.recruits[].skills[].skillId

Number

스킬 id 미사용

data.recruits[].skills[].name

String

리크루트와 연관된 기술 스택명, 메타데이터-스킬 목록 조회 참고

data.recruits[].participants[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

data.recruits[].participants[].limit

Number

리크루트 모집 인원 제한 1명이상 10명 이하

data.recruits[].participants[].members[].nickname

String

리크루트 참여자 닉네임

data.recruits[].participants[].members[].isMajor

Boolean

리크루트 참여자 전공 여부

9.10. 사용자 지원 리크루트 목록 조회(Offset)

9.10.1. HTTP request

GET /recruits/applied/offset?size=10&category=project HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

9.10.3. Request parameters

Parameter Description

offset

다음 페이지 네이션

size

페이징 사이즈

category

카테고리 project|study

matchStatus

리크루트 매칭 상태

9.10.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 1019

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruits" : [ {
      "recruitId" : 1,
      "category" : "PROJECT",
      "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
      "finishedRecruit" : false,
      "recruitEnd" : "2024-01-06",
      "content" : "<p>[프로젝트 소개]</p>\n저희 ",
      "skills" : [ {
        "skillId" : 1,
        "name" : "Spring"
      }, {
        "skillId" : 2,
        "name" : "React"
      } ],
      "participants" : [ {
        "recruitType" : "백엔드",
        "limit" : 4,
        "members" : [ {
          "nickname" : "KIM",
          "isMajor" : true
        } ]
      }, {
        "recruitType" : "프론트엔드",
        "limit" : 3,
        "members" : [ ]
      } ],
      "mine" : false,
      "matchStatus" : "PENDING",
      "appliedAt" : "2023-12-30T20:26:21.7363223"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}

9.10.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

총 페이지 갯수

data.recruits[].recruitId

Number

리크루트 id

data.recruits[].category

String

카테고리 project|study

data.recruits[].mine

Boolean

내가 쓴 글 여부(토큰 기준)

data.recruits[].title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.recruits[].matchStatus

String

사용자 리크루트 매칭 상태

data.recruits[].appliedAt

String

사용자 리크루트 신청일

data.recruits[].content

String

리크루트 본문 요약본 최대 50자

data.recruits[].recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.recruits[].finishedRecruit

Boolean

리크루트 종료 여부

data.recruits[].participants[].members[]

Array

리크루트 참여 멤버

data.recruits[].skills[].skillId

Number

스킬 id 미사용

data.recruits[].skills[].name

String

리크루트와 연관된 기술 스택명, 메타데이터-스킬 목록 조회 참고

data.recruits[].participants[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

data.recruits[].participants[].limit

Number

리크루트 모집 인원 제한 1명이상 10명 이하

data.recruits[].participants[].members[].nickname

String

리크루트 참여자 닉네임

data.recruits[].participants[].members[].isMajor

Boolean

리크루트 참여자 전공 여부

9.11. 사용자 참여중 리크루트 목록 조회(Cursor)

9.11.1. HTTP request

GET /recruits/joined/cursor?memberId=1&category=PROJECT&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 옵션(쿠키 유무에 따라 다른 응답을 반환합니다.)

9.11.3. Request parameters

Parameter Description

cursor

조회할 커서 default(초기화면)에서는 미포함

size

페이징 사이즈

category

카테고리 project|study

memberId

사용자 프로필 - 참여중인 리크루트 목록 조회 시 사용될 사용자의 Id

9.11.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 927

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruits" : [ {
      "recruitId" : 1,
      "category" : "PROJECT",
      "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
      "finishedRecruit" : false,
      "recruitEnd" : "2024-01-06",
      "content" : "<p>[프로젝트 소개]</p>\n저희 ",
      "skills" : [ {
        "skillId" : 1,
        "name" : "Spring"
      }, {
        "skillId" : 2,
        "name" : "React"
      } ],
      "participants" : [ {
        "recruitType" : "백엔드",
        "limit" : 4,
        "members" : [ {
          "nickname" : "KIM",
          "isMajor" : true
        } ]
      }, {
        "recruitType" : "프론트엔드",
        "limit" : 3,
        "members" : [ ]
      } ],
      "mine" : false
    } ],
    "nextCursor" : 1,
    "isLast" : true
  }
}

9.11.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.nextCursor

Number

다음 조회할 커서 번호

data.isLast

Boolean

마지막 페이지 여부

data.recruits[].recruitId

Number

리크루트 id

data.recruits[].category

String

카테고리 project|study

data.recruits[].mine

Boolean

내가 쓴 글 여부(토큰 기준)

data.recruits[].title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.recruits[].content

String

리크루트 본문 요약본 최대 50자

data.recruits[].recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.recruits[].finishedRecruit

Boolean

리크루트 종료 여부

data.recruits[].participants[].members[]

Array

리크루트 참여 멤버

data.recruits[].skills[].skillId

Number

스킬 id 미사용

data.recruits[].skills[].name

String

리크루트와 연관된 기술 스택명, 메타데이터-스킬 목록 조회 참고

data.recruits[].participants[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

data.recruits[].participants[].limit

Number

리크루트 모집 인원 제한 1명이상 10명 이하

data.recruits[].participants[].members[].nickname

String

리크루트 참여자 닉네임

data.recruits[].participants[].members[].isMajor

Boolean

리크루트 참여자 전공 여부

9.12. 사용자 참여중 리크루트 목록 조회(Offset)

9.12.1. HTTP request

GET /recruits/joined/offset?memberId=1&category=PROJECT&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 옵션(쿠키 유무에 따라 다른 응답을 반환합니다.)

9.12.3. Request parameters

Parameter Description

page

조회할 페이지

size

페이징 사이즈

category

카테고리 project|study

memberId

사용자 프로필 - 참여중인 리크루트 목록 조회 시 사용될 사용자의 Id

9.12.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 933

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruits" : [ {
      "recruitId" : 1,
      "category" : "PROJECT",
      "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
      "finishedRecruit" : false,
      "recruitEnd" : "2024-01-06",
      "content" : "<p>[프로젝트 소개]</p>\n저희 ",
      "skills" : [ {
        "skillId" : 1,
        "name" : "Spring"
      }, {
        "skillId" : 2,
        "name" : "React"
      } ],
      "participants" : [ {
        "recruitType" : "백엔드",
        "limit" : 4,
        "members" : [ {
          "nickname" : "KIM",
          "isMajor" : true
        } ]
      }, {
        "recruitType" : "프론트엔드",
        "limit" : 3,
        "members" : [ ]
      } ],
      "mine" : false
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}

9.12.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.currentPage

Number

현재 조회중 페이징 번호

data.totalPageCount

Number

전체 페이지 갯수

data.recruits[].recruitId

Number

리크루트 id

data.recruits[].category

String

카테고리 project|study

data.recruits[].mine

Boolean

내가 쓴 글 여부(토큰 기준)

data.recruits[].title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.recruits[].content

String

리크루트 본문 요약본 최대 50자

data.recruits[].recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.recruits[].finishedRecruit

Boolean

리크루트 종료 여부

data.recruits[].participants[].members[]

Array

리크루트 참여 멤버

data.recruits[].skills[].skillId

Number

스킬 id 미사용

data.recruits[].skills[].name

String

리크루트와 연관된 기술 스택명, 메타데이터-스킬 목록 조회 참고

data.recruits[].participants[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

data.recruits[].participants[].limit

Number

리크루트 모집 인원 제한 1명이상 10명 이하

data.recruits[].participants[].members[].nickname

String

리크루트 참여자 닉네임

data.recruits[].participants[].members[].isMajor

Boolean

리크루트 참여자 전공 여부

9.13. 사용자 스크랩 리크루팅 목록 조회(Cursor)

9.13.1. HTTP request

GET /recruits/my-scrap/cursor?size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

9.13.3. Request parameters

Parameter Description

cursor

다음 조회 커서 default(초기화면)에서는 미포함

size

페이징 사이즈

9.13.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 927

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruits" : [ {
      "recruitId" : 1,
      "category" : "PROJECT",
      "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
      "finishedRecruit" : false,
      "recruitEnd" : "2024-01-06",
      "content" : "<p>[프로젝트 소개]</p>\n저희 ",
      "skills" : [ {
        "skillId" : 1,
        "name" : "Spring"
      }, {
        "skillId" : 2,
        "name" : "React"
      } ],
      "participants" : [ {
        "recruitType" : "백엔드",
        "limit" : 4,
        "members" : [ {
          "nickname" : "KIM",
          "isMajor" : true
        } ]
      }, {
        "recruitType" : "프론트엔드",
        "limit" : 3,
        "members" : [ ]
      } ],
      "mine" : false
    } ],
    "nextCursor" : 1,
    "isLast" : true
  }
}

9.13.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.nextCursor

Number

다음 조회할 커서 번호

data.isLast

Boolean

마지막 페이지 여부

data.recruits[].recruitId

Number

리크루트 id

data.recruits[].category

String

카테고리 project|study

data.recruits[].mine

Boolean

내가 쓴 글 여부(토큰 기준)

data.recruits[].title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.recruits[].content

String

리크루트 본문 요약본 최대 50자

data.recruits[].recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.recruits[].finishedRecruit

Boolean

리크루트 종료 여부

data.recruits[].participants[].members[]

Array

리크루트 참여 멤버

data.recruits[].skills[].skillId

Number

스킬 id 미사용

data.recruits[].skills[].name

String

리크루트와 연관된 기술 스택명, 메타데이터-스킬 목록 조회 참고

data.recruits[].participants[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

data.recruits[].participants[].limit

Number

리크루트 모집 인원 제한 1명이상 10명 이하

data.recruits[].participants[].members[].nickname

String

리크루트 참여자 닉네임

data.recruits[].participants[].members[].isMajor

Boolean

리크루트 참여자 전공 여부

9.14. 사용자 스크랩 리크루팅 목록 조회(Offset)

9.14.1. HTTP request

GET /recruits/my-scrap/offset?size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

9.14.3. Request parameters

Parameter Description

page

다음 조회 페이지

size

페이징 사이즈

9.14.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 933

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruits" : [ {
      "recruitId" : 1,
      "category" : "PROJECT",
      "title" : "[사이드 프로젝트] 공모전 레퍼런스 웹 플랫폼 개발 프로젝트 팀원을 모집합니다.",
      "finishedRecruit" : false,
      "recruitEnd" : "2024-01-06",
      "content" : "<p>[프로젝트 소개]</p>\n저희 ",
      "skills" : [ {
        "skillId" : 1,
        "name" : "Spring"
      }, {
        "skillId" : 2,
        "name" : "React"
      } ],
      "participants" : [ {
        "recruitType" : "백엔드",
        "limit" : 4,
        "members" : [ {
          "nickname" : "KIM",
          "isMajor" : true
        } ]
      }, {
        "recruitType" : "프론트엔드",
        "limit" : 3,
        "members" : [ ]
      } ],
      "mine" : false
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}

9.14.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.currentPage

Number

현재 페이지

data.totalPageCount

Number

토탈 페이지

data.recruits[].recruitId

Number

리크루트 id

data.recruits[].category

String

카테고리 project|study

data.recruits[].mine

Boolean

내가 쓴 글 여부(토큰 기준)

data.recruits[].title

String

리크루트 모집글 제목, 글자 수 제한 50자

data.recruits[].content

String

리크루트 본문 요약본 최대 50자

data.recruits[].recruitEnd

String

yyyy-MM-dd 모집 종료 일자

data.recruits[].finishedRecruit

Boolean

리크루트 종료 여부

data.recruits[].participants[].members[]

Array

리크루트 참여 멤버

data.recruits[].skills[].skillId

Number

스킬 id 미사용

data.recruits[].skills[].name

String

리크루트와 연관된 기술 스택명, 메타데이터-스킬 목록 조회 참고

data.recruits[].participants[].recruitType

String

리크루트 모집파트, 메타데이터-리크루트 목록 조회 참고

data.recruits[].participants[].limit

Number

리크루트 모집 인원 제한 1명이상 10명 이하

data.recruits[].participants[].members[].nickname

String

리크루트 참여자 닉네임

data.recruits[].participants[].members[].isMajor

Boolean

리크루트 참여자 전공 여부

10. 리크루트 참여 신청

10.1. 리크루트 참여 신청

10.1.1. HTTP request

POST /recruits/1/application HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 120
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "recruitType" : "프론트엔드",
  "contents" : [ "취업 준비를 위해서 신청하게되었습니다." ]
}
Cookie Description

accessToken

액세스 토큰 필수

10.1.3. Path parameters

Table 1. /recruits/{recruitId}/application
Parameter Description

recruitId

리크루트 아이디

10.1.4. Request fields

Path Type Description

recruitType

String

리크루트 작성자가 선택한 자신의 역할군, 메타데이터-리크루트 목록 조회 참고

contents[]

Array

리크루트 등록자 질문에 대한 사용자 답변, [1개 필수]

10.1.5. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 132

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitApplicationId" : 1,
    "matchStatus" : "PENDING"
  }
}

10.1.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitApplicationId

Number

리크루트 참여 신청 PK

data.matchStatus

String

리크루트 참여 신청 매칭 상태 PENDING (등록자 수락 대기상태) | DONE (매칭성공) | REJECT (매칭거절) | CANCEL (매칭 취소)

10.2. 리크루트 등록자 참여 신청 수락

10.2.1. HTTP request

PATCH /recruit-applications/1/approve HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

10.2.3. Path parameters

Table 1. /recruit-applications/{recruitApplicationId}/approve
Parameter Description

recruitApplicationId

리크루트 참여신청 PK

10.2.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 129

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitApplicationId" : 1,
    "matchStatus" : "DONE"
  }
}

10.2.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitApplicationId

Number

리크루트 참여 신청 PK

data.matchStatus

String

리크루트 참여 신청 매칭 상태 PENDING (등록자 수락 대기상태) | DONE (매칭성공) | REJECT (매칭거절) | CANCEL (매칭 취소)

10.3. 리크루트 참여 신청 거절

10.3.1. HTTP request

PATCH /recruit-applications/1/reject HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

10.3.3. Path parameters

Table 1. /recruit-applications/{recruitApplicationId}/reject
Parameter Description

recruitApplicationId

리크루트 참여신청 PK

10.3.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 131

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitApplicationId" : 1,
    "matchStatus" : "REJECT"
  }
}

10.3.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitApplicationId

Number

리크루트 참여 신청 PK

data.matchStatus

String

리크루트 참여 신청 매칭 상태 PENDING (등록자 수락 대기상태) | DONE (매칭성공) | REJECT (매칭거절) | CANCEL (매칭 취소)

10.4. 리크루트 신청자 참여 신청 취소

10.4.1. HTTP request

PATCH /recruit-applications/1/cancel HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

10.4.3. Path parameters

Table 1. /recruit-applications/{recruitApplicationId}/cancel
Parameter Description

recruitApplicationId

리크루트 참여신청 PK

10.4.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 131

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitApplicationId" : 1,
    "matchStatus" : "CANCEL"
  }
}

10.4.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitApplicationId

Number

리크루트 참여 신청 PK

data.matchStatus

String

리크루트 참여 신청 매칭 상태 PENDING (등록자 수락 대기상태) | DONE (매칭성공) | REJECT (매칭거절) | CANCEL (매칭 취소)

10.5. 리크루트 참여자 목록 조회

10.5.1. HTTP request

GET /recruits/1/members HTTP/1.1
Host: api.ssafsound.com

10.5.2. Path parameters

Table 1. /recruits/{recruitId}/members
Parameter Description

recruitId

리크루트 PK

10.5.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 1029

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitTypes" : {
      "백엔드" : {
        "limit" : 4,
        "members" : [ {
          "recruitApplicationId" : -1,
          "joinedAt" : "2023-12-30T20:26:21.5945531",
          "memberId" : 99,
          "nickname" : "KIM",
          "isMajor" : true,
          "ssafyInfo" : {
            "semester" : 9,
            "campus" : "서울",
            "certificationState" : "CERTIFIED",
            "majorTrack" : "Java"
          }
        } ]
      },
      "프론트엔드" : {
        "limit" : 3,
        "members" : [ {
          "recruitApplicationId" : 1,
          "joinedAt" : "2023-12-30T20:26:21.7303212",
          "memberId" : 99,
          "nickname" : "KIM",
          "isMajor" : true,
          "ssafyInfo" : {
            "semester" : 9,
            "campus" : "서울",
            "certificationState" : "CERTIFIED",
            "majorTrack" : "Java"
          }
        } ]
      }
    }
  }
}

10.5.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitTypes.*.limit

Number

인원 제한 수

data.recruitTypes.*.members[].memberId

Number

참여자 PK

data.recruitTypes.*.members[].recruitApplicationId

Number

참여신청 PK

data.recruitTypes.*.members[].joinedAt

String

참여 확정일

data.recruitTypes.*.members[].nickname

String

참여자 닉네임

data.recruitTypes.*.members[].isMajor

Boolean

전공자 여부

data.recruitTypes.*.members[].ssafyInfo.semester

Number

참여자 싸피 기수 (1~10)

data.recruitTypes.*.members[].ssafyInfo.campus

String

참여자 소속 캠퍼스 메타데이터-캠퍼스 목록 조회 참고

data.recruitTypes.*.members[].ssafyInfo.certificationState

String

참여자 ssafy 인증 여부 UNCERTIFIED | CERTIFIED

data.recruitTypes.*.members[].ssafyInfo.majorTrack

String

전공 트랙 Embedded | Mobile | Python | Java

10.6. 등록자 리크루트 참여신청 목록 조회

10.6.1. HTTP request

GET /recruit-applications?recruitId=1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

10.6.3. Request parameters

Parameter Description

recruitId

리크루트 PK

10.6.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 922

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "category" : "PROJECT",
    "recruitId" : 1,
    "recruitApplications" : {
      "백엔드" : [ ],
      "프론트엔드" : [ {
        "recruitApplicationId" : 1,
        "matchStatus" : "PENDING",
        "author" : {
          "memberId" : 99,
          "nickname" : "KIM",
          "memberRole" : "user",
          "ssafyMember" : true,
          "isMajor" : true,
          "ssafyInfo" : {
            "semester" : 9,
            "campus" : "서울",
            "certificationState" : "CERTIFIED",
            "majorTrack" : "Java"
          }
        },
        "reply" : "취업 준비를 위해서 신청하게되었습니다.",
        "question" : "프로젝트에 참여하고자 하는 동기가 무엇인가요?",
        "liked" : false,
        "appliedAt" : "2023-12-30T20:26:21.7223214"
      } ]
    }
  }
}

10.6.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitId

Number

리크루트 PK

data.category

String

PROJECT | STUDY

data.recruitApplications.*.[]

Array

리크루트 참여자 현황

data.recruitApplications.*.[].recruitApplicationId

Number

리크루트 참여 신청 PK

data.recruitApplications.*.[].matchStatus

String

매칭 상태 - (PENDING:등록자 수락대기), (DONE:매칭 성공), (REJECT:매칭 거절), (CANCEL:매칭취소)

data.recruitApplications.*.[].author.memberId

Number

참여자 PK

data.recruitApplications.*.[].author.nickname

String

참여자 닉네임

data.recruitApplications.*.[].author.isMajor

Boolean

전공자 여부

data.recruitApplications.*.[].author.memberRole

String

참여자 권한

data.recruitApplications.*.[].author.ssafyMember

Boolean

싸피 인증 여부

data.recruitApplications.*.[].question

String

등록자 질문

data.recruitApplications.*.[].reply

String

참여자 답변

data.recruitApplications.*.[].liked

Boolean

등록자 좋아요 여부

data.recruitApplications.*.[].appliedAt

String

참여 신청일

data.recruitApplications.*.[].author.ssafyInfo.semester

Number

참여자 싸피 기수 (1~10)

data.recruitApplications.*.[].author.ssafyInfo.campus

String

참여자 소속 캠퍼스 메타데이터-캠퍼스 목록 조회 참고

data.recruitApplications.*.[].author.ssafyInfo.certificationState

String

참여자 ssafy 인증 여부 UNCERTIFIED | CERTIFIED

data.recruitApplications.*.[].author.ssafyInfo.majorTrack

String

전공 트랙 Embedded | Mobile | Python | Java

10.7. 등록자 리크루트 참여신청 좋아요

10.7.1. HTTP request

POST /recruit-applications/1/like HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

10.7.3. Path parameters

Table 1. /recruit-applications/{recruitApplicationId}/like
Parameter Description

recruitApplicationId

리크루트 참여 신청 PK

10.7.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 88

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "liked" : true
  }
}

10.7.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.liked

Boolean

리크루트 참여신청 좋아요 여부

10.8. 등록자 리크루트 참여신청 상세 조회

10.8.1. HTTP request

GET /recruit-applications/1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

10.8.3. Path parameters

Table 1. /recruit-applications/{recruitApplicationId}
Parameter Description

recruitApplicationId

리크루트 참여 신청 PK

10.8.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 751

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitId" : 1,
    "recruitApplicationId" : 1,
    "recruitType" : "프론트엔드",
    "matchStatus" : "PENDING",
    "author" : {
      "memberId" : 99,
      "nickname" : "KIM",
      "memberRole" : "user",
      "ssafyMember" : true,
      "isMajor" : true,
      "ssafyInfo" : {
        "semester" : 9,
        "campus" : "서울",
        "certificationState" : "CERTIFIED",
        "majorTrack" : "Java"
      }
    },
    "reply" : "취업 준비를 위해서 신청하게되었습니다.",
    "question" : "프로젝트에 참여하고자 하는 동기가 무엇인가요?",
    "liked" : false,
    "appliedAt" : "2023-12-30T20:26:21.7213206"
  }
}

10.8.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitId

Number

리크루트 PK

data.recruitApplicationId

Number

리크루트 참여 신청 PK

data.recruitType

String

리크루트 참여 신청자가 선택한 자신의 역할군, 메타데이터-리크루트 목록 조회 참고

data.matchStatus

String

매칭 상태 - (PENDING:등록자 수락대기), (DONE:매칭 성공), (REJECT:매칭 거절), (CANCEL:매칭취소)

data.author.memberId

Number

참여자 PK

data.author.nickname

String

참여자 닉네임

data.author.memberRole

String

참여자 권한

data.author.isMajor

Boolean

전공자 여부

data.author.ssafyMember

Boolean

싸피 인증 여부

data.question

String

등록자 질문

data.reply

String

참여자 답변

data.liked

Boolean

등록자 좋아요 여부

data.appliedAt

String

신청일

data.author.ssafyInfo.semester

Number

참여자 싸피 기수 (1~10)

data.author.ssafyInfo.campus

String

참여자 소속 캠퍼스 메타데이터-캠퍼스 목록 조회 참고

data.author.ssafyInfo.certificationState

String

참여자 ssafy 인증 여부 UNCERTIFIED | CERTIFIED

data.author.ssafyInfo.majorTrack

String

전공 트랙 Embedded | Mobile | Python | Java

10.9. 등록자 거절한 리크루트 신청 목록 조회

10.9.1. HTTP request

GET /recruit-applications/rejected?recruitId=1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

10.9.3. Request parameters

Parameter Description

recruitId

리크루트 PK

10.9.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 820

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "category" : "PROJECT",
    "recruitId" : 1,
    "recruitApplications" : [ {
      "recruitApplicationId" : 1,
      "matchStatus" : "REJECT",
      "author" : {
        "memberId" : 100,
        "nickname" : "TIM",
        "memberRole" : "user",
        "ssafyMember" : true,
        "isMajor" : true,
        "ssafyInfo" : {
          "semester" : 9,
          "campus" : "서울",
          "certificationState" : "CERTIFIED",
          "majorTrack" : "Java"
        }
      },
      "reply" : "취업 준비를 위해서 신청하게되었습니다.",
      "question" : "프로젝트에 참여하고자 하는 동기가 무엇인가요?",
      "liked" : false,
      "appliedAt" : "2023-12-30T20:26:21.7213206"
    } ]
  }
}

10.9.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitId

Number

리크루트 PK

data.category

String

PROJECT | STUDY

data.recruitApplications[].recruitApplicationId

Number

리크루트 참여 신청 PK

data.recruitApplications[].matchStatus

String

매칭 상태 - (PENDING:등록자 수락대기), (DONE:매칭 성공), (REJECT:매칭 거절), (CANCEL:매칭취소)

data.recruitApplications[].author.memberId

Number

참여자 PK

data.recruitApplications[].author.nickname

String

참여자 닉네임

data.recruitApplications[].author.isMajor

Boolean

전공자 여부

data.recruitApplications[].author.memberRole

String

참여자 권한

data.recruitApplications[].author.ssafyMember

Boolean

싸피 인증 여부

data.recruitApplications[].question

String

등록자 질문

data.recruitApplications[].reply

String

참여자 답변

data.recruitApplications[].liked

Boolean

등록자 좋아요 여부

data.recruitApplications[].appliedAt

String

참여 신청일

data.recruitApplications[].author.ssafyInfo.semester

Number

참여자 싸피 기수 (1~10)

data.recruitApplications[].author.ssafyInfo.campus

String

참여자 소속 캠퍼스 메타데이터-캠퍼스 목록 조회 참고

data.recruitApplications[].author.ssafyInfo.certificationState

String

참여자 ssafy 인증 여부 UNCERTIFIED | CERTIFIED

data.recruitApplications[].author.ssafyInfo.majorTrack

String

전공 트랙 Embedded | Mobile | Python | Java

10.10. 사용자 리크루트 신청서 조회

10.10.1. HTTP request

GET /recruit-applications/mine?recruitId=1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

10.10.3. Request parameters

Parameter Description

recruitId

리크루트 PK

10.10.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 751

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitId" : 1,
    "recruitApplicationId" : 1,
    "recruitType" : "프론트엔드",
    "matchStatus" : "PENDING",
    "author" : {
      "memberId" : 99,
      "nickname" : "KIM",
      "memberRole" : "user",
      "ssafyMember" : true,
      "isMajor" : true,
      "ssafyInfo" : {
        "semester" : 9,
        "campus" : "서울",
        "certificationState" : "CERTIFIED",
        "majorTrack" : "Java"
      }
    },
    "reply" : "취업 준비를 위해서 신청하게되었습니다.",
    "question" : "프로젝트에 참여하고자 하는 동기가 무엇인가요?",
    "liked" : false,
    "appliedAt" : "2023-12-30T20:26:21.7213206"
  }
}

10.10.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitId

Number

리크루트 PK

data.recruitApplicationId

Number

리크루트 참여 신청 PK

data.recruitType

String

리크루트 참여 신청자가 선택한 자신의 역할군, 메타데이터-리크루트 목록 조회 참고

data.matchStatus

String

매칭 상태 - (PENDING:등록자 수락대기), (DONE:매칭 성공), (REJECT:매칭 거절), (CANCEL:매칭취소)

data.author.memberId

Number

참여자 PK

data.author.nickname

String

참여자 닉네임

data.author.memberRole

String

참여자 권한

data.author.isMajor

Boolean

전공자 여부

data.author.ssafyMember

Boolean

싸피 인증 여부

data.question

String

등록자 질문

data.reply

String

참여자 답변

data.liked

Boolean

등록자 좋아요 여부

data.appliedAt

String

신청일

data.author.ssafyInfo.semester

Number

참여자 싸피 기수 (1~10)

data.author.ssafyInfo.campus

String

참여자 소속 캠퍼스 메타데이터-캠퍼스 목록 조회 참고

data.author.ssafyInfo.certificationState

String

참여자 ssafy 인증 여부 UNCERTIFIED | CERTIFIED

data.author.ssafyInfo.majorTrack

String

전공 트랙 Embedded | Mobile | Python | Java

11. 리크루트 덧글

11.1. 리크루트 덧글 등록

11.1.1. HTTP request

POST /recruits/1/comments HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 82
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "content" : "공모전 수상이 목표인가요?",
  "commentGroup" : -1
}
Cookie Description

accessToken

액세스 토큰 필수

11.1.3. Path parameters

Table 1. /recruits/{recruitId}/comments
Parameter Description

recruitId

리크루트 아이디

11.1.4. Request fields

Path Type Description

content

String

리크루트 덧글 내용

commentGroup

Number

default: -1, 대댓글인 경우 해당 상위 덧글의 PK

11.1.5. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 221

{
  "code" : "200 OK",
  "message" : "success",
  "data" : {
    "commentId" : 1,
    "content" : "공모전 수상이 목표인가요?",
    "memberId" : 99,
    "nickname" : "KIM",
    "commentGroup" : 1
  }
}

11.1.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.commentId

Number

리크루트 덧글 PK

data.content

String

리크루트 덧글 PK

data.memberId

Number

작성자 PK

data.nickname

String

작성자 닉네임

data.commentGroup

Number

상위 덧글의 ID

11.2. 리크루트 덧글 삭제

11.2.1. HTTP request

DELETE /recruit-comments/1 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

11.2.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

11.2.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

11.3. 리크루트 덧글 업데이트

11.3.1. HTTP request

PATCH /recruit-comments/1 HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 35
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "content" : "덧글 수정"
}
Cookie Description

accessToken

액세스 토큰 필수

11.3.3. Path parameters

Table 1. /recruit-comments/{recruitCommentId}
Parameter Description

recruitCommentId

리크루트 덧글 PK

11.3.4. Request fields

Path Type Description

content

String

리크루트 덧글 내용

11.3.5. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

11.3.6. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

11.4. 리크루트 덧글 좋아요

11.4.1. HTTP request

POST /recruit-comments/1/like HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

11.4.3. Path parameters

Table 1. /recruit-comments/{recruitCommentId}/like
Parameter Description

recruitCommentId

리크루트 덧글 PK

11.4.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 110

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "likeCount" : 1,
    "liked" : true
  }
}

11.4.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.likeCount

Number

리크루트 좋아요 갯수

data.liked

Boolean

리크루트 좋아요 여부

11.5. 리크루트 덧글 목록 조회

11.5.1. HTTP request

GET /recruits/1/comments HTTP/1.1
Host: api.ssafsound.com
Cookie Description

accessToken

액세스 토큰 옵션(쿠키 유무에 따라 다른 응답을 반환합니다.)

11.5.3. Path parameters

Table 1. /recruits/{recruitId}/comments
Parameter Description

recruitId

리크루트 덧글 PK

11.5.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 772

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "recruitComments" : [ {
      "commentId" : 1,
      "content" : "공모전 수상이 목표인가요?",
      "commentGroup" : 1,
      "likeCount" : 0,
      "liked" : false,
      "mine" : false,
      "createdAt" : "2023-12-30T20:26:24.1975133",
      "deletedComment" : false,
      "modified" : false,
      "author" : {
        "memberId" : 99,
        "nickname" : "KIM",
        "memberRole" : "user",
        "ssafyMember" : true,
        "isMajor" : true,
        "ssafyInfo" : {
          "semester" : 9,
          "campus" : "서울",
          "certificationState" : "CERTIFIED",
          "majorTrack" : "Java"
        }
      },
      "replies" : [ ]
    } ]
  }
}

11.5.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.recruitComments[].commentId

Number

리크루트 덧글 PK

data.recruitComments[].likeCount

Number

리크루트 덧글 좋아요 갯수

data.recruitComments[].liked

Boolean

조회자 리크루트 좋아요 여부

data.recruitComments[].mine

Boolean

자기 자신이 쓴 좋아요 여부

data.recruitComments[].createdAt

String

리크루트 덧글 생성일

data.recruitComments[].modified

Boolean

리크루트 덧글 수정여부

data.recruitComments[].content

String

리크루트 덧글 내용

data.recruitComments[].commentGroup

Number

리크루트 상위 덧글 PK

data.recruitComments[].deletedComment

Boolean

덧글 삭제 여부

data.recruitComments[].replies

Array

대댓글 [최대1개]

data.recruitComments[].author.memberId

Number

참여자 PK

data.recruitComments[].author.nickname

String

참여자 닉네임

data.recruitComments[].author.memberRole

String

참여자 권한

data.recruitComments[].author.ssafyMember

Boolean

싸피생 여부

data.recruitComments[].author.isMajor

Boolean

전공자 여부

data.recruitComments[].author.ssafyInfo.semester

Number

기수

data.recruitComments[].author.ssafyInfo.campus

String

캠퍼스

data.recruitComments[].author.ssafyInfo.certificationState

String

인증상태

data.recruitComments[].author.ssafyInfo.majorTrack

String

전공자 트랙

12. 이미지 업로드

12.1. 이미지 업로드 URL 요청

12.1.1. HTTP request

POST /store/image HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue
Cookie Description

accessToken

액세스 토큰 필수

12.1.3. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 671

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "imagePath" : "post/3931df90-e81c-47a0-8364-909a7cea7ac9",
    "imageUrl" : "https://d39eiex97d56il.cloudfront.net/post/3931df90-e81c-47a0-8364-909a7cea7ac9",
    "preSignedUrl" : "https://ssaf-sound-file-server-s3-bucket.s3.ap-northeast-2.amazonaws.com/post/3931df90-e81c-47a0-8364-909a7cea7ac9?x-amz-acl=public-read-write&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230815T055051Z&X-Amz-SignedHeaders=host&X-Amz-Expires=299&X-Amz-Credential=AKIAQ7OX65EXW5BZE2UI%2F20230815%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Signature=686b867c619ca2bf4ac43336f942e8cdb760ee52483fcbc0ecec906668018fd8"
  }
}

12.1.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.imagePath

String

스토리지 내 이미지 경로

data.imageUrl

String

이미지를 조회할 수 있는 url

data.preSignedUrl

String

이미지를 저장할 수 있는 url

13. 신고

13.1. 신고하기

13.1.1. HTTP request

POST /report HTTP/1.1
Content-Type: application/json
Content-Type: application/json
Content-Length: 70
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

{
  "sourceType" : "RECRUIT",
  "sourceId" : 1,
  "reasonId" : 4
}

13.1.2. Request fields

Path Type Description

sourceType

String

신고 대상 컨텐츠 종류. POST | COMMENT | RECRUIT | RECRUIT_COMMENT

sourceId

Number

신고 대상 컨텐츠 PK

reasonId

Number

신고 사유.
1 : 게시판 성격에 부적절함
2 : 욕설/비하
3 : 음란물/불건전한 만남 및 대화
4 : 상업적 광고 및 판매
5 : 유출/사칭/사기
6 : 낚시/놀람/도배
7 : 정당/정치인 비하 및운동

Cookie Description

accessToken

액세스 토큰 필수

13.1.4. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 66

{
  "code" : "200",
  "message" : "success",
  "data" : null
}

13.1.5. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

14. 알림

14.1. 사용자 알림 목록 조회(Offset)

14.1.1. HTTP request

GET /notifications/offset?page=1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

14.1.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 749

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "notifications" : [ {
      "notificationId" : 2,
      "message" : "'취업 하고싶다~~' 게시글에 새로운 대댓글이 달렸습니다.",
      "contentId" : 2,
      "serviceType" : "POST",
      "notificationType" : "COMMENT_REPLY",
      "read" : false,
      "createdAt" : "2023-12-30 21:26:19"
    }, {
      "notificationId" : 1,
      "message" : "'오늘 점심 추천좀' 게시글에 새로운 댓글이 달렸습니다.",
      "contentId" : 1,
      "serviceType" : "POST",
      "notificationType" : "POST_REPLY",
      "read" : false,
      "createdAt" : "2023-12-30 20:26:19"
    } ],
    "currentPage" : 1,
    "totalPageCount" : 1
  }
}
Cookie Description

accessToken

액세스 토큰 필수

14.1.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.notifications

Array

알림 목록

data.currentPage

Number

현재 페이지 번호

data.totalPageCount

Number

전체 페이지 수

data.notifications[].notificationId

Number

알림의 고유 ID

data.notifications[].message

String

알림 메시지

data.notifications[].contentId

Number

알림 클릭 시 이동할 해당 컨텐츠의 고유 ID, EX) ServiceType이 POST이면 게시글의 id, RECRUIT면 리쿠르트의 id 단, SYSTEM이면 null이 올 수도 있음.

data.notifications[].serviceType

String

알림을 저장한 서비스 타입, SYSTEM | POST | RECRUIT

data.notifications[].notificationType

String

구체적인 알림 타입, SYSTEM | POST_REPLY | COMMENT_REPLY | RECRUIT~ 단, RECRUIT는 추가될 수 있음.

data.notifications[].read

Boolean

새로 들어온 알림인지 여부, 처음 조회된 알림이면 false

data.notifications[].createdAt

String

알림이 저장된 시간, yyyy-MM-dd HH:mm:ss

14.2. 사용자 알림 목록 조회(Cursor)

14.2.1. HTTP request

GET /notifications/cursor?cursor=-1&size=10 HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

14.2.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 720

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "notifications" : [ {
      "notificationId" : 2,
      "message" : "'취업 하고싶다~~' 게시글에 새로운 대댓글이 달렸습니다.",
      "contentId" : 2,
      "serviceType" : "POST",
      "notificationType" : "COMMENT_REPLY",
      "read" : false,
      "createdAt" : "2023-12-30 21:26:19"
    }, {
      "notificationId" : 1,
      "message" : "'오늘 점심 추천좀' 게시글에 새로운 댓글이 달렸습니다.",
      "contentId" : 1,
      "serviceType" : "POST",
      "notificationType" : "POST_REPLY",
      "read" : false,
      "createdAt" : "2023-12-30 20:26:19"
    } ],
    "cursor" : null
  }
}
Cookie Description

accessToken

액세스 토큰 필수

14.2.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.notifications

Array

알림 목록

data.cursor

Number

다음에 요청할 cursor값, 응답되는 cursor값이 null이면 다음 페이지는 없음을 의미

data.notifications[].notificationId

Number

알림의 고유 ID

data.notifications[].message

String

알림 메시지

data.notifications[].contentId

Number

알림 클릭 시 이동할 해당 컨텐츠의 고유 ID, EX) ServiceType이 POST이면 게시글의 id, RECRUIT면 리쿠르트의 id 단, SYSTEM이면 null이 올 수도 있음.

data.notifications[].serviceType

String

알림을 저장한 서비스 타입, SYSTEM | POST | RECRUIT

data.notifications[].notificationType

String

구체적인 알림 타입, SYSTEM | POST_REPLY | COMMENT_REPLY | RECRUIT~ 단, RECRUIT는 추가될 수 있음.

data.notifications[].read

Boolean

새로 들어온 알림인지 여부, 처음 조회된 알림이면 false

data.notifications[].createdAt

String

알림이 저장된 시간, yyyy-MM-dd HH:mm:ss

14.3. 새로운 알림 확인

14.3.1. HTTP request

GET /notifications/new HTTP/1.1
Host: api.ssafsound.com
Cookie: accessToken=accessTokenValue

14.3.2. HTTP response

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 88

{
  "code" : "200",
  "message" : "success",
  "data" : {
    "isNew" : true
  }
}
Cookie Description

accessToken

액세스 토큰 필수

14.3.4. Response fields

Path Type Description

code

String

응답 코드

message

String

응답 메시지

data

Object

응답 데이터

data.isNew

Boolean

새로운 알림이 있는지 여부, true면 확인하지 않은 알림이 있다는 의미.