Skip to main content

Try it now — no API key needed

curl https://api.meridianedge.io/api/v1/status

Meridian Edge API

The Meridian Edge API provides programmatic access to real-time prediction market consensus data via authenticated REST endpoints. Available tiers range from 100 to unlimited daily calls, with response payloads including probability, confidence scoring, source count, and market spread.

Programmatic access to Meridian Edge's derived signal analytics for prediction markets.

Legal Disclaimer

All API responses contain derived data only — Meridian Edge consensus probabilities, opportunity scores, and directional signals generated from our proprietary analysis. No raw exchange prices, order book data, or third-party platform prices are included in any response. This API does not redistribute raw data from any third-party platform.

Not Investment Advice

All data is provided for informational purposes only. Participation in prediction markets involves substantial risk of financial loss. Nothing in this API constitutes investment advice.

The base URL for all API requests is:

https://api.meridianedge.io/api/v1

All responses are JSON. All timestamps are ISO 8601 UTC. Amounts are in USD.

SDKs

# Python
pip install meridianedge
// Node.js (18+)
npm install meridian-edge

Both SDKs wrap all REST endpoints with retry logic, rate limit handling, and typed responses. PyPI | npm

Authentication

All endpoints except GET /api/v1/status require an API key. Pass your key using the X-API-Key header:

HTTP
GET /api/v1/signals/recent HTTP/1.1
X-API-Key: me_pro_your_key_here

Alternatively, you may pass the key as a query parameter (less preferred):

HTTP
GET /api/v1/signals/recent?api_key=me_pro_your_key_here

Getting an API Key

Get a API key instantly (instant activation) at meridianedge.iothe pricing page. Keys are prefixed by tier:

PrefixTier
me_free_Free
me_start_Starter
me_pro_Pro
me_teams_Teams
me_ent_Enterprise

Rate Limits

Rate limits are applied per API key per calendar day (UTC). When you exceed your limit, the API returns HTTP 429.

TierDaily CallsSignal DelayMax ResultsDirectionEvent Names
Free5030 min10LockedLocked
Starter1,0005 min25VisibleLocked
Pro10,000Real-time50VisibleVisible
Teams50,000Real-time100VisibleVisible
EnterpriseUnlimitedReal-time999VisibleVisible

Rate limit headers are not currently included in responses. Check /api/v1/account for your current usage.

Endpoints

GET /api/v1/status API health check — no auth required
PUBLIC

Returns API health and version. No authentication required.

Response 200
{
  "status": "ok",
  "version": "1.0.0",
  "tiers": ["free", "starter", "pro", "teams", "enterprise"],
  "pricing": "https://meridianedge.io/pricing",
  "documentation": "https://meridianedge.io/docs"
}
GET /api/v1/markets Active tracked markets
REQUIRES AUTH

Query Parameters

ParameterTypeDescription
sportstringFilter by sport (NBA, NFL, MLB, etc.)
limitintegerMax results (capped by tier). Default: 20
Response 200
{
  "data": [
    {
      "event_id": "a1b2c3d4e5f6",
      "sport": "NBA",
      "consensus_probability": "ACTIVE",
      "opportunity_score": null,
      "time_to_event_hours": 4.2,
      "status": "open"
    }
  ],
  "count": 1,
  "source": "Meridian Edge",
  "disclaimer": "For informational purposes only..."
}
GET /api/v1/markets/{event_id} Single event detail
REQUIRES AUTH

Returns Meridian Edge analysis for a single event by its event_id. Full detail endpoint coming soon.

GET /api/v1/opportunities Aggregated market divergence scores
PRO+ REQUIRED

Query Parameters

ParameterTypeDescription
min_scorefloatMinimum opportunity score. Default: 5.0
sportstringFilter by sport
limitintegerMax results. Default: 20
Response 200
{
  "data": [
    {
      "event_id": "a1b2c3d4e5f6",
      "sport": "NHL",
      "opportunity_score": 12.4,
      "confidence": "HIGH",
      "direction": "cross_platform_divergence",
      "detected_at": "2026-03-22T19:00:00+00:00"
    }
  ]
}

