인증 (Auth)
1. 게스트 토큰 발급
비회원의 토큰을 발급받을 수 있습니다.
-
비회원 토큰의 만료일은 발급일로부터 1개월입니다.
1.1. Example
$ curl 'https://api.moddo.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: api.moddo.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" : "2026-05-02 14:40:20",
"isMember" : false
}
1.3. Body
1.3.1. 응답
{
"accessToken" : "access-token",
"refreshToken" : "refresh-token",
"expiredAt" : "2026-05-02 14:40:20",
"isMember" : false
}
2. 액세스 토큰 재발급
`refreshToken`을 사용해 `accessToken`을 재발급받을 수 있습니다.
2.1. Example
$ curl 'https://api.moddo.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: api.moddo.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://api.moddo.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: api.moddo.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://api.moddo.kr/api/v1/logout' -i -X POST \
--cookie 'accessToken=access-token'
4.2. HTTP
4.2.1. 요청
POST /api/v1/logout HTTP/1.1
Host: api.moddo.kr
Cookie: accessToken=access-token
Content-Type: application/x-www-form-urlencoded
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"
}
5. 카카오 탈퇴
카카오 소셜 로그인 사용자의 서비스 탈퇴를 처리할 수 있습니다.
5.1. Example
$ curl 'https://api.moddo.kr/api/v1/unlink' -i -X DELETE \
--cookie 'accessToken=access-token'
5.2. HTTP
5.2.1. 요청
DELETE /api/v1/unlink HTTP/1.1
Host: api.moddo.kr
Cookie: accessToken=access-token
5.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" : "Unlink successful"
}
5.3. Body
5.3.1. 응답
{
"message" : "Unlink successful"
}
6. 토큰 상태 확인
쿠키에 담긴 토큰의 유효성을 확인합니다.
6.1. Example
GET /api/v1/auth/check HTTP/1.1
Host: api.moddo.kr
Cookie: accessToken=valid-token
6.2. HTTP
6.2.1. 요청
$ curl 'https://api.moddo.kr/api/v1/auth/check' -i -X GET \
--cookie 'accessToken=valid-token'
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: 80
{
"authenticated" : true,
"user" : {
"id" : 1,
"role" : "USER"
}
}
6.3. Body
6.3.1. 응답 (valid)
{
"authenticated" : true,
"user" : {
"id" : 1,
"role" : "USER"
}
}
6.3.2. 응답 (invalid)
{
"authenticated" : false,
"reason" : "TOKEN_EXPIRED"
}
{
"authenticated" : false,
"reason" : "INVALID_TOKEN"
}
사용자 (User)
7. 사용자 정보 조회
로그인한 사용자의 정보를 조회할 수 있습니다.
7.1. Example
$ curl 'https://api.moddo.kr/api/v1/user' -i -X GET \
-H 'Content-Type: application/json;charset=UTF-8'
7.2. HTTP
7.2.1. 요청
GET /api/v1/user HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: api.moddo.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: 128
{
"name" : "김모또",
"email" : "moddo@example.com",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png"
}
7.3. Body
7.3.1. 요청
7.3.2. 응답
{
"name" : "김모또",
"email" : "moddo@example.com",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png"
}
캐릭터 (Character)
8. 캐릭터 조회
모임의 캐릭터를 조회할 수 있습니다.
-
★: 러키 모또
-
★★: 천사 모또 / 딸기 또또
-
★★★: 마법사 또또 / 잠꾸러기 또또
8.1. Example
$ curl 'https://api.moddo.kr/api/v1/character?code=groupCode' -i -X GET \
-H 'Accept: application/json'
8.2. HTTP
8.2.1. 요청
GET /api/v1/character?code=groupCode HTTP/1.1
Accept: application/json
Host: api.moddo.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: 229
{
"id" : 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"
}
8.3. Body
8.3.1. 응답
{
"id" : 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"
}
8.3.2. 응답 - 유효하지 않은 그룹 토큰
{
"status" : 401,
"message" : "토큰이 유효하지 않습니다."
}
8.3.3. 응답 - 누락된 그룹 토큰
{
"status" : 401,
"message" : "토큰이 없습니다."
}
도감 (Collection)
9. 도감 조회
로그인한 사용자의 캐릭터 수집 현황을 조회할 수 있습니다.
9.1. Example
$ curl 'https://api.moddo.kr/api/v1/collections' -i -X GET \
-H 'Content-Type: application/json;charset=UTF-8'
9.2. HTTP
9.2.1. 요청
GET /api/v1/collections HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: api.moddo.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: 201
{
"collections" : [ {
"id" : 1,
"name" : "모또",
"rarity" : 1,
"acquiredAt" : "2026-04-02T14:40:25.888599321",
"imageUrl" : "imageUrl",
"imageBigUrl" : "imageBigUrl"
} ]
}
9.3. Body
9.3.1. 응답
{
"collections" : [ {
"id" : 1,
"name" : "모또",
"rarity" : 1,
"acquiredAt" : "2026-04-02T14:40:25.888599321",
"imageUrl" : "imageUrl",
"imageBigUrl" : "imageBigUrl"
} ]
}
지출 (Expense)
10. 지출 내역 추가
지출 내역을 생성할 수 있습니다.
10.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/expenses' -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
} ]
} ]
}'
10.2. HTTP
10.2.1. 요청
POST /api/v1/groups/code/expenses HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 224
Host: api.moddo.kr
{
"expenses" : [ {
"amount" : 20000,
"content" : "카페",
"date" : "2025-02-03",
"memberExpenses" : [ {
"id" : 1,
"amount" : 9000
}, {
"id" : 2,
"amount" : 11000
} ]
} ]
}
Unresolved directive in expense.adoc - include::/home/runner/work/moddo-backend/moddo-backend/build/generated-snippets/expense-controller-test/create-expense/path-parameters.adoc[]
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: 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
} ]
} ]
}
10.3. Body
10.3.1. 요청
{
"expenses" : [ {
"amount" : 20000,
"content" : "카페",
"date" : "2025-02-03",
"memberExpenses" : [ {
"id" : 1,
"amount" : 9000
}, {
"id" : 2,
"amount" : 11000
} ]
} ]
}
10.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
} ]
} ]
}
10.3.3. 응답 - 존재하지 않는 참여자
{
"status" : 404,
"message" : "해당 참여자를 찾을 수 없습니다."
}
11. 전체 지출 내역 조회
모임의 전체 지출 내역을 조회할 수 있습니다.
-
날짜 기준 오름차순으로 조회됩니다.
-
참여자별 지출 내역도 함께 조회됩니다.
11.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/expenses' -i -X GET
11.2. HTTP
11.2.1. 요청
GET /api/v1/groups/code/expenses HTTP/1.1
Host: api.moddo.kr
11.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
} ]
} ]
}
11.3. Body
11.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
} ]
} ]
}
12. 단일 지출 내역 조회
지출 내역 하나를 조회할 수 있습니다.
12.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/expenses/1' -i -X GET
12.2. HTTP
12.2.1. 요청
GET /api/v1/groups/code/expenses/1 HTTP/1.1
Host: api.moddo.kr
Unresolved directive in expense.adoc - include::/home/runner/work/moddo-backend/moddo-backend/build/generated-snippets/expense-controller-test/get-by-expense-id-success/path-parameters.adoc[]
12.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
} ]
}
12.3. Body
12.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
} ]
}
12.3.2. 응답 - 찾을 수 없는 지출 내역
{
"status" : 404,
"message" : "해당 지출내역을 찾을 수 없습니다. (Expense ID: 1)"
}
13. 지출 상세 내역 조회
정산의 전체 지출 상세 내역을 조회할 수 있습니다.
-
날짜 기준 오름차순으로 정렬됩니다.
-
참여자 이름은 목록 형태로 제공됩니다.
13.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/expenses/details' -i -X GET
13.2. HTTP
13.2.1. 요청
GET /api/v1/groups/code/expenses/details HTTP/1.1
Host: api.moddo.kr
Unresolved directive in expense.adoc - include::/home/runner/work/moddo-backend/moddo-backend/build/generated-snippets/expense-controller-test/get-expense-details-success/path-parameters.adoc[]
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: 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" : [ "김모또(총무)", "김반숙", "정에그" ]
} ]
}
13.3. Body
13.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" : [ "김모또(총무)", "김반숙", "정에그" ]
} ]
}
14. 지출 내역 수정
지출 내역을 수정할 수 있습니다.
-
경로의 `expenseId`를 기준으로 수정합니다.
14.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/expenses/1' -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://api.moddo.kr/api/v1/groups/code/expenses/1' \
'Content-Type:application/json;charset=UTF-8'
14.2. HTTP
14.2.1. 요청
PUT /api/v1/groups/code/expenses/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 180
Host: api.moddo.kr
{
"amount" : 28000,
"content" : "카페",
"date" : "2025-02-02",
"memberExpenses" : [ {
"id" : 1,
"amount" : 14000
}, {
"id" : 2,
"amount" : 14000
} ]
}
Unresolved directive in expense.adoc - include::/home/runner/work/moddo-backend/moddo-backend/build/generated-snippets/expense-controller-test/update-expense-success/path-parameters.adoc[]
14.2.2. 응답
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
14.3. Body
14.3.1. 요청
{
"amount" : 28000,
"content" : "카페",
"date" : "2025-02-02",
"memberExpenses" : [ {
"id" : 1,
"amount" : 14000
}, {
"id" : 2,
"amount" : 14000
} ]
}
14.3.2. 응답
14.3.3. 응답 - 찾을 수 없는 지출 내역
{
"status" : 404,
"message" : "해당 지출내역을 찾을 수 없습니다. (Expense ID: 1)"
}
15. 지출 내역 삭제
지출 내역을 삭제할 수 있습니다.
15.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/expenses/1' -i -X DELETE
15.2. HTTP
15.2.1. 요청
DELETE /api/v1/groups/code/expenses/1 HTTP/1.1
Host: api.moddo.kr
Unresolved directive in expense.adoc - include::/home/runner/work/moddo-backend/moddo-backend/build/generated-snippets/expense-controller-test/delete-expense-success/path-parameters.adoc[]
15.2.2. 응답
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
16. 지출 이미지 URL 수정
지출 내역별 이미지 URL을 수정할 수 있습니다.
16.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/expenses/1/img' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"images" : [ "https://api.moddo.kr", "https://api.moddo.kr" ]
}'
16.2. HTTP
16.2.1. 요청
PUT /api/v1/groups/code/expenses/1/img HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 67
Host: api.moddo.kr
{
"images" : [ "https://api.moddo.kr", "https://api.moddo.kr" ]
}
Unresolved directive in expense.adoc - include::/home/runner/work/moddo-backend/moddo-backend/build/generated-snippets/expense-controller-test/update-img-url-success/path-parameters.adoc[]
16.2.2. 응답
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
16.3. Body
16.3.1. 요청
{
"images" : [ "https://api.moddo.kr", "https://api.moddo.kr" ]
}
모임 (Settlement)
17. 모임 생성
모임을 생성할 수 있습니다.
-
모임을 생성하는 사용자의 `accessToken`이 필요합니다.
-
생성할 모임의 이름을 요청 본문에 포함합니다.
-
생성된 모임의 ID, 생성자(정산 담당자) ID, 생성 시간, 만료 시간, 계좌 정보를 확인할 수 있습니다.
-
비회원이 생성한 모임은 1개월 후 자동 삭제됩니다.
17.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"name" : "모또 모임"
}'
17.2. HTTP
17.2.1. 요청
POST /api/v1/groups HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 30
Host: api.moddo.kr
{
"name" : "모또 모임"
}
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: 269
{
"groupToken" : "code",
"manager" : {
"id" : 1,
"role" : "MANAGER",
"name" : "김모또",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
"userId" : 1,
"isPaid" : true,
"paidAt" : "2026-04-02T14:40:26.070554486"
}
}
17.3. Body
17.3.1. 요청
{
"name" : "모또 모임"
}
17.3.2. 응답
{
"groupToken" : "code",
"manager" : {
"id" : 1,
"role" : "MANAGER",
"name" : "김모또",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
"userId" : 1,
"isPaid" : true,
"paidAt" : "2026-04-02T14:40:26.070554486"
}
}
18. 계좌 추가
은행과 계좌 정보를 추가하거나 수정할 수 있습니다.
18.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/account' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"bank" : "우리은행",
"accountNumber" : "1111-1111"
}'
18.2. HTTP
18.2.1. 요청
PUT /api/v1/groups/code/account HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 62
Host: api.moddo.kr
{
"bank" : "우리은행",
"accountNumber" : "1111-1111"
}
| Parameter | Description |
|---|---|
|
정산 코드 |
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: 235
{
"id" : 1,
"writer" : 1,
"createdAt" : "2026-04-02T14:40:26.207456035",
"expiredAt" : "2026-05-02T14:40:26.20746426",
"bank" : "우리은행",
"accountNumber" : "1111-1111",
"deadline" : "2026-04-03T14:40:26.207473257"
}
18.3. Body
18.3.1. 요청
{
"bank" : "우리은행",
"accountNumber" : "1111-1111"
}
18.3.2. 응답
{
"id" : 1,
"writer" : 1,
"createdAt" : "2026-04-02T14:40:26.207456035",
"expiredAt" : "2026-05-02T14:40:26.20746426",
"bank" : "우리은행",
"accountNumber" : "1111-1111",
"deadline" : "2026-04-03T14:40:26.207473257"
}
19. 모임 조회
모임 정보와 참여자 목록을 조회할 수 있습니다.
19.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code' -i -X GET
19.2. HTTP
19.2.1. 요청
GET /api/v1/groups/code HTTP/1.1
Host: api.moddo.kr
| Parameter | Description |
|---|---|
|
정산 코드 |
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: 293
{
"id" : 1,
"groupName" : "모또 모임",
"members" : [ {
"id" : 1,
"role" : "MANAGER",
"name" : "김모또",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
"userId" : 1,
"isPaid" : true,
"paidAt" : "2026-04-02T14:40:26.128795464"
} ]
}
19.3. Body
19.3.1. 응답
{
"id" : 1,
"groupName" : "모또 모임",
"members" : [ {
"id" : 1,
"role" : "MANAGER",
"name" : "김모또",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
"userId" : 1,
"isPaid" : true,
"paidAt" : "2026-04-02T14:40:26.128795464"
} ]
}
20. 모임 상단 조회
지출 내역 화면의 상단 정보를 조회할 수 있습니다.
20.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/header' -i -X GET
20.2. HTTP
20.2.1. 요청
GET /api/v1/groups/code/header HTTP/1.1
Host: api.moddo.kr
| Parameter | Description |
|---|---|
|
정산 코드 |
20.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" : "2026-04-03T14:40:26.187909543",
"bank" : "우리은행",
"accountNumber" : "1111-1111"
}
20.3. Body
20.3.1. 응답
{
"groupName" : "모또 모임",
"totalAmount" : 10000,
"deadline" : "2026-04-03T14:40:26.187909543",
"bank" : "우리은행",
"accountNumber" : "1111-1111"
}
21. 모임(정산) 리스트 조회
사용자가 속한 정산 목록을 상태별로 조회할 수 있습니다.
21.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups?status=IN_PROGRESS&sort=LATEST&limit=20' -i -X GET
21.2. HTTP
21.2.1. 요청
GET /api/v1/groups?status=IN_PROGRESS&sort=LATEST&limit=20 HTTP/1.1
Host: api.moddo.kr
| Parameter | Description |
|---|---|
|
정산 상태 (ALL | IN_PROGRESS | COMPLETED) |
|
정렬 방식 (LATEST | OLDEST ) |
|
조회 개수 제한(min=1, max=100) |
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: 231
[ {
"groupId" : 1,
"groupCode" : "groupCode",
"name" : "모또 모임",
"totalAmount" : 10000,
"totalMemberCount" : 5,
"completedMemberCount" : 3,
"createdAt" : "2026-02-22T18:14:13.285872",
"completedAt" : null
} ]
21.3. Body
21.3.1. 응답
[ {
"groupId" : 1,
"groupCode" : "groupCode",
"name" : "모또 모임",
"totalAmount" : 10000,
"totalMemberCount" : 5,
"completedMemberCount" : 3,
"createdAt" : "2026-02-22T18:14:13.285872",
"completedAt" : null
} ]
22. 공유 링크 리스트 조회
사용자가 속한 정산의 공유 링크 목록을 조회할 수 있습니다.
22.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/list' -i -X GET
22.2. HTTP
22.2.1. 요청
GET /api/v1/groups/list HTTP/1.1
Host: api.moddo.kr
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: 554
[ {
"settlementId" : 1,
"name" : "모또 모임",
"groupCode" : "groupCode",
"createdAt" : "2026-01-01T12:00:00",
"completedAt" : null,
"members" : [ {
"id" : 1,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : 1,
"isPaid" : false,
"paidAt" : null
} ]
}, {
"settlementId" : 2,
"name" : "두번째 모임",
"groupCode" : "groupCode2",
"createdAt" : "2026-01-02T12:00:00",
"completedAt" : "2026-01-03T12:00:00",
"members" : [ ]
} ]
22.3. Body
22.3.1. 응답
[ {
"settlementId" : 1,
"name" : "모또 모임",
"groupCode" : "groupCode",
"createdAt" : "2026-01-01T12:00:00",
"completedAt" : null,
"members" : [ {
"id" : 1,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : 1,
"isPaid" : false,
"paidAt" : null
} ]
}, {
"settlementId" : 2,
"name" : "두번째 모임",
"groupCode" : "groupCode2",
"createdAt" : "2026-01-02T12:00:00",
"completedAt" : "2026-01-03T12:00:00",
"members" : [ ]
} ]
모임원 (Member)
23. 모임원 조회
정산에 속한 전체 모임원을 조회할 수 있습니다.
-
`userId`는 해당 모임원에 연결된 사용자 ID입니다.
-
아직 로그인 사용자가 선택하지 않은 참여자는 `userId`가 `null`로 내려갑니다.
-
`sortType`으로 정렬 기준을 지정할 수 있으며 기본값은 `CREATED`입니다.
23.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/members?sortType=CREATED' -i -X GET
23.2. HTTP
23.2.1. 요청
GET /api/v1/groups/code/members?sortType=CREATED HTTP/1.1
Host: api.moddo.kr
| Parameter | Description |
|---|---|
|
정산 코드 |
| Parameter | Description |
|---|---|
|
정렬 기준 (CREATED | NAME | PAID_AT) |
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: 444
{
"members" : [ {
"id" : 1,
"role" : "MANAGER",
"name" : "김모또",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
"userId" : 10,
"isPaid" : true,
"paidAt" : "2026-03-13T21:30:00"
}, {
"id" : 2,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : null,
"isPaid" : false,
"paidAt" : null
} ]
}
23.3. Body
23.3.1. 응답
{
"members" : [ {
"id" : 1,
"role" : "MANAGER",
"name" : "김모또",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
"userId" : 10,
"isPaid" : true,
"paidAt" : "2026-03-13T21:30:00"
}, {
"id" : 2,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : null,
"isPaid" : false,
"paidAt" : null
} ]
}
24. 모임원 추가
기존 정산에 새로운 모임원을 추가할 수 있습니다.
역할(Enum)
-
MANAGER: 총무 -
PARTICIPANT: 참여자
24.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/members' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"name" : "김반숙"
}'
24.2. HTTP
24.2.1. 요청
POST /api/v1/groups/code/members HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 26
Host: api.moddo.kr
{
"name" : "김반숙"
}
| Parameter | Description |
|---|---|
|
정산 코드 |
24.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: 184
{
"id" : 1,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : 1,
"isPaid" : false,
"paidAt" : null
}
24.3. Body
24.3.1. 요청
{
"name" : "김반숙"
}
24.3.2. 응답
{
"id" : 1,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : 1,
"isPaid" : false,
"paidAt" : null
}
25. 참여자 선택
로그인 사용자가 아직 선택되지 않은 참여자를 선택할 수 있습니다.
-
요청 body에 선택할 `memberId`를 전달합니다.
-
한 사용자는 같은 정산에서 하나의 참여자만 선택할 수 있습니다.
25.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/members/assign' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"memberId" : 2
}'
25.2. HTTP
25.2.1. 요청
POST /api/v1/groups/code/members/assign HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 20
Host: api.moddo.kr
{
"memberId" : 2
}
| Parameter | Description |
|---|---|
|
정산 코드 |
25.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: 184
{
"id" : 2,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : 3,
"isPaid" : false,
"paidAt" : null
}
25.3. Body
25.3.1. 요청
{
"memberId" : 2
}
25.3.2. 응답
{
"id" : 2,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : 3,
"isPaid" : false,
"paidAt" : null
}
26. 참여자 선택 해제
로그인 사용자가 본인이 선택한 참여자를 해제할 수 있습니다.
-
요청 body에 해제할 `memberId`를 전달합니다.
26.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/members/unassign' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"memberId" : 2
}'
26.2. HTTP
26.2.1. 요청
POST /api/v1/groups/code/members/unassign HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 20
Host: api.moddo.kr
{
"memberId" : 2
}
| Parameter | Description |
|---|---|
|
정산 코드 |
26.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: 187
{
"id" : 2,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : null,
"isPaid" : false,
"paidAt" : null
}
26.3. Body
26.3.1. 요청
{
"memberId" : 2
}
26.3.2. 응답
{
"id" : 2,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : null,
"isPaid" : false,
"paidAt" : null
}
27. 결제 상태 변경
모임원의 결제 상태를 변경할 수 있습니다.
27.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/members/1' -i -X PUT \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"isPaid" : true
}'
27.2. HTTP
27.2.1. 요청
PUT /api/v1/groups/code/members/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 21
Host: api.moddo.kr
{
"isPaid" : true
}
| Parameter | Description |
|---|---|
|
정산 코드 |
|
모임원 ID |
27.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: 210
{
"id" : 1,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : 1,
"isPaid" : true,
"paidAt" : "2026-04-02T14:40:19.368778347"
}
27.3. Body
27.3.1. 요청
{
"isPaid" : true
}
27.3.2. 응답
{
"id" : 1,
"role" : "PARTICIPANT",
"name" : "김반숙",
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/1.png",
"userId" : 1,
"isPaid" : true,
"paidAt" : "2026-04-02T14:40:19.368778347"
}
28. 모임원 삭제
참여자 ID로 모임원을 삭제할 수 있습니다.
-
총무(
MANAGER)는 삭제할 수 없습니다.
28.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/members/1' -i -X DELETE
28.2. HTTP
28.2.1. 요청
DELETE /api/v1/groups/code/members/1 HTTP/1.1
Host: api.moddo.kr
| Parameter | Description |
|---|---|
|
정산 코드 |
|
삭제할 모임원 ID |
28.2.2. 응답
HTTP/1.1 204 No Content
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
입금 확인 요청 (PaymentRequest)
29. 입금 확인 요청 목록 조회
로그인한 사용자를 대상으로 들어온 입금 확인 요청 목록을 조회할 수 있습니다.
29.1. Example
$ curl 'https://api.moddo.kr/api/v1/payments' -i -X GET
29.2. HTTP
29.2.1. 요청
GET /api/v1/payments HTTP/1.1
Host: api.moddo.kr
29.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: 214
{
"paymentRequests" : [ {
"requestedAt" : "2026-03-13T22:00:00",
"paymentRequestId" : 1,
"memberId" : 2,
"name" : "김반숙",
"profileUrl" : "profile-1.png",
"totalAmount" : 12000
} ]
}
29.3. Body
29.3.1. 응답
{
"paymentRequests" : [ {
"requestedAt" : "2026-03-13T22:00:00",
"paymentRequestId" : 1,
"memberId" : 2,
"name" : "김반숙",
"profileUrl" : "profile-1.png",
"totalAmount" : 12000
} ]
}
30. 입금 확인 요청 생성
정산 참여자가 총무에게 입금 확인 요청을 보낼 수 있습니다.
30.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/code/payments' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8'
30.2. HTTP
30.2.1. 요청
POST /api/v1/groups/code/payments HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: api.moddo.kr
| Parameter | Description |
|---|---|
|
정산 코드 |
30.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: 172
{
"id" : 1,
"settlementId" : 1,
"requestMemberId" : 2,
"targetUserId" : 3,
"requestedAt" : "2026-03-13T22:00:00",
"processedAt" : null,
"status" : "PENDING"
}
30.3. Body
30.3.1. 응답
{
"id" : 1,
"settlementId" : 1,
"requestMemberId" : 2,
"targetUserId" : 3,
"requestedAt" : "2026-03-13T22:00:00",
"processedAt" : null,
"status" : "PENDING"
}
31. 입금 확인 요청 승인
총무가 입금 확인 요청을 승인할 수 있습니다.
31.1. Example
$ curl 'https://api.moddo.kr/api/v1/payments/1/approve' -i -X PATCH
31.2. HTTP
31.2.1. 요청
PATCH /api/v1/payments/1/approve HTTP/1.1
Host: api.moddo.kr
Content-Type: application/x-www-form-urlencoded
| Parameter | Description |
|---|---|
|
입금 확인 요청 ID |
31.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: 190
{
"id" : 1,
"settlementId" : 1,
"requestMemberId" : 2,
"targetUserId" : 1,
"requestedAt" : "2026-03-13T22:00:00",
"processedAt" : "2026-03-13T22:05:00",
"status" : "APPROVED"
}
31.3. Body
31.3.1. 응답
{
"id" : 1,
"settlementId" : 1,
"requestMemberId" : 2,
"targetUserId" : 1,
"requestedAt" : "2026-03-13T22:00:00",
"processedAt" : "2026-03-13T22:05:00",
"status" : "APPROVED"
}
32. 입금 확인 요청 거절
총무가 입금 확인 요청을 거절할 수 있습니다.
32.1. Example
$ curl 'https://api.moddo.kr/api/v1/payments/1/reject' -i -X PATCH
32.2. HTTP
32.2.1. 요청
PATCH /api/v1/payments/1/reject HTTP/1.1
Host: api.moddo.kr
Content-Type: application/x-www-form-urlencoded
| Parameter | Description |
|---|---|
|
입금 확인 요청 ID |
32.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: 190
{
"id" : 1,
"settlementId" : 1,
"requestMemberId" : 2,
"targetUserId" : 1,
"requestedAt" : "2026-03-13T22:00:00",
"processedAt" : "2026-03-13T22:05:00",
"status" : "REJECTED"
}
32.3. Body
32.3.1. 응답
{
"id" : 1,
"settlementId" : 1,
"requestMemberId" : 2,
"targetUserId" : 1,
"requestedAt" : "2026-03-13T22:00:00",
"processedAt" : "2026-03-13T22:05:00",
"status" : "REJECTED"
}
이미지 (Image)
33. 이미지 임시 저장
지출 내역 작성 완료 전에 이미지를 임시 저장할 수 있습니다.
33.1. Example
$ curl 'https://api.moddo.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'
33.2. HTTP
33.2.1. 요청
POST /api/v1/images/temp HTTP/1.1
Content-Type: multipart/form-data;charset=UTF-8; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: api.moddo.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--
33.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" ]
}
33.3. Body
33.3.1. 응답
{
"uniqueKeys" : [ "key1", "key2" ]
}
34. 이미지 실제 저장
지출 내역 작성 후 임시 저장된 이미지를 실제 폴더에 업로드할 수 있습니다.
34.1. Example
$ curl 'https://api.moddo.kr/api/v1/images/update' -i -X POST \
-d 'uniqueKey=key1&uniqueKey=key2'
34.2. HTTP
34.2.1. 요청
POST /api/v1/images/update HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: api.moddo.kr
Content-Length: 29
uniqueKey=key1&uniqueKey=key2
34.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" ]
}
34.3. Body
34.3.1. 응답
{
"paths" : [ "https://bucket.s3.amazonaws.com/permanent/image1.jpg" ]
}
모임원별 상세 지출 내역 (MemberExpenses)
35. 모임원별 상세 지출 내역 조회
받을 정산 금액 기준으로 참여자별 상세 지출 내역을 조회할 수 있습니다.
-
입금 순, 이름 순으로 정렬되어 조회됩니다.
35.1. Example
$ curl 'https://api.moddo.kr/api/v1/groups/mockedCode/member-expenses' -i -X GET \
-H 'Content-Type: application/json;charset=UTF-8'
35.2. HTTP
35.2.1. 요청
GET /api/v1/groups/mockedCode/member-expenses HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: api.moddo.kr
35.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" : "2026-04-02T14:40:24.249136274",
"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
} ]
} ]
}
35.3. Body
35.3.1. 응답
{
"memberExpenses" : [ {
"id" : 1,
"role" : "MANAGER",
"name" : "김모또",
"totalAmount" : 10000,
"profile" : "https://moddo-s3.s3.amazonaws.com/profile/MODDO.png",
"isPaid" : true,
"paidAt" : "2026-04-02T14:40:24.249136274",
"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
} ]
} ]
}