Authentication

This section of the user guide describes how you can programmatically interact with the MetaDefender Software Supply Chain REST API. Below are some common tasks that can be done using the available REST APIs:

  • Authenticate to obtain a JSON Web Token(JWT)
  • Start or stop a process(scan)
  • Add / remove service units

About this REST API

The exposed endpoint is located by default at http(s)://mdssc-server/api/ (for example, the authentication endpoint is available at http(s)://mdssc-server/api/user/authenticate). All requests are handled by the NGINX web server before being proxied to the backend API Gateway service.

All endpoints perform authentication and authorization checks. For these checks to succeed, a valid token should be presented in the Authorization header in the form of Bearer.

Please note that all issued tokens have a timestamp and signature associated in order to prevent long-term usage without re - authentication. The lifespan of the token is currently set to 60 minutes, meaning you will have to request a new token before it expires in order to avoid error responses.

Server
http://localhost:8001
Server Variables

monitored-files

Auth
Request Body
POST /api/v1/monitored-files
Responses
200

OK

Response

monitored-files

Auth
GET /api/v1/monitored-files
Responses
200

OK

Response

history

Auth
Path Params
GET /api/v1/monitored-files/{id}/history
Responses
200

OK

Response

scan-now

Auth
Path Params
POST /api/v1/monitored-files/{id}/scan-now
Responses
200

OK

Response

enabled

Auth
Path Params
Request Body
POST /api/v1/monitored-files/{id}/enabled
Responses
200

OK

Response

interval

Auth
Path Params
Request Body
POST /api/v1/monitored-files/{id}/interval
Responses
200

OK

Response

{id}

Auth
Path Params
DELETE /api/v1/monitored-files/{id}
Responses
204

No Content

No response body
Response

Manage Audit

List audit events

Auth
Query String
GET /api/v1/audit
Responses
200

OK

400

Bad Request

Response

Manage Configuration

Get application configuration

Auth
GET /api/v1
Responses
200

OK

Response

Receive a full file as a single framed binary stream with manifest in headers

Auth
Headers
POST /api/v1/cross-domain/file-stream
Responses
200

OK

400

Bad Request

500

Internal Server Error

Response

Get global lowside configuration

Auth
GET /api/v1/cross-domain/global-config/lowside
Responses
200

OK

404

Not Found

Response

Set global lowside configuration

Auth
Request Body
PUT /api/v1/cross-domain/global-config/lowside
Responses
200

OK

400

Bad Request

Response

Disable global lowside configuration

Auth
POST /api/v1/cross-domain/global-config/lowside/disable
Responses
200

OK

404

Not Found

Response

Get global highside configuration

Auth
GET /api/v1/cross-domain/global-config/highside
Responses
200

OK

404

Not Found

Response

Set global highside configuration

Auth
Request Body
PUT /api/v1/cross-domain/global-config/highside
Responses
200

OK

400

Bad Request

Response

Disable global highside configuration

Auth
POST /api/v1/cross-domain/global-config/highside/disable
Responses
200

OK

404

Not Found

Response

Get cross-domain operation logs

Auth
Query String
GET /api/v1/cross-domain/logs
Responses
200

OK

Response

Receive a lowside configuration change notification

Auth
Request Body
POST /api/v1/cross-domain/lowside-configuration-notifications
Responses
200

OK

400

Bad Request

Response

Get all cross-domain notifications

Auth
GET /api/v1/cross-domain/notifications
Responses
200

OK

Response

Get a lowside configuration by storage ID

Auth
GET /api/v1/cross-domain/storage-config/lowside
Responses
200

OK

Response

Add a lowside configuration

Auth
Request Body
POST /api/v1/cross-domain/storage-config/lowside
Responses
200

OK

400

Bad Request

Response

Update a lowside configuration by ID

Auth
Path Params
Request Body
PUT /api/v1/cross-domain/storage-config/lowside/{id}
Responses
200

OK

404

Not Found

Response

Delete a lowside configuration by ID

Auth
Path Params
DELETE /api/v1/cross-domain/storage-config/lowside/{id}
Responses
200

