인증 (Auth)

1. 게스트 토큰 발급

비회원의 토큰을 발급받을 수 있습니다.

  • 비회원의 토큰 만료일: 토큰 생성일로부터 1달

1.1. Example

$ curl 'https://moddo.kro.kr/api/v1/user/guest/token' -i -X GET

1.2. HTTP

1.2.1. 요청

GET /api/v1/user/guest/token HTTP/1.1
Host: moddo.kro.kr

1.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=access-token; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 133

{
  "accessToken" : "access-token",
  "refreshToken" : "refresh-token",
  "expiredAt" : "2025-09-08 13:21:23",
  "isMember" : false
}

1.3. Body

1.3.1. 응답

{
  "accessToken" : "access-token",
  "refreshToken" : "refresh-token",
  "expiredAt" : "2025-09-08 13:21:23",
  "isMember" : false
}

2. 액세스 토큰 재발급

refreshToken을 사용해 accessToken을 재발급 받을 수 있습니다.

2.1. Example

$ curl 'https://moddo.kro.kr/api/v1/user/reissue/token' -i -X PUT \
    -H 'Authorization: Bearer refresh-token'

2.2. HTTP

2.2.1. 요청

PUT /api/v1/user/reissue/token HTTP/1.1
Authorization: Bearer refresh-token
Host: moddo.kro.kr
Content-Type: application/x-www-form-urlencoded

2.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 40

{
  "accessToken" : "new-access-token"
}

2.3. Body

2.3.1. 응답

{
  "accessToken" : "new-access-token"
}

3. 카카오톡 소셜 로그인

사용자가 카카오 소셜 로그인을 완료하면, 인가 코드를 통해 카카오 Access Token을 발급받고, 이를 이용해 카카오 사용자 정보를 조회합니다. 조회된 사용자 정보로 서비스의 Access Token을 생성한 후, 해당 토큰은 쿠키를 통해 클라이언트에 전달됩니다.

3.1. Example

$ curl 'https://moddo.kro.kr/api/v1/login/oauth2/callback?code=test+code' -i -X GET

3.2. HTTP

3.2.1. 요청

GET /api/v1/login/oauth2/callback?code=test+code HTTP/1.1
Host: moddo.kro.kr

3.2.2. 응답

HTTP/1.1 302 Found
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=access-token; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT
Set-Cookie: accessToken=access-token; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT
Location: https://www.moddo.kr
Location: https://www.moddo.kr

3.3. Body

3.3.1. 응답

4. 로그아웃

서비스와 카카오 로그아웃을 처리합니다.

4.1. Example

$ curl 'https://moddo.kro.kr/api/v1/logout' -i -X GET \
    --cookie 'accessToken=access-token'

4.2. HTTP

4.2.1. 요청

GET /api/v1/logout HTTP/1.1
Host: moddo.kro.kr
Cookie: accessToken=access-token

4.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Set-Cookie: accessToken=; Max-Age=0; Expires=Thu, 1 Jan 1970 00:00:00 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 37

{
  "message" : "Logout successful"
}

4.3. Body

4.3.1. 응답

{
  "message" : "Logout successful"
}

캐릭터 (Character)

5. 캐릭터 조회

모임의 캐릭터를 조회할 수 있습니다.

  • ★: 러키 모또

  • ★★: 천사 모또 / 딸기 또또

  • ★★★: 마법사 또또 / 잠꾸러기 또또

5.1. Example

$ curl 'https://moddo.kro.kr/api/v1/character?groupToken=groupToken' -i -X GET \
    -H 'Accept: application/json'

5.2. HTTP

5.2.1. 요청

GET /api/v1/character?groupToken=groupToken HTTP/1.1
Accept: application/json
Host: moddo.kro.kr

5.2.2. 응답

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

{
  "name" : "천사 모또",
  "rarity" : "2",
  "imageUrl" : "https://moddo-s3.s3.amazonaws.com/character/천사 모또-2.png",
  "imageBigUrl" : "https://moddo-s3.s3.amazonaws.com/character/천사 모또-2-big.png"
}

