SaaS APIProgress Table
POST /ai/progress-table/items/bulk/selection-request
기업 선정 요청 (관리자 승인 게이트)
기업 선정 요청
선택한 크리에이터의 예산을 잠급니다. 캠페인의 승인 게이트(adminSelectionApprovalEnabled)에 따라 동작이 갈립니다.
2단계 선정 플로우
- 게이트 ON — 예산을 LOCK하고 상태를
PROPOSAL(관리자 승인 대기)로만 바꿉니다. 계약서·알림톡·일정 재계산·단계 전환은 하지 않습니다. 관리자가POST /ai/admin/selection-approval/{collabNo}/approve로 승인해야 계약서가 발송됩니다. - 게이트 OFF — 기존 예산 자동 충전 + 제안 일괄 처리와 동일하게 즉시 확정(계약서 발송까지)됩니다.
게이트가 켜진 캠페인에서는 기존 bulk/proposal-with-charge / bulk/user/matching-status(matchingStatus=proposal)를 기업이 호출하면 403 SELECTION_APPROVAL_REQUIRED로 막힙니다. 반드시 이 API를 사용하세요.
HTTP 요청
POST /ai/progress-table/items/bulk/selection-request
Authorization: Bearer {access_token}
Content-Type: application/jsonRequest Body
{
"collabId": 123,
"itemIds": [1, 2, 3],
"forceCharge": true
}Request Body 스키마
| 필드명 | 타입 | 필수 | 설명 |
|---|---|---|---|
collabId | long | 예 | 캠페인 ID (collabNo) |
itemIds | array<long> | 예 | CampaignApplication ID 목록 |
forceCharge | boolean | 아니오 | 예산 부족 시 글로벌 크레딧에서 자동 충전 여부 (기본: true) |
응답
성공 응답 (200 OK) — 게이트 ON
{
"status": 200,
"code": null,
"message": "선정 요청이 접수되었습니다. 관리자 승인 후 확정됩니다.",
"data": {
"pendingApproval": true,
"pendingApprovalCount": 3,
"result": {
"success": true,
"totalRequested": 3,
"totalProcessed": 3,
"totalAmount": 1500000,
"chargedAmount": 1000000
}
}
}성공 응답 (200 OK) — 게이트 OFF
게이트가 꺼져 있으면 pendingApproval: false, pendingApprovalCount: 0이며 result는 기존 제안 처리 응답과 동일합니다(계약서 발송까지 완료).
Response Body 스키마
| 필드명 | 타입 | 설명 |
|---|---|---|
pendingApproval | boolean | 관리자 승인 대기 상태로 처리됐는지 여부 (게이트 ON이면 true) |
pendingApprovalCount | int | 이번 요청으로 승인 대기가 된 건수 (게이트 OFF면 0) |
result | object | 예산 처리 결과 상세 (BulkProposalWithChargeResponse 와 동일 스키마) |
에러 응답
result.success가 false인 경우 HTTP 400과 함께 result.errorCode를 담아 응답합니다.
| 상태 코드 | 에러 코드 | 설명 |
|---|---|---|
| 400 | BUDGET_001 | 캠페인 예산이 부족합니다 (forceCharge=false일 때) |
| 400 | BUDGET_002 | 기업 크레딧이 부족합니다 |
| 400 | LEGACY_CAMPAIGN | 레거시 캠페인은 이 기능을 사용할 수 없습니다 |