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.
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:
GET /v2/x/user/{handle}/tweets
Get the latest tweets from a specific X account’s timeline.
Path params:
Query params:
Example request:
/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_atis X’s native string format, not ISO 8601. Parse withnew Date(tweet.created_at)in JS ordateutil.parser.parsein Python.impression_countis 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.textis post-expansion. Allt.coshortlinks are already replaced with their target URLs. Theurlsarray 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
maxcap is 50 per call. To go beyond that, run multiple queries narrowed withsince:/until:operators. - Search prefers recency. Live results are ranked newest-first. Combine with
min_faves:Normin_retweets:Nif 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 — emailjosh@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.
