OpenAPI 3.1.0 · IPBGP Public API v2.1.0

API reference

Authoritative customer contract for API-key IP and ASN lookups plus anonymous product-assist and Intel preview routes. Operational listeners and the paid Intel/submission surface are intentionally not part of this facet.

Rendered directly from the public OpenAPI contract, so this page can't drift from the live API.

API assistant

Ask a quick question about endpoints, auth, errors, or response fields.

Try asking which endpoint to use for a single IP lookup or bulk request.

Your messages are processed by a model to generate the answer. This chat is not stored by default. A transcript is sent to sales only if you explicitly consent.

Authentication

IP lookup operations require your customer API key as a Bearer token. Operations marked Anonymous use their documented abuse, captcha and quota controls instead. Keys are issued and managed in your dashboard.

header
Authorization: Bearer ipbgp_live_xxx

Responses carry RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers.

Quickstart

Start with the root self-check. It evaluates the public IP making this request only; use /v1/ip/{ip} with a Bearer key when you need to query any other IP.

curl
# 1. Public/full self-check for the IP making this request
curl https://ipbgp.org

# 2. Look up any IP (full verdict, API key required)
curl https://ipbgp.org/v1/ip/8.8.8.8 \
  -H "Authorization: Bearer ipbgp_live_xxx"

# 3. Score your own caller IP with an API key
curl https://ipbgp.org/v1/me \
  -H "Authorization: Bearer ipbgp_live_xxx"

# 4. Bulk lookup
curl -X POST https://ipbgp.org/v1/ip/bulk \
  -H "Authorization: Bearer ipbgp_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"ips":["8.8.8.8","1.1.1.1"]}'

Query any IP in your language of choice:

curl https://ipbgp.org/v1/ip/8.8.8.8 \
  -H "Authorization: Bearer ipbgp_live_xxx"

Errors & rate limiting

Non-2xx responses use a uniform JSON body. On 429 a Retry-After header tells you when to retry.

error body
{
  "error": {
    "code": "rate_limited",
    "message": "Quota exceeded"
  }
}
400Closed customer error envelope
401Closed customer error envelope
402Closed customer error envelope
403Closed customer error envelope
404Closed customer error envelope
413Closed customer error envelope
429Closed customer error envelope
500Closed customer error envelope
501Closed customer error envelope
502Closed customer error envelope
503Closed customer error envelope
504Closed customer error envelope

Endpoints

GET/

Classify the caller IP

Authentication: API key Bearer

Responses
200IpResultCustomer-safe IP result400ErrorClosed customer error envelope401ErrorClosed customer error envelope402ErrorClosed customer error envelope403ErrorClosed customer error envelope429ErrorClosed customer error envelope503ErrorClosed customer error envelope504ErrorClosed customer error envelope
GET/v1/ip/{ip}

Classify one IP address

Authentication: API key Bearer

Parameters
  • in
Responses
200IpResultCustomer-safe IP result400ErrorClosed customer error envelope401ErrorClosed customer error envelope402ErrorClosed customer error envelope403ErrorClosed customer error envelope429ErrorClosed customer error envelope503ErrorClosed customer error envelope504ErrorClosed customer error envelope
GET/v1/me

Classify the authenticated caller IP

Authentication: API key Bearer

Responses
200IpResultCustomer-safe IP result400ErrorClosed customer error envelope401ErrorClosed customer error envelope402ErrorClosed customer error envelope403ErrorClosed customer error envelope429ErrorClosed customer error envelope503ErrorClosed customer error envelope504ErrorClosed customer error envelope
POST/v1/ip/bulk

Classify a bounded list of IP addresses

Authentication: API key Bearer

Request body: BulkRequest

Responses
200BulkResponseOrdered bulk result400ErrorClosed customer error envelope401ErrorClosed customer error envelope402ErrorClosed customer error envelope403ErrorClosed customer error envelope413ErrorClosed customer error envelope429ErrorClosed customer error envelope503ErrorClosed customer error envelope504ErrorClosed customer error envelope
GET/v1/asn/{asn}

