Direct Connection Support in CM10

My OPSWAT Central Management (MOCM) supports initiating a direct connection to MetaDefender (MD) product instances, enabling the execution of product-specific APIs and supported commands. The following OPSWAT products currently support this feature:

  • MetaDefender CORE (version 5.15.0 and above)
  • MetaDefender ICAP (version 5.9.0 and above)

How it works

MD Core/ICAP must first be registered with the MOCM. Once enrolled, MOCM can effectively manage MD Core/ICAP instances.

When an administrator invokes MOCM APIs, MOCM authenticates the request and then forwards it to the appropriate Product Instance APIs.

Administrators do not need to enable inbound traffic from users to MD instances. All requests are securely routed from MOCM directly to the MD instances.

Steps to make API requests

Once the product instance is enrolled in CM10, adminstrator can follow these steps to make an api request to the instance

  1. Get OAuth API Access token from MOCM
    Go to MOCM console page and setup application to get an access token:
  2. Obtain the connectionID
    Retrieve the connectionID from the relevant product instance.
  3. Construct the API Request
    • Build the URL: Combine the MOCM endpoint URL with the retrieved connectionID.
    • Prepare the Request Body: Include the required data exactly as specified in the product support documentation.
    • Set the Required Headers:
      • X-App-Method: Specify the original HTTP method (e.g., GET, POST).
      • X-App-Url: Provide the original request path.
      • Include any optional headers from the original request using the format: X-App-Header-{headerKey}.

For detailed examples, please refer to the documentation: View Documentation

Server
https://product.my.us.opswat.com

My OPSWAT Central Management US tenant

https://product.my.eu.opswat.com

My OPSWAT Central Management EU tenant

Server Variables

Users authenticate using a Client ID and Client Secret, which can be obtained from My OPSWAT Central Management.

Auth

BearerToken

Get Oauth API Token

To retrieve your Client ID and Client Secret, please follow this link: https://www.opswat.com/docs/cm/developer-guidelines/how-to-work-with-apis

Auth
Request Body

Required information to generate token

objectobject
client_idstring

Client Id of MyOpswat Central Management Account

client_secretstring

Client Secret of MyOpswat Central Management Account

grant_typestring

client_credentials

POST /o/oauth2/token
Copy
Responses
200

response

Root Type for Oauth_reponse_dataobject
access_tokenstring
token_typestring
expires_inint32
Response
Copy

GetConnection status

Get Connection status by Connection ID

Auth
GET /fusion/console/services/connection/{connectionId}
Copy
Responses
200

Get Connection Status successfully

Root Type for InitConnectionData_reponse_successobject
connIdstring
statusstring
400

Invalid ConnectionId

Response
Copy

Close connection

Close a direct connection

Auth
DELETE /fusion/console/services/connection/{connectionId}
Copy
Responses
200

desc

No response body
Response
Copy

Initiate Direct Instance Connection

Initiate a direct communication channel from CM10 to the product instance.

Auth
Path Params
productTypestring

OPSWAT product types

Enum: mdcore,mdicap

Request Body
Root Type for InitConnectionDataobject

Data for initiating a connection from MyOpswat Central Management

deploymentIdstring
Purposestring
POST /fusion/console/services/connection/request/{productType}
Copy
Responses
200

Init Connection successfull

Root Type for InitConnectionData_reponse_successobject
connIdstring
statusstring
404

Incorrect DeploymentId

Response
Copy

Sending_requests

Sending requests directly from My OPSWAT Central Management to product instances.

Sending Requests/Commands

Sending Requests or Commands to Product Instances

To view the list of supported APIs for each product, please refer to the following link: Supported Product APIs

Auth
Headers
X-App-Methodstring
X-App-URLstring
Request Body
stringstring
POST /fusion/console/services/connection/{connectionId}
Copy
Responses
200
stringstring
Response
Copy

Get PMP Report Details

Retrieve the details of a PMP report - including MetaDefender Kiosk, MetaDefender Drive - using the report's session ID. This API returns data as a stream.

Auth
Request Body
objectobject
session_idstring

session ID.

filterobject
issue_typearray[string]

Specify what issue type used to filter along with the field.

Enum: VUL(vulnerability),COO,SENSITIVE,SKIPPED,INFECTED

POST /o/pmp/v1/reports/details
Copy
Responses
200

Successful response

objectobject
idstring

ID

timestamplong

timestamp when the report occurs

sync_timelong

timestamp when the report sent to My Opswat Central Management

session_idstring

session id of the report

file_namestring

file name

file_pathstring

file path

pmp_typestring

issue type

device_idstring

Device id of a device that the report occurred on

device_typestring

Device type of a device that the event occurred on

device_namestring

