API Reference
Activity
Stored volume and execution-count history.
Every endpoint here authenticates with X-API-Key, answers in the standard envelope and fails with the standard error body.
Get current activity for up to 100 markets
https://api.cantoncap.cc/v1/activity/markets/latestOne current stored snapshot per requested eligible market, in request order. Missing or ineligible markets are omitted. Each measurement keeps its own as_of, coverage and methods, exactly as in a single-market current read. No historical ranges or calculations on reads.
Parameters
idsstringqueryrequiredOne to 100 distinct stable market IDs, comma-separated. Each ID is at most 255 characters. Missing or ineligible markets are omitted.
networkenumqueryoptionalCanton network to read.
windowenumqueryoptionalRolling window of the activity.
Request
curl -s "https://api.cantoncap.cc/v1/activity/markets/latest?ids=mkt_4c2e9a7f1b3d4e5a9c8b7d6e5f4a3b21,mkt_9b8a7c6d5e4f4a3b2c1d0e9f8a7b6c5d&window=24h" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Current eligible market snapshots in request order.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": [
{
"entity_kind": "asset",
"entity_id": "ast_515c3eaa72bd4a8b9403297879d78ef6",
"network": "mainnet",
"window": "24h",
"as_of": "2026-10-11T14:00:00.000Z",
"starts_at": "2026-10-10T14:00:00.000Z",
"methodology_version": "v1",
"markets": [
{
"market_id": "mkt_4c2e9a7f1b3d4e5a9c8b7d6e5f4a3b21",
"venue_id": "temple",
"network": "mainnet",
"base_asset_id": "ast_515c3eaa72bd4a8b9403297879d78ef6",
"quote_asset_id": "ast_2d9c41e0b7a64f1e9c3b5a8d7e6f1c20"
}
],
"measurements": {
"volume_base": {
"value": "8342210.4",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_quote": {
"value": "1320455.18",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_native": {
"value": "8342210.4",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_usd_reported": {
"value": "1320455.18",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_usd_derived": {
"value": "1318902.77",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_usd": {
"value": "1320455.18",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"execution_count": {
"value": "1284",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
}
}
}
]
}dataarray of objects105 child fields
entity_kindenumKind of entity the activity describes.
entity_idstringID of the entity the activity describes.
networkenumCanton network the record belongs to.
windowenumRolling window the values cover.
as_ofstringEnd of the window the snapshot covers.
starts_atstringStart of the window the snapshot covers.
methodology_versionstringmarketsarray of objectsMarkets included in the snapshot.
5 child fields
market_idstringStable opaque CantonCap market ID, prefixed
mkt_.venue_idstringStable CantonCap venue ID, such as
templeorcantex.networkenumCanton network the record belongs to.
base_asset_idstringAsset ID of the base asset.
quote_asset_idstringAsset ID of the quote asset.
measurementsobjectEach measurement with its own value, coverage and methods.
91 child fields
volume_baseobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_quoteobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_nativeobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_usd_reportedobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableUSD volume as the venues report it.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_usd_derivedobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableUSD volume derived with CCXT exchange prices, kept separate from the reported figure.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_usdobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
execution_countobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
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 rolling volume and execution-count history
https://api.cantoncap.cc/v1/activity/{entity_kind}/{entity_id}Newest-first stored 24h, 7d or 30d activity. Default limit 1 returns the latest snapshot; in that current read a measurement the latest snapshot lacks keeps its latest usable value with that value's own as_of. time_start is inclusive and time_end exclusive; use the oldest returned as_of as the next time_end. History returns stored snapshots unchanged. Reported and CCXT-derived USD remain separate. Missing fields are null. Coverage is per measurement. No calculations are performed on reads.
Parameters
entity_kindenumpathrequiredKind of entity: a market, an asset, a venue or the whole network.
entity_idstringpathrequiredID of the entity: a market, asset or venue ID.
networkenumqueryoptionalCanton network to read.
windowenumqueryoptionalRolling window of the activity.
time_startdate-timequeryoptionalInclusive start of the range.
time_enddate-timequeryoptionalExclusive end of the range. Use the oldest returned as_of as the next time_end.
limitintegerqueryoptionalSnapshots to return. The default of 1 is the current snapshot.
Request
curl -s "https://api.cantoncap.cc/v1/activity/asset/ast_515c3eaa72bd4a8b9403297879d78ef6?window=24h" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Stored volume and execution-count snapshots, newest first.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": [
{
"entity_kind": "asset",
"entity_id": "ast_515c3eaa72bd4a8b9403297879d78ef6",
"network": "mainnet",
"window": "24h",
"as_of": "2026-10-11T14:00:00.000Z",
"starts_at": "2026-10-10T14:00:00.000Z",
"methodology_version": "v1",
"markets": [
{
"market_id": "mkt_4c2e9a7f1b3d4e5a9c8b7d6e5f4a3b21",
"venue_id": "temple",
"network": "mainnet",
"base_asset_id": "ast_515c3eaa72bd4a8b9403297879d78ef6",
"quote_asset_id": "ast_2d9c41e0b7a64f1e9c3b5a8d7e6f1c20"
}
],
"measurements": {
"volume_base": {
"value": "8342210.4",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_quote": {
"value": "1320455.18",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_native": {
"value": "8342210.4",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_usd_reported": {
"value": "1320455.18",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_usd_derived": {
"value": "1318902.77",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"volume_usd": {
"value": "1320455.18",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
},
"execution_count": {
"value": "1284",
"completeness": "complete",
"covered_seconds": 86400,
"methods": [
"reported"
]
}
}
}
]
}dataarray of objects105 child fields
entity_kindenumKind of entity the activity describes.
entity_idstringID of the entity the activity describes.
networkenumCanton network the record belongs to.
windowenumRolling window the values cover.
as_ofstringEnd of the window the snapshot covers.
starts_atstringStart of the window the snapshot covers.
methodology_versionstringmarketsarray of objectsMarkets included in the snapshot.
5 child fields
market_idstringStable opaque CantonCap market ID, prefixed
mkt_.venue_idstringStable CantonCap venue ID, such as
templeorcantex.networkenumCanton network the record belongs to.
base_asset_idstringAsset ID of the base asset.
quote_asset_idstringAsset ID of the quote asset.
measurementsobjectEach measurement with its own value, coverage and methods.
91 child fields
volume_baseobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_quoteobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_nativeobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_usd_reportedobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableUSD volume as the venues report it.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_usd_derivedobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableUSD volume derived with CCXT exchange prices, kept separate from the reported figure.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
volume_usdobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
execution_countobject12 child fields
market_coverageobjectoptionalFor selected USD volume only: counts over the same eligible market population and measurement window. Older snapshots omit it. Native quantities are never relabelled as USD.
6 child fields
eligible_market_countintegerincluded_market_countintegermissing_activity_market_countintegerunvalued_market_countintegerpartial_market_countintegerincomplete_time_market_countinteger
valuedecimal stringnullableThe measured value as an exact decimal string. Null when unavailable; never zero for unknown.
completenessenumcomplete,partialorunknown.covered_secondsnumberSeconds of the window the observations cover.
methodsarray of stringsMethods behind the value.
as_ofstringoptionalEnd of the window this value covers. Equals the snapshot as_of, except in a current read (no time_start or time_end, limit 1): when the newest snapshot has no value for this measurement, the latest usable value is kept with its own earlier as_of, coverage and methods. It is the window total at that time, not a complete current window.
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. |
| 400 | invalid_request | time_start must precede time_endThe range is empty or reversed. |
| 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. |
| 403 | quota_exceeded | The requested history exceeds the API plan limitThe range reaches further back than the plan's history depth. |
| 429 | rate_limited | The request rate limit was exceededThe key's one-minute window is used up. Retry after Retry-After seconds. |