VIRUSSIGN
DEVELOPER RESOURCES / API V1

Relationships & pagination

Explore connected indicators and page through related files, hosts, URLs, WHOIS, certificates and resolution records.

Relationships & pagination

Your key must have relationship access enabled for +relations and relationship endpoints. Otherwise, use view=full for IOC details.

GET/v1/ioc/{collection}/{ioc_key}/{relation}

Replace each placeholder with the value for your request:

PlaceholderValue
collectionSource IOC collection: files, ips, domains or urls.
ioc_keySource indicator: a file hash, IP address, domain name or URL identifier. See IOC lookup for accepted identifiers.
relationA 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.

RelationRelated objectSource IOC types
parent_filesParent filesfiles
child_filesChild filesfiles
related_filesRelated filesips, domains, urls
related_ipsIP addressesfiles, domains, urls
related_domainsDomainsfiles, ips, urls
related_urlsURLsfiles, ips, domains
resolutionsResolution observationsips, domains
whoisWHOIS recordsips, domains
certificatesCertificatesips, 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 · related domains
curl --get "https://api.virussign.com/v1/ioc/files/YOUR_SHA256/related_domains" \
  --header "x-api-key: $VIRUSSIGN_API_KEY" \
  --data-urlencode "limit=10"
Python · process relationship pages
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
Fields in response
FieldTypeMeaning
metaobjectResponse metadata. Field reference →
returnedintegerNumber of items returned on this page.
has_nextbooleanWhether another page is available.
next_cursorstring / nullOpaque continuation cursor; follow only while has_next is true.
itemsarray<object>Related objects. Inspect each item’s type before processing it.

Embedded relationship page

indicator.relations.{relation}
Fields in indicator.relations.{relation}
FieldTypeMeaning
returnedintegerNumber of items returned on this page.
has_nextbooleanWhether another page is available.
next_cursorstring / nullOpaque continuation cursor; follow only while has_next is true.
itemsarray<object>Related objects. Inspect each item’s type before processing it.

WHOIS records

items[]
Fields in items[]
FieldTypeMeaning
typestringWHOIS record.
valuestringOpaque record identifier.
kindstringRegistered host kind when provided.
privacybooleanRegistration privacy indication.
domainstringRegistered domain.
registrarstringRegistrar name.
registrant_orgstringRegistrant organization.
registrant_emailstringRegistrant email.
registrant_countrystringRegistrant country.
organizationstringNetwork organization.
network_rangestringNetwork address range.
cidrstringNetwork in CIDR notation.
dnssecstring / integerDNSSEC status: unknown (0), unsigned (1), signed (2) or signed_delegation (3). May be a label or numeric code.
created_datestringRegistration creation date (Pro). ISO 8601 timestamp with timezone.
updated_datestringRegistration update date (Pro). ISO 8601 timestamp with timezone.
expiry_datestringRegistration expiry date (Pro). ISO 8601 timestamp with timezone.
registrar_iana_idstring / integerRegistrar IANA identifier.
origin_asstring / integerOrigin autonomous system.
created_atstringRegistration creation date. ISO 8601 timestamp with timezone.
updated_atstringRegistration update date. ISO 8601 timestamp with timezone.
expiry_atstringRegistration expiry date. ISO 8601 timestamp with timezone.
first_seenstringFirst observation time. ISO 8601 timestamp with timezone.
last_seenstringLatest observation time. ISO 8601 timestamp with timezone.
items[].contextobject

Context for an object returned through a relationship.

Fields in items[].context
FieldTypeMeaning
relationshipstringRelationship connecting this object to the source indicator.

Certificate records

items[]
Fields in items[]
FieldTypeMeaning
typestringCertificate record.
valuestringOpaque record identifier.
thumbprint_sha256stringSHA-256 certificate fingerprint.
thumbprint_sha1stringSHA-1 certificate fingerprint.
serial_numberstringSerial number.
subject_cnstringSubject common name.
issuer_cnstringIssuer common name.
signature_algorithmstringSignature algorithm.
public_key_algorithmstringPublic key algorithm.
issuerobjectIssuer distinguished-name attributes.
subjectobjectSubject distinguished-name attributes.
not_beforestringCertificate validity start (Basic). ISO 8601 timestamp with timezone.
not_afterstringCertificate validity end (Basic). ISO 8601 timestamp with timezone.
valid_fromstringCertificate validity start (Pro). ISO 8601 timestamp with timezone.
valid_tostringCertificate validity end (Pro). ISO 8601 timestamp with timezone.
first_seenstringFirst observation time. ISO 8601 timestamp with timezone.
last_seenstringLatest observation time. ISO 8601 timestamp with timezone.
portintegerAssociated service port.
public_key_sizeintegerPublic key size in bits.
subject_alternative_namesarray<string>Subject alternative names.
key_usagearray<string>Permitted key usages.
extended_key_usagearray<string>Extended key usages.
is_cabooleanWhether the certificate is a certificate authority certificate.
items[].contextobject

Context for an object returned through a relationship.

Fields in items[].context
FieldTypeMeaning
relationshipstringRelationship connecting this object to the source indicator.

Resolution records

items[]
Fields in items[]
FieldTypeMeaning
typestringResolution record.
valuestringOpaque record identifier.
domainstringAssociated domain.
ipstringAssociated IP address.
domain_detectionsnumber / stringBasic: detection percentage, 0–100 (88 means 88%). Pro: detected/total ratio string, such as "28/32".
ip_detectionsnumber / stringBasic: detection percentage, 0–100 (88 means 88%). Pro: detected/total ratio string, such as "28/32".
first_seenstringFirst observation time. ISO 8601 timestamp with timezone.
items[].contextobject

Context for an object returned through a relationship.

Fields in items[].context
FieldTypeMeaning
relationshipstringRelationship connecting this object to the source indicator.
items[].ip_locationobject

Approximate IP geolocation.

Fields in items[].ip_location
FieldTypeMeaning
latitudenumberApproximate latitude.
longitudenumberApproximate longitude.
regionstringRegion label.
countrystringCountry code or label.
administrative_areastringState, province or administrative area.
citystringCity label.
continentstringContinent label.

Illustrative response

Illustrative data showing the response structure. Optional fields may be omitted.

JSON · illustrative relationships
{
  "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"
      }
    }
  ]
}

Files are hashed locally in your browser and never uploaded. Only the SHA-256 is sent for lookup. Standard query quota applies.