Apexon DOCS

APEXON API PLATFORM

FinMarkets API documentation

One key, one base URL, one set of conventions. FinMarkets is the first Apexon product: quotes, charts, options, screeners, news, and calendars for anything that touches a ticker.

base URL
https://api.apexon.dev
  • Interactive explorer — Swagger UI at api.apexon.dev/docs, ReDoc at api.apexon.dev/redoc.
  • Machine-readable spec — OpenAPI 3.1 at api.apexon.dev/openapi.json for generating clients, mocks, and tests.
  • Upstream-shaped responses — data endpoints return the upstream payload as-is (e.g. quoteResponse.result[…]), so field coverage stays complete and stable.

Quickstart

Grab a key (subscribe on the marketplace, or request a direct key), then make your first call:

first call
curl https://api.apexon.dev/v1/stock/NVDA/quote \
  -H "X-API-Key: $APEXON_KEY"
200 OK · abridged
{
  "quoteResponse": {
    "result": [{
      "symbol": "NVDA",
      "regularMarketPrice": 128.42,
      "regularMarketChangePercent": 1.8,
      "marketState": "REGULAR",
      
    }],
    "error": null
  }
}

Every response also carries X-Request-Id, X-Cache, and X-RateLimit-* headers — see Responses & headers.

Authentication

All /v1 data endpoints require a key. Send it any of these ways — first match wins:

MethodHowUse when
X-API-Key headerX-API-Key: <key>Direct keys — the recommended default.
Bearer tokenAuthorization: Bearer <key>Clients that standardize on Authorization headers.
RapidAPIX-RapidAPI-Key: <key>Sent automatically when you call through the RapidAPI gateway.
Query param?api_key=<key>Quick tests only — keys in URLs end up in logs.

