Glowb Dev Docs
Main APIAI 콘텐츠 검수 API

POST /ai/influence/contents/ai-review/video

AI 영상 검수

AI 영상 검수

영상 URL과 캠페인 정보를 기반으로 AI 검수를 수행합니다. collabNo로 가이드라인을 조회하여 검수 기준으로 사용합니다.

항목
메서드POST
경로/ai/influence/contents/ai-review/video
인증필요
Content-Typeapplication/json

요청

POST /ai/influence/contents/ai-review/video
Authorization: Bearer {access_token}
Content-Type: application/json

Request Body

{
  "collabNo": 123,
  "applicationId": 456,
  "itemId": 789,
  "videoUrl": "https://example.com/video.mp4",
  "campaignName": "2024 겨울 캠페인",
  "brand": "브랜드명",
  "options": {
    "language": "ko",
    "needTranscript": true,
    "needSceneCut": true,
    "extras": {}
  }
}

Request Body 스키마

필드명타입필수설명
collabNolong캠페인 번호 (가이드라인 조회용)
applicationIdlong아니오지원 ID (결과 저장용)
itemIdlong아니오제출물 ID (결과 저장용)
videoUrlstring검수할 영상 URL
campaignNamestring아니오캠페인명
brandstring아니오브랜드명
optionsobject아니오검수 옵션

Options 스키마

필드명타입기본값설명
languagestringko검수 언어 (ko, en 등)
needTranscriptbooleantrue자막 추출 여부
needSceneCutbooleantrue장면 분할 여부
extrasobjectnull추가 옵션

중요: applicationIditemId가 모두 제공된 경우에만 검수 결과가 DynamoDB에 저장됩니다.

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "AI 영상 검수 완료",
  "data": {
    "collabNo": 123,
    "applicationId": 456,
    "itemId": 789,
    "contentType": "VIDEO",
    "overallStatus": "PASS",
    "checkedAt": "2024-12-22T10:30:00+09:00",
    "contentDetailResult": {
      "categoryCode": "BEAUTY",
      "basicShots": [
        {
          "code": "PRODUCT_SHOT",
          "expected": {
            "appealPoint": "제품 클로즈업",
            "subOption": "5초 이상"
          },
          "result": {
            "status": "PASS",
            "confidence": 0.95,
            "evidence": [
              {
                "type": "VIDEO",
                "timeRange": [10.5, 18.2],
                "description": "제품 클로즈업 장면 확인",
                "text": null
              }
            ],
            "comment": "가이드라인에 맞게 제품 클로즈업이 포함되어 있습니다."
          }
        }
      ],
      "additionalOptions": [
        {
          "code": "BRAND_MENTION",
          "result": {
            "status": "PASS",
            "confidence": 0.88,
            "evidence": [
              {
                "type": "AUDIO",
                "timeRange": [5.0, 8.0],
                "description": "브랜드명 언급",
                "text": "오늘 소개할 제품은 브랜드명의..."
              }
            ],
            "comment": "브랜드명이 정확히 언급되었습니다."
          }
        }
      ]
    },
    "marketingInfoResult": {
      "requiredPoints": [
        {
          "text": "제품 사용 후기 포함",
          "result": {
            "status": "PASS",
            "matchType": "EXACT",
            "matchedText": "사용해보니 정말 좋았어요",
            "evidence": [
              {
                "type": "AUDIO",
                "timeRange": [25.0, 30.0],
                "description": "사용 후기 언급",
                "text": "사용해보니 정말 좋았어요"
              }
            ],
            "comment": "필수 마케팅 포인트가 포함되어 있습니다."
          }
        }
      ],
      "optionalPoints": [],
      "hashtags": ["#광고", "#협찬", "#브랜드명"],
      "videoMarketingOptions": {
        "promotion": {
          "expectedDescription": "유료광고 표시",
          "result": {
            "status": "PASS",
            "matchType": "PARTIAL",
            "matchedText": "#광고",
            "evidence": [],
            "comment": "광고 표시가 확인되었습니다."
          }
        },
        "brandAccountTag": null,
        "collaborator": null
      }
    },
    "errors": [],
    "meta": {
      "modelVersion": "gemini-2.0-flash",
      "processingTimeMs": 15234.5
    }
  }
}

응답 스키마

필드타입설명
collabNolong캠페인 번호
applicationIdlong지원 ID
itemIdlong제출물 ID
contentTypestring콘텐츠 타입 (VIDEO)
overallStatusstring전체 검수 결과 (PASS, FAIL)
checkedAtstring검수 완료 시간 (ISO 8601)
contentDetailResultobject콘텐츠 상세 검수 결과
marketingInfoResultobject마케팅 정보 검수 결과
errorsarray오류 메시지 목록
metaobject메타 정보

ContentDetailResult 스키마

필드타입설명
categoryCodestring카테고리 코드
basicShotsarray기본 샷 검수 결과 목록
additionalOptionsarray추가 옵션 검수 결과 목록

ShotCheckResult 스키마