Note: Opportunity scores are derived from our proprietary aggregated market analysis. No raw exchange prices are included.

GET /api/v1/sports/{sport}/today Today's signals by sport
REQUIRES AUTH

Returns today's tracked signals for a specific sport. {sport} is case-insensitive (e.g., NBA, nba).

Returned fields are gated by tier — direction and event names locked below Pro.

GET /api/v1/signals/recent Most recent Meridian signals
REQUIRES AUTH

Query Parameters

ParameterTypeDescription
limitintegerNumber of signals. Default: 10
Response 200
{
  "data": [
    {
      "id": 1234,
      "sport": "MLB",
      "direction": "YES",
      "event": "Team A vs Team B",
      "status": "active",
      "timestamp": "2026-03-22T18:30:00+00:00"
    }
  ],
  "meta": {
    "tier": "pro",
    "delay_seconds": 0,
    "signals_per_day_limit": 999
  }
}

Starter tier signals are delayed 30 minutes. Starter tier signals are delayed 5 minutes. Pro and above are real-time.

GET /api/v1/weather/summary NWS weather forecast accuracy by city
REQUIRES AUTH

Returns Meridian Edge's analysis of NWS public weather forecasts by city. Based entirely on publicly available National Weather Service data.

Response 200
{
  "data": [
    {
      "city": "NYC",
      "forecast_accuracy_score": 62.5,
      "total_analyzed": 48,
      "last_settlement": "2026-03-21T00:00:00+00:00",
      "trend": "above_average"
    }
  ],
  "note": "Based on NWS public weather data analysis"
}
GET /api/v1/settlements/recent Recently settled predictions — see track record
REQUIRES AUTH
Response 200
{
  "data": [
    {
      "event_id": "a1b2c3d4e5f6",
      "sport": "MLS",
      "outcome": "correct",
      "settled_at": "2026-03-22T20:00:00+00:00",
      "sources": ["public_data"],
      "verification": "confirmed"
    }
  ]
}
GET /api/v1/consensus Aggregated consensus probabilities
REQUIRES AUTH

Returns Meridian Edge's volume-weighted consensus probability for each active event, aggregated from multiple regulated prediction markets. Source identifiers are anonymized — individual platform names are never exposed.

Query Parameters

Param Type Default Description
sportstringallFilter by sport/league (NBA, MLS, MLB…)
min_platformsint2Minimum platforms required in consensus
min_spreadfloat0.0Minimum aggregated spread (e.g. 0.03 = 3%+)
limitint20Max results (capped by tier)

Tier Access

Tier Fields returned
Freeevent_key, sport, consensus_prob, ts
Starter+ spread, n_platforms, confidence
Pro+ fair_value, platform_breakdown (anonymized), event_name
Enterprise+ historical snapshots via /consensus/{event_key}
Response 200 — Pro tier
{
  "count": 12,
  "data": [
    {
      "event_key":       "NBA-BOS-NYK-20260401",
      "event_name":      "NBA-BOS-NYK-20260401",
      "sport":           "NBA",
      "consensus_prob":  0.6241,
      "fair_value":      0.6241,
      "spread":          0.0412,
      "n_platforms":     3,
      "confidence":      "MEDIUM",
      "platform_breakdown": {
        "platform_a": 0.6380,
        "platform_b": 0.6100,
        "platform_c": 0.5968
      },
      "ts": "2026-04-01T18:32:11+00:00"
    }
  ],
  "source":      "Meridian Edge",
  "disclaimer":  "For informational purposes only. Not investment advice."
}
GET /api/v1/consensus/{event_key} Single event consensus detail + history (Enterprise)
REQUIRES AUTH

