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
View JSON Schema on GitHub

JSON Schema

cryptodataapi-com-current-regime-schema.json Raw ↑
{
  "$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.
All 92 tools →

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.