오류 응답 형식
모든 오류는 동일한 envelope을 따릅니다:{
"result": "ERROR",
"code": "P-001",
"message": "정책 그룹을 찾을 수 없습니다."
}
code 필드는 안정적인 식별자입니다. 통합 코드는 code 값을 기준으로 분기하세요. message는 사람이 읽기 위한 텍스트로 Accept-Language 헤더(en 또는 ko)에 따라 지역화되며 시간이 지나면서 표현이 바뀔 수 있지만, code는 바뀌지 않습니다.
이 문서는 통합 API와 콘솔(계정, 결제, 멤버 관리)을 포함해 플랫폼이 반환할 수 있는 모든 코드를 열거합니다. 통합 클라이언트가 실제로 만나지 않는 섹션도 있습니다. 멤버 & 계정(M)이나 Auth의 로그인 관련 항목이 그렇습니다. 그래도 함께 문서화하는 이유는 하나입니다. 어떤 표면에서 어떤 코드를 만나든 의미가 정확히 하나로 풀려야 하기 때문입니다.
코드 번호는 안정적인 식별자입니다. 한 번 할당된 코드는 의미가 바뀌어도 재사용되지 않습니다. 번호 갭(예:
ACT-007, ACT-008, ACT-010, ACT-011, ACT-012의 부재)은 엔진의 도메인 중립 원시(primitive) 리팩토링 영역에서 폐기된 코드를 반영합니다.공통 (C)
| 코드 | HTTP | 설명 |
|---|---|---|
C-001 | 400 | 입력값이 올바르지 않습니다 |
C-002 | 405 | 허용되지 않은 HTTP 메서드 |
C-003 | 404 | 요청한 리소스를 찾을 수 없습니다 |
C-004 | 500 | 서버 내부 오류 |
C-005 | 400 | 데이터 타입이 올바르지 않습니다 |
C-006 | 409 | 이미 존재하는 리소스 |
C-007 | 429 | 요청량 초과 (TPS 한도) |
C-008 | 400 | 올바르지 않은 시간대 |
C-009 | 400 | 허용되지 않은 상태 전환 |
인증 (A)
| 코드 | HTTP | 설명 |
|---|---|---|
A-001 | 401 | 인증 실패 |
A-002 | 403 | 접근 권한 없음 |
A-003 | 401 | 유효하지 않은 API 키 |
A-004 | 409 | 이미 가입된 이메일 |
A-005 | 409 | API 키 최대 개수 초과 |
A-006 | 401 | 이메일 또는 비밀번호 오류 |
A-007 | 409 | 이미 사용 중인 전화번호 |
A-008 | 401 | Google 계정으로 로그인 필요 |
A-009 | 401 | Google 계정 이메일 미인증 |
A-010 | 401 | Google 인증 실패 |
A-011 | 400 | 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 | 비밀번호가 올바르지 않습니다 |
정책 엔진 (P)
| 코드 | HTTP | 설명 |
|---|---|---|
P-001 | 404 | 정책 그룹을 찾을 수 없습니다 |
P-002 | 404 | 정책 버전을 찾을 수 없습니다 |
P-003 | 500 | 정책 실행 중 오류 발생 |
P-004 | 400 | 승인되지 않은 정책 버전 |
P-005 | 404 | 정책 규칙을 찾을 수 없습니다 |
P-006 | 400 | 현재 상태에서 수정 불가 (DRAFT만 수정 가능) |
P-007 | 400 | 규칙 없이 발행 불가 |
P-008 | 400 | 현재 상태에서 수행할 수 없는 작업 |
P-009 | 403 | 정책 그룹이 비활성화(DISABLED) 상태 |
P-010 | 400 | 규칙 순서 변경 ID 불일치 |
P-011 | 400 | Activation 그룹 내 Mode/Strategy 불일치 |
P-012 | 400 | Mutex 그룹 내 Mode/Strategy 불일치 |
P-013 | 400 | 롤백할 이전 버전이 없음 |
P-014 | 404 | 배포 이력을 찾을 수 없습니다 |
P-015 | 400 | 실행 요청에 필수 fact 누락 |
P-016 | 400 | 버전이 대상 정책 그룹에 속하지 않음 |
P-017 | 409 | 버전이 배포 중이거나 A/B 테스트 사용 중 |
P-018 | 400 | 유효 기간이 올바르지 않음 (시작일이 종료일보다 이후) |
P-019 | 400 | 그룹에 배포된 버전이 없음 |
P-020 | 409 | 운영 중인 배포가 있어 그룹 삭제 불가 |
P-021 | 409 | A/B 테스트 실행 중이라 그룹 삭제 불가 |
P-022 | 400 | SINGLE 조건의 필드는 필수 |
P-023 | 400 | SINGLE 조건의 연산자는 필수 |
P-024 | 400 | 조건 트리 깊이가 최대값 초과 |
P-025 | 400 | 정책 버전 내 규칙 priority 중복 |
P-026 | 400 | activationGroup cluster 내 그룹 priority 중복 |
P-027 | 400 | 조건 연산자와 값 형식 불일치 |
P-028 | 400 | 조건 valueType 필수 (자동 추론 금지) |
P-029 | 400 | 조건 value 필수 (null 비교 미지원) |
P-030 | 404 | 도메인 템플릿을 찾을 수 없음 |
P-031 | 400 | 도메인 템플릿 아직 사용 불가 |
P-032 | 409 | 정책 그룹명 이미 사용 중 |
P-033 | 409 | 정책 그룹명 자동 생성 실패 |
P-034 | 400 | 그룹 재정렬 ID 불일치 (부재 또는 보관 상태) |
P-035 | 400 | 프로파일 조회 기간 무효 (시작 시각이 종료 시각보다 앞서야 함) |
P-036 | 400 | 이미 운영 중인 버전 (배포할 변경 없음) |
P-037 | 400 | 버전의 유효 시작일이 아직 도래하지 않았습니다. 예약 배포를 사용하세요 |
P-038 | 409 | 이 그룹에는 이미 대기 중인 예약 배포가 있습니다 |
P-039 | 404 | 취소할 대기 중인 예약 배포가 없습니다 |
P-040 | 400 | 예약할 수 없는 버전입니다. 유효 시작일이 미래인 발행됨 상태여야 합니다 |
P-041 | 400 | 예약 시각이 이미 지났습니다. 즉시 배포를 사용하세요 |
P-042 | 400 | A/B 테스트 대상 버전이 현재 서빙 가능한 상태가 아닙니다 |
P-043 | 409 | 대기 중인 예약 배포가 이 버전을 참조합니다. 예약을 취소한 후 삭제하세요 |
멱등성 (I)
| 코드 | HTTP | 설명 |
|---|---|---|
I-001 | 409 | 이미 처리된 요청 (중복 멱등키) |
I-002 | 409 | 현재 처리 중인 요청 |
시스템 / 암호화 (S)
| 코드 | HTTP | 설명 |
|---|---|---|
S-001 | 500 | 데이터 암호화 실패 |
S-002 | 500 | 데이터 복호화 실패 |
결제 (B)
| 코드 | HTTP | 설명 |
|---|---|---|
B-001 | 404 | 요금제를 찾을 수 없습니다 |
B-002 | 404 | 구독 정보를 찾을 수 없습니다 |
B-003 | 409 | 이미 사용 중인 구독 존재 |
B-004 | 400 | 현재 상태에서 수행할 수 없는 작업 |
B-005 | 404 | 청구서를 찾을 수 없습니다 |
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 | 사용 중인 플랜 삭제 불가 |
B-017 | 400 | 유료 플랜 구독 중 통화 변경 불가 |
B-018 | 400 | 취소할 예약된 다운그레이드 없음 |
B-019 | 409 | 동일 등급/통화의 공개 플랜이 이미 존재 |
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-006 | 400 | 이미 활성화된 계정 |
M-007 | 400 | 만료된 초대 |
M-008 | 400 | 유효하지 않은 초대 토큰 |
M-009 | 400 | 본인에게 수행 불가한 작업 |
M-010 | 400 | 마지막 관리자 삭제/강등 불가 |
M-011 | 409 | 이미 사용 중인 전화번호 |
M-012 | 403 | 정지된 계정 (사유 포함) |
M-013 | 400 | 초대로는 관리자 역할 부여 불가 |
M-014 | 409 | 이전 구독 정산 진행 중, 잠시 후 재시도 |
분석 & 시뮬레이션 (AN)
| 코드 | HTTP | 설명 |
|---|---|---|
AN-001 | 500 | 시뮬레이션 처리 실패 |
AN-002 | 404 | 데이터셋을 찾을 수 없습니다 |
AN-003 | 400 | 데이터셋이 너무 큽니다 |
AN-004 | 400 | 데이터셋에 레코드 없음 |
AN-005 | 400 | 데이터셋 형식 오류 |
AN-006 | 400 | 지원하지 않는 데이터 소스 |
AN-007 | 500 | 데이터셋 스토리지 오류 |
AN-008 | 400 | 비교 대상 버전(Baseline)이 올바르지 않음 |
AN-009 | 404 | 시뮬레이션을 찾을 수 없습니다 |
AN-010 | 400 | PENDING 또는 RUNNING 시뮬레이션만 취소 가능 |
AN-011 | 400 | 완료된 시뮬레이션만 내보내기 가능 |
AN-012 | 500 | 시뮬레이션 내보내기 실패 |
AN-013 | 404 | 업로드된 데이터셋 파일을 찾을 수 없습니다 |
AN-014 | 400 | 데이터셋 파일 파싱 실패 |
AN-015 | 500 | 시뮬레이션 결과 데이터 형식 오류 |
AN-016 | 400 | 데이터셋 내 필수 fact 누락 |
AN-017 | 400 | 데이터셋 내 fact 타입 불일치 |
AN-018 | 400 | HISTORICAL 데이터셋에 기간(from/to) 필수 |
AN-019 | 400 | UPLOADED 데이터셋에 파일 경로 필수 |
AN-020 | 400 | 빈 파일 업로드 불가 |
AN-021 | 400 | 데이터셋 파일 크기 초과 |
AN-022 | 400 | 지원하지 않는 데이터셋 파일 형식 |
AN-023 | 400 | 지원하지 않는 내보내기 형식 |
AN-024 | 404 | 재실행 대상 실행을 찾을 수 없습니다 |
AN-025 | 404 | 재실행 작업을 찾을 수 없습니다 |
AN-026 | 404 | 결정 트레이스를 찾을 수 없습니다 |
AN-027 | 400 | PII로 지정되지 않은 fact |
AN-028 | 409 | 감사 이력이 있는 버전은 삭제할 수 없습니다 |
AN-029 | 500 | 감사 봉인 실패, 작업 거부 |
액션 & 계산 (ACT)
| 코드 | HTTP | 설명 |
|---|---|---|
ACT-001 | 400 | 액션 파라미터가 비어있습니다 |
ACT-002 | 400 | 참조 변수 refVar 필수 |
ACT-003 | 400 | 잘못된 계산 방식 (허용: PERCENTAGE, AMOUNT) |
ACT-004 | 400 | PERCENTAGE 방식에 rate 파라미터 필수 |
ACT-005 | 400 | AMOUNT 방식에 value 파라미터 필수 |
ACT-006 | 400 | 잘못된 액션 타입 |
ACT-009 | 400 | 외부 서비스 액션에 Integration ID 필수 |
ACT-013 | 400 | 웹훅 URL 또는 연동 설정 필수 |
ACT-014 | 400 | SET_FACT 액션에 fact 키 필수 |
ACT-015 | 400 | ADD_TAG 액션에 태그 필수 |
ACT-016 | 400 | INCREMENT_FACT 액션에 targetVar 필수 |
ACT-017 | 400 | rounding 옵션은 객체여야 함 |
ACT-018 | 400 | rounding scale은 정수여야 함 |
ACT-019 | 400 | rounding scale 범위 초과 [0, 16] |
ACT-020 | 400 | 잘못된 rounding mode |
ACT-021 | 400 | MUTATE_FACT 액션에 operator 필수 |
ACT-022 | 400 | 잘못된 operator |
ACT-023 | 400 | 잘못된 operator-method 조합 (예: DIV + PERCENTAGE) |
ACT-024 | 400 | 0으로 나누기 불가 |
ACT-025 | 400 | refVar가 입력 facts에 없음 |
ACT-026 | 400 | targetVar가 입력 facts에 없음 |
ACT-027 | 400 | EMIT_EVENT는 비어있지 않은 eventPayload 필수 |
ACT-028 | 400 | EMIT_NOTIFICATION은 비어있지 않은 notificationPayload 필수 |
ACT-007, ACT-008, ACT-010, ACT-011, ACT-012 코드는 엔진이 도메인 중립 원시(primitive) 영역으로 전환되면서 폐기되었습니다. 해당 번호는 재사용되지 않습니다.Fact 정의 (FD)
| 코드 | HTTP | 설명 |
|---|---|---|
FD-001 | 409 | fact 키 중복 |
FD-002 | 404 | fact 없음 |
FD-003 | 403 | 시스템 fact 수정/삭제 불가 |
FD-004 | 400 | fact 키 형식 무효 |
FD-005 | 400 | 시스템 예약 fact 키 |
연동 (INT)
| 코드 | HTTP | 설명 |
|---|---|---|
INT-001 | 404 | 연동을 찾을 수 없습니다 |
INT-002 | 409 | 연동 이름 중복 |
INT-003 | 400 | 잘못된 연동 설정 |
INT-004 | 400 | 연동 타입은 변경 불가 |
INT-005 | 400 | 연동 설정에 필수 항목 누락 |
INT-006 | 400 | 연동에 사용할 수 없는 HTTP 메서드 |
INT-007 | 400 | 연동 설정의 필수 항목 누락 |
장애 로그 (FL)
| 코드 | HTTP | 설명 |
|---|---|---|
FL-001 | 404 | 장애 로그를 찾을 수 없습니다 |
FL-002 | 400 | 현재 상태의 장애 로그에 수행 불가한 작업 |
FL-003 | 400 | 해당 유형은 재시도를 지원하지 않음 |
웹훅 구독 (WH)
| 코드 | HTTP | 설명 |
|---|---|---|
WH-001 | 404 | 웹훅 구독을 찾을 수 없습니다 |
WH-002 | 409 | 웹훅 구독 이름 중복 |
WH-003 | 502 | 웹훅 테스트 발송 실패 |
WH-004 | 400 | 유효하지 않은 웹훅 URL (http/https만 허용) |
WH-005 | 400 | 웹훅 URL 차단 (사설/내부 주소로 해석됨) |

