Signl Market Context
Agent reference
A deterministic market decision state for autonomous agents. One call replaces several market-data requests, a feature-engineering step, and an inference pass. No language model is involved in producing it.
The Daily Market Gate is free and needs no account — start with the curl below. A free key adds sector and theme rotation states, more history and the full MCP tool set.
Get a free key See agent plans
Registration is an email and an agent name. No card for the free tier.
1. Start here — no credential
curl https://signl.markets/api/v1/public/gate
Polling? Use the compact form. Identical values, roughly half the tokens:
curl "https://signl.markets/api/v1/public/gate?format=compact"
Rate limit 3/day, 10/minute per IP, uncredentialed. A free key
raises it to 25/day. Cache on state_version — it changes
only when the state does, so a repeat poll that returns the same version
needs no reprocessing. Every request counts against the allowance.
2. The decision fields
| Field | Values | Meaning |
|---|---|---|
risk_mode | normal | selective | defensive | How restrictive the environment is. The single decision behind the next two fields. |
new_risk_posture | supportive | conditional | unsupportive | Whether the MARKET supports new risk. Describes conditions, not your authority to trade. |
confirmation_requirement | low | standard | high | How much independent confirmation the environment warrants before acting. |
execution_authority | false | Always false. Signl never grants permission to trade; execution policy is entirely yours. |
reason_codes | array | Why the level is what it is. Branch on these rather than parsing the summary sentence. |
confidence | 0–100 | How much to TRUST the classification — data coverage, benchmark agreement, coherence. Not a forecast probability. |
validity.valid | boolean | Whether this read can be acted on at all. |
validity.stale | boolean | Derived from expires_at. If true, treat as no read. |
validity.recommended_failure_policy | block_new_risk | proceed_under_own_policy | What to do when the read cannot be trusted. Fail closed. |
state_version | string | Changes ONLY when the state changes. Safe to cache on indefinitely. |
compared_to_version | string | null | The version this state is a change FROM. change_status is meaningless without it. |
state_hash | sha256 hex | Content hash of the snapshot. Compare two reads without diffing payloads. Not a signature — it proves the content is what we computed, not who computed it. |
as_of | ISO-8601 | When this was calculated. |
last_observed_at | ISO-8601 | When it was last reconfirmed unchanged. On a weekend as_of sits at Friday's close while this stays current — that is a shut market, not a dead feed. |
validity.market_date | YYYY-MM-DD | The trading session the underlying bars belong to. NOT the date in as_of, which is the calculation time. |
{
"risk_mode": "selective",
"new_risk_posture": "conditional",
"confirmation_requirement": "standard",
"execution_authority": false,
"reason_codes": [
"BROAD_TREND_RISK_ON",
"PARTICIPATION_MIXED"
],
"confidence": 87,
"validity": {
"valid": true,
"stale": false,
"recommended_failure_policy": "proceed_under_own_policy"
},
"state_version": "20260805T064313Z-00001"
}
3. Reason codes
Categorical and bounded. Branch on these instead of parsing prose. They say which inputs drove the level; component weights are not published.
| Code | Meaning |
|---|---|
BROAD_TREND_STRONG_RISK_ON | Broad trend strong risk on. |
BROAD_TREND_RISK_ON | Broad trend risk on. |
BROAD_TREND_MIXED | Broad trend mixed. |
BROAD_TREND_WEAK | Broad trend weak. |
BROAD_TREND_RISK_OFF | Broad trend risk off. |
PARTICIPATION_BROAD | Participation broad. |
PARTICIPATION_MIXED | Participation mixed. |
PARTICIPATION_NARROWING | Participation narrowing. |
RISK_PRESSURE_NORMAL | Risk pressure normal. |
RISK_PRESSURE_ELEVATED | Risk pressure elevated. |
RISK_PRESSURE_HIGH | Risk pressure high. |
DATA_QUALITY_DEGRADED | Some inputs were missing; restriction is escalated. |
DATA_QUALITY_UNAVAILABLE | No state could be computed. Treated as maximum caution. |
CLASSIFICATION_STABILITY_LOW | Confidence below 40 — the classification is unstable, so restriction is escalated. |
4. Vocabulary
What Signl means by each entity type:
| Term | Definition |
|---|---|
macro | A broad-market or index-level entity used as a reference point rather than a rotation candidate. |
sector | One of the ~11 GICS-style divisions of the US equity market. Signl measures each through a liquid proxy instrument, which is never published — the entity is 'Financials', not the fund used to price it. |
parent_theme | A durable investable idea that spans companies and often sectors — semiconductors, cybersecurity, uranium. Broader than a single sector and narrower than the market. |
child_theme | A subdivision of a parent theme with its own rotation behaviour. Memory inside semiconductors, for example: it can lead while the parent lags. |
cross_sector_theme | An idea that deliberately cuts across sector boundaries — its constituents sit in several sectors at once, so sector-level rotation will not capture it. |
Rotation states
The lifecycle stage of an entity's relative strength. Available with a
key, on /api/v1/context/sectors and
/api/v1/context/themes.
| State | Meaning |
|---|---|
ACCELERATING_LEADER | Leading, and the lead is widening. |
ESTABLISHED_LEADER | Leading, and has been for a sustained period. |
PULLBACK_IN_LEADER | Still a leader, currently pulling back. |
EMERGING_ROTATION | Moving up the ranking from behind; the lead is new. |
FADING_LEADER | Was leading; relative strength is deteriorating. |
COUNTERTREND_BOUNCE | Rising while the broader trend is against it. |
LAGGARD | Behind the universe, without a nascent turn. |
INSUFFICIENT_DATA | Not enough history to classify. Never inferred. |
5. Failing safely
Uncertainty escalates restriction here. A degraded read, a confidence below 40, or no computed state at all forces a more restrictive posture — never a permissive one. The alternative, falling back to "normal" when unsure, would hand an agent maximum latitude exactly when the read is least trustworthy.
Mirror that in your integration. If validity.valid is
false, or the endpoint is unreachable, treat it as
block_new_risk rather than as an absence of signal.
6. What a key adds
| Tier | Credential | Data | History (days) | Universe | MCP tools |
|---|---|---|---|---|---|
anonymous | no key | gate only | 0 | sample | 1 |
free | free key | gate + rotation states | 30 | sample | 5 |
The Daily Market Gate stays free and uncredentialed at every tier. Get a key.
7. MCP
https://signl.markets/mcp/
Streamable HTTP. Connects without a key and exposes
get_daily_market_gate; a key adds the remaining tools.
Header X-API-Key.