이 페이지는 자동 번역되었습니다. 영어 원문이 정본입니다. 영어로 읽기
메인 콘텐츠로 건너뛰기

요청 제한

주문 작업 및 API 요청에 대한 지갑별 요청 제한(Rate Limit)입니다.

개요

요청 제한은 고정 윈도우(fixed-window) 알고리즘을 사용하여 지갑별로 적용됩니다. 제한이 적용되는 대상은 다음과 같습니다.

  • 주문 접수 (POST /order)
  • 주문 취소 (DELETE /order)
  • API 요청 (일반 엔드포인트 사용)

제한은 60초마다 초기화됩니다.

기본 한도

등급주문/분취소/분API 요청/분최대 미체결 주문최대 포지션
기본6012060010050
등급 130603005020
등급 21203001,200500200
마켓메이커6001,2006,0002,000무제한

신규 지갑에는 기본 한도가 적용됩니다. 등급 상향을 원하시면 지원팀에 문의하시기 바랍니다.

요청 제한 응답

요청 제한을 초과하면 API는 429 Too Many Requests를 반환합니다.

{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded for OrderPlacement: 60 per minute, retry after 45 seconds",
"retry_after_secs": 45,
"limit": 60
}

응답 헤더

요청 제한이 적용되는 모든 엔드포인트는 성공 응답과 오류 응답 모두에 다음 헤더를 포함합니다.

헤더설명예시
X-RateLimit-Limit윈도우당 허용되는 최대 요청 수60
X-RateLimit-Remaining현재 윈도우에서 남은 요청 수42
X-RateLimit-Reset윈도우가 초기화되는 유닉스 타임스탬프1737312060
Retry-After재시도까지 남은 시간(초, 429 응답에만 포함)45

응답 헤더 예시

성공한 요청:

HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1737312060

요청 제한에 걸린 요청:

HTTP/1.1 429 Too Many Requests
Retry-After: 45
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1737312060

요청 제한 카테고리

요청 제한은 각 작업 유형별로 별도로 추적됩니다.

주문 접수

적용 대상:

  • POST /order (옵션 주문)
  • POST /bulk_order (일괄 주문, 배치 내 각 주문이 개별적으로 집계됨)
  • PUT /bulk_order (일괄 교체, 각 교체가 개별적으로 집계됨)

주문 취소

적용 대상:

  • DELETE /order
  • DELETE /bulk_order (일괄 취소, 각 취소가 개별적으로 집계됨)
  • DELETE /bulk_order_cloid (클라이언트 주문 ID 기반 일괄 취소, 각 취소가 개별적으로 집계됨)

API 요청

인증이 필요한 모든 엔드포인트의 일반적인 API 사용에 적용됩니다.

포지션 및 주문 한도

요청 제한 외에도, 지갑에는 최대 미체결 주문 및 포지션 한도가 적용됩니다.

한도 유형설명거부 처리
최대 미체결 주문동시에 유지할 수 있는 최대 미체결 주문 수엔진에 도달하기 전에 주문 거부
최대 포지션최대 고유 포지션 수 (-1 = 무제한)새 포지션이 생성되는 경우 주문 거부

한도를 초과하면 다음과 같이 반환됩니다.

{
"error": "limit_exceeded",
"message": "Maximum open orders limit exceeded (100)"
}

모범 사례

요청 제한 처리

  1. 헤더 모니터링: X-RateLimit-Remaining을 사전에 추적합니다
  2. Retry-After 준수: 재시도하기 전에 지정된 시간만큼 대기합니다
  3. 백오프 구현: 429가 반복되면 지수 백오프(exponential backoff)를 사용합니다
import time

def place_order_with_retry(order, max_retries=3):
for attempt in range(max_retries):
response = api.place_order(order)

if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 60))
time.sleep(retry_after)
continue

return response

raise RateLimitError("Max retries exceeded")

요청 사용 최적화

  1. 일괄 엔드포인트 사용: 여러 주문을 하나의 요청으로 처리하려면 POST /bulk_order를 사용합니다
  2. 취소 일괄 처리: 여러 번의 DELETE /order 요청 대신 DELETE /bulk_order 또는 DELETE /bulk_order_cloid를 사용합니다
  3. 업데이트에는 WebSocket 사용: GET /orders를 폴링하는 대신 주문 업데이트를 구독합니다

모니터링

클라이언트 측에서 다음 지표를 추적하시기 바랍니다.

  • 작업 유형별 요청 비율
  • X-RateLimit-Remaining 추이
  • 429 응답 빈도
  • 평균 Retry-After 시간

오류 참조

HTTP 상태오류 코드설명
429rate_limit_exceeded요청 제한 초과, 지정된 시간 이후 재시도

전체 오류 참조는 오류를 참고하시기 바랍니다.