Skip to main content

IOC Feed (TCF-2001)

The Spectra Intelligence IOC Feed delivers structured threat intelligence as a compressed JSONL file. Each record in the file represents a single Indicator of Compromise (IOC), a file hash (SHA-256), domain, IP address, or URL, together with contextual metadata including associated malware families, MITRE ATT&CK techniques, confidence scoring, structured labels, and relationships to other indicators.

Records are retained for a rolling 90-day window.

Feed delivery

The feed is delivered as a compressed ZIP archive. For hourly and daily intervals, each archive contains one JSONL file per interval, where each file covers exactly one hour or one day of data respectively. For dump, the archive contains a single JSONL file. Every line in each file is a valid, self-contained JSON record following the schema described in this document.

The JSONL filename follows this pattern:

indicators_feed_<interval>_<start_timestamp>.jsonl

For example: indicators_feed_hourly_20260703T050000Z.jsonl

Feed record structure

The following is an example of a complete IOC record. All timestamps are Unix epoch values in UTC.

{
"schema_version": "1.0",
"id": "domain_luck51.cc",
"indicator": "luck51.cc",
"type": "domain",
"published_date": 1782864013,
"last_updated": 1782864034,
"first_seen": 1777119008,
"last_seen": 1782255036,
"expiration_date": 1790640013,
"actors": [],
"malware_families": ["Blacklisted"],
"mitre_attack": [],
"ip_address_types": [],
"domain_types": ["malware_file"],
"url_types": [],
"hash_types": [],
"malicious_confidence": "medium",
"labels": [
"Malware/Blacklisted",
"MaliciousConfidence/Medium",
"ThreatType/Web.Hyperlink.Blacklisted"
],
"relations": [
{
"relationship_type": "hosts",
"related_indicator": "42b4ca1d23df4f6f0db00a30b16f98893a0314d77d2b069b31f335b081c69d65",
"related_indicator_type": "hash_sha256",
"related_malicious_confidence": "high",
"related_source": "ReversingLabs",
"related_first_seen": "1774553268",
"related_last_seen": "1782856791"
}
],
"targets": [],
"threat_types": [],
"vulnerabilities": [],
"source": "ReversingLabs"
}

Top-level fields

FieldTypeDescription
schema_versionstringVersion of the IOC schema. Currently always "1.0".
idstringUnique identifier for the indicator. Formed by combining the indicator type and value, for example: domain_example.com, ip_1.2.3.4, hash_sha256_<value>, url_https://example.com/path.
indicatorstringThe raw indicator value: a domain name, IP address, URL, or file hash.
typestringType of the indicator. See Indicator types.
published_dateintegerUnix timestamp (UTC) when the indicator was first published to the feed.
last_updatedintegerUnix timestamp (UTC) of the most recent update to the indicator record.
first_seenintegerUnix timestamp (UTC) when the indicator was first observed in Spectra Intelligence.
last_seenintegerUnix timestamp (UTC) when the indicator was most recently observed.
expiration_dateintegerUnix timestamp (UTC) computed as last_seen + 90 days.
actorsarray[string]Threat actor names associated with this indicator. Empty array if none are attributed.
malware_familiesarray[string]Malware families linked to this indicator. Empty array if unknown.
mitre_attackarray[string]MITRE ATT&CK technique and tactic IDs associated with the indicator's observed behavior, for example "T1071" or "TA0002". Empty array if not mapped.
ip_address_typesarray[string]Category labels for IP address indicators sourced from third-party intelligence providers. May be empty even when type is ip.
domain_typesarray[string]Category labels for domain indicators sourced from third-party intelligence providers. May be empty even when type is domain.
url_typesarray[string]Category labels for URL indicators sourced from third-party intelligence providers. May be empty even when type is url.
hash_typesarray[string]Threat classifications for file hash indicators. May be empty even when type is hash_sha256. For possible values, see Malware Naming Standard.
malicious_confidencestringConfidence level that the indicator is malicious. See Malicious confidence values.
labelsarray[string]Structured tags providing additional intelligence context. See Labels object.
relationsarray[object]Relationships to other indicators. See Relations object.
targetsarray[string]Industries or sectors targeted by the associated threat. Empty array if unknown.
threat_typesarray[string]High-level threat categories. Empty array if unclassified.
vulnerabilitiesarray[string]CVE identifiers for vulnerabilities exploited via this indicator, for example "CVE-2023-1234". Empty array if none apply.
sourcestringIntelligence provider that originated this indicator record.