5.3. Body

5.3.1. 응답

{
  "name" : "천사 모또",
  "rarity" : "2",
  "imageUrl" : "https://moddo-s3.s3.amazonaws.com/character/천사 모또-2.png",
  "imageBigUrl" : "https://moddo-s3.s3.amazonaws.com/character/천사 모또-2-big.png"
}

5.3.2. 응답 - 유효하지 않은 GroupToken

{
  "status" : 401,
  "message" : "토큰이 유효하지 않습니다."
}

5.3.3. 응답 - 누락된 GroupToken

{
  "status" : 401,
  "message" : "토큰이 없습니다."
}

지출 (Expense)

6. 지출 내역 추가

지출 내역을 생성할 수 있습니다.

6.1. Example

$ curl 'https://moddo.kro.kr/api/v1/expenses?groupToken=groupToken' -i -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "expenses" : [ {
    "amount" : 20000,
    "content" : "카페",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "amount" : 9000
    }, {
      "id" : 2,
      "amount" : 11000
    } ]
  } ]
}'

6.2. HTTP

6.2.1. 요청

POST /api/v1/expenses?groupToken=groupToken HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 224
Host: moddo.kro.kr

{
  "expenses" : [ {
    "amount" : 20000,
    "content" : "카페",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "amount" : 9000
    }, {
      "id" : 2,
      "amount" : 11000
    } ]
  } ]
}

6.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 974

{
  "expenses" : [ {
    "id" : 1,
    "amount" : 100000,
    "content" : "하이디라오",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 50000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 50000
    } ]
  }, {
    "id" : 2,
    "amount" : 20000,
    "content" : "카페",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 9000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 11000
    } ]
  } ]
}

6.3. Body

6.3.1. 요청

{
  "expenses" : [ {
    "amount" : 20000,
    "content" : "카페",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "amount" : 9000
    }, {
      "id" : 2,
      "amount" : 11000
    } ]
  } ]
}

6.3.2. 응답

{
  "expenses" : [ {
    "id" : 1,
    "amount" : 100000,
    "content" : "하이디라오",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 50000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 50000
    } ]
  }, {
    "id" : 2,
    "amount" : 20000,
    "content" : "카페",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 9000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 11000
    } ]
  } ]
}

6.3.3. 응답 - 존재하지 않는 참여자

{
  "status" : 404,
  "message" : "해당 참여자를 찾을 수 없습니다. (GroupMember ID: 1)"
}

7. 전체 지출 내역 조회

모임의 전체 지출 내역을 조회할 수 있습니다.

  • 조회시 날짜를 기준으로 오름차순으로 조회됩니다.

  • 참여자의 지출 내역까지 함께 조회됩니다.

7.1. Example

$ curl 'https://moddo.kro.kr/api/v1/expenses?groupToken=groupToken' -i -X GET

7.2. HTTP

7.2.1. 요청

GET /api/v1/expenses?groupToken=groupToken HTTP/1.1
Host: moddo.kro.kr

7.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 2272

{
  "expenses" : [ {
    "id" : 1,
    "amount" : 100000,
    "content" : "지출",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 1000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 50000
    } ]
  }, {
    "id" : 2,
    "amount" : 22000,
    "content" : "카페",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 10000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 12000
    } ]
  }, {
    "id" : 3,
    "amount" : 210000,
    "content" : "향수공방",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 70000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 70000
    }, {
      "id" : 3,
      "role" : "PARTICIPANT",
      "name" : "연노른자",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/2.png",
      "amount" : 70000
    } ]
  }, {
    "id" : 4,
    "amount" : 36000,
    "content" : "간술",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 12000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 12000
    }, {
      "id" : 3,
      "role" : "PARTICIPANT",
      "name" : "연노른자",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/2.png",
      "amount" : 12000
    } ]
  } ]
}

