시작하기
광고주·에이전시 오류 코드 광고주(기업) 앱과 에이전시 앱이 로케일별 오류 문구를 고를 때 쓰는 코드 사전입니다.
광고주 앱(glowb-ai-biz)도 로케일이 4종(ko·en·jp·vi)인데, 서버 오류 메시지는 한국어뿐이었습니다.
이 문서는 크리에이터 오류 코드 와 같은 규격 으로, 광고주·에이전시 경로에서 서버가 내려주는 code 의 사전을 정리한 것입니다.
코드 정의의 원본은 com.app.glowb.Enum.BusinessErrorCode 입니다. 이 문서는 그 enum 에서 생성했습니다.
공통 인프라 코드와 크리에이터와 뜻이 같은 코드는 CreatorErrorCode 의 것을 그대로 씁니다 — code 문자열은 두 enum 을 통틀어 유일합니다.
{
"status" : 404 ,
"code" : "CAMPAIGN_NOT_FOUND" ,
"message" : "존재하지 않는 캠페인입니다." ,
"args" : { "collabNo" : 1234 },
"data" : null
}
code 는 enum 상수명 그대로이며 로케일 문구를 고르는 키입니다.
message 는 한국어 fallback 입니다. 아직 매핑하지 않은 코드도 지금처럼 화면에 뜹니다.
args 는 문장 슬롯({collabNo} 등)을 채울 값입니다. 값이 없으면 키 자체가 빠집니다.
대부분의 경로는 HTTP 200 + 본문 status 규약입니다. 컨트롤러가 원래 ResponseEntity 로 HTTP 상태를 직접 내리던 경로(결제·진행표 일부 등)는 그 HTTP 상태를 그대로 유지하고 본문의 code·message 만 이 사전의 값으로 바뀌었습니다.
사유 접미사가 상태를 정합니다. 표와 예외군은 크리에이터 오류 코드의 코드 규격 과 같습니다.
레거시 호환 코드 — 프론트가 이미 이 이름으로 분기하고 있어(ALREADY_CLAIMED_PROMOTION은 크리에이터 프로모션 페이지, 나머지는 광고주·에이전시) 이름과 상태를 그대로 물려받았습니다. 규격 접미사를 따르지 않아도 바꾸지 않습니다.
코드 상태 BUSINESS_REGISTRATION_FAILED400 INVALID_BUSINESS_USER404 INVALID_COMPANY_USER_PASSWORD401 LEGACY_CAMPAIGN400 GUIDELINE_CONCEPTS_CHANGED409 NO_APPLICATIONS400 NO_ELIGIBLE_ITEMS400 PROPOSAL_STATUS_CHANGE_NOT_ALLOWED400 BUDGET_ALREADY_LOCKED409 BUDGET_ALREADY_UNLOCKED409 INSUFFICIENT_GLOBAL_CREDIT400 NEED_CAMPAIGN_DEPOSIT400 INSUFFICIENT_CREDIT409 ALREADY_CLAIMED_PROMOTION409 BLOG_REVIEW_ERROR500 AI_INVALID_JSON400
프론트(glowb-frontend)는 앱 공용 오류 사전과 번역 단계를 이미 갖추고 있습니다. 새 코드가 생기면 사전에 키만 추가 하면 됩니다.
사전 위치 : packages/ui/src/lib/api-errors/{ko,en,jp,vi}.json. 키는 서버 code 그대로, 값은 로케일 문구입니다. 슬롯은 서버 args 키와 같은 이름을 씁니다.
번역 단계 : 크리에이터 apps/glowb-ai-creator/apis/index.ts 와 광고주·에이전시 packages/corp-shared/src/http.ts 가 오류 응답을 localizeApiResponse 로 통과시켜 message 를 로케일 문구로 바꿉니다. 서버 원문은 rawMessage 에 남습니다.
로케일 판정 : URL 첫 경로(/en/…) → <html lang> → NEXT_LOCALE 쿠키 → 브라우저 언어 → ko 순입니다.
폴백 : 사전에 없는 코드이거나 슬롯 값이 빠지면 서버 message(한국어)를 그대로 씁니다. 그래서 서버에 새 코드가 먼저 배포돼도 화면이 비지 않고, 사전 키가 추가되면 그때부터 번역됩니다.
packages/ui/src/lib/api-errors/en.json {
"CAMPAIGN_NOT_OWNED" : "You do not have access to this campaign." ,
"INSUFFICIENT_CREDIT" : "Not enough credits. (current: {currentCredit}, required: {requiredCredit})" ,
"REVIEW_FEEDBACK_ITEMS_REQUIRED" : "There are no feedback items to process."
}
code 로 분기하는 화면 로직(예: 특정 코드면 모달 열기)은 번역과 별개입니다. 서버 코드명이 바뀌면 그 분기도 함께 고쳐야 합니다.
이 문서의 변경 이력 에 프론트 대응이 필요한 항목을 적어 둡니다.
코드 상태 기본 문구(ko) args BUSINESS_REGISTRATION_FAILED400 기업 회원가입에 실패했습니다.— INVALID_BUSINESS_USER404 등록되지 않은 기업 사용자입니다.— INVALID_COMPANY_USER_PASSWORD401 비밀번호가 일치하지 않습니다.— BUSINESS_ACCOUNT_NOT_FOUND404 기업 정보를 찾을 수 없습니다.— BUSINESS_ACCOUNT_RECOVERY_NOT_FOUND404 입력하신 정보와 일치하는 기업 계정이 없습니다.— BUSINESS_INFO_UPDATE_FAILED500 기업 정보 수정에 실패했습니다.— BUSINESS_LICENSE_ALREADY_REGISTERED409 이미 등록된 사업자등록증이 있습니다.— BUSINESS_LICENSE_CHECK_FAILED500 사업자등록증 분석에 실패했습니다. 잠시 후 다시 시도해주세요.— BUSINESS_LICENSE_FILE_REQUIRED400 사업자등록증 파일을 업로드해주세요.— BUSINESS_LOGIN_FAILED500 로그인 처리 중 오류가 발생했습니다.— BUSINESS_LOGIN_ID_DUPLICATE409 이미 사용 중인 아이디입니다: {loginId}loginIdBUSINESS_MANAGER_EMAIL_NOT_FOUND404 사업자등록번호와 일치하는 담당자 이메일을 찾을 수 없습니다.— BUSINESS_MANAGER_FIELD_TOO_LONG400 담당자 정보가 너무 깁니다. ({field}: 최대 {maxLength}자)field, maxLengthBUSINESS_MANAGER_NOT_FOUND404 담당자를 찾을 수 없습니다.managerNoBUSINESS_MANAGER_NOT_OWNED403 해당 담당자에 접근 권한이 없습니다.managerNoBUSINESS_RECOVERY_CODE_NOT_FOUND404 발급된 인증번호가 없습니다. 인증번호를 다시 요청해주세요.—
코드 상태 기본 문구(ko) args BUSINESS_LICENSE_FILE_NOT_FOUND404 등록된 사업자등록증 파일이 없습니다.— BUSINESS_LICENSE_PARSE_FAILED500 사업자등록증 분석에 실패했습니다.—
코드 상태 기본 문구(ko) args AGENCY_ACCESS_FORBIDDEN403 에이전시 계정만 이용할 수 있습니다.— AGENCY_ASSIGN_CLIENT_REQUIRED400 할당할 하위 기업을 선택해주세요.— AGENCY_CLIENT_CAMPAIGN_REMAINING409 하위 기업에 연결된 캠페인이 있어 삭제할 수 없습니다. 먼저 캠페인을 다른 하위 기업에 할당하세요.— AGENCY_CLIENT_CREDIT_HISTORY_EXISTS409 하위 기업에 크레딧 또는 예산 이력이 있어 삭제할 수 없습니다. 비활성화 상태로 변경하세요.— AGENCY_CLIENT_HAS_DEPENDENCIES409 하위 기업에 연결된 데이터가 있어 삭제할 수 없습니다. 비활성화 상태로 변경하세요.— AGENCY_CLIENT_LOGIN_ID_DUPLICATE409 이미 사용 중인 아이디입니다: {loginId}loginIdAGENCY_CLIENT_LOGIN_ID_REQUIRED400 하위 기업 로그인 아이디를 입력해주세요.— AGENCY_CLIENT_LOGIN_ID_INVALID400 하위 기업 로그인 아이디는 {maxLength}자 이하로 입력해주세요.maxLengthAGENCY_CLIENT_NOT_FOUND404 하위 기업을 찾을 수 없습니다.clientIdAGENCY_CLIENT_NOT_OWNED403 해당 하위 기업에 접근 권한이 없습니다.clientIdAGENCY_CREDIT_AMOUNT_INVALID400 지급할 크레딧은 1 이상이어야 합니다.amountAGENCY_CREDIT_MEMO_TOO_LONG400 메모는 {maxLength}자 이하로 입력해주세요.maxLengthAGENCY_FAVICON_CONVERT_FAILED500 파비콘 변환 중 오류가 발생했습니다.— AGENCY_FAVICON_FILE_TOO_LARGE413 파비콘 이미지는 {maxMb}MB 이하만 올릴 수 있습니다.maxMbAGENCY_FAVICON_IMAGE_UNSUPPORTED400 파비콘으로 변환할 수 없는 이미지입니다. PNG/JPG/GIF/WEBP/SVG 파일을 올려 주세요.— AGENCY_FAVICON_RESOLUTION_TOO_LARGE413 이미지 해상도가 너무 큽니다. 2,500만 픽셀 이하로 올려 주세요.— AGENCY_LINK_MISSING404 에이전시에 연결되지 않은 계정입니다.— AGENCY_PORTAL_LOGIN_FORBIDDEN403 에이전시 포털에 로그인할 수 없는 계정입니다.— AGENCY_TENANT_NOT_FOUND404 테넌트를 찾을 수 없습니다: {domain}domain
코드 상태 기본 문구(ko) args LEGACY_CAMPAIGN400 레거시 캠페인은 이 기능을 사용할 수 없습니다.— CAMPAIGN_BUDGET_INVALID400 예산 값이 올바르지 않습니다.budgetCAMPAIGN_BUSINESS_DIRECT_FLOW_UNSUPPORTED400 기업 주도 플로우 캠페인에서만 사용할 수 있습니다.— CAMPAIGN_CATEGORY_REQUIRED400 캠페인 카테고리가 설정되지 않았습니다. 캠페인 정보를 먼저 입력해주세요.collabNoCAMPAIGN_CONTENT_FORMAT_REQUIRED400 캠페인 콘텐츠 형식이 설정되지 않았습니다. 캠페인 정보를 먼저 입력해주세요.collabNoCAMPAIGN_CREATOR_TARGET_COUNTRY_INVALID400 크리에이터 타겟 국가 값이 올바르지 않습니다. 국가 코드(예: KR, JP)로 선택해주세요.countryCAMPAIGN_IMAGES_EMPTY400 판정할 이미지가 없습니다.— CAMPAIGN_NOT_OWNED403 해당 캠페인에 접근 권한이 없습니다.collabNoCAMPAIGN_OWNER_BUSINESS_NOT_FOUND404 캠페인을 등록한 기업 정보를 찾을 수 없습니다.collabNoCAMPAIGN_PAYMENT_INFO_NOT_FOUND404 결제 정보가 없는 캠페인입니다.collabNoCAMPAIGN_PLAN_RECOMMEND_FAILED500 캠페인 플랜 추천 중 오류가 발생했습니다.— CAMPAIGN_PLAN_TEMPLATE_NOT_FOUND404 입력한 예산에 맞는 캠페인 플랜을 찾을 수 없습니다.budgetCAMPAIGN_PRODUCT_IMAGE_REQUIRED400 캠페인에 등록된 제품 이미지가 없습니다. 이미지를 먼저 등록해주세요.collabNoCAMPAIGN_SECONDARY_USAGE_MONTHS_INVALID400 2차 활용 기간 값이 올바르지 않습니다. 0 이상의 개월 수 또는 영구만 선택할 수 있습니다.monthsPROVIDED_OPTION_CHANGE_NOT_ALLOWED400 이미 제안된 신청자가 있어 캠페인 제공 옵션을 변경할 수 없습니다.—
코드 상태 기본 문구(ko) args GUIDELINE_CONCEPTS_CHANGED409 컨셉이 새로 생성되었거나 생성 중입니다. 컨셉을 다시 선택해주세요.— GUIDELINE_SESSION_NOT_FOUND404 가이드라인 생성 세션이 없습니다. 컨셉 생성부터 다시 시작해주세요.collabNoGUIDELINE_AI_UPSTREAM_FAILED502 AI 가이드라인 생성 서버 응답에 실패했습니다. 잠시 후 다시 시도해주세요.stepGUIDELINE_COMPLETE_FORBIDDEN403 가이드라인 완성은 관리자 검토 후 진행됩니다. 초안으로 저장해주세요.— GUIDELINE_CONCEPT_INDEX_INVALID400 선택한 컨셉이 올바르지 않습니다. 컨셉을 다시 생성하거나 선택해주세요.conceptIndexGUIDELINE_CONTENT_EMPTY400 검수할 가이드라인 본문이 없습니다. 가이드라인을 먼저 생성해주세요.— GUIDELINE_DRAFT_FAILED500 가이드라인 생성 중 오류가 발생했습니다.— GUIDELINE_DRAFT_REQUIRED400 가이드라인 초안을 먼저 작성해주세요.— GUIDELINE_IMAGE_TYPE_UNSUPPORTED400 지원하지 않는 이미지 타입입니다: {type}typeGUIDELINE_ITEM_TYPE_REQUIRED400 재생성·추가할 가이드라인 항목 유형이 필요합니다.— GUIDELINE_MODIFICATION_NOT_ALLOWED400 모집이 시작된 이후에는 가이드라인을 수정할 수 없습니다.— GUIDELINE_SHOT_CANDIDATES_EMPTY400 더 추가할 수 있는 장면이 없습니다.— GUIDELINE_SHOT_TEMPLATE_CORRUPTED500 촬영 옵션 템플릿에 사용할 수 있는 장면이 없습니다.collabNoGUIDELINE_SHOT_TEMPLATE_NOT_FOUND404 이 캠페인 유형({platform}·{contentType}·{category})의 촬영 옵션 템플릿을 찾을 수 없습니다.platform, contentType, categoryGUIDELINE_TRIAL_NOT_FOUND404 데모 가이드라인 세션을 찾을 수 없습니다. 만료되었을 수 있으니 처음부터 다시 시작해주세요.trialIdREGULATION_POLICY_UNSUPPORTED400 지원하지 않는 규정 검수 정책입니다: {policyKey}policyKey
코드 상태 기본 문구(ko) args NO_APPLICATIONS400 처리할 신청 항목이 없습니다.— NO_ELIGIBLE_ITEMS400 처리 가능한 항목이 없습니다.— PROPOSAL_STATUS_CHANGE_NOT_ALLOWED400 제안 상태의 크리에이터는 기업에서 상태를 변경할 수 없습니다. 관리자에게 문의해주세요.— APPLICATION_PHASE_TRANSITION_INVALID400 유효하지 않은 단계 전환입니다: {fromPhase} -> {toPhase}fromPhase, toPhaseCONTRACT_VARIABLE_SERIALIZE_FAILED500 계약서 정보를 만드는 중 오류가 발생했습니다.— PROGRESS_AI_CHECK_STATUS_INVALID400 지원하지 않는 AI 체크 상태입니다: {status}statusPROGRESS_AI_CHECK_UPDATE_FAILED500 AI 체크 상태 변경 중 오류가 발생했습니다.— PROGRESS_BLACKLISTED_CREATOR_NOT_ALLOWED400 블랙리스트로 등록된 크리에이터가 포함되어 있습니다.— PROGRESS_EXPOSURE_CANDIDATE_FORBIDDEN403 노출 후보는 관리자만 지정할 수 있습니다.— PROGRESS_ITEM_AI_CHECK_UPDATE_FAILED500 AI 검수 상태 변경에 실패했습니다.— PROGRESS_ITEM_NOT_FOUND404 진행 항목을 찾을 수 없습니다.progressItemId, collabNoPROGRESS_ITEM_PERSON_CHECK_UPDATE_FAILED500 최종 검수 상태 변경에 실패했습니다.— PROGRESS_MATCHED_ELIMINATE_NOT_ALLOWED400 매칭 상태에선 제외 상태로 전환할 수 없습니다.— PROGRESS_MATCHING_STATUS_INVALID400 설정할 수 없는 매칭 상태입니다: {matchingStatus}matchingStatusPROGRESS_MATCHING_STATUS_UPDATE_FAILED500 매칭 상태 변경 중 오류가 발생했습니다.— PROGRESS_NOTE_UPDATE_FAILED500 협업 노트 업데이트 중 오류가 발생했습니다.— PROGRESS_PERSON_CHECK_STATUS_INVALID400 지원하지 않는 검수 상태입니다: {status}statusPROGRESS_PERSON_CHECK_UNSUPPORTED400 이 캠페인에서는 사용할 수 없는 기능입니다.collabNoPROGRESS_PERSON_CHECK_UPDATE_FAILED500 검수 상태 변경 중 오류가 발생했습니다.— PROGRESS_TABLE_LOAD_FAILED500 캠페인 진행 현황 조회 중 오류가 발생했습니다.— PROPOSAL_CHARGE_FAILED500 제안 처리 중 오류가 발생했습니다.—
코드 상태 기본 문구(ko) args DELIVERY_ADDRESSES_LOAD_FAILED500 배송지 목록 조회 중 오류가 발생했습니다.— DELIVERY_CAMPAIGN_UNSUPPORTED400 배송이 필요한 캠페인이 아닙니다.collabNoDELIVERY_STATUS_INVALID400 지원하지 않는 배송 상태입니다: {status}statusDELIVERY_STATUS_UPDATE_FAILED500 배송 상태 변경 중 오류가 발생했습니다.— DELIVERY_TRACKING_SAVE_FAILED500 운송장 번호 저장 중 오류가 발생했습니다.—
코드 상태 기본 문구(ko) args BUDGET_ALREADY_LOCKED409 이미 예산이 예약되어 있습니다.applicationIdBUDGET_ALREADY_UNLOCKED409 이미 예산이 취소되었습니다.applicationIdINSUFFICIENT_GLOBAL_CREDIT400 기업 크레딧이 부족합니다. 크레딧을 충전해주세요.— NEED_CAMPAIGN_DEPOSIT400 캠페인 예산이 부족합니다. 추가 입금이 필요합니다.needed, availableBUDGET_DEFICIT_LOCK_NOT_ALLOWED400 이 캠페인은 부족분 lock 정책이 비활성화되어 있습니다.— BUDGET_INITIAL_DEPOSIT_REQUIRED400 캠페인 최초 입금이 필요합니다.—
코드 상태 기본 문구(ko) args CAMPAIGN_CREDIT_PAYMENT_FAILED500 크레딧 결제 처리 중 오류가 발생했습니다.— CAMPAIGN_PAYMENT_ALREADY_COMPLETED409 이미 결제가 완료된 캠페인입니다.collabNoCAMPAIGN_PAYMENT_NOT_FOUND404 캠페인 결제 정보를 찾을 수 없습니다.collabNoPAYMENT_ALREADY_CANCELED409 이미 취소된 결제입니다.— PAYMENT_CANCEL_FAILED500 결제 취소 처리 중 오류가 발생했습니다.— PAYMENT_CANCEL_UPSTREAM_FAILED502 결제사 취소 요청에 실패했습니다. 잠시 후 다시 시도해주세요.— PAYMENT_HISTORY_LOAD_FAILED500 캠페인 결제 내역 조회에 실패했습니다.— PAYMENT_NOT_FOUND404 결제 정보를 찾을 수 없습니다.— PAYMENT_REFUND_NOT_ALLOWED400 크리에이터 모집이 시작되어 환불이 불가능합니다.collabNoPAYMENT_REQUEST_NOT_ALLOWED400 결제 대기 중인 캠페인만 결제 요청을 할 수 있습니다.paymentStatusPAYMENT_UPSTREAM_FAILED502 결제사 응답을 받지 못했습니다. 잠시 후 다시 시도해주세요.— CREDIT_PAYMENT_DECLINED400 결제가 승인되지 않았습니다. ({reason})reason, upstreamCode
코드 상태 기본 문구(ko) args INSUFFICIENT_CREDIT409 크레딧 잔액이 부족합니다. (현재: {currentCredit}, 필요: {requiredCredit})currentCredit, requiredCreditALREADY_CLAIMED_PROMOTION409 이미 받은 이벤트 크레딧입니다.— CREDIT_CHARGE_FAILED500 크레딧 충전 처리 중 오류가 발생했습니다.— CREDIT_PROMOTION_FORBIDDEN403 이벤트 크레딧 지급 대상이 아닙니다.— CREDIT_REFUND_ALREADY_USED409 크레딧이 이미 사용되어 환불이 불가능합니다. 현재 잔액: {currentCredit}, 환불 금액: {refundAmount}currentCredit, refundAmountCREDIT_TRANSACTION_DELETED410 삭제된 크레딧 거래는 환불할 수 없습니다.transactionIdCREDIT_TRANSACTION_NOT_FOUND404 크레딧 거래를 찾을 수 없습니다.transactionIdCREDIT_TRANSACTION_TYPE_UNSUPPORTED400 충전 거래만 취소할 수 있습니다. 현재 유형: {transactionType}transactionType
코드 상태 기본 문구(ko) args TAX_INVOICE_BUSINESS_NUMBER_INVALID400 유효하지 않은 사업자등록번호입니다.— TAX_INVOICE_BUSINESS_NUMBER_LENGTH_INVALID400 사업자등록번호는 10자리여야 합니다. 주민등록번호 발행은 지원하지 않습니다.businessNumberTAX_INVOICE_BUSINESS_NUMBER_REQUIRED400 사업자등록번호를 입력해주세요.— TAX_INVOICE_ISSUE_FAILED500 세금계산서 발행 중 오류가 발생했습니다.— TAX_INVOICE_NOT_FOUND404 세금계산서를 찾을 수 없습니다.invoiceIdTAX_INVOICE_REQUEST_INVALID400 세금계산서 발행 정보가 올바르지 않습니다: {reason}reason, boltaCodeTAX_INVOICE_SUPPLY_AMOUNT_INVALID400 공급가액은 10원 단위로 입력해주세요.supplyAmountTAX_INVOICE_SUPPLY_AMOUNT_REQUIRED400 공급가액을 입력해주세요.— TAX_INVOICE_UPSTREAM_FAILED502 세금계산서 발행 연동 중 오류가 발생했습니다. 잠시 후 다시 시도해주세요.— TAX_INVOICE_UPSTREAM_UNAVAILABLE503 세금계산서 발행 서비스에 연결할 수 없습니다. 잠시 후 다시 시도해주세요.—
코드 상태 기본 문구(ko) args BUSINESS_CONTRACT_PDF_UPLOAD_FAILED500 계약서 PDF 저장에 실패했습니다. 잠시 후 다시 시도해주세요.— BUSINESS_CONTRACT_SIGNED_NOT_FOUND404 서명이 완료된 계약서가 없습니다.— BUSINESS_CONTRACT_STAMP_DOWNLOAD_FAILED500 등록된 인감 이미지를 불러오지 못했습니다. 인감을 다시 업로드해주세요.— BUSINESS_CONTRACT_STAMP_FILE_TYPE_UNSUPPORTED400 인감 이미지는 PNG 또는 JPG 파일만 업로드할 수 있습니다.extensionBUSINESS_CONTRACT_STAMP_REQUIRED400 인감 이미지가 필요합니다. 마이페이지에서 먼저 등록해주세요.— BUSINESS_CONTRACT_STAMP_UPLOAD_FAILED500 인감 이미지 업로드에 실패했습니다. 잠시 후 다시 시도해주세요.— BUSINESS_CONTRACT_STEP_INVALID400 지원하지 않는 계약 진행 단계입니다. (OPEN, FILL, SIGN 중 하나)step
코드 상태 기본 문구(ko) args REVIEW_BULK_UPDATE_FAILED500 벌크 검수 처리 중 오류가 발생했습니다.— REVIEW_FEEDBACK_COUNT_EXCEEDED409 검수 횟수를 초과했습니다. (현재: {currentCount}/{maxCount}) 검수 추가 요청이 필요합니다.currentCount, maxCountREVIEW_FEEDBACK_ITEMS_REQUIRED400 처리할 피드백 항목이 없습니다.reviewIdSUBMISSION_ITEM_ROUND_MISMATCH400 제출물({itemId})이 검수 라운드({reviewId})에 속하지 않습니다.itemId, reviewIdSUBMISSION_ROUND_NOT_OWNED403 해당 검수에 대한 권한이 없습니다.reviewId
코드 상태 기본 문구(ko) args BLOG_REVIEW_ERROR500 블로그 검수 중 오류가 발생했습니다.— REVIEW_TOOL_CAMPAIGNS_UPSTREAM_FAILED502 검수 가능한 캠페인 목록을 불러오지 못했습니다. 잠시 후 다시 시도해주세요.— REVIEW_TOOL_RATE_LIMITED429 현재 검수 요청이 많습니다. 잠시 후 다시 시도해주세요.— REVIEW_TOOL_VIDEO_FAILED500 영상 검수 중 오류가 발생했습니다. 잠시 후 다시 시도해주세요.— REVIEW_TOOL_VIDEO_UPSTREAM_FAILED502 영상 검수 서버 연동에 실패했습니다. 잠시 후 다시 시도해주세요.—
코드 상태 기본 문구(ko) args FINAL_SUBMISSION_RECORD_NOT_FOUND404 최종 제출물을 찾을 수 없습니다.finalSubmissionIdFINAL_SUBMISSION_RE_REQUEST_ITEMS_REQUIRED400 재요청 항목을 선택해주세요.— FINAL_SUBMISSION_RE_REQUEST_SERIALIZE_FAILED500 재요청 처리 중 오류가 발생했습니다.— UPLOAD_DATE_CANDIDATE_DATES_REQUIRED400 후보 날짜를 선택해주세요.— UPLOAD_DATE_CANDIDATE_EMAIL_SEND_FAILED500 업로드 후보일 안내 메일 발송에 실패했습니다. 잠시 후 다시 시도해주세요.— UPLOAD_DATE_TARGET_REQUIRED400 업로드일을 지정할 최종 제출물 또는 신청 건 정보가 필요합니다.— UPLOAD_DATE_TYPE_INVALID400 유효하지 않은 업로드일 유형입니다.—
코드 상태 기본 문구(ko) args SUBMISSION_REMINDER_ALREADY_SENT_TODAY409 오늘 이미 독촉 메일을 보냈습니다. 내일 다시 시도해주세요.— SUBMISSION_REMINDER_LIMIT_REACHED409 이 단계의 독촉 메일은 최대 {maxCount}회까지 보낼 수 있습니다.sentCount, maxCountSUBMISSION_REMINDER_FIELD_REQUIRED400 독촉 메일 발송에 필요한 '{field}' 값이 없습니다.fieldSUBMISSION_REMINDER_UNAVAILABLE503 독촉 메일 발송 기능을 일시적으로 사용할 수 없습니다. 잠시 후 다시 시도해주세요.— SUBMISSION_REMINDER_UPSTREAM_FAILED502 독촉 메일 발송 서버와 통신하지 못했습니다. 잠시 후 다시 시도해주세요.—
코드 상태 기본 문구(ko) args CONTENT_EXPORT_CREATORS_TOO_MANY400 한 번에 내보낼 수 있는 크리에이터는 {maxCreators}명까지입니다. 현재 {count}명입니다.maxCreators, countCONTENT_EXPORT_FORMAT_UNSUPPORTED400 지원하지 않는 내보내기 형식입니다. xlsx, sheet, pdf 중 하나를 선택해주세요.formatCONTENT_EXPORT_GENERATION_FAILED500 내보내기 파일 생성에 실패했습니다. 잠시 후 다시 시도해주세요.formatCONTENT_EXPORT_ROUND_INVALID400 '{round}'은(는) 지원하지 않는 회차입니다. 1차 또는 2차만 선택할 수 있습니다.roundCONTENT_EXPORT_SHEET_SPLIT_UNSUPPORTED400 지원하지 않는 시트 분리 방식입니다. creator 또는 creator-round 중 하나를 선택해주세요.sheetSplitCONTENT_EXPORT_SHEET_UPSTREAM_FAILED502 구글 시트를 만들지 못했습니다. 엑셀로 내려받아 주세요.stage
코드 상태 기본 문구(ko) args META_ADSET_NOT_OWNED403 접근 권한이 없는 Meta 광고세트입니다.adsetIdMETA_AD_NOT_OWNED403 접근 권한이 없는 Meta 광고입니다.adIdMETA_CAMPAIGN_NOT_OWNED403 접근 권한이 없는 Meta 광고 캠페인입니다.campaignIdMETA_MAPPING_NOT_FOUND404 연결된 Meta 광고 캠페인이 없습니다.collabNo
코드 상태 기본 문구(ko) args AI_INVALID_JSON400 AI 응답을 해석하지 못했습니다. 다시 시도해주세요.— REPORT_CATEGORY_EXTRACTION_FAILED500 브랜드 카테고리 추출 중 오류가 발생했습니다.—
코드 상태 기본 문구(ko) args BRAND_LOGO_FILE_TYPE_UNSUPPORTED400 지원하지 않는 로고 파일 형식입니다: {extension}. 허용 형식: {allowed}extension, allowed
광고주·에이전시 경로에서도 아래 CreatorErrorCode 코드가 나갑니다. 문구는 크리에이터 오류 코드 사전과 같습니다.
코드 상태 기본 문구(ko) args APPLICATION_NOT_FOUND404 신청 건을 찾을 수 없습니다.applicationIdAUTH_FORBIDDEN403 접근 권한이 없습니다.— AUTH_MEMBER_NOT_FOUND404 회원 정보를 찾을 수 없습니다.— CAMPAIGN_NOT_FOUND404 존재하지 않는 캠페인입니다.collabNoCONTACT_VERIFICATION_CODE_MISMATCH400 인증번호가 올바르지 않습니다.— CONTACT_VERIFICATION_EMAIL_SEND_FAILED500 인증 이메일 발송에 실패했습니다. 잠시 후 다시 시도해주세요.— CONTACT_VERIFICATION_EXPIRED400 인증번호가 만료되었습니다. 다시 요청해주세요.— CONTRACT_INVALID_STATE400 현재 상태에서는 해당 작업을 수행할 수 없습니다.requiredStepCONTRACT_NOT_FOUND404 존재하지 않는 계약서입니다.— CONTRACT_PDF_GENERATION_FAILED500 계약서 PDF 생성에 실패했습니다.— CREATOR_LOGIN_FAILED500 로그인 처리 중 오류가 발생했습니다.— DELIVERY_INFO_NOT_FOUND404 배송 정보가 없습니다.applicationIdFEEDBACK_NOT_FOUND404 피드백을 찾을 수 없습니다.— FILE_EMPTY400 업로드된 파일이 비어 있습니다. 네트워크 상태를 확인한 뒤 다시 업로드해 주세요.— FILE_NAME_REQUIRED400 파일명이 없습니다.— FILE_UPLOAD_FAILED500 파일 업로드 중 오류가 발생했습니다.— GUIDELINE_NOT_FOUND404 존재하지 않는 가이드라인입니다.collabNoGUIDELINE_NOT_OWNED403 해당 가이드라인에 접근 권한이 없습니다.— INTERNAL_SERVER_ERROR500 서버 내부 오류가 발생했습니다.— INVALID_INFLUENCE_USER404 크리에이터 정보를 찾을 수 없습니다.— INVALID_SNS_URL400 유효하지 않은 SNS URL입니다.— MALFORMED_REQUEST_BODY400 '{field}' 값의 형식이 올바르지 않습니다.fieldPYTHON_SERVER_ERROR500 SNS 정보를 불러오지 못했습니다. 잠시 후 다시 시도해주세요.— REQUEST_PART_REQUIRED400 필수 업로드 항목 '{part}'이 없습니다.partSOCIAL_LOGIN_STATE_INVALID400 로그인 요청이 만료되었거나 올바르지 않습니다. 처음부터 다시 로그인해주세요.— SOCIAL_LOGIN_STATE_REQUIRED400 로그인 요청 정보가 없습니다. 처음부터 다시 로그인해주세요.— SOCIAL_LOGIN_UPSTREAM_FAILED502 소셜 로그인 제공자와 통신하지 못했습니다. 잠시 후 다시 시도해주세요.providerSUBMISSION_ITEM_NOT_FOUND404 제출물을 찾을 수 없습니다.itemIdSUBMISSION_ROUND_NOT_FOUND404 검수 라운드를 찾을 수 없습니다.reviewId
광고주 21개·에이전시 6개 기능의 실패 출구를 전수 점검해 남은 비규격 응답을 옮겼습니다.
새 코드 8개 : CREDIT_PAYMENT_DECLINED, BUSINESS_LOGIN_ID_DUPLICATE, BUSINESS_MANAGER_FIELD_TOO_LONG, SUBMISSION_REMINDER_ALREADY_SENT_TODAY, SUBMISSION_REMINDER_LIMIT_REACHED, AGENCY_CLIENT_LOGIN_ID_INVALID, AGENCY_CLIENT_HAS_DEPENDENCIES, AGENCY_CREDIT_MEMO_TOO_LONG. 프론트 오류 사전(packages/ui/src/lib/api-errors/*.json)에 키를 추가해야 현지화됩니다(없으면 서버 한국어 문구가 그대로 보임).
엔드포인트 이전 이후 프론트 대응 POST /ai/payments/credit/confirm(카드 승인 거절)CandyPay 코드(REJECT_CARD_COMPANY 등) + CandyPay 한국어 원문 CREDIT_PAYMENT_DECLINED(reason=결제사 원문, upstreamCode=결제사 코드)사전 키 추가. 실패 화면의 "오류 코드" 표기가 CREDIT_PAYMENT_DECLINED 로 바뀜(결제사 코드는 args.upstreamCode) POST /ai/member/signup/business이미 있는 아이디면 기존 계정을 덮어쓰고 200 BUSINESS_LOGIN_ID_DUPLICATE(loginId)사전 키 추가. 평소엔 /member/check 가 먼저 막아 도달 드묾 POST /ai/member/signup/business · PATCH /ai/business/licenseS3 업로드 실패 → BUSINESS_REGISTRATION_FAILED / INTERNAL_SERVER_ERROR FILE_UPLOAD_FAILEDuseSignUp 이 FILE_UPLOAD_FAILED 를 표시하도록 분기 필요(현재 미분기 → 무표시)POST /ai/member/signup/business · PATCH /ai/business/license내부 알림 메일 실패 시 저장은 됐는데 실패 응답 성공 응답(메일 실패는 로그만) 없음 POST /ai/business/contents/submission-reminder(실패)HTTP 200 · code 없음 · data.error 문자열만 HTTP 200 그대로 · 봉투 status/code/args 에 SUBMISSION_REMINDER_*. data.error 는 ALREADY_SENT_TODAY / MAX_REMINDERS_REACHED 유지, 그 밖의 node 원문은 SUBMISSION_REMINDER_UPSTREAM_FAILED 로 정규화 없음(기존 data.error 분기 그대로 동작). 이후 code 기준으로 옮기면 됨 POST /ai/business/license/check판독 지연 시 nginx 504 HTML(봉투 없음) 120초 타임아웃 → BUSINESS_LICENSE_CHECK_FAILED 없음 POST /ai/business/collab/draft(담당자) · PATCH /ai/business/collab/{campaignNo}/manager컬럼 길이 초과 → DATABASE_ERROR BUSINESS_MANAGER_FIELD_TOO_LONG(field, maxLength)사전 키 추가. 입력칸 maxLength 권장(이름 100·연락처 50·이메일 100) GET /member/check/{id}500 + 본문 false 전역 DATABASE_ERROR / INTERNAL_SERVER_ERROR 봉투 없음 GET /ai/business/find/password메일 발송 중 IllegalArgumentException → 404 + 예외 원문 CONTACT_VERIFICATION_EMAIL_SEND_FAILED없음 POST /agency/me/clients60자 초과 아이디 → DATABASE_ERROR AGENCY_CLIENT_LOGIN_ID_INVALID(maxLength)사전 키 추가 DELETE /agency/me/clients/{id}남은 참조 데이터 → DATABASE_ERROR AGENCY_CLIENT_HAS_DEPENDENCIES사전 키 추가 POST /agency/me/clients/{id}/credit메모 500자 초과 → DATABASE_ERROR AGENCY_CREDIT_MEMO_TOO_LONG(maxLength)사전 키 추가. 메모 입력 maxLength=500 권장 POST /agency/branding/favicon · PATCH /agency/me/branding손상 이미지 디코딩 예외 → INTERNAL_SERVER_ERROR / REQUEST_ARGUMENT_INVALID, 로고 저장 실패 AGENCY_FAVICON_IMAGE_UNSUPPORTED. 로고 저장 중 파비콘 파생 실패는 로그만 남기고 저장은 진행없음
새 코드 5개 : CAMPAIGN_CREATOR_TARGET_COUNTRY_INVALID, CAMPAIGN_PRODUCT_IMAGE_REQUIRED, PAYMENT_NOT_FOUND, REVIEW_FEEDBACK_ITEMS_REQUIRED, APPLICATION_PHASE_TRANSITION_INVALID. 공통 REQUEST_ARGUMENT_INVALID 는 크리에이터 오류 코드 에 있습니다.
엔드포인트 이전 이후 프론트 대응 POST /ai/business/contents/review/{reviewId}/feedbacks/bulkINVALID_DATA(5가지 상황 공통)REVIEW_FEEDBACK_ITEMS_REQUIRED · SUBMISSION_ROUND_NOT_FOUND · REVIEW_FEEDBACK_COUNT_EXCEEDED · SUBMISSION_ITEM_NOT_FOUND · SUBMISSION_ITEM_ROUND_MISMATCH필수(prod 배포 전) : 대시보드·어드민 FeedbackDraftContext 가 REVIEW_FEEDBACK_ITEMS_REQUIRED 를 "이미 처리됨 → 성공"으로 받도록 수정PUT /ai/progress-table/items/bulk/user/matching-status(제안 시 예산 부족)INVALID_DATANEED_CAMPAIGN_DEPOSIT(needed, available) · INSUFFICIENT_GLOBAL_CREDIT없음. 기존 크레딧 부족 모달 분기가 이제 동작 POST /ai/payments/collab/confirm(잔액 부족)INVALID_DATAINSUFFICIENT_CREDIT(currentCredit, requiredCredit)없음. isInsufficientCreditError 가 이미 받음 GET /ai/payments/{paymentKey}NOT_FOUND(옛 결제 enum) · INTERNAL_SERVER_ERROR 문자열PAYMENT_NOT_FOUND · INTERNAL_SERVER_ERROR사전 키 추가 POST /ai/business/collab/draft(타겟 국가 오류)REQ_001CAMPAIGN_CREATOR_TARGET_COUNTRY_INVALID(country)사전 키 추가 /ai/business/meta/mapping*, /ai/business/meta/business-mapping*(비관리자 호출)FORBIDDENAUTH_FORBIDDEN. message 에는 자리별 안내("관리자만 매핑을 생성할 수 있습니다." 등)를 그대로 둠없음 캠페인 이미지 분석(analyzeImagesByCollabNo) CAMPAIGN_NOT_FOUND(옛 enum) · INVALID_DATACAMPAIGN_NOT_FOUND(collabNo) · CAMPAIGN_PRODUCT_IMAGE_REQUIRED없음(서버 내부 처리) 어드민 신청 단계·데모 후보·모집 마감·피드백 승인 내부 검증 옛 enum APPLICATION_PHASE_TRANSITION_INVALID · PROGRESS_MATCHING_STATUS_INVALID · PROGRESS_MATCHED_ELIMINATE_NOT_ALLOWED · CAMPAIGN_NOT_FOUND · SUBMISSION_ROUND_NOT_FOUND · AUTH_TOKEN_REQUIRED없음
문구로 분기하는 INVALID_DATA — 잔액 부족(결제 버튼)처럼 프론트가 INVALID_DATA 와 한국어 문구 일부로 분기하는 곳이 남아 있습니다. 진행표 매칭 예산 부족·캠페인 결제 잔액 부족·벌크 피드백은 2026-10-08 에 옮겼습니다(아래 변경 이력).
리포트(/ai/report/**)의 SERVER_ERROR — 리포트 로그인 등이 SERVER_ERROR 로 분기해 유지했습니다.
블로그 검수 도구의 BLOG_REVIEW_ERROR — 프론트 분기 대상이라 유지했습니다.
어드민 전용 경로 — 이번 범위 밖입니다.
아임웹 연동 GET /ai/imweb/oauth/authorize — ctx 토큰 검증 실패 시 401 + 본문 Invalid ctx(plain text). 가입 직후에만 호출되고 FE 는 로그만 남겨 화면 노출이 없으며, prod 호출이 월 1건 수준이라 2026-10-08 점검에서 보류했습니다.
도달 불가 옛 enum — 사업자등록증 판독 빈 파일(PythonApiService, 컨트롤러가 먼저 막음), 파비콘 변환 확장자(AgencyFaviconConverter, 업로드 경로가 먼저 막음), 어드민 전용 에이전시 업로드 대상(AgencyService.resolveUploadTarget)은 사용자에게 닿지 않아 남겨 두었습니다.