Skip to main content
This page covers every field returned by the check-malicious, query-latest, threat-feed, threat-data, and query-by-username endpoints. Fields are grouped by type to make it easier to understand how related fields work together.

Asset identity

These fields describe what the asset is and where it lives. Together they give you enough information to locate the asset in your environment and act on it.

resource_identifier

Type: string · Returned by: check-malicious, query-latest, threat-feed, query-by-username The name of the asset that was queried or flagged — the package name, URL, domain, IP address, or repository URL. How to use it: Use this exact string to add to a blocklist or firewall rule (Exception: If the asset is a package, use the package_name field instead.) In alerts, this populates the “what was detected” field. During incident response, search your environment for any use of this identifier to scope exposure. Refer to package_name for packages.

package_name

Type: string · Returned by: check-malicious,query-latest, threat-feed, threat-data, query-by-username While similar to resource_identifier, this field is only for packages. It is an ecosystem-formatted package name that is designed to be recognized by the corresponding ecosystem. How to use it: Use in alert titles, notifications, and reports where a precise match is required. When cross-referencing against a dependency manifest or inventory / SBOM, match on package_name rather than resource_identifier.

id / threat_id / source_id

Type: string (UUID) · Returned by: all endpoints The unique identifier (UUID) for a threat record in the OpenSourceMalware database. How to use it: Use as the primary key for deduplication when ingesting from multiple endpoints. Pass to threat-data to retrieve the full threat record and IOCs for any threat surfaced by another endpoint.

version_info

Type: string · Returned by: check-malicious, query-latest, threat-feed The specific version(s) of a package or container image that are malicious.
  • null or blank value means all versions are affected. This is the most common return for this field because most malicious assets have always been owned by threat actors.
  • Can display a single version (e.g. 1.0.1-security), a series of versions separated by commas (e.g. 1.1.2, 5.6.0), or a block of versions (e.g. 1.0.0 - 3.0.0).
How to use it: When setting up a blocklist or cross-referencing against a dependency manifest or inventory / SBOM, match on both the package name and version to avoid false positives on unaffected releases.

report_type

Type: string · Returned by: check-malicious, query-latest, threat-feed, threat-data This field is the category of the resource_identifier. Values include:
  • package
  • container
  • repository
  • url
  • domain
  • ip
  • wallet
How to use it: Use to route the response to the right blocking mechanism or team. For example, package findings belong in your private registry or dependency scanner; domain and IP findings belong in your network controls; container findings belong in your registry policy. In alerting pipelines, use this field to assign findings to the right team — for example AppSec for packages.

ecosystem

Type: string · Returned by: all endpoints This field describes the ecosystem (e.g. npm, PyPI, AI skill) that the resource_identifier belongs to. It is a more fine-grain version of report-type. How to use it: Scope blocking and scanning actions to the correct ecosystem. For example, npm and PyPI can contain packages with identical names. Instead of blocking all packages with a given name, blocking by ecosystem reduces false positives. In alerting workflows, use this field to route findings to the right team or playbook.

username

Type: string · Returned by: query-by-username The publisher or author username related to a resource_identifier. How to use it: A single compromised or malicious account may be responsible for multiple threats. During incident response, pivot from a malicious package to its publisher to surface all other packages that account has released. Use in threat actor profiling to track known malicious publishers across ecosystems over time.

Verdict & status

These fields carry the core signals that tell you whether a resource_identifier is confirmed malicious and whether the record has been verified by OpenSourceMalware.

malicious

Type: boolean · Returned by: check-malicious This field tells you whether the resource_identifier you queried is a human-verified threat in the OpenSourceMalware database.
  • malicious: true = in the database
  • malicious: false = not in the database
false means the resource was not found in the database at the time of the query. It’s not a guarantee the asset is safe. Factor last_scanned_at into your confidence level for clean results.
How to use it: Use as the gate for blocking decisions, SBOM cross-reference results, and alert triggers.

status

Type: string · Returned by: threat-feed OpenSourceMalware reviews all threat record submissions. This field tells you the review status of the resource_identifier:
  • verified = Has completed a human review
  • unverified = Is awaiting human review
  • false positive = A human concluded it’s not malicious
  • modified = An already-verified record is pending human review for an update
How to use it: Filter on verified to ensure downstream systems only act on confirmed threats, and use unverified to identify suspicious assets quickly (especially relevant for account takeovers that rely on automatic upgrades) and consider blocking until the status has changed.

scan_result

Type: boolean | null · Returned by: check-malicious The result of the most recent analysis by OpenSourceMalware’s proprietary detection engine.
  • scan_result: true = The analysis finds the asset is malicious
  • scan_result: false = The analysis finds the asset is “suspicious” but not necessarily “malicious”
  • scan_result: null = OpenSourceMalware hasn’t analyzed the asset
How to use it: Use alongside malicious for additional context on scan state. It may help prioritize next steps.

Severity & classification

These fields describe how severe the threat is and what type of behavior it exhibits.

