Check an X account for a shadowban
Changed onChecks 1 X account for a search ban, a search suggestion ban, reply deboosting & a reply lock. It also tests timeline visibility & early engagement, reads the sensitive flag & the countries that withhold the account, and says if the account is active, protected or suspended.
Each check answers pass, fail or unknown, with its reason & what it read. overall sums up the checks, and checkedAt holds the time of the check. The reply checks and the engagement check answer pass or unknown, since X ranks replies for each viewer and a drop alone proves nothing. A protected account skips the checks that need public posts, and a suspended account gets the account check only. Each profile, post, suggestion & reply in the answer costs 1 credit.
Shadowban checks show if X search lists an account, with each post they read.
Request
- Base URLhttps://xquik.com/api/v1
- URLhttps://xquik.com/api/v1/x/users/{id}/shadowban
- Auth
- API key in header x-api-key
- or HTTP bearer
- or none
Path parameters
User ID, username with or without @, or URL-encoded profile URL, such as x.com/nasa or x.com/i/user/11348282. A number is a user ID. Writes look up a username's ID before sending. Anything else gets 400 invalid_user_id.
Query parameters
Fields to keep in each row, comma-separated. Use dots for nested fields, such as author.username. A list keeps the field in each item. Case & underscores do not matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics always stay. An unknown name answers 400 unknown_field with the valid names, before any read. The price stays the same. SDK row types then hold only the named fields. A longer URL fails at the edge before Xquik reads it. Pick only the fields you need with fields & omit.
Fields to drop from each row, comma-separated. It takes the same names as fields. With fields, it drops from the kept fields. A longer URL fails at the edge before Xquik reads it.
Response
Shadowban checks
Example response
{
"username": "NASA",
"userId": "11348282",
"account": "active",
"checkedAt": "2026-11-03T02:15:00.000Z",
"overall": "clear",
"checks": {
"account": {
"verdict": "pass",
"reason": "active",
"evidence": {
"profileUrl": "https://x.com/NASA"
}
},
"search": {
"verdict": "pass",
"reason": "listed",
"evidence": {
"query": "from:NASA",
"searchUrl": "https://x.com/search?q=from%3ANASA&f=live",
"recentPostIds": [
"2103610284464316469"
],
"foundPostIds": [
"2103610284464316469"
]
}
},
"suggestion": {
"verdict": "pass",
"reason": "suggested",
"evidence": {
"query": "NASA",
"suggestedUsernames": [
"NASA"
]
}
},
"replies": {
"verdict": "unknown",
"reason": "no_recent_replies",
"evidence": {
"replies": []
}
},
"replyLock": {
"verdict": "unknown",
"reason": "no_recent_replies",
"evidence": {
"checkedReplies": 0,
"shownReplies": 0
}
},
"timeline": {
"verdict": "pass",
"reason": "visible",
"evidence": {
"postCount": 74486,
"timelinePosts": 20
}
},
"engagement": {
"verdict": "pass",
"reason": "typical",
"evidence": {
"newestMedian": 4268,
"newestPosts": 5,
"earlierMedian": 2773,
"earlierPosts": 7
}
},
"sensitive": {
"verdict": "pass",
"reason": "not_flagged",
"evidence": null
},
"withheld": {
"verdict": "pass",
"reason": "none",
"evidence": {
"countries": []
}
}
}
}Changes
- info
endpoint added
- info
- breaking
api path removed without deprecation
- breaking