v1.0 API Marketplace Dashboard →
Intelligence APIs
RAG Retrieval

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:

Base URL
https://api.marketmind-hub.in
Currently in development. The API Marketplace is live with the Ticker Extractor, Price Prediction, and RAG Retrieval APIs. More APIs — sentiment scoring, earnings intelligence — are being added.

Make your first API call in 3 steps

1
Create an account and get your API key
Go to dashboard → API Keys → Generate Key. Copy the key — it's shown only once.
2
Make a request with your key in the header
Pass X-API-Key: mm_live_... in every request header.
3
Parse the structured JSON response
Every response includes extracted data + your current quota usage.

Try it now

curl
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"}'
Response
{
  "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.

Keep your API key secret. Do not expose it in client-side code, public repos, or browser requests. Always call from your server.

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

Header
X-API-Key: mm_live_your_api_key_here

Authentication errors

401
Missing API key
X-API-Key header not present in the request
401
Invalid or revoked key
Key does not exist, has been revoked, or is malformed

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.

POST /v1/signals/ticker-extract

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.

POST /v1/signals/price-predict
Not financial advice. Predictions are generated by an AI model and are for informational purposes only. Always conduct your own research before making investment decisions.

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

JSON
{
  "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 }
}
Reading the forecast. median is your expected price. p10p90 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.

POST /v1/intelligence/rag

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: 1365. 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

JSON
{
  "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 }
}
How to use the context. Pass 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.

200
Success
Request processed successfully
400
Bad Request
Missing or invalid request body — check field requirements
401
Unauthorized
Missing, invalid, or revoked API key
402
Quota Exceeded
Daily call limit reached — resets at midnight UTC. Upgrade your plan for higher limits.
503
Service Unavailable
Inference service temporarily unavailable — retry after a few seconds
504
Gateway Timeout
Inference took too long — retry your request

Error response shape

JSON
{
  "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.

Free
100
calls/day
1,000/month
Starter
1,000
calls/day
20,000/month
Growth
5,000
calls/day
100,000/month
Enterprise
calls/day
Unlimited
Need higher limits? Contact us to upgrade your plan or discuss enterprise pricing for production workloads.