Health, legal, and documentation routes (/health, /legal/*, /docs, /redoc) are public.

Responses & headers

Successful data responses are passed through in the upstream's shape rather than re-modelled — what the source publishes is what you get, full field coverage included. The exact shape per endpoint is visible in the interactive explorer.

Standard headers

HeaderMeaning
X-Request-IdUnique id for the request — include it in support emails.
X-PlanThe plan your key resolved to (public when unauthenticated routes allow it).
X-CacheHIT or MISS — whether the response came from cache.
X-Response-Time-msServer-side processing time in milliseconds.
X-RateLimit-Limit / -Remaining / -ResetWhere you stand against your per-minute limit.

Errors

Errors always return the same machine-readable envelope — never an HTML error page:

error envelope
{
  "success": false,
  "error": {
    "code": "rate_limited",
    "message": "Per-minute limit reached",
    "status": 429,
    "retry_after_seconds": 18
  },
  "request_id": "req_9f3c…"
}
CodeStatusMeaning
unauthorized401Missing or invalid key.
forbidden403Key valid but not allowed for this route or channel.
not_found404Unknown route or resource.
validation_error422Bad parameters — error.details lists each problem.
rate_limited429Per-minute limit reached — honor retry_after_seconds.
quota_exceeded429Monthly quota used up — upgrade or wait for reset.
upstream_error / upstream_timeout502 / 504The upstream source failed or timed out; safe to retry with backoff.
internal_error500Our fault — the request_id helps us find it.

Rate limits & plans

Plans cap both monthly volume and burst rate. Requests-per-minute is enforced live and surfaced via X-RateLimit-*; monthly quota resets on your billing date. Same prices direct or via marketplace.

PlanPriceRequests / moRequests / min
BASIC$050010
PRO$9.99/mo10,00060
ULTRA$29.99/mo100,000180
MEGA$79.99/mo1,000,000600

Caching & freshness

Hot paths are cached server-side so repeat calls skip the upstream round-trip entirely. Cache windows are tuned per route family — quotes, movers, and trending refresh on short intervals; charts and options a little longer; catalogs and filter metadata longest. The X-Cache header on every response tells you whether you got a cached copy.

Data is sourced from upstream providers on a best-effort basis and is not investment advice.

Endpoint reference

The native surface lives under /v1. Path parameters are shown in braces; query parameters list their defaults where one exists. Full request/response schemas are in the interactive explorer.

Meta

EndpointQuery paramsNotes
GET/healthLiveness + upstream session state.
GET/metricsBasic service counters.
GET/legal/disclaimerData-source disclaimer (public).
GET/legal/termsTerms of use (public).
GET/Service descriptor: version, auth modes, alias families.
EndpointQuery paramsNotes
GET/v1/autocompleteq (required) · count=8Symbol / company-name suggestions.

Market

EndpointQuery paramsNotes
GET/v1/market/summaryregion=US · lang=en-USIndex snapshot; multi-region via region=GB, HK, ...
GET/v1/market/timekey=finance · formatted=TrueSession open/close times.
GET/v1/market/trendingregion=US · count=25Trending symbols by region.
GET/v1/market/moverswhich=day_gainers · count=25Predefined mover lists (day_gainers, day_losers, most_actives, ...).
GET/v1/market/sparksymbols=AAPL,MSFT · interval=5m · range=1dMini chart series for multiple symbols.
GET/v1/market/quotessymbols (required) · fieldsMulti-symbol quotes - comma-separated list.
GET/v1/market/tickersquote_type=EQUITY · size=25 · offset=0 · region=us · sort_fieldTickers by quote type (EQUITY, ETF, ...).
GET/v1/market/watchlistsq=stocks · count=20Popular public watchlists.
GET/v1/market/watchlist/{pf_id}count=30 · qWatchlist detail.
GET/v1/market/watchlist/{pf_id}/performancecount=30 · qWatchlist performance series.
GET/v1/market/sector-performanceinclude_leaders=False · leaders_size=5Sector heatmap; optional per-sector leaders.
GET/v1/market/industry-performancesector · size=25 · sort_field=percentchange · sort_type=DESC · min_market_cap=1000000000 · region=usIndustry movers, filterable by sector.
GET/v1/market/currencybase=EUR · quote=USD · symbolsFX quotes by pair or symbol list.
GET/v1/market/currency/chartbase=EUR · quote=USD · interval=1d · range=1moFX OHLC series.
GET/v1/market/index/{symbol}/componentscount=30Index constituents via proxy ETF holdings.

Stock

EndpointQuery paramsNotes
GET/v1/stock/{symbol}/quoteFull quote - upstream quoteResponse shape.
GET/v1/stock/{symbol}/chartinterval=1d · range=1moOHLCV. Intervals 1m...3mo, ranges 1d...max.
GET/v1/stock/{symbol}/downloadperiod1 · period2 · interval=1d · range · format=jsonHistorical rows as CSV or JSON.
GET/v1/stock/{symbol}/summarymodules=price,summaryDetail,summaryProfilequoteSummary modules - comma list (price, financialData, ...).
GET/v1/stock/{symbol}/optionsdateOptions chain; optional expiration date (epoch s).
GET/v1/stock/{symbol}/options/bulkmax_expirations=6 · datesChain aggregated across expirations.
GET/v1/stock/{symbol}/boardMessage-board id for the symbol.
GET/v1/stock/{symbol}/recommendationsAnalyst recommendation trend.
GET/v1/stock/{symbol}/relatedRelated tickers.
GET/v1/stock/{symbol}/insightsResearch insights bundle.
GET/v1/stock/{symbol}/timeseriestypes=annualTotalRevenue,trailingPEFundamental timeseries by type list.
GET/v1/stock/{symbol}/recent-updatesnews_count=8Recent filings, ratings, and news for the symbol.
GET/v1/stock/{symbol}/holdersInstitutional / fund ownership package.
GET/v1/stock/{symbol}/insidersInsider holders and transactions.
GET/v1/stock/{symbol}/transcriptsEarnings-call transcript list.
GET/v1/stock/{symbol}/transcripts/detailtranscript_id · event_id · urlOne transcript with paragraphs.
GET/v1/stock/{symbol}/futures-chaininclude_options=FalseFutures chain for an underlying.

Futures

EndpointQuery paramsNotes
GET/v1/futures/chainroots · include_options=FalseFutures chain by root symbols.

News

EndpointQuery paramsNotes
GET/v1/news/searchq (required) · count=15General news search - best default pull.
GET/v1/news/detailurl (required)Full article by URL.
GET/v1/news/ncpquery_ref=latestNews · count=10Editorial streams by query ref (latestNews, newsAll, pressRelease).
GET/v1/news/press-releasescount=10Press-release stream.
GET/v1/news/latestcount=10Latest-news stream.

Screener

EndpointQuery paramsNotes
GET/v1/screener/catalogrefresh=FalseAvailable predefined screens.
GET/v1/screener/predefined/{scr_id}count=25Run a predefined screen (most_actives, day_gainers, ...).
POST/v1/screenerJSON bodyCustom screen - JSON body with query operators, size, sort.
GET/v1/screener/filtersquote_type=EQUITYAvailable filter fields per quote type.
POST /v1/screener · body
{
  "size": 25,
  "offset": 0,
  "sort_field": "intradaymarketcap",
  "sort_type": "DESC",
  "quote_type": "EQUITY",
  "query": {
    "operator": "and",
    "operands": [
      {"operator": "eq", "operands": ["region", "us"]},
      {"operator": "gte", "operands": ["intradaymarketcap", 10000000000]}
    ]
  }
}

Calendar

EndpointQuery paramsNotes
GET/v1/calendarmodules=earnings,economic,ipo,splits · symbol · start · endEvents: modules earnings|economic|ipo|splits; start/end epoch ms.
GET/v1/calendar/countmodules=earnings · symbol · start · endEvent counts per day for the window.
GET/v1/calendar/earnings-vizstart · end · size=50Earnings with EPS estimate/actual/surprise.

Community

EndpointQuery paramsNotes
GET/v1/community/feedtype=new · first=20 · cursorCommunity feed - type new|popular, cursor paging.
GET/v1/community/posts/{uuid}comments=20One post with comments.
GET/v1/community/symbol/{symbol}first=25Board id + recent posts for a symbol.

Marketplace aliases

If you subscribed through RapidAPI you can keep the marketplace-style paths — they alias the same engine, same data, same conventions. Families: /auto-complete, /market/*, /stock/*, /news/*, /screeners/*, /calendar/*, /community/*, /conversations/* (including v2 forms like /market/v2/get-quotes).

Switching between alias and native paths later needs no code changes beyond the path itself — auth, errors, and headers are identical.