subnethistory docs
Open the appApp
API reference/The lookup report

The lookup report

Field by field reference for the lookup response.

Every lookup endpoint returns this object. Fields the sources could not answer are null (rendered as n/a on the website); clients should ignore fields they do not recognise, because additive fields may appear within v1.

Top level

FieldTypeMeaning
queryobjectThe interpreted query.
ipobject or nullAddress facts, for address lookups.
registrationobject or nullThe registry record.
routingobject or nullCurrent routing state.
asnobject or nullProfile of the origin AS.
originHistoryarrayEvery AS that ever originated the space.
intelobjectPer address intelligence sampling.
timelinearrayEvery dated event, sorted.
insightsarrayPlain language findings.
tagsobjectConfirmed and suggested labels.
sourcesarrayProvenance per dataset.
metaobjectTiming, cache and truncation information.

query and ip

FieldTypeMeaning
query.rawstringExactly what was asked.
query.kindstringip, prefix or asn.
query.normalizedstringThe canonical form the report is about, for example AS13335.
ip.addressstringThe normalised address.
ip.familystringipv4 or ipv6.
ip.specialUseobject or nullSet for reserved space: label, note and the reserving cidr.

registration

FieldTypeMeaning
rirstring or nullThe responsible registry.
cidrstring or nullThe registered block containing the queried address. Null when the allocation is not one CIDR; the range fields then carry the answer.
cidrsarrayEvery CIDR the allocation covers, in the registry's order.
startAddress, endAddressstring or nullThe allocation's range.
addressCountstring or nullNumber of addresses in the range, as a string because a large IPv6 block overflows a number.
handle, namestring or nullThe registry's identifiers.
typestring or nullThe registry's classification, verbatim.
statusarrayRegistry status flags, verbatim.
countrystring or nullRegistered country.
orgNamestring or nullHolding organisation.
registeredAt, lastChangedAt, allocatedAtstring or nullRegistry dates.
abuseEmailstring or nullPublished abuse contact.
partiesarrayContacts, each with role, name, org, handle, email, phone, address.
parentsarrayParent blocks, each with cidr, name, handle, type, country.
remarksarrayRegistry remarks, verbatim.
whoisarrayRaw key and value pairs for the raw view.

routing

FieldTypeMeaning
announcedboolean or nullWhether the covering prefix is visible in global BGP. Null when no routing source answered.
prefixstring or nullThe announced covering prefix.
originsarrayOriginating ASes, each { asn, holder }.
rpkiobject or nullstatus plus roas, each { origin, prefix, maxLength, validity }.
moreSpecificsnumber or nullAnnouncements inside the covering prefix.
lessSpecificstring or nullThe covering announcement above, when one exists.

asn

FieldTypeMeaning
asnnumberThe AS number.
name, description, orgNamestring or nullIdentity as published.
country, rirstring or nullRegistration location and registry.
allocatedAt, registeredAt, lastChangedAtstring or nullRegistry dates.
allocationStatusstring or nullRegistry allocation status.
websitestring or nullPublished website.
abuseEmails, contactEmailsarrayPublished contact addresses.
ownerAddressarrayRegistered postal address lines.
announcedboolean or nullWhether the AS currently announces anything.
prefixCountV4, prefixCountV6number or nullAnnounced prefix counts by family.
prefixesarrayPreview of announced blocks: prefix, family, firstSeen, lastSeen, ongoing.
prefixTotalnumberTrue total behind the preview.
upstreams, downstreamsarrayNeighbour previews: asn, name, country, strength.
neighbourCountsobject or nullTrue totals: upstreams, downstreams, uncertain.
ixsarrayExchange presence: name, country, city, speed.
ixDataAvailablebooleanFalse when the exchange dataset was not queried. An empty ixs proves nothing then.
peeringdbobject or nullSelf declared profile: registered, id, name, infoType, traffic, scope, ratio, policy, website, irrAsSet, created, updated.
partiesarrayContacts, same shape as registration parties.
spaceobject or nullSampling across announced space, below.

