GET/api/v2/asn
ASN lookup API
An autonomous system's holder, registry, prefixes, address space, peers and users, by AS number or from an IP, prefix or domain.
- 30 calls a minute per IP
- Same engine as the ASN Lookup tool
{
"query": {
"q": "AS13335"
},
"asn": 13335,
"resolvedFrom": null,
"special": null,
"status": "assigned",
"name": "CLOUDFLARENET",
"holder": "Cloudflare, Inc.",
"brand": {
"name": "Cloudflare"
},
"kind": "cdn",
"service": null,
"country": "US",
"registry": "arin",
"allocated": "2010-07-14",
"tier1": false,
"prefixes": {
"ipv4Count": 2542,
"ipv6Count": 2971,
"ipv4": [
"1.0.0.0/24",
"1.1.1.0/24",
"5.10.214.0/24",
"5.10.215.0/24",
"5.83.149.0/24",
"5.172.33.0/24",
"5.226.183.0/24",
"5.252.81.0/24",
"8.6.112.0/24",
"8.20.125.0/24",
"8.21.10.0/24",
"8.24.87.0/24",
"8.27.64.0/24",
"8.27.66.0/24",
"8.27.67.0/24",
"8.29.109.0/24",
"8.29.228.0/24",
"8.29.230.0/24",
"8.29.231.0/24",
"8.31.160.0/24",
"8.31.161.0/24",
"8.34.70.0/24",
"8.34.146.0/24",
"8.35.211.0/24",
"8.39.125.0/24",
"8.39.204.0/24",
"8.39.214.0/24",
"8.44.0.0/24",
"8.44.1.0/24",
"8.44.2.0/24",
"8.44.61.0/24",
"8.44.62.0/24",
"8.47.69.0/24",
"16.5.144.0/20",
"23.131.204.0/24",
"23.145.136.0/24",
"23.145.152.0/24",
"23.145.232.0/24",
"23.145.248.0/24",
"23.179.248.0/24",
"23.180.136.0/24",
"23.227.37.0/24",
"23.227.38.0/23",
"23.227.42.0/23",
"23.227.48.0/23",
"23.227.60.0/24",
"31.185.108.0/24",
"37.72.109.0/24",
"37.153.170.0/24",
"37.153.171.0/24",
"38.96.28.0/23",
"42.61.47.0/24",
"43.229.39.0/24",
"43.230.144.0/24",
"45.6.45.0/24",
"45.6.47.0/24",
"45.12.44.0/24",
"45.12.45.0/24",
"45.43.147.0/24",
"45.43.158.0/24",
"45.45.255.0/24",
"45.128.76.0/24",
"45.130.106.0/24",
"45.130.125.0/24",
"45.134.227.0/24",
"45.146.130.0/24",
"45.148.100.0/24",
"45.152.208.0/24",
"45.157.17.0/24",
"45.192.223.0/24",
"45.192.224.0/24",
"45.195.153.0/24",
"45.196.29.0/24",
"45.196.168.0/24",
"45.198.114.0/24",
"45.198.116.0/24",
"45.198.139.0/24",
"45.199.183.0/24",
"45.199.188.0/24",
"46.38.152.0/24",
"49.238.236.0/22",
"49.238.236.0/24",
"49.238.237.0/24",
"49.238.238.0/24",
"49.238.239.0/24",
"51.194.144.0/22",
"51.241.128.0/23",
"57.250.49.0/24",
"57.250.50.0/24",
"57.250.51.0/24",
"57.250.58.0/24",
"61.8.33.0/24",
"61.32.240.0/24",
"61.245.108.0/24",
"62.144.59.0/24",
"62.146.255.0/24",
"64.8.255.0/24",
"64.40.138.0/24",
"64.40.140.0/24",
"64.205.115.0/24"
],
"ipv6": [
"2001:500:210::/48",
"2001:501:210::/48",
"2001:678:19c::/48",
"2400:cb00:4::/48",
"2400:cb00:11::/48",
"2400:cb00:12::/48",
"2400:cb00:14::/48",
"2400:cb00:15::/48",
"2400:cb00:16::/48",
"2400:cb00:17::/48",
"2400:cb00:19::/48",
"2400:cb00:20::/48",
"2400:cb00:21::/48",
"2400:cb00:22::/48",
"2400:cb00:23::/48",
"2400:cb00:26::/48",
"2400:cb00:27::/48",
"2400:cb00:28::/48",
"2400:cb00:29::/48",
"2400:cb00:31::/48",
"2400:cb00:34::/48",
"2400:cb00:35::/48",
"2400:cb00:38::/48",
"2400:cb00:39::/48",
"2400:cb00:40::/48",
"2400:cb00:43::/48",
"2400:cb00:44::/48",
"2400:cb00:45::/48",
"2400:cb00:46::/48",
"2400:cb00:47::/48",
"2400:cb00:48::/48",
"2400:cb00:49::/48",
"2400:cb00:50::/48",
"2400:cb00:51::/48",
"2400:cb00:52::/48",
"2400:cb00:53::/48",
"2400:cb00:54::/48",
"2400:cb00:56::/48",
"2400:cb00:57::/48",
"2400:cb00:59::/48",
"2400:cb00:61::/48",
"2400:cb00:63::/48",
"2400:cb00:64::/48",
"2400:cb00:65::/48",
"2400:cb00:66::/48",
"2400:cb00:67::/48",
"2400:cb00:69::/48",
"2400:cb00:70::/48",
"2400:cb00:71::/48",
"2400:cb00:72::/48",
"2400:cb00:73::/48",
"2400:cb00:74::/48",
"2400:cb00:75::/48",
"2400:cb00:77::/48",
"2400:cb00:78::/48",
"2400:cb00:79::/48",
"2400:cb00:80::/48",
"2400:cb00:81::/48",
"2400:cb00:83::/48",
"2400:cb00:84::/48",
"2400:cb00:85::/48",
"2400:cb00:86::/48",
"2400:cb00:87::/48",
"2400:cb00:88::/48",
"2400:cb00:89::/48",
"2400:cb00:90::/48",
"2400:cb00:94::/48",
"2400:cb00:97::/48",
"2400:cb00:98::/48",
"2400:cb00:100::/48",
"2400:cb00:102::/48",
"2400:cb00:103::/48",
"2400:cb00:106::/48",
"2400:cb00:107::/48",
"2400:cb00:109::/48",
"2400:cb00:112::/48",
"2400:cb00:113::/48",
"2400:cb00:114::/48",
"2400:cb00:115::/48",
"2400:cb00:116::/48",
"2400:cb00:119::/48",
"2400:cb00:120::/48",
"2400:cb00:121::/48",
"2400:cb00:123::/48",
"2400:cb00:124::/48",
"2400:cb00:125::/48",
"2400:cb00:126::/48",
"2400:cb00:128::/48",
"2400:cb00:131::/48",
"2400:cb00:132::/48",
"2400:cb00:134::/48",
"2400:cb00:136::/48",
"2400:cb00:137::/48",
"2400:cb00:138::/48",
"2400:cb00:140::/48",
"2400:cb00:141::/48",
"2400:cb00:143::/48",
"2400:cb00:144::/48",
"2400:cb00:145::/48",
"2400:cb00:147::/48"
],
"truncated": true
},
"addresses": {
"ipv4": 1415168,
"ipv6Slash48": 1257893,
"routedIpv4": 1410560
},
"relationships": {
"providers": 106,
"peers": 956,
"customers": 1032
},
"users": null,
"ipv4Geography": {
"countries": 124,
"top": [
{
"country": "CA",
"addresses": 806559
},
{
"country": "US",
"addresses": 149522
},
{
"country": "GB",
"addresses": 79277
},
{
"country": "JP",
"addresses": 31234
},
{
"country": "DE",
"addresses": 31226
}
]
},
"siblings": {
"count": 6,
"asns": [
14789,
395747,
22061,
400095,
402542,
394536
]
},
"source": "tables",
"data": {
"routes": "2026-10-23T18:13:44.000Z",
"registrations": "2026-10-23",
"organisations": "2026-10-01",
"relationships": "2026-10-01",
"users": "2026-10-15"
},
"tookMs": 448
}How it works
Reads one AS number from our snapshot of public tables: the RIRs' delegated statistics (registry, country, date), CAIDA AS Organizations (holder) and AS Relationships (providers, peers, customers, the Tier 1 clique), RIPE RIS (prefixes seen by at least 10 of its peers), IPtoASN (routed space) and APNIC Labs (users per country). data gives each table's date.
An IP address, a prefix or a domain is first resolved to the AS announcing it through Team Cymru's IP-to-ASN service (for a domain, its first IPv4 and IPv6 address); resolvedFrom shows how, with every origin when several networks announce it. A number newer than the snapshot gets its name, registry and date from Team Cymru (source: "cymru").
Special-purpose numbers (AS0, AS23456, documentation and private-use ranges) are a 200 with special. Registration contact records (RDAP) are never fetched or served from our server: query your registry's RDAP for them.
Answers kept: 1 hour (`public, max-age=3600`): the tables change with each data refresh, Team Cymru's routing every 4 hours. Answers with `incomplete` aren't cached.
Query parameters
qstringrequiredAn AS number (AS13335,13335, asdot1.10), an IPv4 or IPv6 address, a prefix (8.8.8.0/24) or a domain.
Response fields
200 with this JSON object, plus tookMs, and incomplete with warnings when a source failed. Fields marked optional appear only when they apply.
queryobjectalwaysWhat was looked up, normalised (lower case, no trailing dot, IDNs as Punycode).qstringalwaysWhat was looked up:AS<number>, the address, the prefix with its network address, or the domain in lower case.
asninteger or nullalwaysThe AS number described, or null when the IP, prefix or domain led to none (seeresolvedFrom.finding).resolvedFromobject or nullalwaysHow an IP, prefix or domain led to the AS (Team Cymru); null for an AS number.Show 6 fields
kindstringalwaysWhatqwas.one of
"ip","prefix","domain"targetstringalwaysThe address, prefix or domain resolved.addressesarray of stringsalwaysThe addresses asked about (a domain's first IPv4 and IPv6).originsarray of objectsalwaysEvery origin Team Cymru lists, most specific prefix first.Show 6 fields
asnintegeralwaysThe announcing AS.prefixstringalwaysThe announced prefix.countrystring or nullalwaysThe block's registered country.registrystring or nullalwaysThe block's registry.allocatedstring or nullalwaysWhen the registry handed out the block (YYYY-MM-DD), never the AS's age.ipstringalwaysThe address it answers for.
moasbooleanalwaysWhether one prefix is announced by several networks (multi-origin AS).findingstring or nullalwaysWhy there is no AS:nxdomain(no such domain),no_address(the domain has no A or AAAA record),unrouted(no network announces it); null when one does.one of
"nxdomain","no_address","unrouted",null
specialobject or nullalwaysThe IANA special-purpose range the number is in, or null.kindstringalwaysreserved(AS0, RFC 7607),as_trans(AS23456, RFC 6793),documentation(RFC 5398),private_use(RFC 6996),last(RFC 7300) oriana_reserved.one of
"reserved","as_trans","documentation","private_use","last","iana_reserved"rangeobjectalwaysThe range.Show 2 fields
fromintegeralwaysFirst number.tointegeralwaysLast number.
rfcstringalwaysThe RFC that defines it, orIANA.
statusstring or nullalwaysassigned,availableorreserved(the registry's pool),unassigned(announced, but in no registry's statistics),special,unknown(not in our tables); null with no AS.one of
"assigned","available","reserved","unassigned","special","unknown",nullnamestring or nullalwaysThe AS name ("CLOUDFLARENET").holderstring or nullalwaysThe organization holding it (CAIDA AS Organizations: "Cloudflare, Inc.").brandobject or nullalwaysThe brand people know, where our tables have one.namestringalwaysThe brand.
kindstring or nullalwaysWhat kind of network:cdn,content,cloud,hosting,relay,transit,isp,satellite,edu,govorother.one of
"cdn","content","cloud","hosting","relay","transit","isp","satellite","edu","gov","other",nullservicestring or nullalwaysAn ISP's service:fixed,mobileorboth.one of
"fixed","mobile","both",nullcountrystring or nullalwaysThe country it is registered in.registrystring or nullalwaysThe regional registry:arin,ripencc,apnic,lacnicorafrinic.allocatedstring or nullalwaysWhen the registry assigned the number (YYYY-MM-DD).tier1boolean or nullalwaysWhether it is in CAIDA's Tier 1 clique.prefixesobject or nullalwaysPrefixes RIPE RIS sees it announce (at least 10 of RIS's peers), or null when it announces none.Show 5 fields
ipv4CountintegeralwaysIPv4 prefixes.ipv6CountintegeralwaysIPv6 prefixes.ipv4array of stringsalwaysThe IPv4 prefixes, sorted by address, the first 100.ipv6array of stringsalwaysThe IPv6 prefixes, sorted by address, the first 100.truncatedbooleanalwaysWhether a list stops at 100.
addressesobject or nullalwaysAddress space it originates, overlaps counted once.ipv4integer or nullalwaysUnique IPv4 addresses.ipv6Slash48integer or nullalwaysUnique IPv6 /48 blocks.routedIpv4integer or nullalwaysIPv4 addresses whose most specific route ends at it (IPtoASN).
relationshipsobject or nullalwaysCAIDA's inferred relationships, or null when it has none.providersintegeralwaysNetworks it buys transit from.peersintegeralwaysNetworks it peers with.customersintegeralwaysNetworks it sells transit to.
usersobject or nullalwaysAPNIC Labs' user estimates (at least 1,000 users in a country), or null.estimateintegeralwaysUsers in every country counted, added up.countriesintegeralwaysCountries where it has users.toparray of objectsalwaysThe largest countries, at most 6.Show 4 fields
countrystringalwaysISO 3166-1 alpha-2 code.usersintegeralwaysEstimated users there.sharenumberalwaysPercent of the country's users.rankintegeralwaysRank among the country's networks.
ipv4Geographyobject or nullalwaysWhere its IPv4 space is (its unique addresses placed by DB-IP), or null.countriesintegeralwaysCountries in all.toparray of objectsalwaysThe largest, at most 5.Show 2 fields
countrystringalwaysISO 3166-1 alpha-2 code.addressesintegeralwaysIPv4 addresses there.
siblingsobject or nullalwaysOther numbers in the same registry record (one holder at one RIR), or null (none, or a national registry's record shared by many holders).countintegeralwaysHow many in all.asnsarray of integersalwaysThe first 12, announcing ones first.
sourcestring or nullalwaysWhere the record came from:tables(our snapshot) orcymru(a number newer than it).one of
"tables","cymru",nulldataobjectalwaysThe date of each table.Show 5 fields
routesstringalwaysRIPE RIS routes.registrationsstringalwaysRIR delegated statistics.organisationsstringalwaysCAIDA AS Organizations.relationshipsstringalwaysCAIDA AS Relationships.usersstringalwaysAPNIC Labs' user estimates.
Errors
422target_not_allowedqis (or a domain resolves to) a private or special-purpose address: no network announces it.503unavailableTeam Cymru or DNS didn't answer for an IP, prefix or domain, or the tables couldn't be read.
Plus the errors every endpoint can return: 400 for a missing or unreadable parameter, 429 past the limit, 503 when every source failed.
Code samples
curl "https://dnsrobot.net/api/v2/asn?q=AS13335"const params = new URLSearchParams({ q: "AS13335" });
const res = await fetch(`https://dnsrobot.net/api/v2/asn?${params}`);
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data.holder);import requests
r = requests.get(
"https://dnsrobot.net/api/v2/asn",
params={"q": "AS13335"},
timeout=30,
)
data = r.json()
if not r.ok:
raise RuntimeError(data["error"]["message"])
print(data["holder"])package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
q := url.Values{"q": {"AS13335"}}
res, err := http.Get("https://dnsrobot.net/api/v2/asn?" + q.Encode())
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
panic(err)
}
if res.StatusCode != http.StatusOK {
panic(data["error"])
}
fmt.Println(data["holder"])
}<?php
$query = http_build_query(["q" => "AS13335"]);
$context = stream_context_create(["http" => ["ignore_errors" => true, "timeout" => 30]]);
$data = json_decode(file_get_contents("https://dnsrobot.net/api/v2/asn?" . $query, false, $context), true);
if (isset($data["error"])) {
throw new RuntimeException($data["error"]["message"]);
}
print_r($data["holder"]);require "net/http"
require "json"
uri = URI("https://dnsrobot.net/api/v2/asn")
uri.query = URI.encode_www_form(q: "AS13335")
data = JSON.parse(Net::HTTP.get(uri))
raise data["error"]["message"] if data["error"]
puts data["holder"]// Cargo.toml: reqwest = { version = "0.13", features = ["blocking", "json"] }, serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::get("https://dnsrobot.net/api/v2/asn?q=AS13335")?;
let ok = res.status().is_success();
let data: serde_json::Value = res.json()?;
if !ok {
return Err(data["error"]["message"].to_string().into());
}
println!("{}", data["holder"]);
Ok(())
}using System.Text.Json;
using var http = new HttpClient();
var res = await http.GetAsync("https://dnsrobot.net/api/v2/asn?q=AS13335");
var data = JsonDocument.Parse(await res.Content.ReadAsStringAsync()).RootElement;
if (!res.IsSuccessStatusCode)
throw new Exception(data.GetProperty("error").GetProperty("message").GetString());
Console.WriteLine(data.GetProperty("holder"));Cloudflare's AS13335
GET /api/v2/asn?q=AS13335{
"query": {
"q": "AS13335"
},
"asn": 13335,
"resolvedFrom": null,
"special": null,
"status": "assigned",
"name": "CLOUDFLARENET",
"holder": "Cloudflare, Inc.",
"brand": {
"name": "Cloudflare"
},
"kind": "cdn",
"service": null,
"country": "US",
"registry": "arin",
"allocated": "2010-07-14",
"tier1": false,
"prefixes": {
"ipv4Count": 2542,
"ipv6Count": 2971,
"ipv4": [
"1.0.0.0/24",
"1.1.1.0/24",
"5.10.214.0/24",
// … 97 more items
],
"ipv6": [
"2001:500:210::/48",
"2001:501:210::/48",
"2001:678:19c::/48",
// … 97 more items
],
"truncated": true
},
"addresses": {
"ipv4": 1415168,
"ipv6Slash48": 1257893,
"routedIpv4": 1410560
},
"relationships": {
"providers": 106,
"peers": 956,
"customers": 1032
},
"users": null,
"ipv4Geography": {
"countries": 124,
"top": [
{
"country": "CA",
"addresses": 806559
},
{
"country": "US",
"addresses": 149522
},
{
"country": "GB",
"addresses": 79277
},
// … 2 more items
]
},
"siblings": {
"count": 6,
"asns": [
14789,
395747,
22061,
// … 3 more items
]
},
"source": "tables",
"data": {
"routes": "2026-10-23T18:13:44.000Z",
"registrations": "2026-10-23",
"organisations": "2026-10-01",
"relationships": "2026-10-01",
"users": "2026-10-15"
},
"tookMs": 448
}Shortened for the page: long lists show their first items.
The AS behind 8.8.8.8
GET /api/v2/asn?q=8.8.8.8{
"query": {
"q": "8.8.8.8"
},
"asn": 15169,
"resolvedFrom": {
"kind": "ip",
"target": "8.8.8.8",
"addresses": [
"8.8.8.8"
],
"origins": [
{
"asn": 15169,
"prefix": "8.8.8.0/24",
"country": "US",
"registry": "arin",
"allocated": "2023-12-28",
"ip": "8.8.8.8"
}
],
"moas": false,
"finding": null
},
"special": null,
"status": "assigned",
"name": "GOOGLE",
"holder": "Google LLC",
"brand": {
"name": "Google"
},
"kind": "content",
"service": null,
"country": "US",
"registry": "arin",
"allocated": "2000-03-30",
"tier1": false,
"prefixes": {
"ipv4Count": 1247,
"ipv6Count": 176,
"ipv4": [
"8.8.4.0/24",
"8.8.8.0/24",
"34.0.0.0/15",
// … 97 more items
],
"ipv6": [
"2001:4860::/32",
"2001:4860:4820::/48",
"2001:4860:4821::/48",
// … 97 more items
],
"truncated": true
},
"addresses": {
"ipv4": 2615808,
"ipv6Slash48": 721152,
"routedIpv4": 1376768
},
"relationships": {
"providers": 12,
"peers": 292,
"customers": 20
},
"users": null,
"ipv4Geography": {
"countries": 50,
"top": [
{
"country": "US",
"addresses": 1757772
},
{
"country": "BE",
"addresses": 86304
},
{
"country": "JP",
"addresses": 81248
},
// … 2 more items
]
},
"siblings": {
"count": 8,
"asns": [
36040,
22577,
13949,
// … 5 more items
]
},
"source": "tables",
"data": {
"routes": "2026-10-23T18:13:44.000Z",
"registrations": "2026-10-23",
"organisations": "2026-10-01",
"relationships": "2026-10-01",
"users": "2026-10-15"
},
"tookMs": 755
}Shortened for the page: long lists show their first items.
The AS behind wikipedia.org
GET /api/v2/asn?q=wikipedia.org{
"query": {
"q": "wikipedia.org"
},
"asn": 14907,
"resolvedFrom": {
"kind": "domain",
"target": "wikipedia.org",
"addresses": [
"208.80.154.224",
"2620:0:861:ed1a::1"
],
"origins": [
{
"asn": 14907,
"prefix": "208.80.154.0/23",
"country": "US",
"registry": "arin",
"allocated": "2007-07-23",
"ip": "208.80.154.224"
},
{
"asn": 14907,
"prefix": "2620:0:861::/48",
"country": "US",
"registry": "arin",
"allocated": "2007-10-02",
"ip": "2620:0:861:ed1a::1"
}
],
"moas": false,
"finding": null
},
"special": null,
"status": "assigned",
"name": "WIKIMEDIA",
"holder": "Wikimedia Foundation Inc.",
"brand": null,
"kind": "other",
"service": null,
"country": "US",
"registry": "arin",
"allocated": "2006-09-27",
"tier1": false,
"prefixes": {
"ipv4Count": 11,
"ipv6Count": 11,
"ipv4": [
"103.102.166.0/24",
"185.15.56.0/24",
"185.15.57.0/24",
// … 8 more items
],
"ipv6": [
"2001:67c:930::/48",
"2001:df2:e500::/48",
"2620:0:860::/48",
// … 8 more items
],
"truncated": false
},
"addresses": {
"ipv4": 3328,
"ipv6Slash48": 11,
"routedIpv4": 3328
},
"relationships": {
"providers": 14,
"peers": 1177,
"customers": 0
},
"users": null,
"ipv4Geography": {
"countries": 3,
"top": [
{
"country": "US",
"addresses": 2304
},
{
"country": "NL",
"addresses": 768
},
{
"country": "BR",
"addresses": 256
}
]
},
"siblings": null,
"source": "tables",
"data": {
"routes": "2026-10-23T18:13:44.000Z",
"registrations": "2026-10-23",
"organisations": "2026-10-01",
"relationships": "2026-10-01",
"users": "2026-10-15"
},
"tookMs": 1101
}Shortened for the page: long lists show their first items.