Device name of a device that the report occurred on

md5string

md5 of the file

sha1string

sha1 of the file

sha256string

sha256 of the file

Response
Copy

Get PMP Reports

Retrieve reports of PMP devices - including MetaDefender Kiosk, MetaDefender Endpoint - in the cursor fashion, sorted by reported time in ascending order.

Auth
Request Body
objectobject
tokenstring

Pagination token to retrieve the next set of items.

limitinteger

Maximum number of devices to return. The value should be in [1,100].

Default: 20

start_timelong

Specify a start time of the query's duration. The format should be Unix epoch time in milliseconds The value must be greater than zero, and it must not be more than 30 days from the current date.

end_timelong

Specify an end time of the query's duration. The format should be Unix epoch time in milliseconds.

filter3 fieldsobject
POST /o/pmp/v1/reports
Copy
Responses
200

Successful response

objectobject
tokenstring

Pagination token

data18 fieldsarray[object]
Response
Copy

Update Yara rules and file hashes for MetaDefender Kiosk

Update Yara rules and file hashes for MetaDefender Kiosk

Auth
Request Body
objectobject
apply_typestring

Values: - all: apply for all instances - instances: apply for specific instances in

apply_toarray[string]

The list of instance IDs will be updated the file hashes and Yara rules.

yara_sourcesobject
typestring

Possible values: - append: will append to existing yara rules - overwrite: will overwrite all yara rules

skip_by_hashobject
typestring

Possible values: - append: will append to existing yara rules - overwrite: will overwrite all yara rules

POST /o/pmp/v1/kiosk/configuration
Copy
Responses
200

Successful response

objectobject
total_appliedinteger

The number of instances will be applied the Yara rules and file hashes. Note that My OPSWAT Central Management will save this change and will send to MetaDefender Kiosk next time it checks in with My OPSWAT Central Management.

Response
Copy

Get MetaDefender Drive Reports

Receive MetaDefender Drive's reports in the cursor fashion, sorted by reported time in ascending order.

Auth
Request Body
objectobject
tokenstring

Pagination token to retrieve the next set of items.

limitinteger

Maximum number of devices to return. The value should be in [1,100].

Default: 20

start_timelong

Specify a start time of the query's duration. The format should be Unix epoch time in milliseconds The value must be greater than zero, and it must not be more than 30 days from the current date.

end_timelong

Specify an end time of the query's duration. The format should be Unix epoch time in milliseconds.

filter3 fieldsobject
POST /o/mdd/v1/reports
Copy
Responses
200

Successful response

objectobject
tokenstring

Pagination token

data16 fieldsarray[object]
Response
Copy

Get MetaDefender Drive Report Details

Retrieve the MetaDefender Drive report details by using the report ID and device ID. This API returns data as a stream.

Auth
Request Body
objectobject
device_idstring

the device ID

report_idstring

the report ID

filterobject
issue_typearray[string]

Specify what issue type used to filter along with the field.

Enum: VUL(vulnerability),COO,SENSITIVE,SKIPPED,INFECTED

POST /o/mdd/v1/reports/details
Copy
Responses
200

Successful response

objectobject
idstring

ID

timestamplong

timestamp when the report occurs

sync_timelong

timestamp when the report sent to My Opswat Central Management

session_idstring

session id of the report

file_pathstring

file path

threat_typestring

issue type

device_idstring

Device id of a device that the report occurred on

device_groupstring

Device group of a device that the report occurred on

sha256string

sha256 of the file

Response
Copy

Get MetaDefender Drive Scanned Host List

Returns a paginated list of scanned hosts for the account, with one entry per host serial number. Each entry includes the user who scanned the host, its vendor, model, operating system, total scan sessions, and the last reported time.

Auth
Request Body
objectobject
limitinteger

Number of items to return per page. If the value is less than or equal to 0, the default page size of 25 is used. Values greater than 100 are not allowed.

Default: 25

start_timeinteger

Only include hosts that reported on or after the specified time. Enter 0 to include all hosts.

end_timeinteger

The latest report time to include in the results, in epoch milliseconds. Set this value to 0 to include all reports with no upper time limit. If specified, it must be greater than or equal to start_time.

pageinteger

The page number to retrieve, starting from 1. Values less than 1 are automatically treated as 1.

Default: 1

sortstring

Specify one of the following values: hostName, lastReport, vendor, model, or sessions. If an invalid value is provided, the results will be sorted by lastReport by default.

Enum: hostName,lastReport,vendor,model,sessions

Default: lastReport

orderstring

Choose to sort in ascending or descending order.

Enum: desc,asc

searchstring

Search by hostname or host serial number. The search is case-insensitive and matches any part of the text.