Returns the latest consensus snapshot for a specific event. Enterprise tier also returns history — up to 288 snapshots (24h at 5-min intervals).

Response 200 — Enterprise tier
{
  "event_key":        "NBA-BOS-NYK-20260401",
  "event_name":       "NBA-BOS-NYK-20260401",
  "sport":            "NBA",
  "consensus_prob":   0.6241,
  "fair_value":       0.6241,
  "spread":           0.0412,
  "n_platforms":      3,
  "confidence":       "MEDIUM",
  "platform_breakdown": {
    "platform_a": 0.6380,
    "platform_b": 0.6100
  },
  "history": [
    {
      "consensus_prob": 0.6241,
      "spread":         0.0412,
      "n_platforms":    3,
      "confidence":     "MEDIUM",
      "ts":             "2026-04-01T18:32:11+00:00"
    }
  ],
  "source":     "Meridian Edge",
  "disclaimer": "For informational purposes only. Not investment advice."
}
GET /api/v1/account Your account and usage info
REQUIRES AUTH
Response 200
{
  "tier": "pro",
  "calls_today": 47,
  "calls_remaining": 9953,
  "daily_limit": 10000,
  "total_calls": 1284,
  "member_since": "2026-01-15T10:30:00+00:00",
  "upgrade": "https://meridianedge.io/pricing"
}

Response Format

Every response includes a standard metadata wrapper:

Standard Wrapper
{
  // ... endpoint-specific data fields ...

  "source": "Meridian Edge",
  "disclaimer": "For informational purposes only. Not investment advice. Trading involves risk of loss.",
  "documentation": "https://meridianedge.io/docs"
}

Error Codes

CodeMeaningResolution
401Missing or invalid API keyCheck your X-API-Key header. Get a key at meridianedge.io/pricing
403Tier insufficientThis endpoint requires a higher tier. Upgrade at meridianedge.io/pricing
429Daily rate limit exceededWait until midnight UTC, or upgrade your tier
500Internal server errorRetry after a few seconds. Contact support if persistent.
Error Response
{
  "error": "Daily rate limit exceeded",
  "limit": 50,
  "upgrade": "https://meridianedge.io/pricing",
  "source": "Meridian Edge"
}

Code Examples

Check API Status

curl
Python
JavaScript
curl -s https://api.meridianedge.io/api/v1/status
import requests
resp = requests.get("https://api.meridianedge.io/api/v1/status")
print(resp.json())
const res = await fetch('https://api.meridianedge.io/api/v1/status');
const data = await res.json();
console.log(data);

Fetch Recent Signals

curl
Python
JavaScript
curl -H "X-API-Key: me_pro_your_key_here" \
  https://api.meridianedge.io/api/v1/signals/recent?limit=5
import requests

API_KEY = "me_pro_your_key_here"
headers = {"X-API-Key": API_KEY}

resp = requests.get(
    "https://api.meridianedge.io/api/v1/signals/recent",
    headers=headers,
    params={"limit": 5}
)
data = resp.json()

for signal in data["data"]:
    print(f"{signal['sport']} | {signal['direction']} | {signal['event']}")
const API_KEY = 'me_pro_your_key_here';

const res = await fetch(
  'https://api.meridianedge.io/api/v1/signals/recent?limit=5',
  { headers: { 'X-API-Key': API_KEY } }
);
const { data } = await res.json();
data.forEach(s => console.log(s.sport, s.direction, s.event));

Get Aggregated Market Opportunities

curl
Python
JavaScript
curl -H "X-API-Key: me_pro_your_key_here" \
  "https://api.meridianedge.io/api/v1/opportunities?min_score=5&sport=NBA"
resp = requests.get(
    "https://api.meridianedge.io/api/v1/opportunities",
    headers={"X-API-Key": API_KEY},
    params={"min_score": 5, "sport": "NBA"}
)
for opp in resp.json()["data"]:
    print(f"Score: {opp['opportunity_score']} | Conf: {opp['confidence']}")
