Trends show what is moving. A profile is one account. You pass a handle, or a numeric user id, and the response is the user object: display name, screen name, avatar, follower counts, and whether the account is protected.
A handle such as elonmusk is looked up by screen name. A numeric username is treated as a user id.
👉 To access this endpoint, you must obtain an API key: https://steadyapi.com/register
Authentication
Every call uses a Bearer token from your SteadyAPI dashboard.
Documentation:
https://docs.steadyapi.com/#authenticating-requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
Where this fits
Trends are GET /v1/twitter/trends. They do not return this profile. Followers are GET /v1/twitter/user/followers and following is GET /v1/twitter/user/following. Both take username. Tweets are GET /v1/twitter/user/tweets, and that route requires user_id, which is rest_id from this profile, not the handle. One tweet is GET /v1/twitter/tweet/info with id.
One X account
Endpoint: GET /v1/twitter/user
Documentation:
https://docs.steadyapi.com/#twitter-social-GETapi-v1-twitter-user
Parameters
username— required handle, or a numeric user id
The parameter name stays username in both cases. A value that is all digits is sent as a user id. Anything else is a screen name, lowercased. There is no count or cursor on this route. Those parameters belong on followers, following, and tweets, not on the profile call.
Python
import requests
url = "https://api.steadyapi.com/v1/twitter/user"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(url, headers=headers, params={"username": "elonmusk"})
response.raise_for_status()
user = response.json().get("body", {})
legacy = user.get("legacy", {})
print(user.get("core", {}).get("name"))
print(user.get("core", {}).get("screen_name"))
print(user.get("rest_id"))
print(legacy.get("followers_count"), legacy.get("statuses_count"))
Annotated sample
{
"rest_id": "44196397",
"core": { "name": "Elon Musk", "screen_name": "elonmusk" },
"avatar": { "image_url": "https://pbs.twimg.com/profile_images/1936002956333080576/kqqe2iWO_normal.jpg" },
"is_blue_verified": true,
"legacy": {
"description": "",
"followers_count": 227669486,
"friends_count": 1220,
"statuses_count": 87500
},
"privacy": { "protected": false }
}
Store rest_id and core.screen_name. core.name is the display name. avatar.image_url is the profile image. legacy.followers_count is followers, legacy.friends_count is following, and legacy.statuses_count is the post count. legacy.description is the bio, and it can be an empty string. privacy.protected is true when the account is locked. is_blue_verified is the verification flag. The object has many more keys. Ignore them until you need a specific one. body is this user object, not a list.
Practical use
Pass one handle. A comma-separated list of numeric ids is not a working multi-user lookup. Send one username per call.
The next tweets call wants user_id set to rest_id. Sending elonmusk as user_id is the wrong parameter. Followers still want the handle in username.
Counts live under legacy, not on the top-level user. user["followers_count"] is missing. The number is user["legacy"]["followers_count"].
👉 Get your API key and open a profile: https://steadyapi.com/register