API Reference
Global
Cross-market CantonCap metrics.
Every endpoint here authenticates with X-API-Key, answers in the standard envelope and fails with the standard error body.
Get the latest published Canton Ecosystem Fear & Greed Index
https://api.cantoncap.cc/v1/fear-and-greed/latestOne ecosystem-wide index with daily 00:00:00Z reference times. CMC-style semantics, not exact CMC compatibility. Delayed publication retains the previous observation with its original timestamp. No query parameters. Returns data: null before the first publication.
Parameters
This endpoint takes no parameters.
Request
curl -s "https://api.cantoncap.cc/v1/fear-and-greed/latest" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Latest published observation or null before the first publication.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": {
"value": 1,
"value_classification": "Extreme Fear",
"update_time": "2026-10-11T14:00:00.000Z"
}
}dataobjectnullable3 child fields
valueintegerPublished ecosystem-wide score. Bands: 0 to 19 Extreme Fear; 20 to 39 Fear; 40 to 59 Neutral; 60 to 79 Greed; 80 to 100 Extreme Greed.
value_classificationenumupdate_timedate-timeUTC daily reference time, unchanged by requests.
Headers
X-RateLimit-LimitRequests allowed in the current one-minute window.X-RateLimit-RemainingRequests left in the window.X-RateLimit-ResetUnix time, in seconds, when the window resets.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | Request validation failedA parameter is malformed, out of bounds or not one of its allowed values. |
| 401 | unauthenticated | A valid API key is requiredX-API-Key is missing or unknown. |
| 403 | forbidden | The API key does not resolve to an active planThe key expired, was suspended or has not started. |
| 429 | rate_limited | The request rate limit was exceededThe key's one-minute window is used up. Retry after Retry-After seconds. |
Get published Canton Ecosystem Fear & Greed Index history
https://api.cantoncap.cc/v1/fear-and-greed/historicalIntentional offset-pagination exception to the usual cursor contract. start is a 1-based record offset, not a date or timestamp. Apply offsets within the plan-permitted historical population, newest first. Missing days stay absent. Default limit is clamped to the plan page size; an explicit limit exceeding that cap returns 403. No history entitlement returns 403. Malformed or out-of-range pagination returns 400. After start=1 and limit=50, use start=51. New publications can shift offsets; no pinned multi-page snapshot is promised. Deduplicate by observation timestamp.
Parameters
startintegerqueryoptional1-based record offset within permitted history.
limitintegerqueryoptionalMaximum records, subject to the caller's plan page-size cap.
Request
curl -s "https://api.cantoncap.cc/v1/fear-and-greed/historical" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Newest-first observations; empty array when no permitted records remain.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": [
{
"value": 1,
"value_classification": "Extreme Fear",
"timestamp": "2026-10-11T13:59:12.000Z"
}
]
}dataarray of objects3 child fields
valueintegerPublished ecosystem-wide score. Bands: 0 to 19 Extreme Fear; 20 to 39 Fear; 40 to 59 Neutral; 60 to 79 Greed; 80 to 100 Extreme Greed.
value_classificationenumtimestampdate-timeUTC daily reference time, unchanged by requests.
Headers
X-RateLimit-LimitRequests allowed in the current one-minute window.X-RateLimit-RemainingRequests left in the window.X-RateLimit-ResetUnix time, in seconds, when the window resets.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | Request validation failedA parameter is malformed, out of bounds or not one of its allowed values. |
| 401 | unauthenticated | A valid API key is requiredX-API-Key is missing or unknown. |
| 403 | forbidden | The API key does not resolve to an active planThe key expired, was suspended or has not started. |
| 403 | quota_exceeded | The requested page exceeds the API plan limitAn explicit limit is above the plan's page size. |
| 429 | rate_limited | The request rate limit was exceededThe key's one-minute window is used up. Retry after Retry-After seconds. |
Get aggregate public Canton market metrics
https://api.cantoncap.cc/v1/global/metrics/latestParameters
convertstringqueryoptionalOne ISO-style quote currency code, or a comma-delimited set where the operation explicitly documents a bounded collection.
If-None-MatchstringheaderoptionalReturn 304 when this entity tag matches the current representation.
Request
curl -s "https://api.cantoncap.cc/v1/global/metrics/latest?convert=USD" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Latest global market metrics. 304 when If-None-Match matches.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": {
"network": "all",
"convert": "USD",
"tracked_assets": 31,
"active_markets": 12,
"active_venues": 6,
"fdv": "715482911.36",
"market_cap": null,
"liquidity_usd": "4120334.10",
"volume_24h": "1840221.55",
"volume": {
"selection_method": "venue_reported_aggregate",
"methodology_version": "v1",
"interpretation": "complete_total",
"coverage_detail": {
"unit": "USD",
"window": "24h",
"starts_at": "2026-10-11T14:00:00.000Z",
"ends_at": "2026-10-11T14:00:00.000Z",
"covered_seconds": 86400,
"retained": true,
"eligible_market_count": 1,
"included_market_count": 1,
"missing_activity_market_count": 1,
"unvalued_market_count": 1,
"partial_market_count": 1,
"incomplete_time_market_count": 1
},
"method": "trades",
"coverage": "complete",
"change_24h_pct": "7.31",
"as_of": "2026-10-11T14:00:00.000Z"
},
"last_updated_at": "2026-10-11T14:00:00.000Z"
}
}dataobject31 child fields
networkenumCanton network the record belongs to.
convertstringConversion currency of the values.
tracked_assetsintegeractive_marketsintegerMarkets currently active.
active_venuesintegerfdvdecimal stringnullableFully diluted valuation: price times the reported total supply. Null when the supply is missing, stale or withheld; unavailable is never zero.
market_capdecimal stringnullableNull for every asset today: no reviewed circulating-supply methodology exists. FDV is never substituted for it.
liquidity_usddecimal stringnullablevolume_24hdecimal stringnullableRolling 24-hour volume at the point's
timestamp. Not interval volume.volumeobjectnullable20 child fields
selection_methodenumnullableoptionalActual selected method. The legacy method field keeps its reported/trades enum.
methodology_versionstringoptionalinterpretationenumoptionalCompleteness applies to the measurement's own window, not the current wall clock. A zero is a value, not unavailable activity.
coverage_detailobjectoptionalCounts come from the selected evidence, never ticker nulls. Null means the detail was not recorded. Missing activity has no native or USD volume; unvalued activity has native volume but no selected USD. Partial and incomplete-time counts concern included markets and may overlap. Retained is null when retention status was not established. No restricted market identities are exposed.
12 child fields
unitenumwindowenumRolling window the values cover.
starts_atdate-timenullableStart of the window the snapshot covers.
ends_atdate-timenullablecovered_secondsnumbernullableSeconds of the window the observations cover.
retainedbooleannullableeligible_market_countintegernullableincluded_market_countintegernullablemissing_activity_market_countintegernullableunvalued_market_countintegernullablepartial_market_countintegernullableincomplete_time_market_countintegernullable
methodenumnullablereported(the venue's own aggregate) ortrades(observed trades); null when nothing was selected.coverageenumCoverage of the selected 24-hour volume measurement. It describes observations, not the venue.
change_24h_pctdecimal stringnullable24-hour change of the volume, in percentage points:
"1.5"means 1.5%.as_ofdate-timeoptionalMeasurement time of this volume, independent of the quote price update time.
last_updated_atdate-timeTime of the latest represented update. For calculated asset prices it is the stored calculation time. Decide acceptable age from it.
Headers
X-RateLimit-LimitRequests allowed in the current one-minute window.X-RateLimit-RemainingRequests left in the window.X-RateLimit-ResetUnix time, in seconds, when the window resets.ETagEntity tag of this representation. Send it back in If-None-Match.Cache-Controlprivate, no-cache: shared caches must not store the answer.VaryX-API-Key: the answer varies by key.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | Request validation failedA parameter is malformed, out of bounds or not one of its allowed values. |
| 401 | unauthenticated | A valid API key is requiredX-API-Key is missing or unknown. |
| 403 | forbidden | The API key does not resolve to an active planThe key expired, was suspended or has not started. |
| 404 | not_found | Global metrics are not available for this conversion currencyThe conversion currency is not one the aggregate is calculated in. |
| 429 | rate_limited | The request rate limit was exceededThe key's one-minute window is used up. Retry after Retry-After seconds. |