Skip to main content
The submit-threat-report endpoint lets you submit threat reports programmatically without using the web interface. Submitted reports enter the community verification process and are only published after passing a human review. Use this endpoint to:
  • Automate reporting from your tooling: Flag suspicious assets the moment your detection systems identify them, without switching to the web UI.
  • Integrate with security pipelines: Trigger submissions directly from CI/CD workflows, dependency scanners, or SIEM alerts.
  • Contribute at scale: Research teams and Research Partners can submit structured threat reports in bulk via API.
Reports go through the community verification process before they are published to the database. This review ensures data quality and prevents false positives. You can track the status of your submissions from your profile.
New users are limited to three reports. Once they’re verified, this limit is removed. If you try to submit more than three reports before your initial three submissions are approved, you will receive a 403 error.
For guidance on writing high-quality threat reports — including what evidence to include and how to describe threat behavior — see the reporting guidelines.

Endpoint

Required headers

Request body

Required fields

Optional fields

Resource identifier format

The value of resource_identifier depends on report_type:

IOC formatting in payload_description

When including network indicators, file hashes, or other IOCs in payload_description, follow standard defanging conventions to prevent accidental execution or link-following:
  • URLs: replace https:// with hxxps://
  • Dots in domains and IPs: replace . with [.]
Example: hxxps://malicious[.]example[.]com/payload payload_description renders as Markdown in the OSM web UI. Use headers (##), bullet lists, and inline code backticks to structure behavioral detail and IOCs for readability.

Responses

201 — Success

401 — No Authorization header

401 — Invalid API token (osm_...)

429 — IP rate limit

429 — Submission rate limit (per hour)

10/hour for Free users. Limit may be increased by an admin.

403 — New-user unverified cap

405 — Method not allowed

400 — Missing required fields

409 — Duplicate package in registry

500 — Existing-package lookup failed

500 — Threat insert failed

500 — Threat details insert failed (threat was rolled back)

500 — Catch-all

Examples

Package report
Repository report
Domain report