This is a good first API exercise. Pagination is the next trap. One successful response does not mean the dataset is complete. Keep post and user IDs as strings. Save the next cursor after every page. Treat a 429 response as a scheduled retry, not an empty result. I would also keep the raw response before flattening it. That makes debugging much easier when fields change. I work on Xquik, an X/Twitter API alternative for Python projects. It provides user timelines, replies, followers, likes, mentions, and cursor pagination. Prepaid reads work well for small or irregular jobs without a subscription. Deleted, private, and unavailable posts remain unavailable.