Skip to main content
Loading market data…
GET/api/v1/indicators/bull-market-peakHobbyist tier+ · 30 req/min

Aggregated cycle-signal dashboard — the JSON mirror of /indicators/bull-market-peak.

Every bull-market-peak signal computed in one shot: Pi Cycle, MVRV, MVRV Z-Score, 2Y MA Multiplier, Rainbow, NVT, Puell (Pro-gated), RHODL (Pro-gated). Each entry carries both a machine-readable `state` (status + score) and human-friendly `description` / `thresholdLabel` strings. `aggregate` is the dashboard-level heat score; `heat` is in [0, 1].

Query parameters

All query parameters are optional unless marked required.

NameTypeRequiredDefaultDescription
assetstringoptionalBTC
Short alphabetic asset code. Non-BTC assets are accepted but most signals will only fire when we have enough CoinMetrics coverage for them.

Response shape

Always wrapped in the standard envelope. Nullable fields are explicitly marked — treat missing numeric data as a real data-source gap, not as an error.

data payloadtypescript
// Wrapped in the standard envelope:
// {
//   data: /* shape below */,
//   meta?: { total?: number; limit?: number; offset?: number; ... }
// }

{
  asset: string;
  hasAnyData: boolean;
  hasSufficientData: boolean;
  aggregate: {
    triggered: number;
    total: number;
    heat: number;                   // 0–1
    tone: "calm" | "warming" | "hot";
  };
  signals: Array<{
    key: string;
    name: string;
    description: string;
    thresholdLabel: string;
    unitLabel: string;
    state: {
      status: "accumulate" | "neutral" | "distribute" | "sell";
      current: number;
      threshold: number;
      score: 0 | 1 | 2 | 3;
    };
    available: boolean;
    unavailableReason?: "pro_metric" | "insufficient_data" | "no_data";
    sparkline: number[];
  }>;
}

Example

Copy the curl, replace YOUR_KEY with a real key from your dashboard, and run.

Requestbash
curl -sS "http://localhost:3000/api/v1/indicators/bull-market-peak"
Responsejson
{
  "data": {
    "asset": "BTC",
    "hasAnyData": true,
    "hasSufficientData": true,
    "aggregate": { "triggered": 2, "total": 6, "heat": 0.41, "tone": "warming" },
    "signals": [
      {
        "key": "pi-cycle",
        "name": "Pi Cycle Top",
        "description": "111-DMA crossing above 2× 350-DMA — historic top marker.",
        "thresholdLabel": "111-DMA ≥ 2× 350-DMA",
        "unitLabel": "USD",
        "state": { "status": "neutral", "current": 54210, "threshold": 68400, "score": 1 },
        "available": true,
        "sparkline": []
      }
    ]
  },
  "meta": { "total": 8, "asset": "BTC" }
}

Notes

  • Puell Multiple and RHODL Ratio remain Pro-tier metrics and return `available: false, unavailableReason: "pro_metric"`.
  • Thresholds are the same ones rendered on /indicators/bull-market-peak — documented per signal in `cycle-signals.ts`.

Next

Check the error code reference, or get an API key to try the request against your own account.