API Access
One cable.
Fifteen sources.
We've wired GDELT, the 2018 IRA dataset, TwiBot-20, Wayback Machine, Archive.today, Memento, URLScan, FEC records, Reddit, Bluesky, 4chan, YouTube, Telegram, Mastodon, and Pullpush.io into a single scoring call. Building this yourself takes months and breaks the moment one source changes their API. We maintain it. You just query it.
Get API Access →Pricing
Minimum deposit
One-time, adds to your balance
$5.00
Per analysis call
One cent per handle scored
$0.01
Balance expiration
Carries forward indefinitely
Never
$5 funds ~500 analysis calls. No subscriptions, no monthly fees.
What the API returns
Every call runs the same pipeline the public site uses — same sources, same signal weights, same probability score. You get the structured version plus the full raw source data from every collector.
{
"handle": "someuser",
"platform": "twitter",
"bot_probability": 0.87,
"confidence": "high",
"status": "scored",
"signals": [
{
"source": "IRA Dataset 2018",
"weight": 80,
"fired": true,
"detail": "Exact match: IRA troll account"
},
{
"source": "GDELT Narratives",
"weight": 15,
"fired": false
},
{
"source": "FEC Records",
"weight": 20,
"fired": false
},
{
"source": "TwiBot-20",
"weight": 35,
"fired": false
}
],
"raw": {
"gdelt": {
"articles": [...],
"topThemes": ["POLITICS", "DISINFORMATION"],
"coordinationFlag": false
},
"wayback_cdx": {
"total": 142,
"entries": [...]
},
"urlscan": { "total": 3, "scans": [...] },
"fec": { "matched": false, "candidates": [], "committees": [] },
"archives": {
"archive_today": { "count": 14, "entries": [...] },
"memento": { "count": 311, "mementos": [...] }
},
"reddit": {
"has_reddit_account": true,
"post_count": 12,
"comment_count": 47,
"subreddits": ["politics", "worldnews", "The_Donald"],
"posts": [...],
"comments": [...],
"mentions": [...]
},
"bluesky": {
"has_bluesky_account": true,
"post_count": 34,
"follower_ratio": 0.42,
"posts": [...],
"mentions": [...]
},
"fourchan": {
"has_pol_presence": true,
"thread_count": 3,
"matches": [...]
},
"youtube": {
"channel_found": true,
"channel": { "subscriber_count": 8400, "video_count": 212 },
"comment_analysis": {
"flagged_count": 23,
"flag_rate": 0.23,
"signals_fired": ["youtube_comment_coordination"]
}
},
"telegram": {
"channel_found": true,
"channel": { "member_count": 14200 }
},
"mastodon": {
"mastodon_found": true,
"account": { "followers_count": 2100, "statuses_count": 847 },
"posts": [...]
}
},
"_api": {
"cost_cents": 1,
"balance_after_cents": 499
}
}Why raw data matters
APIs go offline. Accounts get deleted. The raw field gives you every article, every archive entry, every scan record we collected — not just the scored summary. When an account is suspended, our Wayback entries become the only surviving record.
Endpoint
/api/v1/scoreScore a social media handle for inauthentic behavior.
| Parameter | Type | Description |
|---|---|---|
| handle | required | The username to analyze (with or without @) |
| platform | optional | twitter (default), mastodon, bluesky |
| quick | optional | true (default) — Phase 1 only. false — full analysis including Wayback |
Authentication
Authorization: Bearer bc_sk_your_key_herePass your API key as a Bearer token in every request header.
Quick start
curl -H "Authorization: Bearer bc_sk_your_key" \ "https://botchorus.com/api/v1/score?handle=TEN_GOP"
import httpx
res = httpx.get(
"https://botchorus.com/api/v1/score",
params={"handle": "TEN_GOP"},
headers={"Authorization": "Bearer bc_sk_your_key"}
)
data = res.json()
print(f"{data['handle']}: {data['bot_probability']:.0%}")const res = await fetch(
"https://botchorus.com/api/v1/score?handle=TEN_GOP",
{ headers: { Authorization: "Bearer bc_sk_your_key" } }
);
const data = await res.json();
console.log(`${data.handle}: ${(data.bot_probability * 100).toFixed(0)}%`);Ready to plug in?
$5 minimum. No subscription. Cancel anytime by spending nothing.
Get API Access →Research or institutional access? contact@botchorus.com