asn.space

FieldTypeMeaning
blocksarrayOne entry per shown block, below.
shownnumberBlocks shown, which may be fewer than announced.
announcednumberBlocks the AS announces.
samplednumberSampled blocks shown.
sampledTotalnumberSampled blocks that exist, before the display cap.
clean, mild, flagged, unsamplednumberBlock counts by status.

Each entry of blocks:

FieldTypeMeaning
prefixstringThe announced block.
samplednumberAddresses checked inside it.
anonymity, infrastructure, cleannumberSampled addresses by category.
statusstringflagged, mild, clean or unsampled.
maxRisknumber or nullWorst risk score seen inside.
examplestring or nullAn address to open for the story.
notestringOne line summary.

originHistory

One row per AS that has ever originated the space:

FieldTypeMeaning
asn, holdernumber, string or nullThe origin network.
prefixstringThe exact prefix it announced.
scopestringHow that prefix relates to the queried space.
firstSeen, lastSeenstring, string or nullThe observed window.
ongoingbooleanWhether the announcement is current.
windowCountnumberDistinct visibility windows.
peakPeersnumber or nullMost full BGP peers that saw it.

intel

FieldTypeMeaning
enabledbooleanFalse when no per address feed is configured.
sampledFromstring or nullThe block addresses were sampled from. Null for a single address query.
samplesarrayOne row per feed per address, below.
rollupobjectBlock level summary, below.
changesarrayVerdict flips: ip, provider, at, field, before, after.
trendobjectRisk over time per feed, with daysObserved and observations stating how much data stands behind it.
addressesarrayOne per sampled address, below.
groupsarrayAddresses collapsed by behaviour: category, label, note, count, example.
flaggedSharearrayTwelve months of { month, label, pct, sampled, risk }. pct is null for a month nobody looked; that is not zero.
blockSizestring or nullAddresses in the queried block, as a string because a /8 overflows a number.
samplesTruncatedbooleanTrue when the read hit its row cap, so every count in rollup is a floor rather than a total. The cap counts rows and one address rated by three feeds spends three of them, so a large swept block can reach it. Check this before treating addressesChecked as the whole picture.
activeScanBlockobject or nullResult of our own active check on the covering block: proxies (count of addresses confirmed answering as proxies) and scannedAt (ISO 8601). Null when the block has not been actively checked.
activeScanCoverageobject or nullOn an ASN report, what our own scanning covered: blocksChecked, blocksWithExits, announcedBlocks (merged /24-equivalents, or null when we have not enumerated it), announcedAsOf, announcedSource, provenShare, labelled, asOf. Present whether or not the network carries a label, so findings are visible either way. provenShare is null whenever announcedBlocks is null or the measured count exceeds it, and is never above 1. Null for a non-ASN subject or a network we have not scanned.

intel.samples

Each row is one feed's reading of one address: ip, provider, firstSeen, lastSeen, observations, the verdicts isVpn, isProxy, isTor, isDatacenter, isAbuser, isMobile, isBlacklisted (each true, false or null), riskScore and riskLabel, ispRiskScore and ispRiskLabel, blocklistCount and blocklists, plus context: asn, asnOrg, asnType, company, companyType, org, country, service, serviceType.

intel.rollup

FieldTypeMeaning
addressesCheckednumberDistinct addresses sampled.
vpn, proxy, tor, datacenter, abuser, blacklistednumberAddresses carrying each verdict.
maxRiskScorenumber or nullWorst risk score seen.
addressesAtMaxRisknumberDistinct addresses at that worst score.
avgRiskScorenumber or nullAverage across sampled addresses.
maxIspRiskScore, ispRiskLabelnumber or null, string or nullWorst operator level risk any feed assigns.
maxBlocklistCountnumber or nullMost public blocklists carrying any one address. Null means no feed had a blocklist verdict at all, which is not zero.
blocklistsarrayEvery list that flagged anything here, unioned. A different quantity from the count above.
servicesarrayServices detected on sampled addresses.
asns, orgsarrayOperating networks and organisations seen.
tenantsarrayOrganisations using the space where they differ from the ISP.
agreementobjectPer verdict: { agree, sole, contested, feedsTrue, feedsRated }. How much of each count rests on one unopposed feed.
mixedbooleanTrue when sampled addresses disagree about what the block is.