OK

404

Not Found

Response

Get a highside storage configuration by storage ID

Auth
GET /api/v1/cross-domain/storage-config/highside
Responses
200

OK

Response

Add a highside configuration

Auth
Request Body
POST /api/v1/cross-domain/storage-config/highside
Responses
200

OK

400

Bad Request

Response

Update a highside configuration by ID

Auth
Path Params
Request Body
PUT /api/v1/cross-domain/storage-config/highside/{id}
Responses
200

OK

404

Not Found

Response

Delete a highside configuration by ID

Auth
Path Params
DELETE /api/v1/cross-domain/storage-config/highside/{id}
Responses
200

OK

404

Not Found

Response

Get top-risky repositories across all connections

Auth
Query String
GET /api/v1/dashboard/top-risky
Responses
200

OK

400

Bad Request

500

Internal Server Error

Response

Export a CycloneDX report for repository

Auth
Path Params
Query String
GET /api/v1/export/cyclonedx/{repoId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export a CycloneDX report for a specific file scan

Auth
Path Params
GET /api/v1/export/cyclonedx/file/{fileId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export an SPDX report for a specific scan

Auth
Path Params
Query String
GET /api/v1/export/spdx/{scanId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export an SPDX report for a specific file scan

Auth
Path Params
Query String
GET /api/v1/export/spdx/file/{fileId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export a PDF report for all scans

Auth
Query String
GET /api/v1/export/pdf/all-scans
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export a PDF overview report for repository

Auth
Path Params
Query String
GET /api/v1/export/pdf/overview/{scanId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export a PDF SBOM report for repository

Auth
Path Params
Query String
GET /api/v1/export/pdf/sbom/{scanId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export a PDF SBOM report for a specific batch of files

Auth
Path Params
Query String
GET /api/v1/export/pdf/sbom/file/{fileId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export a CSV report for repository

Auth
Path Params
GET /api/v1/export/csv/sbom/{scanId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export a CSV report for a specific batch of files

Auth
Path Params
GET /api/v1/export/csv/sbom/file/{fileId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Export a CSV report of all CVEs from latest scans

Auth
Query String
GET /api/v1/export/csv/cves
Responses
200

OK

400

Bad Request

Response

Export a CSV report of all packages from latest scans

Auth
GET /api/v1/export/csv/packages
Responses
200

OK

400

Bad Request

Response

Get all external loggers

Auth
GET /api/v1/externallogger
Responses
200

OK

No response body
Response

Add an external logger

Auth
Request Body
POST /api/v1/externallogger
Responses
200

OK

No response body
Response

Update an external logger

Auth
Path Params
Request Body
PUT /api/v1/externallogger/{id}
Responses
200

OK

No response body
Response

Delete an external logger

Auth
Path Params
DELETE /api/v1/externallogger/{id}
Responses
200

OK

No response body
Response

Returns all global label keys

Auth
GET /api/v1/global-label-keys
Responses
200

OK

Response

Adds a new global label key

Auth
Request Body
POST /api/v1/global-label-keys
Responses
200

OK

Response

Updates an global label key

Auth
Path Params
Request Body
PUT /api/v1/global-label-keys/{id}
Responses
200

OK

Response

Deletes an global label key

Auth
Path Params
DELETE /api/v1/global-label-keys/{id}
Responses
200

OK

Response

Start a Scan Now job over one or more targets (each target carries its own StorageId, so a single job may mix protocols)

Auth
Request Body
POST /api/v1/jobs
Responses
200

OK

207

Multi-Status

400

Bad Request

Response

List jobs (paginated, queryable by trigger type)

Auth
Query String
GET /api/v1/jobs
Responses
200

OK

Response

Bulk delete jobs (trigger-agnostic)

Auth
Request Body
DELETE /api/v1/jobs
Responses
200

OK

400

Bad Request

Response

Start a Real-Time Protection job over one or more targets (each target carries its own StorageId)

Auth
Request Body
POST /api/v1/jobs/rtp
Responses
200

OK

207

Multi-Status

400

Bad Request

Response

Create a scheduled job with a recurrence pattern

Auth
Request Body
POST /api/v1/jobs/scheduled
Responses
200

OK

207

Multi-Status

400

Bad Request

Response

Cancel a job (for RealTime jobs this disables RTP)

Auth
Path Params
POST /api/v1/jobs/{id}/cancel
Responses
200

OK

404

Not Found

Response

Get a single job by id

Auth
Path Params
GET /api/v1/jobs/{id}
Responses
200

OK

404

Not Found

Response

Activate a license online

Auth
Request Body
POST /api/v1/licenses/online
Responses
200

OK

400

Bad Request

Response

Activate a license offline

Auth
Request Body
POST /api/v1/licenses/offline
Responses
200

OK

400

Bad Request

Response

Remove licenses

Auth
DELETE /api/v1/licenses
Responses
200

OK

400

Bad Request

404

Not Found

Response

Get licenses

Auth
GET /api/v1/licenses
Responses
200

OK

400

Bad Request

404

Not Found

Response

Get current deployment Id for offline license activation

Auth
GET /api/v1/licenses/current-deployment-id
Responses
200

OK

400

Bad Request

Response

Manage Opswat Central Management Ocm

Update an OCM instance

Auth
Request Body
PUT /api/v1/ocm
Responses
200

OK

Response

Delete an OCM instance

Auth
DELETE /api/v1/ocm
Responses
200

OK

Response

Get an OCM instance

Auth
GET /api/v1/ocm
Responses
200

OK

Response

Get onboarding

Auth
GET /api/v1/onboarding
Responses
200

OK

Response

Complete onboarding

Auth
POST /api/v1/onboarding/complete
Responses
200

OK

No response body
Response

Agree to onboarding EULA

Auth
POST /api/v1/onboarding/accept-eula
Responses
200

OK

No response body
Response

Retrieves a paginated, sortable list of packages

Auth
Query String
GET /api/v1/packages
Responses
200

OK

207

Multi-Status

401

Unauthorized

Response

Retrieves all versions of a specific package by its name and ecosystem

Auth
Query String
GET /api/v1/packages/versions
Responses
200

OK

Response

Retrieves a package by its internal database ID

Auth
Path Params
Query String
GET /api/v1/packages/{id}
Responses
200

OK

Response

Retrieves a package by its universal package UID

Auth
Path Params
GET /api/v1/packages/by-uid/{uidInB64}
Responses
200

OK

Response

Retrieves CVEs associated with a specific package

Auth
Path Params
GET /api/v1/packages/{id}/cves
Responses
200

OK

Response

Retrieves the ecosystem-specific upgrade command for a package

Auth
Path Params
GET /api/v1/packages/{id}/update-instructions
Responses
200

OK

401

Unauthorized

404

Not Found

500

Internal Server Error

Response

Retrieves all labels for a specific package

Auth
Path Params
GET /api/v1/packages/{id}/labels
Responses
200

OK

Response

Adds a label to a package

Auth
Path Params
Request Body
POST /api/v1/packages/{id}/labels
Responses
200

OK

Response

Updates a label in a package

Auth
Path Params
Request Body
PUT /api/v1/packages/{id}/labels/{key}
Responses
200

OK

Response

Deletes a label from a package

Auth
Path Params
DELETE /api/v1/packages/{id}/labels/{key}
Responses
200

OK

Response

Searches for packages by label key and optionally value

Auth
Query String
GET /api/v1/packages/search/labels
Responses
200

OK

Response

Create a project

Auth
Request Body
POST /api/v1/projects
Responses
200

OK

400

Bad Request

Response

List projects

Auth
GET /api/v1/projects
Responses
200

OK

Response

Get a project by ID

Auth
Path Params
GET /api/v1/projects/{id}
Responses
200

OK

404

Not Found

Response

Update a project

Auth
Path Params
Request Body
PUT /api/v1/projects/{id}
Responses
200

OK

404

Not Found

Response

Delete a project

Auth
Path Params
DELETE /api/v1/projects/{id}
Responses
200

OK

404

Not Found

Response

Attach workflows to a project

Auth
Path Params
Request Body
POST /api/v1/projects/{id}/workflows/attach
Responses
200

OK

404

Not Found

Response

Detach workflows from a project

Auth
Path Params
Request Body
POST /api/v1/projects/{id}/workflows/detach
Responses
200

OK

404

Not Found

Response

Attach connections (services) to a project

Auth
Path Params
Request Body
POST /api/v1/projects/{id}/storages/attach
Responses
200

OK

404

Not Found

Response

Detach connections (services) from a project

Auth
Path Params
Request Body
POST /api/v1/projects/{id}/storages/detach
Responses
200

OK

404

Not Found

Response

Enable real-time protection for multiple repositories

Auth
Path Params
Request Body
POST /api/v1/realtime/{storageId}/enable
Responses
207

Multi-Status

400

Bad Request

409

Conflict

Response

Disable real-time protection for connection

Auth
Path Params
PATCH /api/v1/realtime/{storageId}/disable
Responses
200

OK

No response body
Response

Disable real-time protection for repository

Auth
Path Params
PATCH /api/v1/realtime/{storageId}/{repositoryId}/disable
Responses
200

OK

No response body
Response

List connections with real-time protection enabled

Auth
GET /api/v1/realtime
Responses
200

OK

Response

List ongoing real-time protection scans for connection

Auth
Path Params
GET /api/v1/realtime/{storageId}
Responses
200

OK

Response

Delete real-time scan protection for connection

Auth
Path Params
Query String
DELETE /api/v1/realtime/{storageId}
Responses
200

OK

No response body
Response

Delete real-time scan protection for repository

Auth
Path Params
Query String
DELETE /api/v1/realtime/{storageId}/{repositoryId}
Responses
200

OK

No response body
Response

Add a scan configuration

Auth
Request Body
POST /api/v1/scan-configurations
Responses
200

OK

400

Bad Request

502

Bad Gateway

Response

Get all scan configurations

Auth
GET /api/v1/scan-configurations
Responses
200

OK

400

Bad Request

404

Not Found

Response

Update a scan configuration

Auth
Path Params
Request Body
PUT /api/v1/scan-configurations/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Delete a scan configuration

Auth
Path Params
DELETE /api/v1/scan-configurations/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Get a scan configuration by ID

Auth
Path Params
GET /api/v1/scan-configurations/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Get all scan configurations by scan pool ID

Auth
Path Params
GET /api/v1/scan-configurations/scan-pools/{id}
Responses
200

OK

400

Bad Request

Response

Add a new scan instance

Auth
Request Body
POST /api/v1/scan-instances
Responses
200

OK

400

Bad Request

404

Not Found

Response

Delete a scan instance

Auth
Path Params
DELETE /api/v1/scan-instances/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Get a scan instance by ID

Auth
Path Params
GET /api/v1/scan-instances/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Update a scan instance

Auth
Path Params
Request Body
PUT /api/v1/scan-instances/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Add a new scan pool

Auth
Request Body
POST /api/v1/scan-pools
Responses
200

OK

400

Bad Request

404

Not Found

Response

Get scan pools

Auth
GET /api/v1/scan-pools
Responses
200

OK

400

Bad Request

404

Not Found

Response

Delete a scan pool

Auth
Path Params
DELETE /api/v1/scan-pools/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Get a scan pool by ID

Auth
Path Params
GET /api/v1/scan-pools/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Update an existing scan pool

Auth
Path Params
Request Body
PUT /api/v1/scan-pools/{id}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Get all rules from a scan pool

Auth
Path Params
GET /api/v1/scan-pools/{id}/rules
Responses
200

OK

400

Bad Request

Response

Add or start a scan

Auth
Request Body
POST /api/v1/scans
Responses
200

OK

Response

Enumerate scan results

Auth
Query String
GET /api/v1/scans
Responses
200

OK

Response

Delete multiple scans by their scan IDs

Auth
Request Body
DELETE /api/v1/scans
Responses
200

OK

No response body
400

Bad Request

500

Internal Server Error

Response

Upload and scan a file immediately

Uploads and scans files immediately. Optional 'jobName' labels the scan; if omitted, a name is generated automatically.

Auth
Request Body
POST /api/v1/scans/direct
Responses
200

OK

Response

Stop a scan

Auth
Path Params
POST /api/v1/scans/{id}
Responses
200

OK

Response

Get scan results by scan ID

Auth
Path Params
GET /api/v1/scans/{id}
Responses
200

OK

404

Not Found

Response

Enumerate all latest scan results

Auth
Query String
GET /api/v1/scans/latest
Responses
200

OK

404

Not Found

Response

Enumerate all latest scan results by service ID

Auth
Path Params
Query String
GET /api/v1/scans/{serviceId}/latest
Responses
200

OK

Response

Get scan overview by scan ID

Auth
Path Params
GET /api/v1/scans/{id}/overview
Responses
200

OK

Response

Enumerate all scan results by repository ID

Auth
Path Params
GET /api/v1/scans/{serviceId}/{repositoryId}
Responses
200

OK

Response

Enumerate all scan schedules

Auth
GET /api/v1/scans/schedules
Responses
200

OK

Response

Clean up historical scan results older than the specified time frame

Auth
Request Body
POST /api/v1/scans/cleanup
Responses
200

OK

207

Multi-Status

400

Bad Request

500

Internal Server Error

Response

Enumerate files by scan ID

Auth
Path Params
Query String
GET /api/v1/scans/{scanId}/files
Responses
200

OK

404

Not Found

Response

Get the core result of a file by its scan result ID

Auth
Path Params
GET /api/v1/scans/{scanResultId}/core-result
Responses
200

OK

Response

Get the core results of files in an archive by their scan result ID

Auth
Path Params
Query String
GET /api/v1/scans/{scanResultId}/archive
Responses
200

OK

Response

Get per-CVE new/fixed details for each trend period

Auth
Query String
GET /api/v1/scans/vulnerability-trends/details
Responses
200

OK

500

Internal Server Error

Response

Add a service

Auth
Request Body
POST /api/v1/services
Responses
200

OK

400

Bad Request

Response

Get all services

Auth
Query String
GET /api/v1/services
Responses
200

OK

206

Partial Content

400

Bad Request

Response

Update a service by ID

Auth
Path Params
Request Body
PUT /api/v1/services/{serviceId}
Responses
200

OK

400

Bad Request

Response

Get a service by ID

Auth
Path Params
Query String
GET /api/v1/services/{serviceId}
Responses
200

OK

400

Bad Request

404

Not Found

Response

Delete a service by ID

Auth
Path Params
DELETE /api/v1/services/{serviceId}
Responses
200

OK

404

Not Found

Response

Get service references by service ID

Auth
Path Params
GET /api/v1/services/{serviceId}/references
Responses
200

OK

404

Not Found

Response

Get service resources by service ID

Auth
Path Params
GET /api/v1/services/{serviceId}/resources
Responses
200

OK

404

Not Found

Response

Get top-risky repositories for a service

Auth
Path Params
Query String
GET /api/v1/services/{serviceId}/top-risky
Responses
200

OK

500

Internal Server Error

Response

Get service references by service ID and repository ID

Auth
Path Params
Query String
GET /api/v1/services/{serviceId}/{repositoryId}/references
Responses
200

OK

404

Not Found

Response

Add service references

Auth
Request Body
POST /api/v1/services/references
Responses
200

OK

204

No Content

404

Not Found

Response

Add a SMTP configuration

Auth
Request Body
POST /api/v1/smtp
Responses
200

OK

400

Bad Request

Response

Partially update SMTP configuration

Auth
Request Body
PATCH /api/v1/smtp
Responses
200

OK

400

Bad Request

Response

Get a SMTP configuration

Auth
GET /api/v1/smtp
Responses
200

OK

400

Bad Request

Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response

Responses
Response