Bitnodes API v1.0
All API endpoints are available for public use without any authentication required. Requests originating from the same IP address is limited to a maximum of 50 requests per day.
Requests made using authenticated API key is limited to a maximum of 200,000 requests per day. Authenticated API key access is available only to PRO plan users. Python code sample to perform authenticated API request: sample-bitnodes-auth-api-client.py
The remaining limit you have available for the day is included in the ratelimit-remaining response header. Subsequent request after ratelimit-remaining: 0 will result in HTTP 429 Too Many Requests response with retry-after response header containing waiting time in seconds before your daily limit is restored.
Available endpoints:
- List snapshots
- List nodes
- List addresses
- Node status
- Node RTT
- Leaderboard
- Node ranking
- List data propagation
- Data propagation
- DNS seeder
New snapshot is generally available approximately every 10 minutes, so it is recommended that periodical requests are made at most every 10 minutes. Timestamps used in requests and responses are in Unix time in seconds unless specified otherwise in the documentation below.
List Snapshots
List all snapshots that are available on the server from the latest to oldest snapshot. Snapshots at this granularity are currently kept on the server for up to 60 days. Historical snapshots are available from the Bitnodes Archive page.
GET https://bitnodes.io/api/v1/snapshots/Parameters:
- page (optional) - Current page (1).
- limit (optional) - Number of snapshots to return (10). Max. 100.
Example:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/snapshots/
{
"count": 7918,
"next": "https://bitnodes.io/api/v1/snapshots/?page=2",
"previous": null,
"results": [
{
"url": "https://bitnodes.io/api/v1/snapshots/1764325181/",
"timestamp": 1764325181,
"total_nodes": 23877,
"latest_height": 925545
},
.
.
{
"url": "https://bitnodes.io/api/v1/snapshots/1764319476/",
"timestamp": 1764319476,
"total_nodes": 24032,
"latest_height": 925537
}
]
}List Nodes
List all reachable nodes from a snapshot.
GET https://bitnodes.io/api/v1/snapshots/<TIMESTAMP>/<TIMESTAMP> can be replaced with "latest" to get the list of all reachable nodes from the latest snapshot.
Pagination parameters are not available for this endpoint, as it simply returns the raw snapshot from the export directory used by the crawler. Each array in the response contains the following information:
- Protocol version
- User agent
- Connected since
- Services
- Height
Examples:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/snapshots/1764325181/
{
"timestamp": 1764325181,
"total_nodes": 23877,
"latest_height": 925545,
"nodes": {
"4tok4cqakfidrbv3yx4wi6rf23h7zu7mk6hhveufnfpbfllvdaynypqd.onion:8333": [
70016,
"/Satoshi:26.0.0/",
1764082507,
1033,
925545
],
.
.
"v3b3d6azksbrmr5mcf7oer7tnrgpswsndq4ge23hpfsr4lar3abkjmid.onion:8333": [
70016,
"/Satoshi:26.0.0/",
1764026751,
1037,
925545
]
}
}List Addresses
List all IPv4/IPv6/.onion addresses observed by the Bitnodes crawler in the Bitcoin peer-to-peer network.
GET https://bitnodes.io/api/v1/addresses/Parameters:
- page (optional) - Current page (1).
- limit (optional) - Number of addresses to return (10). Max. 100.
- q (optional) - Search addresses.
Examples:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/addresses/
"count": 6846677,
"next": "https://bitnodes.io/api/v1/addresses/?page=2",
"previous": null,
"results": [
{
"address": "77.7.103.205",
"port": 8333
},
.
.
{
"address": "212.104.214.204",
"port": 8333
}
]
}Node Status
Get status for an activated node. New node must be activated separately, i.e. from https://bitnodes.io/nodes/<ADDRESS>-<PORT>/, before it can be accessed from this endpoint.
GET https://bitnodes.io/api/v1/nodes/<ADDRESS>-<PORT>/The status string indicates the state for this node as of the last snapshot, taken approximately every 10 minutes. Possible values for status are:
- PENDING - The node has just been activated pending availability of a new snapshot.
- UP - The node is currently reachable.
- DOWN - The node is currently unreachable.
The data array contains the following information:
- Protocol version
- User agent
- Connected since
- Services
- Height
- Hostname
- City
- Country code
- Latitude
- Longitude
- Timezone
- ASN
- Organization name
The mbps string indicates the network speed for this node in megabits per second, measured by downloading a sample block. Value is null if not available.
The rtt integer indicates the ping round-trip time (RTT) for this node in milliseconds. Value is 0 if not available.
Example:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/nodes/84.247.181.69-8333/
{
"address": "84.247.181.69",
"status": "UP",
"data": [
70016,
"/Satoshi:30.0.0/",
1764322681,
3081,
925548,
"vmi2925806.contaboserver.net",
"Lauterbourg",
"FR",
48.9742,
8.1851,
"Europe/Paris",
"AS51167",
"Contabo GmbH"
],
"mbps": "20.773660",
"rtt": 20
}Node RTT
Get daily, weekly and monthly round-trip time (RTT) data for an activated node. New node must be activated separately, i.e. from https://bitnodes.io/nodes/<ADDRESS>-<PORT>/, before it can be accessed from this endpoint.
GET https://bitnodes.io/api/v1/nodes/<ADDRESS>-<PORT>/rtt/The daily_rtt array contains the daily average RTT for this node formatted as a time series data points with 15-minute interval and up to 1 day retention. The weekly_rtt array contains the weekly average RTT for this node formatted as a time series data points with 1-hour interval and up to 1 week retention. The monthly_rtt array contains the monthly average RTT for this node formatted as a time series data points with 1-day interval and up to 1 year retention. Each data point has the following keys:
- t - Timestamp of this data point.
- v - Average RTT of this node in milliseconds; v = -1 (node is unreachable), v = 0 (node is reachable but no RTT data is available).
Example:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/nodes/84.247.181.69-8333/rtt/
{
"daily_rtt": [
{
"t": 1764239400,
"v": -1
},
.
.
{
"t": 1764325800,
"v": 20
}
],
"weekly_rtt": [
{
"t": 1764057600,
"v": 0
},
.
.
{
"t": 1764324000,
"v": 20
}
],
"monthly_rtt": [
{
"t": 1764028800,
"v": 0
},
.
.
{
"t": 1764288000,
"v": 23
}
]
}
Leaderboard
List all activated nodes according to their Peer Index (PIX) in descending order.
GET https://bitnodes.io/api/v1/nodes/leaderboard/Parameters:
- page (optional) - Current page (1).
- limit (optional) - Number of nodes to return (10). Max. 100.
Example:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/nodes/leaderboard/
{
"count": 20265,
"next": "https://bitnodes.io/api/v1/nodes/leaderboard/?page=2",
"previous": null,
"results": [
{
"node": "5.183.173.201:8333",
"vi": "1.0000",
"si": "1.0000",
"hi": "1.0000",
"ai": "0.9960",
"pi": "1.0000",
"dri": "1.0000",
"dui": "1.0000",
"wri": "1.0000",
"wui": "1.0000",
"mri": "1.0000",
"mui": "0.9882",
"nsi": "0.9769",
"ni": "0.9195",
"bi": "1.0000",
"peer_index": "9.9147",
"rank": 1
},
.
.
{
"node": "[2a00:15c0:1002:200::2]:8333",
"vi": "1.0000",
"si": "1.0000",
"hi": "1.0000",
"ai": "0.9659",
"pi": "1.0000",
"dri": "1.0000",
"dui": "1.0000",
"wri": "1.0000",
"wui": "1.0000",
"mri": "1.0000",
"mui": "0.9927",
"nsi": "0.9503",
"ni": "0.9281",
"bi": "1.0000",
"peer_index": "9.8835",
"rank": 10
}
]
}
Node Ranking
Get ranking and associated Peer Index (PIX) data for an activated node. New node must be activated separately, i.e. from https://bitnodes.io/nodes/<ADDRESS>-<PORT>/, before it can be accessed from this endpoint.
GET https://bitnodes.io/api/v1/nodes/leaderboard/<ADDRESS>-<PORT>/Example:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/nodes/leaderboard/84.247.181.69-8333/
{
"node": "84.247.181.69:8333",
"vi": "1.0000",
"si": "1.0000",
"hi": "1.0000",
"ai": "0.7563",
"pi": "1.0000",
"dri": "1.0000",
"dui": "0.8969",
"wri": "0.0000",
"wui": "0.0000",
"mri": "0.0000",
"mui": "0.0000",
"nsi": "0.9769",
"ni": "0.0000",
"bi": "1.0000",
"peer_index": "6.1644",
"rank": 6967
}
List Data Propagation
List up to 100,000 recent invs (latest to oldest) with propagation stats available through data propagation endpoint. Bitnodes samples at most only 1000 transaction invs per block.
GET https://bitnodes.io/api/v1/inv/Parameters:
- page (optional) - Current page (1).
- limit (optional) - Number of invs to return (10). Max. 100.
Example:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/inv/
{
"count": 100000,
"next": "https://bitnodes.io/api/v1/inv/?page=2",
"previous": null,
"results": [
{
"inv_hash": "76e4d21b31eb1f98ea7ee8e7f5aae54d3f6a4768e06d40aa840ca7e712d17a55"
},
.
.
{
"inv_hash": "aea1f2849ae0323b491f73aa909ed9075229df5ec918284509856a8de4515243"
}
]
}Data Propagation
Get inv propagation stats in milliseconds for a block or transaction broadcasted over 8 hours ago. Stats are calculated based on the inv arrival times (UNIX time in milliseconds) from the first 1000 nodes.
GET https://bitnodes.io/api/v1/inv/<INV_HASH>/The stats contain the following information:
- head - Arrival times for the first 10 (or 1000 for newer inv) nodes in a list of ["<ADDRESS>:<PORT>", <TIMESTAMP>].
- min - Delta for earliest arrival time. Value can be 0 if the delta is less than 1 millisecond.
- max - Delta for latest arrival time.
- mean - Average of deltas.
- std - Standard deviation of deltas.
- 50% - 50th percentile of deltas.
- 90% - 90th percentile of deltas.
Example:
$ curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/inv/76e4d21b31eb1f98ea7ee8e7f5aae54d3f6a4768e06d40aa840ca7e712d17a55/
{
"inv_hash": "76e4d21b31eb1f98ea7ee8e7f5aae54d3f6a4768e06d40aa840ca7e712d17a55",
"stats": {
"mean": 2666,
"std": 1657,
"min": 51,
"50%": 1971,
"90%": 5136,
"max": 5252,
"head": [
[
"[2a10:3781:1d7:1:7a7b:8aff:fec1:45e7]:8333",
1764291842992
],
.
.
[
"95.188.96.17:8333",
1764291848244
]
]
}
}DNS Seeder
Get a list of reachable nodes to bootstrap your Bitcoin client connection to the Bitcoin network. The DNS records are generated using seeder.py.
DNS <RECORD> <PREFIX>seed.bitnodes.ioIPv4 nodes are returned via A records, IPv6 nodes are returned via AAAA records and .onion nodes are returned via TXT records.
seed.bitnodes.io returns a list of reachable nodes with NODE_NETWORK (1) service bit set. Prefix x[hex] is accepted to filter nodes by specific services. For example, x408.seed.bitnodes.io returns a list of reachable nodes that have both NODE_WITNESS (8) and NODE_NETWORK_LIMITED (1024) enabled; 8 + 1024 = 1032 = 0x408.
Example:
$ dig A seed.bitnodes.io seed.bitnodes.io. 60 IN A 86.60.175.240 seed.bitnodes.io. 60 IN A 91.228.45.103 seed.bitnodes.io. 60 IN A 92.60.65.30 . . seed.bitnodes.io. 60 IN A 83.100.202.111 seed.bitnodes.io. 60 IN A 85.74.251.27 seed.bitnodes.io. 60 IN A 85.238.112.85 $ dig AAAA seed.bitnodes.io seed.bitnodes.io. 60 IN AAAA 2404:7a87:9161:4d00:21e:6ff:fe55:1355 seed.bitnodes.io. 60 IN AAAA 2600:6c67:2100:590:6a09:b549:cec9:17fd seed.bitnodes.io. 60 IN AAAA 2605:6440:d000:252:ae1f:6bff:fef5:2d86 . . seed.bitnodes.io. 60 IN AAAA 2a12:8e40:5668:e429::1 seed.bitnodes.io. 60 IN AAAA 2001:18b8:0:100:0:b00b:420:69 seed.bitnodes.io. 60 IN AAAA 2001:1a40:1412:c100:41b6:2712:3b98:6fc2 $ dig A x408.seed.bitnodes.io x408.seed.bitnodes.io. 60 IN A 195.66.214.35 x408.seed.bitnodes.io. 60 IN A 69.57.163.200 x408.seed.bitnodes.io. 60 IN A 188.227.14.170 . . x408.seed.bitnodes.io. 60 IN A 101.99.88.32 x408.seed.bitnodes.io. 60 IN A 182.234.41.50 x408.seed.bitnodes.io. 60 IN A 77.235.26.96 $ dig TXT x408.seed.bitnodes.io x408.seed.bitnodes.io. 58 IN TXT "7flrzmv3wzvinla5bw2jnktkrlphk5jfreqzplzzk2fe4k32hi2f24ad.onion" x408.seed.bitnodes.io. 58 IN TXT "u4lrfh5kdkd6565pr4dfohjmgenkhiaw24elscug6dua3tn4kdvay3qd.onion" x408.seed.bitnodes.io. 58 IN TXT "wgjjh2bdv6p3k32u2n2zlxvrr7g3z74h5svgxdpukh75njjanupqz2ad.onion" . . x408.seed.bitnodes.io. 58 IN TXT "zvwiqn74pmdgglit5ycrlnalreupty2ildzmfetb47zyd4ohhnid5lqd.onion" x408.seed.bitnodes.io. 58 IN TXT "xju34neezacdrq7tjku5dlumhvkivmf7syja3uovcjt2bvg2r3vxctqd.onion" x408.seed.bitnodes.io. 58 IN TXT "dzx6hqglecczaxelov36kqy4xbodj66dg6qof52hcenld2qvph4naeqd.onion"