curl https://api.aioka.io/v1/cycle/status
{
"cyclePhase": "UNKNOWN",
"cyclePhaseVerdict": "HOLD",
"mvrvZ": -0.65,
"nupl": 0.354,
"sopr": 0.974,
"piCyclePhase": 0,
"piCyclePhaseName": "BOTTOM_ZONE",
"piCycleGapPct": -0.543,
"piCycleDaysToCross": null,
"piCycleMa111": 70984.25,
"piCycleMa3502x": 155409.43,
"blockHeight": 970446,
"daysSinceHalving": 906,
"daysToNextHalving": 552,
"halvingPhase": "HALVING_LATE",
"plainExplanation": "BTC sits 906 days past the April 2024 halving, beyond the window in which earlier cycle peaks fired. On-chain valuation looks cheap while holders are still in profit, so the phase is unclear: hold and wait for clearer signals.",
"lastUpdated": "2026-10-08T05:20:46Z",
"lastCouncilVerdictAt": "2026-10-08T05:22:57Z"
}
Public
Bitcoin Cycle Context
Where Bitcoin sits in its market cycle: phase, Pi Cycle Top, halving timing and on-chain valuation
GET
/
v1
/
cycle
/
status
curl https://api.aioka.io/v1/cycle/status
{
"cyclePhase": "UNKNOWN",
"cyclePhaseVerdict": "HOLD",
"mvrvZ": -0.65,
"nupl": 0.354,
"sopr": 0.974,
"piCyclePhase": 0,
"piCyclePhaseName": "BOTTOM_ZONE",
"piCycleGapPct": -0.543,
"piCycleDaysToCross": null,
"piCycleMa111": 70984.25,
"piCycleMa3502x": 155409.43,
"blockHeight": 970446,
"daysSinceHalving": 906,
"daysToNextHalving": 552,
"halvingPhase": "HALVING_LATE",
"plainExplanation": "BTC sits 906 days past the April 2024 halving, beyond the window in which earlier cycle peaks fired. On-chain valuation looks cheap while holders are still in profit, so the phase is unclear: hold and wait for clearer signals.",
"lastUpdated": "2026-10-08T05:20:46Z",
"lastCouncilVerdictAt": "2026-10-08T05:22:57Z"
}
This endpoint is public — no API key required. Powers the Cycle Intelligence card on
aioka.io/live and the
/cycle Telegram command.⚠️ Cycle context is market information, not financial advice.
Response Fields
| Field | Type | Meaning |
|---|---|---|
cyclePhase | string | Deterministic phase: BEAR_BOTTOM / EARLY_BULL / MID_BULL / LATE_BULL / TOP_SIGNAL / UNKNOWN (UNKNOWN when the signals do not fit one phase, e.g. MVRV-Z below 0 while NUPL is still above 0.25) |
cyclePhaseVerdict | string | Verdict implied by the phase (STRONG_BUY … STRONG_AVOID; HOLD for UNKNOWN) |
mvrvZ | number | null | MVRV Z-score (Coin Metrics) |
nupl | number | null | Net Unrealized Profit/Loss |
sopr | number | null | Spent Output Profit Ratio |
piCyclePhase | int | null | Pi Cycle Top phase code 0–4 |
piCyclePhaseName | string | null | BOTTOM_ZONE / EARLY_BULL / MID_BULL / LATE_BULL / TOP_SIGNAL |
piCycleGapPct | number | null | Gap between the 111-day MA and 2× the 350-day MA (fraction) |
piCycleDaysToCross | int | null | Estimated days until the two averages cross; -1 = diverging / already crossed |
piCycleMa111 | number | null | 111-day moving average of BTC (USD) |
piCycleMa3502x | number | null | 2 × 350-day moving average of BTC (USD) |
blockHeight | int | null | Current Bitcoin block height |
daysSinceHalving | int | null | Days since the April 2024 halving |
daysToNextHalving | int | null | Estimated days to the next halving |
halvingPhase | string | null | HALVING_RECENT / HALVING_EARLY / HALVING_MID / HALVING_LATE |
plainExplanation | string | 2–3 sentence plain-English summary (cycle agent, or a deterministic fallback) |
lastUpdated | string | ISO 8601 time the response was built |
lastCouncilVerdictAt | string | null | Time of the most recent BTC council verdict |
curl https://api.aioka.io/v1/cycle/status
{
"cyclePhase": "UNKNOWN",
"cyclePhaseVerdict": "HOLD",
"mvrvZ": -0.65,
"nupl": 0.354,
"sopr": 0.974,
"piCyclePhase": 0,
"piCyclePhaseName": "BOTTOM_ZONE",
"piCycleGapPct": -0.543,
"piCycleDaysToCross": null,
"piCycleMa111": 70984.25,
"piCycleMa3502x": 155409.43,
"blockHeight": 970446,
"daysSinceHalving": 906,
"daysToNextHalving": 552,
"halvingPhase": "HALVING_LATE",
"plainExplanation": "BTC sits 906 days past the April 2024 halving, beyond the window in which earlier cycle peaks fired. On-chain valuation looks cheap while holders are still in profit, so the phase is unclear: hold and wait for clearer signals.",
"lastUpdated": "2026-10-08T05:20:46Z",
"lastCouncilVerdictAt": "2026-10-08T05:22:57Z"
}
Response
Live BTC cycle context
Aggregated Bitcoin cycle context.
BEAR_BOTTOM | EARLY_BULL | MID_BULL | LATE_BULL | TOP_SIGNAL | UNKNOWN
Deterministic verdict from the phase classifier (STRONG_BUY -> STRONG_AVOID)
2-3 sentence non-trader summary of the current cycle position
-1 sentinel = diverging / already crossed
Most recent BTC council verdict timestamp (CYCLE_ANALYST agent runs as part of each council convene). NULL until first council fires.