Skip to main content

HTTP Endpoints

All routes are GET only.

PathReturns
/v1/health{height, genesisComplete, chainId, tvlCapBps, tvlCapStatus, canopyTotalStake, tvlCapUcnpyEffective, tvlUtilizationBps}
/v1/globalsCanoliqGlobals (singleton accounting record)
/v1/paramsCanoliqParams (governance-tunable knobs)
/v1/poolsCommittee 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/proposalsActive 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/spendsPending treasury-spend id list
/v1/spend/{id}TreasurySpend record
/v1/spend/{id}/approvalsMultisig approvals filtered to the current signer set
/v1/validatorsValidatorRegistry (canoLiq committee snapshot used for pro-rata)
/v1/stakersActive CPLQ stakers with amount and stakedAtHeight
/v1/graduationAutonomy-graduation metrics + composite eligible flag
/v1/restakingPer-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 tvlUtilizationBps well under 1000, and canopyTotalStake can read 0 until 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.