Resolve a customer-safe ASN profile

Authentication: API key Bearer

Parameters
  • asn in path · required
Responses
200AsnProfileCustomer-safe ASN profile400ErrorClosed customer error envelope401ErrorClosed customer error envelope402ErrorClosed customer error envelope403ErrorClosed customer error envelope404ErrorClosed customer error envelope429ErrorClosed customer error envelope500ErrorClosed customer error envelope501ErrorClosed customer error envelope502ErrorClosed customer error envelope503ErrorClosed customer error envelope504ErrorClosed customer error envelope
POST/v1/chat

Anonymous product assistant

Authentication: Anonymous

Request body: ChatRequest

Responses
200ChatReplyAssistant response400ErrorClosed customer error envelope404ErrorClosed customer error envelope429ErrorClosed customer error envelope503ErrorClosed customer error envelope
POST/v1/leads

Submit an anonymous sales lead

Authentication: Anonymous

Request body: LeadInput

Responses
200OkAccepted400ErrorClosed customer error envelope404ErrorClosed customer error envelope429ErrorClosed customer error envelope500ErrorClosed customer error envelope
GET/v1/public/intel/hosts/{ip}

Anonymous host Intel preview

Authentication: Anonymous

Parameters
  • in
Responses
200PublicIntelHostResponseAnonymous host response; locked callers receive the narrow preview and previously unlocked callers receive the full customer-safe projection. This shared contract covers the internal handler's 500 failures and the edge-derived listener's 502/503/504 upstream failures.400ErrorClosed customer error envelope404ErrorClosed customer error envelope500ErrorClosed customer error envelope502ErrorClosed customer error envelope503ErrorClosed customer error envelope504ErrorClosed customer error envelope
POST/v1/public/intel/hosts/{ip}/unlock

Consume an anonymous host-preview unlock

Authentication: Anonymous

Parameters
  • in

Request body: CaptchaInput

Responses
200PublicIntelHostUnlockedResponseFull customer-safe host projection after a successful unlock400ErrorClosed customer error envelope401ErrorClosed customer error envelope404ErrorClosed customer error envelope429ErrorClosed customer error envelope500ErrorClosed customer error envelope502ErrorClosed customer error envelope503ErrorClosed customer error envelope504ErrorClosed customer error envelope
GET/v1/public/intel/pivot

Consume an anonymous pivot preview

Authentication: Anonymous

Parameters
  • seed in query · required
  • depth in query
  • nodes in query
  • fanout in query
  • X-Captcha-Token in header
Responses
200PublicIntelPivotResponseAnonymous pivot preview400ErrorClosed customer error envelope401ErrorClosed customer error envelope404ErrorClosed customer error envelope429ErrorClosed customer error envelope500ErrorClosed customer error envelope502ErrorClosed customer error envelope503ErrorClosed customer error envelope504ErrorClosed customer error envelope
GET/v1/plans

List customer-safe public plan facts

Authentication: Anonymous

Responses
200PlanCatalogVersioned customer-safe public plan catalog404ErrorClosed customer error envelope503ErrorClosed customer error envelope
GET/v1/attributions

Static third-party source attribution registry

License-compliance page for the sources whose terms (CC-BY and similar) require visible credit. The registry is static product data - source name, license, canonical url, what the product uses it for, and the exact credit line - and is identical for every caller. It is never a per-query or per-answer source record: it says nothing about which source produced any individual answer, and callers must not read it as such. This is the one customer response deliberately served outside the redaction-whitelist presentation path, because its whole purpose is to name third parties. The page is static, strongly ETagged and cacheable for an hour; send `If-None-Match` to get 304 instead of the body. Only GET and HEAD are answered - any other method answers 405 with an `Allow` header, and a deployment that ships none of the licensed data does not mount the page at all, so the route then answers the standard 404.

