Skill-ranked Polymarket data your agent or app can buy one call at a time. No API key, no account: just HTTP and a wallet with a little USDC.
Every paid endpoint works the same way:
402 Payment Required and the price. This is free.Check a price right now, for free:
curl -i "https://www.x402pulse.dev/v1/top-traders?period=month"
Payments are in USDC on Base (eip155:8453). You only pay for successful responses: any error is never charged.
What happens, step by step, every time your agent calls x402Pulse.
Your request arrives. Bad parameters get a free 400, and more than 60 calls a minute gets a free 429. You're never asked to pay for a request that can't succeed.
With no payment attached, x402Pulse answers 402 Payment Required. The PAYMENT-REQUIRED header says how much, in which token, on which network, and to which address.
Your client signs a USDC authorization and resends the request. x402Pulse asks its facilitator (Coinbase) to confirm the signature, amount and network are valid. No money moves yet.
x402Pulse builds the answer from Polymarket's public APIs (trades, leaderboards, positions, holders, markets), scores the wallets involved, and reuses recent results from its cache.
Only if the answer succeeded, the facilitator settles the payment on the blockchain: USDC moves from your wallet to x402Pulse. If anything failed, it never settles.
You get JSON with the data, plus a PAYMENT-RESPONSE header containing the receipt and transaction hash.
Any program that can make HTTP requests, an x402 client library (or your own code), and a wallet with a little USDC on Base.
No API key, no account, no subscription, no sign-up, and no ETH for gas. The facilitator pays the network fee.
Want a working agent right away? Our open-source stock-research agent buys live data per call: latest quarter, insider trades and important SEC filings for any U.S. stock, about 2 cents a run. It comes in two versions: a 20-line script, and a Claude-powered agent that decides what to buy and answers in plain English. Payments are limited to x402Pulse's address, USDC on Base, and a spending cap you set.
git clone https://github.com/TheProject2-0/x402pulse-stock-agent.git cd x402pulse-stock-agent && npm install cp .env.example .env # add a small test wallet key (USDC on Base) or a Pro key npm run brief -- NVDA
Source and instructions: github.com/TheProject2-0/x402pulse-stock-agent (MIT license).
From an empty folder to a paid answer in about ten minutes. Follow the steps in order and copy the commands exactly.
You need Node.js 20 or newer. Run this; it should print v20 or higher. If not, install it from nodejs.org.
node -v
mkdir my-pulse-agent && cd my-pulse-agent npm init -y npm pkg set type=module npm install @x402/fetch @x402/evm viem
This makes a brand-new wallet just for your agent and prints its private key and address.
node -e "import('viem/accounts').then(({generatePrivateKey,privateKeyToAccount})=>{const k=generatePrivateKey();console.log('private key:',k);console.log('address: ',privateKeyToAccount(k).address)})"Save the private key somewhere safe and never share it or paste it into chats, screenshots or GitHub. Anyone with it can spend the wallet's money. Use this wallet only for your agent, with small amounts.
Send a few dollars of USDC on Base to the address from step 3. Check the network says Base before sending. You don't need any ETH.
Create a file named agent.mjs in the folder, paste this in, and save it.
import { x402Client, wrapFetchWithPayment, x402HTTPClient } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const API = "https://www.x402pulse.dev";
const MAX_PRICE = 0.5; // never pay more than $0.50 for one call
// 1. Load the wallet from the AGENT_KEY setting (never write the key in this file).
const account = privateKeyToAccount(process.env.AGENT_KEY);
const client = new x402Client();
registerExactEvmScheme(client, { signer: account });
// 2. A guardrail: see each price and refuse anything above MAX_PRICE.
client.onBeforePaymentCreation(async ({ selectedRequirements }) => {
const price = Number(selectedRequirements.amount) / 1e6;
console.log("Price:", price, "USDC");
if (price > MAX_PRICE) return { abort: true, reason: "Too expensive" };
});
// 3. A fetch that pays automatically when it receives a 402.
const pay = wrapFetchWithPayment(fetch, client);
// 4. Ask who the most skilled traders are this month.
const res = await pay(API + "/v1/top-traders?period=month&limit=5");
console.log("Status:", res.status);
const body = await res.json();
if (res.ok) {
for (const t of body.data.traders) {
console.log(`#${t.rank} ${t.name ?? t.wallet} skill ${t.skill} (${t.label}) edge ${Math.round(t.edge * 100)} pts`);
}
const receipt = new x402HTTPClient(client).getPaymentSettleResponse((h) => res.headers.get(h));
console.log("Paid. Transaction:", receipt?.transaction);
} else if (res.status === 402) {
console.log("Not charged: the payment wasn't accepted. Check the wallet has USDC on the network shown in the 402 response.");
} else {
console.log("Not charged. Error:", body.error);
}Replace the key with your private key from step 3. Putting it in front of the command keeps it out of your files.
AGENT_KEY=0xYOUR_PRIVATE_KEY node agent.mjs
You should see something like this. The first run can take up to 30 seconds while wallets are scored.
Price: 0.003 USDC Status: 200 #1 primm skill 88 (Sharp) edge 13 pts #2 Kch-Temp skill 76 (Sharp) edge 6 pts … Paid. Transaction: 0x31a8…9169
That's a real payment: search the transaction on basescan.org to see it. Now swap the URL for any other endpoint below. If something goes wrong, see Troubleshooting.
All endpoints are GET, return JSON shaped as { data, cached }, and live under https://www.x402pulse.dev.
| Endpoint | Parameters | Returns | Price |
|---|---|---|---|
/v1/whales | minMinimum trade size in USD (default 1000) limitNumber of trades, 1 to 50 (default 20) | Polymarket whale trades: the largest recent buys and sells across all markets above a size you choose, with trader name, outcome, price and USD size. 5- and 15-minute crypto markets filtered out. Pair with /v1/wallet to check whether a whale is any good. | $0.0028 |
/v1/wallet | addressPolymarket wallet address (0x…) | Polymarket trader scorecard for any wallet: skill score (0-100), edge over the odds paid, win rate vs. the win rate the odds implied, return (ROI), realized PnL, specialty and largest open positions. Scores the latest 200 finished bets, losses included. | $0.0056 |
/v1/top-traders | periodday, week, month or all (default month) categoryOptional: sports, politics, crypto, economy or other limitNumber of traders, 1 to 25 (default 10) | Polymarket leaderboard re-ranked by skill, not size: top traders by edge over the odds paid, return and consistency, for day, week, month or all time, optionally per category (sports, politics, crypto, economy). Exposes big-volume losers the profit leaderboard hides. | $0.014 |
/v1/smart-money | marketMarket link, market slug or condition ID | Polymarket smart money for one market: the biggest holders on each side, each scored for skill (edge, win rate, ROI), plus which way skilled money leans and whether it agrees with the market's odds. Accepts a market link, slug or condition ID. Data, not investment advice. | $0.014 |
/v1/skilled-whales | minMinimum trade size in USD (default 1000) limitNumber of trades, 1 to 50 (default 20) | Smart-money whale trades on Polymarket: recent large trades by skilled (Solid or Sharp) traders only, each tagged with the trader's skill score, edge over the odds paid, return and specialty. Separates informed whales from big gamblers. | $0.0084 |
/v1/disagreements | categoryOptional: sports, politics, crypto, economy or other limitNumber of markets, 1 to 20 (default 5) | Polymarket markets where smart money disagrees with the odds: scans the 30 busiest open markets every 15 minutes and returns those where skilled traders' money implies a different probability than the price, tempered against thin evidence, with a low, medium or high confidence rating. Data, not investment advice. | $0.028 |
/v1/health/drug-safety | drugDrug brand or generic name, e.g. atorvastatin or Lipitor | FDA drug safety snapshot for any drug (brand or generic name): total adverse event reports, share serious and fatal, most-reported side effects and the quarterly report trend from FDA FAERS. Reports are not proof of causation. Data, not medical advice. | $0.0028 |
/v1/health/safety-signals | drugDrug brand or generic name | Drug safety signal detection (pharmacovigilance) from FDA FAERS: side effects reported disproportionately often with a drug versus all other drugs, using the proportional reporting ratio (PRR) and chi-square with standard Evans criteria. A statistical prompt for study, not evidence of harm. Not medical advice. | $0.014 |
/v1/health/recalls | typedrug or food (default drug) classOptional: I, II or III firmOptional: recalling company daysLook-back window, 1 to 365 (default 30) limitNumber of recalls, 1 to 50 (default 20) | FDA drug recalls and food recalls: the latest FDA enforcement reports with recall class (Class I is most serious) explained in plain language, recalling firm, product, reason, status, dates and distribution. Filter by class, company and time window. openFDA data, not medical advice. | $0.0014 |
/v1/health/drug-label | drugDrug brand or generic name | FDA drug label lookup: boxed warning, approved indications, contraindications, warnings and drug interactions for any drug, plus brand and generic names, manufacturer and route, as clean structured text from openFDA. Not medical advice. | $0.0014 |
/v1/health/drug-approvals | daysLook-back window, 1 to 365 (default 30) sponsorOptional: company name kindoriginal (default), supplement or all limitNumber of approvals, 1 to 50 (default 20) | FDA drug approvals: which companies just won FDA approval for new drugs, generics or biologics, from Drugs@FDA. Approval date, sponsor company, NDA/ANDA/BLA type, brand and active ingredients, dosage form, review priority, and a flag for novel drugs (new molecular entities). Filter by company, days and original vs. supplemental approvals. | $0.0028 |
/v1/health/drug-shortages | drugOptional: drug name; omit to list current shortages statuscurrent (default), resolved, discontinued or all limitNumber of drugs, 1 to 50 (default 20) | FDA drug shortages: which medicines are in shortage now, grouped by drug, with availability (unavailable or limited) per package, companies, dosage forms, shortage reasons, estimated recovery notes and posting dates. Search one drug or list current shortages. For hospitals, pharmacies and supply chains. openFDA data, not medical advice. | $0.0028 |
/v1/health/hospital | idCMS facility ID (6 characters), or nameHospital name (with state) stateTwo-letter state, required with name | Hospital scorecard for any U.S. Medicare hospital from the Centers for Medicare & Medicaid Services (CMS, the U.S. government agency): CMS overall star rating, type, ownership, emergency services, and how it compares with the national average on mortality, safety and readmissions (measures better, same, worse), plus its rank and percentile among rated hospitals in its state. Look up by CMS facility ID or name plus state. Not medical advice. | $0.0056 |
/v1/health/hospitals | stateTwo-letter state (omit for nationwide) cityOptional city minStarsOptional 1 to 5 emergencyOptional true or false typeOptional: acute, critical, childrens or psychiatric limit1 to 50 (default 20) | Best hospitals ranking for a U.S. state or city from Centers for Medicare & Medicaid Services (CMS) Care Compare data: ranked by CMS star rating, then net score (quality measures better than national minus worse across mortality, safety and readmissions). Filter by city, minimum stars, emergency services and hospital type (acute, critical access, children's, psychiatric). Not medical advice. | $0.0084 |
/v1/oil/prices | none | Crude oil prices: WTI and Brent daily spot prices from the U.S. Energy Information Administration (EIA), with 1-day, 1-week, 1-month and 1-year changes, 52-week range and position in it, and the Brent-WTI spread. Official daily figures, not live futures quotes. Data, not trading advice. | $0.0014 |
/v1/oil/inventories | none | U.S. oil inventories from the EIA Weekly Petroleum Status Report: commercial crude, Cushing (WTI hub), Strategic Petroleum Reserve, gasoline and distillate stocks, each with the weekly build or draw, change vs. a year ago and vs. the 5-year average for the same week. Data, not trading advice. | $0.0028 |
/v1/oil/supply | none | U.S. oil supply from the EIA weekly report: crude production, refinery utilization, crude imports and exports (thousand barrels per day), weekly change, 4-week average, change vs. a year ago, and net imports. Data, not trading advice. | $0.0028 |
/v1/oil/positioning | none | WTI crude oil positioning from the CFTC Commitments of Traders: managed money (hedge funds) long, short and net contracts, weekly change, long/short ratio, and how extreme the net position is vs. the last 3 years (percentile), plus producers, swap dealers and open interest. Data, not trading advice. | $0.0056 |
/v1/oil/markets | limitNumber of markets, 1 to 10 (default 10) | Oil prediction markets with smart money: busy Polymarket markets about oil prices, OPEC, Strait of Hormuz and fuel, each with the skilled-trader lean (skill-weighted money vs. the market's odds) from x402Pulse scoring. Data, not trading advice. | $0.014 |
/v1/attention/trending | langWikipedia language code, e.g. en, es, pt, de (default en) limitNumber of topics, 1 to 100 (default 25) | Trending topics: yesterday's most-viewed Wikipedia articles in any language, cleaned of site pages, with rank change vs. the day before, new entries, week-long regulars, and likely automated surges flagged separately. A daily read of what people are paying attention to. Based on Wikimedia pageview data (CC0). | $0.0028 |
/v1/attention/spikes | langWikipedia language code (default en) minRatioMinimum surge, 2 to 100 (default 3) minViewsMinimum views (default 1000) limit1 to 50 (default 20) | Attention spikes: Wikipedia articles whose views surged far above their usual level yesterday (ratio to the previous week's median), the earliest sign of breaking public interest in a person, company, event or idea. Any language. Likely automated traffic filtered. Based on Wikimedia pageview data (CC0). | $0.0056 |
/v1/attention/topic | titleExact Wikipedia article title, e.g. Bitcoin langLanguage code (default en) days7 to 90 (default 30) | Attention history for any topic: daily Wikipedia pageviews of one article (a company, person, drug, coin or event) for 7 to 90 days, with its baseline, latest day vs. baseline, spike days and 7-day trend. Use the exact article title, e.g. Bitcoin. Based on Wikimedia pageview data (CC0). | $0.0014 |
/v1/attention/markets | langLanguage code (default en) limit1 to 10 (default 10) | Attention meets prediction markets: topics trending or spiking on Wikipedia matched to open Polymarket markets, each with prices and the skilled-trader lean from x402Pulse scoring. Find markets the public is suddenly paying attention to. Data, not investment advice. | $0.014 |
/v1/travel/trip-check | fromOrigin airport code, e.g. SFO toDestination airport code, e.g. LHR dateTravel date YYYY-MM-DD (default today, UTC). Weather forecasts reach about 30 hours ahead | Trip check: one call rates the delay risk (low, moderate, high) for a flight between two airports on a date, with plain-language reasons. Combines live FAA delays and ground stops, current airport weather and airport forecasts for both ends, the destination's State Department travel advisory, and the currency exchange rate for international trips. Any airport worldwide by IATA code, e.g. SFO to LHR. Not for flight planning. | $0.014 |
/v1/travel/airport-status | airportAirport code, e.g. JFK, SFO, LHR or KJFK | Airport status right now: live FAA delays, ground stops, ground delay programs and closures (restrictions that only affect private aircraft are labeled as such), plus current weather in plain words and a delay-risk rating. FAA data covers U.S. airports; weather covers airports worldwide. Not for flight planning. | $0.0028 |
/v1/travel/airport-forecast | airportAirport code, e.g. LHR, ORD or EGLL | Airport weather forecast decoded: the next 24 to 30 hours at any airport worldwide, broken into periods with wind, gusts, visibility, cloud ceiling, flight category and a delay-risk rating, flagging when low clouds, storms, snow or strong gusts are expected. Not for flight planning. | $0.0028 |
/v1/travel/weather | latLatitude in decimal degrees, e.g. 37.77 lonLongitude in decimal degrees, e.g. -122.42 airportInstead of lat/lon: an airport code, e.g. SFO or LHR tzOptional IANA time zone for the daily breakdown, e.g. Europe/Paris (U.S. locations detect it automatically) nameOptional place name to label the answer, e.g. Paris | Weather anywhere: current conditions, the next 12 hours and a daily forecast up to about 9 days (high, low, precipitation and its chance, wind) for any coordinates or airport, in °C and °F. U.S. locations add the National Weather Service forecast in words and any active weather alerts. Sources: MET Norway worldwide, NWS for the U.S. | $0.0014 |
/v1/travel/disruptions | includeRestrictionstrue to also list restrictions that don't affect airline flights (default false) | Every current FAA disruption in U.S. airspace, ranked by severity: ground stops, ground delay programs, arrival and departure delays, airspace flow programs and real closures, with plain-language reasons. Private-aircraft-only restrictions are separated out so agents don't report them as closures. Not for flight planning. | $0.0028 |
/v1/travel/advisory | countryCountry code or name, e.g. MX or Mexico (omit to list countries) minLevelWhen listing: minimum level 1 to 4 (default 3) | U.S. State Department travel advisories: a country's level (1 Exercise normal precautions to 4 Do not travel), summary and main risk factors, or every country at or above a level. Country by 2-letter code (MX, GB, JP) or name. | $0.0014 |
/v1/travel/exchange-rates | baseBase currency, e.g. USD (default), EUR, GBP symbolsOptional comma-separated currencies, e.g. EUR,JPY,MXN | Official exchange rates: the European Central Bank's daily reference rates for about 30 currencies, converted to any base currency (USD by default). Source: ECB statistics. Reference rates, not trading rates. | $0.0014 |
/v1/wallstreet/company-brief | tickerStock ticker, e.g. AAPL, NVDA or BRK.B | Company brief from SEC filings in one call: latest-quarter and trailing-year financials with margins and growth, insider buying and selling over 90 days (open-market vs. pre-planned 10b5-1 trades, cluster-buy detection), material events from 8-K filings decoded into plain words, new 5%+ and activist stakes, and a plain-language summary. Any U.S.-listed ticker. Data, not investment advice. | $0.056 |
/v1/wallstreet/morning-brief | none | Morning Brief for 2026's top-performing stocks (28 companies, from SanDisk and Micron to CrowdStrike and Lam Research): today's ranked signals from SEC filings (insider cluster buys, insider selling outside pre-arranged 10b5-1 plans with the main seller named, serious 8-K events, activist stakes), a one-line summary per company, and the macro backdrop (Treasury yield curve, oil positioning, skilled prediction-market money on the economy). Refreshed three times a day. Data, not investment advice. | $0.056 |
/v1/wallstreet/insider-trades | tickerStock ticker, e.g. NVDA daysLook-back window, 7 to 365 (default 90) limitMax filings to read, 1 to 60 (default 25) openMarketOnlytrue to list only open-market buys and sales (default false) | Insider trades decoded from SEC Form 4 filings: who traded (name, role, title), buy or sell, shares, price, dollar value, holdings afterwards, and whether the trade was pre-planned under a 10b5-1 plan, plus totals and cluster-buy detection. Data, not investment advice. | $0.0084 |
/v1/wallstreet/financials | tickerStock ticker, e.g. MSFT | Standardized company financials from SEC XBRL filings: revenue, net and operating income, diluted EPS, operating cash flow for the last 8 quarters and 5 years, plus cash, assets, liabilities, equity, debt and shares outstanding, with margins, year-over-year growth and trailing-12-month totals. Handles companies that changed reporting labels. Data, not investment advice. | $0.0056 |
/v1/wallstreet/events | tickerStock ticker, e.g. TSLA daysLook-back window, 7 to 365 (default 90) | Material corporate events from SEC 8-K filings, decoded and ranked: bankruptcies, auditor changes, restatements, executive departures, acquisitions, major agreements, earnings releases, plus new 5%+ and activist stakes, each with a link to the filing. Data, not investment advice. | $0.0028 |
/v1/wallstreet/yield-curve | none | U.S. Treasury yield curve: the latest daily yields from 1 month to 30 years, the 10Y-2Y and 10Y-3M spreads, inversion flags (a closely watched recession signal) and changes vs. the previous day, a month and a year ago. Data, not investment advice. | $0.0014 |
/v1/pro/pass | none | x402Pulse Pro: a 30-day pass for $19.97 USDC that returns an API key for unlimited calls (fair use: 120 a minute, 20,000 a day) to every x402Pulse endpoint, plus an MCP server for Claude Code, Cursor and Claude Desktop. To renew, send your current key as Authorization: Bearer <key>; renewals add 30 days to the time left. The key is shown once. | $19.97 |
market accepts a full polymarket.com link, a market slug, or a condition ID. If a link covers an event with several markets, you get a free 400 with choices[] to pick from.
What every number means, so your agent can explain its answers.
/v1/whales| Field | Type | Meaning |
|---|---|---|
trades[] | list | Largest recent trades, biggest first. |
wallet, name | text | Trader's Polymarket wallet and display name (null if none). |
side, outcome, price | text, text, 0–1 | BUY or SELL, which outcome, and the price paid (0.62 = 62¢). |
usd, shares | USD, number | Trade size in dollars and shares. |
market, slug, time, tx | text | Market question, its slug, trade time (ISO) and on-chain transaction. |
/v1/wallet| Field | Type | Meaning |
|---|---|---|
address, name | text | The wallet and its display name (null if none). |
score | object | The scorecard. See score fields below. |
openPositions[] | list | Largest live positions: market, outcome, shares, avgPrice, currentPrice, valueUsd, unrealizedPnlUsd. |
/v1/top-traders| Field | Type | Meaning |
|---|---|---|
traders[] | list | Traders ranked by skill. Each has the main score fields plus the ones below. |
profitRank | integer | Where they sat on Polymarket's profit leaderboard for the period. |
periodPnlUsd, periodVolumeUsd | USD | Profit and volume for the chosen period, from Polymarket. |
candidates | integer | How many leaderboard traders were scored to build the ranking. |
category | text or null | When set, scores use only each trader's bets in that category. |
/v1/smart-money| Field | Type | Meaning |
|---|---|---|
question, slug, outcomes[] | text, list | The market, and each outcome with its current price (0.41 = 41% implied chance). |
lean | object or null | outcome, share of skill-weighted money, marketPrice, vsMarket (share − price) and stance: in line with, more confident than, or less confident than the market. |
summary | text | One-sentence answer, ready to show a user. |
sides[] | list | Per outcome: price, sharpHolders, skillWeightedUsd and holders[] (wallet, name, valueUsd, skill, label, edge, winRate, roi). |
/v1/skilled-whales| Field | Type | Meaning |
|---|---|---|
trades[] | list | Large recent trades by Solid or Sharp traders only, biggest first. Same trade fields as /v1/whales. |
skill, label, edge, roi, specialty | score | The trader's skill score and its main parts. See score fields below. |
tradersScored | integer | How many distinct traders were scored (up to 25 of the biggest). |
/v1/disagreements| Field | Type | Meaning |
|---|---|---|
markets[] | list | Open yes/no markets, sorted by how far tempered skilled money is from the price, weighted by confidence. |
priceYes | 0–1 | The market's price for the first outcome (usually Yes). |
skilledYesShare | 0–1 | What skilled money implies for the first outcome, tempered toward the price so thin readings can't look extreme. |
rawSkilledYesShare | 0–1 | The untempered share of skill-weighted money on the first outcome. |
gap | −1 to 1 | skilledYesShare − priceYes. Positive: skilled money more bullish on Yes than the market; negative: more bullish on No. |
confidence | text | high (5+ skilled holders, $150K+ skill-weighted), medium (3+, $50K+) or low. |
skilledHolders, skilledUsd | integer, USD | How many Solid+ holders and how much skill-weighted money the reading rests on. |
scannedAt, marketsScanned | time, integer | When the busiest open markets were last scanned (every 15 minutes) and how many. |
/v1/health/drug-safety| Field | Type | Meaning |
|---|---|---|
totalReports | integer | All FAERS adverse event reports mentioning the drug (brand or generic name). |
seriousShare, deathReportShare | 0–1 | Share of those reports marked serious, and share reporting a death. Reports are unverified. |
topReactions[] | list | Most-reported side effects: reaction, reports and share of the drug's reports. |
quarterlyReports[], yearOverYearChange | list, number | Reports per quarter for the last 8 full quarters, and the latest quarter vs. a year earlier. |
notice | text | Reporting caveats. Show it with the data. |
/v1/health/safety-signals| Field | Type | Meaning |
|---|---|---|
signals[] | list | Reactions meeting the Evans criteria (PRR ≥ 2, ≥ 3 reports, chi-square ≥ 4), strongest first. |
prr | number | Proportional reporting ratio: how many times more often the reaction is reported with this drug than with all others. 1 = no difference. |
chiSquare | number | How unlikely the difference is by chance (4 or more passes the screen). |
checked[], reactionsChecked | list, integer | Every reaction tested (the drug's 100 most reported), signal or not. |
method, notice | text | How signals were computed, why a signal is not evidence of harm, and confounding by indication. |
/v1/health/recalls| Field | Type | Meaning |
|---|---|---|
recalls[] | list | Newest first: recall number, class, severity meaning, status, firm, product, reason, report and start dates, distribution. |
byClass, totalMatching | object, integer | Counts by class among the newest 50, and all matching recalls in the window. |
classification | text | Class I: serious harm or death is reasonably likely. Class II: temporary or reversible problems. Class III: unlikely to cause harm. |
/v1/health/drug-label| Field | Type | Meaning |
|---|---|---|
brandNames, genericNames, manufacturers, routes | lists | Identity of the labeled product. |
hasBoxedWarning, boxedWarning | boolean, text | Whether the label carries FDA's strongest warning, and its text. |
indications, contraindications, warnings, drugInteractions | text | Excerpts of those label sections (up to 1,500 characters each). |
labelDate | date | When this label version took effect. |
/v1/health/drug-approvals| Field | Type | Meaning |
|---|---|---|
approvals[] | list | Newest first: date, application number and type (NDA, ANDA, BLA), sponsor, original or supplement, brand names, active ingredients, dosage forms, routes, approval class, review priority. |
novelDrug, novelDrugs | boolean, integer | Whether an original approval is a new molecular entity (Type 1), and how many in the window. |
byType, totalFound | object, integer | Approvals by application type, and how many were found in the window. |
/v1/health/drug-shortages| Field | Type | Meaning |
|---|---|---|
drugs[] | list | One entry per drug: statuses, packages listed, availability counts, companies, brand names, dosage forms, routes, categories, reasons, recovery notes, first posted and last updated. |
availability | object | Packages by availability, e.g. { Unavailable: 2, Limited: 1 }. |
severity | 0–1 | Share of the drug's packages that are unavailable or limited. Results are sorted by it, worst first. |
estimatedRecovery | list | Recovery or availability dates pulled from FDA's notes, e.g. "March 2027" or "TBD". |
recoveryNotes | list | FDA's full notes, which can also name distributors or allocation. |
drugsFound, packagesFound | integer | Drugs matching, and package listings behind them. |
/v1/health/hospital| Field | Type | Meaning |
|---|---|---|
starRating, starRatingNote | 1–5 or null, text | Overall star rating from the Centers for Medicare & Medicaid Services (CMS), or why it isn't rated. |
vsNational.mortality / safety / readmissions | object | CMS measures in each group: total, reported, and how many are better, no different or worse than the national average. |
netScore, measuresBetter, measuresWorse, measuresCompared | integers | x402Pulse analysis: measures better minus worse across the three groups, and the totals behind it. |
stateComparison | object | x402Pulse rank and percentile among rated hospitals in the same state. |
patientExperience, timelyCare | object | How many of these CMS measures the hospital reported (CMS gives no better/worse counts for them here). |
/v1/health/hospitals| Field | Type | Meaning |
|---|---|---|
hospitals[] | list | Ranked: id, name, city, state, type, ownership, emergency services, star rating, net score and measure counts. |
hospitalsMatching, ratedHospitals | integers | Hospitals matching the filters, and how many have a CMS star rating. |
method | text | How the x402Pulse ranking orders hospitals. |
/v1/oil/prices| Field | Type | Meaning |
|---|---|---|
wti, brent | object | Latest EIA daily spot price (USD per barrel) with date, change1d/1w/1m/1y (from, change, changePct), 52-week range and positionInRange (0 = low, 1 = high), and the last 10 readings. |
brentWtiSpread | object | Brent minus WTI on the latest shared date. |
/v1/oil/inventories| Field | Type | Meaning |
|---|---|---|
stocks[] | list | Commercial crude (ex-SPR), Cushing, SPR, gasoline and distillate: thousand barrels, weeklyChange (negative = draw), vsYearAgoPct, fiveYearAverage, vsFiveYearAveragePct. |
weekEnding | date | Week the EIA report covers (published the following Wednesday). |
/v1/oil/supply| Field | Type | Meaning |
|---|---|---|
items[] | list | Production, refinery utilization, imports and exports: value, units, weeklyChange, fourWeekAverage, vsYearAgoPct. |
netImports | object | Crude imports minus exports, thousand barrels per day. |
/v1/oil/positioning| Field | Type | Meaning |
|---|---|---|
managedMoney | object | Hedge funds and CTAs in WTI futures: long, short, net, weeklyNetChange, longShortRatio, netShareOfOpenInterest, threeYearPercentile, 3-year low/high and a plain-language reading. |
otherGroupsNet | object | Net positions of producers and merchants, swap dealers and other reportable traders. |
recentWeeks[] | list | Last 8 weeks of managed-money net and open interest. |
/v1/oil/markets| Field | Type | Meaning |
|---|---|---|
markets[] | list | Oil-related Polymarket markets: question, outcomes with prices, skilledHolders, skilledUsd, skilledFirstOutcomeShare (tempered), gapVsPrice and a reading. |
/v1/attention/trending| Field | Type | Meaning |
|---|---|---|
items[] | list | Top articles: rank, title, views, previousRank, rankChange (positive = climbed), isNew, daysInTopThisWeek, steady, mobileShare, url. |
flaggedAutomated[] | list | Pages with almost no mobile traffic, a common sign of automated views, kept out of the ranking. |
date, sitePagesRemoved | date, integer | The UTC day measured, and how many site pages (main page, search) were removed. |
/v1/attention/spikes| Field | Type | Meaning |
|---|---|---|
items[] | list | Surging articles: title, views, baseline (median of the previous week), ratio, ratioIsAtLeast, newToTopList, url. |
comparedDays, filters | integer, object | Earlier days compared, and the minRatio and minViews applied. |
/v1/attention/topic| Field | Type | Meaning |
|---|---|---|
latest, baselineDailyViews | object, integer | The latest day's views and multiple of baseline, and the median daily views over the period. |
spikeDays[], trend7d | list, number | Days at 3x baseline or more, and the last 7 days vs. the 7 before (0.2 = +20%). |
daily[] | list | Views per day (human traffic). |
/v1/attention/markets| Field | Type | Meaning |
|---|---|---|
markets[] | list | Topic, its views and why it was picked (trending or spike), the matched Polymarket market, prices, skilled holders, skilledFirstOutcomeShare and a reading. |
/v1/travel/trip-check| Field | Type | Meaning |
|---|---|---|
delayRisk, coverage | text, text | low, moderate or high for the route and date; coverage says whether it used live data (today), forecasts, or none (dates beyond about 30 hours). |
summary | text | Plain-language verdict with the most serious reasons first, plus the destination advisory level. |
origin, destination | object | Per airport: delayRisk, riskReasons, live FAA events, current weather, and forecast periods covering the travel date. |
travelAdvisory, currency | object | The destination's State Department advisory, and the exchange rate from the origin's to the destination's currency (international trips). |
/v1/travel/airport-status| Field | Type | Meaning |
|---|---|---|
delayRisk, riskReasons | text, list | Combined from FAA programs and current weather, most serious first. |
faa.events[] | list | Each with type (ground_stop, ground_delay_program, delay, closure, restriction), severity, affectsAirlineFlights, delay minutes and a plain reason. |
weather | object | flightCategory (VFR good to LIFR very poor), wind, gusts, visibility, ceiling, conditions and a plain summary. |
/v1/travel/airport-forecast| Field | Type | Meaning |
|---|---|---|
forecast.periods[] | list | Time window, change type (from, temporarily, becoming, possibly), wind, visibility, ceiling, flightCategory and delayRisk. |
forecast.delayRisk, riskReasons | text, list | The worst expected period and why, with times in UTC. |
/v1/travel/weather| Field | Type | Meaning |
|---|---|---|
summary | text | One or two plain sentences: conditions and temperature now, today's high, low and chance of precipitation, and the number of active alerts. |
now | object | conditions, temperatureC/F, feelsLikeC/F, humidityPct, cloudCoverPct, wind (km/h, mph, direction, gusts), precipitationNextHourMm, uvIndex. |
days[] | list | Local calendar days: conditions, highC/F, lowC/F, precipitationMm/In, chanceOfPrecipitationPct, windMaxKmh/Mph. |
next12Hours[] | list | Hour by hour: local time, temperature, conditions, precipitation and its chance. |
alerts[], nws | list, object | U.S. only: active National Weather Service alerts (event, severity, headline, times, instructions) and the NWS forecast periods in words. null elsewhere. |
/v1/travel/disruptions| Field | Type | Meaning |
|---|---|---|
counts, airportsAffected | object, list | Active ground stops, ground delay programs, delays, airspace programs and real closures; airports involved. |
events[] | list | Ranked most severe first, only items that affect airline flights. restrictions[] (optional) lists private-aircraft-only notices. |
/v1/travel/advisory| Field | Type | Meaning |
|---|---|---|
advisory | object | country, level (1 to 4), levelText, summary, riskFactors, someAreasHigherRisk, url and dates. |
advisories[] | list | When no country is given: every country at or above minLevel, highest first. |
/v1/travel/exchange-rates| Field | Type | Meaning |
|---|---|---|
rates | object | Units of each currency per 1 unit of base. |
perEuro, date | object, date | The ECB euro reference rates as published, and their date. |
/v1/wallstreet/company-brief| Field | Type | Meaning |
|---|---|---|
summary | text | Plain-language brief: latest quarter, insider activity (with cluster buys and planned-sale share) and notable events. |
financials | object | latestQuarter (revenue, net and operating income, EPS, margins, growth vs. a year ago), trailing12Months and balanceSheet. |
insiders | object | 90 days: openMarketBuys/Sells, buyers, sellers, dollar values, net, plannedSellShare, clusterBuy, recentTrades. |
materialEvents[], largeStakes[] | list | 8-K events ranked high, notable or routine with decoded items and links; 13D (activist) and 13G (passive 5%+) filings. |
/v1/wallstreet/morning-brief| Field | Type | Meaning |
|---|---|---|
signals[] | list | Up to 12 ranked signals: ticker and plain-English text (cluster buys, unplanned insider selling with the main seller, serious 8-Ks, activist stakes). |
companies[] | list | Per company: name, latest-quarter revenue, growth vs. a year ago, net margin, insider buys and sales over 90 days, share of sales pre-planned, notable 8-K count. |
macro | object | curve (yield-curve summary), oil (hedge-fund positioning), markets[] (skilled money vs. the odds on economy markets), spikes[]. |
date, generatedAt, title, tickers | text, time, text, list | The brief's day, when it was built, the watchlist's name and its 28 tickers. |
/v1/wallstreet/insider-trades| Field | Type | Meaning |
|---|---|---|
trades[] | list | insider, roles, title, date, code and type, direction (buy, sell, other), openMarket, planned (10b5-1), shares, price, valueUsd, sharesOwnedAfter, url. |
summary | object | Totals for the period and clusterBuy (3+ insiders buying within 30 days). |
/v1/wallstreet/financials| Field | Type | Meaning |
|---|---|---|
summary | object | Latest quarter with margins and growth, trailing 12 months, balance sheet. |
quarters, years | object | Per metric (revenue, netIncome, operatingIncome, epsDiluted, operatingCashFlow, cash, totalAssets, ...): period, end date, value, form. |
/v1/wallstreet/events| Field | Type | Meaning |
|---|---|---|
events[] | list | filed, form, items (code and plain meaning), importance (high, notable, routine), url. |
counts, largeStakes[] | object, list | Events by importance; 13D/13G stake filings in the period. |
/v1/wallstreet/yield-curve| Field | Type | Meaning |
|---|---|---|
yieldsPct, date | object, date | Yields in percent for 1 month to 30 years on the latest business day. |
spreadsBp, inverted | object | 10Y-2Y, 10Y-3M and 30Y-5Y spreads in basis points; inversion flags. |
changeBp | object | Change per maturity vs. the previous day, about a month ago and a year ago. |
/v1/pro/pass| Field | Type | Meaning |
|---|---|---|
key | text | Your Pro API key (xp_live_…). Shown once; save it. Send it as Authorization: Bearer <key>. |
expiresAt, days | time, integer | When the pass ends. Renewals add 30 days to any remaining time. |
use | object | Ready-to-copy header, curl example, MCP URL and the Claude Code command. |
limits | object | Fair use: calls per minute and per day. |
Used in wallet scorecards, top traders and smart-money holders.
| Field | Type | Meaning |
|---|---|---|
skill | 0–100 | Overall skill score from edge, return, history size and consistency. |
label | text | Sharp (70+), Solid (45+), Mixed (25+), Weak, or Too few bets (under 10 finished bets). |
edge | number | Win rate minus the win rate the prices paid implied. 0.08 = won 8 points more often than the odds said. |
winRate | 0–1 | Share of finished bets that made money. |
expectedWinRate | 0–1 | Average price paid, i.e. the win rate the odds implied. |
roi | number | Realized profit divided by money invested. 0.25 = +25%. |
bets | integer | Finished bets scored (latest 200, losses included). |
realizedPnlUsd | USD | Profit or loss across the scored bets. |
biggestWinShare | 0–1 | Share of all winnings from the single best bet. High means one lucky hit. |
shortTermShare | 0–1 | Share of bets on 5- and 15-minute crypto markets, which lowers the score. |
specialty | text | Category with the most profit: sports, politics, crypto, economy, other, or null. |
Total profit mostly rewards whoever bets the most. The skill score asks a different question: did this trader beat the odds they paid?
Labels: Sharp 70+, Solid 45+, Mixed 25+, Weak below 25, and Too few bets under 10 finished bets.
For each outcome, x402Pulse takes the biggest holders (10 per side when paid, 3 in free samples) and scores each one. Only Solid or better holders count as skilled. Each skilled position is weighted by its dollar value times its skill score, and the outcome with the most skill-weighted money is the lean. The lean's share is then compared with that outcome's price: within 10 points is "in line with" the market, above is "more confident than," below is "less confident than."
The same pattern in TypeScript. One wrapped fetch handles the whole exchange, and a spending cap means your agent can never overpay.
npm install @x402/fetch @x402/evm viem
import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
registerExactEvmScheme(client, {
signer: privateKeyToAccount(process.env.AGENT_KEY as `0x${string}`),
});
// Spending guardrail: refuse any single payment above $0.50.
client.onBeforePaymentCreation(async ({ selectedRequirements }) => {
if (Number(selectedRequirements.amount) / 1e6 > 0.5) {
return { abort: true, reason: "Over my per-call limit" };
}
});
const pay = wrapFetchWithPayment(fetch, client);
// Which way does skilled money lean on this market?
const market = "https://polymarket.com/event/…";
const res = await pay(
"https://www.x402pulse.dev/v1/smart-money?market=" + encodeURIComponent(market),
);
const { data } = await res.json();
console.log(data.summary);
// e.g. "Skilled holders lean Yes (72% of skill-weighted money, from 4 skilled
// holders), more confident than the market's 41%."x402 is plain HTTP, so any language works. Libraries exist for several, and the protocol is short enough to implement yourself:
402 response carries a PAYMENT-REQUIRED header: base64-encoded JSON listing the accepted payment (scheme, network, amount in USDC base units, asset, payTo).exact scheme describes (an EIP-3009 USDC transfer authorization on Base).PAYMENT-SIGNATURE header.200 plus a PAYMENT-RESPONSE header with the settlement receipt and transaction hash.The full specification is at docs.x402.org.
This service runs on Base mainnet with real USDC. Keep a small budget and a per-call cap in your client while you build.
Or try it by hand first: the Try page gives free samples in your browser.
Agents can find and understand x402Pulse without reading this page:
/catalog and /.well-known/x402-listing: every endpoint, price and parameter as JSON./llms.txt: this documentation as plain text, written for AI models to read.402 response includes a bazaar section with an example input, input schema and example output, which x402 directories such as the Coinbase Bazaar use for search.Every error is free: payment only settles when the response succeeds.
| Status | Cost | Meaning |
|---|---|---|
400 | free | Missing or invalid parameter; the message says which. An ambiguous market link or hospital name includes choices[] to pick from. |
402 | free | Payment required: read the PAYMENT-REQUIRED header, pay, and retry. |
404 | free | Not found: e.g. an unknown wallet, market, drug, hospital, article, airport, country or ticker. |
429 | free | Too many requests from you: 60 paid calls a minute, or 600 free price checks a minute. Retry-After says when to try again. |
502 / 503 | free | A data source (Polymarket, openFDA, CMS, EIA, CFTC, Wikimedia, FAA, NOAA, State Department, ECB, SEC or Treasury) didn't respond or is busy, or payments are briefly unavailable. Retry after a short wait. |
The problems people actually run into, and the fix for each.
| What you see | Cause | Fix |
|---|---|---|
Status 402 after paying | Wallet | The wallet has no USDC on the right network. Check its USDC balance on the network named in the 402 response (the network field) and top it up. |
fetch failed / ECONNREFUSED | Address | The URL is wrong or the service is unreachable. Copy the address from this page exactly, including https://. |
invalid private key | Key | A private key starts with 0x followed by 64 characters, 66 in total, with no spaces or quotes inside. |
Over my per-call limit | Your cap | Your own spending guardrail refused the price. Raise the cap in your code if you meant to pay it. |
400 with choices[] | Free | Your market link covers several markets. Call again with one of the slugs in choices[]. |
404 market not found | Free | Check the link or slug for typos. Open it on polymarket.com to confirm it exists. |
429 rate limit | Free | More than 60 calls a minute. Slow down, or reuse answers: most data refreshes every few minutes anyway. |
Slow first answer | Normal | Top traders and smart money score many wallets the first time (up to ~30 seconds). Later calls come from the cache in milliseconds. |
A few ideas for products and agents on top of x402Pulse.
Before answering "will X happen?", check whether skilled money agrees with the market's odds and say so.
Show each market's odds next to its skilled lean, and highlight where they disagree.
Answer "is this wallet any good?" or "who's sharp this week?" in a group chat, paying a fraction of a cent per question.
Poll /v1/whales and enrich each big trade with the trader's skill score from /v1/wallet.
Turn weekly top traders and notable smart-money leans into a digest for readers.
Track how skilled-money leans compare with how markets actually resolve.
x402Pulse provides data and analytics built from public Polymarket activity. It is not financial or betting advice, and past performance doesn't predict future results. If you show x402Pulse data to people, say where it comes from and present it as information, not recommendations.
Wallets are identified by address and their public Polymarket display names only. Don't use the data to identify or contact the real people behind wallets.
x402Pulse is an independent service, not affiliated with Polymarket or the x402 Foundation. The API is versioned under /v1; breaking changes would ship as /v2. Network: eip155:8453.