POST /o/mdd/v1/reports/scanned-hosts
Copy
Responses
200

OK

objectobject
totalinteger

The total number of distinct hosts matching the filter before pagination. Use this value to implement pagination

data9 fieldsarray[object]

the page of host rows; always present ([] when nothing matches, never null)

400

Bad Request

500

Internal Server Error

Response
Copy

Get MetaDefender Drive Scanned Host Detail

Returns detailed information about a specific host in your account, including its network addresses, hardware, disks and volumes, operating system, BIOS, logged-in user, and the drive that most recently reported it.

Auth
GET /o/mdd/v1/reports/scanned-hosts/{serial_number}
Copy
Responses
200

OK

objectobject
created_atinteger

Time when the host was first discovered (Unix epoch milliseconds).

serial_numberstring

Unique serial number of the host.

host_namestring

Host name of the device.

ipstring

Primary IP address of the host.

macstring

Primary MAC address of the host.

ip_addressesarray[string]

All detected IP addresses.

mac_addressesarray[string]

All detected MAC addresses.

public_ip_addressstring

Public IP address, if available.

cpustring

CPU model.

cpu_coresstring

Number of CPU cores.

memorystring

Total system memory in a human-readable format.

memory_total_mbinteger

Total system memory in MB.

brand_namestring

Device manufacturer and model.

vendorstring

Device manufacturer.

modelstring

Device model.

firmware_versionstring

BIOS or firmware version.

host_osstring

Operating system reported by the host.

os_namestring

Operating system name.

os_versionstring

Operating system version or build number.

os_architecturestring

Operating system architecture (for example, 64-bit).

os_typestring

Operating system family (such as Windows or Linux).

machine_uuidstring

Unique hardware UUID of the host.

logged_in_userstring

User logged in when the device was scanned.

domainstring

Active Directory domain or workgroup name.

bios_info3 fieldsobject

BIOS information, including name, version, and release_date.

location8 fieldsobject

Geographic location information, when available.

drive_info3 fieldsobject

Information about the drive that most recently reported this host.

port_servicesstring

Reported network services, when available

remote_connectionsstring

Reported remote connections, when available.

rolestring

Device role, if reported.

site_zonestring

Site or zone associated with the device, if available.

last_scannedinteger

Time when the host was last scanned (Unix epoch milliseconds).

protocol_usagestring

Reported network protocol usage, when available.

400

Bad Request

404

Not Found

500

Internal Server Error

Response
Copy

Get MetaDefender Core Instances

Retrieve MetaDefender Core instances.

Auth
Request Body
objectobject
limitinteger

Maximum number of devices to return. The value should be in [1,100].

pageinteger

The specific page number from which instances will be returned

verbose3 fieldsobject
filter3 fieldsobject
POST /o/core/v1/instances
Copy
Responses
200

Successful response

arrayarray[object]
idstring
namestring
deployment_idstring
statusstring
health_statusstring
versionstring
group_idstring
group_namestring
public_ipstring
last_seenstring
last_reportedstring
licenseobject
expirationinteger
typestring
tagsarray[object]
keystring
valuestring
verbose14 fieldsobject
Response
Copy

Get MetaDefender Core Reports

Retrieve MetaDefender Core's processing history reports using cursor-based pagination, sorted by report time in ascending order.

Auth
Request Body
objectobject
tokenstring

Pagination token to retrieve the next set of items.

limitinteger

Maximum number of devices to return. The value should be in [1,100].

Default: 20

start_timelong

Specify a start time of the query's duration. The format should be Unix epoch time in milliseconds.
The value must be greater than zero, and it must not exceed one year from the current date.

end_timelong

Specify an end time of the query's duration. The value must be a Unix epoch timestamp in milliseconds, greater than zero, and no more than 30 days after the start_date.

filter4 fieldsobject
POST /o/core/v1.1/reports
Copy
Responses
200

Successful response

objectobject
tokenstring

Pagination token

data23 fieldsarray[object]
Response
Copy

Get Processing Overview

Retrieve aggregated processing statistics for MetaDefender Core instances over a specified time range. Results can optionally be broken down by groups or instances using the group_by field.

If both filters.group_ids and filters.instance_ids are provided, instance_ids is ignored.

Auth
Request Body
objectobject
start_timelong

Unix epoch milliseconds. Defaults to 24h before end_time. Must be within one year from now.

end_timelong

Unix epoch milliseconds. Defaults to current time.

filtersobject
instance_idsarray[string]

Filter by instance IDs. Ignored if group_ids is provided.

group_idsarray[string]

Filter by group IDs. Takes precedence over instance_ids.

group_bystring

Break down results by groups or instances. Omit for top-level stats only.

Enum: groups,instances

