POST /ai/admin/dashboard/{campaignNo}/demo-applicants/manual
데모(목업) 후보 수기 등록
데모(목업) 후보 수기 등록
에이전트 후보 목록에 없는 계정을 어드민이 손으로 만들어 데모 후보로 넣습니다.
에이전트가 발굴한 후보를 담을 때는 POST .../demo-applicants
를 쓰세요. 이 API 는 후보 목록에 없는 계정을 임의로 만들 때만 씁니다.
개념·렌더 규칙·ID 규칙은 연동 가이드를 참고하세요.
HTTP 요청
POST /ai/admin/dashboard/{campaignNo}/demo-applicants/manual
Authorization: Bearer {access_token}
Content-Type: application/jsonPath Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | Long | 예 | 캠페인 번호 |
Request Body
username 만 필수이고 나머지는 전부 선택입니다. 비운 필드는 null 로 남고 나중에 벌크 수정으로 채울 수 있습니다.
{
"username": "creator_jp_1",
"accountLink": "https://www.instagram.com/creator_jp_1/",
"profileImage": null,
"followerCount": 12400,
"reelsAvgViews": 8300,
"matchScore": 0.82,
"fitScore": 0.75,
"estimatedPrice": 300000,
"quotePrice": 300000,
"currentPrice": 250000,
"defaultUnitPrice": 350000,
"proposedPrice": 320000,
"categoryTags": ["뷰티", "라이프스타일"],
"recommendReason": "뷰티 카테고리 릴스 비중이 높고 ...",
"flags": [
{ "presetCode": "BUSINESS_PREFERRED" },
{ "text": "직접 섭외", "category": "NEUTRAL", "color": "#9E9E9E" }
],
"recentPosts": [
{
"postLink": "https://www.instagram.com/reel/ABC123/",
"mediaUrl": "https://.../reel.mp4",
"mediaType": "VIDEO",
"publishedAt": "2026-07-10T14:30:00Z"
},
{
"postLink": "https://www.instagram.com/p/DEF456/",
"mediaUrl": "https://.../photo.jpg",
"mediaType": "IMAGE",
"publishedAt": "2026-07-08T10:00:00Z"
}
],
"adminVisible": false
}| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
username | String | 예 | 화면에 보일 크리에이터명 |
accountLink | String | 아니오 | 인스타 프로필 링크 |
profileImage | String | 아니오 | 프로필 이미지 URL. 비우면 기본 아바타 |
followerCount | Integer | 아니오 | 팔로워 수 |
reelsAvgViews | Double | 아니오 | 릴스 평균 조회수 |
matchScore | Double | 아니오 | 적합도 — 어드민 리스트관리의 matchScore 로 노출 |
fitScore | Double | 아니오 | AI 적합성 점수(0~1). 보관용 |
estimatedPrice | Integer | 아니오 | 예상가(랭크 가격) |
quotePrice / currentPrice / defaultUnitPrice / proposedPrice | Long | 아니오 | 기준가 / 노출가 / 희망가 / 제안가 |
categoryTags | String[] | 아니오 | 카테고리 태그 |
recommendReason | String | 아니오 | 추천사 |
flags | object[] | 아니오 | 비고 칩. 프리셋은 presetCode 만, 커스텀은 text/category/color |
recentPosts | object[] | 아니오 | 최근 게시물(영상·이미지). postLink·mediaUrl·mediaType(VIDEO|IMAGE)·publishedAt. 넣지 않으면 화면에 썸네일이 뜨지 않는다 |
adminVisible | Boolean | 아니오 | 등록 즉시 광고주 노출 여부. 기본 false |
값을 검증하지 않습니다. 목업이므로 실제 인스타 계정 존재 여부·팔로워 수 등을 대조하지 않습니다. 입력한 그대로 저장·노출됩니다.
응답
성공 응답 (200 OK)
{
"status": 200,
"message": "데모 후보가 등록되었습니다.",
"data": 100000021
}| 필드 | 타입 | 설명 |
|---|---|---|
data | Long | 생성된 데모 후보 ID. dummyItems[].applicationId 와 같은 값이며, 수정·삭제·노출 API 에 그대로 쓴다 |
파일이 있으면 먼저 업로드하세요. 영상·이미지는
업로드 URL 발급 API로 S3 presigned PUT 한 뒤,
받은 publicUrl 을 profileImage / recentPosts[].mediaUrl 에 담습니다.
영상·이미지는 recentPosts 로 직접 넣어야 합니다. 에이전트가 발굴한 후보는 크롤 DB(PG public.post)에
게시물이 있어 자동으로 채워지지만, 수기 등록 후보는 대응 계정이 없어 가져올 곳이 없습니다
(내부적으로 manual- 접두사 ID 를 부여해 에이전트 계정과 구분합니다).
비워 두면 화면에 썸네일이 뜨지 않아 데모 행만 도드라집니다.
수기 입력분이 크롤 조회보다 우선합니다. recentPosts 에 값이 있으면 그대로 쓰고, 비어 있을 때만
크롤 DB 를 조회합니다. 어드민 리스트관리와 광고주 대시보드 양쪽에 같은 규칙이 적용됩니다.
등록 후 수정
등록한 뒤에는 다른 데모 후보와 동일하게 기존 벌크 API 로 수정합니다 — 연동 가이드의 수정 절 참고.