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

요청 제한

주문 작업 및 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요청 제한 초과, 지정된 시간 이후 재시도

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