---
title: "Twitter API 429, 403, 401 오류: 원인과 해결 방법"
description: "X (Twitter) API의 429 Too Many Requests, 403 Forbidden, 401 Unauthorized 오류를 해결합니다. 공식 X API와 TwexAPI에서 각 코드의 의미, 확인할 헤더, 재시도해도 되는 경우를 정리했습니다."
lastModified: "2026-10-19"
sidebar:
  label: "429, 403, 401 오류"
seo:
  title: "Twitter API 429, 403, 401 오류 해결 방법"
search:
  tags: ["트위터 429 오류", "x api 429", "twitter api 403 forbidden", "twitter api 401 unauthorized", "Request failed with status code 401", "x-rate-limit-reset"]
---

**요약:** `429`는 요청이 너무 많아서 기다려야 한다는 뜻이고, `403`은 인증은 됐지만 권한이 없다는 뜻이며, `401`은 인증 정보가 없거나 잘못됐다는 뜻입니다. 기다리면 해결되는 것은 `429`뿐입니다. `403`과 `401`은 요청, 인증 정보, 접근 권한을 바꾸지 않으면 계속 같은 오류가 납니다.

| 코드 | 의미 | 먼저 확인할 것 | 재시도 |
| :--- | :--- | :--- | :--- |
| **429 Too Many Requests** | 속도 제한, 사용량 한도 또는 계정의 일일 한도에 도달 | `x-rate-limit-reset` 또는 `Retry-After` 헤더 | ✅ 안내된 시간만큼 기다린 뒤 |
| **403 Forbidden** | 인증은 됐지만 이 엔드포인트, 작업 또는 계정에 대한 권한이 없음 | 앱 접근 권한, 토큰 종류, 권한 범위, Credits, 대상 계정 | ❌ 권한부터 해결 |
| **401 Unauthorized** | 인증 정보가 없거나, 잘못됐거나, 만료됐거나, 서명이 틀림 | `Authorization` 헤더와 사용 중인 키 또는 토큰 | ❌ 인증 정보부터 수정 |

API를 직접 호출하든 도구에서 오류를 보든 해결 방법은 같습니다. `Request failed with status code 401`이나 `status code 429` 같은 메시지는 HTTP 클라이언트(n8n과 많은 Node.js 봇이 쓰는 axios 등)가 출력하는 것으로, 그 안의 상태 코드는 호출한 API가 돌려준 값입니다.

## 먼저 어떤 API가 오류를 반환했는지 확인하세요

같은 코드라도 반환한 쪽에 따라 원인이 다릅니다.

- **공식 X API** (`api.x.com` 또는 `api.twitter.com`): 앱, 프로젝트, OAuth, 속도 제한 창에 관한 X 개발자 플랫폼 규칙을 따릅니다.
- **TwexAPI** (`api.twexapi.io`): TwexAPI API 키, Credits, 그리고 쓰기 작업에 전달한 X 세션과 관련된 오류입니다. 전체 목록은 [TwexAPI 오류 코드 레퍼런스](/ko/guides/error-reference)를 참고하세요.
- **x.com 웹사이트나 X 앱**: 둘러보다가 나오는 "Rate limit exceeded"는 X가 계정에 건 제한이며, 개발자 API와는 관계가 없습니다.

## Twitter API 429 Too Many Requests

### 공식 X API

X는 엔드포인트별로 보통 15분 또는 24시간 단위의 창으로, 앱별·사용자별 한도를 따로 적용합니다. 모든 응답에는 다음 세 헤더가 포함됩니다.

| 헤더 | 의미 |
| :--- | :--- |
| `x-rate-limit-limit` | 현재 창에서 허용되는 요청 수 |
| `x-rate-limit-remaining` | 현재 창에서 남은 요청 수 |
| `x-rate-limit-reset` | 창이 초기화되는 Unix 타임스탬프 |

한도를 넘으면 X는 HTTP `429`를 반환합니다. 예전 v1.1 형식 본문에는 오류 코드 `88`과 `Rate limit exceeded`가, 새로운 problem 형식에는 `rate-limit-exceeded` 타입이 들어 있습니다. 속도 제한이 아니라 사용량 한도에 도달한 경우에는 `usage-capped`가 반환됩니다.

