메인 콘텐츠로 건너뛰기
요청 한도는 각 엔드포인트에 대해 허용되는 요청 수를 제한합니다. 한도를 초과하면 시간 윈도우가 재설정될 때까지 429 오류가 발생합니다.

요청 한도 작동 방식

개념설명
시간 창보통 15분 또는 24시간
사용자별 한도OAuth 1.0a 또는 OAuth 2.0 사용자 토큰 사용 시 적용
App별 한도Bearer 토큰(App 전용) 사용 시 적용
엔드포인트별 한도각 엔드포인트마다 자체 한도가 있음

요청 한도 확인

응답 헤더에 현재 요청 한도 상태가 표시됩니다.
x-rate-limit-limit: 900
x-rate-limit-remaining: 847
x-rate-limit-reset: 1705420800
HeaderDescription
x-rate-limit-limit허용되는 최대 요청 수
x-rate-limit-remaining제한 기간 내 남은 요청 수
x-rate-limit-reset제한 기간이 재설정되는 시점의 유닉스 타임스탬프

요청 한도 표

각 엔드포인트별 요청 한도는 아래 표에서 확인할 수 있습니다. 이러한 한도는 개발자 콘솔에서도 확인할 수 있습니다.
별도 표기가 없는 한, 한도는 15분 단위로 표시됩니다(예: “/24hrs” 또는 “/sec”).

포스트(엔드포인트 25개)

Tweet 조회

메서드엔드포인트App 기준사용자 기준
GET/2/tweets3,500/15min5,000/15min
GET/2/tweets/:id450/15min900/15min
MethodEndpointPer AppPer User비고
GET/2/tweets/search/recent450/15min300/15min기본 10개, 최대 100개 결과; 쿼리 길이 최대 512자
MethodEndpointPer AppPer User비고
GET/2/tweets/search/all1/sec, 300/15min1/sec기본 10개, 최대 500개 결과; 쿼리 길이 최대 1024자

게시물 수

메서드엔드포인트App별사용자당비고
GET/2/tweets/counts/recent300/15분쿼리 길이 512자
GET/2/tweets/counts/all300/15분쿼리 길이 1024자

필터링된 스트림

메서드엔드포인트App당사용자당비고
GET/2/tweets/search/stream50/15min연결 1개; 규칙 1000개; 규칙 길이 1024자; 초당 250 포스트
GET/2/tweets/search/stream/rules450/15min연결 1개; 규칙 1000개; 규칙 길이 1024자
POST/2/tweets/search/stream/rules100/15min연결 1개; 규칙 1000개; 규칙 길이 1024자

포스트 관리

메서드엔드포인트App당사용자당
POST/2/tweets10,000/24시간100/15분
DELETE/2/tweets/:id50/15분

타임라인

MethodEndpoint앱당사용자당
GET/2/users/:id/tweets10,000/15min900/15min
GET/2/users/:id/mentions450/15min300/15min
GET/2/users/:id/timelines/reverse_chronological180/15min

좋아요 조회

MethodEndpoint앱당사용자당
GET/2/tweets/:id/liking_users75/15min75/15min
GET/2/users/:id/liked_tweets75/15min75/15min

좋아요 관리

메서드엔드포인트App당사용자당
POST/2/users/:id/likes50/15min, 1,000/24hrs
DELETE/2/users/:id/likes/:tweet_id50/15min, 1,000/24hrs

리포스트 조회

MethodEndpointApp당사용자당비고
GET/2/tweets/:id/retweeted_by75/15min75/15min
GET/2/tweets/:id/quote_tweets75/15min75/15min
GET/2/users/reposts_of_me75/15min최대 100개 결과

리트윗 관리

메서드엔드포인트App 기준사용자당
POST/2/users/:id/retweets50/15분
DELETE/2/users/:id/retweets/:tweet_id50/15분

답글 숨기기

MethodEndpointApp당사용자당
PUT/2/tweets/:tweet_id/hidden50/15min

사용자 (엔드포인트 14개)

사용자 조회

MethodEndpointApp당사용자당
GET/2/users300/15min900/15min
GET/2/users/:id300/15min900/15min
GET/2/users/by300/15min900/15min
GET/2/users/by/username/:username300/15min900/15min
GET/2/users/me75/15min

사용자 검색

메서드엔드포인트App당사용자당
GET/2/users/search300/15min900/15min

