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.

calculation_version market-context-1.4 · taxonomy_version 1.0

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

FieldValuesMeaning
risk_modenormal | selective | defensiveHow restrictive the environment is. The single decision behind the next two fields.
new_risk_posturesupportive | conditional | unsupportiveWhether the MARKET supports new risk. Describes conditions, not your authority to trade.
confirmation_requirementlow | standard | highHow much independent confirmation the environment warrants before acting.
execution_authorityfalseAlways false. Signl never grants permission to trade; execution policy is entirely yours.
reason_codesarrayWhy the level is what it is. Branch on these rather than parsing the summary sentence.
confidence0–100How much to TRUST the classification — data coverage, benchmark agreement, coherence. Not a forecast probability.
validity.validbooleanWhether this read can be acted on at all.
validity.stalebooleanDerived from expires_at. If true, treat as no read.
validity.recommended_failure_policyblock_new_risk | proceed_under_own_policyWhat to do when the read cannot be trusted. Fail closed.
state_versionstringChanges ONLY when the state changes. Safe to cache on indefinitely.
compared_to_versionstring | nullThe version this state is a change FROM. change_status is meaningless without it.
state_hashsha256 hexContent 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_ofISO-8601When this was calculated.
last_observed_atISO-8601When 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_dateYYYY-MM-DDThe 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.

CodeMeaning
BROAD_TREND_STRONG_RISK_ONBroad trend strong risk on.
BROAD_TREND_RISK_ONBroad trend risk on.
BROAD_TREND_MIXEDBroad trend mixed.
BROAD_TREND_WEAKBroad trend weak.
BROAD_TREND_RISK_OFFBroad trend risk off.
PARTICIPATION_BROADParticipation broad.
PARTICIPATION_MIXEDParticipation mixed.
PARTICIPATION_NARROWINGParticipation narrowing.
RISK_PRESSURE_NORMALRisk pressure normal.
RISK_PRESSURE_ELEVATEDRisk pressure elevated.
RISK_PRESSURE_HIGHRisk pressure high.
DATA_QUALITY_DEGRADEDSome inputs were missing; restriction is escalated.
DATA_QUALITY_UNAVAILABLENo state could be computed. Treated as maximum caution.
CLASSIFICATION_STABILITY_LOWConfidence below 40 — the classification is unstable, so restriction is escalated.

4. Vocabulary

What Signl means by each entity type:

TermDefinition
macroA broad-market or index-level entity used as a reference point rather than a rotation candidate.
sectorOne 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_themeA durable investable idea that spans companies and often sectors — semiconductors, cybersecurity, uranium. Broader than a single sector and narrower than the market.
child_themeA subdivision of a parent theme with its own rotation behaviour. Memory inside semiconductors, for example: it can lead while the parent lags.
cross_sector_themeAn 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.

StateMeaning
ACCELERATING_LEADERLeading, and the lead is widening.
ESTABLISHED_LEADERLeading, and has been for a sustained period.
PULLBACK_IN_LEADERStill a leader, currently pulling back.
EMERGING_ROTATIONMoving up the ranking from behind; the lead is new.
FADING_LEADERWas leading; relative strength is deteriorating.
COUNTERTREND_BOUNCERising while the broader trend is against it.
LAGGARDBehind the universe, without a nascent turn.
INSUFFICIENT_DATANot 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

TierCredentialDataHistory (days)UniverseMCP tools
anonymousno keygate only0sample1
freefree keygate + rotation states30sample5

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.