시작하기
크리에이터 오류 코드 크리에이터 앱이 로케일별 오류 문구를 고를 때 쓰는 코드 사전입니다.
크리에이터 앱은 로케일이 4종(ko·en·vi·jp)인데, 서버 오류 메시지는 한국어뿐이었습니다.
일본·미국·베트남 크리에이터는 무엇이 잘못됐는지 읽을 수 없었습니다.
이 문서는 그 문구를 프론트에서 로케일별로 고를 수 있도록, 서버가 내려주는 code 의 전체 사전 을 정리한 것입니다.
코드 정의의 원본은 com.app.glowb.Enum.CreatorErrorCode 입니다. 이 문서는 그 enum 에서 생성했습니다.
{
"status" : 400 ,
"code" : "EXPLANATION_ATTACHMENT_TOO_MANY" ,
"message" : "첨부는 최대 5개까지 등록할 수 있습니다. 현재 7개입니다." ,
"args" : { "max" : 5 , "current" : 7 },
"data" : null
}
필드 설명 status이 오류의 HTTP 상태. 코드 하나당 항상 같은 값 이라 분기 기준으로 써도 된다. code로케일 문구를 고르는 키. 아래 표에 있는 값이 전부다. message한국어 문장. fallback 용 이다 — 아직 번역을 넣지 않은 코드는 이 값을 그대로 띄우면 된다. args문장에 끼워 넣을 값. 슬롯이 있는 코드에서만 실린다(없으면 키 자체가 없다). data오류와 무관한 부가 데이터. 기존 응답과 동일.
실제 HTTP 응답 코드는 대부분 200 입니다. 진짜 상태는 본문의 status 에 들어 있습니다(기존 규약 그대로).
code 는 서버 enum 의 상수명과 항상 같다. 별도 코드 문자열을 두지 않으므로 중복이 생길 수 없다.
번호를 쓰지 않는다. CONTRACT_003 같은 값은 뜻을 읽을 수 없어 폐기했다.
형태는 도메인_대상_사유 의 대문자 스네이크다. 끝의 사유가 HTTP 상태를 결정한다.
문장에 들어갈 값은 문장에 박지 않고 args 슬롯으로 뺀다.
사유 접미사 status _REQUIRED · _INVALID · _UNSUPPORTED · _NOT_ALLOWED · _EMPTY · _MISMATCH · _TOO_MANY · _TOO_LONG · _BOUNCED · _EXPIRED400 _UNAUTHORIZED401 _FORBIDDEN · _NOT_OWNED · _NOT_VERIFIED403 _NOT_FOUND · _MISSING404 _ALREADY_* · _DUPLICATE · _EXISTS · _EXHAUSTED · _REMAINING · _CLOSED · _EXCEEDED409 _GONE · _DELETED · _VOIDED410 _TOO_LARGE413 _RATE_LIMITED429 _FAILED · _CORRUPTED · _DUPLICATED500 _UPSTREAM_FAILED502 _UNAVAILABLE503
표 밖의 예외는 둘뿐이고, 둘 다 도메인이 상태를 정합니다.
AUTH_TOKEN_* · AUTH_REFRESH_TOKEN_* 은 접미사와 무관하게 401 입니다.
공통 인프라 코드(INTERNAL_SERVER_ERROR · DATABASE_ERROR · DB_LOCK_ERROR · CACHE_ERROR · VALIDATION_ERROR · MALFORMED_REQUEST_BODY)는 기존 코드 문자열을 물려받은 고정 값입니다.
레거시 호환 코드 — INVALID_INFLUENCE_USER(404) · DUPLICATE_PORTFOLIO(409) · CONTACT_VERIFICATION_REQUIRED(403) · CONTRACT_INVALID_STATE(400) · CONTRACT_OTP_RATE_LIMIT(429) · INVALID_SNS_URL(400) · PYTHON_SERVER_ERROR(500) · TOKEN_INVALID(401) · REFRESH_TOKEN_EXPIRED(401) · SCRIPT_PDF_IMPORT_FAILED(502) · SERVER_ERROR(500) · ACCOUNT_WITHDRAWN(401). 이름이 규칙을 따르지 않지만 프론트가 이미 이 이름으로 분기하고 있어 보존합니다.
이 다섯은 한때 규격에 맞게 개명·분할했다가 되돌린 것입니다. 크리에이터 앱과 모바일 앱이 옛 이름으로
분기하고 있어 재신청 안내 토스트, 마이페이지 홈 리다이렉트, 포트폴리오 중복 안내, 연락처 재인증 모달,
온보딩 탈출구가 조용히 죽었습니다. 상태코드는 그대로라 상태 분기만으로는 드러나지 않습니다.
쪼갰던 채널·대상 정보는 args.channel · args.target 으로 살렸습니다.
2026-09-09 재감사에서 네 건을 더 찾아 되돌렸습니다 — 포트폴리오 SNS 크롤링의 INVALID_SNS_URL·PYTHON_SERVER_ERROR
(크리에이터 링크 입력 화면과 어드민 콜드메일이 함께 분기합니다), 토큰 갱신의 TOKEN_INVALID·REFRESH_TOKEN_EXPIRED.
code 문자열은 프론트의 번역 키입니다. 한 번 배포한 코드는 이름을 바꾸지 않습니다.
뜻이 달라지면 새 코드를 추가하고 옛 코드는 사용처를 지웁니다.
프론트(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 {
"SUBMISSION_ITEMS_EMPTY" : "There is nothing to submit." ,
"EXPLANATION_ATTACHMENT_TOO_MANY" : "Up to {max} attachments allowed. You have {current}." ,
"REQUEST_ARGUMENT_INVALID" : "Invalid request value. ({reason})"
}
code 로 분기하는 화면 로직(예: 특정 코드면 모달 열기)은 번역과 별개입니다. 서버 코드명이 바뀌면 그 분기도 함께 고쳐야 합니다.
이 문서의 변경 이력 에 프론트 대응이 필요한 항목을 적어 둡니다.
@Valid 실패는 코드가 항상 VALIDATION_ERROR 하나입니다. 어느 필드가 무엇을 어겼는지는 args.errors 에 실립니다.
{
"status" : 400 ,
"code" : "VALIDATION_ERROR" ,
"message" : "받는 사람은 필수입니다, 기본 주소는 필수입니다" ,
"args" : {
"errors" : [
{ "field" : "recipientName" , "code" : "VALIDATION_REQUIRED" , "message" : "받는 사람은 필수입니다" },
{ "field" : "baseAddress" , "code" : "VALIDATION_REQUIRED" , "message" : "기본 주소는 필수입니다" }
]
}
}
필드별 코드는 어긴 제약이 무엇인지를 가리킵니다. field 와 조합하면 한국어 문장 없이도 문구를 만들 수 있습니다.
필드 코드 어긴 제약 VALIDATION_REQUIRED@NotNull · @NotBlank · @NotEmptyVALIDATION_EMAIL@EmailVALIDATION_SIZE@Size · @LengthVALIDATION_PATTERN@PatternVALIDATION_MUST_BE_TRUE@AssertTrue (약관 동의 등)VALIDATION_MUST_BE_FALSE@AssertFalseVALIDATION_RANGE@Min · @Max · @Positive 계열VALIDATION_INVALID그 외
전체 175개입니다. 슬롯 열이 있는 코드는 args 가 함께 내려옵니다.
모든 크리에이터 엔드포인트에서 나올 수 있다. GlobalExceptionHandler 가 채운다.
코드 status 한국어 문구 슬롯 INTERNAL_SERVER_ERROR500 서버 내부 오류가 발생했습니다.— DATABASE_ERROR500 데이터베이스 처리 중 오류가 발생했습니다.— DB_LOCK_ERROR503 일시적인 처리 지연이 발생했습니다. 잠시 후 다시 시도해주세요.— CACHE_ERROR503 캐시 서버 처리 중 오류가 발생했습니다.— RESOURCE_NOT_FOUND404 요청하신 리소스를 찾을 수 없습니다.— VALIDATION_ERROR400 입력값이 올바르지 않습니다.errorsMALFORMED_REQUEST_BODY400 '{field}' 값의 형식이 올바르지 않습니다.field(필드를 알 때만)REQUEST_PARAM_REQUIRED400 필수 요청 값 '{param}'이 없습니다.paramREQUEST_PART_REQUIRED400 필수 업로드 항목 '{part}'이 없습니다.partREQUEST_ARGUMENT_INVALID400 요청 값이 올바르지 않습니다. ({reason})reasonPATH_VARIABLE_INVALID400 '{name}' 값의 형식이 올바르지 않습니다.nameUPLOAD_TOO_LARGE413 업로드 용량이 허용 범위를 초과했습니다.— REQUEST_HEADER_REQUIRED400 필수 요청 헤더 '{header}'이 없습니다.headerREQUEST_METHOD_NOT_ALLOWED400 지원하지 않는 요청 방식입니다.methodREQUEST_CONTENT_TYPE_UNSUPPORTED400 지원하지 않는 요청 형식입니다.contentType
AUTH_TOKEN_* 과 AUTH_FORBIDDEN 은 시큐리티 필터 단계에서 나가므로 봉투가 다르다(아래 “아직 규격 밖인 구간” 참고).
코드 status 한국어 문구 슬롯 AUTH_TOKEN_REQUIRED401 로그인이 필요합니다.— AUTH_TOKEN_EXPIRED401 로그인이 만료되었습니다. 다시 로그인해주세요.— TOKEN_INVALID401 유효하지 않은 토큰입니다. 다시 로그인해주세요.— REFRESH_TOKEN_EXPIRED401 로그인 세션이 만료되었습니다. 다시 로그인해주세요.— AUTH_FORBIDDEN403 접근 권한이 없습니다.— ACCOUNT_WITHDRAWN401 탈퇴한 계정입니다. 다시 로그인할 수 없습니다.— AUTH_MEMBER_NOT_FOUND404 회원 정보를 찾을 수 없습니다.— SOCIAL_LOGIN_TYPE_UNSUPPORTED400 지원하지 않는 소셜 로그인입니다.— SOCIAL_LOGIN_UPSTREAM_FAILED502 소셜 로그인 제공자와 통신하지 못했습니다. 잠시 후 다시 시도해주세요.providerSOCIAL_LOGIN_STATE_REQUIRED400 로그인 요청 정보가 없습니다. 처음부터 다시 로그인해주세요.— SOCIAL_LOGIN_STATE_INVALID400 로그인 요청이 만료되었거나 올바르지 않습니다. 처음부터 다시 로그인해주세요.—
코드 status 한국어 문구 슬롯 INVALID_INFLUENCE_USER404 크리에이터 정보를 찾을 수 없습니다.— CREATOR_SIGNUP_FAILED500 회원가입 처리 중 오류가 발생했습니다.— CREATOR_WITHDRAWAL_FAILED500 회원 탈퇴 처리 중 오류가 발생했습니다.— CREATOR_LOGIN_FAILED500 로그인 처리 중 오류가 발생했습니다.— BUSINESS_PROFILE_NOT_FOUND404 기업 정보를 찾을 수 없습니다.— RECRUIT_CORP_SAVE_FAILED500 기업 등록 신청 저장에 실패했습니다.—
CONTACT_VERIFICATION_EMAIL_BOUNCED 는 프론트가 이미 분기에 쓰고 있어 이름을 바꾸지 않는다.
코드 status 한국어 문구 슬롯 CONTACT_VERIFICATION_TARGET_REQUIRED400 인증할 연락처가 필요합니다.targetCONTACT_VERIFICATION_REQUIRED403 이메일 또는 전화번호 인증이 필요합니다.channel · maskedContactCONTACT_VERIFICATION_EMAIL_FORMAT_INVALID400 유효한 이메일 주소를 입력해주세요.— CONTACT_VERIFICATION_CODE_REQUIRED400 인증번호를 입력해주세요.— CONTACT_VERIFICATION_CODE_MISMATCH400 인증번호가 올바르지 않습니다.— CONTACT_VERIFICATION_EXPIRED400 인증번호가 만료되었습니다. 다시 요청해주세요.— CONTACT_VERIFICATION_RATE_LIMITED429 인증번호 요청이 너무 많습니다. 잠시 후 다시 시도해주세요.— CONTACT_VERIFICATION_EMAIL_SEND_FAILED500 인증 이메일 발송에 실패했습니다. 잠시 후 다시 시도해주세요.— CONTACT_VERIFICATION_SMS_SEND_FAILED500 인증 문자 발송에 실패했습니다. 잠시 후 다시 시도해주세요.— CONTACT_VERIFICATION_SMS_UNSUPPORTED400 해외 전화번호는 SMS 인증 대상이 아닙니다. 이메일 인증을 진행해주세요.telDialCode · maskedContact · savedCONTACT_VERIFICATION_EMAIL_BOUNCED400 이메일 수신이 실패했습니다. 다른 이메일로 다시 인증해주세요.maskedContact
코드 status 한국어 문구 슬롯 CAMPAIGN_NOT_FOUND404 존재하지 않는 캠페인입니다.collabNoCAMPAIGN_RECRUITMENT_CLOSED409 모집이 마감된 캠페인입니다.— CAMPAIGN_SELECTION_CLOSED409 이미 선정이 마감된 캠페인입니다.— CAMPAIGN_SNS_CONFIG_CORRUPTED500 캠페인 SNS 설정이 올바르지 않습니다.collabNoCAMPAIGN_CATEGORY_INVALID400 존재하지 않는 카테고리입니다.category
코드 status 한국어 문구 슬롯 APPLICATION_NOT_FOUND404 신청 건을 찾을 수 없습니다.applicationIdAPPLICATION_NOT_OWNED403 본인의 신청 건이 아닙니다.— CAMPAIGN_ALREADY_APPLIED409 이미 해당 캠페인에 신청하셨습니다.reasonAPPLICATION_CAMPAIGN_FAILED500 캠페인 신청에 실패했습니다.— APPLICATION_UNIT_PRICE_INVALID400 단가 값이 올바르지 않습니다.—
코드 status 한국어 문구 슬롯 NEGOTIATION_NOT_FOUND404 단가 제안을 찾을 수 없습니다.— NEGOTIATION_NOT_OWNED403 본인의 단가 제안이 아닙니다.— NEGOTIATION_ALREADY_RESPONDED409 이미 응답한 단가 제안입니다.— NEGOTIATION_ACTION_INVALID400 유효하지 않은 응답입니다. (accept 또는 reject)— NEGOTIATION_VOIDED410 취소된 단가 제안입니다. 새로 받은 제안을 확인해주세요.—
코드 status 한국어 문구 슬롯 PROVIDED_OPTION_NOT_OWNED403 본인의 신청 건이 아닙니다.— PROVIDED_OPTION_STATE_INVALID400 현재 상태에서는 제공 옵션을 선택할 수 없습니다.— PROVIDED_OPTION_CHOICE_INVALID400 존재하지 않는 옵션 선택입니다.— PROVIDED_OPTION_MULTI_CHOICE_NOT_ALLOWED400 이 옵션은 하나만 선택할 수 있습니다.—
코드 status 한국어 문구 슬롯 SUBMISSION_ITEM_NOT_FOUND404 제출물을 찾을 수 없습니다.itemIdSUBMISSION_ROUND_NOT_FOUND404 검수 라운드를 찾을 수 없습니다.reviewIdSUBMISSION_ROUND_ID_REQUIRED400 검수 라운드 ID는 필수입니다.— SUBMISSION_ITEM_TYPE_REQUIRED400 제출물 타입은 필수입니다.— SUBMISSION_ITEMS_EMPTY400 제출할 제출물이 없습니다.— SUBMISSION_DRAFT_ITEMS_EMPTY400 저장할 제출물이 없습니다.— SUBMISSION_FILE_REQUIRED400 {typeLabel} 파일을 업로드해주세요.typeLabel · itemTypeSUBMISSION_DELETE_NOT_ALLOWED400 스크립트만 삭제할 수 있습니다.— SUBMISSION_DELETE_ALREADY_SUBMITTED409 이미 제출한 스크립트는 삭제할 수 없습니다.— SUBMISSION_VERSION_NOT_FOUND404 버전 {version}을 찾을 수 없습니다.version
코드 status 한국어 문구 슬롯 FEEDBACK_NOT_FOUND404 피드백을 찾을 수 없습니다.— FEEDBACK_EDIT_FORBIDDEN403 관리자만 피드백을 수정·삭제할 수 있습니다.— FEEDBACK_CREATE_FORBIDDEN403 관리자만 피드백을 추가할 수 있습니다.— FEEDBACK_CONTENT_REQUIRED400 피드백 내용을 입력해주세요.—
코드 status 한국어 문구 슬롯 AI_REVIEW_INFO_NOT_FOUND404 검수 정보를 찾을 수 없습니다.— AI_REVIEW_NOT_OWNED403 본인 신청 건에 대해서만 AI 검수를 요청할 수 있습니다.— SCRIPT_CONTENT_EMPTY400 작성된 스크립트 내용이 없습니다. 스크립트를 작성한 후 검수를 요청해주세요.— AI_REVIEW_ITEM_TYPE_INVALID400 영상 제출물만 AI 검수를 요청할 수 있습니다.— AI_REVIEW_VIDEO_REQUIRED400 업로드된 영상이 없습니다. 영상을 업로드한 후 검수를 요청해주세요.— AI_REVIEW_CONTENT_TYPE_INVALID400 유효하지 않은 검수 종류입니다. (SCRIPT 또는 VIDEO)— AI_REVIEW_COLLAB_NO_REQUIRED400 캠페인 번호는 필수입니다.— AI_REVIEW_VIDEO_URL_REQUIRED400 영상 URL은 필수입니다.— AI_REVIEW_QUOTA_EXHAUSTED409 AI 검수 요청 횟수를 모두 사용했습니다.— AI_REVIEW_QUOTA_REMAINING409 아직 남은 검수 횟수가 있어 추가 요청할 수 없습니다.— AI_REVIEW_UPSTREAM_FAILED502 AI 검수 서버 연동에 실패했습니다. 잠시 후 다시 시도해주세요.—
코드 status 한국어 문구 슬롯 SCRIPT_IMPORT_FILE_REQUIRED400 PDF 파일을 첨부해주세요.— SCRIPT_IMPORT_NOT_OWNED403 본인 신청 건에 대해서만 스크립트 가져오기가 가능합니다.— SCRIPT_PDF_IMPORT_FAILED502 PDF를 스크립트로 변환하지 못했습니다. 기존 초안은 유지됩니다. 잠시 후 다시 시도해주세요.— SCRIPT_IMPORT_FAILED500 스크립트 가져오기에 실패했습니다.—
코드 status 한국어 문구 슬롯 FINAL_SUBMISSION_NOT_FOUND404 제출된 최종 제작물이 없습니다. 먼저 제출해주세요.— FINAL_SUBMISSION_PHASE_NOT_ALLOWED400 업로드/정산 단계에서만 최종 제작물을 제출할 수 있습니다.— FINAL_SUBMISSION_FIRST_SUBMIT_REQUIRED400 아직 제출되지 않았습니다. 최초 제출을 먼저 진행해주세요.—
코드 status 한국어 문구 슬롯 EXPLANATION_TARGET_NOT_FOUND404 최종 제출물이 없습니다. 제출 후에 이용할 수 있습니다.— EXPLANATION_REQUEST_BODY_REQUIRED400 요청 본문이 필요합니다.— EXPLANATION_CONTENT_REQUIRED400 소명 내용이나 첨부 중 하나는 있어야 합니다.— EXPLANATION_ATTACHMENT_TOO_MANY400 첨부는 최대 {max}개까지 등록할 수 있습니다. 현재 {current}개입니다.max · currentEXPLANATION_ATTACHMENT_URL_TOO_LONG400 첨부 URL이 너무 깁니다. (최대 {maxLength}자)maxLengthEXPLANATION_ATTACHMENT_SERIALIZE_FAILED500 첨부 처리 중 오류가 발생했습니다.—
로그인 없이 열리는 매직링크 화면이라, 로케일을 URL 이나 브라우저 설정에서 잡아야 한다.
코드 status 한국어 문구 슬롯 SUBMIT_LINK_NOT_FOUND404 유효하지 않은 링크입니다.— SUBMIT_LINK_GONE410 만료되었거나 사용할 수 없는 링크입니다.— SUBMIT_LINK_ROUND_MISMATCH400 이 링크로 제출할 수 없는 검수 라운드입니다.— SUBMIT_LINK_ROUND_ID_REQUIRED400 검수 라운드 ID는 필수입니다.— SUBMIT_LINK_APPLICATION_NOT_FOUND404 캠페인 신청을 찾을 수 없습니다.applicationIdSUBMIT_LINK_OWNER_NOT_FOUND404 신청 소유자를 확인할 수 없습니다.— SUBMIT_LINK_PROGRESS_ITEM_NOT_FOUND404 제출 대상을 찾을 수 없습니다.progressItemId
코드 status 한국어 문구 슬롯 DM_LINK_VERIFY_UNAVAILABLE503 인스타그램 DM 인증을 지금은 사용할 수 없습니다.— DM_LINK_CODE_ISSUE_FAILED500 인증 코드 발급에 실패했습니다. 잠시 후 다시 시도해주세요.—
코드 status 한국어 문구 슬롯 DELIVERY_ADDRESS_NOT_FOUND404 배송지를 찾을 수 없습니다.addressIdDELIVERY_ADDRESS_NOT_OWNED403 본인의 배송지가 아닙니다.— DELIVERY_ADDRESS_DELETED410 이미 삭제된 배송지입니다.— DELIVERY_ADDRESS_INPUT_REQUIRED400 배송지를 선택하거나 새 배송지를 입력해주세요.— DELIVERY_INFO_NOT_FOUND404 배송 정보가 없습니다.applicationId
코드 status 한국어 문구 슬롯 CONTRACT_NOT_FOUND404 존재하지 않는 계약서입니다.— CONTRACT_NOT_OWNED403 해당 계약서에 접근 권한이 없습니다.— CONTRACT_VOIDED410 폐기된 계약서입니다.— CONTRACT_ALREADY_SIGNED409 이미 서명된 계약서입니다.— CONTRACT_INVALID_STATE400 현재 상태에서는 해당 작업을 수행할 수 없습니다.requiredStepCONTRACT_FIELD_REQUIRED400 {label} 항목을 입력해주세요.label · fieldCONTRACT_PAYMENT_METHOD_REQUIRED400 지급 방법을 선택해주세요.— CONTRACT_PAYMENT_METHOD_UNSUPPORTED400 지원하지 않는 지급수단입니다.methodCONTRACT_PAYMENT_INFO_REQUIRED400 지급 정보를 입력해주세요.— CONTRACT_OTP_EMAIL_MISSING404 등록된 이메일이 없습니다.— CONTRACT_OTP_PHONE_MISSING404 등록된 전화번호가 없습니다.— CONTRACT_OTP_RATE_LIMIT429 인증번호 요청이 너무 많습니다. 잠시 후 다시 시도해주세요.— CONTRACT_OTP_MISMATCH400 인증번호가 올바르지 않습니다.— CONTRACT_OTP_EMAIL_SEND_FAILED500 인증 이메일 발송에 실패했습니다. 잠시 후 다시 시도해주세요.— CONTRACT_OTP_SMS_SEND_FAILED500 인증 문자 발송에 실패했습니다. 잠시 후 다시 시도해주세요.— CONTRACT_PDF_GENERATION_FAILED500 계약서 PDF 생성에 실패했습니다.— CONTRACT_DOCUMENT_UPLOAD_FAILED500 계약서 서류 업로드에 실패했습니다.— CONTRACT_PAYMENT_INFO_SERIALIZE_FAILED500 지급 정보 처리 중 오류가 발생했습니다.— CONTRACT_PAYMENT_INFO_RENDER_FAILED500 계약서 지급 정보를 불러오지 못했습니다.— CONTRACT_VARIABLE_UPDATE_FAILED500 계약서 정보 갱신에 실패했습니다.—
코드 status 한국어 문구 슬롯 GUIDELINE_NOT_FOUND404 존재하지 않는 가이드라인입니다.collabNoGUIDELINE_NOT_OWNED403 해당 가이드라인에 접근 권한이 없습니다.—
코드 status 한국어 문구 슬롯 INSTAGRAM_OAUTH_CODE_REQUIRED400 인증 코드가 필요합니다.— INSTAGRAM_OAUTH_STATE_REQUIRED400 인증 요청 정보가 필요합니다.— INSTAGRAM_OAUTH_STATE_INVALID400 인증 요청 정보가 올바르지 않습니다. 처음부터 다시 시도해주세요.— INSTAGRAM_UPSTREAM_FAILED502 Instagram 인증에 실패했습니다. 잠시 후 다시 시도해주세요.— INSTAGRAM_BUSINESS_ACCOUNT_NOT_FOUND404 연결된 Instagram 비즈니스 계정이 없습니다. Facebook 페이지와 Instagram 계정을 먼저 연결해주세요.— INSTAGRAM_ACCOUNT_ALREADY_CONNECTED409 이미 다른 계정에 연동된 Instagram 계정입니다.— INSTAGRAM_ACCOUNT_NOT_FOUND404 연동된 계정을 찾을 수 없습니다.— INSTAGRAM_ACCOUNT_NOT_OWNED403 본인의 연동 계정이 아닙니다.— INSTAGRAM_ACCOUNT_TYPE_INVALID400 Instagram 계정이 아닙니다.— INSTAGRAM_RECHECK_UPSTREAM_FAILED502 게시물 재검수 서버에 연결하지 못했습니다. 잠시 후 다시 시도해주세요.— INSTAGRAM_RECHECK_FAILED500 게시물 재검수 중 오류가 발생했습니다.—
코드 status 한국어 문구 슬롯 PORTFOLIO_NOT_FOUND404 존재하지 않는 포트폴리오입니다.— DUPLICATE_PORTFOLIO409 사용자당 하나의 포트폴리오만 등록할 수 있습니다.— PORTFOLIO_SAVE_FAILED500 포트폴리오 저장에 실패했습니다.— PORTFOLIO_SNS_INFO_NOT_FOUND404 존재하지 않는 SNS 정보입니다.— PORTFOLIO_REFERENCE_REQUIRED400 레퍼런스 URL을 입력해주세요.— PORTFOLIO_REFERENCE_NOT_FOUND404 존재하지 않는 레퍼런스 정보입니다.— PORTFOLIO_THEME_INVALID400 존재하지 않는 테마입니다.— PORTFOLIO_THEME_COLOR_INVALID400 존재하지 않는 색상입니다.— PORTFOLIO_THEME_FONT_INVALID400 존재하지 않는 폰트입니다.— PORTFOLIO_REFERENCE_METRIC_INVALID400 존재하지 않는 성과 수치입니다.— PORTFOLIO_FOLLOWER_GENDER_INVALID400 존재하지 않는 팔로워 성별입니다.genderPORTFOLIO_AI_UPSTREAM_FAILED502 AI 생성 중 일시적인 오류가 발생했습니다. 잠시 후 다시 시도해주세요.— INVALID_SNS_URL400 유효하지 않은 SNS URL입니다.— PYTHON_SERVER_ERROR500 SNS 정보를 불러오지 못했습니다. 잠시 후 다시 시도해주세요.— SERVER_ERROR500 SNS 정보를 불러오는 중 연결에 실패했습니다. 잠시 후 다시 시도해주세요.—
코드 status 한국어 문구 슬롯 NOTIFICATION_NOT_FOUND404 존재하지 않는 알림입니다.— NOTIFICATION_NOT_OWNED403 해당 알림에 접근할 권한이 없습니다.— NOTIFICATION_IDS_REQUIRED400 알림 ID 목록이 필요합니다.—
코드 status 한국어 문구 슬롯 AFFILIATE_NOT_FOUND404 존재하지 않는 상품입니다.— AFFILIATE_QUERY_FAILED500 어필리에이트 상품 조회에 실패했습니다.— AFFILIATE_IMAGE_LOAD_FAILED500 상품 이미지를 불러오지 못했습니다.—
코드 status 한국어 문구 슬롯 FILE_REQUIRED400 파일이 비어 있습니다.— FILE_EMPTY400 업로드된 파일이 비어 있습니다. 네트워크 상태를 확인한 뒤 다시 업로드해 주세요.— FILE_NAME_REQUIRED400 파일명이 없습니다.— FILE_CONTENT_TYPE_REQUIRED400 파일 형식(Content-Type)이 필요합니다.— FILE_TYPE_UNSUPPORTED400 지원하지 않는 파일 형식입니다.contentTypeFILE_UPLOAD_FAILED500 파일 업로드 중 오류가 발생했습니다.— FILE_UPLOAD_URL_ISSUE_FAILED500 업로드 URL 발급에 실패했습니다.—
이전 이후 프론트 대응 INVALID_ARGUMENT(400, 서비스 원문)REQUEST_ARGUMENT_INVALID(400). 원문은 args.reason 에 실림사전 키 추가(reason 슬롯 포함). 추가 전에는 서버 문구가 그대로 보임 MALFORMED_REQUEST_BODY(args 없음)필드를 알 때 args.field 를 함께 보냄 없음(사전 키가 이미 있음) CACHE_ERROR · DB_LOCK_ERROR · DATABASE_ERROR · RESOURCE_NOT_FOUND같은 코드·상태·문구(enum 경유로 정리만) 없음
아래는 이 사전을 그대로 쓸 수 없는 경로입니다. 프론트는 당분간 예외 처리가 필요합니다.
구간 지금 내려가는 형태 프론트가 할 일 토큰 만료·누락 HTTP 401 + {"status":401,"code":"AUTH_TOKEN_EXPIRED","message":"…"} — 봉투가 통일돼 공통 파서로 읽힌다. 다만 HTTP 상태가 실제 401 이라 200 을 전제한 코드는 확인이 필요하다code 로 재로그인 유도권한 불일치 HTTP 403 + {"status":403,"code":"AUTH_FORBIDDEN","message":"…"}code 로 분기컨테이너 오류 포워딩 /error 실제 오류 상태 + {"status","code","message"}. code 는 RESOURCE_NOT_FOUND(404) 또는 INTERNAL_SERVER_ERROR 공통 fallback AI 검수 비동기 실패 응답 자체가 없다. 검수 요청은 즉시 200 을 받고, 실패는 쿼터 환불로만 끝난다결과 폴링에서 판단해야 한다 nginx 업로드 용량 초과 앱에 닿지 않고 nginx 413 HTML JSON 파싱 실패를 용량 초과로 안내
크리에이터가 닿는 경로는 이 사전대로 치환을 마쳤습니다. 다만 광고주·어드민과 코드를 공유하는
메서드가 있어, 일부 엔드포인트는 여전히 옛 코드(INVALID_DATA 등)를 냅니다.
프론트 번역 단계는 사전에 없는 코드를 서버 message 로 흘려보내므로 , 옛 코드가 남은 화면도 비지 않습니다.