팔로우 조회

메서드엔드포인트App당사용자당
GET/2/users/:id/following300/15min300/15min
GET/2/users/:id/followers300/15min300/15min

팔로우 관리

MethodEndpointApp별사용자별
POST/2/users/:id/following50/15min
DELETE/2/users/:source_user_id/following/:target_user_id50/15min

차단 조회

메서드엔드포인트App당사용자당
GET/2/users/:id/blocking15/15min

뮤트 조회

MethodEndpoint앱당사용자당
GET/2/users/:id/muting15/15min

뮤트 관리

MethodEndpointApp당사용자당
POST/2/users/:id/muting50/15분
DELETE/2/users/:source_user_id/muting/:target_user_id50/15분

Spaces (엔드포인트 6개)

Spaces 조회

MethodEndpointApp 기준사용자 기준
GET/2/spaces/:id300/15min300/15min
GET/2/spaces300/15min300/15min
GET/2/spaces/:id/tweets300/15min300/15min
GET/2/spaces/by/creator_ids300/15min, 1/sec300/15min, 1/sec
GET/2/spaces/:id/buyers300/15min300/15min

Spaces 검색

MethodEndpointApp당사용자당
GET/2/spaces/search300/15min300/15min

다이렉트 메시지 (8개 엔드포인트)

다이렉트 메시지 조회

MethodEndpoint앱당사용자당
GET/2/dm_events15/15min
GET/2/dm_events/:id15/15min
GET/2/dm_conversations/:dm_conversation_id/dm_events15/15min
GET/2/dm_conversations/with/:participant_id/dm_events15/15min

다이렉트 메시지 관리

MethodEndpointApp당사용자당
POST/2/dm_conversations1,440/24시간15/15분, 1,440/24시간
POST/2/dm_conversations/with/:participant_id/messages1,440/24시간15/15분, 1,440/24시간
POST/2/dm_conversations/:dm_conversation_id/messages1,440/24시간15/15분, 1,440/24시간
DELETE/2/dm_events/:id4,000/24시간300/15분, 1,500/24시간

리스트 (엔드포인트 14개)

리스트 조회

MethodEndpoint앱당사용자당
GET/2/lists/:id75/15min75/15min
GET/2/users/:id/owned_lists15/15min15/15min

리스트 Tweet 조회

MethodEndpointPer AppPer User
GET/2/lists/:id/tweets900/15min900/15min

리스트 구성원 조회

메서드EndpointApp당사용자당
GET/2/lists/:id/members900/15min900/15min
GET/2/users/:id/list_memberships75/15min75/15min

리스트 관리

MethodEndpointApp당사용자당
POST/2/lists300/15분
DELETE/2/lists/:id300/15분
PUT/2/lists/:id300/15분

리스트 구성원 관리

MethodEndpointApp당사용자당
POST/2/lists/:id/members300/15min
DELETE/2/lists/:id/members/:user_id300/15min

리스트 팔로우 관리

MethodEndpointApp 기준사용자 기준
POST/2/users/:id/followed_lists50/15min
DELETE/2/users/:id/followed_lists/:list_id50/15min

고정된 리스트

MethodEndpointApp별사용자별
GET/2/users/:id/pinned_lists15/15min15/15min
POST/2/users/:id/pinned_lists50/15min
DELETE/2/users/:id/pinned_lists/:list_id50/15min

북마크 (5개 엔드포인트)

북마크 조회

MethodEndpointApp당사용자당
GET/2/users/:id/bookmarks180/15min
GET/2/users/:id/bookmarks/folders50/15min50/15min
GET/2/users/:id/bookmarks/folders/:folder_id50/15min50/15min

북마크 관리

메서드엔드포인트App별사용자별
POST/2/users/:id/bookmarks50/15min
DELETE/2/users/:id/bookmarks/:tweet_id50/15min

컴플라이언스 (엔드포인트 3개)

배치 컴플라이언스

메서드엔드포인트App당사용자당
POST/2/compliance/jobs150/15분
GET/2/compliance/jobs/:job_id150/15분
GET/2/compliance/jobs150/15분

사용량 (엔드포인트 1개)

MethodEndpointApp당사용자당
GET/2/usage/tweets50/15분

MethodEndpointApp당사용자당
GET/2/users/personalized_trends200/24hrs, 200/15min100/24hrs, 10/15min
메서드엔드포인트App당사용자당
GET/2/trends/by/woeid/:id75/15min

