XFINLAB

Financial market intelligence via MCP — market events, sentiment, technical indicators, and macro data tools for AI agents. Free tier available instantly.

Hosted MCP Server

npx add-mcp 'https://api.xfinlab.com/api/mcp'

Installs into Claude Code, Codex, Cursor, VS Code and more

Documentation

Real market intelligence, structured for developers

20+ JSON endpoints — market events, FinBERT sentiment, multi-agent AI debate, company network intelligence, fundamentals, and cross-industry macro context (energy, agriculture, real estate, supply chain, consumer demand) — built on the same real data and anti-fabrication principles behind XFINLAB's own product. Free tier keys are issued instantly and automatically; Pro/Enterprise are still set up personally.

Quickstart

1

Get a free API key

Issued instantly and automatically, no waiting on a human. Request one below →

2

Make your first call

One endpoint, one header. Swap in your own key and ticker.

curl -H "X-API-Key: xfl_..." \ "https://api.xfinlab.com/api/intelligence/v1/sentiment?ticker=AAPL"

3

See a real result

Trimmed example — your actual response includes per-headline sentiment too.

{ "success": true, "data": { "ticker": "AAPL", "aggregate_sentiment": "neutral", "aggregate_score": 0.04, "headline_count": 8 } }

Prefer Python or Node? Same endpoint, one method call. See the official SDKs →

Try it live

Paste your API key, pick an endpoint, and see a real response — right here, no code required. Don't have one? Get a free key ↓

Response will appear here.

This runs directly from your browser against the live API. Your key is sent only to XFINLAB's API — never stored or logged by this page.

Nineteen endpoints, one API key

Every response is AI-structured JSON — never raw scraped article text. View OpenAPI spec → Download Postman collection →

Every authenticated response includes X-RateLimit-Limit and X-RateLimit-Remaining headers, so you can pace requests instead of guessing from a 429.

1x

GET /v1/events

Events

Recent market/company headlines by ticker or globally — title, source, publish time, and link. No fabricated summaries of articles we can't retain in full.

Response fields

data array — one entry per headline

title string

source string — publisher name (e.g. GlobeNewswire, PR Newswire, or a GDELT source label)

kind string — "company_announcement" or "market_news"

published_at string|null — ISO 8601, null if the source feed had no parseable date

url string

tickers string[] — batch mode only, which requested symbols this event matched

meta.count int

meta.ticker string|null — single-ticker or no-ticker mode

meta.tickers string[] — batch mode, replaces meta.ticker

`ticker` also accepts a comma-separated list, up to 10 symbols (e.g. "AAPL,MSFT,TSLA"), for watchlist-style queries — results are merged and deduplicated across all requested tickers. Quota weight scales with the number of tickers requested.

1x

GET /v1/sentiment

Sentiment

FinBERT-scored sentiment across a ticker's recent headlines — per-headline label/confidence plus an aggregate score. Honestly reports "unavailable" rather than guessing when the model is unreachable.

Response fields

data.ticker string

data.average_score number|null — 0-100 aggregate bullishness; absent when no headlines matched

data.results array — one entry per headline

headline string

label string — "positive" | "neutral" | "negative"

confidence_pct number

score number

meta.articles_analyzed int, meta.source "finbert"

When zero headlines are found, the shape shifts slightly: articles_analyzed moves into data (data.articles_analyzed) instead of meta, and average_score is omitted entirely — worth handling as its own case in your client code.

`ticker` also accepts a comma-separated list, up to 10 symbols. Batch requests return `data.results_by_ticker` (keyed by symbol) instead of the flat ticker/average_score/results shape above, since averaging sentiment across unrelated tickers would be a misleading number. Quota weight scales with the number of tickers requested.

5x

GET /v1/debate

AI Debate

A 4-call Bull / Bear / Risk-Manager / Arbiter debate grounded in real technical data for a ticker — synthesized into one verdict.

Response fields

data.available bool — always true on a 200 (a 503 is raised instead if the debate engine itself is unreachable)

data.arguments object|null — {bull, bear, risk_manager}, each a string; null if the debate failed partway through

data.verdict string|null

data.disclaimer string — present only when the debate completed fully

data.error string|null — set if a call failed mid-debate

meta.ticker string

8x

GET /v1/intel/latest · /v1/intel/{ticker}

AI Intelligence Feed

Original structured intelligence, not raw news: same-event headlines clustered, then enriched with entities, sentiment, real technical/historical-analog signals, a non-causal cross-asset co-movement read, and an AI-written narrative — every number traceable to a real computation, never a fabricated confidence score. The most compute-intensive endpoint.

