MarketMind AI
API Documentation
MarketMind AI provides financial intelligence APIs for Indian fintech products. Plug real-time signals, sentiment scoring, and ticker extraction directly into your application — no Bloomberg subscription required.
All APIs are accessed via HTTPS, authenticated with API keys, and return structured JSON responses. Base URL for all marketplace endpoints:
https://api.marketmind-hub.in
Make your first API call in 3 steps
X-API-Key: mm_live_... in every request header.Try it now
curl -X POST https://api.marketmind-hub.in/v1/signals/ticker-extract \ -H "Content-Type: application/json" \ -H "X-API-Key: mm_live_your_key_here" \ -d '{"text": "Reliance and HDFC Bank surged on strong earnings"}'
{
"tickers": [
{ "symbol": "RELIANCE", "company": "Reliance Industries Limited" },
{ "symbol": "HDFCBANK", "company": "HDFC Bank Limited" }
],
"count": 2,
"endpoint": "ticker-extract",
"quota": { "calls_today": 1, "calls_per_day": 100 }
}
Authentication
All marketplace API requests must include a valid API key in the X-API-Key request header.
API keys are prefixed with mm_live_ and tied to your tenant account.
Getting an API key
Log in to the Developer Dashboard → API Keys → Generate Key. You can have up to 5 active keys per account. Keys can be rotated or revoked at any time.
Using your key
X-API-Key: mm_live_your_api_key_here
Authentication errors
Ticker Extractor API
Extracts NSE/BSE ticker symbols from unstructured text — financial news, earnings call transcripts, research reports, social media posts, or any free-form content mentioning Indian listed companies. Powered by a fine-tuned Mistral 7B model trained on 70K+ Indian market data points.
Request headers
| Header | Required | Description |
|---|---|---|
| X-API-Key | required | Your marketplace API key. Prefix: mm_live_ |
| Content-Type | required | Must be application/json |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| text | string | required | Unstructured text to extract tickers from. Min 10 chars, max 10,000 chars. |
Response schema
| Field | Type | Description |
|---|---|---|
| tickers | array | List of extracted ticker objects |
| tickers[].symbol | string | NSE/BSE ticker symbol e.g. RELIANCE, HDFCBANK |
| tickers[].company | string | Full company name e.g. Reliance Industries Limited |
| count | integer | Number of tickers extracted |
| endpoint | string | Always ticker-extract |
| quota.calls_today | integer | Number of calls made today including this one |
| quota.calls_per_day | integer | Your daily call limit based on current plan |
Code examples
curl -X POST https://api.marketmind-hub.in/v1/signals/ticker-extract \ -H "Content-Type: application/json" \ -H "X-API-Key: mm_live_your_key_here" \ -d '{ "text": "Reliance Industries and HDFC Bank surged today on strong quarterly earnings while Infosys declined" }'
import requests API_KEY = "mm_live_your_key_here" BASE_URL = "https://api.marketmind-hub.in" response = requests.post( f"{BASE_URL}/v1/signals/ticker-extract", headers={ "X-API-Key": API_KEY, "Content-Type": "application/json", }, json={ "text": "Reliance Industries and HDFC Bank surged today on strong quarterly earnings" } ) data = response.json() for ticker in data["tickers"]: print(f"{ticker['symbol']} — {ticker['company']}") # RELIANCE — Reliance Industries Limited # HDFCBANK — HDFC Bank Limited
const extractTickers = async (text) => { const response = await fetch( "https://api.marketmind-hub.in/v1/signals/ticker-extract", { method: "POST", headers: { "Content-Type": "application/json", "X-API-Key": "mm_live_your_key_here", }, body: JSON.stringify({ text }), } ); const data = await response.json(); console.log(data.tickers); console.log(`Quota: ${data.quota.calls_today}/${data.quota.calls_per_day}`); }; extractTickers("Reliance and HDFC Bank surged on strong earnings");
const https = require("https"); const payload = JSON.stringify({ text: "Reliance Industries and HDFC Bank surged today on strong quarterly earnings" }); const options = { hostname: "api.marketmind-hub.in", path: "/v1/signals/ticker-extract", method: "POST", headers: { "Content-Type": "application/json", "X-API-Key": "mm_live_your_key_here", "Content-Length": Buffer.byteLength(payload), }, }; const req = https.request(options, (res) => { let data = ""; res.on("data", (chunk) => (data += chunk)); res.on("end", () => console.log(JSON.parse(data))); }); req.write(payload); req.end();
Price Prediction API
Returns an AI-generated 7-day price forecast for any stock given a historical prices array. Powered by MarketMind Chronos-Bolt, a fine-tuned zero-shot time-series forecasting model. Each forecast day includes a median prediction and a p10–p90 confidence interval so you can see both the expected move and the uncertainty range.
Request headers
| Header | Required | Description |
|---|---|---|
| X-API-Key | required | Your marketplace API key. Prefix: mm_live_ |
| Content-Type | required | Must be application/json |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| prices | array<float> | required | Historical closing prices in chronological order (oldest → newest). Min 10 values, max 512. All values must be positive numbers. |
Response schema
| Field | Type | Description |
|---|---|---|
| forecasts | array | Array of 7 daily forecast objects (Day 1 = tomorrow through Day 7) |
| forecasts[].day | integer | Forecast day number (1–7) |
| forecasts[].median | float | Median predicted price for that day |
| forecasts[].p10 | float | 10th percentile price — lower bound of confidence interval |
| forecasts[].p90 | float | 90th percentile price — upper bound of confidence interval |
| forecasts[].confidence_range | float | Width of the confidence interval (p90 − p10). Larger values indicate higher uncertainty. |
| source | string | Cache status: model (fresh inference) or cache (served from 1-hour Redis cache) |
| endpoint | string | Always price-predict |
| quota.calls_today | integer | Number of calls made today including this one |
| quota.calls_per_day | integer | Your daily call limit based on current plan |
Code examples
curl -X POST https://api.marketmind-hub.in/v1/signals/price-predict \ -H "Content-Type: application/json" \ -H "X-API-Key: mm_live_your_key_here" \ -d '{ "prices": [2780.0, 2795.5, 2810.2, 2798.0, 2823.4, 2841.0, 2855.5, 2862.3, 2849.0, 2871.6] }'
import requests API_KEY = "mm_live_your_key_here" BASE_URL = "https://api.marketmind-hub.in" prices = [2780.0, 2795.5, 2810.2, 2798.0, 2823.4, 2841.0, 2855.5, 2862.3, 2849.0, 2871.6] response = requests.post( f"{BASE_URL}/v1/signals/price-predict", headers={ "X-API-Key": API_KEY, "Content-Type": "application/json", }, json={"prices": prices} ) data = response.json() for day in data["forecasts"]: print(f"Day {day['day']}: ₹{day['median']} [{day['p10']} – {day['p90']}]") print(f"Source: {data['source']}") print(f"Quota: {data['quota']['calls_today']}/{data['quota']['calls_per_day']}")
const getForecast = async (prices) => { const response = await fetch( "https://api.marketmind-hub.in/v1/signals/price-predict", { method: "POST", headers: { "Content-Type": "application/json", "X-API-Key": "mm_live_your_key_here", }, body: JSON.stringify({ prices }), } ); const data = await response.json(); data.forecasts.forEach(d => console.log(`Day ${d.day}: ₹${d.median} [${d.p10} – ${d.p90}]`) ); console.log(`Quota: ${data.quota.calls_today}/${data.quota.calls_per_day}`); }; getForecast([2780.0, 2795.5, 2810.2, 2798.0, 2823.4, 2841.0, 2855.5, 2862.3, 2849.0, 2871.6]);
const https = require("https"); const payload = JSON.stringify({ prices: [2780.0, 2795.5, 2810.2, 2798.0, 2823.4, 2841.0, 2855.5, 2862.3, 2849.0, 2871.6] }); const options = { hostname: "api.marketmind-hub.in", path: "/v1/signals/price-predict", method: "POST", headers: { "Content-Type": "application/json", "X-API-Key": "mm_live_your_key_here", "Content-Length": Buffer.byteLength(payload), }, }; const req = https.request(options, (res) => { let data = ""; res.on("data", (chunk) => (data += chunk)); res.on("end", () => console.log(JSON.parse(data))); }); req.write(payload); req.end();
Example response
{
"forecasts": [
{ "day": 1, "median": 2901.20, "p10": 2845.50, "p90": 2960.10, "confidence_range": 114.60 },
{ "day": 2, "median": 2915.00, "p10": 2850.00, "p90": 2975.50, "confidence_range": 125.50 },
{ "day": 3, "median": 2928.40, "p10": 2855.10, "p90": 2994.80, "confidence_range": 139.70 },
{ "day": 4, "median": 2934.70, "p10": 2848.30, "p90": 3010.20, "confidence_range": 161.90 },
{ "day": 5, "median": 2940.10, "p10": 2840.60, "p90": 3025.90, "confidence_range": 185.30 },
{ "day": 6, "median": 2952.80, "p10": 2831.40, "p90": 3041.50, "confidence_range": 210.10 },
{ "day": 7, "median": 2961.30, "p10": 2820.90, "p90": 3058.70, "confidence_range": 237.80 }
],
"source": "model",
"endpoint": "price-predict",
"quota": { "calls_today": 1, "calls_per_day": 100 }
}
median is your expected price. p10–p90 is the 80% confidence band — the model expects the actual price to land within this range 80% of the time. A wider confidence_range on later days reflects higher uncertainty further into the future. Identical inputs are cached in Redis for 1 hour.
RAG Retrieval API
Retrieves relevant financial context chunks for any query from MarketMind's vector index — powered by ONNX-accelerated embeddings and Redis HNSW vector search. Use it to ground your LLM responses in real financial data without building your own retrieval pipeline.
Request headers
| Header | Required | Description |
|---|---|---|
| X-API-Key | required | Your marketplace API key. Prefix: mm_live_ |
| Content-Type | required | Must be application/json |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| user_prompt | string | required | The query to retrieve context for. Min 3 chars, max 2,000 chars. |
| query_type | string | optional | Retrieval mode. general (default) searches all financial data. model_identity routes to MarketMind's own knowledge base. |
| ticker | string | optional | Filter results to a specific NSE ticker e.g. RELIANCE, INFY. Omit to search across all tickers. |
| event_type | string | optional | Filter by event category e.g. earnings, news, analyst_report, filing. Omit to search all event types. |
| days_back | integer | optional | Restrict results to documents ingested within the last N days. Range: 1–365. Defaults to the server's configured window if omitted. |
| max_tokens | integer | optional | Hard cap on the total token count of returned context. Chunks are packed against this budget in relevance order — lower values return fewer, denser results. Takes precedence over depth when both are provided. |
| depth | string | optional | Preset token budget tier. quick — ~500 tokens. standard — ~1,000 tokens (default). deep — ~2,000 tokens. research — maximum context. Ignored if max_tokens is set. |
Response schema
| Field | Type | Description |
|---|---|---|
| rag_context | array | List of relevant financial context strings ordered by relevance |
| count | integer | Number of context chunks returned |
| source | string | Cache status: result_cache, embed_cache, or fresh |
| depth_resolved | string | How the token budget was determined: explicit, depth_enum, or inferred |
| tokens_used | integer | Approximate token count of all returned context chunks combined |
| filters_applied | object | Active search filters used for this query |
| context_metadata | array | Per-chunk metadata — title, ticker, score (cosine distance), timestamp |
| ticker_metadata | object | null | Ticker profile when a ticker filter is provided. null otherwise. |
| endpoint | string | Always rag-retrieve |
| quota.calls_today | integer | Number of calls made today including this one |
| quota.calls_per_day | integer | Your daily call limit based on current plan |
Code examples
curl -X POST https://api.marketmind-hub.in/v1/intelligence/rag \ -H "Content-Type: application/json" \ -H "X-API-Key: mm_live_your_key_here" \ -d '{ "user_prompt": "What is the outlook for Reliance Industries?", "ticker": "RELIANCE", "event_type": "earnings", "days_back": 30, "depth": "standard" }'
import requests API_KEY = "mm_live_your_key_here" BASE_URL = "https://api.marketmind-hub.in" response = requests.post( f"{BASE_URL}/v1/intelligence/rag", headers={ "X-API-Key": API_KEY, "Content-Type": "application/json", }, json={ "user_prompt": "What is the outlook for Reliance Industries?", "ticker": "RELIANCE", "event_type": "earnings", "days_back": 30, "depth": "standard", } ) data = response.json() for i, chunk in enumerate(data["rag_context"]): meta = data["context_metadata"][i] print(f"[{meta['ticker']} — score {meta['score']:.3f}] {chunk[:80]}...") print(f"Tokens: {data['tokens_used']} | Depth: {data['depth_resolved']}") print(f"Quota: {data['quota']['calls_today']}/{data['quota']['calls_per_day']}")
const retrieveContext = async (prompt) => { const response = await fetch( "https://api.marketmind-hub.in/v1/intelligence/rag", { method: "POST", headers: { "Content-Type": "application/json", "X-API-Key": "mm_live_your_key_here", }, body: JSON.stringify({ user_prompt: prompt, ticker: "RELIANCE", event_type: "earnings", days_back: 30, depth: "standard", }), } ); const data = await response.json(); console.log(data.rag_context); console.log(data.context_metadata); console.log(`Tokens: ${data.tokens_used} | Depth: ${data.depth_resolved}`); }; retrieveContext("What is the outlook for Reliance Industries?");
const https = require("https"); const payload = JSON.stringify({ user_prompt: "What is the outlook for Reliance Industries?", ticker: "RELIANCE", event_type: "earnings", days_back: 30, depth: "standard", }); const options = { hostname: "api.marketmind-hub.in", path: "/v1/intelligence/rag", method: "POST", headers: { "Content-Type": "application/json", "X-API-Key": "mm_live_your_key_here", "Content-Length": Buffer.byteLength(payload), }, }; const req = https.request(options, (res) => { let data = ""; res.on("data", (chunk) => (data += chunk)); res.on("end", () => console.log(JSON.parse(data))); }); req.write(payload); req.end();
Example response
{
"rag_context": [
"Reliance Industries Q3 profit rises 11% on strong retail and Jio performance...",
"Analysts maintain buy rating on Reliance citing new energy investments...",
"Reliance Industries announces ₹75,000 crore capex plan for FY26..."
],
"count": 3,
"source": "fresh",
"depth_resolved": "depth:standard",
"tokens_used": 378,
"filters_applied": { "ticker": "RELIANCE", "days_back": 30 },
"context_metadata": [
{ "title": "RELIANCE — Economic Times", "ticker": "RELIANCE", "score": 0.321, "timestamp": 1782308510 }
],
"ticker_metadata": {
"ticker": "RELIANCE", "sector": "Energy",
"industry": "Oil & Gas Refining",
"related_tickers": ["BPCL", "ONGC", "IOC"]
},
"endpoint": "rag-retrieve",
"quota": { "calls_today": 1, "calls_per_day": 100 }
}
rag_context as the context block in your LLM prompt. Chunks are ordered by semantic relevance — lower score means higher similarity. Use context_metadata for source attribution.
Error Codes
All errors return a JSON body with error and message fields.
Error response shape
{
"error": "Daily quota exceeded",
"message": "You have used all 100 calls for today. Resets at midnight UTC.",
"quota": {
"calls_today": 100,
"calls_per_day": 100
}
}
Rate Limits
Quota is enforced per account per day. Counters reset at midnight UTC.
Every API response includes your current usage in the quota field so you can track consumption in real time.