PCH

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:

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: null
  • tw_rank - Traffic world rank. Example: null
  • tr_rank - Traffic region rank. Example: null
  • pc_rank - Participants country rank. Example: null
  • pr_rank - Participants region rank. Example: null
  • pw_rank - Participants world rank. Example: null
  • prts_url - Participants list url. Example: null
  • q9 - 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:

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 as IXP_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:

Note - this endpoint only returns JSON, you can not pass the ?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": ""
  },