Response fields

data array — one entry per event cluster, newest first

id, title string

summary string|null — AI-generated fact summary; null if that AI call failed

entities, affected_assets array<string> — extracted tickers

sentiment string|null — "bullish"|"bearish"|"neutral"; sentiment_confidence number|null

importance number — 0-100 heuristic; source_count int

impact_score, confidence, probability number|null — quant read-through, null while quant_pending is true

risk_level string|null — "high"|"medium"|"low"; time_horizon string|null

quant_pending bool

event_chain array|null — possible downstream-impact candidates with historical win-rate stats; per-candidate fields vary (some carry an error or note instead of stats)

quant_signals object — per_asset is dynamically keyed by ticker, each value's fields vary by what resolved; see a live response rather than a fixed list here

citations array — {title, link, source, published_at}

narrative string|null — AI-written summary paragraph; narrative_lang string

generated_at string — ISO 8601

meta.count int; meta.ticker string on the /intel/{ticker} variant only

The most dynamic response on this API — quant_signals and event_chain fields depend on what data resolved for each cluster. Everything null-able above is genuinely conditional, not a fixed schema you can assume is always fully populated.

3x

GET /v1/technical/{ticker}

Technical & Market Structure

Confluence direction/confidence, trend, MACD, volume, chart-pattern detection, and market structure (break-of-structure, change-of-character, liquidity sweeps, order flow, volume profile, institutional footprint) for any ticker — the same engine behind XFINLAB's own chart analysis.

Response fields

data.symbol, data.last_close, data.trend, data.rsi string|number|null

data.macd object — {macd_line, signal_line, histogram, trend}

data.support, data.resistance object|null — {level, touches}

data.indicators object — ema20/ema50/sma20/sma50/atr14, plus nullable sub-objects for bollinger, obv, vwap, supertrend, ichimoku, donchian, keltner

data.confluence object — {score (-100..100), direction, confidence, confidence_pct, signals_counted, bullish_signals[], bearish_signals[]}

data.decision_levels object|null — {bias, entry, stop_loss, take_profits[], risk_reward, risk_pct}; null if confluence has no clear directional bias

data.market_structure object|null — break-of-structure/change-of-character events, liquidity pools, order flow, volume profile, institutional footprint; null if there isn't enough swing data yet

data.patterns object — fixed set of chart-pattern keys, each "可能" (possible) or "不可能" (not present)

data.data_points, data.period, data.interval

Raw OHLC price bars are deliberately never included in this response — every price-derived field above is a computed result, not the underlying feed (see Data Sourcing below). String-valued fields (trend, confluence.direction, pattern labels, etc.) are localized based on the lang query param.

3x

POST /v1/stress-test

Monte Carlo Stress Test

A real historical-bootstrap simulation — resamples a symbol's own real daily returns thousands of times to report percentile ending values and drawdowns for a given horizon. Never an LLM-estimated number.

Response fields

data.available true

data.symbol, data.horizon_days, data.n_simulations, data.n_real_observations, data.starting_amount

data.ending_value_p5 / p25 / p50 / p75 / p95 number — percentile ending portfolio values

data.max_drawdown_p50_pct, data.max_drawdown_p5_pct number — negative values

data.method, data.note string — methodology disclosure, returned verbatim, never stripped

meta.symbol string

3x

GET /v1/regime-signal/{ticker}

Regime-Aware Signal

Current causal market regime for a ticker, plus whichever composed signal combo has historically performed best in that same regime — backed by real walk-forward-validated backtests, not a fabricated pick. Honestly reports "not enough data yet" for tickers not yet covered by the scheduled scan.

Response fields

data.current_regime object — {symbol, regime, as_of_date, note}

data.regime_used string — your regime query param if given, else current_regime.regime

data.available bool

data.best_candidate object — only when available is true: {label, trade_count, win_rate_pct, avg_return_pct}

data.runner_up_candidates array — up to 5, same shape as best_candidate, only when available is true

data.reason string — only present when available is false

data.caveats array<string> — present either way, different text

meta.ticker string

4x

GET /v1/forecast/{ticker}

Probabilistic Forecast

A Bear/Base/Bull price-path fan chart — the 10th/50th/90th percentile of a real historical-return bootstrap, day by day, not just a final value — plus an independently-validated ML up-probability cross-check and a capital-flow/liquidity regime reading. Never a fabricated fixed probability split.

Response fields

data.available true