const res = await fetch(
  'https://api.meridianedge.io/api/v1/opportunities?min_score=5&sport=NBA',
  { headers: { 'X-API-Key': API_KEY } }
);
const { data } = await res.json();
data.forEach(o => console.log(o.opportunity_score, o.confidence));

Check Account Usage

curl
Python
curl -H "X-API-Key: me_pro_your_key_here" \
  https://api.meridianedge.io/api/v1/account
resp = requests.get(
    "https://api.meridianedge.io/api/v1/account",
    headers={"X-API-Key": API_KEY}
)
acct = resp.json()
print(f"Tier: {acct['tier']} | Remaining: {acct['calls_remaining']}/{acct['daily_limit']}")

Data Dictionary

Signal Fields

FieldTypeDescription
idintegerUnique signal identifier
sportstringVertical category (sports, weather, economics)
directionstringOur signal direction: YES or NO (Pro+)
eventstringEvent description (Pro+)
statusstringactive or settled
timestampISO 8601When the signal was generated
outcomestringwon / lost / pending (Pro+, settled only)
entry_pricefloatOur entry cost in USD (Pro+)

Opportunity Fields

FieldTypeDescription
event_idstringDerived event identifier (hashed)
opportunity_scorefloatDerived divergence score (0–100). Higher = larger divergence.
confidencestringHIGH (>5pts), MEDIUM (3–5pts), LOW (<3pts)
directionstringType of opportunity (cross_platform_divergence)
detected_atISO 8601When the opportunity was detected

What is NOT included

Data Exclusions (Legal)

The following fields are intentionally excluded from all API responses per our legal compliance policy: raw exchange prices, sharp market reference lines, closing line value, edge percentages, internal strategy names, ML model scores, and order book data. All outputs are derived data only.

Real-Time Stream (SSE)

Subscribe to live consensus updates via Server-Sent Events. Agents connect once and receive push updates every 60 seconds — no polling needed.

GET /api/v1/stream

Optional query param: ?sport=NBA (filters by sport). Header: X-API-Key: YOUR_KEY

JavaScript
const source = new EventSource(
  "https://meridianedge.io/api/v1/stream?sport=NBA"
);

source.addEventListener("consensus_update", (e) => {
  const events = JSON.parse(e.data);
  events.forEach(event => {
    console.log(`${event.event_name}: ${event.consensus_prob}`);
  });
});

source.addEventListener("heartbeat", (e) => {
  console.log("alive:", JSON.parse(e.data).ts);
});
curl (verify live)
curl -N -H "X-API-Key: me_free_demo000000000000" \
  "https://meridianedge.io/api/v1/stream" --max-time 65
Events: consensus_update (data changed) · heartbeat (no change, keep-alive) · error (DB issue)

AI Integrations

Use Meridian Edge consensus data directly inside major AI platforms — no API key required for these integrations.

💬

ChatGPT — Custom GPT

Live prediction market consensus inside ChatGPT. Ask about any active event — sports, politics, economics.

Open ChatGPT integration →
🔌

Claude — MCP Server

Connect to Claude Desktop or Cursor via the Model Context Protocol. Exposes five tools: consensus, search, briefings, settlements, snapshots.

{
  "mcpServers": {
    "meridian-edge": {
      "command": "uvx",
      "args": ["meridian-edge-mcp"]
    }
  }
}
MCP install guide on GitHub →

Gemini — Gem

Query live prediction market consensus inside Google Gemini. Ask about any tracked event and get aggregated data in your conversation.

Open Gemini integration →

For informational purposes only. Not investment advice. Data aggregated from regulated prediction markets. See Risk Disclosure and Terms of Use.

Terms of Service  ·  Privacy Policy  ·  Risk Disclosure  ·  Contact

Data provided by Meridian Edge. Not investment advice. For informational purposes only.