7.3. Body

7.3.1. 응답

{
  "expenses" : [ {
    "id" : 1,
    "amount" : 100000,
    "content" : "지출",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 1000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 50000
    } ]
  }, {
    "id" : 2,
    "amount" : 22000,
    "content" : "카페",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 10000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 12000
    } ]
  }, {
    "id" : 3,
    "amount" : 210000,
    "content" : "향수공방",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 70000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 70000
    }, {
      "id" : 3,
      "role" : "PARTICIPANT",
      "name" : "연노른자",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/2.png",
      "amount" : 70000
    } ]
  }, {
    "id" : 4,
    "amount" : 36000,
    "content" : "간술",
    "date" : "2025-02-03",
    "memberExpenses" : [ {
      "id" : 1,
      "role" : "MANAGER",
      "name" : "김모또",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
      "amount" : 12000
    }, {
      "id" : 2,
      "role" : "PARTICIPANT",
      "name" : "군계란",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
      "amount" : 12000
    }, {
      "id" : 3,
      "role" : "PARTICIPANT",
      "name" : "연노른자",
      "profile" : "https://moddo-s3.s3.amazonaws.com/profile/2.png",
      "amount" : 12000
    } ]
  } ]
}

7.3.2. 응답 -

8. 단일 지출 내역 조회

지출 내역 하나를 조회할 수 있습니다.

8.1. Example

$ curl 'https://moddo.kro.kr/api/v1/expenses/1?groupToken=groupToken' -i -X GET

8.2. HTTP

8.2.1. 요청

GET /api/v1/expenses/1?groupToken=groupToken HTTP/1.1
Host: moddo.kro.kr

8.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 271

{
  "id" : 1,
  "amount" : 25000,
  "content" : "카페",
  "date" : "2025-02-03",
  "memberExpenses" : [ {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "amount" : 12000
  } ]
}

8.3. Body

8.3.1. 응답

{
  "id" : 1,
  "amount" : 25000,
  "content" : "카페",
  "date" : "2025-02-03",
  "memberExpenses" : [ {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "amount" : 12000
  } ]
}

8.3.2. 응답 - 찾을 수 없는 지출내역

{
  "status" : 404,
  "message" : "해당 지출내역을 찾을 수 없습니다. (Expense ID: 1)"
}

9. 지출 상세 내역 조회

정산 내역의 전체 정산 내역을 조회합니다.

  • 조회시 날짜를 기준으로 오름차순으로 정렬됩니다.

  • 참여자의 이름을 List값으로 가져옵니다.

9.1. Example

$ curl 'https://moddo.kro.kr/api/v1/expenses/details?groupToken=groupToken' -i -X GET

9.2. HTTP

9.2.1. 요청

GET /api/v1/expenses/details?groupToken=groupToken HTTP/1.1
Host: moddo.kro.kr

9.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 700

{
  "expenses" : [ {
    "id" : 1,
    "date" : "2025-02-03",
    "content" : "하이디라오",
    "totalAmount" : 100000,
    "groupMembers" : [ "김모또(총무)", "김반숙" ]
  }, {
    "id" : 2,
    "date" : "2025-02-03",
    "content" : "카페",
    "totalAmount" : 22000,
    "groupMembers" : [ "김모또(총무)", "김반숙" ]
  }, {
    "id" : 3,
    "date" : "2025-02-03",
    "content" : "향수공방",
    "totalAmount" : 210000,
    "groupMembers" : [ "김모또(총무)", "김반숙", "정에그" ]
  }, {
    "id" : 4,
    "date" : "2025-02-03",
    "content" : "간술",
    "totalAmount" : 36000,
    "groupMembers" : [ "김모또(총무)", "김반숙", "정에그" ]
  } ]
}

9.3. Body

9.3.1. 응답