Indicator types

The type field determines which *_types array is populated for the indicator. Only the array matching the indicator type may be populated; all others will be empty. The matching array may also be empty.

type valueIndicator description
domainA fully qualified domain name used in malicious activity.
ipAn IPv4 or IPv6 address associated with malicious infrastructure.
urlA complete URL observed in phishing campaigns, malware delivery, or command-and-control traffic.
hash_sha256A SHA-256 file hash identifying a malicious file.

Malicious confidence values

The feed uses three confidence values: high, medium, and low. The calculation differs between network indicators and file indicators.

Network indicators

For domains, IP addresses, and URLs, the confidence level is derived from two factors: the reliability of the signal used for classification, and the age of that signal.

Signal reliability

Reliability levelCriteria
Very reliableAn analyst override to malicious, or a malicious TPS reputation combined with a malicious payload.
ReliableA malicious payload, a high number of malicious TPS reputation entries (more than 3), or a network IOC found in a C2 configuration.
Less reliableThree or fewer malicious TPS reputation entries, or a domain TPS reputation applied to a URL.

Confidence by signal reliability and age

Younger than 30 daysBetween 30 and 60 daysOlder than 60 days
Very reliable signalshighmediumlow
Reliable signalsmediummediumlow
Less reliable signalsmediumlowlow

File indicators

For file hashes, the confidence level is not based on the age of the signal — a malicious file hash does not become less malicious over time. Instead, the confidence level is derived directly from the ReversingLabs classification algorithm.

Labels object

Each element in the labels array is a plain string in Category/Value format, for example "Malware/Mispadu" or "MITRE/T1071".

Label categories

Category prefixDescription
Actor/Threat actor name, for example Actor/SAMBASPIDER.
Malware/Malware family name, for example Malware/Mispadu.
MaliciousConfidence/Confidence classification mirroring the top-level malicious_confidence field, for example MaliciousConfidence/High.
ThreatType/High-level threat category. Can be a simple value such as ThreatType/Ransomware or a hierarchical path such as ThreatType/Web.Hyperlink.Blacklisted or ThreatType/Script-JS.Trojan.Redirector.
MITRE/MITRE ATT&CK technique or tactic ID, for example MITRE/T1071 or MITRE/TA0002.

Relations object

Each element in the relations array describes a directional link between the current indicator and another known IOC.

FieldTypeDescription
relationship_typestringNature of the relationship between the indicators. See Relationship types.
related_indicatorstringRaw value of the related indicator (domain, IP address, hash, or URL).
related_indicator_typestringType of the related indicator. Uses the same allowed values as the top-level type field.
related_malicious_confidencestringConfidence level for this relationship. Observed values: high, medium, low.
related_sourcestringIntelligence provider that established this relationship.
related_first_seenstringUnix timestamp (UTC) as a string when this relationship was first observed.
related_last_seenstringUnix timestamp (UTC) as a string when this relationship was most recently observed.

Relationship types

relationship_typeMeaning
resolves_toThe current URL or domain resolves to the related IP address.
resolved_fromThe current IP address resolved from the related URL or domain.
hostsThe current URL, IP address, or domain hosts the related file.
hosted_onThe current file is hosted on the related URL, IP address, or domain.
downloadsThe current indicator downloads the related file or payload.
downloaded_fromThe current file is downloaded from the related URL, IP address, or domain.
communicates_withThe current indicator communicates with the related IP address or domain.
contacted_byThe current URL, IP address, or domain is contacted by the related file.
dropsThe current file drops the related file.
dropped_byThe current file is dropped by the related file.
contains_urlThe current file contains the related URL.
contains_domainThe current file contains the related domain.
contains_ipThe current file contains the related IP address.
redirects_toThe current URL redirects to the related URL.
parent_ofThe current file is the parent of the related file.
child_ofThe current file is the child of the related file.

Selection criteria

File hashes

A file hash enters the feed when its ReversingLabs classification is Malicious and at least one of the following events occurs:

  • A public sample is scanned for the first time and a threat is detected by at least one AV scanner.
  • A public sample is rescanned and a threat is detected during rescan by at least one AV scanner.
  • A private sample becomes public and a threat is detected during rescan by at least one AV scanner.

