Table of Contents

レート制限

レート制限は 15 分ごとにリセットされます。

* CreateTweetAsync には、15 分枠とは別の、より厳しい制限があります。無料アカウントでは 1 日あたり約 50 投稿 が上限です。 これに達すると、次のメッセージとともに CouldNotTweetException が送出されます。

Authorization: You've hit the daily limit. Subscribe to Premium for higher limits. (501)

このとき 15 分枠のカウンターはまだ約 250 リクエスト残っていると報告するため、レート制限ヘッダーを見張るだけでは事前に気付けません。 読み取り・いいね・フォローは引き続き動作し、投稿だけが翌日まで(または Premium に加入するまで)ブロックされます。

† PinTweetAsync と UnpinTweetAsync のレート制限ヘッダーは 187 リクエストの共有枠を示しますが、X が実際に適用するのはそれではありません。2 つはそれぞれ別に数えられ、枠内で 100 回 呼ぶと 429 で止められます(UnpinTweetAsync が止まっても PinTweetAsync はまだ通り、ヘッダーは残り 87 と報告したままです)。NotFoundException で失敗した呼び出しも数えられ、api.x.com ではなく x.com/i/api を経由しても同じ制限に当たります。枠は固定で、最初の呼び出しから始まり、x-rate-limit-reset が示す枠の終わりでちょうど解除されます。間隔は関係なく、連続呼び出しでも 8 秒おきでも 101 回目で止められました。9 アカウント・24 枠で計測し、すべて 100 でした。

直近のレスポンスに含まれる残りリクエスト数とリセット時刻は、Client.RateLimitRemaining と Client.RateLimitReset で確認できます。

「上限」の - は未計測(不明)を表します。

メソッド 上限 エンドポイント
AddMembersToGroupAsync - AddParticipantsMutation
BlockUserAsync 187 blocks/create.json
RateCommunityNoteAsync 500 BirdwatchCreateRating
GetCommunityNotesProfileAsync 500 BirdwatchFetchAuthenticatedUserProfile, BirdwatchFetchBirdwatchProfile
GetContributorCommunityNotesAsync 500 BirdwatchFetchContributorNotesSlice
GetCommunityNotesTimelineAsync 500 BirdwatchFetchGlobalTimeline, GenericTimelineById
GetCommunityNotesAsync 500 BirdwatchFetchNotes
GetCommunityNoteAsync - BirdwatchFetchOneNote
GetUserVerifiedFollowersAsync 500 BlueVerifiedFollowers
GetBookmarksAsync 500 Bookmarks
DeleteAllBookmarksAsync - BookmarksAllDelete
ChangeGroupNameAsync 900 {GroupID}/update_name.json
GetGroupDmHistoryAsync, GetDmHistoryAsync 900 conversation/{ConversationID}.json
BookmarkTweetAsync - CreateBookmark
HighlightTweetAsync - CreateHighlight
CreatePollAsync - cards/create.json
FollowUserAsync 15 friendships/create.json
CreateListAsync - CreateList
RetweetAsync - CreateRetweet
CreateScheduledTweetAsync - CreateScheduledTweet
CreateDraftTweetAsync 500 CreateDraftTweet
CreateTweetAsync 300* CreateTweet
DeleteBookmarkAsync - DeleteBookmark
UnhighlightTweetAsync - DeleteHighlight
DeleteDmAsync - DMMessageDeleteMutation
DeleteListBannerAsync - DeleteListBanner
DeleteRetweetAsync - DeleteRetweet
DeleteScheduledTweetAsync - DeleteScheduledTweet
DeleteDraftTweetsAsync 50 DeleteDraftTweets
DeleteDraftTweetAsync 500 DeleteDraftTweet
DeleteTweetAsync - DeleteTweet
UnfollowUserAsync 187 friendships/destroy.json
EditListBannerAsync - EditListBanner
GetFavoritersAsync 500 Favoriters
FavoriteTweetAsync - FavoriteTweet
GetScheduledTweetsAsync 500 FetchScheduledTweets
GetDraftTweetsAsync 500 FetchDraftTweets
GetUserFollowersAsync 50 Followers
GetUserFollowersYouKnowAsync 500 FollowersYouKnow
GetUserFollowingAsync 500 Following
IsTweetHighlightedAsync - HighlightTweetSheetQuery
GetLatestTimelineAsync 500 HomeLatestTimeline
GetTimelineAsync 500 HomeTimeline
- 450 dm/inbox_initial_state.json
AddListMemberAsync - ListAddMember
GetListAsync 500 ListByRestId
GetListTweetsAsync 500 ListLatestTweetsTimeline
GetListsAsync 500 ListsManagementPageTimeline
GetListMembersAsync 500 ListMembers
RemoveListMemberAsync - ListRemoveMember
GetListSubscribersAsync 500 ListSubscribers
LogoutAsync 187 account/logout.json
AddReactionToMessageAsync - useDMReactionMutationAddMutation
RemoveReactionFromMessageAsync - useDMReactionMutationRemoveMutation
MuteUserAsync 187 mutes/users/create.json
GetNotificationsAsync("All") 180 notifications/all.json
GetNotificationsAsync("Mentions") 180 notifications/mentions.json
GetNotificationsAsync("Verified") 180 notifications/verified.json
PinTweetAsync 100† account/pin_tweet.json
TranslateTweetAsync 100 grok/translation.json
GetRetweetersAsync 500 Retweeters
SearchTweetAsync, SearchUserAsync 50 SearchTimeline
SendDmAsync 187 dm/new2.json
UserIdAsync - account/settings.json
GetUserSubscriptionsAsync 500 UserCreatorSubscriptions
LoginAsync 187 onboarding/task.json
GetTrendsAsync 20000 guide.json
GetTweetByIdAsync 150 TweetDetail
UnblockUserAsync 187 blocks/destroy.json
UnfavoriteTweetAsync - UnfavoriteTweet
UnmuteUserAsync 187 mutes/users/destroy.json
UnpinTweetAsync 100† account/unpin_tweet.json
EditListAsync - UpdateList
UploadMediaAsync - media/upload.json
GetUserByIdAsync 500 UserByRestId
GetUserByScreenNameAsync 95 UserByScreenName
GetUserHighlightsTweetsAsync - UserHighlightsTweets
GetOriginalContentRewardsEligibilityAsync 5000 jfapi/creators/original_content_rewards
GetCreatorSubscriptionsEligibilityAsync 5000 jfapi/creators/subscriptionsv2/eligibility
GetUserTweetsAsync(..., "Likes") 500 Likes
GetUserTweetsAsync(..., "Media") 500 UserMedia
GetUserTweetsAsync(..., "Tweets") 50 UserTweets
GetUserTweetsAsync(..., "Replies") 50 UserTweetsAndReplies
VoteAsync - capi/passthrough/1
CreateGroupAsync - dm/new2.json
DeleteDmConversationAsync - dm/conversation/{id}/delete.json
DeleteListAsync - DeleteList
GetAboutAccountAsync - AboutAccountQuery
GetBlockedUsersAsync - BlockedAccountsAll
GetDmInboxAsync - dm/inbox_initial_state.json
GetMutedUsersAsync - MutedAccounts
GetUserListsAsync - CombinedLists
GetUserSpotlightsAsync - ProfileSpotlightsQuery
UpdateProfileAsync - account/update_profile.json