Invarians
Authenticating…
LIVE
API v2.0, three primitives in a single signed payload
Attestation, HMAC-SHA256 over the canonical payload. Verifiable via /v2/verify (HMAC is symmetric: verification goes through Invarians today; an on-chain anchor for keyless verification is planned).
Regime, 12 signed codes on L1 (S1, S2+, S2- × D1, D2+, D2-, D2±); on L2 the demand grid carries the signal (D2± rare, Optimism only) while the structural axis stays nominal in practice, plus bridge state.
Delta, per-metric shift, shift_delta, shift_magnitude_delta and per-chain precursors[] (v3 design preview, calibrated per chain).
Read the methodology →
Infrastructure State
L1, Base Chains
L2, Rollup Chains
Bridges, variable-latency surfaces methodology BRIDGE_STATE_STRUCTURAL_v1.2
Network History
ETHEREUM
L1, ETHEREUM, last 28 hourly classifications
L2, ARBITRUM, last 28 hourly classifications
S1·D1 nominal S1·D2± (demand) S2±·D1 (structure) S2±·D2± (combined)
Regime distribution, last 28 hourly classifications
S1·D1 nominal S1·D2± (demand) S2±·D1 (structure) S2±·D2± (combined)
Configure your Agent
CALIBRATION STATUS  ,  API v2.0 live since 2026-04-30 with three primitives in a single signed payload (Attestation, Regime, Delta). L2 regimes on Arbitrum, Base, Optimism: 12 signed codes calibrated since 2026-05-01 (rhythm, continuity, sequencer_publish_latency). Bridges (variable-latency scope): 10 Circle CCTP V2 routes (ETH-paired bidirectional) and 10 Chainlink CCIP lanes hybrid V1.5 / V1.6 (4 lanes V1.6 chain-based on ETH ↔ ARB and ETH ↔ BASE, 6 lanes V1.5 lane-based on OP / POL / AVAX in both directions). Both protocols captured per message, capability_level: per_message_attested. CCTP V2 exposes the Circle ECDSA signature per message (crypto.anchor: circle_ecdsa, retrievable via /v2/cctp/attestation/{nonce} — V2 keys retrieval by the Circle-attributed nonce). CCIP matches source send and destination execute by bytes32 messageId (retrievable via /v2/ccip/message/{message_id}); crypto.anchor is null today (no per-message cryptographic anchor captured yet for CCIP).
Integration pattern

        
Pattern Reference, configure your agent policy →
Delta, Primitive 3

The Delta is a continuous reading of how far each classifying observable has moved from its long-term baseline (~30 days), and whether the deviation is growing or reverting. Soft slowdowns and slow drifts that do not flip the regime still surface here. Each classifying observable carries a MetricBlock in diagnostic mode. The v3 redesign adds a per-chain precursors[] array carrying calibrated boolean flags with axis, lead, lift, and cross-chain status (calibration is chain-type-exclusive).

ratio: short EMA value, the same one the regime classifier reads.
ratio_long: long-term baseline (~30 days).
shift: how far the metric has moved from baseline (signed).
shift_delta: direction of value movement between two consecutive cycles.
shift_magnitude_delta: whether the deviation is growing or shrinking.
Per-axis aggregate exposed under legacy JSON key drift on each panel entry (structural and demand axes), flagged predictive_status: "deprecated_unvalidated" in v3 after FDR testing on 2025 corpora.
python
panel = client.get_panel_v2(chains=["optimism"], include="diagnostic")
op    = next(e for e in panel.l2 if e.chain == "optimism")
shift = op.structural.metrics["sequencer_publish_latency"].shift

if shift > 0.5:
    finality_buffer = nominal_buffer * (1 + shift)
    audit.annotate(shift=shift, buffer_extended=True)

Per-metric shift on a given observable activates once the long-term EMA stabilizes (~30 days post-launch). Before activation, the panel exposes the raw value and the agent can derive its own deviation against a self-computed baseline. shift_available: false per metric until then.

Regime deviation, norm analysis
Integration
Loading…
Save this key, shown only once
Copy and store it securely. It will never be shown again.
Historical State Reference

Invarians certifies network state. The table below documents what each state has looked like historically. No action is prescribed, your agent defines its own policy.

L1 regime frequency, Ethereum reference (4-year backtest · 34,697 windows)
Regime Freq. Documented events What was observed
S1D1 95.4% Baseline All axes within calibrated parameters.
S2D1 3.0% ETH Merge (Sept 2022) · ETH Shanghai (Apr 2023) · POL Reorg Storm (Feb 2023) · SOL ×4 outages (2021–2022) Structural rhythm deviation (τ). Demand nominal. Fee monitors: silent.
S1D2 1.7% ETH DeFi Summer (2020) · ETH NFT Mania (2021) · POL Gas Crisis (May 2021) · POL Network Halt (Mar 2021) Demand elevated (π). Structural layer nominal. Infrastructure functioning correctly under elevated load.
S2D2 0.2% No ground truth event documented Both axes above calibrated thresholds simultaneously. Not observed in 4 years of ETH data.
Bridge state, documented events
State Documented event What was observed
BS1 Baseline Variable-latency bridge surface within calibrated bounds under methodology BRIDGE_STATE_STRUCTURAL_v1.2. Fast-mode window invariants hold (success rate ≥ 0.995, fallback rate ≤ 0.05) and invariant I5 is muted (no Standard-mode message older than 48 h without an Iris attestation). Circle Iris and Chainlink RMN healthy.
Account
Requests, 30d
Chains queried
Avg / day
Email
Plan
Status
Daily limit
Signature Verification

Every attestation returned by the API includes a cryptographic signature (inv_sig_...).
This signature is generated with HMAC-SHA256 and can be independently verified using the /v2/verify endpoint.

Verify endpoint
POST /v2/verify
Content-Type: application/json

{
  "payload":   { /* panel object without signed_execution_context */ },
  "signature": "hmac-sha256:..."
}

→ { "valid": true, "key_id": "invarians-v1", "version": "2.0.0" }
Python example
import requests

response = requests.get(
    "https://api.invarians.com/v2/panel",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    params={"include": "diagnostic"},
)
data = response.json()

# Verify the signature independently (strip signed_execution_context from payload)
sec     = data["signed_execution_context"]
payload = {k: v for k, v in data.items() if k != "signed_execution_context"}

verify = requests.post(
    "https://api.invarians.com/v2/verify",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"payload": payload, "signature": sec["signature"]}
)
print(verify.json())  # → {"valid": true, "key_id": "invarians-v1", "version": "2.0.0"}