{
  "expenses" : [ {
    "id" : 1,
    "date" : "2025-02-03",
    "content" : "하이디라오",
    "totalAmount" : 100000,
    "groupMembers" : [ "김모또(총무)", "김반숙" ]
  }, {
    "id" : 2,
    "date" : "2025-02-03",
    "content" : "카페",
    "totalAmount" : 22000,
    "groupMembers" : [ "김모또(총무)", "김반숙" ]
  }, {
    "id" : 3,
    "date" : "2025-02-03",
    "content" : "향수공방",
    "totalAmount" : 210000,
    "groupMembers" : [ "김모또(총무)", "김반숙", "정에그" ]
  }, {
    "id" : 4,
    "date" : "2025-02-03",
    "content" : "간술",
    "totalAmount" : 36000,
    "groupMembers" : [ "김모또(총무)", "김반숙", "정에그" ]
  } ]
}

10. 지출 내역 수정

지출 내역을 수정할 수 있습니다.

  • id = expenseId

10.1. Example

$ curl 'https://moddo.kro.kr/api/v1/expenses/1?groupToken=groupToken' -i -X PUT \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "amount" : 28000,
  "content" : "카페",
  "date" : "2025-02-02",
  "memberExpenses" : [ {
    "id" : 1,
    "amount" : 14000
  }, {
    "id" : 2,
    "amount" : 14000
  } ]
}'
$ echo '{
  "amount" : 28000,
  "content" : "카페",
  "date" : "2025-02-02",
  "memberExpenses" : [ {
    "id" : 1,
    "amount" : 14000
  }, {
    "id" : 2,
    "amount" : 14000
  } ]
}' | http PUT 'https://moddo.kro.kr/api/v1/expenses/1?groupToken=groupToken' \
    'Content-Type:application/json;charset=UTF-8'

10.2. HTTP

10.2.1. 요청

PUT /api/v1/expenses/1?groupToken=groupToken HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 180
Host: moddo.kro.kr

{
  "amount" : 28000,
  "content" : "카페",
  "date" : "2025-02-02",
  "memberExpenses" : [ {
    "id" : 1,
    "amount" : 14000
  }, {
    "id" : 2,
    "amount" : 14000
  } ]
}

10.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 434

{
  "id" : 1,
  "amount" : 28000,
  "content" : "카페",
  "date" : "2025-02-02",
  "memberExpenses" : [ {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "amount" : 14000
  }, {
    "id" : 2,
    "role" : "PARTICIPANT",
    "name" : "김반숙",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
    "amount" : 14000
  } ]
}

10.3. Body

10.3.1. 요청

{
  "amount" : 28000,
  "content" : "카페",
  "date" : "2025-02-02",
  "memberExpenses" : [ {
    "id" : 1,
    "amount" : 14000
  }, {
    "id" : 2,
    "amount" : 14000
  } ]
}

10.3.2. 응답

{
  "id" : 1,
  "amount" : 28000,
  "content" : "카페",
  "date" : "2025-02-02",
  "memberExpenses" : [ {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "amount" : 14000
  }, {
    "id" : 2,
    "role" : "PARTICIPANT",
    "name" : "김반숙",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
    "amount" : 14000
  } ]
}

10.3.3. 응답 - 찾을 수 없는 지출내역

{
  "status" : 404,
  "message" : "해당 지출내역을 찾을 수 없습니다. (Expense ID: 1)"
}

11. 지출 내역 삭제

지출 내역을 삭제합니다.

11.1. Example

$ curl 'https://moddo.kro.kr/api/v1/expenses/1' -i -X DELETE \
    -d 'groupToken=groupToken'

11.2. HTTP

11.2.1. 요청

DELETE /api/v1/expenses/1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: moddo.kro.kr
Content-Length: 21

groupToken=groupToken

11.2.2. 응답

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers

12. 지출 이미지 URL 수정

지출 내역별 이미지 URL을 업데이트할 수 있습니다.

12.1. Example

$ curl 'https://moddo.kro.kr/api/v1/expenses/img/1?groupToken=groupToken' -i -X PUT \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "images" : [ "https://moddo.kro.kr", "https://moddo.kro.kr" ]
}'

