API Reference

You push numbers over time. We return what cycle you're in, how you trend against peers, where something changed, what correlates with what, and what's probably coming next. Any domain. Any entity. Three API calls.

Base URL

https://intellistasis.com/api

Authentication

Pass your API key in the x-api-key header on every request. Keys are issued after email verification and expire after 7 days (trial) or with your subscription.

# Every request needs this header
curl https://intellistasis.com/api/v1/intelligence?domain=retail&entity=store-1 \
     -H "x-api-key: sk_stasis_YOUR_KEY"

You can also use Authorization: Bearer sk_stasis_YOUR_KEY. Both work identically.

No key yet? Get a free 7-day Pro trial at intellistasis.com/#getkey

Quick Start

Three calls. Push signals, run the engine, read the intelligence. That's it.

1
Push your signals — send a batch of time-series values for your domain and entity.
2
Run the engine — trigger cycle detection, trend analysis, anomaly detection, and correlation sweeps on your domain.
3
Read the intelligence — get back five structured outputs, ready for your AI agent to act on.
# 1 — Push signals
curl -X POST https://intellistasis.com/api/signals \
     -H "x-api-key: sk_stasis_YOUR_KEY" \
     -H "Content-Type: application/json" \
     -d '{"domain":"retail","entity_id":"store-north","signals":[
       {"metric":"daily_sales","value":12400,"ts":1750118400000},
       {"metric":"customer_footfall","value":890,"ts":1750118400000}
     ]}'

# 2 — Run the engine
curl -X POST "https://intellistasis.com/api/run?domain=retail" \
     -H "x-api-key: sk_stasis_YOUR_KEY"

# 3 — Read the intelligence
curl "https://intellistasis.com/api/v1/intelligence?domain=retail&entity=store-north" \
     -H "x-api-key: sk_stasis_YOUR_KEY"
const KEY = 'sk_stasis_YOUR_KEY';
const BASE = 'https://intellistasis.com/api';

// 1 — Push signals
await fetch(`${BASE}/signals`, {
  method: 'POST',
  headers: { 'x-api-key': KEY, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    domain: 'retail', entity_id: 'store-north',
    signals: [
      { metric: 'daily_sales',      value: 12400, ts: Date.now() },
      { metric: 'customer_footfall', value: 890,   ts: Date.now() },
    ]
  })
});

// 2 — Run the engine (do this after loading a batch, or on a schedule)
await fetch(`${BASE}/run?domain=retail`, {
  method: 'POST', headers: { 'x-api-key': KEY }
});

// 3 — Read the intelligence
const intel = await fetch(
  `${BASE}/v1/intelligence?domain=retail&entity=store-north`,
  { headers: { 'x-api-key': KEY } }
).then(r => r.json());

console.log(intel.regime.current_state);     // "growing"
console.log(intel.boids.trend_state);         // "challenger"
console.log(intel.anomalies[0]?.metric);      // "daily_sales"
console.log(intel.correlations[0]?.metric_b);  // "customer_footfall"
console.log(intel.predictions[0]?.score);      // 0.67
import requests, time

KEY  = 'sk_stasis_YOUR_KEY'
BASE = 'https://intellistasis.com/api'
HDR  = {'x-api-key': KEY, 'Content-Type': 'application/json'}

# 1 — Push signals
requests.post(f'{BASE}/signals', headers=HDR, json={
    'domain': 'retail', 'entity_id': 'store-north',
    'signals': [
        {'metric': 'daily_sales',      'value': 12400, 'ts': int(time.time()*1000)},
        {'metric': 'customer_footfall', 'value': 890,   'ts': int(time.time()*1000)},
    ]
})

# 2 — Run the engine
requests.post(f'{BASE}/run?domain=retail', headers=HDR)

# 3 — Read the intelligence
intel = requests.get(
    f'{BASE}/v1/intelligence',
    headers=HDR, params={'domain': 'retail', 'entity': 'store-north'}
).json()

