cryptodataapi-com · Schema
CurrentRegime
The single regime the market is currently classified into.
CompanyCryptoFinanceDataReal-timeMarket-Data
Properties
| Name | Type | Description |
|---|---|---|
| regime | stringnull | Machine id, null on cold start |
| id | integernull | |
| anchor | stringnull | |
| name | stringnull | |
| rationale | stringnull | Why this regime was selected |
| stage | stringnull | Sub-stage for Distribution (early_distribution|active_deleveraging) and Speculative Euphoria (alt_expansion|blow_off) |
| stage_label | stringnull | Human label for the sub-stage |
| euphoria_score | integernull | 0-100 froth gauge, present only for Speculative Euphoria |
| signals | object | The classifier inputs (health scores, condition, BTC dominance, volatility / meme / security overlays, OI, liquidations) — transparency. ALWAYS LIVE: these are read at `as_of`, whereas regime/id/name/ |
| raw | object | The live, ungated classification — what the cascade says about `signals` right now. Null only on a cold start. |
| as_of | stringnull | ISO-8601 timestamp of the classification |
| in_regime_since | stringnull | ISO-8601 ts the current committed regime was ENTERED — advances only when the regime actually changes, so consumers can show how long it has held |
| pending | object | Candidate regime awaiting confirmation by the anti-churn dwell gate. Null exactly when the live cascade already agrees with the committed regime (identical to `raw.matches_committed` being true) — not |
| stability | object | Continuous stability of the committed regime — always present once the first refresh lands, candidate or not |
| thresholds | object | Distance from each cascade cutoff to flipping, for building client-side hysteresis without guessing where the boundaries are |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/cryptodataapi-com/json-schema/cryptodataapi-com-current-regime-schema.json",
"title": "CurrentRegime",
"description": "The single regime the market is currently classified into.",
"x-generated": "2026-10-30",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/cryptodataapi-com-openapi.json#/components/schemas/CurrentRegime",
"properties": {
"regime": {
"title": "Regime",
"description": "Machine id, null on cold start",
"type": [
"string",
"null"
]
},
"id": {
"title": "Id",
"type": [
"integer",
"null"
]
},
"anchor": {
"title": "Anchor",
"type": [
"string",
"null"
]
},
"name": {
"title": "Name",
"type": [
"string",
"null"
]
},
"rationale": {
"title": "Rationale",
"description": "Why this regime was selected",
"type": [
"string",
"null"
]
},
"stage": {
"title": "Stage",
"description": "Sub-stage for Distribution (early_distribution|active_deleveraging) and Speculative Euphoria (alt_expansion|blow_off)",
"type": [
"string",
"null"
]
},
"stage_label": {
"title": "Stage Label",
"description": "Human label for the sub-stage",
"type": [
"string",
"null"
]
},
"euphoria_score": {
"title": "Euphoria Score",
"description": "0-100 froth gauge, present only for Speculative Euphoria",
"type": [
"integer",
"null"
]
},
"signals": {
"additionalProperties": true,
"type": "object",
"title": "Signals",
"description": "The classifier inputs (health scores, condition, BTC dominance, volatility / meme / security overlays, OI, liquidations) — transparency. ALWAYS LIVE: these are read at `as_of`, whereas regime/id/name/rationale describe the COMMITTED regime, which the dwell gate holds until a new candidate confirms. Compare against `raw` to see the two diverge."
},
"raw": {
"description": "The live, ungated classification — what the cascade says about `signals` right now. Null only on a cold start.",
"$ref": "#/$defs/RawClassification",
"nullable": true
},
"as_of": {
"title": "As Of",
"description": "ISO-8601 timestamp of the classification",
"type": [
"string",
"null"
]
},
"in_regime_since": {
"title": "In Regime Since",
"description": "ISO-8601 ts the current committed regime was ENTERED — advances only when the regime actually changes, so consumers can show how long it has held",
"type": [
"string",
"null"
]
},
"pending": {
"description": "Candidate regime awaiting confirmation by the anti-churn dwell gate. Null exactly when the live cascade already agrees with the committed regime (identical to `raw.matches_committed` being true) — nothing is accumulating, so there is no candidate to describe. For a field that is always populated, read `stability`.",
"$ref": "#/$defs/PendingRegime",
"nullable": true
},
"stability": {
"description": "Continuous stability of the committed regime — always present once the first refresh lands, candidate or not",
"$ref": "#/$defs/RegimeStability",
"nullable": true
},
"thresholds": {
"description": "Distance from each cascade cutoff to flipping, for building client-side hysteresis without guessing where the boundaries are",
"$ref": "#/$defs/RegimeThresholds",
"nullable": true
}
},
"type": "object",
"$defs": {
"PendingRegime": {
"properties": {
"anchor": {
"type": "string",
"title": "Anchor"
},
"regime": {
"type": "string",
"title": "Regime"
},
"name": {
"type": "string",
"title": "Name"
},
"count": {
"type": "integer",
"title": "Count",
"description": "Consecutive raw samples seen so far"
},
"needed": {
"type": "integer",
"title": "Needed",
"description": "Consecutive samples required to commit"
},
"since": {
"title": "Since",
"description": "ISO ts the candidate first appeared",
"type": [
"string",
"null"
]
},
"dwell_blocked_s": {
"type": "integer",
"title": "Dwell Blocked S",
"description": "Seconds still owed on the minimum-dwell floor. When >0 the candidate is FULLY confirmed (count >= needed) and is waiting only for the committed regime to satisfy its minimum hold — which is why count can sit above needed without committing.",
"default": 0
}
},
"type": "object",
"required": [
"anchor",
"regime",
"name",
"count",
"needed"
],
"title": "PendingRegime",
"description": "A candidate regime accumulating confirmations but not yet committed.\n\nSurfaced so a consumer can see a turn brewing before the committed regime\nactually changes (the anti-churn dwell gate requires ``needed`` consecutive\nsamples before a switch)."
},
"RawClassification": {
"properties": {
"anchor": {
"title": "Anchor",
"type": [
"string",
"null"
]
},
"regime": {
"title": "Regime",
"type": [
"string",
"null"
]
},
"name": {
"title": "Name",
"type": [
"string",
"null"
]
},
"id": {
"title": "Id",
"type": [
"integer",
"null"
]
},
"matches_committed": {
"type": "boolean",
"title": "Matches Committed",
"description": "False when the live cascade disagrees with the committed regime"
}
},
"type": "object",
"required": [
"matches_committed"
],
"title": "RawClassification",
"description": "What the cascade classifies RIGHT NOW, before the anti-churn dwell gate.\n\nThe published regime is the COMMITTED one, which by design lags the live\ninputs — so ``signals`` can stop meeting the committed regime's entry\ncondition while that regime is still served. Without this block that reads\nas contradictory data: a consumer sees ``rationale`` saying \"a security\nshock is active\" next to a ``security_stress`` below the trigger, with no\nway to tell the difference between \"stale by design\" and \"broken\".\n\n``matches_committed`` false is normal and expected — it means a turn is\nbeing evaluated; read ``pending.count``/``needed`` for how far along it is."
},
"RegimeStability": {
"properties": {
"score": {
"type": "number",
"title": "Score",
"description": "0-1 blend: 0.6 * raw_agreement + 0.4 * (1 - confirmation pressure). Excludes locked_for_s deliberately — a hard guarantee and a soft estimate do not belong in one number."
},
"raw_agreement": {
"type": "number",
"title": "Raw Agreement",
"description": "Fraction of the last raw_samples ungated classifications that matched the committed regime. Decays smoothly as conditions drift, well before any candidate confirms."
},
"raw_samples": {
"type": "integer",
"title": "Raw Samples",
"description": "Samples currently in the window"
},
"raw_window": {
"type": "integer",
"title": "Raw Window",
"description": "Window size in samples (~15 min each)"
},
"confirmations_against": {
"type": "integer",
"title": "Confirmations Against",
"description": "Consecutive raw samples the current successor has accumulated (0 if none)"
},
"confirmations_needed": {
"type": "integer",
"title": "Confirmations Needed",
"description": "Consecutive samples a successor must accumulate — populated even with no candidate, so the pair is always interpretable"
},
"candidate": {
"title": "Candidate",
"description": "Anchor of the pending successor, or null",
"type": [
"string",
"null"
]
},
"held_s": {
"title": "Held S",
"description": "Seconds the committed regime has been held",
"type": [
"integer",
"null"
]
},
"dwell_floor_s": {
"type": "integer",
"title": "Dwell Floor S",
"description": "This regime's own minimum-hold floor, scaled to its catalog typical_duration (see /regimes typical_duration)"
},
"locked_for_s": {
"type": "integer",
"title": "Locked For S",
"description": "Seconds the committed regime is GUARANTEED to survive under the dwell floor. 0 means a confirmed successor could commit on the next refresh. Structural Shock can still pre-empt this."
}
},
"type": "object",
"required": [
"score",
"raw_agreement",
"raw_samples",
"raw_window",
"confirmations_against",
"confirmations_needed",
"dwell_floor_s",
"locked_for_s"
],
"title": "RegimeStability",
"description": "How firmly the committed regime is holding — always present, always numeric.\n\n``pending`` is null exactly when the live cascade agrees with the committed\nregime, so a consumer polling for \"is a turn brewing\" gets a field that\nblinks in and out of existence and carries no signal on a hold. This block\nis the continuous companion: it is emitted on every response, candidate or\nnot, so it can be differenced, thresholded, or fed to a risk sizer directly.\n\n``locked_for_s`` is the only HARD number here — the minimum-dwell floor\nmechanically prevents any change for that long. The one exception is a\nStructural Shock override, which is exempt from the floor by design."
},
"RegimeThresholds": {
"properties": {
"nearest": {
"description": "The measured check with the smallest distance",
"$ref": "#/$defs/ThresholdCheck",
"nullable": true
},
"checks": {
"items": {
"$ref": "#/$defs/ThresholdCheck"
},
"type": "array",
"title": "Checks"
}
},
"type": "object",
"required": [
"checks"
],
"title": "RegimeThresholds",
"description": "Distance to every numeric boundary in the cascade — the raw material for\nclient-side hysteresis.\n\nThe two CATEGORICAL inputs (``quant_label``, ``meme_season``) have no\ndistance by construction; read them from ``signals``."
},
"ThresholdCheck": {
"properties": {
"signal": {
"type": "string",
"title": "Signal",
"description": "Key in `signals` this check reads"
},
"op": {
"type": "string",
"title": "Op",
"description": "Comparison the cascade applies (>=, >, <=, <)"
},
"cutoff": {
"type": "number",
"title": "Cutoff"
},
"value": {
"title": "Value",
"description": "Live value, or null if the feed is down",
"type": [
"number",
"null"
]
},
"holds": {
"title": "Holds",
"description": "Whether the check passes right now",
"type": [
"boolean",
"null"
]
},
"distance": {
"title": "Distance",
"description": "Absolute move required to cross the cutoff, in the signal's own units. Does NOT indicate direction of travel.",
"type": [
"number",
"null"
]
},
"gates": {
"type": "string",
"title": "Gates",
"description": "What crossing puts in play — a regime anchor, or condition:<state> for the health-score cutoffs that drive the cascade's dominant input"
}
},
"type": "object",
"required": [
"signal",
"op",
"cutoff",
"gates"
],
"title": "ThresholdCheck",
"description": "One numeric cutoff the classifier cascade tests, and how far it is from flipping."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/cryptodataapi-com-current-regime"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.