12.2. HTTP

12.2.1. 요청

PUT /api/v1/expenses/img/1?groupToken=groupToken HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 67
Host: moddo.kro.kr

{
  "images" : [ "https://moddo.kro.kr", "https://moddo.kro.kr" ]
}

12.2.2. 응답

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

12.3. Body

12.3.1. 요청

{
  "images" : [ "https://moddo.kro.kr", "https://moddo.kro.kr" ]
}

모임 (Group)

13. 모임 생성

모임을 생성할 수 있습니다.

  • 모임을 생성하는 사용자의 accessToken을 넣어준다.

  • 만들고자하는 모임의 이름과 비밀번호를 넣어준다.

  • 생성된 모임의 Id, 생성자(정산 담당자)의 Id, 생성 시간, 만료 시간, 계좌 여부를 알 수 있다.

  • 비회원이 생성한 모임은 1달 후 자동 삭제된다.

13.1. Example

$ curl 'https://moddo.kro.kr/api/v1/group' -i -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "name" : "모또 모임",
  "password" : "1234"
}'

13.2. HTTP

13.2.1. 요청

POST /api/v1/group HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 53
Host: moddo.kro.kr

{
  "name" : "모또 모임",
  "password" : "1234"
}

13.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 257

{
  "groupToken" : "groupToken",
  "manager" : {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "isPaid" : true,
    "paidAt" : "2025-08-09T13:21:28.624344004"
  }
}

13.3. Body

13.3.1. 요청

{
  "name" : "모또 모임",
  "password" : "1234"
}

13.3.2. 응답

{
  "groupToken" : "groupToken",
  "manager" : {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "isPaid" : true,
    "paidAt" : "2025-08-09T13:21:28.624344004"
  }
}

14. 계좌 추가

은행과 계좌 정보를 추가할 수 있습니다.

14.1. Example

$ curl 'https://moddo.kro.kr/api/v1/group/account?groupToken=groupToken' -i -X PUT \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "bank" : "우리은행",
  "accountNumber" : "1111-1111"
}'

14.2. HTTP

14.2.1. 요청

PUT /api/v1/group/account?groupToken=groupToken HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 62
Host: moddo.kro.kr

{
  "bank" : "우리은행",
  "accountNumber" : "1111-1111"
}

14.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 236

{
  "id" : 1,
  "writer" : 1,
  "createdAt" : "2025-08-09T13:21:28.688529749",
  "expiredAt" : "2025-09-09T13:21:28.688537343",
  "bank" : "우리은행",
  "accountNumber" : "1111-1111",
  "deadline" : "2025-08-10T13:21:28.688572279"
}

14.3. Body

14.3.1. 요청

{
  "bank" : "우리은행",
  "accountNumber" : "1111-1111"
}

14.3.2. 응답

{
  "id" : 1,
  "writer" : 1,
  "createdAt" : "2025-08-09T13:21:28.688529749",
  "expiredAt" : "2025-09-09T13:21:28.688537343",
  "bank" : "우리은행",
  "accountNumber" : "1111-1111",
  "deadline" : "2025-08-10T13:21:28.688572279"
}

15. 비밀번호 검증

비밀번호를 검증할 수 있습니다.

15.1. Example

$ curl 'https://moddo.kro.kr/api/v1/group/password?groupToken=groupToken' -i -X POST \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "password" : "1234"
}'

15.2. HTTP

15.2.1. 요청

POST /api/v1/group/password?groupToken=groupToken HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 25
Host: moddo.kro.kr

{
  "password" : "1234"
}

15.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 41

{
  "status" : "확인되었습니다."
}

15.3. Body

15.3.1. 요청

{
  "password" : "1234"
}

15.3.2. 응답

{
  "status" : "확인되었습니다."
}

16. 모임 조회

모임과 참가자를 조회할 수 있습니다.

16.1. Example

