Entities API
The Entities API allows you to manage and retrieve information about your organization's entities and their associated assets.
info
This API endpoint is available for enterprise accounts only.
Get All Entities
List all entities associated with your account.
HTTP Request
GET https://fullhunt.io/api/v1/enterprise/entities
Query Parameters
Parameter | Required | Type | Description |
---|---|---|---|
org | No | string | Filter entities by organization ID |
Example Request
curl "https://fullhunt.io/api/v1/enterprise/entities" \
-H "X-API-KEY: xxxx-xxxx-xxxx-xxxxxx"
Example Response
[
{
"asset": "kaspersky.com",
"type": "domain"
},
{
"asset": "185.85.15.0/24",
"type": "ip-range"
}
]
Response Fields
Field | Type | Description |
---|---|---|
asset | string | The asset identifier (domain, IP range, etc.) |
type | string | Type of entity (domain, ip-range, asn, etc.) |
Get Assets of an Entity
Retrieve all assets associated with a specific entity.
HTTP Request
GET https://fullhunt.io/api/v1/enterprise/assets
Query Parameters
Parameter | Required | Type | Description |
---|---|---|---|
entity | Yes | string | Entity name to retrieve assets for |
Example Request
curl "https://fullhunt.io/api/v1/enterprise/assets?entity=kaspersky.com" \
-H "X-API-KEY: xxxx-xxxx-xxxx-xxxxxx"
Example Response
[
{
"asset_score": 95,
"asset_score_reason": ["delegated-cname-record"],
"categories": [
"Web-Development-Frameworks",
"Web-Servers",
"Cloud-Services"
],
"cdn": "",
"cert_object": {
"dns_names": ["cybermap.kaspersky.com"],
"email_addresses": null,
"ip_addresses": [],
"is_valid_hostname": true,
"issuer_common_name": "GlobalSign RSA OV SSL CA 2018",
"issuer_country": "BE",
"issuer_organization": "GlobalSign nv-sa",
"issuer_serial_number": "",
"issuer_string": "CN=GlobalSign RSA OV SSL CA 2018,O=GlobalSign nv-sa,C=BE",
"md5_fingerprint": "48:DF:CD:CB:D1:F2:82:05:1E:A6:53:78:8E:49:01:74",
"not_after": "03-08-2025 12:01:01",
"not_before": "02-07-2024 12:01:02",
"remote_ip_address": "185.54.223.252:443",
"sha1_fingerprint": "9C:B9:F7:80:23:9C:85:66:3E:C7:6E:C4:C3:50:5E:5E:79:BC:A4:95",
"sha256_fingerprint": "10:CE:13:BD:FF:EB:5F:F0:AC:65:4B:DF:FB:D8:70:13:55:A9:5B:7B:33:23:5B:A9:D8:C3:F5:7E:F2:CE:00:B0",
"signature_algorithm": "SHA256-RSA",
"subject_common_name": "cybermap.kaspersky.com",
"subject_country": "CH",
"subject_locality": "Zürich",
"subject_organization": "Kaspersky Lab Switzerland GmbH",
"subject_province": "Zürich"
},
"cloud": {
"provider": "",
"region": ""
},
"dns": {
"a": ["185.54.223.252"],
"aaaa": null,
"cname": [
"cybermap-kaspersky-com.sm.kaspersky.com.",
"cybermap-kaspersky-com-prod.sm.kaspersky.com."
],
"mx": null,
"ns": [],
"ptr": null,
"txt": null
},
"domain": "kaspersky.com",
"has_ipv6": false,
"has_private_ip": false,
"host": "cybermap.kaspersky.com",
"http_status_code": null,
"http_title": "MAP | Kaspersky Cyberthreat live map",
"ip_address": "185.54.223.252",
"ip_metadata": {
"asn": 200107,
"city_name": "",
"country_code": "GB",
"country_name": "United Kingdom",
"isp": "Kaspersky Lab Switzerland GmbH",
"location_latitude": 51.4964,
"location_longitude": -0.1224,
"organization": "Kaspersky Lab Switzerland GmbH",
"postal_code": "",
"region": ""
},
"is_cdn": false,
"is_cloud": false,
"is_cloudflare": false,
"is_live": true,
"is_resolvable": true,
"network_ports": [443, 80],
"products": ["Laravel", "nginx", "Amazon-CloudFront"],
"tags": [
"cname",
"https",
"laravel",
"nginx",
"amazon-cloudfront",
"web-development-frameworks",
"web-servers",
"cloud-services",
"http"
],
"tld": "com",
"urls": [
"https://cybermap.kaspersky.com/stats",
"https://cybermap.kaspersky.com/js/map.js?id=b22034f86b2e0e17052c435bbbf7c843",
"https://cybermap.kaspersky.com/tos",
"https://cybermap.kaspersky.com/fr",
"https://cybermap.kaspersky.com/subsystems"
]
}
]
Integration Example
import requests
def get_entity_overview(api_key):
"""Get overview of all entities and their asset counts."""
# Get all entities
entities_url = "https://fullhunt.io/api/v1/enterprise/entities"
headers = {"X-API-KEY": api_key}
response = requests.get(entities_url, headers=headers)
if response.status_code == 200:
entities = response.json()
print("📋 Entity Overview")
print("=" * 40)
total_assets = 0
for entity in entities:
entity_name = entity['asset']
entity_type = entity['type']
# Get assets for this entity
assets_url = "https://fullhunt.io/api/v1/enterprise/assets"
params = {"entity": entity_name}
assets_response = requests.get(assets_url, headers=headers, params=params)
if assets_response.status_code == 200:
assets = assets_response.json()
asset_count = len(assets)
total_assets += asset_count
# Calculate average asset score
scores = [asset.get('asset_score', 0) for asset in assets if asset.get('asset_score')]
avg_score = sum(scores) / len(scores) if scores else 0
print(f"\n{entity_name} ({entity_type})")
print(f" Assets: {asset_count}")
print(f" Avg Score: {avg_score:.1f}")
# Show high-risk assets
high_risk = [a for a in assets if a.get('asset_score', 0) > 90]
if high_risk:
print(f" ⚠️ High-risk assets: {len(high_risk)}")
for asset in high_risk[:3]: # Show top 3
print(f" - {asset['host']} (score: {asset['asset_score']})")
print(f"\nTotal Assets: {total_assets}")
return entities
else:
print(f"Error: {response.status_code}")
return None
def monitor_high_risk_assets(api_key, threshold=85):
"""Monitor assets with high risk scores."""
entities_url = "https://fullhunt.io/api/v1/enterprise/entities"
headers = {"X-API-KEY": api_key}
response = requests.get(entities_url, headers=headers)
if response.status_code == 200:
entities = response.json()
high_risk_assets = []
for entity in entities:
assets_url = "https://fullhunt.io/api/v1/enterprise/assets"
params = {"entity": entity['asset']}
assets_response = requests.get(assets_url, headers=headers, params=params)
if assets_response.status_code == 200:
assets = assets_response.json()
for asset in assets:
score = asset.get('asset_score', 0)
if score >= threshold:
high_risk_assets.append({
'entity': entity['asset'],
'host': asset['host'],
'score': score,
'reasons': asset.get('asset_score_reason', []),
'products': asset.get('products', []),
'ports': asset.get('network_ports', [])
})
# Sort by score (highest first)
high_risk_assets.sort(key=lambda x: x['score'], reverse=True)
print(f"🚨 High-Risk Assets (Score >= {threshold})")
print("=" * 50)
for asset in high_risk_assets:
print(f"\n{asset['host']} (Score: {asset['score']})")
print(f" Entity: {asset['entity']}")
print(f" Reasons: {', '.join(asset['reasons'])}")
if asset['products']:
print(f" Products: {', '.join(asset['products'][:3])}")
if asset['ports']:
print(f" Open Ports: {', '.join(map(str, asset['ports'][:5]))}")
return high_risk_assets
else:
print(f"Error: {response.status_code}")
return None
# Usage
api_key = "your-api-key-here"
entities = get_entity_overview(api_key)
high_risk = monitor_high_risk_assets(api_key, threshold=90)
Use Cases
Asset Discovery
- Discover all digital assets associated with your domains
- Find shadow IT and forgotten infrastructure
- Map your complete attack surface
Risk Assessment
- Identify high-risk assets requiring immediate attention
- Monitor asset scores over time
- Prioritize security efforts based on exposure levels
Compliance Monitoring
- Ensure all organizational assets are properly inventoried
- Monitor certificate expiration dates
- Track security configuration changes
Threat Intelligence
- Identify potential attack vectors
- Monitor for new exposures
- Track technology adoption across your infrastructure
Rate Limiting
- Rate limit: 60 requests per minute
- Large asset inventories may require multiple API calls
- Use organization filtering to focus on specific entities