# ethernets.io - API All the API endpoints return JSON, and will have the `Content-Type` header set to `application/json`. Please try to be respectful, and not try to get loads of data with many requests. Please use the [SQLite snapshots][snapshots] for that purpose. Attribution is appreciated. ## /api/stats/ Every 30 minutes, a snapshot of the network is taken and saved to the `stats` database. The nodes in this database will only include "live" nodes, ones found via discovery in the last 24 hours. This endpoint will return the raw timeseries data from the `stats` database. Each row can be considered unique. ### Example requests #### Mainnet, synced nodes for the last 30 minutes ```bash curl https://www.ethernets.io/api/stats/ ``` #### Geth, Holešky, synced and un-synced nodes ```bash curl https://www.ethernets.io/api/stats/?client-name=geth&network=17000&synced=all ``` List of stats, grouped by: - `client_name` - `client_user_data` - `client_version` - `client_os` - `client_arch` - `network_id` - `fork_id` - `next_fork_id` - `country` - `synced` - `dial_success` With extra fields: - `timestamp` - The timestamp of the specific stat. - `total` - Count of the nodes matching the specified labels. ### URL parameters - before - RFC3339 timestamp. Return stats before this date. Required if `after` is given. If both `before` and `after` are not defined, the last 30 minutes is returned. - after - RFC3339 timestamp. Return stats after this date. Required if `before` is given. If both `before` and `after` are not defined, the last 30 minutes is returned. - network-id - Return stats filtered by this network ID. If one of the recognised networks, will only return nodes with fork IDs within this network. Default is 1, meaning mainnet. Use `-1` for all networks. - next-fork - Return stats with the value of `next-fork`. Default is all `next-fork` values. - next-fork-name - Return stats with the value of `next-fork-name`. Default is all values. Example: `next-fork-name=cancun` - synced - One of -1, 0, 1, or `all`, `no`, `yes`, respectively. Default is `yes` (synced). - client-name - Return stats for a specific client name. Default is all `client_name` values. ### Response #### Schema ```ts { "stats": [ { "timestamp": string, "client_name": string, "client_user_data": string|null, "client_version": string, "client_os": string, "client_arch": string, "network_id": number, "fork_id": string, "next_fork_id": number|null, "country": string, "synced": boolean, "dial_success": boolean, "total": number }, ... ] } ``` #### Example ```json { "stats": [ { "timestamp": "2023-12-12T19:00:00Z", "client_name": "besu", "client_user_data": null, "client_version": "v23.1.2", "client_os": "Linux", "client_arch": "amd64", "network_id": 1, "fork_id": "dce96c2d", "next_fork_id": null, "country": "Australia", "synced": true, "dial_success": false, "total": 1 }, ... ] } ``` [snapshots]: https://www.ethernets.io/snapshots/