필드타입설명
statusstring상태 (PASS, FAIL, PARTIAL)
confidencenumber신뢰도 (0.0 ~ 1.0)
evidencearray근거 목록
commentstringAI 코멘트

Evidence 스키마

필드타입설명
typestring근거 타입 (VIDEO, AUDIO, TEXT)
timeRangearray시간 범위 [시작초, 종료초]
descriptionstring설명
textstring추출된 텍스트 (있는 경우)

Meta 스키마

필드타입설명
modelVersionstring사용된 AI 모델 버전
processingTimeMsnumber처리 시간 (밀리초)

v4 가이드라인 응답 형식

가이드라인 버전이 v4인 캠페인은 아래와 같이 응답 구조가 달라집니다. v2 캠페인은 기존 형식 그대로 반환됩니다.

v4 변경점 요약

항목v2v4
basicShotsarray (flat)object (beginning / middle / ending)
expected{ "appealPoint": "..." }{ "scene": "...", "example_comment": "..." }
cautionResult없음array<object> (주의사항 위반 검수)
overallStatusPASS / FAILPASS / FAIL / PARTIAL

v4 응답 예시

{
  "status": 200,
  "code": null,
  "message": "AI 영상 검수 완료",
  "data": {
    "collabNo": 1546,
    "contentType": "VIDEO",
    "overallStatus": "FAIL",
    "checkedAt": "2026-06-01T08:32:25.037332+00:00",
    "contentDetailResult": {
      "basicShots": {
        "beginning": [
          {
            "code": "HOOK",
            "expected": {
              "scene": "[장면] 크리에이터가 입안의 불편함으로 인해 미간을 찌푸리며 고통스러워하는 표정을 짓는다.",
              "example_comment": "[예시멘트] 아 진짜... 또 구내염이에요? 밥 먹을 때마다 고통스러워서 미치겠어요 ㅠㅠ"
            },
            "result": {
              "status": "PASS",
              "confidence": 0.92,
              "evidence": [
                {
                  "type": "frame",
                  "timeRange": [0.0, 3.5],
                  "description": "크리에이터가 입 주변을 만지며 불편한 표정을 짓고 있음.",
                  "text": ""
                },
                {
                  "type": "speech",
                  "timeRange": [0.5, 3.0],
                  "description": "구내염으로 인한 고통을 표현하는 멘트.",
                  "text": "또 구내염 났어... 진짜 아파서 밥도 못 먹겠어"
                }
              ],
              "comment": "가이드라인에서 요구한 HOOK 장면이 영상 초반에 적절히 표현되어 있습니다."
            }
          }
        ],
        "middle": [
          {
            "code": "PRODUCT_INTRO_SHOT",
            "expected": {
              "scene": "[장면] 크리에이터가 하이퍼 오라샷 제품을 꺼내 카메라를 향해 보여준다.",
              "example_comment": "[예시멘트] 바로 하이퍼 오라샷이에요. 이거 진짜 인생템 등극했습니다!"
            },
            "result": {
              "status": "PASS",
              "confidence": 0.95,
              "evidence": [
                {
                  "type": "frame",
                  "timeRange": [4.0, 8.0],
                  "description": "크리에이터가 파우치에서 하이퍼 오라샷 제품을 꺼내 카메라에 보여줌.",
                  "text": ""
                },
                {
                  "type": "speech",
                  "timeRange": [4.5, 7.5],
                  "description": "제품 소개 멘트.",
                  "text": "그래서 찾은 게 바로 이 하이퍼 오라샷! 진짜 구원템이에요"
                }
              ],
              "comment": "제품을 자연스럽게 꺼내며 소개하는 장면이 가이드라인과 일치합니다."
            }
          },
          {
            "code": "STRENGTH_SHOT",
            "expected": {
              "scene": "[장면] 크리에이터가 제품을 입안에 뿌리는 모습을 클로즈업하여 보여준다.",
              "example_comment": "[예시멘트] 칙칙 뿌리기만 하면 끝! FDA/식약처 인증 의료기기라 믿음이 확 가죠?"
            },
            "result": {
              "status": "FAIL",
              "confidence": 0.85,
              "evidence": [
                {
                  "type": "frame",
                  "timeRange": [9.0, 15.0],
                  "description": "제품 사용 장면이 있으나 클로즈업이 아닌 중간 샷으로 촬영됨.",
                  "text": ""
                }
              ],
              "comment": "제품 사용 시연은 있으나, 가이드라인에서 요구한 클로즈업 촬영이 아닙니다."
            }
          }
        ],
        "ending": [
          {
            "code": "PURCHASE_GUIDE_END",
            "expected": {
              "scene": "[장면] 크리에이터가 제품을 들고 환하게 웃으며 추천 메시지를 전달한다.",
              "example_comment": "[예시멘트] 구내염으로 고생하고 있다면, 하이퍼 오라샷 꼭 한번 써보세요!"
            },
            "result": {
              "status": "PASS",
              "confidence": 0.88,
              "evidence": [
                {
                  "type": "frame",
                  "timeRange": [40.0, 46.0],
                  "description": "크리에이터가 제품을 들고 카메라를 향해 미소 지으며 추천.",
                  "text": ""
                },
                {
                  "type": "speech",
                  "timeRange": [41.0, 45.0],
                  "description": "마무리 추천 멘트.",
                  "text": "입안 상처 때문에 고생하는 분들 꼭 써보세요, 진짜 달라요!"
                }
              ],
              "comment": "엔딩 샷에서 제품 추천 메시지를 적절히 전달하고 있습니다."
            }
          }
        ]
      },
      "additionalOptions": [
        {
          "code": "NARRATION_REQUIRED",
          "result": {
            "status": "PASS",
            "confidence": 1.0,
            "evidence": [
              {
                "type": "speech",
                "timeRange": [0.0, 46.0],
                "description": "크리에이터가 영상 내내 자신의 목소리로 직접 말하고 있음.",
                "text": ""
              }
            ],
            "comment": "A female voice narrates throughout the audio."
          }
        },
        {
          "code": "BGM_INCLUDED",
          "result": {
            "status": "PASS",
            "confidence": 0.95,
            "evidence": [
              {
                "type": "speech",
                "timeRange": [0.0, 46.0],
                "description": "잔잔한 배경음악이 영상 전반에 깔려 있음.",
                "text": ""
              }
            ],
            "comment": "Soft background music is present throughout the audio."
          }
        }
      ]
    },
    "marketingInfoResult": {
      "requiredPoints": [
        {
          "text": "FDA&식약처 인증 의료기기로 검증된 구강 상처 케어템",
          "result": {
            "status": "PASS",
            "matchType": "PARAPHRASE",
            "matchedText": "식약처 인증받은 의료기기라 안심하고 쓸 수 있어요",
            "evidence": [
              {
                "type": "speech",
                "timeRange": [12.0, 15.0],
                "description": "식약처 인증 관련 멘트.",
                "text": "식약처 인증받은 의료기기라 안심하고 쓸 수 있어요"
              }
            ],
            "comment": "의미적으로 동일한 표현으로 언급됨."
          }
        },
        {
          "text": "43종 스테로이드 불검출 및 천연 유래 성분으로 안심 사용 가능",
          "result": {
            "status": "FAIL",
            "matchType": "NOT_FOUND",
            "matchedText": "",
            "evidence": [],
            "comment": "관련 멘트나 자막이 없습니다."
          }
        }
      ],
      "optionalPoints": [
        {
          "text": "파우치에 쏙 들어가는 콤팩트한 사이즈로 뛰어난 휴대성",
          "result": {
            "status": "PASS",
            "matchType": "EXACT",
            "matchedText": "파우치에 쏙 들어가서 휴대하기 너무 좋아요",
            "evidence": [
              {
                "type": "speech",
                "timeRange": [30.0, 33.0],
                "description": "휴대성 관련 멘트.",
                "text": "파우치에 쏙 들어가서 휴대하기 너무 좋아요"
              }
            ],
            "comment": "거의 동일한 표현으로 언급됨."
          }
        }
      ]
    },
    "cautionResult": [
      {
        "text": "바이러스 치료, 완치 표현 사용 불가",
        "result": {
          "status": "PASS",
          "evidence": [
            {
              "type": "speech",
              "timeRange": [0.0, 46.0],
              "description": "치료, 완치와 같은 금지 표현을 사용하지 않았습니다.",
              "text": ""
            }
          ],
          "comment": "해당 금지어가 영상 내에서 언급되지 않았습니다."
        }
      }
    ],
    "errors": [],
    "meta": {
      "modelVersion": "gemini3",
      "processingTimeMs": 131129.77
    }
  }
}

