API Docs
Everything you need to list your chain on Blocktivity — the required JSON shape, audit endpoints, transaction-definition rules, and verification.
How it works
Blocktivity is designed to be self-sustaining. We ask each chain to own its data — to provide a stable API endpoint that counts its own transactions — rather than requiring Blocktivity to run chain-specific indexers. This means:
- A chain can be listed with a single required endpoint (daily transaction count).
- The chain controls its data accuracy and uptime.
- Blocktivity publishes honest data-status labels rather than pretending to independently verify everything.
The more endpoints a chain provides, the higher the data-status it can achieve. But the minimum ask is intentionally low so that any chain can participate.
Required fields
A chain cannot be listed without all of these. Submit them via the Add Your Chain form.
| Field | Type | Notes |
|---|---|---|
| name | string (1–60) | Chain display name |
| symbol | string (1–12, ^[A-Za-z0-9]+$) | Ticker; drives the coin URL (e.g. SOL → /coin/sol_0) |
| website | URI (https) | Official chain website |
| contactEmail | Listing correspondence; not shown publicly | |
| txEndpoint | URI (https) | Daily-Tx endpoint (see tx-endpoint shape below) |
| txDefinition | object (7 fields) | Full C-TXDEF disclosure — all 7 fields required |
The tx-endpoint shape
The URL you provide in txEndpoint must return a JSON object. Required fields:
// Required { "transactions": 1204887, // integer ≥ 0 "period_start": "2026-06-27T00:00:00Z", // ISO 8601 UTC "period_end": "2026-06-27T23:59:59Z", // ISO 8601 UTC "updated_at": "2026-06-27T14:15:00Z" // must be within 24h of fetch time } // Optional but strongly recommended { "chain": "Solana", "chain_id": "sol_0", "period": "24h", "from_block": 290000000, "to_block": 290100000, "transaction_definition": "successful user-submitted", "failed_transactions_included": false, "system_transactions_included": false }
- Blocktivity fetches this endpoint hourly. Ensure it is stable and returns within 10 seconds.
- If
updated_atis more than 24 hours old, the chain will be marked stale. - Additional fields in the response are ignored —
additionalPropertiesis allowed.
Recommended fields & endpoint tiers
These fields are optional at submission time — but each one unlocks a higher data-status badge and strengthens trust on the site.
| Tier | Endpoints provided | Data-status achieved |
|---|---|---|
| Minimum only | txEndpoint | Self-Reported |
| + freshness | txEndpoint + latestBlockEndpoint | Self-Reported |
| + auditability | txEndpoint + latestBlockEndpoint + blockDetailEndpoint + rangeCountEndpoint | auditable-api |
| Official submission | Any of the above + verified authenticity | Official API |
| Sourced by Blocktivity | n/a (no submission required) | Public Source |
| Field | Type | Notes |
|---|---|---|
| logoUrl | URI | Falls back to CoinGecko / CoinMarketCap if absent |
| explorerUrls | array of URIs | Enables cross-source block-number freshness checks |
| socialUrls | array of URIs | Displayed on the coin page |
| latestBlockEndpoint | URI (https) | Required for auditable-api status |
| blockDetailEndpoint | URI template with {block} | Required for auditable-api status (random-block sampling) |
| rangeCountEndpoint | URI template with {from} and {to} | Strongest auditability signal |
| protocol | string | e.g. PoS, DPoS, PoW, PoH |
| protocolName | string | Human-readable protocol label |
| blockIntervalMs | integer ≥ 0 | Average block time in milliseconds |
| idCg | string | CoinGecko coin id |
| idCmc | integer | CoinMarketCap id |
| authenticity | object | Source verification method (see authenticity section) |
Transaction-definition disclosure
All 7 fields of txDefinition are required. They are displayed on your coin page so visitors understand exactly what your number means. See Methodology → Transaction definition for the full field reference.
{
"txDefinition": {
"successful": "included",
"failed": "excluded",
"system": "excluded",
"internal": "n-a",
"batched": "individually",
"rollup": "n-a",
"window": "rolling-24h"
}
}Authenticity verification
Authenticity verification proves that the submission came from a legitimate party. It does not verify the truth of the transaction numbers. Five methods are accepted:
| Method | How | Details |
|---|---|---|
| dns-txt | Add a DNS TXT record | Add blocktivity-verify=<token> to the chain's official domain |
| well-known-file | Upload a file | Serve at https://yourdomain/.well-known/blocktivity.json |
| github | GitHub verification | Completed from the official GitHub organisation |
| social | Social post | Post the verification code from the official X/Twitter account |
| explorer | Explorer operator | Official block explorer operator verifies from the explorer domain |
Authenticity verification is optional at submission time and can be completed asynchronously via the claim flow. Unverified submissions receive provisional status; verified submissions from official teams qualify for official-api status.
Test your endpoint
Paste your txEndpoint URL to check it against the required JSON shape before submitting.
Common errors
| HTTP | Name | Cause |
|---|---|---|
| 400 | Validation error | Missing required fields, invalid types, or a txDefinition field is missing. |
| 400 | Honeypot triggered | The _confirm field in the payload was non-empty (bot protection). |
| 429 | Rate limited | Too many submission attempts from the same IP. |
| 500 | Internal error | Server error — try again; if persistent, contact us via the contact form. |
Important
To appear accurately on Blocktivity, your chain must provide a stable transaction-activity endpoint. If your endpoint fails, your chain may be marked stale or removed from the active leaderboard until the issue is fixed.
Questions? Contact us or check the Methodology for data-status definitions.