해결 방법:

1. **`x-rate-limit-reset`까지 기다리세요.** 그 전에 재시도하면 다시 `429`가 납니다.
2. **`x-rate-limit-remaining`을 지켜보세요.** 0이 된 뒤가 아니라 그 전에 속도를 줄이세요.
3. **일일 한도를 확인하세요.** 게시나 좋아요 같은 일부 쓰기 엔드포인트에는 앱별·사용자별 24시간 한도가 있어 몇 분 기다려서는 풀리지 않습니다.
4. **캐시하고 요청을 분산하세요.** 같은 프로필이나 트윗을 반복해서 가져오지 말고, 모든 작업을 정각에 한꺼번에 시작하지 마세요.

종량제 X API에서는 속도 제한과 요금이 별개입니다. 한도 안의 요청도 요금이 붙으므로, 캐시는 할당량과 비용을 모두 아껴 줍니다.

### TwexAPI

TwexAPI의 `429`는 요청 스로틀링이거나, 쓰기 작업 중 X 계정 한도에 도달한 경우입니다(예: X 코드 `344` 게시 제한, 코드 `502` 일일 DM 한도). `Retry-After` 헤더나 `retry_after` 필드가 있으면 그 값을 따르세요. 계정의 일일 한도는 짧은 재시도로는 풀리지 않고 초기화 시점까지 기다려야 합니다. 백오프와 페이지네이션을 깨뜨리지 않는 복구 방법은 [속도 제한](/ko/guides/rate-limits)을 참고하세요.

### 브라우저의 x.com 또는 X 앱