print(intel['regime']['current_state'])        # "growing"
print(intel['boids']['trend_state'])           # "challenger"

MCP Setup

Model Context Protocol

Intelli-Stasis is MCP-native. Add it to Claude Desktop, any MCP-compatible client, or your own agent framework. Your AI can call the intelligence engine as a native tool — no extra plumbing.

claude_desktop_config.json
{
  "mcpServers": {
    "intelli-stasis": {
      "url": "https://mcp.intellistasis.com",
      "headers": {
        "x-api-key": "sk_stasis_YOUR_KEY"
      }
    }
  }
}

Once connected, your AI agent can call push_signals, run_domain, get_intelligence, and get_context as native tools. Available on Pro and Enterprise tiers.

Signal Ingestion

POST /api/signals Push one or many signals into the engine

Write time-series data points into your domain. Accepts a single signal or a batch of up to 1,000. Duplicate data points (same domain + entity + metric + timestamp) are silently skipped — safe to call repeatedly.

Request body — single signal
{
  "domain":    "retail",          // your namespace — any lowercase string
  "entity_id": "store-north",    // entity within your domain
  "metric":    "daily_sales",    // what you're measuring
  "value":     12400,            // numeric
  "ts":        1750118400000    // Unix ms (or Unix s — auto-detected). Defaults to now.
}
Request body — batch (up to 1,000)
{
  "signals": [
    { "domain": "retail", "entity_id": "store-north", "metric": "daily_sales",      "value": 12400, "ts": 1750118400000 },
    { "domain": "retail", "entity_id": "store-north", "metric": "customer_footfall", "value": 890,   "ts": 1750118400000 },
    { "domain": "retail", "entity_id": "store-south", "metric": "daily_sales",      "value": 8750,  "ts": 1750118400000 }
  ]
}
Response
{
  "ok":      true,
  "written": 3,       // new data points stored
  "skipped": 0,       // duplicates or invalid rows
  "errors":  []       // only present if any signals were rejected
}
Reserved domains: The following domain names are reserved for the built-in base layer and cannot be written to: macro, forex, equities, energy, supply_chain, food, demographics, employment, logistics, consumer, weather, political, news, intelligence, crypto, trends. Use any other name for your own domains.

Data Model

Every signal in the engine is identified by three fields. Think of them as namespace → entity → measurement.

domain
"retail"
Your namespace. One string per application area. The engine discovers all entities and metrics within it automatically.
entity_id
"store-north"
A unique actor within the domain. Could be a store, a user cohort, a product, a location — whatever you're tracking.
metric
"daily_sales"
What you're measuring. Any string. The engine reads all metrics for an entity and builds a composite picture.
value
12400
Numeric. Can be raw counts, rates, indices, ratios — the engine normalises internally before analysis.
ts
1750118400000
Unix timestamp in ms (or s — auto-detected). Omit to default to now. Historical backfills are fully supported.

You can have multiple domains in one account, multiple entities per domain, and as many metrics per entity as you like. The engine adapts its analysis granularity automatically based on the data density you provide (daily, weekly, or monthly bucketing).

Signal Types

You don't need all of these — the engine works with whatever you have. But the more signal types you push, the richer the output. These are the six types the engine is designed to receive:

Primary series
The main thing you're tracking. Daily sales, monthly MRR, weekly active users, production output. This is always the core signal.
Position
Where the primary series sits relative to its historical range — expressed as a 0–100 percentile or a % from peak/trough. Helps the engine detect overbought/oversold states.
Velocity
The rate of change — period-over-period growth rate, momentum score, or slope. Distinguishes "high and flat" from "rising fast."
Activity
A volume or engagement proxy. Footfall, page views, API calls, transaction count. Divergence between activity and the primary series is an early warning signal.
Sentiment
A qualitative or scored signal — NPS score, review sentiment, support ticket volume, news tone. The "why" layer that confirms or contradicts quantitative moves.
Peer context
How this entity compares to others in its domain. Pass the same metrics for multiple entities and the engine automatically builds the peer group and positions each entity within it.

