Welcome to the BusyBee social data platform. For partnerships or usage questions, click “Support” on the right.

X (Twitter) Data API: post search, account profiles and comments

Search posts by keyword, read account profiles and timelines, pull reply threads. Use it as-is for sentiment tracking, topic monitoring and KOL shortlisting.

What you get

CapabilitiesPost search / Account search / Account details / Account posts / Post details / Fetch comments
Response fieldsPost url, text, author (id/handle/name), created_at, likes, reposts, replies, cover
IntegrationMCP (Streamable HTTP) or REST (GET or POST)
BillingPay per call, automatic refund on failure

Response schema

Whichever platform you call, post-type responses share the same structure: items[] holds platform / id / url / author{id,handle,name} / text / created_at / stats{...} / cover; creator responses are handle / name / bio / followers / following / posts / verified / avatar / url. Switching platforms needs no changes to your parsing code.

MCP or REST

For models, use MCP: add https://lucydomi.com/mcp to your client config and it selects the tools itself. For code, use REST: https://lucydomi.com/mcp/v1/search_posts, where GET with query parameters or POST with a JSON body both work and return an identical structure.

Copy and run

cURL
curl -s https://lucydomi.com/mcp/v1/search_posts \
  -H "Authorization: Bearer $BUSYBEE_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{"platform": "twitter", "keyword": "coffee", "limit": 3}'
Python (standard library, no dependencies)
import os, json, urllib.request

KEY = os.environ["BUSYBEE_API_KEY"]
req = urllib.request.Request(
    "https://lucydomi.com/mcp/v1/search_posts",
    data=json.dumps({"platform": "twitter", "keyword": "coffee", "limit": 3}).encode(),
    headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"},
    method="POST",
)
data = json.load(urllib.request.urlopen(req, timeout=60))
for it in data["items"]:
    print(it.get("url"), it.get("text", "")[:60])

Sample response

This is a real production response, truncated to one item and with billing fields removed.

{
  "ok": true,
  "platform": "twitter",
  "tool": "search_posts",
  "count": 1,
  "items": [
    {
      "platform": "twitter",
      "id": "2113381699765628934",
      "url": "https://x.com/quietwolfzz/status/2113381699765628934",
      "author": {
        "id": "2034537496894398464",
        "handle": "quietwolfzz",
        "name": "𝚀𝚞𝚒𝚎𝚝 𝚆𝚘𝚕𝚏"
      },
      "text": "Nobody ever asked if you wanted coffee with your rest.\n\nIn 1952, coffee sellers gave your break a product’s name. Your boss kept the minutes.\n\nWatch. Learn. Go quiet. 🐺\n\n📖 The 7 levers they use on all of us (free guide): \nhttps://t.co/3QtN8q53jr\n\n🎬 Made with @higgsfield_ai 👇\n\nhttps://t.co/vMzUntJTnl\n\n#coffeebreak #coffee  #history #psychology",
      "created_at": "Thu Oct 22 21:27:16 +0000 2026",
      "stats": {
        "likes": 1806,
        "comments": 34,
        "shares": 280,
        "views": 37304,
        "collects": 780
      },
      "cover": null
    }
  ]
}

FAQ

Do I need my own scraper or proxy?
No. Scraping and cleaning happen server-side, so you only receive structured JSON; failed calls are refunded automatically.
Can I use it commercially?
Everything returned is publicly visible content and can be used for analysis and product features; see the “Data policy” page for the exact limits.
Can I raise the number of results?
Yes, limit is adjustable, but each call returns synchronously. Fetch in batches to avoid a single call timing out.

Related

API docsPricingTikTok dataYouTube dataInstagram dataComment insights

One key, six platforms

Same fields, same MCP endpoint; switching platforms only changes one parameter. Sign up and get $0.2 in trial credit.

See pricing Try one call