$ curl 'https://moddo.kro.kr/api/v1/group?groupToken=groupToken' -i -X GET

16.2. HTTP

16.2.1. 요청

GET /api/v1/group?groupToken=groupToken HTTP/1.1
Host: moddo.kro.kr

16.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 275

{
  "id" : 1,
  "groupName" : "모또 모임",
  "members" : [ {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "isPaid" : true,
    "paidAt" : "2025-08-09T13:21:28.724496272"
  } ]
}

16.3. Body

16.3.1. 응답

{
  "id" : 1,
  "groupName" : "모또 모임",
  "members" : [ {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "isPaid" : true,
    "paidAt" : "2025-08-09T13:21:28.724496272"
  } ]
}

17. 모임 상단 조회

지출 내역의 상단 부분을 조회할 수 있습니다.

17.1. Example

$ curl 'https://moddo.kro.kr/api/v1/group/header?groupToken=groupToken' -i -X GET

17.2. HTTP

17.2.1. 요청

GET /api/v1/group/header?groupToken=groupToken HTTP/1.1
Host: moddo.kro.kr

17.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 168

{
  "groupName" : "모또 모임",
  "totalAmount" : 10000,
  "deadline" : "2025-08-10T13:21:28.660180914",
  "bank" : "우리은행",
  "accountNumber" : "1111-1111"
}

17.3. Body

17.3.1. 응답

{
  "groupName" : "모또 모임",
  "totalAmount" : 10000,
  "deadline" : "2025-08-10T13:21:28.660180914",
  "bank" : "우리은행",
  "accountNumber" : "1111-1111"
}

모임원 (GroupMember)

18. 모임원 추가

기존 모임 참여자에 새로운 모임 참여자를 추가할 수 있습니다.

Enum

  • MANAGER: 총무

  • PARTICIPANT: 참여자

18.1. Example

$ curl 'https://moddo.kro.kr/api/v1/group-members?groupToken=groupToken' -i -X PUT \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "name" : "김반숙"
}'

18.2. HTTP

18.2.1. 요청

PUT /api/v1/group-members?groupToken=groupToken HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 26
Host: moddo.kro.kr

{
  "name" : "김반숙"
}

18.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 168

{
  "id" : 1,
  "role" : "PARTICIPANT",
  "name" : "김반숙",
  "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
  "isPaid" : false,
  "paidAt" : null
}

18.3. Body

18.3.1. 요청

{
  "name" : "김반숙"
}

18.3.2. 응답

{
  "id" : 1,
  "role" : "PARTICIPANT",
  "name" : "김반숙",
  "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
  "isPaid" : false,
  "paidAt" : null
}

19. 결제 상태 변경

모임원의 결제 상태를 변경할 수 있습니다.

19.1. Example

$ curl 'https://moddo.kro.kr/api/v1/group-members/1/payment?groupToken=groupToken' -i -X PUT \
    -H 'Content-Type: application/json;charset=UTF-8' \
    -d '{
  "isPaid" : true
}'

19.2. HTTP

19.2.1. 요청

PUT /api/v1/group-members/1/payment?groupToken=groupToken HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 21
Host: moddo.kro.kr

{
  "isPaid" : true
}

19.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 194

{
  "id" : 1,
  "role" : "PARTICIPANT",
  "name" : "김반숙",
  "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
  "isPaid" : true,
  "paidAt" : "2025-08-09T13:21:29.510297049"
}

19.3. Body

19.3.1. 요청

{
  "isPaid" : true
}

19.3.2. 응답

{
  "id" : 1,
  "role" : "PARTICIPANT",
  "name" : "김반숙",
  "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
  "isPaid" : true,
  "paidAt" : "2025-08-09T13:21:29.510297049"
}

20. 모임원 삭제

참여자Id를 통해 참여자를 삭제할 수 있습니다.

  • 단, 총무 참여자의 경우 삭제할 수 없습니다.

20.1. Example