Domains, IP addresses, and URLs

A network indicator enters the feed if it meets all of the following criteria:

  • ReversingLabs classification: Malicious
  • Detection sources: third-party detections and dynamic analysis, including identified C2 configurations, IP addresses, and domains
  • IOC age: less than 30 days old
  • Third-party detection threshold: detected by 2 or more third-party vendors

Querying the feed

Access requires HTTP Basic Authentication with your Spectra Intelligence credentials.

Feed query

Returns a compressed ZIP archive containing one or more JSONL feed files.

GET https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/feed
View OpenAPI Specification

Example request

curl 'https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/feed' \
-u 'username:password' \
-o feed.zip

Query parameters

ParameterTypeDescription
feed-intervalstringOptional. Specifies the granularity of the feed interval. If omitted, the service automatically returns the smallest set of files needed to stay current, equivalent to the hourly maximum period (3 days). Available values: hourly — files generated within the last 3 days; daily — files generated within the last 10 days; dump — all indicator files up to 90 days.
sincestringOptional. A timestamp in the format YYYY-MM-DDTHH:MM:SS, for example 2026-07-01T00:00:00. Timezone suffixes such as Z are not accepted and will result in HTTP 400. Specifies the start of the retrieval window. If not provided, the service automatically calculates the starting point based on the feed-interval value. When used with feed-interval=dump, returns all data from that timestamp onward instead of the full historical dataset. The timestamp must not be more than 90 days in the past.
include_relationsstringOptional. When set to true, each indicator record in the response includes the relations field. Omitted from records by default.

Response

The response is a ZIP archive. When extracted, it contains one or more JSONL files. Each file covers exactly one interval and is named:

indicators_feed_<interval>_<start_timestamp>.jsonl

If the since timestamp does not align to the start of an interval boundary, the first file covers from since to the next complete interval boundary. Subsequent files each cover one full interval.

Continuous feed

The continuous feed mode lets you consume the indicator feed incrementally without specifying a time range on each request. It uses two operations: Start and Pull.

Start

Establishes the initial retrieval point for a continuous feed session. If Start has not been called for the authenticated user, Pull requests automatically begin from 24 hours before the current time.

PUT https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/start/{time_format}/{time_value}
View OpenAPI Specification
  • time_format — Required. Format of the timestamp. Accepted values: utc, timestamp.
  • time_value — Required. The starting point in the format specified by time_format.

A successful request returns HTTP 200 with an empty response body.

Pull

Retrieves the next batch of indicator records relative to the position established by the most recent Start call.

GET https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/pull
View OpenAPI Specification

Query parameters

ParameterTypeDescription
include_relationsstringOptional. When set to true, each indicator record in the response includes the relations field. Omitted from records by default.

The response is a ZIP archive containing a single JSONL file. The filename follows a different pattern from the feed query:

indicators_feed_segment_<unix_timestamp>.jsonl

For example: indicators_feed_segment_1783515046.jsonl

Pull can also be used to reprocess a previously consumed time span, retrieve data from an older period that was not previously fetched, or skip ahead to a more recent timestamp when older data is no longer relevant. Reset the retrieval position by calling Start with a new timestamp before the next Pull.

note

Feed records may be retroactively updated or removed. When a record is updated, it overwrites the original entry at its original timestamp rather than appearing as a new entry at the end of the feed. Consumers that need to detect changes to previously ingested records must periodically re-fetch older intervals by resetting the retrieval position using Start.

Examples

Fetch the hourly feed starting from a specific timestamp

GET https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/feed?feed-interval=hourly&since=2026-07-01T00:00:00

Fetch the daily feed starting from a specific date

GET https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/feed?feed-interval=daily&since=2026-05-01T00:00:00

Fetch the full historical feed

GET https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/feed?feed-interval=dump
caution

Dump responses can be several gigabytes in size and may take approximately half an hour or longer to complete depending on network conditions. Ensure your HTTP client is configured with a sufficiently long timeout before making this request.

Set the continuous feed starting point

PUT https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/start/utc/2026-07-01T00:00:00

Pull the next available batch

GET https://data.reversinglabs.com/api/feed/indicator-feed/v1/query/pull