Search results
Relationships & pagination
Your key must have relationship access enabled for +relations and relationship endpoints. Otherwise, use view=full for IOC details.
/v1/ioc/{collection}/{ioc_key}/{relation}Replace each placeholder with the value for your request:
| Placeholder | Value |
|---|---|
| collection | Source IOC collection: files, ips, domains or urls. |
| ioc_key | Source indicator: a file hash, IP address, domain name or URL identifier. See IOC lookup for accepted identifiers. |
| relation | A supported relationship name from the table below, such as related_domains. |
Relationship queries accept cursor, limit and view. Choose a relationship supported by the source indicator type below. Start with limit=10; for initial integrations, keep pages at 50 or fewer and contact us before requesting larger pages.
Including relationships or increasing the requested limit may use more credits, even when fewer items are returned. Charges depend on your access plan.
| Relation | Related object | Source IOC types |
|---|---|---|
| parent_files | Parent files | files |
| child_files | Child files | files |
| related_files | Related files | ips, domains, urls |
| related_ips | IP addresses | files, domains, urls |
| related_domains | Domains | files, ips, urls |
| related_urls | URLs | files, ips, domains |
| resolutions | Resolution observations | ips, domains |
| whois | WHOIS records | ips, domains |
| certificates | Certificates | ips, domains |
Basic and Pro both support relationship queries when relationship access is enabled. Available relationship types and fields depend on the source indicator, response view and account permissions; contact us to discuss specific data requirements. API trial to explore the options.
Not every relation applies to every IOC or permission level. A supported relation may have no items; an unsupported relation can return 404. Follow the returned next_cursor while has_next is true. Keep the IOC, relation, view and other filters unchanged while paging. Treat the cursor as opaque.
curl --get "https://api.virussign.com/v1/ioc/files/YOUR_SHA256/related_domains" \
--header "x-api-key: $VIRUSSIGN_API_KEY" \
--data-urlencode "limit=10"import os
import requests
endpoint = "https://api.virussign.com/v1/ioc/files/YOUR_SHA256/related_domains"
params = {"view": "compact", "limit": 10}
seen_cursors = set()
with requests.Session() as session:
session.headers["x-api-key"] = os.environ["VIRUSSIGN_API_KEY"]
for _ in range(10): # Explicit evaluation page budget.
response = session.get(endpoint, params=params, timeout=(5, 30))
response.raise_for_status()
page = response.json()
for item in page.get("items", []):
print(item) # Replace with idempotent processing.
if not page.get("has_next"):
break
cursor = page.get("next_cursor")
if not cursor or cursor in seen_cursors:
raise RuntimeError("Missing or repeated pagination cursor")
seen_cursors.add(cursor)
params["cursor"] = cursor
# Persist this cursor only after processing the page.
else:
print("Page budget reached; save the cursor before continuing.")Record your checkpoint only after successfully processing a page. Make ingestion idempotent so that retrying a page does not create duplicate records. Embedded relationship lists in a detail response can be truncated; use standalone paging for additional results. Website display counts do not cap API results; API page-size limits, permissions and credits still apply.
Fields are conditional unless stated otherwise. Types below describe populated values; optional values may also be null. Access labels describe capability, not guaranteed data for every indicator.
Relationship response
response| Field | Type | Meaning |
|---|---|---|
meta | object | Response metadata. Field reference → |
returned | integer | Number of items returned on this page. |
has_next | boolean | Whether another page is available. |
next_cursor | string / null | Opaque continuation cursor; follow only while has_next is true. |
items | array<object> | Related objects. Inspect each item’s type before processing it. |
linksobjectOptional navigation links.
| Field | Type | Meaning |
|---|---|---|
self | string | Canonical resource link, when provided. |
Embedded relationship page
indicator.relations.{relation}| Field | Type | Meaning |
|---|---|---|
returned | integer | Number of items returned on this page. |
has_next | boolean | Whether another page is available. |
next_cursor | string / null | Opaque continuation cursor; follow only while has_next is true. |
items | array<object> | Related objects. Inspect each item’s type before processing it. |
WHOIS records
items[]| Field | Type | Meaning |
|---|---|---|
type | string | WHOIS record. |
value | string | Opaque record identifier. |
kind | string | Registered host kind when provided. |
privacy | boolean | Registration privacy indication. |
domain | string | Registered domain. |
registrar | string | Registrar name. |
registrant_org | string | Registrant organization. |
registrant_email | string | Registrant email. |
registrant_country | string | Registrant country. |
organization | string | Network organization. |
network_range | string | Network address range. |
cidr | string | Network in CIDR notation. |
dnssec | string / integer | DNSSEC status: unknown (0), unsigned (1), signed (2) or signed_delegation (3). May be a label or numeric code. |
created_date | string | Registration creation date (Pro). ISO 8601 timestamp with timezone. |
updated_date | string | Registration update date (Pro). ISO 8601 timestamp with timezone. |
expiry_date | string | Registration expiry date (Pro). ISO 8601 timestamp with timezone. |
registrar_iana_id | string / integer | Registrar IANA identifier. |
origin_as | string / integer | Origin autonomous system. |
created_at | string | Registration creation date. ISO 8601 timestamp with timezone. |
updated_at | string | Registration update date. ISO 8601 timestamp with timezone. |
expiry_at | string | Registration expiry date. ISO 8601 timestamp with timezone. |
first_seen | string | First observation time. ISO 8601 timestamp with timezone. |
last_seen | string | Latest observation time. ISO 8601 timestamp with timezone. |
items[].contextobjectContext for an object returned through a relationship.
| Field | Type | Meaning |
|---|---|---|
relationship | string | Relationship connecting this object to the source indicator. |
items[].linksobjectOptional navigation links.
| Field | Type | Meaning |
|---|---|---|
self | string | Canonical resource link, when provided. |
Certificate records
items[]| Field | Type | Meaning |
|---|---|---|
type | string | Certificate record. |
value | string | Opaque record identifier. |
thumbprint_sha256 | string | SHA-256 certificate fingerprint. |
thumbprint_sha1 | string | SHA-1 certificate fingerprint. |
serial_number | string | Serial number. |
subject_cn | string | Subject common name. |
issuer_cn | string | Issuer common name. |
signature_algorithm | string | Signature algorithm. |
public_key_algorithm | string | Public key algorithm. |
issuer | object | Issuer distinguished-name attributes. |
subject | object | Subject distinguished-name attributes. |
not_before | string | Certificate validity start (Basic). ISO 8601 timestamp with timezone. |
not_after | string | Certificate validity end (Basic). ISO 8601 timestamp with timezone. |
valid_from | string | Certificate validity start (Pro). ISO 8601 timestamp with timezone. |
valid_to | string | Certificate validity end (Pro). ISO 8601 timestamp with timezone. |
first_seen | string | First observation time. ISO 8601 timestamp with timezone. |
last_seen | string | Latest observation time. ISO 8601 timestamp with timezone. |
port | integer | Associated service port. |
public_key_size | integer | Public key size in bits. |
subject_alternative_names | array<string> | Subject alternative names. |
key_usage | array<string> | Permitted key usages. |
extended_key_usage | array<string> | Extended key usages. |
is_ca | boolean | Whether the certificate is a certificate authority certificate. |
items[].contextobjectContext for an object returned through a relationship.
| Field | Type | Meaning |
|---|---|---|
relationship | string | Relationship connecting this object to the source indicator. |
items[].linksobjectOptional navigation links.
| Field | Type | Meaning |
|---|---|---|
self | string | Canonical resource link, when provided. |
Resolution records
items[]| Field | Type | Meaning |
|---|---|---|
type | string | Resolution record. |
value | string | Opaque record identifier. |
domain | string | Associated domain. |
ip | string | Associated IP address. |
domain_detections | number / string | Basic: detection percentage, 0–100 (88 means 88%). Pro: detected/total ratio string, such as "28/32". |
ip_detections | number / string | Basic: detection percentage, 0–100 (88 means 88%). Pro: detected/total ratio string, such as "28/32". |
first_seen | string | First observation time. ISO 8601 timestamp with timezone. |
items[].contextobjectContext for an object returned through a relationship.
| Field | Type | Meaning |
|---|---|---|
relationship | string | Relationship connecting this object to the source indicator. |
items[].linksobjectOptional navigation links.
| Field | Type | Meaning |
|---|---|---|
self | string | Canonical resource link, when provided. |
items[].ip_locationobjectApproximate IP geolocation.
| Field | Type | Meaning |
|---|---|---|
latitude | number | Approximate latitude. |
longitude | number | Approximate longitude. |
region | string | Region label. |
country | string | Country code or label. |
administrative_area | string | State, province or administrative area. |
city | string | City label. |
continent | string | Continent label. |
Illustrative response
Illustrative data showing the response structure. Optional fields may be omitted.
{
"meta": {
"request_id": "example-request",
"timestamp": "2026-01-15T12:00:00Z",
"quota_remaining": 100,
"took_ms": 12
},
"returned": 1,
"has_next": false,
"items": [
{
"type": "domain",
"value": "beacon.example",
"analysis": {
"status": "assessed",
"malicious": true,
"detections": 10,
"crowd_rate": 5
},
"context": {
"relationship": "related_domains"
}
}
]
}