Server API
에러 코드
Petnow Server API의 에러 코드와 해결 방법을 안내합니다.
개요
Petnow API는 에러 발생 시 HTTP 상태 코드와 함께 상세한 에러 정보를 반환합니다.
에러 응답 형식
{
"errors": [
{
"code": "PETNOWB2B10000"
}
]
}| 필드 | 타입 | 설명 |
|---|---|---|
errors | array | 에러 배열 |
errors[].code | string | 에러 코드 (PETNOWB2BXXXXX 형식) |
HTTP 상태 코드
| 상태 코드 | 설명 |
|---|---|
200 | 성공 |
201 | 리소스 생성 성공 |
204 | 삭제 성공 (응답 본문 없음) |
400 | 잘못된 요청 |
401 | 인증 실패 |
402 | 결제 필요 |
403 | 권한 없음 |
404 | 리소스 없음 |
500 | 서버 내부 오류 |
인증 관련 에러 (401)
PETNOWB2B10000 - InvalidApiKeyException
상태 코드: 401
{
"errors": [
{
"code": "PETNOWB2B10000"
}
]
}원인
- API Key가 잘못됨
- API Key가 누락됨
- API Key가 비활성화됨
해결 방법
x-petnow-api-key헤더 확인- 환경(Staging/Production)에 맞는 Key 사용
- Petnow 담당자에게 Key 상태 확인 요청
PETNOWB2B10001 - ValidationError
상태 코드: 400
이 에러는 요청 파라미터의 유효성 검사 실패 시 발생하며, 다른 에러 코드와 달리 details 필드를 통해 구체적인 검증 오류 정보를 제공합니다.
{
"errors": [
{
"code": "PETNOWB2B10001",
"details": {
"petId": ["This field is required."]
}
}
]
}원인
- 필수 파라미터 누락
- 잘못된 타입 또는 형식의 파라미터 값
- 허용되지 않는 열거형 값 (예:
species에DOG,CAT외의 값)
해결 방법
details필드에서 실패한 필드명과 오류 메시지 확인- 요청 파라미터 수정 후 재시도
결제 관련 에러 (402)
PETNOWB2B10005 - PetLimitExceededError
상태 코드: 402
{
"errors": [
{
"code": "PETNOWB2B10005"
}
]
}원인
- 데모 플랜의 최대 펫 등록 수를 초과함
해결 방법
- Petnow 담당자에게 유료 플랜 업그레이드 문의
요청 관련 에러 (400)
PETNOWB2B20007 - PetAlreadyHasFingerprintAdditionJobException
상태 코드: 400
{
"errors": [
{
"code": "PETNOWB2B20007"
}
]
}원인
- 펫에 이미 진행 중인 지문 추가 작업이 있음
해결 방법
- 기존 작업 완료 대기
- 작업 상태 폴링 후 재시도
PETNOWB2B20009 - PetHasNoFingerprintException
상태 코드: 400
{
"errors": [
{
"code": "PETNOWB2B20009"
}
]
}원인
- 검증 시 펫에 등록된 지문이 없음
해결 방법
- 먼저 지문 등록 완료
addFingerprints엔드포인트로 지문 추가
PETNOWB2B20011 - NoPetIdCaptureSessionException
상태 코드: 400
{
"errors": [
{
"code": "PETNOWB2B20011"
}
]
}원인
PET_PROFILE_REGISTRATION또는PET_VERIFICATION목적의 세션 생성 시petId누락
해결 방법
- 세션 생성 시
petId파라미터 포함 PET_IDENTIFICATION은petId불필요
PETNOWB2B20012 - CaptureSessionIsNotFinishedException
상태 코드: 400
{
"errors": [
{
"code": "PETNOWB2B20012"
}
]
}원인
- 캡처 세션이 아직 종료되지 않은 상태에서 작업 수행
- 외관 이미지가 세션에 업로드되지 않음 (외관 이미지는 모든 용도에서 필수)
해결 방법
- 세션에 충분한 파일 업로드 확인
- 작업 수행 전 UI 모듈이 제공하는 외관 이미지 업로드
- 세션 상태 확인
PETNOWB2B20013 - InvalidSessionPurposeError
상태 코드: 400
{
"errors": [
{
"code": "PETNOWB2B20013"
}
]
}원인
- 캡처 세션의 목적(purpose)이 요청한 작업과 맞지 않음
- 예:
PET_IDENTIFICATION목적의 세션으로 지문 등록 시도
해결 방법
- 올바른 목적의 세션 생성
PET_PROFILE_REGISTRATION,PET_VERIFICATION,PET_IDENTIFICATION중 적합한 purpose 선택
PETNOWB2B20014 - CaptureSessionAlreadyUsedError
상태 코드: 400
{
"errors": [
{
"code": "PETNOWB2B20014"
}
]
}원인
- 이미 사용된 캡처 세션을 재사용 시도
해결 방법
- 새 캡처 세션을 생성한 후 재시도
PETNOWB2B20015 - SpeciesMismatchError
상태 코드: 400
{
"errors": [
{
"code": "PETNOWB2B20015"
}
]
}원인
- 캡처 세션의
species와 펫의species가 다름
해결 방법
- 펫과 동일한
species로 세션 생성 - 올바른 펫 ID 확인
PETNOWB2B20017 - MultipleCaptureSessionsError
상태 코드: 400
{
"errors": [
{
"code": "PETNOWB2B20017"
}
]
}원인
- V1 지문 UUID들이 두 개 이상의 캡처 세션에 분산되어 있음
해결 방법
- 단일 캡처 세션의 지문 UUID만 사용
세션 관련 에러
PETNOWB2B20010 - NoSuchCaptureSessionException
상태 코드: 404
{
"errors": [
{
"code": "PETNOWB2B20010"
}
]
}원인
- 존재하지 않는 세션 ID
- 세션이 만료됨
해결 방법
- 세션 ID 확인
- 새 세션 생성
리소스 관련 에러 (404)
PETNOWB2B20000 - NoSuchPetException
상태 코드: 404
{
"errors": [
{
"code": "PETNOWB2B20000"
}
]
}원인
- 존재하지 않는 펫 ID
- 삭제된 펫
해결 방법
- 펫 ID 확인
- 펫 목록 조회로 존재 여부 확인
PETNOWB2B20004 - NoSuchFingerprintAdditionJobException
상태 코드: 404
{
"errors": [
{
"code": "PETNOWB2B20004"
}
]
}원인
- 존재하지 않는 지문 추가 작업 ID
해결 방법
- 작업 ID 확인
- 새 작업 시작
PETNOWB2B20005 - NoSuchPetVerificationJobException
상태 코드: 404
{
"errors": [
{
"code": "PETNOWB2B20005"
}
]
}원인
- 존재하지 않는 검증 작업 ID
해결 방법
- 작업 ID 확인
- 새 검증 작업 시작
PETNOWB2B20006 - NoSuchPetIdentificationJobException
상태 코드: 404
{
"errors": [
{
"code": "PETNOWB2B20006"
}
]
}원인
- 존재하지 않는 식별 작업 ID
해결 방법
- 작업 ID 확인
- 새 식별 작업 시작
PETNOWB2B20016 - NoSuchSearchPoolError
상태 코드: 404
{
"errors": [
{
"code": "PETNOWB2B20016"
}
]
}원인
- 존재하지 않는 검색 풀 이름
해결 방법
- 올바른 검색 풀 이름 확인
- Petnow 담당자에게 검색 풀 설정 문의
서버 에러 (500)
PETNOWB2B30002 - UnknownSpeciesException
상태 코드: 500
{
"errors": [
{
"code": "PETNOWB2B30002"
}
]
}원인
- 알 수 없는 펫 종류
해결 방법
species값이DOG또는CAT인지 확인
에러 핸들링 권장사항
재시도 로직
import time
import requests
def api_request_with_retry(url, method="GET", max_retries=3, **kwargs):
for attempt in range(max_retries):
try:
response = requests.request(method, url, **kwargs)
if response.status_code == 429:
time.sleep(60) # Rate limit 대기
continue
if response.status_code >= 500:
time.sleep(2 ** attempt) # 지수 백오프
continue
return response
except requests.exceptions.RequestException as e:
if attempt == max_retries - 1:
raise
time.sleep(2 ** attempt)
return response에러 코드별 처리
async function handleApiError(response) {
const body = await response.json();
const errorCode = body.errors?.[0]?.code;
switch (errorCode) {
case "PETNOWB2B10000":
// 인증 에러: API Key 확인 필요
console.error("Authentication error: Invalid API key");
break;
case "PETNOWB2B10001":
// 유효성 검사 에러: details 필드에서 실패 항목 확인
console.error("Validation error:", body.errors?.[0]?.details);
break;
case "PETNOWB2B10005":
// 결제 필요: 펫 등록 한도 초과
console.warn("Pet limit exceeded. Please upgrade your plan.");
break;
case "PETNOWB2B20000":
case "PETNOWB2B20010":
// 리소스 없음: 재생성 필요
console.warn("Resource not found");
break;
default:
console.error("API error:", errorCode);
}
}지원 요청
에러가 해결되지 않는 경우, 다음 정보와 함께 Petnow 담당자에게 문의하세요:
필수 정보
- 에러 코드 및 메시지
- HTTP 상태 코드
- 요청 URL 및 파라미터
- 발생 시각 (UTC)
- API Key (마스킹 처리)
연락처
- 이메일: support@petnow.io