intel.addresses

FieldTypeMeaning
ipstringThe address.
categorystringanonymity, infrastructure, lapsed or clean.
risk, riskLabelnumber or null, string or nullHighest score any source reported for this address, with that source's own label.
riskFromstring or nullWhich source supplied risk, because the sources do not measure the same quantity. scamalytics is a fraud rate over web sessions, which that vendor scopes to web traffic rather than server to server connections, and which falls back to the operator average for an address they have not observed; a low value there can mean few observations rather than a clean address. activescan is our own connection to the address. Null exactly when risk is null.
disagreebooleanFeeds place the address in different bands of the scale (low, medium, high), so one number would mislead. Differing numbers within a band do not set this.
confirmedbooleanOur own check found this address serving as a proxy, and it still is. A separate claim from risk: that is what feeds think of the network, this is what we measured at the address.
lastConfirmedAtstring or nullWhen we last saw it serving, whether or not it still is. confirmed false with a date here means a proxy that has gone quiet, and category is then lapsed. Null means we have never caught it serving, which is not the same as clean: it may never have been checked.
checksnumberTotal readings of this address.
lastSeenstring or nullLast reading.
chipsarrayShort verdict labels for display.
contestedarrayThe subset of chips one feed asserts and another denies. Hedge these.
notestringOne line summary.
sparkarrayRisk on each day observed, oldest first.

timeline and insights

Timeline events are documented under History and archive: at, until, ongoing, category, title, detail, source, data.

FieldTypeMeaning
insights[].levelstringinfo, notice or warn.
insights[].codestringStable machine readable identifier for the finding.
insights[].leadstringThe short claim.
insights[].textstringThe explanation that earns it.

tags

FieldTypeMeaning
asnarrayConfirmed tags on the origin AS.
prefixarrayConfirmed tags on blocks covering or overlapping the subject.
suggestedarrayMachine proposals awaiting an analyst: tagSlug, label, category, severity, color, confidence, rationale, source.
maxSeveritynumberHighest severity across confirmed tags. Drives the banner.

Each confirmed assignment carries the tag identity (tag_slug, label, category, severity, color) plus confidence, notes, evidence, source, created_by, created_at, updated_at, validity timestamps, and on prefix tags the cidr that carries the tag.

sources

FieldTypeMeaning
providerstringSource id, matching /api/v1/sources.
datasetstringWhich of the source's datasets this row is about.
okbooleanWhether it answered usefully.
statestringfresh, revalidating, refreshed, stale, pending or error. See Data freshness and caching.
statusnumberUpstream HTTP status.
ageMsnumber or nullAge of the cached answer.
fetchedAtstring or nullWhen it was fetched.
errorstring or nullWhat went wrong, when something did.

meta

FieldTypeMeaning
generatedAtstringWhen the report was assembled.
durationMsnumberAssembly time.
cacheHitbooleanAt least one dataset came from cache.
fullyCachedbooleanEvery dataset came from cache.
partialbooleanA dataset was still pending or failed. True whenever pendingDatasets or failedDatasets is above zero.
pendingDatasetsnumberDatasets still being fetched when the report was sent.
failedDatasetsnumberDatasets whose source failed with nothing cached to fall back on.
retryAfterMsnumber or nullHow long to wait before repeating the lookup, in milliseconds. Null when the report is complete. See Data freshness and caching.
omittedAnnouncementsnumberRouting announcements left off the timeline for size.
Last updated 2026-08-15subnethistory.com