Intelligence Engine

POST /api/run Run all algorithms on a domain

Triggers the full analysis pipeline on all entities and metrics in your domain. This discovers what's in the domain automatically — no entity list required. Run after a batch insert, or on a schedule that matches your data cadence.

ParamTypeRequiredDescription
domainstringrequiredYour domain name, e.g. retail. Can be passed as a query param or in the request body.
Example
curl -X POST "https://intellistasis.com/api/run?domain=retail" \
     -H "x-api-key: sk_stasis_YOUR_KEY"
Response
{
  "ok":      true,
  "domain":  "retail",
  "entities": 4,    // how many entities were analysed
  "elapsed_ms": 812
}
When to run: Call this after pushing a meaningful batch of new data. For real-time feeds, running once per hour or per day is usually sufficient. The engine auto-selects daily, weekly, or monthly granularity based on the density of what you've pushed.
GET /api/v1/intelligence Read all five outputs for an entity

The primary read endpoint. Returns all five intelligence outputs for a single entity in your domain. Structured for direct injection into an AI agent's context window.

ParamTypeRequiredDescription
domainstringrequiredYour domain, e.g. retail
entitystringrequiredEntity ID, e.g. store-north
Example
curl "https://intellistasis.com/api/v1/intelligence?domain=retail&entity=store-north" \
     -H "x-api-key: sk_stasis_YOUR_KEY"
Full response shape
{
  "domain": "retail",
  "entity": "store-north",
  "as_of": "2026-06-17T09:14:22.000Z",

  // ── Output 1: Cycles ──────────────────────────────────────────────
  "regime": {
    "current_state":   "growing",         // declining | recovering | growing | accelerating
    "next_state":      "accelerating",
    "next_state_prob": 0.67,              // calibrated probability 0–1
    "updated_at":      "2026-06-17T..."
  },

  // ── Output 2: Trends ─────────────────────────────────────────────
  "boids": {
    "trend_state":     "challenger",      // leader | challenger | follower | lagging | diverging
    "leader":          "store-7",         // entity currently leading the peer group
    "lag_vs_leader":   2,                 // periods behind the leader
    "next_wave_score": 74.2,             // likelihood this entity leads the next move (0–100)
    "alignment":       0.81              // how closely this entity tracks the peer group
  },

  // ── Output 3: Anomalies ──────────────────────────────────────────
  "anomalies": [
    {
      "metric":         "daily_sales",
      "direction":      "down",            // up | down
      "magnitude_pct":  -23.4,            // % deviation from baseline at alarm point
      "cusum_value":    5.8,              // cumulative sum statistic — higher = more certain
      "alarm_ts":       1749340800000,   // when the structural change was detected
      "baseline_mean":  13200,
      "status":         "active"
    }
  ],

  // ── Output 4: Correlations ────────────────────────────────────────
  "correlations": [
    {
      "metric_a":  "daily_sales",
      "metric_b":  "customer_footfall",
      "domain_b":  "retail",            // may be a base layer domain, e.g. "consumer"
      "entity_b":  "store-north",
      "r":         0.84,               // correlation strength -1 to 1
      "lag":       1,                  // positive = metric_b leads metric_a by N periods
      "direction": "same"             // same | inverse
    }
  ],

  // ── Output 5: Predictions ────────────────────────────────────────
  "predictions": [
    {
      "stream":        "regime",
      "action_type":   "state_transition",
      "score":         0.67,             // calibrated probability 0–1
      "target":        { "next_state": "accelerating" },
      "created_at":    1750118400000,
      "outcome_hit":   null,            // null until the prediction horizon passes
      "accuracy_score": null
    }
  ]
}
Correlations include the base layer. If your signals correlate with built-in global signals (energy prices, consumer confidence, exchange rates, etc.) those cross-domain correlations will appear here automatically — with no extra work on your end.

Five Outputs