커뮤니티 (엔드포인트 2개)

MethodEndpointPer AppPer User비고
GET/2/communities/:id300/15min300/15min
GET/2/communities/search300/15min300/15min최대 100개 결과

Analytics (엔드포인트 1개)

MethodEndpointApp당사용자당
GET/2/tweets/analytics300/15분300/15분

미디어 (엔드포인트 8개)

MethodEndpointApp당사용자당
POST/2/media/upload50,000/24hrs500/15min
GET/2/media/upload100,000/24hrs1,000/15min
POST/2/media/upload/initialize180,000/24hrs1,875/15min
POST/2/media/upload/:id/append180,000/24hrs1,875/15min
POST/2/media/upload/:id/finalize180,000/24hrs1,875/15min
POST/2/media/metadata50,000/24hrs500/15min
POST/2/media/subtitles10,000/24hrs100/15min
DELETE/2/media/subtitles10,000/24hrs100/15min

Activity 및 웹훅

MethodEndpointApp당사용자당비고
GET/2/activity/stream450/15분연결 최대 2개; 초당 250 포스트
POST/2/activity/subscriptions500/15분
GET/2/activity/subscriptions500/15분
PUT/2/activity/subscriptions/:subscription_id500/15분
DELETE/2/activity/subscriptions/:subscription_id500/15분
POST/2/webhooks450/15분
GET/2/webhooks450/15분
PUT/2/webhooks/:webhook_id450/15분
DELETE/2/webhooks/:webhook_id450/15분
POST/2/webhooks/replay100/15분

기타 엔드포인트

MethodEndpointApp 기준사용자 기준
GET/2/tweets/sample10/stream100/15min
GET/2/news/:id200/15min
GET/2/news/search200/15min200/15min
POST/2/users/:id/dm/block25/15min, 1,000/24hrs10/15min, 400/24hrs
POST/2/users/:id/dm/unblock25/15min, 1,000/24hrs10/15min, 400/24hrs
GET/2/users/by/username/:username/tweets1,500/15min900/15min
GET/2/users/by/username/:username/mentions450/15min180/15min
GET/2/users/:id/following/spaces300/15min300/15min
GET/2/tweets/:id/retweets75/15min75/15min
DELETE/2/connections/all25/15min25/15min

요청 한도 처리

요청 한도를 초과하면 429 응답을 받게 됩니다.
{
  "errors": [{
    "code": 88,
    "message": "Rate limit exceeded"
  }]
}

복구 전략

  1. 제한 윈도우가 언제 재설정되는지 확인하기 위해 x-rate-limit-reset 값을 확인합니다.
  2. 재시도하기 전에 해당 시점까지 대기합니다.
  3. 필요하다면 지수 백오프를 사용합니다.
import time

def make_request_with_backoff(url, headers):
    response = requests.get(url, headers=headers)
    
    if response.status_code == 429:
        reset_time = int(response.headers.get('x-rate-limit-reset', 0))
        wait_time = max(reset_time - time.time(), 60)
        time.sleep(wait_time)
        return make_request_with_backoff(url, headers)
    
    return response

모범 사례

응답 캐시

반복 요청을 줄이기 위해 결과를 로컬에 캐시합니다.

스트리밍 사용

실시간 데이터의 경우 폴링 대신 필터링된 스트림을 사용합니다.

헤더 모니터링

남은 요청 수를 추적해 요청 한도에 도달하지 않도록 합니다.

요청 분산

요청을 전체 시간 구간에 고르게 분산합니다.

요청 한도 vs. 과금

요청 한도와 과금은 서로 별개입니다:
개념목적
요청 한도시스템 안정성을 위해 요청 빈도를 제어
사용량 과금조회한 데이터에 대해 요금을 부과 (사용량 기반 과금)
요청 한도 내에 있으면서도 사용량 요금이 청구될 수 있으며, 추가 비용 없이 요청 한도에 도달할 수도 있습니다.

Enterprise용 요청 한도

Enterprise 고객에게는 전용 요청 한도가 적용됩니다. 계정 담당자에게 문의하거나 Enterprise 액세스를 신청하세요.

다음 단계

오류 처리

429 및 기타 errors를 적절히 처리하세요.

시작하기

액세스 수준과 기능에 대해 알아보세요.