$ curl 'https://moddo.kro.kr/api/v1/group-members/1' -i -X DELETE

20.2. HTTP

20.2.1. 요청

DELETE /api/v1/group-members/1 HTTP/1.1
Host: moddo.kro.kr

20.2.2. 응답

HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers

이미지 (Image)

21. 이미지 임시 저장

지출내역 작성 완료 전, 임시로 이미지를 저장할 수 있습니다.

21.1. Example

$ curl 'https://moddo.kro.kr/api/v1/images/temp' -i -X POST \
    -H 'Content-Type: multipart/form-data;charset=UTF-8' \
    -F 'file=@image1.jpg;type=image/jpeg' \
    -F 'file=@image2.jpg;type=image/jpeg'

21.2. HTTP

21.2.1. 요청

POST /api/v1/images/temp HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: moddo.kro.kr

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=file; filename=image1.jpg
Content-Type: image/jpeg

image-data
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=file; filename=image2.jpg
Content-Type: image/jpeg

image-data
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--

21.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 39

{
  "uniqueKeys" : [ "key1", "key2" ]
}

21.3. Body

21.3.1. 응답

{
  "uniqueKeys" : [ "key1", "key2" ]
}

22. 이미지 실제 저장

지출내역 작성 후, 임시로 저장된 이미지를 실제 폴더에 업로드할 수 있습니다.

22.1. Example

$ curl 'https://moddo.kro.kr/api/v1/images/update' -i -X POST \
    -d 'uniqueKey=key1&uniqueKey=key2'

22.2. HTTP

22.2.1. 요청

POST /api/v1/images/update HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: moddo.kro.kr
Content-Length: 29

uniqueKey=key1&uniqueKey=key2

22.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 74

{
  "paths" : [ "https://bucket.s3.amazonaws.com/permanent/image1.jpg" ]
}

22.3. Body

22.3.1. 응답

{
  "paths" : [ "https://bucket.s3.amazonaws.com/permanent/image1.jpg" ]
}

모임원별 상세 지출 내역 (MemberExpenses)

23. 모임원별 상세 지출 내역 조회

받을 정산 내역의 참여자별 정산 내역 조회 기능입니다.

  • 입금순, 이름순으로 정렬되어 조회됩니다.

23.1. Example

$ curl 'https://moddo.kro.kr/api/v1/member-expenses?groupToken=mockedGroupToken' -i -X GET \
    -H 'Content-Type: application/json;charset=UTF-8'

23.2. HTTP

23.2.1. 요청

GET /api/v1/member-expenses?groupToken=mockedGroupToken HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: moddo.kro.kr

23.2.2. 응답

HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json;charset=UTF-8
Content-Length: 637

{
  "memberExpenses" : [ {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "totalAmount" : 10000,
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "isPaid" : true,
    "paidAt" : "2025-08-09T13:21:31.191520673",
    "expenses" : [ {
      "content" : "카페",
      "amount" : 10000
    } ]
  }, {
    "id" : 2,
    "role" : "PARTICIPANT",
    "name" : "군계란",
    "totalAmount" : 10000,
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
    "isPaid" : false,
    "paidAt" : null,
    "expenses" : [ {
      "content" : "카페",
      "amount" : 10000
    } ]
  } ]
}

23.3. Body

23.3.1. 응답

{
  "memberExpenses" : [ {
    "id" : 1,
    "role" : "MANAGER",
    "name" : "김모또",
    "totalAmount" : 10000,
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
    "isPaid" : true,
    "paidAt" : "2025-08-09T13:21:31.191520673",
    "expenses" : [ {
      "content" : "카페",
      "amount" : 10000
    } ]
  }, {
    "id" : 2,
    "role" : "PARTICIPANT",
    "name" : "군계란",
    "totalAmount" : 10000,
    "profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
    "isPaid" : false,
    "paidAt" : null,
    "expenses" : [ {
      "content" : "카페",
      "amount" : 10000
    } ]
  } ]
}