v4 basicShots (섹션별 그룹)

필드타입설명
basicShots.beginningarray<object>영상 도입부 필수 장면 결과
basicShots.middlearray<object>영상 본문 필수 장면 결과
basicShots.endingarray<object>영상 마무리 필수 장면 결과

v4 expected 스키마

필드타입설명
scenestring가이드라인에 정의된 장면 설명
example_commentstring가이드라인에 정의된 예시 멘트

v4 cautionResult

필드타입설명
textstring주의사항 항목 텍스트
result.statusstringPASS(위반 안 함) / FAIL(위반) / UNCERTAIN
result.evidencearray<object>위반 근거
result.commentstring판단 코멘트

에러 응답

상태 코드코드메시지
400INVALID_REQUESTcollabNo는 필수입니다.
400INVALID_REQUESTvideoUrl은 필수입니다.
500AI_REVIEW_FAILEDAI 검수 중 오류가 발생했습니다.

사용 예시

curl -X POST https://api.glowb.io/ai/influence/contents/ai-review/video \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "collabNo": 123,
    "applicationId": 456,
    "itemId": 789,
    "videoUrl": "https://example.com/video.mp4",
    "campaignName": "2024 겨울 캠페인",
    "brand": "브랜드명",
    "options": {
      "language": "ko",
      "needTranscript": true,
      "needSceneCut": true
    }
  }'

API 테스트

On this page