Try it now — no API key needed
curl https://api.meridianedge.io/api/v1/status
Meridian Edge API
Programmatic access to Meridian Edge's derived signal analytics for prediction markets.
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.
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:
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):
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:
| Prefix | Tier |
|---|---|
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.
| Tier | Daily Calls | Signal Delay | Max Results | Direction | Event Names |
|---|---|---|---|---|---|
| Free | 50 | 30 min | 10 | Locked | Locked |
| Starter | 1,000 | 5 min | 25 | Visible | Locked |
| Pro | 10,000 | Real-time | 50 | Visible | Visible |
| Teams | 50,000 | Real-time | 100 | Visible | Visible |
| Enterprise | Unlimited | Real-time | 999 | Visible | Visible |
Rate limit headers are not currently included in responses. Check /api/v1/account for your current usage.
Endpoints
Returns API health and version. No authentication required.
{
"status": "ok",
"version": "1.0.0",
"tiers": ["free", "starter", "pro", "teams", "enterprise"],
"pricing": "https://meridianedge.io/pricing",
"documentation": "https://meridianedge.io/docs"
}
Query Parameters
| Parameter | Type | Description |
|---|---|---|
sport | string | Filter by sport (NBA, NFL, MLB, etc.) |
limit | integer | Max results (capped by tier). Default: 20 |
{
"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..."
}
Returns Meridian Edge analysis for a single event by its event_id. Full detail endpoint coming soon.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
min_score | float | Minimum opportunity score. Default: 5.0 |
sport | string | Filter by sport |
limit | integer | Max results. Default: 20 |
{
"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.
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.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of signals. Default: 10 |
{
"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.
Returns Meridian Edge's analysis of NWS public weather forecasts by city. Based entirely on publicly available National Weather Service data.
{
"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"
}
{
"data": [
{
"event_id": "a1b2c3d4e5f6",
"sport": "MLS",
"outcome": "correct",
"settled_at": "2026-03-22T20:00:00+00:00",
"sources": ["public_data"],
"verification": "confirmed"
}
]
}
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 |
|---|---|---|---|
| sport | string | all | Filter by sport/league (NBA, MLS, MLB…) |
| min_platforms | int | 2 | Minimum platforms required in consensus |
| min_spread | float | 0.0 | Minimum aggregated spread (e.g. 0.03 = 3%+) |
| limit | int | 20 | Max results (capped by tier) |
Tier Access
| Tier | Fields returned |
|---|---|
| Free | event_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} |
{
"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."
}
Returns the latest consensus snapshot for a specific event. Enterprise tier also returns history — up to 288 snapshots (24h at 5-min intervals).
{
"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."
}
{
"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:
{
// ... 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
| Code | Meaning | Resolution |
|---|---|---|
| 401 | Missing or invalid API key | Check your X-API-Key header. Get a key at meridianedge.io/pricing |
| 403 | Tier insufficient | This endpoint requires a higher tier. Upgrade at meridianedge.io/pricing |
| 429 | Daily rate limit exceeded | Wait until midnight UTC, or upgrade your tier |
| 500 | Internal server error | Retry after a few seconds. Contact support if persistent. |
{
"error": "Daily rate limit exceeded",
"limit": 50,
"upgrade": "https://meridianedge.io/pricing",
"source": "Meridian Edge"
}
Code Examples
Check API Status
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 -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 -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 -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
| Field | Type | Description |
|---|---|---|
id | integer | Unique signal identifier |
sport | string | Vertical category (sports, weather, economics) |
direction | string | Our signal direction: YES or NO (Pro+) |
event | string | Event description (Pro+) |
status | string | active or settled |
timestamp | ISO 8601 | When the signal was generated |
outcome | string | won / lost / pending (Pro+, settled only) |
entry_price | float | Our entry cost in USD (Pro+) |
Opportunity Fields
| Field | Type | Description |
|---|---|---|
event_id | string | Derived event identifier (hashed) |
opportunity_score | float | Derived divergence score (0–100). Higher = larger divergence. |
confidence | string | HIGH (>5pts), MEDIUM (3–5pts), LOW (<3pts) |
direction | string | Type of opportunity (cross_platform_divergence) |
detected_at | ISO 8601 | When the opportunity was detected |
What is NOT included
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.
Optional query param: ?sport=NBA (filters by sport). Header: X-API-Key: YOUR_KEY
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 -N -H "X-API-Key: me_free_demo000000000000" \
"https://meridianedge.io/api/v1/stream" --max-time 65
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.
Legal Notice
All data served by this API is derived data produced by Meridian Edge's proprietary analysis. This API does not redistribute raw data from any prediction market exchange or third-party platform. Meridian Edge's analysis constitutes our own intellectual property.
No Investment Advice
Nothing in this API, its documentation, or its responses constitutes investment advice, financial advice, market advice, or any other type of advice. You should not make any financial decision based solely on data from this API.
Risk Disclosure
Participation in prediction markets involves substantial risk of financial loss. Past performance of our signals does not guarantee future results. You may lose some or all of your invested capital.
Terms of Use
- API keys are non-transferable and for your use only
- You may not resell or redistribute API responses
- Commercial use requires an Enterprise license
- We reserve the right to revoke keys for abuse
Questions? Contact [email protected]