{"openapi":"3.1.0","info":{"title":"BGPScout","version":"1.0.0","description":"BGPScout internet routing intelligence - ASN/IXP/facility/CDN/traceroute search, sales prospecting, IP lookup, and account actions."},"servers":[{"url":"https://bgpscout.io/mcp"}],"paths":{"/call/list_tools":{"post":{"operationId":"list_tools","summary":"Discover all available BGPScout tools, grouped by category. Call this first to see the full capability set (search, lookup, prospecting, intelligence, account actions). Optional: category to filter.","description":"Discover all available BGPScout tools, grouped by category. Call this first to see the full capability set (search, lookup, prospecting, intelligence, account actions). Optional: category to filter.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string"}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/lookup_asn":{"post":{"operationId":"lookup_asn","summary":"Look up detailed information about an ASN, including its PoP/facility count and IXP count. Location caveat: the record's latitude/longitude are the centroid of the registered POSTAL CODE, never the street address; the `location` field gives the resolved point with its provenance and precision, which may be a geocoded address, a data-centre facility, an exchange, or a country centroid. Do not report an approximate position as an address.","description":"Look up detailed information about an ASN, including its PoP/facility count and IXP count. Location caveat: the record's latitude/longitude are the centroid of the registered POSTAL CODE, never the street address; the `location` field gives the resolved point with its provenance and precision, which may be a geocoded address, a data-centre facility, an exchange, or a country centroid. Do not report an approximate position as an address.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer","description":"ASN number"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_facilities":{"post":{"operationId":"get_asn_facilities","summary":"List the data-center facilities/PoPs a network (ASN) is present in, with a total count. Use this to answer 'how many PoPs/facilities does ASN X have'. Sourced from PeeringDB.","description":"List the data-center facilities/PoPs a network (ASN) is present in, with a total count. Use this to answer 'how many PoPs/facilities does ASN X have'. Sourced from PeeringDB.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer","description":"ASN number"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_ixps":{"post":{"operationId":"get_asn_ixps","summary":"List the Internet Exchange Points (IXPs) an ASN peers at, with port speeds and total interconnection capacity","description":"List the Internet Exchange Points (IXPs) an ASN peers at, with port speeds and total interconnection capacity","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_cdn_caches":{"post":{"operationId":"get_asn_cdn_caches","summary":"List the CDN edge caches hosted inside an ASN, grouped by provider with cache locations. Located providers: Google GGC, Netflix OCA, Meta FNA, Akamai. AWS CloudFront, Microsoft and Apple caches are reported separately in providers_present_without_locations - we know the ASN hosts them but never collected node locations (#191). total_caches counts LOCATED nodes only, so an ASN hosting only Apple caches reports 0 there and names Apple in that list; do not read total_caches: 0 as 'no caches'.","description":"List the CDN edge caches hosted inside an ASN, grouped by provider with cache locations. Located providers: Google GGC, Netflix OCA, Meta FNA, Akamai. AWS CloudFront, Microsoft and Apple caches are reported separately in providers_present_without_locations - we know the ASN hosts them but never collected node locations (#191). total_caches counts LOCATED nodes only, so an ASN hosting only Apple caches reports 0 there and names Apple in that list; do not read total_caches: 0 as 'no caches'.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_ddos_protected":{"post":{"operationId":"find_ddos_protected","summary":"Networks observed sitting behind a blanket DDoS scrubbing provider (Akamai Prolexic, Cloudflare Magic Transit, Global Secure Layer, Path, Imperva). Their routes were seen transiting a provider whose product IS the BGP announcement, so the service was live in the routing snapshot - this is evidence, not a contract, and absence does not mean unprotected. Distinct from the 'ddosm' tag, which means a network SELLS mitigation. Set exclusive=true for networks whose only upstreams are scrubbers.","description":"Networks observed sitting behind a blanket DDoS scrubbing provider (Akamai Prolexic, Cloudflare Magic Transit, Global Secure Layer, Path, Imperva). Their routes were seen transiting a provider whose product IS the BGP announcement, so the service was live in the routing snapshot - this is evidence, not a contract, and absence does not mean unprotected. Distinct from the 'ddosm' tag, which means a network SELLS mitigation. Set exclusive=true for networks whose only upstreams are scrubbers.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"provider_asn":{"type":"integer","description":"Only networks behind this provider"},"country":{"type":"string","description":"ISO 2-letter code"},"exclusive":{"type":"boolean","description":"Only networks with no non-scrubbing upstream"},"limit":{"type":"integer","default":100}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_transit_providers":{"post":{"operationId":"get_transit_providers","summary":"An ASN's upstreams from two sources: traceroute-observed Tier-1 handoffs (narrow, ~490 ASNs, but carries the handoff city) and BGP AS_PATH adjacency (79,250 ASNs, no location). AS_PATH does not label relationships, so a BGP adjacency may be transit or peering.","description":"An ASN's upstreams from two sources: traceroute-observed Tier-1 handoffs (narrow, ~490 ASNs, but carries the handoff city) and BGP AS_PATH adjacency (79,250 ASNs, no location). AS_PATH does not label relationships, so a BGP adjacency may be transit or peering.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/search_asns":{"post":{"operationId":"search_asns","summary":"Search ASNs with rich filters (name/asn, country, state, city, rir, traffic level, IPv6, on-IX, MANRS, RPKI, network type, asn_type flag, CDN provider, min PoPs/IXPs)","description":"Search ASNs with rich filters (name/asn, country, state, city, rir, traffic level, IPv6, on-IX, MANRS, RPKI, network type, asn_type flag, CDN provider, min PoPs/IXPs)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"country":{"type":"string","description":"2-letter country code"},"state":{"type":"string"},"city":{"type":"string"},"rir":{"type":"string"},"traffic_level":{"type":"string"},"has_ipv6":{"type":"boolean","description":"ANNOUNCES IPv6 prefixes. Not evidence that IPv6 works - use ipv6_reachability for that."},"ipv6_reachability":{"type":"string","description":"Evidence that IPv6 works (#54): confirmed | tcp6 | icmp6 | path | aaaa | announced_only | unconfirmed. The unconfirmed values select networks we have NOT observed working - mostly never probed - never networks whose IPv6 is broken."},"on_ix":{"type":"boolean"},"manrs":{"type":"boolean"},"rpki":{"type":"boolean"},"network_type":{"type":"string"},"asn_type":{"type":"string","description":"mobile|dsl|cdn|gov|corp|uni|biznet|satnet|anycast|vpn|tor"},"cdn_provider":{"type":"string","description":"ggc|oca|fna|akamai|aws_cloudfront|microsoft|apple"},"min_pops":{"type":"integer"},"min_ixps":{"type":"integer"},"sort":{"type":"string","description":"asn|name|country|traffic"},"limit":{"type":"integer","default":20}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_traces":{"post":{"operationId":"get_asn_traces","summary":"Get traceroute data for an ASN","description":"Get traceroute data for an ASN","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"limit":{"type":"integer","default":10}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_ixp_info":{"post":{"operationId":"get_ixp_info","summary":"Search Internet Exchange Points by name/country/operator, with min_peers/min_facilities filters. Each result carries its operator (the PeeringDB organisation that runs it - always present) and, where we could establish one, the registry organisation behind it with the method and confidence that link rests on.","description":"Search Internet Exchange Points by name/country/operator, with min_peers/min_facilities filters. Each result carries its operator (the PeeringDB organisation that runs it - always present) and, where we could establish one, the registry organisation behind it with the method and confidence that link rests on.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"country":{"type":"string"},"operator":{"type":"string","description":"Operator organisation name, substring match - e.g. \"Equinix\", \"DE-CIX\""},"min_peers":{"type":"integer"},"min_facilities":{"type":"integer"},"sort":{"type":"string","description":"peers|facilities|name"},"limit":{"type":"integer","default":30}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_ixp_members":{"post":{"operationId":"get_ixp_members","summary":"List the ASNs that peer at a given IXP (by its PeeringDB id from get_ixp_info)","description":"List the ASNs that peer at a given IXP (by its PeeringDB id from get_ixp_info)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ix_id":{"type":"integer"},"limit":{"type":"integer","default":200}},"required":["ix_id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_facility_info":{"post":{"operationId":"get_facility_info","summary":"Search data centers/facilities by name/country/city, with a count of how many ASNs are present","description":"Search data centers/facilities by name/country/city, with a count of how many ASNs are present","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"min_asns":{"type":"integer"},"sort":{"type":"string","description":"asns|name"},"limit":{"type":"integer","default":20}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/lookup_ip":{"post":{"operationId":"lookup_ip","summary":"Geolocate an IP address (city/country/coordinates) and, when available, the ASN that announces it","description":"Geolocate an IP address (city/country/coordinates) and, when available, the ASN that announces it","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"}},"required":["ip"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_facility_members":{"post":{"operationId":"get_facility_members","summary":"List the ASNs present in a data-center facility (by its PeeringDB id from get_facility_info)","description":"List the ASNs present in a data-center facility (by its PeeringDB id from get_facility_info)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"facility_id":{"type":"integer"},"limit":{"type":"integer","default":200}},"required":["facility_id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_facility_events":{"post":{"operationId":"get_facility_events","summary":"One building's change feed and the exchanges inside it - the same data as the /facilities/<id> page (#27). Returns the facility record, the IXPs physically in it, and the merged event log for both, with counts so a capped feed is never mistaken for the total. Events reached via an exchange are labelled: an IXP join at a multi-site exchange is not a statement about this one building.","description":"One building's change feed and the exchanges inside it - the same data as the /facilities/<id> page (#27). Returns the facility record, the IXPs physically in it, and the merged event log for both, with counts so a capped feed is never mistaken for the total. Events reached via an exchange are labelled: an IXP join at a multi-site exchange is not a statement about this one building.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"facility_id":{"type":"integer","description":"PeeringDB facility id, from get_facility_info"},"limit":{"type":"integer","default":100}},"required":["facility_id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_org_asns":{"post":{"operationId":"get_org_asns","summary":"List all ASNs under the same organization. Pass an asn (finds its siblings) or an org_id.","description":"List all ASNs under the same organization. Pass an asn (finds its siblings) or an org_id.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"org_id":{"type":"string"},"limit":{"type":"integer","default":100}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_transit_customers":{"post":{"operationId":"find_transit_customers","summary":"Networks downstream of a given transit ASN (reverse of get_transit_providers). Returns traceroute-observed handoffs (with cities) and BGP AS_PATH downstreams (far wider coverage, no location, and adjacency may be peering rather than transit).","description":"Networks downstream of a given transit ASN (reverse of get_transit_providers). Returns traceroute-observed handoffs (with cities) and BGP AS_PATH downstreams (far wider coverage, no location, and adjacency may be peering rather than transit).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transit_asn":{"type":"integer"},"limit":{"type":"integer","default":100}},"required":["transit_asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_co_located":{"post":{"operationId":"find_co_located","summary":"Networks that share a data-center facility with a given ASN (cross-connect / peering candidates)","description":"Networks that share a data-center facility with a given ASN (cross-connect / peering candidates)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"limit":{"type":"integer","default":100}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_near":{"post":{"operationId":"find_near","summary":"Find facilities, IXPs and CDN caches within a radius of a location (latitude/longitude in degrees, radius in km)","description":"Find facilities, IXPs and CDN caches within a radius of a location (latitude/longitude in degrees, radius in km)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"integer","default":50},"limit":{"type":"integer","default":30}},"required":["latitude","longitude"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_networks_near":{"post":{"operationId":"find_networks_near","summary":"Networks (ASNs) with IP address presence in an area - the geolocated IP footprint behind the IP-density heatmap. Use for 'which networks have IPs in/around <place>'. Ranked by number of geolocated IPs. Give either latitude+longitude (+radius_km) or a city and/or country. Coverage: ~6.5k ASNs with enough geolocated space to map; a network absent here may still operate there.","description":"Networks (ASNs) with IP address presence in an area - the geolocated IP footprint behind the IP-density heatmap. Use for 'which networks have IPs in/around <place>'. Ranked by number of geolocated IPs. Give either latitude+longitude (+radius_km) or a city and/or country. Coverage: ~6.5k ASNs with enough geolocated space to map; a network absent here may still operate there.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"integer","default":50},"city":{"type":"string"},"country":{"type":"string","description":"ISO 2-letter code"},"min_ips":{"type":"integer","description":"Only networks with at least this many geolocated IPs in the area"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_transit_near":{"post":{"operationId":"find_transit_near","summary":"Networks (ASNs) observed taking transit handoffs in an area, and from which Tier-1, derived from traceroute data. Use for 'which ASNs have transit locations in/around <place>'. Give latitude+longitude (+radius_km) or a city/country. Coverage is narrow - only ~490 ASNs across 11 Tier-1 providers currently have observed handoffs, so absence is not evidence of absence.","description":"Networks (ASNs) observed taking transit handoffs in an area, and from which Tier-1, derived from traceroute data. Use for 'which ASNs have transit locations in/around <place>'. Give latitude+longitude (+radius_km) or a city/country. Coverage is narrow - only ~490 ASNs across 11 Tier-1 providers currently have observed handoffs, so absence is not evidence of absence.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"integer","default":100},"city":{"type":"string"},"country":{"type":"string"},"transit_asn":{"type":"integer","description":"Only handoffs from this upstream"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_upstreams_near":{"post":{"operationId":"find_upstreams_near","summary":"Networks (ASNs) present in an area together with their BGP upstreams. Use for 'which networks around <place> buy transit, and from whom', or with upstream_asn for 'who near <place> is behind <provider>'. Wide coverage (79,250 ASNs have upstream data) but the two halves come from different sources: location is PeeringDB facility presence, upstreams are BGP AS_PATH adjacency - an upstream listed here was NOT observed handing off in that city, and AS_PATH cannot distinguish transit from peering. Use find_transit_near instead when the handoff location itself must be real.","description":"Networks (ASNs) present in an area together with their BGP upstreams. Use for 'which networks around <place> buy transit, and from whom', or with upstream_asn for 'who near <place> is behind <provider>'. Wide coverage (79,250 ASNs have upstream data) but the two halves come from different sources: location is PeeringDB facility presence, upstreams are BGP AS_PATH adjacency - an upstream listed here was NOT observed handing off in that city, and AS_PATH cannot distinguish transit from peering. Use find_transit_near instead when the handoff location itself must be real.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"integer","default":50},"city":{"type":"string"},"country":{"type":"string"},"upstream_asn":{"type":"integer","description":"Only networks adjacent to this upstream"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_networks_at_facilities_near":{"post":{"operationId":"find_networks_at_facilities_near","summary":"Networks (ASNs) with a PeeringDB data-centre/PoP presence in an area, and which facilities. Use for 'who is in a data centre in/around <place>' or to find cross-connect candidates in a metro. Give latitude+longitude (+radius_km) or a city/country.","description":"Networks (ASNs) with a PeeringDB data-centre/PoP presence in an area, and which facilities. Use for 'who is in a data centre in/around <place>' or to find cross-connect candidates in a metro. Give latitude+longitude (+radius_km) or a city/country.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"integer","default":50},"city":{"type":"string"},"country":{"type":"string"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_networks_on_ixps_near":{"post":{"operationId":"find_networks_on_ixps_near","summary":"Networks (ASNs) peering at IXPs in an area, with port capacity. Use for 'who is reachable on an exchange in/around <place>' or to find peering candidates in a metro. IXPs are located via their facilities. Give latitude+longitude (+radius_km) or a city/country.","description":"Networks (ASNs) peering at IXPs in an area, with port capacity. Use for 'who is reachable on an exchange in/around <place>' or to find peering candidates in a metro. IXPs are located via their facilities. Give latitude+longitude (+radius_km) or a city/country.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"integer","default":50},"city":{"type":"string"},"country":{"type":"string"},"ix_id":{"type":"integer","description":"Restrict to one IXP (PeeringDB id)"},"limit":{"type":"integer","default":100}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/search_allocations":{"post":{"operationId":"search_allocations","summary":"Search RIR address allocations - every IPv4/IPv6/ASN delegation the five registries published, with the date each block was handed to an organisation. Use for 'what has ARIN allocated recently', 'which blocks were assigned in <country> since <date>', or to date a prefix. Newest first by default.","description":"Search RIR address allocations - every IPv4/IPv6/ASN delegation the five registries published, with the date each block was handed to an organisation. Use for 'what has ARIN allocated recently', 'which blocks were assigned in <country> since <date>', or to date a prefix. Newest first by default.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"ipv4 | ipv6 | asn (default ipv4)"},"registry":{"type":"string","description":"arin | ripencc | apnic | lacnic | afrinic"},"country":{"type":"string","description":"ISO 2-letter code"},"allocated_from":{"type":"string","description":"YYYY-MM-DD"},"allocated_to":{"type":"string","description":"YYYY-MM-DD"},"prefix":{"type":"string","description":"Prefix or address to match/cover"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_allocations":{"post":{"operationId":"get_asn_allocations","summary":"Every IPv4/IPv6 block the registry delegated to an ASN's organisation, oldest first, plus the date the ASN itself was delegated. Each block carries its provenance: 'direct_allocation' (issued by the registry to this org) or 'transferred', with the selling organisation, the transfer date and whether it was a market transfer or a merger/acquisition. IMPORTANT: a transferred block's alloc_date is the date it changed hands - the registry overwrites the delegation record on transfer - so it is not evidence the address space is new. Use for 'when did AS X get its address space', 'did AS X buy its space or was it allocated', or to see a network's growth in allocations.","description":"Every IPv4/IPv6 block the registry delegated to an ASN's organisation, oldest first, plus the date the ASN itself was delegated. Each block carries its provenance: 'direct_allocation' (issued by the registry to this org) or 'transferred', with the selling organisation, the transfer date and whether it was a market transfer or a merger/acquisition. IMPORTANT: a transferred block's alloc_date is the date it changed hands - the registry overwrites the delegation record on transfer - so it is not evidence the address space is new. Use for 'when did AS X get its address space', 'did AS X buy its space or was it allocated', or to see a network's growth in allocations.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/search_transfers":{"post":{"operationId":"search_transfers","summary":"The RIR transfer logs: IPv4/IPv6 blocks and ASNs that changed hands between organisations, naming both parties. transfer_type distinguishes a market transfer (the block was bought or leased) from a merger/acquisition (the holding company itself was acquired). Use for 'who has been buying address space', 'where did this prefix come from', 'what has <company> sold', or 'which ASNs were acquired in <year>'. Covers ARIN, RIPE NCC, APNIC, LACNIC and AFRINIC.","description":"The RIR transfer logs: IPv4/IPv6 blocks and ASNs that changed hands between organisations, naming both parties. transfer_type distinguishes a market transfer (the block was bought or leased) from a merger/acquisition (the holding company itself was acquired). Use for 'who has been buying address space', 'where did this prefix come from', 'what has <company> sold', or 'which ASNs were acquired in <year>'. Covers ARIN, RIPE NCC, APNIC, LACNIC and AFRINIC.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer","description":"Find transfers of this AS number"},"prefix":{"type":"string","description":"Prefix or IP; matches any transfer whose range overlaps it"},"organization":{"type":"string","description":"Substring of either the selling or the buying org name"},"transfer_type":{"type":"string","description":"market | merger"},"registry":{"type":"string","description":"arin | ripencc | apnic | lacnic | afrinic"},"since":{"type":"string","description":"YYYY-MM-DD"},"until":{"type":"string","description":"YYYY-MM-DD"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/lookup_rir_org":{"post":{"operationId":"lookup_rir_org","summary":"A registry organisation and everything delegated to it - its ASNs and all its IPv4/IPv6 blocks. Identify it by ASN, by a prefix/IP it holds, by name, or by its registry org key. Use for 'what else does the org behind AS X hold'.","description":"A registry organisation and everything delegated to it - its ASNs and all its IPv4/IPv6 blocks. Identify it by ASN, by a prefix/IP it holds, by name, or by its registry org key. Use for 'what else does the org behind AS X hold'.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"prefix":{"type":"string","description":"Prefix or IP the org holds"},"name":{"type":"string","description":"Organisation / network name"},"registry":{"type":"string"},"org_key":{"type":"string","description":"The registry's opaque org id, as returned by this tool"}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_growing_networks":{"post":{"operationId":"find_growing_networks","summary":"Networks ranked by how fast they are GROWING or DECLINING - net new data-centre facility presence, new IXP presence, and new address space over a 30/90/365-day window. Combine with a location (latitude+longitude+radius_km, or city/country) to answer the sales question directly: 'which fast-growing networks have a presence where I can reach them'. Set direction=declining to find networks contracting. Caveat: IXP membership history only starts 2026-04, so IXP figures are not yet a true year-over-year comparison.","description":"Networks ranked by how fast they are GROWING or DECLINING - net new data-centre facility presence, new IXP presence, and new address space over a 30/90/365-day window. Combine with a location (latitude+longitude+radius_km, or city/country) to answer the sales question directly: 'which fast-growing networks have a presence where I can reach them'. Set direction=declining to find networks contracting. Caveat: IXP membership history only starts 2026-04, so IXP figures are not yet a true year-over-year comparison.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"window_days":{"type":"integer","description":"30, 90 (default) or 365"},"direction":{"type":"string","description":"growing (default) | declining"},"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"integer","default":100},"city":{"type":"string"},"country":{"type":"string","description":"ISO 2-letter code"},"presence":{"type":"string","description":"How the location is matched: 'facility' (default, PeeringDB presence) or 'ixp' (reachable on an exchange there)"},"min_facilities_added":{"type":"integer"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_growth":{"post":{"operationId":"get_asn_growth","summary":"Growth/decline detail for one ASN: net facility and IXP presence change and new address space over 30/90/365 days, with current totals for context.","description":"Growth/decline detail for one ASN: net facility and IXP presence change and new address space over 30/90/365 days, with current totals for context.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_events":{"post":{"operationId":"get_events","summary":"The change feed: ASNs newly registered, IP blocks newly allocated, resources transferred between organisations, networks joining/leaving IXPs, IXP port-speed changes, facility presence added/removed by a NETWORK, an EXCHANGE becoming present at or leaving a facility, a NETWORK gaining or losing a CDN cache, an EXCHANGE first appearing in or being delisted from PeeringDB, and a FACILITY doing the same (all #150). Filter by ASN, country, IXP, facility, event type and date range. Use for 'what changed for AS X', 'who joined IXPs in <country> recently', 'who bought address space recently', or 'what new networks appeared since <date>'. CAVEATS you must pass on: ixp_facility_added/ixp_facility_removed start EMPTY - ix_facility has no date column, so the history table took its first observation on 2026-07-27 and zero events means 'nothing has moved since we started looking', not 'no exchange has ever gained a facility'. cdn_cache_added/cdn_cache_removed start EMPTY for the same reason - cdn_cache_node is current state only, its first baseline was taken on 2026-07-27, and its granularity is the (ASN, programme) pair, so a cache farm growing from 3 nodes to 4 emits nothing. ixp_first_seen/ixp_delisted and facility_first_seen/facility_delisted are the EXCEPTION and do NOT start empty - they are derived from the monthly CAIDA PeeringDB archive and carry 2,347 events from 2010-08-01, though the series is monthly with three gaps so 111 delistings have a window up to five months wide. The facility pair adds 6,978 events on the same basis, derived from a first-seen/last-seen WINDOW rather than per-snapshot presence, which means it cannot express a gap and has no 'relisted' - measured at 6 disagreements in 1,965 when the same method is checked against exchanges. And ixp_speed_changed's 1,364 existing rows were all derived on 2026-07-25 from a membership table that has since been replaced; the current builder re-derives none of them.","description":"The change feed: ASNs newly registered, IP blocks newly allocated, resources transferred between organisations, networks joining/leaving IXPs, IXP port-speed changes, facility presence added/removed by a NETWORK, an EXCHANGE becoming present at or leaving a facility, a NETWORK gaining or losing a CDN cache, an EXCHANGE first appearing in or being delisted from PeeringDB, and a FACILITY doing the same (all #150). Filter by ASN, country, IXP, facility, event type and date range. Use for 'what changed for AS X', 'who joined IXPs in <country> recently', 'who bought address space recently', or 'what new networks appeared since <date>'. CAVEATS you must pass on: ixp_facility_added/ixp_facility_removed start EMPTY - ix_facility has no date column, so the history table took its first observation on 2026-07-27 and zero events means 'nothing has moved since we started looking', not 'no exchange has ever gained a facility'. cdn_cache_added/cdn_cache_removed start EMPTY for the same reason - cdn_cache_node is current state only, its first baseline was taken on 2026-07-27, and its granularity is the (ASN, programme) pair, so a cache farm growing from 3 nodes to 4 emits nothing. ixp_first_seen/ixp_delisted and facility_first_seen/facility_delisted are the EXCEPTION and do NOT start empty - they are derived from the monthly CAIDA PeeringDB archive and carry 2,347 events from 2010-08-01, though the series is monthly with three gaps so 111 delistings have a window up to five months wide. The facility pair adds 6,978 events on the same basis, derived from a first-seen/last-seen WINDOW rather than per-snapshot presence, which means it cannot express a gap and has no 'relisted' - measured at 6 disagreements in 1,965 when the same method is checked against exchanges. And ixp_speed_changed's 1,364 existing rows were all derived on 2026-07-25 from a membership table that has since been replaced; the current builder re-derives none of them.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"country":{"type":"string","description":"ISO 2-letter code"},"event_type":{"type":"string","description":"asn_registered | ip_allocated | resource_transferred | ixp_joined | ixp_left | ixp_speed_changed | facility_added | facility_removed | ixp_facility_added | ixp_facility_removed | cdn_cache_added | cdn_cache_removed | ixp_first_seen | ixp_delisted | facility_first_seen | facility_delisted"},"ix_id":{"type":"integer"},"facility_id":{"type":"integer"},"since":{"type":"string","description":"YYYY-MM-DD"},"until":{"type":"string","description":"YYYY-MM-DD"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_prefix_counts":{"post":{"operationId":"get_prefix_counts","summary":"Get IPv4/IPv6 prefix counts with history","description":"Get IPv4/IPv6 prefix counts with history","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_boomerang_stats":{"post":{"operationId":"get_boomerang_stats","summary":"Get boomerang routing stats for a country","description":"Get boomerang routing stats for a country","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"}},"required":["country"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/domain_lookup":{"post":{"operationId":"domain_lookup","summary":"Look up which ASN is associated with a domain","description":"Look up which ASN is associated with a domain","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/search_traceroutes":{"post":{"operationId":"search_traceroutes","summary":"Search traceroutes by source/dest ASN, country, destination host, category, boomerang, or quality score","description":"Search traceroutes by source/dest ASN, country, destination host, category, boomerang, or quality score","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"source_asn":{"type":"integer"},"dest_asn":{"type":"integer"},"source_country":{"type":"string"},"dest_country":{"type":"string"},"dest_host":{"type":"string"},"category":{"type":"string"},"boomerang":{"type":"boolean"},"min_score":{"type":"integer"},"limit":{"type":"integer","default":20}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_traceroute":{"post":{"operationId":"get_traceroute","summary":"Get one traceroute with its full hop-by-hop path","description":"Get one traceroute with its full hop-by-hop path","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/search_cdn_caches":{"post":{"operationId":"search_cdn_caches","summary":"Find CDN edge caches by country/provider/city. provider: ggc | oca | fna | akamai | aws_cloudfront | microsoft | apple. Node-level LOCATIONS exist only for ggc, oca, fna and akamai; for aws_cloudfront, microsoft and apple we know which ASNs host their caches but never collected node locations (#191), so those providers return the hosting ASNs with location_data='not_collected' instead of an empty list. An empty result for them means WE DID NOT COLLECT IT, never that the caches do not exist.","description":"Find CDN edge caches by country/provider/city. provider: ggc | oca | fna | akamai | aws_cloudfront | microsoft | apple. Node-level LOCATIONS exist only for ggc, oca, fna and akamai; for aws_cloudfront, microsoft and apple we know which ASNs host their caches but never collected node locations (#191), so those providers return the hosting ASNs with location_data='not_collected' instead of an empty list. An empty result for them means WE DID NOT COLLECT IT, never that the caches do not exist.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"provider":{"type":"string","description":"ggc|oca|fna|akamai|aws_cloudfront|microsoft|apple"},"city":{"type":"string"},"limit":{"type":"integer","default":200}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/search_domains":{"post":{"operationId":"search_domains","summary":"Search the domain→ASN index (which networks host which domains)","description":"Search the domain→ASN index (which networks host which domains)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"asn":{"type":"integer"},"limit":{"type":"integer","default":30}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_domain_intel":{"post":{"operationId":"get_domain_intel","summary":"Domain intelligence scan results for a domain (hosting ASNs and records)","description":"Domain intelligence scan results for a domain (hosting ASNs and records)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_density":{"post":{"operationId":"get_asn_density","summary":"The per-location IP-density breakdown behind the prospect map for one ASN. Requires Sales access. Locations are geolocated address-space observations, not registered offices or facilities.","description":"The per-location IP-density breakdown behind the prospect map for one ASN. Requires Sales access. Locations are geolocated address-space observations, not registered offices or facilities.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/compare_asns":{"post":{"operationId":"compare_asns","summary":"Compare multiple ASNs side by side - PoPs, IXPs, prefixes, routing quality, announced IPv4 address total, BGP downstream count and the owning registry organisation. Same columns as the /compare page. CAVEATS: `ipv4_addresses` is the merged union of announced space (more-specifics collapsed), and null means the network announces no IPv4 - it is not zero. `bgp_downstream_networks` comes from AS_PATH adjacency, which does NOT label relationships: an adjacency may be transit OR peering, and it is not proven hierarchy. `org` is resolved through the RIR allocation record, not asn.org_id.","description":"Compare multiple ASNs side by side - PoPs, IXPs, prefixes, routing quality, announced IPv4 address total, BGP downstream count and the owning registry organisation. Same columns as the /compare page. CAVEATS: `ipv4_addresses` is the merged union of announced space (more-specifics collapsed), and null means the network announces no IPv4 - it is not zero. `bgp_downstream_networks` comes from AS_PATH adjacency, which does NOT label relationships: an adjacency may be transit OR peering, and it is not proven hierarchy. `org` is resolved through the RIR allocation record, not asn.org_id.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asns":{"type":"array","items":{"type":"integer"}}},"required":["asns"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_history":{"post":{"operationId":"get_asn_history","summary":"Historical trends for an ASN: facility/IXP counts, total IXP capacity, and prefix counts over time","description":"Historical trends for an ASN: facility/IXP counts, total IXP capacity, and prefix counts over time","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_neighbours":{"post":{"operationId":"get_asn_neighbours","summary":"Every ASN observed adjacent to this one in BGP AS_PATHs, in BOTH directions - this is the tool for \"who does X peer with\". CAVEATS: AS_PATH does NOT label relationships, so an adjacency may be transit OR settlement-free peering OR a sibling; it is not proof of a commercial arrangement. Direction is \"seen nearer/further from the origin\", an observation and not proven hierarchy. Built from a single RouteViews collector, so a sparse result is a statement about collector visibility, not about the network. For networks that merely share an exchange - opportunity rather than observation - use get_asn_ixp_colocated instead.","description":"Every ASN observed adjacent to this one in BGP AS_PATHs, in BOTH directions - this is the tool for \"who does X peer with\". CAVEATS: AS_PATH does NOT label relationships, so an adjacency may be transit OR settlement-free peering OR a sibling; it is not proof of a commercial arrangement. Direction is \"seen nearer/further from the origin\", an observation and not proven hierarchy. Built from a single RouteViews collector, so a sparse result is a statement about collector visibility, not about the network. For networks that merely share an exchange - opportunity rather than observation - use get_asn_ixp_colocated instead.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"limit":{"type":"integer","default":100}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_ixp_colocated":{"post":{"operationId":"get_asn_ixp_colocated","summary":"Networks present on at least one of the same internet exchanges as this ASN, from PeeringDB membership, ranked by shared exchanges. NOT A PEER LIST: co-presence on a fabric is a peering OPPORTUNITY, and two networks can share an exchange and exchange no traffic. Covers only ASNs with a PeeringDB record and a listed port. For neighbours actually observed in BGP, use get_asn_neighbours.","description":"Networks present on at least one of the same internet exchanges as this ASN, from PeeringDB membership, ranked by shared exchanges. NOT A PEER LIST: co-presence on a fabric is a peering OPPORTUNITY, and two networks can share an exchange and exchange no traffic. Covers only ASNs with a PeeringDB record and a listed port. For neighbours actually observed in BGP, use get_asn_neighbours.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"limit":{"type":"integer","default":50}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_peers":{"post":{"operationId":"get_asn_peers","summary":"DEPRECATED ALIAS for get_asn_ixp_colocated - despite the name it returns IXP co-presence, not peers. Prefer get_asn_neighbours for observed BGP adjacency, or get_asn_ixp_colocated for shared exchanges.","description":"DEPRECATED ALIAS for get_asn_ixp_colocated - despite the name it returns IXP co-presence, not peers. Prefer get_asn_neighbours for observed BGP adjacency, or get_asn_ixp_colocated for shared exchanges.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"limit":{"type":"integer","default":50}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_lead_score":{"post":{"operationId":"get_asn_lead_score","summary":"Sales lead score and opportunity signals for an ASN","description":"Sales lead score and opportunity signals for an ASN","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_route_heatmap":{"post":{"operationId":"get_route_heatmap","summary":"Busiest city-to-city links observed in traceroute data (internet route heatmap)","description":"Busiest city-to-city links observed in traceroute data (internet route heatmap)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"limit":{"type":"integer","default":40}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_country_scoreboard":{"post":{"operationId":"get_country_scoreboard","summary":"Countries ranked by routing quality (boomerang rate, cross-border rate)","description":"Countries ranked by routing quality (boomerang rate, cross-border rate)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_tier1_comparison":{"post":{"operationId":"get_tier1_comparison","summary":"The 11 curated Tier-1 transit providers, ranked by BGP-wide downstream network count (RIB-derived, so the order does not depend on where our probes are). Returns each provider's 90-day traceroute figures (traces, destinations, source networks, path length, and the latency it adds between its own first and last observed hop) plus traceroute-observed customer networks and handoff cities from a separate 180-day weekly snapshot. Same population, window and ranking as the /traceroutes/analysis/tier1 page. Traceroute counts are corpus floors, not traffic shares","description":"The 11 curated Tier-1 transit providers, ranked by BGP-wide downstream network count (RIB-derived, so the order does not depend on where our probes are). Returns each provider's 90-day traceroute figures (traces, destinations, source networks, path length, and the latency it adds between its own first and last observed hop) plus traceroute-observed customer networks and handoff cities from a separate 180-day weekly snapshot. Same population, window and ranking as the /traceroutes/analysis/tier1 page. Traceroute counts are corpus floors, not traffic shares","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_common_routes":{"post":{"operationId":"get_common_routes","summary":"Most frequently observed source-ASN → destination-ASN traffic flows","description":"Most frequently observed source-ASN → destination-ASN traffic flows","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"limit":{"type":"integer","default":40}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_prospects":{"post":{"operationId":"find_prospects","summary":"Find sales-prospect networks by use case. use_case: transit | colocation | ixp | ixp_competitive | network_health. Same engine as the web prospecting tool. Dismissed/tagged leads are hidden by default, matching /prospect; set hide_dismissed=false to include them.","description":"Find sales-prospect networks by use case. use_case: transit | colocation | ixp | ixp_competitive | network_health. Same engine as the web prospecting tool. Dismissed/tagged leads are hidden by default, matching /prospect; set hide_dismissed=false to include them.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"use_case":{"type":"string"},"country":{"type":"string","default":"CA"},"min_traffic":{"type":"string"},"min_ixps":{"type":"integer"},"target_ixp":{"type":"integer"},"competitor_ixps":{"type":"string"},"hide_dismissed":{"type":"boolean","default":true},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_long_haul_customers":{"post":{"operationId":"find_long_haul_customers","summary":"Networks with long-haul routes (potential transport/backbone customers)","description":"Networks with long-haul routes (potential transport/backbone customers)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"min_distance_km":{"type":"integer","default":500},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_cloud_connect_prospects":{"post":{"operationId":"get_cloud_connect_prospects","summary":"Networks that are candidates for cloud on-ramp / direct connect","description":"Networks that are candidates for cloud on-ramp / direct connect","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_prospect_tags":{"post":{"operationId":"get_prospect_tags","summary":"Your saved prospect tags (customer/prospect/not_interested) on ASNs. A dismissed lead is stored as the not_interested tag, so this is also the review list for anything dismissed at /prospect.","description":"Your saved prospect tags (customer/prospect/not_interested) on ASNs. A dismissed lead is stored as the not_interested tag, so this is also the review list for anything dismissed at /prospect.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_clients":{"post":{"operationId":"get_clients","summary":"Your CRM clients/accounts and their member ASNs and IXPs - the list behind /prospect/clients. This is where a client_id for add_asn_to_client comes from. Scoped to your own clients plus your sales org's, exactly as the web page is.","description":"Your CRM clients/accounts and their member ASNs and IXPs - the list behind /prospect/clients. This is where a client_id for add_asn_to_client comes from. Scoped to your own clients plus your sales org's, exactly as the web page is.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer","default":100}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_search_templates":{"post":{"operationId":"get_search_templates","summary":"The seller profile, linked assets and target countries used to personalize /templates search recommendations. Requires access level 100, matching the page.","description":"The seller profile, linked assets and target countries used to personalize /templates search recommendations. Requires access level 100, matching the page.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_new_networks":{"post":{"operationId":"get_new_networks","summary":"Recently registered ASNs (new networks), optionally by country","description":"Recently registered ASNs (new networks), optionally by country","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"days":{"type":"integer","default":365},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_growing_networks":{"post":{"operationId":"get_growing_networks","summary":"Fastest-growing networks by facility/IXP expansion","description":"Fastest-growing networks by facility/IXP expansion","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_prefix_growth":{"post":{"operationId":"get_prefix_growth","summary":"Networks with the largest recent IPv4 prefix growth","description":"Networks with the largest recent IPv4 prefix growth","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"limit":{"type":"integer","default":30}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_country_benchmark":{"post":{"operationId":"get_country_benchmark","summary":"Per-country network/routing benchmark stats (network counts, IPv6 adoption, IX presence)","description":"Per-country network/routing benchmark stats (network counts, IPv6 adoption, IX presence)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_watchlist":{"post":{"operationId":"get_watchlist","summary":"Everything you are watching. Each row carries subject_type ('asn' or 'ixp' - the two types the UI can create today) and subject_id; `asn` is filled in only on an ASN row and is null otherwise, which means 'not about a network', not AS0. Adding an IXP to the watchlist is done in the portal at /ixps/<id>, not from MCP yet.","description":"Everything you are watching. Each row carries subject_type ('asn' or 'ixp' - the two types the UI can create today) and subject_id; `asn` is filled in only on an ASN row and is null otherwise, which means 'not about a network', not AS0. Adding an IXP to the watchlist is done in the portal at /ixps/<id>, not from MCP yet.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_alerts":{"post":{"operationId":"get_alerts","summary":"Your recent alerts/notifications","description":"Your recent alerts/notifications","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"unread_only":{"type":"boolean"},"limit":{"type":"integer","default":30}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_saved_searches":{"post":{"operationId":"get_saved_searches","summary":"Your saved searches","description":"Your saved searches","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_auto_scout":{"post":{"operationId":"get_auto_scout","summary":"Your auto-scout (auto-run saved searches) with the latest result counts AND the identifiers that arrived or left since the previous run - so \"3 new\" can name the three (#153)","description":"Your auto-scout (auto-run saved searches) with the latest result counts AND the identifiers that arrived or left since the previous run - so \"3 new\" can name the three (#153)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_favorites":{"post":{"operationId":"get_favorites","summary":"Your favorite ASNs","description":"Your favorite ASNs","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_my_traceroutes":{"post":{"operationId":"get_my_traceroutes","summary":"Your own submitted traceroute batches, or the traces in one owned batch. Unlike search_traceroutes, this reads your private submission corpus and always scopes by your user_id.","description":"Your own submitted traceroute batches, or the traces in one owned batch. Unlike search_traceroutes, this reads your private submission corpus and always scopes by your user_id.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"batch_id":{"type":"integer"},"archived":{"type":"boolean","default":false},"status":{"type":"string"},"category":{"type":"string"},"page":{"type":"integer","default":1},"limit":{"type":"integer","default":25}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/add_to_watchlist":{"post":{"operationId":"add_to_watchlist","summary":"Add an ASN to your watchlist","description":"Add an ASN to your watchlist","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"notes":{"type":"string"},"share_with_org":{"type":"boolean"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/remove_from_watchlist":{"post":{"operationId":"remove_from_watchlist","summary":"Remove an ASN from your watchlist","description":"Remove an ASN from your watchlist","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/tag_prospect":{"post":{"operationId":"tag_prospect","summary":"Tag an ASN as a sales prospect. tag: not_interested | prospected | customer | high_priority","description":"Tag an ASN as a sales prospect. tag: not_interested | prospected | customer | high_priority","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"tag":{"type":"string"},"notes":{"type":"string"}},"required":["asn","tag"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/untag_prospect":{"post":{"operationId":"untag_prospect","summary":"Remove your prospect tag from an ASN","description":"Remove your prospect tag from an ASN","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/save_search":{"post":{"operationId":"save_search","summary":"Save a search by name and its URL (e.g. \"/asns?country=CA&cdn=akamai\")","description":"Save a search by name and its URL (e.g. \"/asns?country=CA&cdn=akamai\")","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"search_url":{"type":"string"}},"required":["name","search_url"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/create_auto_scout":{"post":{"operationId":"create_auto_scout","summary":"Create an auto-scout that re-runs a saved search on a schedule and alerts when the result count changes","description":"Create an auto-scout that re-runs a saved search on a schedule and alerts when the result count changes","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"search_url":{"type":"string"},"frequency":{"type":"string","description":"weekly | monthly"}},"required":["name","search_url"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/set_auto_scout_frequency":{"post":{"operationId":"set_auto_scout_frequency","summary":"Change an auto-scout run frequency (weekly | monthly) by its id","description":"Change an auto-scout run frequency (weekly | monthly) by its id","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"frequency":{"type":"string"}},"required":["id","frequency"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/delete_auto_scout":{"post":{"operationId":"delete_auto_scout","summary":"Delete one of your auto-scouts by id. Requires access level 100 and is scoped to your user_id.","description":"Delete one of your auto-scouts by id. Requires access level 100 and is scoped to your user_id.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/create_client":{"post":{"operationId":"create_client","summary":"Create a CRM client/account in your sales org. tag: customer | prospect | not_interested | partner | high_priority","description":"Create a CRM client/account in your sales org. tag: customer | prospect | not_interested | partner | high_priority","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"tag":{"type":"string"},"notes":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/add_asn_to_client":{"post":{"operationId":"add_asn_to_client","summary":"Add an ASN to one of your CRM clients (client_id from get_prospect_tags or create_client)","description":"Add an ASN to one of your CRM clients (client_id from get_prospect_tags or create_client)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"client_id":{"type":"integer"},"asn":{"type":"integer"}},"required":["client_id","asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/mark_alerts_read":{"post":{"operationId":"mark_alerts_read","summary":"Mark your alerts read - all of them, or one by alert_id","description":"Mark your alerts read - all of them, or one by alert_id","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"alert_id":{"type":"integer"},"all":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/archive_alerts":{"post":{"operationId":"archive_alerts","summary":"Archive and mark read all alerts belonging to you and your sales org, matching /alerts/archive-all.","description":"Archive and mark read all alerts belonging to you and your sales org, matching /alerts/archive-all.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/list_watch_rule_types":{"post":{"operationId":"list_watch_rule_types","summary":"The alert-rule vocabulary: every subject/event combination a rule can be built on, the optional conditions each supports, and - just as importantly - the combinations that are deliberately WITHHELD because nothing in the system emits the event, each with the silent table and the reason. Call this before create_watch_rule. A rule type that is not listed as offered cannot be created, and asking for one returns the reason rather than an empty result.","description":"The alert-rule vocabulary: every subject/event combination a rule can be built on, the optional conditions each supports, and - just as importantly - the combinations that are deliberately WITHHELD because nothing in the system emits the event, each with the silent table and the reason. Call this before create_watch_rule. A rule type that is not listed as offered cannot be created, and asking for one returns the reason rather than an empty result.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/create_watch_rule":{"post":{"operationId":"create_watch_rule","summary":"Create an alert rule. rule_key comes from list_watch_rule_types; subject_value is the ASN, the PeeringDB exchange or facility id, or a registry key like \"arin:C12345678\"; predicate_key and predicate_value are optional and must be one of the conditions that rule type supports; frequency is daily | weekly | monthly. Evaluated by the nightly job, so the first result arrives with the next run - a new rule subscribes you to its subject's FUTURE and never replays history. Requires the Search Scout feature.","description":"Create an alert rule. rule_key comes from list_watch_rule_types; subject_value is the ASN, the PeeringDB exchange or facility id, or a registry key like \"arin:C12345678\"; predicate_key and predicate_value are optional and must be one of the conditions that rule type supports; frequency is daily | weekly | monthly. Evaluated by the nightly job, so the first result arrives with the next run - a new rule subscribes you to its subject's FUTURE and never replays history. Requires the Search Scout feature.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rule_key":{"type":"string"},"subject_value":{"type":"string"},"predicate_key":{"type":"string"},"predicate_value":{"type":"string"},"frequency":{"type":"string","description":"daily | weekly | monthly"},"name":{"type":"string"},"share_with_org":{"type":"boolean"}},"required":["rule_key","subject_value"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/list_watch_rules":{"post":{"operationId":"list_watch_rules","summary":"Your alert rules and your org-shared ones, each with the outcome of its last evaluation. A status of \"unevaluable\" means the rule could NOT be run - it is not zero matches. A status of \"never_observed\" means the rule's event types have never produced a row anywhere, which is different again.","description":"Your alert rules and your org-shared ones, each with the outcome of its last evaluation. A status of \"unevaluable\" means the rule could NOT be run - it is not zero matches. A status of \"never_observed\" means the rule's event types have never produced a row anywhere, which is different again.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/delete_watch_rule":{"post":{"operationId":"delete_watch_rule","summary":"Delete one of your alert rules by id, with its evaluation history. Scoped to rules you own or your org shares; a rule you cannot see is reported as not found.","description":"Delete one of your alert rules by id, with its evaluation history. Scoped to rules you own or your org shares; a rule you cannot see is reported as not found.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"}},"required":["id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_prefixes":{"post":{"operationId":"get_asn_prefixes","summary":"List the IPv4/IPv6 prefixes a network (ASN) announces, with counts","description":"List the IPv4/IPv6 prefixes a network (ASN) announces, with counts","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"limit":{"type":"integer","default":200}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_ipv6_reachability":{"post":{"operationId":"get_asn_ipv6_reachability","summary":"Evidence that a network's IPv6 actually WORKS, not just that it announces v6 space (#54). Returns the strongest level observed and every supporting observation with its date and vantage point. Levels, weakest to strongest: announced (announces v6 prefixes - NOT reachability evidence) < ixp_port (v6 configured on an IXP port, PeeringDB self-report) < aaaa (a name of theirs resolves AAAA) < path (a router in their own v6 space answered a traceroute) < icmp6 (their own space answered our ping) < tcp6 (a TCP handshake completed into their own space). An unconfirmed result means we have not observed it working - most ASNs have never been probed - and NEVER means the network has no IPv6.","description":"Evidence that a network's IPv6 actually WORKS, not just that it announces v6 space (#54). Returns the strongest level observed and every supporting observation with its date and vantage point. Levels, weakest to strongest: announced (announces v6 prefixes - NOT reachability evidence) < ixp_port (v6 configured on an IXP port, PeeringDB self-report) < aaaa (a name of theirs resolves AAAA) < path (a router in their own v6 space answered a traceroute) < icmp6 (their own space answered our ping) < tcp6 (a TCP handshake completed into their own space). An unconfirmed result means we have not observed it working - most ASNs have never been probed - and NEVER means the network has no IPv6.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/lookup_prefix":{"post":{"operationId":"lookup_prefix","summary":"For an IPv4 CIDR (e.g. 8.8.8.0/24), the ASN that announces the covering prefix","description":"For an IPv4 CIDR (e.g. 8.8.8.0/24), the ASN that announces the covering prefix","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cidr":{"type":"string"}},"required":["cidr"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_bogons":{"post":{"operationId":"get_asn_bogons","summary":"Bogon prefixes an ASN announces - IANA special-use space (RFC 1918, loopback, documentation, multicast, …) or space no RIR has delegated. Omit asn to list the ASNs announcing the most bogons. severity: high (special-use) | medium (undelegated) | low (registry holds it reserved; advisory only)","description":"Bogon prefixes an ASN announces - IANA special-use space (RFC 1918, loopback, documentation, multicast, …) or space no RIR has delegated. Omit asn to list the ASNs announcing the most bogons. severity: high (special-use) | medium (undelegated) | low (registry holds it reserved; advisory only)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"},"type":{"type":"string","description":"special_use | unallocated | reserved | confirmed (special_use + unallocated)"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/bulk_lookup_asns":{"post":{"operationId":"bulk_lookup_asns","summary":"Summarize several ASNs at once (name, country, traffic, PoPs, IXPs) in one call","description":"Summarize several ASNs at once (name, country, traffic, PoPs, IXPs) in one call","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asns":{"type":"array","items":{"type":"integer"}}},"required":["asns"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_top_networks":{"post":{"operationId":"get_top_networks","summary":"Top networks in a country ranked by a metric. by: traffic | prefixes | facilities | ixps","description":"Top networks in a country ranked by a metric. by: traffic | prefixes | facilities | ixps","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"by":{"type":"string"},"limit":{"type":"integer","default":20}},"required":["country"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_lead_reasons":{"post":{"operationId":"get_lead_reasons","summary":"Why an ASN is flagged as a sales lead - opportunity type and signal breakdown","description":"Why an ASN is flagged as a sales lead - opportunity type and signal breakdown","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/find_transport":{"post":{"operationId":"find_transport","summary":"Networks observed carrying long-haul traffic between two regions (transport/backbone providers). Filter by from/to country or city.","description":"Networks observed carrying long-haul traffic between two regions (transport/backbone providers). Filter by from/to country or city.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"from_country":{"type":"string"},"to_country":{"type":"string"},"from_city":{"type":"string"},"to_city":{"type":"string"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/lookup":{"post":{"operationId":"lookup","summary":"Everything we know about one IPv4 address, IPv6 address, CIDR or hostname, in a single call. Type is detected - no separate tool per input shape - and IPv6 is first-class. sections filters the payload: routing (covering prefix, origin ASN, more-specifics, bogon status), geo (resolved location with EVERY candidate source and which one won), registration (RIR allocation, registered org, contacts), rpki (Valid/Invalid/NotFound against the ROA set), rdns (PTR for an address, observed forward records for a prefix). Every section carries its own source and observation date so you can say how confident you are rather than presenting a guess as fact. Prefer this over lookup_ip and lookup_prefix, which answer narrower slices of the same question.","description":"Everything we know about one IPv4 address, IPv6 address, CIDR or hostname, in a single call. Type is detected - no separate tool per input shape - and IPv6 is first-class. sections filters the payload: routing (covering prefix, origin ASN, more-specifics, bogon status), geo (resolved location with EVERY candidate source and which one won), registration (RIR allocation, registered org, contacts), rpki (Valid/Invalid/NotFound against the ROA set), rdns (PTR for an address, observed forward records for a prefix). Every section carries its own source and observation date so you can say how confident you are rather than presenting a guess as fact. Prefer this over lookup_ip and lookup_prefix, which answer narrower slices of the same question.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","description":"IPv4, IPv6, CIDR (either family), or hostname"},"sections":{"type":"array","items":{"type":"string"},"description":"Any of: routing, geo, registration, rpki, rdns. Omit for all."}},"required":["target"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_asn_geo_prefixes":{"post":{"operationId":"get_asn_geo_prefixes","summary":"Which address space an ASN has in a place, at PREFIX granularity - the inverse of find_networks_near (which goes place -> ASNs). Give an asn alone for its full per-location prefix breakdown, or add city/country or latitude+longitude+radius_km to constrain it. Returns the announced CIDRs with the geolocated IP count of each, not just totals. Coverage differs by field: coordinates and ip_count come from the per-prefix footprint (79,121 ASNs), while city/region/country come from the per-ASN city footprint (6,515 ASNs) - so an ASN can have located prefixes with NO city label, and a city filter cannot see it. An empty result means we have no geolocated space for that ASN, NEVER that the network is absent from the area. Coordinates are a 0.1-degree grid cell (~11km), not a precise centroid.","description":"Which address space an ASN has in a place, at PREFIX granularity - the inverse of find_networks_near (which goes place -> ASNs). Give an asn alone for its full per-location prefix breakdown, or add city/country or latitude+longitude+radius_km to constrain it. Returns the announced CIDRs with the geolocated IP count of each, not just totals. Coverage differs by field: coordinates and ip_count come from the per-prefix footprint (79,121 ASNs), while city/region/country come from the per-ASN city footprint (6,515 ASNs) - so an ASN can have located prefixes with NO city label, and a city filter cannot see it. An empty result means we have no geolocated space for that ASN, NEVER that the network is absent from the area. Coordinates are a 0.1-degree grid cell (~11km), not a precise centroid.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer","description":"ASN number"},"city":{"type":"string","description":"City name, substring match. Only matches ASNs with city-level data."},"country":{"type":"string","description":"ISO 2-letter code"},"latitude":{"type":"number"},"longitude":{"type":"number"},"radius_km":{"type":"integer","default":50,"description":"Used with latitude+longitude"},"min_ips":{"type":"integer","description":"Only prefixes contributing at least this many geolocated IPs at a location"},"limit":{"type":"integer","default":200}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_seller_profile":{"post":{"operationId":"get_seller_profile","summary":"Your sales org seller profile and its full colo footprint (#56): facility-level service areas, metro/city-level service areas, and the buildings PeeringDB already places the org in as read-only suggestions. A footprint declared only by metro is a real footprint - do not read an empty service_areas as \"none\".","description":"Your sales org seller profile and its full colo footprint (#56): facility-level service areas, metro/city-level service areas, and the buildings PeeringDB already places the org in as read-only suggestions. A footprint declared only by metro is a real footprint - do not read an empty service_areas as \"none\".","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/update_seller_profile":{"post":{"operationId":"update_seller_profile","summary":"Update your sales org seller profile (sells_transit/colocation/transport/ixp/consulting/cloud_connect booleans; transit_max_speed, transit_focus, transit_regions, target_market_size, notes)","description":"Update your sales org seller profile (sells_transit/colocation/transport/ixp/consulting/cloud_connect booleans; transit_max_speed, transit_focus, transit_regions, target_market_size, notes)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"sells_transit":{"type":"boolean"},"sells_colocation":{"type":"boolean"},"sells_transport":{"type":"boolean"},"sells_ixp":{"type":"boolean"},"sells_consulting":{"type":"boolean"},"sells_cloud_connect":{"type":"boolean"},"transit_max_speed":{"type":"string"},"transit_focus":{"type":"string"},"transit_regions":{"type":"string"},"target_market_size":{"type":"string"},"notes":{"type":"string"}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/run_sql":{"post":{"operationId":"run_sql","summary":"Execute a read-only SQL SELECT query (admin only)","description":"Execute a read-only SQL SELECT query (admin only)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"limit":{"type":"integer","default":50}},"required":["query"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_system_stats":{"post":{"operationId":"get_system_stats","summary":"Overall system statistics","description":"Overall system statistics","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_data_coverage":{"post":{"operationId":"get_data_coverage","summary":"Data coverage scores per country","description":"Data coverage scores per country","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"min_score":{"type":"integer","default":0}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_buy_signals":{"post":{"operationId":"get_buy_signals","summary":"Networks showing ready-to-buy signals, ranked by lead score (sales lab)","description":"Networks showing ready-to-buy signals, ranked by lead score (sales lab)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"min_score":{"type":"integer","default":40},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_rpki_opportunities":{"post":{"operationId":"get_rpki_opportunities","summary":"Networks without RPKI/ROV (security upsell opportunities)","description":"Networks without RPKI/ROV (security upsell opportunities)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_industry_verticals":{"post":{"operationId":"get_industry_verticals","summary":"Networks by industry vertical with lead scores. vertical: isp | gov | cdn | corp | uni | biznet | mobile","description":"Networks by industry vertical with lead scores. vertical: isp | gov | cdn | corp | uni | biznet | mobile","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"vertical":{"type":"string"},"country":{"type":"string"},"limit":{"type":"integer","default":50}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/generate_outreach_templates":{"post":{"operationId":"generate_outreach_templates","summary":"Generate the personalized routing, peering and general outreach copy shown by /sales-lab/outreach for an ASN. Admin only, matching that page.","description":"Generate the personalized routing, peering and general outreach copy shown by /sales-lab/outreach for an ASN. Admin only, matching that page.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asn":{"type":"integer"}},"required":["asn"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_org_customers":{"post":{"operationId":"get_org_customers","summary":"Auto-detected customers for your org, split by what the detection actually means. `customers` are networks downstream of the org's OWN ASNs - strength=observed is a traceroute-observed transit handoff (strongest), strength=adjacency is BGP AS_PATH only and MAY BE PEERING RATHER THAN TRANSIT. `nearby_networks` are ASNs at an IXP or facility the org linked: proximity, not commerce - prospects, not customers. An empty customers list means nothing was observed, not that the org has no customers.","description":"Auto-detected customers for your org, split by what the detection actually means. `customers` are networks downstream of the org's OWN ASNs - strength=observed is a traceroute-observed transit handoff (strongest), strength=adjacency is BGP AS_PATH only and MAY BE PEERING RATHER THAN TRANSIT. `nearby_networks` are ASNs at an IXP or facility the org linked: proximity, not commerce - prospects, not customers. An empty customers list means nothing was observed, not that the org has no customers.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_org_prospects":{"post":{"operationId":"get_org_prospects","summary":"Get performance targeting prospects","description":"Get performance targeting prospects","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/get_org_assets":{"post":{"operationId":"get_org_assets","summary":"Get linked ASNs, facilities, IXPs","description":"Get linked ASNs, facilities, IXPs","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/set_service_area":{"post":{"operationId":"set_service_area","summary":"Add/update or remove a facility-level service area for your sales org and synchronize the seller-profile map projection. Requires Sales access.","description":"Add/update or remove a facility-level service area for your sales org and synchronize the seller-profile map projection. Requires Sales access.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"upsert | remove"},"facility_id":{"type":"integer"},"radius_km":{"type":"integer","default":200},"on_net_only":{"type":"boolean","default":false}},"required":["action","facility_id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/update_org_asset":{"post":{"operationId":"update_org_asset","summary":"Link or unlink an ASN, facility or IXP to your organization. Requires the same level-250 access as /org and rejects read-only org members.","description":"Link or unlink an ASN, facility or IXP to your organization. Requires the same level-250 access as /org and rejects read-only org members.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"link | unlink"},"asset_type":{"type":"string","description":"asn | facility | ixp"},"id":{"type":"integer"}},"required":["action","asset_type","id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/call/update_org_customer":{"post":{"operationId":"update_org_customer","summary":"Acknowledge or dismiss an auto-detected customer belonging to your organization. Requires the same level-250 access as /org and rejects read-only org members.","description":"Acknowledge or dismiss an auto-detected customer belonging to your organization. Requires the same level-250 access as /org and rejects read-only org members.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"acknowledge | dismiss"},"id":{"type":"integer"}},"required":["action","id"]}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"},"BearerAuth":{"type":"http","scheme":"bearer"}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}]}