Internet Exchange Point Datasets
Packet Clearing House maintains the global directory of Internet exchange points. The directory reports on past and current IXPs, peering subnets used by the members to exchange traffic, locations, equipment and membership.
This page lists several API endpionts. If you are a network operator, policy-maker or academic researcher, this data might help in your research or analysis. Please get in touch with you think it could help but need guidance on how to use it.
API data is provided under the terms and conditions of the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Read here for full details of what you are entitled to do with the datasets.
We appreciate if you contact us to let us know that you are using the dataset. It helps us understanding the audience of the datasets and future needs.
If you have any questions regarding the datasets or would like to get in touch please email us at info@pch.net.
Make sure you fully understand the content of the dataset before incorporating into your analysis. If unsure, please email us at info@pch.net
IXP Directory
URL and parameters
This API lists every IXP in our database. It defaults to returning JSON:
https://www.pch.net/api/ixp/directory/(STATUS)
https://www.pch.net/api/ixp/directory/(STATUS)(?format=csv)
Such that:
STATUS
- is an optional value. It defaults toAny
but can beAny
,Active
,Defunct
,Deprecated
,Not_an_exchange
,Planned
orUnknown
.?format=csv
- this query string can optionally be added on. The default format is JSON, but passing this query string will result in CSV being returned instead.
Response (Toggle)
JSON objects and CSV rows will be returned with the following fields:id
- Internal PCH ID for this IXP. Example: "1"ctry
- Country of IXP. . Example: "Argentina"cit
- City of IXP. Example: "Buenos Aires"reg
- Region of IXP. Example: "Latin America"name
- Long name of IXP . Example: "Cubecorp"url
- URL of IXP. Example: "http://www.cubecorp.com.ar/"stat
- Status of IXP. Example: "Not an exchange"date
- Date IXP was established. Example: "0"prfs
- Number of prefixes at IXP. Example: "0"lat
- Latitude of IXP. Example: "-34.57000"lon
- Longitude of IXP. Example: "-58.42000"prts
- Number of Participants at IXP. Example: "0"traf
- Peak IPv4 traffic IXP in bytes. Example: "0"avg
- Average IPv4 traffic IXP in bytes. Example: "0"trgh
- Trough (lowest) IPv4 traffic IXP in bytes. Example: "0"ipv6_avg
- Average IPv6 traffic IXP in bytes. Example: "0.000000"pch
- If PCH is present at this IXP. Example: "No"updt
- Date IXP last updated. Example: "0000-00-00"tc_rank
- Traffic country rank . Example: nulltw_rank
- Traffic world rank. Example: nulltr_rank
- Traffic region rank. Example: nullpc_rank
- Participants country rank. Example: nullpr_rank
- Participants region rank. Example: nullpw_rank
- Participants world rank. Example: nullprts_url
- Participants list url. Example: nullq9
- If Quad9 is present at this IXP. Example: "No"iata
- IATA/POP code for this IXP based off PCH's database. Example: ""regct
- Region to active count. Example: 108
Example (Toggle)
A call to this API:
https://www.pch.net/api/ixp/directory/Active
Would return hundreds of rows, the first bit of which would be:
[ { "id": "2", "ctry": "Argentina", "cit": "Buenos Aires", "reg": "Latin America", "name": "CABASE IXP Buenos Aires", "url": "http:\\/\\/www.cabase.org.ar\\/nap-buenos-aires\\/", "stat": "Active", "date": "19980401", "prfs": "19798", "lat": "-34.57000", "lon": "-58.42000", "prts": "106", "traf": "9190000", "avg": "0", "trgh": "0", "ipv6_avg": "0.000000", "pch": "Yes", "updt": "2015-02-15", "tc_rank": "1", "tw_rank": "160", "pc_rank": "1", "pr_rank": "5", "pw_rank": "50", "tr_rank": "17", "prts_url": "http:\\/\\/www.cabase.org.ar\\/nap-buenos-aires\\/", "q9": "No", "iata": "EZE", "regct": 79 }, { "id": "6", "ctry": "Australia", "cit": "Melbourne", "reg": "Asia-Pacific", "name": "AUSIX", "url": "", "stat": "Active", "date": "20010700", "prfs": "0", "lat": "-37.82000", "lon": "144.97000", "prts": "7", "traf": "20000", "avg": "0", "trgh": "0", "ipv6_avg": "0.000000", "pch": "No", "updt": "0000-00-00", "tc_rank": "8", "tw_rank": "306", "pc_rank": "15", "pr_rank": "69", "pw_rank": "393", "tr_rank": "49", "prts_url": "", "q9": "No", "iata": "", "regct": 94 }, { "id": "8", "ctry": "Australia", "cit": "Melbourne", "reg": "Asia-Pacific", "name": "Victoria Internet Exchange", "url": "https:\\/\\/www.ix.asn.au\\/peering\\/", "stat": "Active", "date": "20110000", "prfs": "0", "lat": "-37.82000", "lon": "144.97000", "prts": "66", "traf": "74400000", "avg": "0", "trgh": "0", "ipv6_avg": "0.000000", "pch": "No", "updt": "2017-10-03", "tc_rank": "2", "tw_rank": "74", "pc_rank": "5", "pr_rank": "18", "pw_rank": "86", "tr_rank": "14", "prts_url": "https:\\/\\/www.ix.asn.au\\/peers-vic\\/", "q9": "No", "iata": "", "regct": 94 }, { "id": "9", "ctry": "Australia", "cit": "Perth", "reg": "Asia-Pacific", "name": "Western Australian Internet Association", "url": "http:\\/\\/www.ix.asn.au\\/peering.html", "stat": "Active", "date": "19970000", "prfs": "30979", "lat": "-31.93000", "lon": "115.95000", "prts": "81", "traf": "32070000", "avg": "0", "trgh": "0", "ipv6_avg": "0.000000", "pch": "Yes", "updt": "2017-10-03", "tc_rank": "3", "tw_rank": "107", "pc_rank": "4", "pr_rank": "16", "pw_rank": "75", "tr_rank": "23", "prts_url": "https:\\/\\/www.ix.asn.au\\/peers-wa\\/", "q9": "Yes", "iata": "PER", "regct": 94 }, { "id": "12", "ctry": "Australia", "cit": "Sydney", "reg": "Asia-Pacific", "name": "Equinix Sydney", "url": "http:\\/\\/www.equinix.com\\/resources\\/data-sheets\\/equinix-internet-exchange\\/", "stat": "Active", "date": "20030000", "prfs": "102049", "lat": "-33.95000", "lon": "151.17999", "prts": "177", "traf": "0", "avg": "0", "trgh": "0", "ipv6_avg": "0.000000", "pch": "Yes", "updt": "0000-00-00", "tc_rank": "7", "tw_rank": "283", "pc_rank": "2", "pr_rank": "4", "pw_rank": "28", "tr_rank": "46", "prts_url": "", "q9": "Yes", "iata": "SYD", "regct": 94 },
Subnets
URL and parameters
This API lists the subnets details for a specific IXP in our database. It defaults to returning JSON:
https://www.pch.net/api/ixp/subnets/IXP_ID
https://www.pch.net/api/ixp/subnets/IXP_ID(?format=csv)
Such that:
IXP_ID
- is a required value. It is the ID of the IXP as derived from the IXP Directory (/api/ixp/directory
) API call above.?format=csv
- this query string can optionally be added on. The default format is JSON, but passing this query string will result in CSV being returned instead.
Response (Toggle)
JSON objects and CSV rows will be returned with the following fields:id
- Internal PCH ID for this IXP. Example:"603"status
- Status of this subnet. Example:"Active"short_name
- Name of subnet. Example:"AMS-IX"version
- IP version. Example:"IPv6"subnet
- CIDR notation of the subnet. Example:"2001:7f8:1::/64"mlpa
- MLPA of subnet. Example:"Available"traffic
- Traffic in bytes of the subnet. Example:"63900000"participants
- Participants in the subnet. Example:"652"established
- Data subnet was established. Example:"0"traffic_url
- Page containing MRTG for the subnet. Example:"https://ams-ix.net/technical/statistics/sflow-stats/ipv6-traffic"traffic_graph_url
- Deep link to MRTG graph. Example:"https://stats.ams-ix.net/cgi-bin/stats/sflow_grapher?type=ipv6;counter=bps;scale=normal;interval=daily"subnet_num
- PCH internal ID for subnet. Example:"4"exchange_point_id
- Internal PCH ID for the parent IXP (will be same asIXP_ID
in the URL). Example:"160"
Example (Toggle)
A call to this API:
https://www.pch.net/api/ixp/subnets/160
Would return the following response:
[ { "id": "189", "status": "Deprecated", "short_name": "AMS-IX", "version": "IPv4", "subnet": "193.148.15.0\\/24", "mlpa": "Unknown", "traffic": "0", "participants": "0", "established": "19971229", "traffic_url": "", "traffic_graph_url": "", "subnet_num": "1", "exchange_point_id": "160" }, { "id": "346", "status": "Unknown", "short_name": "AMS-IX", "version": "IPv4", "subnet": "195.69.144.0\\/24", "mlpa": "Unknown", "traffic": "0", "participants": "0", "established": "20090000", "traffic_url": "", "traffic_graph_url": "", "subnet_num": "6", "exchange_point_id": "160" }, { "id": "347", "status": "Unknown", "short_name": "AMS-IX", "version": "IPv4", "subnet": "195.69.145.0\\/24", "mlpa": "Unknown", "traffic": "0", "participants": "0", "established": "0", "traffic_url": "", "traffic_graph_url": "", "subnet_num": "5", "exchange_point_id": "160" }, { "id": "602", "status": "Deprecated", "short_name": "AMS-IX", "version": "IPv4", "subnet": "195.69.144.0\\/22", "mlpa": "Available", "traffic": "0", "participants": "0", "established": "20020400", "traffic_url": "", "traffic_graph_url": "", "subnet_num": "3", "exchange_point_id": "160" }, { "id": "603", "status": "Active", "short_name": "AMS-IX", "version": "IPv6", "subnet": "2001:7f8:1::\\/64", "mlpa": "Available", "traffic": "63900000", "participants": "652", "established": "0", "traffic_url": "https:\\/\\/ams-ix.net\\/technical\\/statistics\\/sflow-stats\\/ipv6-traffic", "traffic_graph_url": "https:\\/\\/stats.ams-ix.net\\/cgi-bin\\/stats\\/sflow_grapher?type=ipv6;counter=bps;scale=normal;interval=daily", "subnet_num": "4", "exchange_point_id": "160" }, { "id": "1109", "status": "Active", "short_name": "AMS-IX v4", "version": "IPv4", "subnet": "80.249.208.0\\/21", "mlpa": "Available", "traffic": "3378000000", "participants": "807", "established": "20141013", "traffic_url": "https:\\/\\/www.ams-ix.net\\/technical\\/statistics", "traffic_graph_url": "https:\\/\\/stats.ams-ix.net\\/cgi-bin\\/stats\\/16all?log=totalall;png=daily", "subnet_num": "7", "exchange_point_id": "160" } ]
Subnet Member Details
URL and parameters
This API lists the member details for a specific subnet in our database. It defaults to returning JSON:
https://www.pch.net/api/ixp/subnet_details/IXP_ID
https://www.pch.net/api/ixp/subnet_details/IXP_ID(?subnet=CIDR_NOTATION)
Such that:
IXP_ID
- is a required value. It is the ID of the IXP as derived from the IXP Directory (/api/ixp/directory
) API call above.?subnet=CIDR_NOTATION
- is an optional value. It is the CIDR notation of the of the subnet as derived from the Subnets (/api/ixp/subnets/IXP_ID
) API call above.
?format=csv
query string
Response - no subnet query (Toggle)
JSON objects will be returned with the following fields when you do not pass the optional?subnet=CIDR_NOTATION
query sting:
version
- IP version. Example: "IPv4",subnet
- Subnet in CIDR notation. Example: "80.249.208.0/21":",ip
- IP address in the subnet queried. Example: "80.249.208.1",fqdn
- Fully qualified domain name of IP. Example: "rtr-eun-01.ams-ix.net.",ping
- Ping status. Example: "Yes",asn
- Autonomous system number the subnet belongs to. Example: "1200",org
- String of the AS organization name. Example: "AMSTERDAM INET EXCH B.V.",prefixes
- Number of prefixes. Example: "3"
Example - no subnet query (Toggle)
A call to this API (note the optional ?subnet=CIDR_NOTATION
query sting is not present)
https://www.pch.net/api/ixp/subnet_details/160
Would return the following hundreds, possibly thousands, of lines with this being the first part of the response:
{ "IPv6": { "2001:7f8:1::/64": [ { "ip": "2001:7F8:1:0:A500:19:9947:1", "fqdn": null, "ping": null, "asn": "199947", "org": "NEXUSWAY S.R.L.", "prefixes": "1" }, { "ip": "2001:7F8:1:0:0:A501:5943:1", "fqdn": null, "ping": null, "asn": "15943", "org": "WILHELM.TEL G.M.B.H", "prefixes": "8" }, { "ip": "2001:7F8:1:0:A500:19:9939:1", "fqdn": null, "ping": null, "asn": "199939", "org": "KEENSYSTEMS B.V.", "prefixes": "4" }, { "ip": "2001:7F8:1:0:A500:19:9939:2", "fqdn": null, "ping": null, "asn": "199939", "org": "KEENSYSTEMS B.V.", "prefixes": "4" }, { "ip": "2001:7F8:1:0:0:A501:5967:1", "fqdn": null, "ping": null, "asn": "15967", "org": "NAZWA.PL SP.Z.O.O", "prefixes": "1" }, { "ip": "2001:7F8:1:0:0:A501:5966:1", "fqdn": null, "ping": null, "asn": "15966", "org": "EMANGO INET SVC B.V.", "prefixes": "2" }, { "ip": "2001:7F8:1:0:0:A501:5958:1", "fqdn": null, "ping": null, "asn": "15958", "org": "TELENOR D.O.O. BEOGRAD", "prefixes": "15" }, ] }, "IPv4": { "80.249.208.0/21": [ { "ip": "80.249.208.1", "fqdn": "rtr-eun-01.ams-ix.net.", "ping": "Yes", "asn": "1200", "org": "AMSTERDAM INET EXCH B.V.", "prefixes": "3" }, { "ip": "80.249.208.2", "fqdn": "", "ping": "Yes", "asn": null, "org": "", "prefixes": "" }, { "ip": "80.249.208.3", "fqdn": "rtr2-1.nawas.net.", "ping": "Yes", "asn": "200020", "org": "STICHTING NBIP NAWAS", "prefixes": "13" }, { "ip": "80.249.208.5", "fqdn": "arpkeepalive.noc.ams-ix.net.", "ping": "No", "asn": null, "org": "", "prefixes": "" }, { "ip": "80.249.208.6", "fqdn": "", "ping": "Yes", "asn": null, "org": "", "prefixes": "" },
Response - with subnet query (Toggle)
JSON objects will be returned with the following fields when you do pass the optional?subnet=CIDR_NOTATION
query sting:
ip
- IP address in the subnet queried. Example: "80.249.208.1",fqdn
- Fully qualified domain name of IP. Example: "rtr-eun-01.ams-ix.net.",ping
- Ping status. Example: "Yes",asn
- Autonomous system number the subnet belongs to. Example: "1200",org
- String of the AS organization name. Example: "AMSTERDAM INET EXCH B.V.",prefixes
- Number of prefixes. Example: "3"
Example - with subnet query (Toggle)
A call to this API (note the optional ?subnet=CIDR_NOTATION
query sting is present)
https://www.pch.net/api/ixp/subnet_details/160?subnet=80.249.208.0/21
Would return the following hundreds, possibly thousands, of lines with this being the first part of the response:
[ { "ip": "80.249.208.1", "fqdn": "rtr-eun-01.ams-ix.net.", "ping": "Yes", "asn": "1200", "org": "AMSTERDAM INET EXCH B.V.", "prefixes": "3" }, { "ip": "80.249.208.3", "fqdn": "", "ping": "No", "asn": "200020", "org": "STICHTING NBIP NAWAS", "prefixes": "12" }, { "ip": "80.249.208.5", "fqdn": "arpkeepalive.noc.ams-ix.net.", "ping": "No", "asn": null, "org": "", "prefixes": "" }, { "ip": "80.249.208.7", "fqdn": "", "ping": "No", "asn": "205943", "org": "RODASALIR EHF", "prefixes": "1" }, { "ip": "80.249.208.8", "fqdn": "", "ping": "No", "asn": "40805", "org": "JMF SOLN INC.", "prefixes": "13" }, { "ip": "80.249.208.11", "fqdn": "", "ping": "No", "asn": "8758", "org": "IWAY AG", "prefixes": "51" }, { "ip": "80.249.208.12", "fqdn": "", "ping": "No", "asn": "8821", "org": "WWZ TELEKOM AG", "prefixes": "6" }, { "ip": "80.249.208.13", "fqdn": "mon-sar-010-mon.noc.ams-ix.net.", "ping": "Yes", "asn": null, "org": "", "prefixes": "" }, { "ip": "80.249.208.14", "fqdn": "mon-nik-011-mon.noc.ams-ix.net.", "ping": "Yes", "asn": null, "org": "", "prefixes": "" },