Skip to main content
Beta. Response shape and quota numbers are stable. We may add optional fields, but no breaking changes. Email josh@polynode.dev if you’re building something on top of this and need direct support.

What this is

Two read-only endpoints for live X data:
  • Search any text across X. Full operator support (from:, since:, min_faves:, hashtags, exact phrases).
  • Account timeline for any public X handle — most-recent tweets, replies, retweets, and quoted content.
Most teams already using polynode for prediction-market data also want to know what’s being said on X about a market, an event, or a specific account. Setting up your own X feed is rate-limit hell and a maintenance treadmill — we just do it for you, and you query it like any other polynode endpoint.

Who this is for

  • Prediction-market dashboards layering social sentiment over on-chain data.
  • AI agents that need to factor live X posts into their reasoning about an event.
  • Research and analytics products that want clean JSON without building their own X integration.

Base URL

Authentication

Pass your polynode API key on every request — either header works:
  • Free-tier keys are rejected with 402 Payment Required. Paid plans only.
  • Hard rate limit: 1 request per second per key. Two requests on the same key in the same second → the second one gets 429.
  • Each successful response (HTTP 200) increments your monthly quota counter. Rejected requests do not.

Tier quotas

Quotas reset midnight UTC on the 1st of each month. Track your remaining usage in real time via response headers:

Endpoints

GET /v2/x/search

Search recent X posts by query. Query params: Operator examples:
Example request:
Example response:

GET /v2/x/user/{handle}/tweets

Get the latest tweets from a specific X account’s timeline. Path params: Query params: Example request:
The response shape is identical to /v2/x/search, except the top-level field is handle instead of query.

Errors

Tweet shape reference

Every tweet object can include these fields. Optional fields are only present when relevant.

Quirks worth knowing

  • created_at is X’s native string format, not ISO 8601. Parse with new Date(tweet.created_at) in JS or dateutil.parser.parse in Python.
  • impression_count is a string, not an int — X returns it as a string and we pass it through verbatim. Cast on your side if you need a number.
  • text is post-expansion. All t.co shortlinks are already replaced with their target URLs. The urls array also gives you the full expanded metadata (title, description) per link, which is the easiest way to surface link previews in your UI.
  • No pagination cursor in the beta. The max cap is 50 per call. To go beyond that, run multiple queries narrowed with since: / until: operators.
  • Search prefers recency. Live results are ranked newest-first. Combine with min_faves:N or min_retweets:N if you want to floor on engagement.

FAQ

Why is search slower than timeline? Search and timeline take different paths. Timeline is typically ~1-2 seconds. Search is typically 5-7 seconds because the underlying X data path is heavier. This is normal and stable. Can I get my own quota lifted? Yes — email josh@polynode.dev if you’re hitting the cap and want a custom limit. Will the response shape change? We may add optional fields (e.g. new metrics X exposes). We will not rename or remove existing fields without versioning the endpoint. Code defensively against optional fields, never against missing ones.