오류 응답 형식
모든 오류는 동일한 envelope을 따릅니다:{
"result": "ERROR",
"errorCode": "P-001",
"message": "정책 그룹을 찾을 수 없습니다."
}
errorCode 필드는 안정적인 식별자입니다. 통합 코드는 errorCode 값을 기준으로 분기하세요. message는 사람이 읽기 위한 텍스트로 Accept-Language 헤더(en 또는 ko)에 따라 지역화되며 시간이 지나면서 표현이 바뀔 수 있지만, errorCode는 바뀌지 않습니다.
이 문서는 통합 API와 콘솔(계정, 결제, 멤버 관리)을 포함해 플랫폼이 반환할 수 있는 모든 코드를 열거합니다. 통합 클라이언트가 실제로 만나지 않는 섹션도 있습니다. 멤버 & 계정(M)이나 Auth의 로그인 관련 항목이 그렇습니다. 그래도 함께 문서화하는 이유는 하나입니다. 어떤 표면에서 어떤 코드를 만나든 의미가 정확히 하나로 풀려야 하기 때문입니다.
코드 번호는 안정적인 식별자입니다. 한 번 할당된 코드는 원래 의미가 사라진 뒤에도 다른 뜻으로 재사용되지 않습니다. 그래서 번호 중간이 비어 있는 것은 정상입니다. 엔진이 도메인 중립 원시(primitive) 액션으로 통합되면서 폐기된 자리입니다. 이 문서의 표에 실린 코드는 모두 현재 플랫폼이 반환할 수 있는 것입니다.
공통 (C)
| 코드 | HTTP | 설명 |
|---|---|---|
C-001 | 400 | 입력값이 올바르지 않습니다 |
C-002 | 405 | 허용되지 않은 HTTP 메서드입니다 |
C-003 | 404 | 요청한 리소스를 찾을 수 없습니다 |
C-004 | 500 | 서버 내부 오류가 발생했습니다. 잠시 후 다시 시도해주세요 |
C-005 | 400 | 데이터 타입이 올바르지 않습니다 |
C-006 | 409 | 이미 존재하는 리소스입니다. (대상: {0}) |
C-007 | 429 | 요청량이 너무 많습니다. 잠시 후 다시 시도해주세요 |
C-008 | 400 | 올바르지 않은 시간대입니다: {0}. IANA 시간대 형식을 사용해주세요 (예: Asia/Seoul, UTC) |
C-009 | 400 | {0} 상태에서 {1} 상태로 변경할 수 없습니다 |
인증 & 권한 (A)
| 코드 | HTTP | 설명 |
|---|---|---|
A-001 | 401 | 인증에 실패했습니다 |
A-002 | 403 | 접근 권한이 없습니다 |
A-003 | 401 | 유효하지 않은 API 키입니다 |
A-004 | 409 | 이미 가입된 이메일 주소입니다 |
A-005 | 409 | 활성 상태의 API 키는 최대 {0}개까지만 생성할 수 있습니다 |
A-006 | 401 | 이메일 또는 비밀번호가 올바르지 않습니다 |
A-009 | 401 | Google 계정의 이메일 인증이 완료되지 않았습니다 |
A-010 | 401 | Google 인증에 실패했습니다. 다시 로그인해주세요 |
A-012 | 400 | Google로 가입된 계정은 비밀번호를 변경할 수 없습니다 |
A-013 | 400 | 새 비밀번호는 현재 비밀번호와 달라야 합니다 |
A-014 | 400 | 비밀번호 재설정 링크가 만료되었거나 유효하지 않습니다 |
A-015 | 503 | 인증 메일 발송에 실패했습니다. 잠시 후 다시 시도해주세요 |
A-016 | 401 | 세션이 만료되었습니다. 다시 로그인해주세요 |
A-017 | 401 | 유효하지 않은 세션입니다. 다시 로그인해주세요 |
A-018 | 403 | 해당 작업에는 시스템 계정이 필요합니다 |
A-019 | 403 | System Manager 계정은 변경할 수 없습니다 |
A-020 | 401 | 비밀번호가 올바르지 않습니다 |
A-021 | 429 | 비밀번호를 여러 번 잘못 입력했습니다. 잠시 후 다시 시도해 주세요 |
정책 엔진 (P)
| 코드 | HTTP | 설명 |
|---|---|---|
P-001 | 404 | 정책 그룹을 찾을 수 없습니다 |
P-002 | 404 | 정책 버전을 찾을 수 없습니다 |
P-003 | 500 | 정책 실행 중 오류가 발생했습니다 |
P-005 | 404 | 정책 규칙(Rule)을 찾을 수 없습니다 |
P-006 | 400 | 현재 상태에서는 수정할 수 없습니다. (DRAFT 상태만 수정 가능) |
P-007 | 400 | 배포할 규칙이 존재하지 않습니다. 규칙을 먼저 등록해주세요 |
P-008 | 400 | 현재 상태에서는 수행할 수 없는 작업입니다. 상태를 확인해주세요 |
P-009 | 403 | 해당 정책 그룹은 현재 비활성화(DISABLED) 상태입니다. 실행할 수 없습니다 |
P-010 | 400 | 요청한 규칙 ID 중 일부가 존재하지 않거나 현재 버전에 속하지 않습니다 |
P-011 | 400 | 같은 Activation 그룹 내의 Mode, Strategy, Execution Limit은 동일해야 합니다: {0} |
P-012 | 400 | 같은 Mutex 그룹 내의 Mode, Strategy, Mutex Limit은 동일해야 합니다: {0} |
P-013 | 400 | 롤백할 이전 버전이 없습니다 |
P-014 | 404 | 배포 이력을 찾을 수 없습니다 |
P-015 | 400 | 필수 입력 fact가 누락되었습니다: [{0}]. GET /execution/groups/{groupId}/requirements로 필수 fact를 확인해주세요 |
P-016 | 400 | 해당 버전은 대상 정책 그룹에 속하지 않습니다 |
P-017 | 409 | 현재 배포 중이거나 A/B 테스트에 사용 중인 버전은 삭제할 수 없습니다 |
P-018 | 400 | 유효 시작일은 종료일보다 이후일 수 없습니다 |
P-019 | 400 | 이 정책 그룹에 배포된 버전이 없습니다. 실행 전에 버전을 배포해주세요 |
P-020 | 409 | 운영 중인 버전이 배포되어 있어 정책 그룹을 삭제할 수 없습니다. 먼저 배포를 해제해주세요 |
P-021 | 409 | A/B 테스트가 실행 중이어서 정책 그룹을 삭제할 수 없습니다. 먼저 A/B 테스트를 중단해주세요 |
P-022 | 400 | SINGLE 조건의 필드는 필수입니다. catch-all 규칙을 만들려면 조건 그룹을 비워주세요 |
P-023 | 400 | SINGLE 조건의 연산자는 필수입니다 |
P-024 | 400 | 조건 트리 깊이가 최대값({0})을 초과했습니다 |
P-025 | 400 | 같은 정책 버전 안에서는 priority 값이 고유해야 합니다. 충돌하는 priority: {0} |
P-027 | 400 | 연산자 {0}는 값 형식 {1}이(가) 필요한데 {2}이(가) 들어왔습니다 |
P-028 | 400 | 조건의 valueType은 필수입니다 (null 불가). 자동 추론은 하지 않습니다 |
P-029 | 400 | 조건의 value는 필수입니다 (null 불가). null 비교는 아직 지원하지 않습니다 |
P-030 | 404 | 도메인 템플릿을 찾을 수 없습니다: {0} |
P-031 | 400 | 도메인 템플릿 ‘{0}’은(는) 아직 사용할 수 없습니다 |
P-032 | 409 | 정책 그룹명 ‘{0}’은(는) 이미 사용 중입니다 |
P-033 | 409 | 정책 그룹명 자동 생성에 실패했습니다 ({0}회 시도). 사용자 지정 이름을 입력해 주세요 |
P-034 | 400 | 요청한 정책 그룹 ID 중 일부가 존재하지 않거나 보관 상태입니다 |
P-035 | 400 | 조회 기간이 올바르지 않습니다. 시작 시각은 종료 시각보다 앞서야 합니다 |
P-036 | 400 | 이미 운영 중인 버전입니다. 배포할 변경이 없습니다 |
P-037 | 400 | 이 버전의 유효 시작일이 아직 도래하지 않았습니다. 예약 배포(deploy schedule)를 사용해주세요 |
P-038 | 409 | 이 정책 그룹에는 이미 대기 중인 예약 배포가 있습니다. 기존 예약을 취소한 후 다시 시도해주세요 |
P-039 | 404 | 이 정책 그룹에 대기 중인 예약 배포가 없습니다 |
P-040 | 400 | 유효 시작일이 없는 버전은 예약할 수 없습니다. 유효 시작일이 있는 버전을 발행하거나 즉시 배포를 사용해주세요 |
P-041 | 400 | 유효 시작일이 이미 지났습니다. 즉시 배포를 사용해주세요 |
P-042 | 400 | 테스트 버전이 현재 트래픽을 처리할 수 없습니다. ACTIVE 상태이면서 유효 기간이 현재 시각을 포함해야 합니다 |
P-043 | 409 | 이 버전을 참조하는 대기 중인 예약 배포가 있습니다. 예약을 취소한 후 삭제해주세요 |
P-044 | 400 | 진행 중인 A/B 테스트가 없습니다 |
P-045 | 400 | 테스트 버전은 현재 배포 중인 버전과 달라야 합니다 |
P-046 | 400 | 조건 변수명 형식이 올바르지 않습니다. 영문자, 숫자, 언더스코어만 쓸 수 있고 숫자로 시작할 수 없습니다 |
P-047 | 400 | 조건 값이 선언된 값 유형과 일치하지 않습니다 |
P-048 | 400 | 변수 ‘{0}’(유형 {2})에는 ‘{1}’ 연산자를 사용할 수 없습니다 |
P-049 | 400 | GROUP 조건의 논리 연산자(AND/OR)는 필수입니다 |
P-050 | 400 | fact ‘{0}’의 숫자 값을 표현할 수 없습니다. NaN과 무한대는 받지 않습니다 |
P-051 | 400 | 조건 값이 fact ‘{0}’에 선언된 허용 범위 밖입니다: {1} |
멱등성 (I)
| 코드 | HTTP | 설명 |
|---|---|---|
I-001 | 409 | 이미 처리된 요청입니다 |
I-002 | 409 | 현재 처리 중인 요청입니다. 잠시 후 다시 시도해주세요 |
I-003 | 400 | Idempotency-Key는 {0}자 이하여야 합니다 |
시스템 / 암호화 (S)
| 코드 | HTTP | 설명 |
|---|---|---|
S-001 | 500 | 데이터 암호화 중 오류가 발생했습니다. 관리자에게 문의하세요 |
S-002 | 500 | 데이터 복호화 중 오류가 발생했습니다. 관리자에게 문의하세요 |
결제 & 구독 (B)
| 코드 | HTTP | 설명 |
|---|---|---|
B-001 | 404 | 요금제(Plan)를 찾을 수 없습니다 |
B-002 | 404 | 구독 정보를 찾을 수 없습니다 |
B-003 | 409 | 이미 사용 중인 구독이 존재합니다 |
B-005 | 404 | 청구서(Invoice)를 찾을 수 없습니다 |
B-006 | 500 | 해당 통화를 지원하는 결제 프로세서가 없습니다 |
B-007 | 502 | 결제 처리에 실패했습니다. (잔액 부족 또는 카드 정보 오류) |
B-008 | 403 | 서비스 사용 한도를 초과했습니다. 플랜을 업그레이드하거나 다음 결제 주기까지 기다려주세요 |
B-009 | 400 | 무료 플랜은 해지할 수 없습니다 |
B-010 | 400 | 등록된 결제 수단이 없습니다. 결제 수단을 등록한 후 다시 시도해주세요 |
B-011 | 400 | 등록된 사업자 정보가 없습니다. 사업자 정보를 등록한 후 다시 시도해주세요 |
B-012 | 400 | 이미 결제 완료된 청구서입니다 |
B-013 | 400 | 이미 해당 플랜을 구독 중입니다 |
B-014 | 400 | 서로 다른 통화 간 플랜 변경은 지원하지 않습니다 |
B-015 | 400 | 무료 플랜으로 전환하려면 현재 구독을 해지해주세요 |
B-016 | 409 | 구독이 참조하는 플랜은 삭제할 수 없습니다. 참조 중인 구독: {0}개 |
B-017 | 400 | 유료 플랜 구독 중에는 통화를 변경할 수 없습니다. 먼저 구독을 해지해주세요 |
B-018 | 400 | 취소할 예약된 다운그레이드가 없습니다 |
B-019 | 409 | {1} 통화에 {0} 등급의 공개 플랜이 이미 존재합니다. 등급과 통화 조합당 공개 플랜은 하나만 허용됩니다 |
B-020 | 400 | 지원하지 않는 통화 코드입니다 |
B-021 | 400 | 결제 설정 참조가 유효하지 않거나 만료되었습니다. 카드 등록을 다시 시도해 주세요 |
B-022 | 400 | 웹훅 서명 검증에 실패했습니다 |
멤버 & 계정 (M)
| 코드 | HTTP | 설명 |
|---|---|---|
M-001 | 404 | 사용자 정보를 찾을 수 없습니다 |
M-002 | 403 | 이메일 인증이 완료되지 않았습니다. 메일함을 확인해주세요 |
M-003 | 403 | 운영 정책 위반으로 정지된 계정입니다. 고객센터에 문의해주세요 |
M-004 | 403 | 탈퇴한 계정입니다 |
M-005 | 400 | 인증 코드가 유효하지 않거나 만료되었습니다 |
M-007 | 400 | 초대 링크가 만료되었습니다. 새로운 초대를 요청해주세요 |
M-009 | 400 | 본인에게는 이 작업을 수행할 수 없습니다 |
M-010 | 400 | 마지막 관리자는 삭제하거나 권한을 변경할 수 없습니다 |
M-011 | 409 | 이미 사용 중인 전화번호입니다 |
M-012 | 403 | 계정이 정지되었습니다: {0} |
M-013 | 400 | 초대 경로로는 관리자(ADMIN) 역할을 부여할 수 없습니다 |
M-014 | 409 | 이전 구독 정산이 진행 중입니다. 잠시 후 다시 시도해주세요 |
M-015 | 400 | 부여할 수 없는 역할입니다 |
분석 & 시뮬레이션 (AN)
| 코드 | HTTP | 설명 |
|---|---|---|
AN-001 | 500 | 시뮬레이션 처리 중 오류가 발생했습니다 |
AN-004 | 400 | 데이터셋에 처리할 레코드가 없습니다. 조회 기간이나 파일을 확인해주세요 |
AN-006 | 400 | 해당 유형에서 지원하지 않는 데이터 소스입니다 |
AN-008 | 400 | 비교 기준 버전이 올바르지 않습니다. 동일한 정책 그룹 내의 버전이어야 합니다 |
AN-009 | 404 | 요청하신 시뮬레이션 정보를 찾을 수 없습니다. (ID를 확인해주세요) |
AN-011 | 400 | 완료된 시뮬레이션만 내보낼 수 있습니다 |
AN-012 | 500 | 내보내기 파일 생성에 실패했습니다. 잠시 후 다시 시도해주세요 |
AN-013 | 404 | 업로드된 데이터셋 파일을 찾을 수 없습니다 |
AN-014 | 400 | 데이터셋 파일 파싱에 실패했습니다. 형식을 확인해주세요. (JSON 배열 또는 헤더 포함 CSV) |
AN-016 | 400 | 필수 fact 누락: ‘{0}’ |
AN-017 | 400 | ’{0}’ 타입 불일치: {1} 기대, {2} 수신 |
AN-018 | 400 | 과거 데이터(HISTORICAL) 시뮬레이션에는 기간(from/to)이 필수입니다 |
AN-019 | 400 | 업로드 데이터셋(UPLOADED)에는 파일 경로(path)가 필수입니다 |
AN-020 | 400 | 빈 파일은 업로드할 수 없습니다. 유효한 파일을 선택해주세요 |
AN-021 | 400 | 파일 크기가 제한({0}MB)을 초과했습니다. 크기를 줄여서 다시 시도해주세요 |
AN-022 | 400 | 지원하지 않는 파일 형식입니다. CSV 또는 JSON 파일만 업로드 가능합니다 |
AN-023 | 400 | 지원하지 않는 내보내기 형식입니다: {0}. csv 또는 json을 사용하세요 |
AN-024 | 404 | 해당 trace ID의 실행 이력을 찾을 수 없습니다 |
AN-025 | 404 | 해당 Replay Job을 찾을 수 없습니다 |
AN-026 | 404 | 해당 trace ID의 실행 이력을 찾을 수 없습니다 |
AN-027 | 400 | PII로 지정된 항목만 열람할 수 있습니다 |
AN-028 | 409 | 실행 이력이 있는 버전은 삭제할 수 없습니다. 결정의 검증 가능성을 위해 영구 보존됩니다 |
AN-029 | 500 | 결정 기록 저장에 실패했습니다. 잠시 후 다시 시도해 주세요 |
AN-030 | 400 | 내보낼 범위가 너무 큽니다. 기간을 {0}일 이내로 지정하고, 결과가 {1}행을 넘지 않도록 좁혀 주세요 |
AN-031 | 400 | 완료된 replay job만 내보낼 수 있습니다 |
AN-032 | 400 | 지원하지 않는 내보내기 형식입니다: {0}. csv 또는 json을 사용하세요 |
AN-033 | 404 | 반출 job을 찾을 수 없습니다 |
AN-034 | 400 | 완료된 반출 job만 내려받을 수 있습니다 |
AN-035 | 410 | 반출 파일이 만료됐습니다. 파일은 {0}일간 보관됩니다. 다시 반출해 주세요 |
AN-036 | 400 | 복합 실행은 버전 하나로 재실행할 수 없습니다 |
AN-037 | 400 | 후보 버전은 원래 실행과 같은 정책 그룹에 속해야 합니다 |
액션 & 계산 (ACT)
| 코드 | HTTP | 설명 |
|---|---|---|
ACT-001 | 400 | 액션 파라미터가 비어 있습니다 |
ACT-003 | 400 | 지원하지 않는 계산 방식입니다. (허용값: PERCENTAGE, AMOUNT) |
ACT-005 | 400 | AMOUNT 계산 방식에는 value 설정이 필수입니다 |
ACT-006 | 400 | 지원하지 않는 액션 타입입니다. (입력된 값: {0}) |
ACT-016 | 400 | 이 액션은 targetVar가 필수입니다 |
ACT-017 | 400 | rounding 옵션은 객체여야 합니다 |
ACT-018 | 400 | rounding scale은 정수여야 합니다 |
ACT-019 | 400 | rounding scale은 [0, {0}] 범위여야 합니다 |
ACT-020 | 400 | 잘못된 rounding mode: {0} |
ACT-021 | 400 | MUTATE_FACT 액션은 operator가 필수입니다 |
ACT-022 | 400 | 잘못된 operator: {0} |
ACT-023 | 400 | 잘못된 operator-method 조합입니다: {0} |
ACT-024 | 400 | 0으로 나누기는 허용되지 않습니다 |
ACT-025 | 400 | refVar ‘{0}’가 입력 facts에 없습니다 |
ACT-026 | 400 | targetVar ‘{0}’가 입력 facts에 없습니다 |
ACT-029 | 500 | 이 액션 타입을 처리할 executor가 등록되지 않았습니다: {0} |
ACT-030 | 400 | 산술 피연산자(operand)가 필요합니다 |
ACT-031 | 400 | 이 연산자·계산방식 조합에서는 refVar를 사용할 수 없습니다: {0} |
Fact 정의 (FD)
| 코드 | HTTP | 설명 |
|---|---|---|
FD-001 | 409 | 이미 존재하는 fact 키(Key)입니다 |
FD-002 | 404 | 해당 fact 정의를 찾을 수 없습니다 |
FD-003 | 403 | 시스템 fact는 수정하거나 삭제할 수 없습니다 |
FD-005 | 400 | 시스템 예약 키는 사용할 수 없습니다 |
FD-006 | 409 | 규칙이 참조하는 fact는 삭제할 수 없습니다. 참조 중인 규칙: {0}개 |
FD-007 | 409 | 규칙이 참조하는 fact는 타입을 바꿀 수 없습니다. 참조 중인 규칙: {0}개. 참조를 먼저 걷거나 새 fact를 만드세요 |
FD-008 | 400 | 지원하지 않는 내보내기 형식입니다: {0}. csv 또는 json을 사용하세요 |
FD-009 | 409 | fact 정의는 최대 {0}개까지만 생성할 수 있습니다 |
FD-010 | 400 | 값 제약이 {0} 타입과 맞지 않습니다 |
FD-011 | 400 | 값 제약의 min이 max보다 클 수 없습니다 |
FD-012 | 400 | allowedValues는 비거나 null을 담을 수 없습니다. 제약을 없애려면 칸을 비우세요 |
FD-013 | 400 | allowedValues에 중복이 있습니다: {0} |
FD-014 | 400 | allowedValues는 최대 {0}개입니다. 그보다 많으면 분류가 아니라 식별자를 담고 있는 것입니다 |
FD-015 | 400 | allowedValues에 min/max 밖의 값이 있습니다. 둘을 함께 선언하면 아무 값도 통과하지 못합니다 |
장애 로그 (FL)
| 코드 | HTTP | 설명 |
|---|---|---|
FL-001 | 404 | 해당 실패 로그를 찾을 수 없습니다 |
FL-002 | 400 | 현재 상태의 실패 로그에는 해당 작업을 수행할 수 없습니다 |
웹훅 구독 (WH)
| 코드 | HTTP | 설명 |
|---|---|---|
WH-001 | 404 | 웹훅 구독을 찾을 수 없습니다 |
WH-002 | 409 | 이미 사용 중인 웹훅 구독 이름입니다 |
WH-003 | 502 | 웹훅 테스트 발송에 실패했습니다. URL을 확인 후 다시 시도해주세요 |
WH-004 | 400 | 유효하지 않은 웹훅 URL입니다: {0}. http 또는 https URL만 허용됩니다 |
WH-005 | 400 | 허용되지 않은 웹훅 URL입니다. 호스트 {0}가 사설/내부 주소로 확인됩니다 |