Authentication: Anonymous

Responses
200AttributionRegistryStatic third-party attribution registry. Two representations of the same registry are content-negotiated on `Accept`, each with its own strong ETag and `Vary: Accept`: JSON by default (including `*/*` and browser Accept strings), and the ready-to-embed plain-text credit block when `text/plain` outranks `application/json`.304Registry unchanged; the caller's If-None-Match matched the current strong ETag. Body is empty.404ErrorClosed customer error envelope
POST/v1/feedback

Report a disputed classification verdict

Anonymous, rate-limited intake for "this verdict is wrong about my address". The submission is queued for human review; 202 acknowledges the queue write only and promises no verdict change. The response never restates the current verdict, so the route cannot be used as an unmetered lookup oracle.

Authentication: Anonymous

Request body: VerdictFeedbackInput

Responses
202VerdictFeedbackReceiptFeedback queued for review400ErrorClosed customer error envelope404ErrorClosed customer error envelope429ErrorClosed customer error envelope500ErrorClosed customer error envelope504ErrorClosed customer error envelope

Schemas

Error
FieldTypeDescription
error*object
IpResult
FieldTypeDescription
ip*string
version*string
classification*Classification
trust*Trust
networkNetwork
anonymizationAnonymization
geographyGeography
abuseAbuse
contactsContacts
activityActivity
historyHistory
hostnamestring
registry*Registry
risks*string[]
meta*Meta
Classification
FieldTypeDescription
connection_type*residential | business | hosting | mobile | datacenter | education | government | satellite | unknown
is_residential*boolean
is_hosting*boolean
is_mobile*boolean
is_datacenter*boolean
is_cgnat*boolean
type_confidence*integer
Trust
FieldTypeDescription
score*integer
risk_score*integer
recommendation*allow | review | block
residential_probability*number
confidence*integer
reasonsReason[]
risk_factorsRiskFactor[]
Reason
FieldTypeDescription
code*string
category*network | measurement | reputation | location | history
impact*positive | negative | neutral
detail*string
RiskFactor
FieldTypeDescription
code*string
category*anonymization | reputation | infrastructure | structural
severity*low | medium | high
detail*string
Network
FieldTypeDescription
asn*integer
asn_namestring
as_type*string
customer_cone_size*integer
upstream_asnsinteger[]
prefix_upstream_asnsinteger[]
prefix_upstream_regionsRegionUpstream[]
prefixstring
prefix_sizeinteger
prefix_stabilitystring
rpki_valid*boolean | string
aspa_status*valid | invalid | unknown
label_scoresobject
irrstring
origin_consistencystring
alternate_originsinteger[]
usage_tagsstring[]
recently_allocated*boolean
is_anycast*boolean
anycastAnycast
leasingLeasing
carrierCarrier
ipv6_iidstring
RegionUpstream
FieldTypeDescription
vantage*string
continentstring
upstreams*integer[]
Anycast
FieldTypeDescription
is_anycast*boolean
suspectedboolean
confidence*integer
instance_countinteger
methodslatency | path_divergence | routing | known[]
Leasing
FieldTypeDescription
leased*boolean
leased_fromstring
holder_orgstring
confidencenumber
Carrier
FieldTypeDescription
namestring
country_codestring
mccstring
mncstring
Anonymization
FieldTypeDescription
is_proxy*boolean
is_vpn*boolean
is_tor*boolean
is_relay*boolean
is_residential_proxy*boolean
provider*string | null
Geography
FieldTypeDescription
country_codestring
countrystring
regionstring
citystring
postal_codestring
streetstring
address_precisionaddress | city | region | country | approximate
timezonestring
latitudenumber
longitudenumber
confidence*integer
confidence_radius_kmnumber
accuracy*rooftop | city | region | country | unannounced | anycast | unknown
methodstring
sourcegeofeed | irr | whois | registry
Abuse
FieldTypeDescription
is_abuser*boolean
abuse_score*integer
abuse_velocity*none | low | medium | high
threat_types*string[]
benign_scanner*boolean
Contacts
FieldTypeDescription
abuse*Contact
noc*Contact
sales*Contact
Contact
FieldTypeDescription
emailstring
phonestring
websitestring
Activity
FieldTypeDescription
open_proxy*boolean
tor_exit*boolean
scanned*boolean
last_seenstring
open_portsinteger[]
tls_certstring
History
FieldTypeDescription
available*boolean
first_seenstring
last_seenstring
observation_count*integer
asn_stability*number
geo_stability*number
stability*string
ever_hosting*boolean
Registry
FieldTypeDescription
status*allocated | unallocated | reserved | unknown
rirstring
reservationstring
Meta
FieldTypeDescription
query_time*string
data_epochstring
freshnessfresh | recent | stale
BulkRequest
FieldTypeDescription
ips*string[]
BulkResponse
FieldTypeDescription
results*IpResult[]
AsnProfile
FieldTypeDescription
asn*integer
version*string
asn_namestring
as_type*string
residential_prior*number
usage_tags*string[]
confidence*integer
topologyAsnTopology
AsnTopology
FieldTypeDescription
customer_cone_size*integer
originated_prefixes*integer
upstreamsinteger[]
sample_customersinteger[]
truncatedboolean
ChatRequest
FieldTypeDescription
messages*ChatMessage[]
session_idstring
localestring
challenge_tokenstringToken supplied only after a chat abuse rule requests a challenge.
ChatMessage
FieldTypeDescription
role*user | assistant
content*string
ChatReply
FieldTypeDescription
reply*string
sourcesChatSource[]
mode*generated | fallback | unavailable
locale*string
challengeChatChallenge
handoffChatHandoff
ChatSource
FieldTypeDescription
title*string
url*string
ChatChallenge
FieldTypeDescription
required*boolean
provider*turnstileChallenge provider identity; never the identity of a model or content provider.
action*string
ChatHandoff
FieldTypeDescription
suggested*boolean
reason*string
LeadInput
FieldTypeDescription
email*string
namestring
messagestring
companystring
use_casestring
transcriptChatMessage[]Supplying a transcript requires explicit consent=true at runtime.
consentbooleanMust be true when transcript is present; enforced by the lead runtime.
PlanCatalog
FieldTypeDescription
revision*string
plans*PlanFact[]
PlanFact
FieldTypeDescription
tier*free | pro | business | enterprise
public_name*Free | Pro | Business | Enterprise
api_level*Summary | Standard | Advanced
price_usd_monthlyinteger | nullOmitted or null for contact-only plans.
contact_only*boolean
public*boolean
capabilities*string[]
Ok
FieldTypeDescription
ok*boolean
AttributionRegistry
FieldTypeDescription
revision*stringYYYY-MM month the registry was last reconciled against the internal licence ledger. It is a publication revision, never a query time.
notice*stringPage-level statement that this is a single aggregated disclosure and not a per-query source record.
sources*Attribution[]
Attribution
FieldTypeDescription
name*stringThird-party source name as its licence requires it to be credited.
license*licence identifierClosed licence identifier. A source whose licence is not on this list is not published here at all.
url*stringCanonical https url for the source or its licence.
used_for*stringPlain-language statement of what the product uses the source for.
attribution_required*booleanTrue when the licence obliges us to display a credit line for this source; false for CC0 and public-domain rows, which are listed for transparency only.
attribution_textstringExact credit line to display. Present exactly when attribution_required is true.
since*stringYYYY-MM month this source entered the product.
VerdictFeedbackInput
FieldTypeDescription
subject*stringIP address the disputed verdict was about.
predicted*residential | business | hosting | mobile | datacenter | education | government | satellite | unknownClassification the caller received. Same closed set as the classification connection type.
corrected*residential | business | hosting | mobile | datacenter | education | government | satellite | unknownClassification the caller believes is right. Same closed set as the classification connection type.
notestring
contactstringOptional reply address; supplying it is consent to be contacted about this report.
challenge_tokenstringOptional captcha challenge token. Spending a valid one buys a single extra submission past the per-IP rate limit after a 429; it grants no other authority and is never required.
VerdictFeedbackReceipt
FieldTypeDescription
ok*boolean
id*stringOpaque receipt id for this report; carries no verdict facts.
CaptchaInput
FieldTypeDescription
captcha_tokenstring
PublicIntelPreview
FieldTypeDescription
mode*string
lockedboolean
captcha_requiredboolean
login_requiredboolean
unlocks_remaininginteger
pivot_remaininginteger
active_checks_remaininginteger
messagestring
PublicIntelHostResponse
FieldTypeDescription
PublicIntelHostLockedResponse
FieldTypeDescription
available*boolean
hostPublicHostPreview
preview*LockedPublicIntelPreview
PublicIntelHostUnlockedResponse
FieldTypeDescription
available*boolean
hostPublicHostExposure
preview*UnlockedPublicIntelPreview
PublicHostPreview
FieldTypeDescription
ip*string
open_portsinteger[]
score*number
labelsstring[]
observed_atstring
PublicHostExposure
FieldTypeDescription
ip*string
os_contextOSContext
softwareSoftware[]
open_portsinteger[]
servicesService[]
web_propertiesWebProperty[]
vulnsVulnerability[]
threatsThreat[]
certCertificateHealth
networkNetwork
geographyGeography
trust_contextTrustContext
ai_summaryAISummary
score*number
labelsstring[]
observed_atstring
OSContext
FieldTypeDescription
family*Linux-like | Windows-like | BSD-like | network-device-like | embedded-device-like | unknown
confidence*number
middlebox_affected*boolean
Software
FieldTypeDescription
product*string
versionstring
portinteger
Service
FieldTypeDescription
port*integer
transport_protostring
service_namestring
softwarestring[]
labelsstring[]
observed_atstring
WebProperty
FieldTypeDescription
fqdn*string
served*boolean
resolves_to*boolean
fcrdns*boolean
portinteger
titlestring
labelsstring[]
Vulnerability
FieldTypeDescription
cve*string
cpestring
severitystring
cvss_versionstring
cvssnumber
epssnumber
epss_percentilenumber
kev*boolean
kev_date_addedstring
exploit_maturitystring
ssvcstring
portinteger
confirmationstring
confidenceinteger
observed_atstring
Threat
FieldTypeDescription
familystring
actorstring
tacticstring
threat_typestring
confidenceinteger
observed_atstring
CertificateHealth
FieldTypeDescription
browser_trusted*boolean
ever_valid*boolean
revoked*boolean
zlint_clean*boolean
ever_seen_in_scanstring
reuse_countinteger
TrustContext
FieldTypeDescription
classificationstring
residential_prob*number
anonymizationstring[]
AISummary
FieldTypeDescription
textstring
rolestring
generated_atstring
LockedPublicIntelPreview
FieldTypeDescription
mode*string
locked*boolean
captcha_requiredboolean
login_requiredboolean
unlocks_remaininginteger
pivot_remaininginteger
active_checks_remaininginteger
messagestring
UnlockedPublicIntelPreview
FieldTypeDescription
mode*string
captcha_requiredboolean
login_requiredboolean
unlocks_remaininginteger
pivot_remaininginteger
active_checks_remaininginteger
messagestring
PublicIntelPivotResponse
FieldTypeDescription
graph*ExposureGraph
preview*PublicIntelPreview
ExposureGraph
FieldTypeDescription
nodesPivotNode[]
edgesPivotEdge[]
truncatedboolean
PivotNode
FieldTypeDescription
kind*string
value*string
raritynumber
PivotEdge
FieldTypeDescription
from*string
to*string
relation*string