# 에러와 호출 제한

REST 오류는 HTTP 상태 코드와 `error.code`를 함께 확인합니다. WS 명령 오류는 `event: "error"`의 `error.code`와 명령 `id`를 확인합니다. [오류 응답 형식](/api-docs/guide/conventions.md#rest-responses)을 참고하세요.

## 오류 코드

| HTTP | 코드 | 다음 행동 |
| --- | --- | --- |
| 400 | INVALID_REQUEST, WALLET_REQUIRED, UNSUPPORTED_OPERATION | 파라미터·walletId·명령 확인 |
| 401 | MISSING_AUTH, INVALID_API_KEY | 인증 헤더와 키 상태 확인 |
| 401 | INVALID_SIGNATURE | 실제 경로·정렬 쿼리·본문 바이트로 다시 서명 |
| 401 | TIMESTAMP_OUT_OF_RANGE | 시간 동기화와 수신 시간 범위 확인 |
| 403 | NO_PERMISSION, ORDER_BLOCKED | 키·계정·거래 제한 확인 |
| 404 | ENDPOINT_NOT_FOUND, WALLET_NOT_FOUND, MARKET_NOT_FOUND, ORDER_NOT_FOUND | 경로·ID·접근 범위 확인 |
| 405 | METHOD_NOT_ALLOWED | 응답 Allow 헤더와 요청 메서드 확인 |
| 409 | INVALID_NONCE | 레거시 nonce 형식 확인. 새 구현은 생략 |
| 409 | DUPLICATE_COMMAND_ID | 같은 연결에서 처리 중인 명령 ID 확인 |
| 413 | PAYLOAD_TOO_LARGE | 본문 크기 축소 |
| 422 | MARKET_NOT_TRADING, ORDER_ALREADY_CLOSED, INSUFFICIENT_BALANCE, UNSUPPORTED_ORDER_OPTION | 마켓·주문 상태, 잔고, 주문 옵션 확인 |
| 422 | ENGINE_REJECTED_{status} | 엔진 거절 결과 확인. 같은 요청 무조건 재시도 금지 |
| 429 | RATE_LIMITED | 읽기는 Retry-After와 백오프 적용 |
| 500 | INTERNAL_ERROR | requestId 기록. 읽기만 제한적으로 재시도 |
| 501 | AMEND_NOT_SUPPORTED | 원자적 주문 정정 미지원. 원래 주문은 유지 |
| 503 | ENGINE_UNAVAILABLE, SERVICE_UNAVAILABLE | 의존성 복구 확인. 쓰기는 주문 상태도 대조 |
| 504 | ENGINE_TIMEOUT | 처리 결과 불명. 주문·체결 조회 후 결정 |

HTTP 코드와 함께 반환되는 세부 오류는 엔드포인트와 실행 시점에 따라 달라집니다. 검증·권한 오류는 요청을 수정하지 않은 채 반복하지 마세요.

## 호출 제한

현재 환경 설정의 요청 예산은 IP당 **10초에 1000회**입니다. 메모리에서 게이트웨이 인스턴스별로 관리하며 전역 계정 할당량이 아닙니다. 운영 설정이 변경되면 실제 응답의 429와 `Retry-After`를 우선합니다.

HTTP 업그레이드와 수신한 WS 명령도 IP 요청 예산을 소비합니다. 서버가 보내는 WS 이벤트는 소비하지 않습니다. 재접속이나 헤더 변경으로 IP 예산을 초기화할 수 없습니다.

일반 429는 IP ban을 의미하지 않으며 위반 점수도 추가하지 않습니다. 외부 API의 JSON·스키마 위반은 IP별로 REST·WS에 공유해 집계하며, 2분 집계 구간에 5회가 되면 10분 동안 차단합니다. 잘못된 WS 프레임·인코딩은 즉시 차단합니다.

API 키의 허용 IP 목록에 없는 주소는 HTTP 403 `IP_NOT_ALLOWED`를 받습니다. 키를 발급한 IP 정책을 확인하세요. 이 거절은 위반 점수에 포함하지 않습니다.

## 크기와 시간 제한

| 항목 | 제한 |
| --- | --- |
| REST 요청 본문 | 1 MiB |
| receive window | 기본 5초, 최대 60초 |
| 거래 목록 limit | 최대 1000 |
| Feed 목록 limit | 기본 20, 최대 100 |
| 주문 엔진 응답 대기 | 10초 |
| 일괄 취소 | 동시 최대 16개, 배치 전체 10초 |
| 공개·개인 WS 명령 크기 | 각각 8 KiB / 16 KiB |

WS의 ping/pong·구독·대기열 제한은 [연결 규칙](/api-docs/websocket/overview.md#heartbeat-and-limits)에 있습니다.

## 재시도 정책

읽기의 429는 Retry-After 이후, 일시적인 5xx는 제한된 지수 백오프와 jitter로 재시도합니다. 주문 생성·취소의 연결 종료·타임아웃은 [주문 결과 확인](/api-docs/rest/trading.md#timeouts-and-retries)을 먼저 수행합니다. timestamp 검증은 멱등성을 보장하지 않습니다.
