Market data built for products and agents.
Explore normalized market data, research, and user workflows through one predictable API. Public data works keyless; add a key for higher snapshot limits and private resources.
https://mkts.io/api/v1Try it keyless
Public market and research endpoints work immediately.
Add a key when needed
Keys unlock private workflows and higher snapshot limits.
Keep your current key
Existing mk_live_… keys need no migration.
curl https://mkts.io/api/v1/marketAuthentication
Use a key only when it adds value.
API keys are optional for public market data. A valid key applies authenticated-tier limits and identifies the owner of private portfolio, watchlist, journal, and AI resources.
curl -H "X-API-Key: $MKTS_API_KEY" \
https://mkts.io/api/v1/briefcurl -H "Authorization: Bearer $MKTS_API_KEY" \
https://mkts.io/api/v1/briefAlready using the OpenClaw skill? Your stored key and both authentication formats continue to work.
Manage keys →API reference
Explore every endpoint.
Expand an operation for parameters, request body, and a copyable cURL example.
System & access
3GET/pingCheck API statusNo key
/pingCheck API statusLightweight health check with server time and service status.
curl \
"https://mkts.io/api/v1/ping"GET/openapi.jsonDownload the OpenAPI schemaNo key
/openapi.jsonDownload the OpenAPI schemaMachine-readable OpenAPI description of the v1 REST surface.
curl \
"https://mkts.io/api/v1/openapi.json"POST/registerCreate a free agent API keyNo key
/registerCreate a free agent API keyCreates a free API key for an agent or application. The key is returned once.
JSON body
{
"email": "you@example.com",
"name": "my-agent"
}curl -X POST \
-H "Content-Type: application/json" \
-d '{ "email": "you@example.com", "name": "my-agent"}' \
"https://mkts.io/api/v1/register"Market data
9GET/marketMarket overviewKey optional
/marketMarket overviewGlobal market overview and broad market context.
curl \
"https://mkts.io/api/v1/market"GET/assetsBrowse the asset universeKey optional
/assetsBrowse the asset universeFilter and search the normalized multi-asset universe.
Parameters
typesectorplatformmarketTypesearchcurl \
"https://mkts.io/api/v1/assets?type=stock§or=Technology"GET/asset/{symbol}Get an asset snapshotKey optional
/asset/{symbol}Get an asset snapshotNormalized price, change, market cap, volume, identity, and classification for one symbol.
Parameters
symbol (path)curl \
"https://mkts.io/api/v1/asset/AAPL"GET/asset/{symbol}/liveGet a live quoteLiveKey optional
/asset/{symbol}/liveGet a live quoteFresh quote with market state and extended-hours fields.
Parameters
symbol (path)typecurl \
"https://mkts.io/api/v1/asset/AAPL/live"GET/asset/{symbol}/historyGet price historyKey optional
/asset/{symbol}/historyGet price historyHistorical OHLCV series for charts and analysis.
Parameters
symbol (path)rangecurl \
"https://mkts.io/api/v1/asset/AAPL/history?range=3M"GET/moversGet market moversKey optional
/moversGet market moversTop gainers and losers, optionally filtered by direction and asset type.
Parameters
directiontypelimitcurl \
"https://mkts.io/api/v1/movers?direction=gainers&limit=10"GET/trendingGet market highlightsKey optional
/trendingGet market highlightsMost active stocks, top gainers, and top losers.
Parameters
sectioncountcurl \
"https://mkts.io/api/v1/trending?section=trending&count=10"GET/sectorsGet sector performanceKey optional
/sectorsGet sector performanceSector-level market performance and composition.
curl \
"https://mkts.io/api/v1/sectors"GET/macroGet a macro snapshotKey optional
/macroGet a macro snapshotBTC, ETH, SPY, QQQ, gold, oil, VIX, DXY, and the 10-year yield in one call.
curl \
"https://mkts.io/api/v1/macro"Point-in-time archive
5GET/asset/{symbol}/as-ofWhat we recorded on a dateKey optional
/asset/{symbol}/as-ofWhat we recorded on a dateThe archived observation for a symbol on a given date, or the most recent one before it if the market was shut. Revisions recorded after that date are excluded, so a backtest cannot see hindsight.
Parameters
symbol (path)datecurl \
"https://mkts.io/api/v1/asset/AAPL/as-of?date=2026-07-15"GET/archive/as-ofMany symbols, one past dateKey optional
/archive/as-ofMany symbols, one past dateThe same point-in-time lookup for up to 100 symbols at once. unresolvedSymbols and symbolsWithoutObservation are returned separately, so a short answer is never silently short.
Parameters
symbolsdatecurl \
"https://mkts.io/api/v1/archive/as-of?symbols=AAPL,MSFT,BTC&date=2026-07-15"GET/asset/{symbol}/seriesArchived closes over a rangeKey optional
/asset/{symbol}/seriesArchived closes over a rangeDaily closes for one symbol across a date range, in a single call. Asking /as-of for 90 separate dates costs 90 requests; this costs one. Each row carries observedAt and isRevision, so a later restatement stays visible.
Parameters
symbol (path)fromtocurl \
"https://mkts.io/api/v1/asset/AAPL/series?from=2026-07-01&to=2026-07-31"GET/archive/seriesPortfolio backtest in one callKey optional
/archive/seriesPortfolio backtest in one callDaily closes for many symbols across a date range — the N-symbols-by-M-days shape a portfolio backtest needs. Limits are 100 symbols, 366 days, and symbols x days up to 10,000.
Parameters
symbolsfromtocurl \
"https://mkts.io/api/v1/archive/series?symbols=AAPL,MSFT,BTC&from=2026-07-01&to=2026-07-31"GET/asset/{symbol}/intradayObservations within a dayKey optional
/asset/{symbol}/intradayObservations within a dayEvery observation made inside a window, not just the close — roughly one per 15 minutes for recent months. Check observedIntervalMinutes, largestGapMinutes and coveragePercent before treating it as fixed bars: cadence is not uniform across the archive.
Parameters
symbol (path)fromtointervalcurl \
"https://mkts.io/api/v1/asset/BTC/intraday?from=2026-08-08&to=2026-08-09&interval=1h"Research & discovery
11GET/screenScreen market snapshotsKey optional
/screenScreen market snapshotsFilter assets by price, change, volume, market cap, type, and sector.
Parameters
typesectorminPricemaxPriceminChangemaxChangeminVolumemaxVolumeminMarketCapmaxMarketCapcurl \
"https://mkts.io/api/v1/screen?type=stock&minMarketCap=10000000000"GET/compareCompare assetsKey optional
/compareCompare assetsCompare normalized market data for multiple symbols.
Parameters
symbolscurl \
"https://mkts.io/api/v1/compare?symbols=AAPL,MSFT,NVDA"GET/briefGet a market briefKey optional
/briefGet a market briefCompact market brief suitable for dashboards, agents, and morning updates.
curl \
"https://mkts.io/api/v1/brief"GET/earningsGet the earnings calendarKey optional
/earningsGet the earnings calendarUpcoming and recent earnings with estimates, actuals, and surprise history.
Parameters
symbolsweekcurl \
"https://mkts.io/api/v1/earnings?symbols=AAPL,MSFT"GET/newsGet financial newsKey optional
/newsGet financial newsAggregated financial news filtered by category or asset symbol.
Parameters
categorysymbollimitcurl \
"https://mkts.io/api/v1/news?symbol=AAPL&limit=10"GET/asset/{symbol}/detailsGet deep asset detailsLiveKey optional
/asset/{symbol}/detailsGet deep asset detailsCompany profile, analyst data, holders, insider activity, SEC filings, and ETF holdings.
Parameters
symbol (path)curl \
"https://mkts.io/api/v1/asset/MSFT/details"GET/asset/{symbol}/filingsGet company filingsLiveKey optional
/asset/{symbol}/filingsGet company filingsRecent SEC filings for one stock or ETF.
Parameters
symbol (path)typelimitcurl \
"https://mkts.io/api/v1/asset/AAPL/filings?type=10-K&limit=10"GET/filings/searchSearch filingsLiveKey optional
/filings/searchSearch filingsSearch filings across a bounded stock or ETF universe.
Parameters
typesymbolssectorsearchfilingTypetitledateFromdateTolimituniversecurl \
"https://mkts.io/api/v1/filings/search?filingType=10-K&limit=10"GET/asset/{symbol}/fundamentalsGet financial statementsLiveKey optional
/asset/{symbol}/fundamentalsGet financial statementsHistorical income statement, balance sheet, and cash-flow time series.
Parameters
symbol (path)typemodulecurl \
"https://mkts.io/api/v1/asset/AAPL/fundamentals?type=annual&module=all"GET/asset/{symbol}/optionsGet an options chainLiveKey optional
/asset/{symbol}/optionsGet an options chainOptions chain with expirations, implied volatility, volume, and open interest.
Parameters
symbol (path)expirationcurl \
"https://mkts.io/api/v1/asset/AAPL/options"GET/fundamentals/screenScreen fundamentalsLiveKey optional
/fundamentals/screenScreen fundamentalsScreen valuation, growth, margins, leverage, cash flow, and analyst targets.
Parameters
typesectorsearchsymbolssortdirlimituniversemin/max metric filterscurl \
"https://mkts.io/api/v1/fundamentals/screen?sector=Technology&minGrossMargin=0.5&limit=10"Portfolio & workflows
15GET/portfolioGet portfolio holdingsKey required
/portfolioGet portfolio holdingsHoldings with allocation, cost basis, P&L, and daily change.
curl \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/portfolio"POST/portfolioAdd a holdingKey required
/portfolioAdd a holdingAdd a position to the API-key owner’s portfolio.
JSON body
{
"symbol": "AAPL",
"name": "Apple Inc.",
"assetType": "stock",
"quantity": 10,
"avgCostBasis": 180
}curl -X POST \
-H "X-API-Key: $MKTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "symbol": "AAPL", "name": "Apple Inc.", "assetType": "stock", "quantity": 10, "avgCostBasis": 180}' \
"https://mkts.io/api/v1/portfolio"DELETE/portfolioClear a portfolioKey required
/portfolioClear a portfolioRemove every holding owned by the authenticated API key.
curl -X DELETE \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/portfolio"DELETE/portfolio/{holdingId}Delete a holdingKey required
/portfolio/{holdingId}Delete a holdingRemove one holding by its ID.
Parameters
holdingId (path)curl -X DELETE \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/portfolio/HOLDING_ID"GET/portfolio/performanceGet portfolio performanceKey required
/portfolio/performanceGet portfolio performancePortfolio performance series with optional benchmark overlays.
Parameters
rangebenchmarkscurl \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/portfolio/performance?range=YTD&benchmarks=SPY,QQQ"GET/portfolio/cardGenerate a portfolio cardKey required
/portfolio/cardGenerate a portfolio cardGenerate a shareable 1200×630 PNG with portfolio value, performance, and top holdings.
Parameters
rangecurl \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/portfolio/card?range=YTD"GET/watchlistList watchlistsKey required
/watchlistList watchlistsReturn every watchlist owned by the authenticated API key.
curl \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/watchlist"POST/watchlistCreate a watchlistKey required
/watchlistCreate a watchlistCreate a named watchlist with optional starting symbols.
JSON body
{
"name": "AI infrastructure",
"symbols": ["NVDA", "MSFT"]
}curl -X POST \
-H "X-API-Key: $MKTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "AI infrastructure", "symbols": ["NVDA", "MSFT"]}' \
"https://mkts.io/api/v1/watchlist"DELETE/watchlistClear all watchlistsKey required
/watchlistClear all watchlistsDelete every watchlist owned by the authenticated API key.
curl -X DELETE \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/watchlist"GET/watchlist/{watchlistId}Get a watchlistKey required
/watchlist/{watchlistId}Get a watchlistReturn one watchlist by ID.
Parameters
watchlistId (path)curl \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/watchlist/WATCHLIST_ID"PATCH/watchlist/{watchlistId}Update a watchlistKey required
/watchlist/{watchlistId}Update a watchlistRename a watchlist or add and remove symbols.
Parameters
watchlistId (path)JSON body
{
"name": "Core tech",
"addSymbols": ["AAPL"],
"removeSymbols": ["MSFT"]
}curl -X PATCH \
-H "X-API-Key: $MKTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Core tech", "addSymbols": ["AAPL"], "removeSymbols": ["MSFT"]}' \
"https://mkts.io/api/v1/watchlist/WATCHLIST_ID"DELETE/watchlist/{watchlistId}Delete a watchlistKey required
/watchlist/{watchlistId}Delete a watchlistDelete one watchlist by ID.
Parameters
watchlistId (path)curl -X DELETE \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/watchlist/WATCHLIST_ID"GET/journalList journal entriesKey required
/journalList journal entriesReturn the authenticated API key owner’s research journal.
curl \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/journal"POST/journalCreate a journal entryKey required
/journalCreate a journal entryCreate a tagged research or trading journal entry.
JSON body
{
"title": "AAPL thesis",
"content": "Watching services growth.",
"symbol": "AAPL",
"tags": ["research"]
}curl -X POST \
-H "X-API-Key: $MKTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "AAPL thesis", "content": "Watching services growth.", "symbol": "AAPL", "tags": ["research"]}' \
"https://mkts.io/api/v1/journal"DELETE/journal/{entryId}Delete a journal entryKey required
/journal/{entryId}Delete a journal entryDelete one journal entry by ID.
Parameters
entryId (path)curl -X DELETE \
-H "X-API-Key: $MKTS_API_KEY" \
"https://mkts.io/api/v1/journal/ENTRY_ID"AI
1POST/askAsk about the marketKey required
/askAsk about the marketParse a natural-language market question and route it to structured market data.
JSON body
{
"q": "Which technology stocks are down more than 5%?"
}curl -X POST \
-H "X-API-Key: $MKTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "q": "Which technology stocks are down more than 5%?"}' \
"https://mkts.io/api/v1/ask"Agent integrations
One data layer for every agent.
Use the hosted read-only MCP server with Claude, OpenAI, or another Streamable HTTP client. The existing skill and manifests remain available, and OpenClaw users can keep the same key setup.
Remote MCP endpoint
https://mkts.io/api/mcpKeyless calls work at public limits. Send your existing key as a Bearer token or X-API-Key for authenticated limits.
Remote MCP
/api/mcpA curated, read-only Streamable HTTP tool server for Claude, OpenAI, and other MCP clients.
Agent Skill
/SKILL.mdThe complete OpenClaw and agent integration guide.
OpenAPI
/openapi.jsonThe machine-readable v1 API contract.
Agent Manifest
/agent.jsonDiscovery metadata for agent-first clients.
Plugin Manifest
/ai-plugin.jsonPlugin discovery metadata tied to OpenAPI.
LLM Index
/llms.txtA lightweight index for assistants and crawlers.
Response contract
One predictable envelope.
JSON responses use success, data, and meta. The meta object carries freshness and rate-limit state.
200Request succeeded400Invalid request or parameter401Missing or invalid required key404Resource was not found429Rate limit reached500Unexpected server error{
"success": true,
"data": {
"symbol": "AAPL",
"price": 219.58,
"change24h": 0.91
},
"meta": {
"lastUpdated": 1773077284000,
"asOf": "2026-03-09T19:48:04.000Z",
"dataAgeMs": 4210,
"freshness": "near-real-time",
"cacheStatus": "hit",
"sources": ["yahoo-finance"],
"requestId": "2fb89be8-1e19-4ab7-a481-9cf67b839935",
"requestsRemaining": 94,
"resetTime": 1773080400000
}
}X-RateLimit-LimitHourly limit for the current access tier.X-RateLimit-RemainingRequests left in the active window.X-RateLimit-ResetWindow reset time as a Unix timestamp in milliseconds.X-Request-IdUnique identifier for tracing a response through support and telemetry.X-Data-As-OfISO timestamp for the underlying market-data observation.X-Data-Age-MsAge of the observation when the response was created.X-Data-FreshnessLive, near-real-time, delayed, cached, historical, or unknown.X-Data-SourcesComma-separated upstream providers when known.X-Cache-StatusNormalized hit, miss, stored, bypass, or unknown state.Retry-AfterSeconds until retry, returned with a 429 response.X-Query-CacheCache hit or miss on heavier research routes.X-Query-UniverseEffective bounded universe on fan-out searches.Rate limits
Start small. Add capacity when you need it.
| Access | Snapshot | Live | Best for |
|---|---|---|---|
| No API key | 20 / hour | 20 / hour | Testing and lightweight public data |
| Free API key | 100 / hour | 10 / hour | Agents, prototypes, and personal tools |
| Paid API key | 1,000 / hour | 100 / hour | Production applications |
Ready to move beyond keyless?
Create or manage keys without changing your integration.