Metrics / routstr / network_summary
network_summary
The Routstr headline figures in ONE row - the four cards at the top of dev.nostrolo.gy/routstr plus the coverage dates and the exclusion ledger counts. A snapshot of the newest refresh, not a time series: no day axis, and nothing here is additive across calls.
unit
mixed
grain
current (UTC)
series
current state
key
routstr.network_summary@current
Parameters
| param | accepted values |
|---|---|
| grain | current - default current (omit to get the default) |
| from / to | current-state snapshot with no time axis - 'from'/'to' are rejected |
| format | csv | markdown |
Query it
MCP tool call against https://dev.nostrolo.gy/mcp (connect your agent):
{
"name": "nostrology_query_metric",
"arguments": {
"metric": "network_summary",
"domain": "routstr",
"grain": "current"
}
} Response: a plain-text envelope (window, freshness, column contract, this page's
caveats) followed by the data table (csv, or format: "markdown") at current grain.
Response columns
| name | type | description |
|---|---|---|
| refresh_generated_at | timestamp | generation instant of the refresh these figures come from |
| providers_announced | integer | distinct pubkeys with a genuine kind-38421 (routstr-provider-announcements) announcement, INCLUDING excluded ones |
| providers_reporting | integer | included providers with at least one ledger row ever |
| providers_active_30d | integer | included providers with nonzero daily activity in the 30d window |
| revenue_30d_sats | integer | reported revenue over the 30d window, in SATS (rounded once from msats) |
| requests_30d | integer | successful requests over the 30d window |
| tokens_30d | integer | tokens billed over the 30d window |
| revenue_alltime_sats | integer | all reported revenue (daily + weekly eras), in SATS |
| requests_alltime | integer | all successful requests reported |
| tokens_alltime | integer | all tokens billed |
| first_activity | date | earliest ledger day (weekly era included) |
| last_activity | date | newest ledger day (never today) |
| daily_ledger_from | date | first day with daily-grain coverage; NULL = none |
| weekly_ledger_from | date | first weekly-era bucket start; NULL = none |
| models_30d | integer | distinct named models with any activity in the 30d window ('(other)' excluded) |
| catalog_models | integer | size of the current curated kind-38423 (routstr-model-catalog) list; NULL = no catalog archived |
| mints | integer | distinct Cashu mint URLs across all announced providers |
| success_rate_30d | number | 1 - failed/total over fresh included providers' own trailing-30d summaries; NULL = no fresh reporter |
| excluded_test_nodes | integer | providers excluded as test/staging nodes |
| excluded_private_nodes | integer | providers excluded as private-endpoint-only |
| kind_squatters | integer | pubkeys publishing non-Routstr events on kind-38421 (routstr-provider-announcements) |
What is counted
Network aggregates cover INCLUDED providers only: test/staging-marked nodes and private-endpoint-only nodes are excluded (still listed, with the reason, by routstr.provider_leaderboard and the routstr.provider_profile record), and kind-38421 (routstr-provider-announcements) squatters are never providers.
Caveats
- Every usage number is SELF-REPORTED by each provider's own node in kind-38422 (routstr-analytics-snapshots) events and is unverifiable by construction (RIP-01 payments travel as Cashu tokens in HTTP headers, invisible on Nostr): a node can overstate, understate or stay silent, so read these as what the network says about itself.
- Every *_30d figure covers the last 30 COMPLETE UTC days before the refresh's generation instant (day-aligned: the refresh's day minus 30 through that day minus 1 - anchored to the REFRESH, not to the caller's date), daily buckets only.
- The two revenue columns are in SATS (the page's pre-converted headline values); every other Routstr metric serves millisats.
- The success_rate_30d column is self-reported twice over (each provider computes its own trailing window; we only aggregate) over included providers whose newest snapshot is at most 7 days old, and its request total includes failed and non-chat requests - read it as what the still-reporting network says about itself.
- Daily figures come from a ledger reconstructed by merging the UTC-grid buckets of EVERY archived snapshot's trailing windows (full-coverage-only, newest-wins); observed history is a FLOOR - a day a node later omits is kept, a gap longer than the windows' reach stays a gap - and today is never a ledger day.
Freshness in every response is data-derived: the newest routstr refresh's generation instant (nightly 02:45 UTC; the newest ledger day is the previous UTC day).