POST /o/core/v1.1/reports/processing-overview
Copy
Responses
200

Successful response

objectobject
total_processed_filesinteger
total_processed_objectsinteger
total_blocked_filesinteger
total_blocked_objectsinteger
total_objects_with_threatsinteger
total_files_with_threatsinteger
total_users_submitted_scansinteger
total_unique_users_submitted_scansinteger
avg_scan_time_per_objectinteger

Avg scan time per object (ms).

avg_scan_time_per_fileinteger

Avg scan time per file (ms).

groups12 fieldsarray[object]

Present only when group_by=groups.

instances12 fieldsarray[object]

Present only when group_by=instances.

400

Bad Request – validation failure.

Response
Copy

Update Module Update Settings

Update the module update settings for a specific MetaDefender Core instance. Only the source field is modified; all other existing settings are preserved.

Auth
Request Body
objectobject
deployment_idstring

deploymentId of the target instance.

sourcestring

The update source for modules.

Enum: internet,folder,manual

PUT /o/core/v1/instances/module-update-settings
Copy
Responses
200

Module update settings updated successfully. No response body.

No response body
400

Bad Request – validation failure or group auto-sync policy conflict.

404

Instance not found for the given deployment_id.

500

Internal Server Error

Response
Copy

Retrieve account inventory or a specific product inventory

Retrieve account inventory or a specific product inventory based on filter criteria. productTypes: MDD (MetaDefender Drive), KIOSK (MetaDefender Kiosk K-Series), MK5 (MetaDefender Kiosk L-Series), MDCORE (MetaDefender Core), MDICAP (MetaDefender ICAP Server)

Auth
Headers
Content-Typestring

application/json

Request Body
Root Type for filterProductTypesobject
filtersobject
productTypesarray[string]
POST /o/fusion/v1/account/inventory
Copy
Responses
200

OK

Root Type for RetrieveAccountObjarray[object]
productNamestring
productTypestring

Enum: MDCORE

totalInstancesint32
connectivity3 fieldsobject
health6 fieldsobject
version3 fieldsarray[object]
license5 fieldsobject
400

Bad Request

401

Unauthorized

500

Internal Server Error

Response
Copy

Processing Overview from MetaDefender Kiosk instances

Retrieve processing overview from MetaDefender Kiosk K-Series and L-Series instances based on filter criteria over a specified time period

Auth
Headers
Content-Typestring

application/json

Request Body
Root Type for KioskOverviewReqobject
endTimeint32

timestamp in miliseconds

startTimeint32

timestamp in miliseconds

filtersobject
instanceIdsarray
groupIdsarray
groupBystring

Enum: groups,instances

POST /o/pmp/v1/scan-report/overview
Copy
Responses
200

OK

Root Type for KioskResObjobject
numberOfSessionsint32

total number of scan sessions during the selected time period and based on the applied filters

numberOfFilesProcessedint32
numberOfSessionsWithThreatsDetectedint32
numberOfThreatsFoundint32
numberOfFilesSanitizedint32
instances7 fieldsarray[object]

this array will be returned when groupBy is set to 'instances'

400

Bad Request

401

Unauthorized

500

Internal Server Error

Response
Copy

Get Kiosk session detail

Auth
GET /o/pmp/v1/devices/{deviceId}/report/scan/{sessionId}
Copy
Responses
200

OK

Root Type for GetKioskSessionDetailReqobject
deviceIdstring
sessionIdstring
malwareInfectedint32
vulnerableAppint32
exploitProtectionint32
malwareSandboxint32
cooViolationint32
privacyViolationint32
skippedFileint32
401

Unauthorized

500

Internal Server Error

Response
Copy

Get Kiosk Detail

Auth
GET /o/pmp/v1/kiosk/devices/{deviceId}
Copy
Responses
200

OK

Root Type for GetKioskDetailResobject
deviceIdstring
productTypestring
deviceNamestring
healthStatusstring
statusMessagesarray[string]
modelIdstring
hardwareVersionIdstring
deviceTypestring
agentVersionstring
isRequiredboolean
publicIpstring
locationstring
groupIdstring
groupNamestring
policyIdstring
groupPolicyIdstring
groupPolicyNamestring
lastSeenint32
enrolledAtint32
lastReportint32
tagsarray
coreInfo5 fieldsobject
geolocation2 fieldsobject
properties7 fieldsobject
configurationStatusobject
statusstring
lastFetchedint32
401

Unauthorized

404

Not Found

500

Internal Server Error

Response
Copy

Get Kiosk List

Auth
GET /o/pmp/v1/kiosk/devices
Responses
200

OK

Root Type for GetKioskListResobject
totalint32
items26 fieldsarray[object]
401

Unauthorized

500

Internal Server Error

Response