severity_level

Type: string · Returned by: all endpoints The assessed severity of the threat assigned by the threat reporter (and may be manually adjusted by OpenSourceMalware during verification process). Values are:
  • critical
  • high
  • medium
  • low
  • informational (Indicates a human decided the asset isn’t malicious but displays characteristics that should concern consumers.)
How to use it: When multiple affected assets are identified simultaneously, use severity_level to prioritize remediation order. In alerting pipelines, you can map severity levels to paging vs. non-paging thresholds.

tags

Type: array · Returned by: query-latest, threat-feed Behavioral and categorical labels describing the threat. They fall into several groups, including:
  • Describe the malware, e.g. infostealer, cryptostealer
  • Attack type, e.g. account-takeover, typosquat
  • Link to threat actor group, e.g. dprk, teampcp
  • Malware campaign, e.g. mini-shai-hulud, miasma
How to use it: Use to categorize alerts automatically and route them to the appropriate playbook — a ransomware tag triggers a different response than suspicious-metadata. In your SIEM or SOAR, tag-based routing reduces analyst triage time. For threat research, cluster threats by tag to identify trending TTPs and connect otherwise unrelated packages to the same campaign pattern. You can also search the web UI using tags (e.g. #teampcp)

Timestamps

OpenSourceMalware returns several timestamp fields with different meanings. Understanding which one to use for each purpose prevents gaps in coverage and incorrect timeline reconstruction.

first_seen

Type: timestamp · Returned by: query-latest, threat-feed Denotes when the asset was originally published (i.e. the first version, whether it was malicious or not). This data may be supplied by the submitter or based on information provided by the registry. How to use it: During incident response, compare first_seen against your last dependency audit or deployment date — if first_seen predates your last review, your exposure window may be longer than expected. You can also as context for potential blast radius assessment alongside download_count. A package published recently with a high download count that is now flagged as malicious indicates a fast-moving supply chain attack. For threat research, use the gap between first_seen and created_at to understand detection latency.

created_at

Type: timestamp · Returned by: query-latest, threat-feed, query-by-username When the threat record was first created in the OpenSourceMalware database (prior to verification). How to use it: Useful for retrospective analysis and timeline reconstruction. For most operational workflows, first_seen is more meaningful.

verified_at

Type: timestamp · Returned by: query-latest, threat-feed The time when a human reviewer made a judgment on a pending threat report and picked a status. How to use it: Use as the authoritative timestamp for feed polling and deduplication. Two poll windows that overlap will return the same records with the same verified_at value, making deduplication by this field reliable.

published_date

Type: timestamp · Returned by: query-latest, threat-feed If OpenSourceMalware’s propietary detection engine analyzes a specific asset version, this timestamp indicates when that specific version was published. How to use it: This data is informational.

last_scan_at / last_seen

Type: timestamp · Returned by: check-malicious, query-latest, threat-feed The timestamp for the last time OpenSourceMalware’s proprietary detection engine scanned the asset. This analysis is performed on nearly all assets, but in some edge cases you may see null if the scan was bypassed. How to use it: A clean result (malicious: false) is only as reliable as its scan date, so you can use this field to determine data freshness. If it’s old or null, the resource may not have been recently evaluated.

updated_at

Type: timestamp · Returned by: query-latest, threat-feed Only appears when a threat record has been modified. How to use it: Use to detect when a previously ingested threat has been enriched with new information. Re-ingest records where updated_at is newer than your last ingestion timestamp to ensure your blocklists and detection rules reflect the latest IOCs and descriptions.

Threat intelligence

These fields contain the actual intelligence content: What the malware does, how it behaves, and what indicators it leaves behind.

threat_description

Type: string · Returned by: query-latest, threat-feed, threat-data, query-by-username A human-readable summary of the resource_identifier, which may include the type of attack, what the malware does, and campaign/attackerd details. This information is provided by the person who submitted the threat report and may be modified by any OpenSourceMalware user (subject to admin approval). How to use it: Include in alert notifications so developers and analysts have immediate context without needing to pivot to the OpenSourceMalware UI. During incident response, use to quickly understand the nature of the threat. For research and reporting, this is the primary source for threat summaries and executive briefings.

payload_description

Type: string · Returned by: query-latest, threat-feed A technical breakdown of the malicious payload including entry points, behavioral findings, and unstructored IOCs (see the IOCs section for structured IOCs). This information is provided by the person who submitted the threat report and may be modified by any OpenSourceMalware user (subject to admin approval). How to use it: Use for detection rule authoring — entry points and behavioral patterns translate directly into YARA rules, Sigma rules, or EDR queries. During triage, use to determine whether an alert represents active exploitation or just the presence of a malicious file. This field is more technical than threat_description and is primarily useful for incident responders, security engineers and threat hunters.

IOCs

Type: array · Returned by: threat-data Structured IOCs associated with a threat_id (UUID), which were extracted by OpenSourceMalware’s proprietary research. Each IOC object contains the following fields: How to use it: IOCs are the primary input for incident response and network-level/endpoint blocking. Add C2 domains and IPs to your firewall, DNS filter, or proxy blocklist. Feed hashes into your EDR blocklist. Use ioc_type to route each indicator to the right control. Use confidence_level to tier your response — high-confidence indicators warrant automatic blocking; medium-confidence may warrant alerting-only rules to reduce false positives. In your SIEM, create detection rules for each IOC to identify whether any have already appeared in your telemetry — a hit means active exploitation, not just exposure.

ioc_count

Type: integer · Returned by: threat-data The total number of IOCs associated with the threat_id. How to use it: Use as a quick signal for complexity and blast radius. A high IOC count suggests a sophisticated, multi-stage threat with broad infrastructure. Use for pagination planning if your ingestion pipeline processes IOCs individually.

malicious_dependencies

Type: array · Returned by: query-latest, threat-feed If the payload sits in a transitive dependency (could be a package or a URL), this field contains the resource_identifier for that related asset. How to use it: Expands the scope of action beyond the initially flagged asset. If a package depends on a malicious package, both need to be addressed. Use to ensure your blocklist and SBOM cross-reference catches the full dependency chain rather than just the top-level flagged asset.

Scan metadata

These fields provide quantitative context about the threat — how many times it has been seen, scanned, and downloaded.

scan_count

Type: integer · Returned by: check-malicious The number of times OpenSourceMalware has analyzed this specific resource. A new scan may be triggered if a new version of the resource has been published. How to use it: A low scan count combined with malicious: false and an older last_scanned_at date may lower your confidence that an asset is safe still to use.

threat_count

Type: integer · Returned by: check-malicious, query-by-username The number of verified threats associated with a resource_identifier or username. How to use it: A value greater than 1 for a resource indicates multiple verified threat records — treat with elevated concern. When using query-by-username, a high threat_count indicates a prolific malicious publisher and should inform how aggressively you block or monitor other assets from the same account.

download_count

Type: integer · Returned by: query-latest, threat-feed This is a popularity metric indicating the number of times the package has been downloaded from its registry, recorded at the time of detection. How to use it: Use to assess blast radius — a package with millions of downloads that is now flagged as malicious has a much larger potential impact than one with a handful. Use to prioritize response communications and remediation urgency when multiple threats are identified simultaneously.

Attribution & sourcing

These fields identify who discovered and verified the threat, and link out to corroborating external records.

researcher / researcher_organization

Type: string · Returned by: query-latest, threat-feed researcher is the OpenSourceMalware username of the person who submitted the threat report. If the threat report was submitted by a team account, it will appear in researcher_organization. If both fields are null, that indicates the record came directly from the OpenSourceMalware team and bypassed the external submission process. How to use it: This field is mostly informational but can be used to credit the source of the intelligence. When multiple threats share the same researcher or organization, it may indicate a coordinated research effort or campaign investigation worth following.

verified_by

Type: string · Returned by: query-latest, threat-feed The OpenSourceMalware username of the reviewer who verified the threat report. How to use it: Only use if researcher and researcher_organization are both null as fallback attribution for credit.

evidence_references

Type: string · Returned by: query-latest, threat-feed External evidence supporting the threat report. How to use it: Use to validate the threat record against primary sources. Include in incident reports and leadership briefings as supporting references.

osv_advisory_url / ghsa_advisory_url

Type: string · Returned by: query-latest, threat-feed Links to corresponding records in the OSV and GitHub Security Advisory databases, if they exist. How to use it: If you already ingest OSV or GHSA feeds into your vulnerability management tooling, use these links to deduplicate and enrich rather than treating the OSM record as a separate finding. Include in incident reports as corroborating external references.
The absense of an OSV or GHSA record shouldn’t be construed as an indicator of a false positive. OpenSourceMalware is a more comprehensive database and often contains threats that haven’t yet been issued OSV or GHSA numbers.

osm_url

Type: string · Returned by: check-malicious, threat-data A direct link to the full threat report on opensourcemalware.com. How to use it: Include in analyst alert tickets and incident reports for a one-click pivot to the complete threat record, IOCs, community context, and related campaign information. Reduces time-to-context during triage.

Response envelope

These fields describe the response itself rather than any individual threat. They are relevant for feed polling and pagination.

count

Type: integer · Returned by: query-latest, threat-feed, query-by-username The total number of threat records returned in the response. How to use it: Verify that your ingestion pipeline processed the full result set. Use for pagination planning when building automated ingestion workflows.

window_hours / from / to

Type: integer / timestamp / timestamp · Returned by: threat-feed The time window covered by a threat-feed response. window_hours is the requested lookback period; from and to are the exact UTC timestamps of the window boundaries. How to use it: After each successful poll, store the to timestamp and verify it aligns with the from value of your next poll to ensure continuous coverage with no gaps. If your poller goes down, use a larger hours value on recovery to backfill missed threats, and confirm the resulting from timestamp covers the outage window.