PUT /ai/progress-table/items/bulk/user/matching-status
사용자 대량 매칭 상태 업데이트
대량 매칭 상태 업데이트 (사용자)
여러 항목의 매칭 상태를 한번에 업데이트합니다.
CREATOR_MATCHING 단계 전환 조건
- 비즈니스/관리자 모두 초기 결제금액의 80% 이상 예산이 사용된 경우에만
CREATOR_MATCHING(협업 상세 협의)으로 전환 - 80% 미달 시 매칭 상태 변경 자체는 정상 처리되나 단계 전환은 보류
- 응답의
budgetWarning: true이면 80% 미달 상태 - 관리자가 단계를 강제 전환하려면
PATCH /ai/admin/dashboard/{campaignNo}/substep사용
데모(목업) 후보도 이 API 로 예비·제외·대기를 설정합니다. itemIds 에 dummyItems[].id(1억 오프셋)를
실제 신청 ID 와 섞어 보내도 됩니다 — 서버가 갈라냅니다.
데모는 상태를 표시용으로만 기록합니다 — 매칭·배송 테이블 생성이나 예산 UNLOCK 같은 부수효과가
없습니다. 참고로 선정(matched)은 이 API 가 아니라
proposal-with-charge 담당입니다.
자세한 내용은 데모(목업) 후보 연동 가이드를 참고하세요.
제외(eliminated) 시 예비(reserved) 자동 승계
선정 인원의 계약이 불발되어 eliminated(제외)로 처리하면, 모집인원(Collab.person) 대비 빈자리만큼
예비(reserved)를 금액 높은순으로 자동 승계합니다 — 예비를 제안(proposal)으로 전환하고 계약서를 발송합니다.
- 캠페인 예산이 부족한 예비는 건너뛰고 다음 금액순 예비로 넘어갑니다(기업 글로벌 크레딧은 사용하지 않음).
- 캠페인 결과 취합(
RESULT_SUMMARY) 단계부터는 승계하지 않으며, 이 단계 진입 시 남은 예비는 미선정(rejected)으로 정리됩니다. - 전원 서명이 완료되기 전까지 예비는 미선정 처리되지 않고 유지됩니다.
노출 후보(exposureCandidate) — 관리자 전용 상태
관리자가 기업에 노출하기 전에 후보를 찍어두는 상태입니다. 그동안 이 용도로 예비(reserved)를
쓰면서 기업쪽 예비와 혼동되던 것을 갈라내려고 만든 값입니다.
- 관리자만 설정할 수 있습니다. 기업이 보내면 거부됩니다.
- 레거시 캠페인은 지원하지 않습니다.
- 이미 노출된 신청은 건너뜁니다. 노출 후보는 노출 전에만 쓰는 표시라 노출된 시점에 역할이 끝나기
때문입니다. 해당 건은 기존 상태를 그대로 유지하고 응답
updatedItemIds에서 빠지며,skippedItemIds에 담기고message에도 사유가 표시됩니다 (배치 전체가 실패하지는 않습니다). - 기업·크리에이터 응답에는 대기(
waiting)로 마스킹되어 나갑니다. - 실제로 노출되면 대기로 자동 전환됩니다 — 리스트 관리 벌크 업데이트 참고.
노출 변경과 같이 저장해도 됩니다 — 단, 리스트 관리 API 를 먼저 호출해야 합니다.
어드민 저장은 리스트 관리 API(노출)가 먼저, 이 API(매칭 상태)가 나중에 나갑니다. 이 순서에서는 노출 후보 지정을 노출 변경과 한 번에 보내도 결과가 의도대로 나옵니다.
- 후보 지정 + 노출 켜기: 노출이 켜진 뒤 후보 지정은 건너뛰어 노출됨 + 대기가 됩니다. 후보 지정을 먼저 했더라도 노출 시 대기로 자동 전환되므로 결과는 같습니다. (애초에 "노출된 노출 후보"는 성립하지 않습니다.)
- 후보 지정 + 노출 끄기: 노출이 먼저 꺼지므로 후보 지정이 정상 반영되어 미노출 + 노출 후보가 됩니다.
두 API 의 호출 순서를 뒤집으면 후자가 깨집니다(노출을 끄기 전에 후보 지정이 들어와 건너뛰어짐). 리스트 관리 API 를 먼저 호출하는 현재 순서를 유지하세요.
HTTP 요청
PUT /ai/progress-table/items/bulk/user/matching-status
Authorization: Bearer {access_token}
Content-Type: application/jsonRequest Body
{
"collabId": 123,
"itemIds": [1, 2, 3, 4, 5],
"matchingStatus": "proposal"
}matchingStatus 허용값
| 값 | 의미 | 권한 |
|---|---|---|
waiting | 대기 | 기업·관리자 |
matched | 선정 | 기업·관리자 |
proposal | 제안 | 기업·관리자 |
reserved | 예비 | 기업·관리자 |
eliminated | 제외 | 기업·관리자 |
exposureCandidate | 노출 후보 | 관리자만 (비레거시 캠페인 한정) |
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "대량 매칭 상태 업데이트가 완료되었습니다.",
"data": {
"success": true,
"updatedItemIds": [1, 2, 3, 4, 5],
"budgetWarning": false,
"budgetUsagePercentage": 85.0
}
}Response Body 스키마
| 필드명 | 타입 | 설명 |
|---|---|---|
success | boolean | 처리 성공 여부 |
updatedItemIds | array<long> | 업데이트된 항목 ID 목록 |
skippedItemIds | array<long> | 조건이 맞지 않아 건너뛴 항목 ID 목록. 현재는 "이미 노출되어 노출 후보로 지정할 수 없는 신청"이 담긴다. 비어있지 않으면 화면에 사유를 알려야 한다 — success 는 true 이므로 그냥 두면 아무것도 안 바뀐 요청이 성공으로만 보인다 |
budgetWarning | boolean | 예산 80% 미달 경고 (true면 CREATOR_MATCHING 전환 보류) |
budgetUsagePercentage | double | 현재 예산 사용률 (%) |