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.

// GET /api/v1/score?handle=someuser
{
  "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

GET/api/v1/score

Score a social media handle for inauthentic behavior.

ParameterTypeDescription
handlerequiredThe username to analyze (with or without @)
platformoptionaltwitter (default), mastodon, bluesky
quickoptionaltrue (default) — Phase 1 only. false — full analysis including Wayback

Authentication

Authorization: Bearer bc_sk_your_key_here

Pass your API key as a Bearer token in every request header.

Quick start

curl
curl -H "Authorization: Bearer bc_sk_your_key" \
  "https://botchorus.com/api/v1/score?handle=TEN_GOP"
Python
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%}")
JavaScript
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