data.symbol, data.horizon_days, data.last_close

data.bear_path / base_path / bull_path number[] — one value per horizon day, 10th/50th/90th percentile across simulations

data.band_note string — states what the percentiles mean (e.g. "80% of simulated outcomes fall between Bear and Bull") — always returned verbatim, never stripped

data.ml_cross_check object|null — {available, up_probability_pct, holdout_accuracy_pct, trained_at}; null when no validated model exists for this symbol yet

data.capital_flow_context object|null — {score, direction}; null until the background refresh job has populated it

data.method, data.disclaimer string

meta.ticker, meta.horizon_days

horizon_days accepts 1-60 (query param, default 5). This endpoint never fabricates a fixed bull/base/bear probability split — the returned band_note explains the honest statistical interpretation of the percentile band instead.

3x

GET /v1/insider/{ticker}

Insider Trading

SEC Form 4 insider-trading transactions, cross-indexed under the issuer's own EDGAR CIK — not just what the issuer itself filed. Non-derivative open-market activity from the most recent filings, with a buy/sell summary. 24h server-side cached.

Response fields

data.ticker, data.attribution string

data.transactions array — most recent filings, newest first

insider_name, officer_title string|null

is_director, is_officer, is_ten_percent_owner bool

transaction_date, transaction_code, transaction_label string

shares, price_per_share, shares_owned_after number|null — gifts/some grants have no price

acquired_disposed "A"|"D"

data.summary object — {buy_count, sell_count, net_shares, net_value_usd}; net_value_usd only sums rows with both a price and share count

meta.ticker string

Covers non-derivative (direct open-market stock) transactions only — not option/RSU activity, and not a complete trading history. Returns data:null with an error string for tickers not resolvable to a US EDGAR CIK.

2x

GET /v1/short-interest/{ticker}

Short Interest

FINRA's bi-weekly equity short-interest report — current/previous reported short shares, average daily volume, days-to-cover, and period-over-period change. From FINRA's genuinely free public flat file, not the member-firm-gated Query API.

Response fields

data.ticker, data.issue_name, data.attribution string

data.settlement_date string — ISO 8601, the biweekly reporting date this snapshot covers

data.current_short_shares, data.previous_short_shares, data.avg_daily_volume number

data.days_to_cover, data.change_pct number

meta.ticker string

A `data:null` response for a covered ticker is a real, honest "not currently shorted at reportable levels" result, not necessarily an error — check the accompanying error string to tell the two cases apart.

2x

GET /v1/energy/{ticker}

Energy Fundamentals

EIA physical-market context for energy-linked tickers — WTI crude spot, Henry Hub natural-gas spot, and Lower-48 working natural-gas storage. Only populated for tickers with a real crude/nat-gas linkage (currently USO, UNG).

Response fields

data.matched_ticker, data.attribution string

data.series object — dynamically keyed by EIA series (e.g. wti_crude_spot_usd_bbl), each value or null

label, unit, period string

value number

meta.ticker string

Returns data:null for any ticker without a real physical-market linkage — never a fabricated reading for an unrelated symbol. Coverage is USO (WTI crude) and UNG (Henry Hub + storage) today.

2x

GET /v1/exchange/{ticker}

Exchange Comparison

The same crypto ticker's live 24h stats from two real spot exchanges — Binance and Coinbase — side by side. Only populated for the tracked crypto tickers both venues cover.

Response fields

data.binance, data.coinbase object|null — either can independently be null on a venue-specific miss

ticker, last_price, price_change_pct_24h, high_24h, low_24h, volume_24h

binance_symbol string — Binance object only; coinbase_product_id string — Coinbase object only

quote_volume_24h number — Binance (real); quote_volume_24h_usd_est number + quote_volume_is_estimated: true — Coinbase (derived, not a real per-trade figure)

meta.ticker string

Both binance and coinbase are null together only when the ticker isn't tracked by either venue — the response never mixes a real reading from one exchange with a fabricated one from the other.

3x

GET /v1/fundamentals/{ticker}

Company Fundamentals

Latest annual (10-K) financial-statement facts straight from SEC XBRL — revenue, net income, diluted EPS, total assets/liabilities, operating cash flow. The first real fundamentals data in this API. 24h server-side cached.

Response fields

data.ticker, data.cik, data.attribution string

data.facts object — dynamically keyed (revenue, net_income, eps_diluted, total_assets, total_liabilities, operating_cash_flow), each present only if that concept had a usable 10-K value

label, unit, end_date, form string

value number