Every entity in every domain gets the same five outputs from the engine. Same structure regardless of whether you're tracking retail stores, SaaS products, or financial instruments.

01
Cycles
What phase is this entity in right now — declining, recovering, growing, or accelerating. Includes the probability of transitioning to the next phase.
02
Trends
Where this entity sits relative to its peers — leader, challenger, follower, lagging, or diverging. Includes who leads the group and by how many periods this entity lags.
03
Anomalies
Structural changes detected before they're visible in a dashboard — when something shifted from its established baseline, and by how much.
04
Correlations
What drives what, at what lag — including cross-domain correlations against the built-in base layer of global economic signals.
05
Predictions
Calibrated probability of what happens next. Confidence-scored, self-correcting — accuracy improves as the engine resolves more predictions against real outcomes.

Base Layer Included

Every account gets free access to 875,000+ built-in signals across 26 markets and 18 domains — global economic data back to 1960. Your signals are automatically cross-referenced against this base layer. If your retail sales correlate with consumer confidence or your SaaS churn tracks the NASDAQ, the correlation engine finds it.

The base layer endpoints give direct access to these built-in signals and the intelligence computed on top of them.

GET /api/v1/context Full intelligence context for a built-in market

Returns the full intelligence context for a built-in market entity — signals, cycle state, trend position, structural breaks, correlations, and a risk summary. The primary endpoint for the economic base layer.

ParamTypeRequiredDescription
entitystringone ofMarket code, e.g. VN, IN, BR
entitiesstringone ofComma-separated codes for bulk fetch, e.g. VN,TH,MY
qstringone ofNatural language query, e.g. Vietnam manufacturing outlook
Example
curl "https://intellistasis.com/api/v1/context?entity=VN" \
     -H "x-api-key: sk_stasis_YOUR_KEY"
GET /api/v1/market/:m/[output] Specific intelligence output for a market

Drill into one intelligence output for a built-in market. Replace :m with a market code (e.g. VN) and [output] with one of the available types:

OutputDescription
mriManufacturing Readiness Index — composite FDI, employment, trade demand score
qwiWho's Quietly Winning — identifies markets gaining share before it shows in conventional data
politicalPolitical risk profile — governance quality, geopolitical alignment, fiscal posture
regimeMacro cycle state — expansion, transition, or stress
boidsFlock dynamics — market position and trajectory within the peer group
alertsActive commodity and capacity alerts for this market
Examples
curl "https://intellistasis.com/api/v1/market/VN/mri"   -H "x-api-key: ..."
curl "https://intellistasis.com/api/v1/market/IN/regime" -H "x-api-key: ..."
curl "https://intellistasis.com/api/v1/market/BR/boids"  -H "x-api-key: ..."

Available market codes: VN TH MY ID PH KH IN BD MX BR TR PL NG ZA MA SA AE (growth markets) + US CN DE GB AU NZ RU (reference markets).

Error Codes

All errors return JSON with an error field. HTTP status codes follow standard conventions.

StatusMeaningCommon cause
400 Bad Request Missing required parameter, invalid body, or reserved domain name used in /api/signals
401 Unauthorized Missing, invalid, or expired API key. Check the x-api-key header and key expiry.
403 Forbidden Attempting to write to a reserved system domain, or accessing a feature not included in your tier.
429 Rate Limited Daily call limit reached for your tier. The response includes your current limit and a link to upgrade.
500 Internal Error Something went wrong on our end. The error field has the detail. Retry after a short delay.
Error response shape
{
  "error": "API key expired. Renew your subscription at intellistasis.com."
}

Rate Limits

Call limits are per API key per calendar day (UTC). The 7-day trial runs at Pro limits.

Tier Daily calls MCP access Cross-domain correlations Custom domains
Starter 5,000 / day
Pro 50,000 / day
Enterprise Unlimited

A "call" is counted per HTTP request to any key-gated endpoint. Batch signal ingestion counts as 1 call regardless of how many signals are in the batch. Upgrade your plan →