X는 계정마다 불러올 수 있는 양을 제한합니다. 스크롤하다가 "Rate limit exceeded"가 보이면 잠시 기다린 뒤 새로고침하고, 불필요한 탭과 자동 새로고침 확장 프로그램을 닫고, 여러 사람이 함께 쓰는 네트워크나 VPN 출구는 피하세요. 계정 없이 공개 프로필만 보고 싶다면 무료 [트위터 뷰어](https://twexapi.io/twitter-viewer)를 쓸 수 있습니다.

## Twitter API 403 Forbidden

`403`은 X나 TwexAPI가 인증 정보를 인식했지만 요청을 거부했다는 뜻입니다. 같은 요청을 반복하면 같은 `403`이 돌아옵니다.

### 공식 X API

| 원인 | 대표적인 증상 | 해결 방법 |
| :--- | :--- | :--- |
| **앱이 프로젝트에 등록되지 않았거나 접근 권한이 없음** | `client-forbidden` 타입. 예전 응답에서는 코드 `453`("You currently have access to a subset of…") | Project에 연결된 앱의 키를 사용하고, 계정의 접근 범위에 해당 엔드포인트가 포함되는지 확인하세요 |
| **토큰 종류가 맞지 않음** | 앱 전용(app-only) Bearer Token으로 게시, 좋아요, 팔로우, DM을 시도 | 사용자 컨텍스트 토큰(OAuth 1.0a access token과 secret, 또는 OAuth 2.0 사용자 토큰)을 사용하세요 |
| **권한이나 scope 부족** | Read only 앱에서 발급한 사용자 토큰, 또는 `tweet.write` 같은 scope가 없는 OAuth 2.0 토큰 | 앱 권한을 Read and write(DM이 필요하면 Direct Messages 포함)로 바꾼 뒤 access token과 secret을 **다시 생성**하거나 사용자에게 다시 승인받으세요 |
| **보호되었거나 사용할 수 없는 리소스** | `not-authorized-for-resource` 타입 | 대상 계정이 비공개이거나 콘텐츠가 제한되어 있습니다. 사용자가 볼 수 있는 대상을 요청하세요 |
| **중복되거나 제한된 작업** | 같은 문구의 게시물, 답글이 제한된 트윗, 이미 좋아요한 트윗 | 내용을 바꾸거나 현재 상태를 확인한 뒤 재시도하세요 |

앱 권한을 바꿔도 이미 발급된 토큰은 갱신되지 않습니다. Read and write로 바꾼 뒤에는 반드시 사용자 토큰을 다시 생성하세요. 그렇지 않으면 게시는 계속 `403`을 반환합니다.

### TwexAPI

TwexAPI의 `403`은 보통 다음 중 하나입니다.

- **Credits 소진**: [Get Balance](/ko/api-reference/balance-endpoints/get-balance-api-balance-get)로 잔액을 확인하고 [대시보드](https://twexapi.io/dashboard)에서 충전하세요.
- **대상 계정이 비공개이거나 정지됨**: 승인된 팔로워가 아니면 게시물을 읽을 수 없습니다. 공개 계정을 대상으로 요청하세요.
- **계정 또는 작업 제한**: 쓰기에 사용하는 X 계정이 정지·잠금 상태이거나, 트윗이 답글을 제한하고 있거나(X 코드 `433`), X Premium이 필요한 작업입니다.

메시지별 해결 방법은 [오류 코드 레퍼런스](/ko/guides/error-reference)에 정리되어 있습니다.

## Twitter API 401 Unauthorized

`401`은 요청이 본인 확인에 실패했다는 뜻입니다. 인증 정보를 고치지 않으면 몇 번을 재시도해도 성공하지 않습니다.

### 공식 X API

- **헤더 형식 오류**: 앱 전용 요청은 정확히 `Authorization: Bearer <token>` 형식이어야 합니다. `Bearer ` 누락, 불필요한 따옴표, 환경 변수 끝의 줄바꿈은 모두 `401`을 일으킵니다.
- **인증 정보 재생성 또는 폐기**: 개발자 포털에서 키를 다시 생성하면 이전 키는 즉시 무효가 됩니다. 키를 저장한 모든 곳을 업데이트하세요.
- **인증 정보 조합 오류**: OAuth 1.0a에는 consumer key와 secret에 **더해** 사용자의 access token과 secret이 필요합니다. 다른 앱의 키를 섞거나 토큰 자리에 API 키를 넣으면 `401`이 납니다.
- **OAuth 1.0a 서명 오류**: 코드 `32`(`Could not authenticate you`)는 대개 서명이 잘못됐다는 뜻입니다. 파라미터의 URL 인코딩과 서버 시간이 정확한지 확인하세요. 타임스탬프가 어긋나면 서명이 무효가 됩니다.
- **OAuth 2.0 사용자 토큰 만료**: 사용자 액세스 토큰은 만료됩니다. `offline.access` scope를 요청하고 리프레시 토큰으로 새 토큰을 받으세요.

### TwexAPI

- **API 키가 없거나 잘못됨**: [대시보드](https://twexapi.io/dashboard)에서 받은 키를 `Authorization: Bearer YOUR_API_KEY`로 보내세요. 자세한 내용은 [인증](/ko/authentication)을 참고하세요.
- **쓰기 엔드포인트의 X 세션 만료**: 게시, 좋아요, DM에서 `Invalid auth_token`이나 X 코드 `32`가 나오면 `cookie`로 전달한 X 세션 인증 정보가 만료된 것입니다. 그것만 갱신하면 되고 API 키는 문제가 없습니다.

## 성공할 수 있는 요청만 재시도하세요

아래 Python 헬퍼는 `429`와 일시적인 `5xx`만 재시도하고, 나머지 상태 코드는 바로 반환합니다. `Retry-After`(TwexAPI와 대부분의 HTTP API)와 `x-rate-limit-reset`(공식 X API)을 모두 지원합니다.

```python
import random
import time

import requests


def request_with_retry(method, url, max_attempts=5, **kwargs):
    for attempt in range(max_attempts):
        response = requests.request(method, url, timeout=30, **kwargs)
        if response.status_code != 429 and response.status_code < 500:
            return response  # success, or a 4xx that waiting won't fix

        wait = None
        retry_after = response.headers.get("Retry-After", "")
        reset_at = response.headers.get("x-rate-limit-reset", "")
        if retry_after.isdigit():
            wait = int(retry_after)
        elif reset_at.isdigit():
            wait = max(0, int(reset_at) - time.time()) + 1
        if wait is None:
            wait = min(300, 5 * 2 ** attempt) + random.uniform(0, 1)

        time.sleep(wait)

    return response
```

페이지를 넘기며 읽을 때는 `429` 이후 다음 페이지가 아니라 **같은 커서**로 재시도하세요. 쓰기 작업은 다시 보내기 전에 게시물, 좋아요, DM이 이미 반영됐는지 확인하세요. 타임아웃이 났다고 해서 작업이 실패했다는 뜻은 아닙니다.

## 공식 한도 자체가 문제라면

읽기에서 계속 `429`가 나거나 종량제 요금이 필요한 데이터보다 빨리 늘어난다면, 종량제 서드파티 API와 비용을 비교해 보세요. TwexAPI 읽기는 트윗 1,000개당 약 0.05달러이고 API 키만 있으면 되며 OAuth 설정이 필요 없습니다. 공식 X API는 게시물 읽기 1,000건당 5달러입니다. [TwexAPI와 공식 X API 비교](/ko/comparison/official-x-api)와 [X API 요금 계산기](https://twexapi.io/x-api-pricing)를 참고하세요. TwexAPI는 X Corp.와 제휴하거나 보증받은 서비스가 아닙니다.

## Twitter API 429, 403, 401 자주 묻는 질문

### Twitter API 429는 얼마나 지속되나요?

`x-rate-limit-reset`이 가리키는 시각까지이며, 보통 15분 이내입니다. 게시처럼 24시간 한도가 있는 엔드포인트는 일일 창이 초기화될 때까지 막혀 있습니다. TwexAPI에서는 `Retry-After` 또는 `retry_after`를 따르세요.

### X API로 트윗을 올리면 왜 403 Forbidden이 나오나요?

대개 토큰에 쓰기 권한이 없기 때문입니다. 앱 전용 Bearer Token을 쓰고 있거나, 앱이 Read only로 설정되어 있거나, Read and write로 바꾸기 전에 발급한 사용자 토큰을 쓰고 있는 경우입니다. 쓰기 권한을 켜고 사용자 토큰을 다시 생성한 뒤 사용자 컨텍스트 인증으로 게시하세요.

### n8n의 "Request failed with status code 401"은 무슨 뜻인가요?

X API나 TwexAPI가 해당 HTTP 노드의 인증 정보를 거부했다는 뜻입니다. `Authorization` 헤더가 `Bearer` 뒤에 유효한 키나 토큰으로 되어 있는지, 인증 정보가 다시 생성되지 않았는지, 쓰기 작업에 사용자 컨텍스트 인증 정보를 쓰는지 확인하세요. TwexAPI 설정 예시는 [n8n 가이드](/ko/guides/n8n)에 있습니다.

### 403과 429는 무엇이 다른가요?

`429`는 요청이 너무 많아 기다려야 한다는 뜻이고, `403`은 애초에 그 요청이 허용되지 않는다는 뜻입니다. `429`는 기다리면 풀리지만, `403`은 접근 권한, 권한 범위, Credits 또는 대상을 바꿔야 합니다.

### Twitter 오류 코드 88은 무엇인가요?

X 오류 코드 `88`은 `Rate limit exceeded`를 뜻하며 HTTP `429`와 함께 반환됩니다. `x-rate-limit-reset`까지 기다린 뒤 다음 요청을 보내세요.

### Twitter 오류 코드 32는 무엇인가요?

X 오류 코드 `32`는 `Could not authenticate you`를 뜻하며 HTTP `401`과 함께 반환됩니다. 공식 API에서는 대개 OAuth 1.0a 서명이나 토큰이 잘못된 경우이고, TwexAPI 쓰기 엔드포인트에서는 전달한 X 세션 인증 정보가 만료됐다는 뜻입니다.

## 관련 페이지

- [Twitter API 오류 코드 레퍼런스](/ko/guides/error-reference): TwexAPI의 모든 상태 코드와 X 오류 코드, 해결 방법
- [속도 제한](/ko/guides/rate-limits): 백오프, `Retry-After`, 페이지네이션을 깨뜨리지 않는 복구
- [오류 처리](/ko/guides/error-handling): MCP, SDK, 쓰기 작업 복구
- [인증](/ko/authentication): API 키와 X 세션 인증 정보