meta.ticker string

A missing concept key means that company has never reported that specific XBRL tag on a 10-K — never a fabricated zero or null placeholder mixed in with real figures.

1x

GET /v1/vix-term-structure

VIX Term Structure

CBOE VIX9D/VIX/VIX3M/VIX6M term structure, plus a contango/backwardation regime read. Not ticker-specific — one market-wide snapshot per call.

Response fields

data.attribution string

data.term_structure object — keyed vix9d/vix/vix3m/vix6m, each {label, date, close} or null

data.structure "contango"|"backwardation"|"flat"|null

data.vix3m_minus_vix number|null

Backwardation (near-term vol priced above medium-term) has historically coincided with market stress episodes — this is a regime read, not a price prediction.

2x

GET /v1/bank-health/{ticker}

Bank Health

FDIC Call Report health (ROA, ROE, assets, equity, net income) for a major bank holding company's lead insured subsidiary. Covers JPM, BAC, WFC, C, USB, PNC, TFC today.

Response fields

data.ticker, data.attribution string

data.bank object — {cert, bank_name, report_date, asset, equity, net_income, roa, roe}

meta.ticker string

Reflects the regulated lead bank subsidiary's own Call Report, not consolidated GAAP financials for the holding company's stock — use /v1/fundamentals for that.

2x

GET /v1/agriculture/{ticker}

Agriculture Prices

USDA price-received-by-farmers data for corn, wheat, and soybeans — pairs with CORN/WEAT/SOYB the same way /v1/energy pairs with USO/UNG.

Response fields

data.matched_ticker, data.attribution string

data.series object — one key, e.g. corn_price_received_usd_bu

label, unit, period string

value number

meta.ticker string

Returns data:null for any ticker without a real commodity linkage. Coverage is CORN, WEAT, SOYB today.

Pro

POST /v1/webhooks/subscribe · GET /v1/webhooks · DELETE /v1/webhooks/{id}

Webhooks (Push Notifications)

Get notified the moment a real event happens instead of polling. Three event types today: vix_regime_change (market-wide contango/backwardation flip), new_13d_filing (per-ticker, fires when a watched ticker's activist-filing count increases), and opportunity_radar_shift (market-wide, fires when an Opportunity Radar industry's net improving/worsening lean flips). All three are backed by daily scheduled refresh jobs, so delivery is same-day, never a fabricated "real-time" claim. Pro-tier only -- a free-tier key gets a 403.

Response fields

data.id number -- your new subscription's id, used to unsubscribe

GET /webhooks returns data.webhooks array -- every subscription on your own key, with fail_count / last_delivered_at / last_status_code

Delivered payload: {"event", "ticker", "data", "delivered_at"} POSTed to your URL

A subscription auto-deactivates after 5 consecutive delivery failures (check GET /webhooks for fail_count) -- re-subscribe once your endpoint is back up. Delivery is best-effort and fire-and-forget: a slow/dead receiver never blocks or retries indefinitely.

2x

GET /v1/real-estate/{ticker}

Real Estate

FRED US housing-market context -- 30-year fixed mortgage rate, Case-Shiller home price index, housing starts, existing home sales. Only populated for housing-linked tickers (homebuilders, REITs, a mortgage originator, housing-sector ETFs).

Response fields

data.matched_ticker, data.matched_name, data.attribution string

data.indicators object -- dynamically keyed (mortgage_rate_30y_pct, home_price_index, housing_starts_thousands, existing_home_sales_thousands), each value or null

label, unit, date string

value number

meta.ticker string

Returns data:null for any ticker without a real housing-market linkage -- never a fabricated reading for an unrelated symbol. Coverage: DHI, LEN, PHM, NVR, TOL, KBH, MTH, O, SPG, PLD, PSA, AVB, EQR, RKT, VNQ, XHB, ITB today.

2x

GET /v1/supply-chain/{ticker}

Supply Chain

FRED US manufacturing/supply-chain context -- inventory/sales ratio, manufacturing new orders, durable goods orders, industrial production, manufacturing employment. Only populated for freight/logistics-linked tickers (carriers, railroads, transportation ETFs).

Response fields

data.matched_ticker, data.matched_name, data.attribution string

data.indicators object -- dynamically keyed (inventory_sales_ratio, manufacturing_new_orders_musd, durable_goods_orders_musd, industrial_production_manufacturing_index, manufacturing_employment_thousands), each value or null

label, unit, date string

value number

meta.ticker string

