HTTP Endpoints
All routes are GET only.
| Path | Returns |
|---|---|
/v1/health | {height, genesisComplete, chainId, tvlCapBps, tvlCapStatus, canopyTotalStake, tvlCapUcnpyEffective, tvlUtilizationBps} |
/v1/globals | CanoliqGlobals (singleton accounting record) |
/v1/params | CanoliqParams (governance-tunable knobs) |
/v1/pools | Committee pool, treasury (CNPY/CPLQ), buyback, insurance, per-validator incentives, peak TVL, insurance target & funded-bps |
/v1/account/{addr} | Composite per-address view: CNPY + cCNPY + liquid CPLQ + stake + validator-incentive + vesting |
/v1/proposals | Active proposal id list |
/v1/proposal/{id} | Full Proposal record |
/v1/vote/{id}/{voter} | Vote cast by voter on proposal id |
/v1/buyback/{id} | Post-execution BuybackOrder for a passed buyback proposal |
/v1/spends | Pending treasury-spend id list |
/v1/spend/{id} | TreasurySpend record |
/v1/spend/{id}/approvals | Multisig approvals filtered to the current signer set |
/v1/validators | ValidatorRegistry (canoLiq committee snapshot used for pro-rata) |
/v1/stakers | Active CPLQ stakers with amount and stakedAtHeight |
/v1/graduation | Autonomy-graduation metrics + composite eligible flag |
/v1/restaking | Per-Canopy-committee policy + observed exposure + drift / compliance |
/v1/redemption/{addr}/{id} | A queued cCNPY → CNPY redemption record |
/v1/vesting/{addr} | Every vesting schedule for an address with cumulative unlocked-to-date |
Example Responses
Health Check
GET /v1/health
{
"height": 12345,
"genesisComplete": true,
"chainId": 2,
"tvlCapBps": 3300,
"tvlCapStatus": "active",
"canopyTotalStake": 100000000000,
"tvlCapUcnpyEffective": 33000000000,
"tvlUtilizationBps": 7350
}
tvlCapBps is the governance-set cap as a fraction of total Canopy stake (default 3300 =
33%; 0 = uncapped). tvlCapStatus is one of "uncapped", "active",
"awaiting-canopy-stake", "fail-closed" — operators rely on this to tell apart "cap
silently inactive" from "cap rejecting everything" when tvlCapUcnpyEffective is 0.
tvlCapUcnpyEffective is the live computed uCNPY cap (mulDiv(canopyTotalStake, tvlCapBps, 10_000); 0 when uncapped, awaiting Canopy stake, or fail-closed — pair with
tvlCapStatus to disambiguate). tvlUtilizationBps is totalPooledCnpy / tvlCapUcnpyEffective in basis points. See TVL Cap.
The example above is illustrative of a near-cap scenario (73.5% full). A freshly-launched testnet typically reports
tvlUtilizationBpswell under 1000, andcanopyTotalStakecan read0until validators begin staking on Canopy.
Pools
GET /v1/pools
{
"committeePool": "950000000",
"treasuryCnpy": "30000000",
"treasuryCplq": "0",
"buybackPool": "17000000",
"insurancePool": "4200000",
"validatorIncentives": [],
"peakTvlUcnpy": "1050000000",
"insuranceTargetUcnpy": "52500000",
"insuranceFundedBps": 800
}
See Insurance Fund for peakTvlUcnpy, insuranceTargetUcnpy,
and insuranceFundedBps.
Graduation
GET /v1/graduation
{
"metrics": [
{"name": "tvl_ucnpy", "value": 12000000000000, "threshold": 50000000000000, "met": false},
{"name": "active_validators", "value": 18, "threshold": 30, "met": false},
{"name": "turnout_bps", "value": 2100, "threshold": 1500, "met": true},
{"name": "daily_tx", "value": 4200, "threshold": 10000, "met": false},
{"name": "runway_months", "value": 1000000, "threshold": 12, "met": true}
],
"eligible": false
}
See Autonomy Graduation for what each metric means.
Restaking
GET /v1/restaking
{
"totalExposureUcnpy": 1500000,
"policy": [
{ "committeeId": 2, "targetWeightBps": 6000, "minStakeUcnpy": 500000, "maxStakeUcnpy": 0 },
{ "committeeId": 7, "targetWeightBps": 4000, "minStakeUcnpy": 0, "maxStakeUcnpy": 0 }
],
"allocations": [
{ "committeeId": 2, "stakeUcnpy": 1000000, "weightBps": 6666, "targetBps": 6000, "driftBps": 666 },
{ "committeeId": 7, "stakeUcnpy": 500000, "weightBps": 3333, "targetBps": 4000, "driftBps": -667 }
],
"policyCompliant": true
}
See Restaking Policy for the policy schema and drift semantics.
Globals
GET /v1/globals
{
"totalCcnpySupply": "1000000000",
"totalPooledCnpy": "1050000000",
"pendingRedemptionCnpy": "50000000",
"lastProcessedRewardPool": "950000000",
"cplqTotalSupply": "100000000000000",
"cplqCirculatingSupply": "25000000000000",
"nextRedemptionId": 42,
"genesisComplete": true,
"totalStakedCplq": "10000000000000",
"nextProposalId": 5,
"nextBuybackId": 2,
"nextSpendId": 3,
"nextUnstakeId": 7
}
Account
GET /v1/account/{addr}
{
"cnpy": "500000000",
"ccnpy": "250000000",
"liquidCplq": "1000000000",
"stakedCplq": "5000000000",
"stakedAtHeight": 10000,
"validatorIncentive": "100000",
"vesting": [
{
"scheduleId": 0,
"totalAmount": "10000000000",
"cliffHeight": 50000,
"startHeight": 50000,
"endHeight": 550000,
"claimedAmount": "2000000000",
"unlockedAmount": "3000000000"
}
]
}
Known Gaps
There are no per-address indexes for redemptions or unstaking-CPLQ records. To list those for an address, the caller needs the id (returned by the originating tx). A future iteration can add per-address indexes if operator demand emerges.