Hi @jessicagarson,
Thank you for taking the time to circle back around.
I’ve attempted to document an example of a “ghost-like” that I can’t remove from the timeline. I’ve included as much supporting information as I can think of but please let me know if there is more I can provide.
As a bit of app background in case it is helpful, the registered twitter app is a Native App. My Python code is using a slightly modified version of pytwitter-2 to mediate API access. It is using OAuth2 for authenticating a user context. The OAuth2 authentication is requesting the following scopes.
"tweet.read", "tweet.write", "users.read", "tweet.read", "users.read", "like.write", "like.read", "follows.read", "follows.write", "offline.access"
The API requests I am making all return 200 status codes. My modified pytwitter-2 takes care of refreshing access tokens that expire and pausing when rate limits get hit.
The app I am running is supposed to go through an authenticated user’s timeline an unlike all of liked the Tweets.
The app worked fine for my (I have been using this with my account) most recent Tweets. Recent tweets were unliked as expected.
However at some point the api call to get all liked tweets started returning IDs that when deleted through the API would not be removed from my line. The tweets still show up in the web UI list of liked tweets, I am still listed in the users of that liked the tweet BUT the heart emoji is empty.
Subsequent runs of my script continue to return the IDs of the ghost-likes.
I tagged you after finding the note about tweets greater that 3200 having some odd interactions with the API. Anecdotally that seemed to be consistent with my script working (tweets correctly unliked) for the most recent but then no longer being effective.
The API documentation doesn’t note this the 3200 limitation, if that is the cause.
(Thanks for reading through all of that table-setting)
Here is an example,
Tweet ID: 1488909815388811266
My twitter ID: 934627337701920768
Here is the Tweet in my likes list. Note the empty heart emoji
Here is a screen shot with the tweet ID in the URL
This is the logging output of my script. I highlighted the tweet id 1488909815388811266. It is in the list of liked IDs as well as in the API call to DELETE. The DELETE API call returns status code 200

Here is the output of a second run of the script (you can see the time codes on the left). Tweet 1488909815388811266 is returned again, after the DELETE in the list of likes
So that is the problem I am seeing.
As a side note, tweet 1488909815388811266 and it’s other ghost-likes have persisted for over 2 weeks. I’ve been tinkering but that is always the first in the list. I am mentioning this as the persistence does not seem to be cleared up after some time has passed. In other words, to me, it doesn’t indicate that the DELETE was acknowledged but hasn’t been processed because of some batching or similar process.
Tweet 1488909815388811266 is just an example. All of the tweets in my likes list at the moment seem to have this problem.
If I like a tweet “now” and run my script, the newly like tweet is un-liked as expected. So this behavior seems only apply to tweets after some threshold.
Anyway, thanks again for circling back.
rdp