Returns data:null for any ticker without a real freight/logistics linkage -- never a fabricated reading for an unrelated symbol. Coverage: FDX, UPS, XPO, JBHT, CHRW, ODFL, GXO, EXPD, CSX, UNP, NSC, IYT, XTN today.

2x

GET /v1/consumer-demand/{ticker}

Consumer Demand

FRED US consumer-spending context -- retail sales, personal consumption expenditures, durable goods consumption. Not Google Trends search-interest data -- no officially licensed, commercial-use-safe search-trends API exists; real spending data is the more reliable proxy. Only populated for consumer-spending-linked tickers (large retailers, e-commerce, consumer-discretionary ETFs).

Response fields

data.matched_ticker, data.matched_name, data.attribution string

data.indicators object -- dynamically keyed (retail_sales_total_musd, retail_sales_goods_only_musd, personal_consumption_expenditures_busd, durable_goods_consumption_busd), each value or null

label, unit, date string

value number

meta.ticker string

Returns data:null for any ticker without a real consumer-spending linkage -- never a fabricated reading for an unrelated symbol. Coverage: WMT, TGT, COST, HD, LOW, AMZN, BBY, TJX, ROST, XRT, XLY today.

6x

GET /v1/opportunity-radar

Opportunity Radar

Global (no ticker) snapshot across real estate, supply chain, consumer demand, energy and agriculture, plus a US macro backdrop -- each indicator's own real % change (latest vs. oldest of its trailing observations) and improving/worsening label. No fabricated cross-industry score: industries are never ranked or blended against each other.

Response fields

data.as_of, data.attribution, data.methodology_note string

data.macro_backdrop.indicators object -- fed_funds_rate_pct, unemployment_pct, yield_curve_10y2y_pct, jobless_claims_initial (direction-only, no improving label)

data.industries object -- real_estate, supply_chain, consumer_demand, energy, agriculture, each with label, indicators, indicators_available, improving_count, worsening_count, flat_count, summary string

each indicator: label, unit, latest_date, latest_value, compare_date, compare_value, pct_change, direction (up/down/flat), improving (true/false/null)

5 industries, each gated independently on its own data source's key (FRED_API_KEY for real estate/supply chain/consumer demand, EIA_API_KEY for energy, USDA_NASS_API_KEY for agriculture). An industry whose key isn't configured still appears with an empty indicators object and an honest "not configured" summary -- it never takes the rest of the response down, and never fabricates a placeholder reading.

3x

GET /v1/consumer-safety/{ticker}

Consumer Safety (openFDA)

FDA-regulated food/drug/device recall and food adverse-event (CAERS) context, trailing 12 months, via openFDA. No API key required on openFDA's own side. Only populated for tickers with a real brand/manufacturer keyword linkage.

Response fields

data.matched_ticker, data.matched_keywords array, data.attribution, data.lookback_days number

data.datasets object -- food_recalls, drug_recalls, device_recalls, food_adverse_events, each with count, recent array, fetch_error boolean

recall items: recall_number, date, status, classification, recalling_firm, product_description, reason_for_recall

adverse-event items: report_number, date, product_brand, reactions, outcomes

Per openFDA's own disclaimer: a report existing is not proof of causation, and this data should not be used to estimate incidence or risk. Returns data:null for any ticker without a real brand/manufacturer linkage.

2x

GET /v1/product-recalls/{ticker}

Product Recalls (CPSC)

CPSC general consumer product recall context (toys, appliances, furniture, electronics, tools), trailing 12 months. Broader scope than Consumer Safety's FDA-regulated categories. No API key required. Only populated for tickers with a real manufacturer keyword linkage.

Response fields

data.matched_ticker, data.matched_keywords array, data.attribution, data.lookback_days number, data.count number, data.fetch_error boolean

data.recent array -- recall_id, recall_number, date, title, product_name, manufacturer, hazard, remedy, url

CPSC's own live backend has shown intermittent reliability issues -- surfaced honestly as fetch_error:true in the response body, never a fabricated zero-recalls reading. Returns data:null for any ticker without a real manufacturer linkage.

Where the data comes from

Every source below is licensed for commercial redistribution — verified directly against each provider's own published terms, not assumed.

News & events

GDELT's global news monitoring (public-domain, 100+ languages, unlimited commercial use) plus official company press-release wires (GlobeNewswire, PR Newswire). No feed in this pipeline carries a personal/non-commercial-use restriction.

US price data

US-listed symbols: Alpaca Markets' licensed feed. Explicitly permits commercial redistribution — no unofficial scrapers in this path.

