I understand there can be many factors, I’ve just seen the same behavior described repeatedly and have myself reproduced across a number of different apps and account combinations.
As an example, let’s try to create a list of 2095 members (just looking here for samples: https://toplists.xyz/) and creating a copy in our own account to make further updates to it (i.e. fork the list like forking code).
https://twitter.com/susanbeebe/lists/social-media-smarties
First get the members of the existing list:
https://api.twitter.com/1.1/lists/members.json?owner_screen_name=susanbeebe&include_entities=false&skip_status=true&slug=social-media-smarties&count=5000
That would give us 2095 users in the response. Next, we want to execute create_all calls for those 2095 users. The docs indicate you can pass 100 users at a time, but that results in “HTTP 503 - Twitter is temporarily over capacity.” errors frequently, so for my test, let’s use batches of 20. This endpoint is not rate-limited, so we will not get an error during the process of making those 105 calls.
After running this, I end up with a list that now was 1104 members, nowhere near the 2095 in the source list. Additionally, whenever I now try to manually add somebody to a list, any list for my account, I get an error in the Twitter web app’s UI: “Your account may not be allowed to perform this action. Please refresh the page and try again.”
Here’s my sample ruby program that encountered no errors:
require "twitter"
client = Twitter::REST::Client.new do |config|
config.consumer_key = ""
config.consumer_secret = ""
config.access_token = ""
config.access_token_secret = ""
end
puts "Retrieving list members..."
source_members = client.list_members(
"susanbeebe", "social-media-smarties", { count: 2100, skip_status: false }
)
source_names = source_members.map(&:screen_name)
puts "#{source_names.count} in list"
puts "Create new list..."
new_list = client.create_list("create_all-test", { mode: "private" })
puts "Adding list members"
source_names.each_slice(20) do |slice|
client.add_list_members(new_list.id, slice)
puts " -- added #{slice.count} members"
sleep rand(5)
end