Taiwan & other markets

Taiwan-listed symbols: the Taiwan Stock Exchange's own official open-data API — fully licensed for commercial redistribution, same standard as the US feed. Hong Kong and other non-US, non-Taiwan symbols currently use a best-effort fallback source while we evaluate a licensed provider — disclosed here, not hidden. And regardless of source, no endpoint re-exports raw price bars: every price-derived field (trend, RSI, support/resistance, market structure) is a computed result, not the underlying feed.

Asia-Pacific coverage is a widely-reported gap for most developer-facing financial data APIs. XFINLAB's Taiwan feed is a real, officially licensed exchange connection — not a scraped or best-effort source pretending otherwise.

Official SDKs

Thin, zero-magic wrappers — one method per endpoint, the same JSON you'd get from a raw HTTP call. Not yet on PyPI/npm (no paying developers yet to justify that maintenance overhead) — install straight from the repo for now.

pip install "git+https://github.com/lnanology/Xfinlab.git#subdirectory=sdk/python"

from xfinlab_intelligence import XfinlabClient client = XfinlabClient(api_key="xfl_...") client.sentiment("AAPL")

npm install "github:lnanology/Xfinlab#path:sdk/js"

const { XfinlabClient } = require('xfinlab-intelligence'); const client = new XfinlabClient('xfl_...'); await client.sentiment('AAPL');

No SDK needed — every endpoint is plain JSON over HTTPS.

curl -H "X-API-Key: xfl_..." \ "https://api.xfinlab.com/api/intelligence/v1/sentiment?ticker=AAPL"

MCP Server — for AI agents & Claude

The same 7 endpoints above, exposed as Model Context Protocol tools — so an AI agent (Claude, or any MCP-compatible client) can call them directly instead of you writing the HTTP glue yourself.

Most MCP servers don't say anything about the quality of the data behind their tool calls. This one does, in public — see the live status of every underlying data source at xfinlab.com/trust.html.

Streamable HTTP endpoint: https://api.xfinlab.com/api/mcp

{ "mcpServers": { "xfinlab": { "url": "https://api.xfinlab.com/api/mcp", "headers": { "X-API-Key": "xfl_..." } } } }

Prefer raw JSON-RPC? A GET to the same URL returns a human-readable info page; every tool call is a single stateless POST — no session handshake beyond the standard MCP "initialize" method.

get_market_events

Recent market/company headlines, optionally filtered by ticker.

get_sentiment

FinBERT sentiment score for a ticker's recent headlines.

get_technical_analysis

Confluence direction, trend, MACD, volume, patterns and market-structure signals from real OHLC data.

get_intelligence_feed

AI-structured, clustered event intelligence with a narrative summary — never a directional trading signal or probability estimate.

get_global_market_map

Cross-region macro + news + sentiment snapshot across 10 regions (US, Europe, Japan, Korea, China, HK, Taiwan, SE Asia, Middle East, LatAm).

Auth and quota are identical to the REST API above — same X-API-Key, same free tier, same weighted daily limit. No separate free ride through MCP.

Changelog

What's shipped, chronologically. View as JSON →

Roadmap

What's next — nothing here is a promise of a ship date, just what's actually being considered. View as JSON →

Plans

Free is instant and automated. Pro/Enterprise are still set up personally — pricing below is what we're launching with, and may be adjusted based on feedback from the first real developers using it.

Free

$0

For evaluating the API and prototyping.

  • ✓ 200 weighted calls / day
  • ✓ Events + Sentiment endpoints
  • ✕ AI Debate endpoint
  • ✕ AI Intelligence Feed endpoint
  • ✕ Priority support

Enterprise

Custom

For higher volume or dedicated needs.

  • ✓ Unlimited calls
  • ✓ All 4 endpoints, incl. AI Debate + AI Intelligence Feed
  • ✓ White-label: clean JSON with no XFINLAB branding, plus fully unbranded embed widgets (badge removed)
  • ✓ Dedicated support
  • ✓ SLA on request

Every endpoint above returns plain JSON with no XFINLAB branding — safe to resell under your own product name. Pro/Enterprise keys can also re-skin the free embed widgets (colors, logo, co-brand or fully removed badge) — ask us to configure it once you have a key.

Get an API Key

Choose Free below and your key is emailed instantly — no waiting. Choose Pro or Enterprise and we'll follow up personally with pricing that fits.

XFINLAB Intelligence API on LaunchNestFeatured on DevHub XFINLAB Intelligence API — Verified by KittyLaunch