NAV Navigation
Shell HTTP JavaScript Ruby Python PHP Java Go

Scan Results API v1

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

Describes the API calls used to retrieve the results of Constellations scans.

Base URLs:

Authentication

ScanResults

Retrieve the CDR result for a given scan

Code samples

# You can also use wget
curl -X GET /api/v1/scan-results/{scanId}/summary \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET /api/v1/scan-results/{scanId}/summary HTTP/1.1

Accept: application/json

const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};

fetch('/api/v1/scan-results/{scanId}/summary',
{
method: 'GET',

headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'

headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get '/api/v1/scan-results/{scanId}/summary',
params: {
}, headers: headers

p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}

r = requests.get('/api/v1/scan-results/{scanId}/summary', headers = headers)

print(r.json())
<?php

require 'vendor/autoload.php';

$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
$response = $client->request('GET','/api/v1/scan-results/{scanId}/summary', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}

// ...
URL obj = new URL("/api/v1/scan-results/{scanId}/summary");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main

import (
"bytes"
"net/http"
)

func main() {

headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}

data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/api/v1/scan-results/{scanId}/summary", data)
req.Header = headers

client := &http.Client{}
resp, err := client.Do(req)
// ...
}

GET /scan-results/{scanId}/summary

The response provides a summary of the CDR processing that has been carried out on the scanned files.

Requests submitted with the ‘StandardUser’ role are only permitted to retrieve self-started scans.

Parameters

Name In Type Required Description
scanId path string(uuid) true Unique identifier for a scan.

Example: 56d61ae4-8147-4778-acb1-1f1f9c881fa7

Example responses

200 Response

{
"scanDetails": {
"scanOwner": "string",
"scanId": "fda3f490-eac1-4267-a13b-69d14aceb1f0",
"scanStatus": "Processing",
"scanStartTime": "2019-08-24T14:15:22Z",
"scanEndTime": "2019-08-24T14:15:22Z",
"sourceStorage": "scan-source.blob.core.windows.net",
"sourceContainerPath": "SourceContainer",
"targetStorage": "output-location.blob.core.windows.net",
"targetContainerPath": "TargetContainerName",
"quarantineContainerPath": "QuarantineContainerName",
"autoRescan": true,
"parentScan": "f18eda36-7eb5-477a-a1b1-51c71ab2ba81",
"childScans": null
},
"processingResults": {
"numberOfFiles": 0,
"numberOfProcessedFiles": 0,
"numberOfFailedFiles": 0,
"numberOfRebuiltFiles": 0,
"numberOfErroredFiles": 0
}
}

Responses

Status Meaning Description Schema
200 OK CDR Summary Results for the specified scan ScanStatusSummary
401 Unauthorized Insufficient authorisation None
404 Not Found Specified scan not found None

Response Headers

Status Header Type Format Description
200 Cache-Control undefined Prevent sensitive information from being cached.
Example: no-store
200 Content-Type undefined Indicates the response content type.
Example: application/json
200 X-Content-Type-Options undefined To prevent browsers from performing MIME sniffing, and inappropriately interpreting responses as HTML.
Example: nosniff
200 X-Frame-Options undefined To protect against drag-and-drop style clickjacking attacks.
Example: DENY
200 Content-Security-Policy undefined To protect against drag-and-drop style clickjacking attacks.
Example: frame-ancestors ‘none’
200 Strict-Transport-Security undefined Uses a week long max-age to prevent any communications from being sent to this domain over HTTP.
Example: max-age=604800

Retrieve the status of each file processed by CDR engine for a given scan

Code samples

# You can also use wget
curl -X GET /api/v1/scan-results/{scanId}/files \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET /api/v1/scan-results/{scanId}/files HTTP/1.1

Accept: application/json

const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};

fetch('/api/v1/scan-results/{scanId}/files',
{
method: 'GET',

headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'

headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get '/api/v1/scan-results/{scanId}/files',
params: {
}, headers: headers

p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}

r = requests.get('/api/v1/scan-results/{scanId}/files', headers = headers)

print(r.json())
<?php

require 'vendor/autoload.php';

$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
$response = $client->request('GET','/api/v1/scan-results/{scanId}/files', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}

// ...
URL obj = new URL("/api/v1/scan-results/{scanId}/files");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main

import (
"bytes"
"net/http"
)

func main() {

headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}

data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/api/v1/scan-results/{scanId}/files", data)
req.Header = headers

client := &http.Client{}
resp, err := client.Do(req)
// ...
}

GET /scan-results/{scanId}/files

The response provides the status of each file that was processed by the CDR Engine for a given scan along with the file metadata.

Requests submitted with the ‘StandardUser’ role are only permitted to retrieve self-started scans.

Parameters

Name In Type Required Description
scanId path string(uuid) true Unique identifier for a scan.

Example: 56d61ae4-8147-4778-acb1-1f1f9c881fa7
pageSize query integer false Limits the number of records returned in the response.
page query integer false Identifies which page in the results is returned. If the value exceeds the number of available pages, then the last page is returned.
includeRebuilt query boolean false Indicates whether the details of files that have been rebuilt should be included in the returned results

Detailed descriptions

pageSize: Limits the number of records returned in the response.

page: Identifies which page in the results is returned. If the value exceeds the number of available pages, then the last page is returned. required: false

includeRebuilt: Indicates whether the details of files that have been rebuilt should be included in the returned results

Example responses

200 Response

{
"scanDetails": {
"scanOwner": "string",
"scanId": "fda3f490-eac1-4267-a13b-69d14aceb1f0",
"scanStatus": "Processing",
"scanStartTime": "2019-08-24T14:15:22Z",
"scanEndTime": "2019-08-24T14:15:22Z",
"sourceStorage": "scan-source.blob.core.windows.net",
"sourceContainerPath": "SourceContainer",
"targetStorage": "output-location.blob.core.windows.net",
"targetContainerPath": "TargetContainerName",
"quarantineContainerPath": "QuarantineContainerName",
"autoRescan": true,
"parentScan": "f18eda36-7eb5-477a-a1b1-51c71ab2ba81",
"childScans": null
},
"scanFiles": [
{
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa",
"status": "Failed"
}
],
"pageLinks": {
"totalPages": 4,
"curr": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=3",
"next": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=4",
"prev": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=2"
}
}

Responses

Status Meaning Description Schema
200 OK CDR Results for the specified scan ScanStatusResults
400 Bad Request Invalid request parameters None
401 Unauthorized Insufficient authorisation None
404 Not Found Specified scan not found None

Response Headers

Status Header Type Format Description
200 Cache-Control undefined Prevent sensitive information from being cached.
Example: no-store
200 Content-Type undefined Indicates the response content type.
Example: application/json
200 X-Content-Type-Options undefined To prevent browsers from performing MIME sniffing, and inappropriately interpreting responses as HTML.
Example: nosniff
200 X-Frame-Options undefined To protect against drag-and-drop style clickjacking attacks.
Example: DENY
200 Content-Security-Policy undefined To protect against drag-and-drop style clickjacking attacks.
Example: frame-ancestors ‘none’
200 Strict-Transport-Security undefined Uses a week long max-age to prevent any communications from being sent to this domain over HTTP.
Example: max-age=604800

Retrieve detailed CDR results for a given file in a given scan

Code samples

# You can also use wget
curl -X GET /api/v1/scan-results/{scanId}/files/{fileId} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET /api/v1/scan-results/{scanId}/files/{fileId} HTTP/1.1

Accept: application/json

const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};

fetch('/api/v1/scan-results/{scanId}/files/{fileId}',
{
method: 'GET',

headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'

headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get '/api/v1/scan-results/{scanId}/files/{fileId}',
params: {
}, headers: headers

p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}

r = requests.get('/api/v1/scan-results/{scanId}/files/{fileId}', headers = headers)

print(r.json())
<?php

require 'vendor/autoload.php';

$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
$response = $client->request('GET','/api/v1/scan-results/{scanId}/files/{fileId}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}

// ...
URL obj = new URL("/api/v1/scan-results/{scanId}/files/{fileId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main

import (
"bytes"
"net/http"
)

func main() {

headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}

data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/api/v1/scan-results/{scanId}/files/{fileId}", data)
req.Header = headers

client := &http.Client{}
resp, err := client.Do(req)
// ...
}

GET /scan-results/{scanId}/files/{fileId}

The response contains the detailed CDR results for a given file in a given scan if the file is not an archive.

The response structure varies for the archive file based on the archive mode. There are 2 archive modes that can be configured for the product which are “basic” and “detailed”.

If the archive mode was configured as “basic” during the scan processing, then this endpoint will report the CDR result of the archive file without expanding the files within the archive. Refer schema, “ScanStatusFileResults”.

If the archive mode was configured as “detailed” during the scan processing, then this endpoint will report the CDR results of the individual files within the archive file. Refer schema, “ScanStatusArchiveResults”

Requests submitted with the ‘StandardUser’ role are only permitted to retrieve self-started scans.

Parameters

Name In Type Required Description
scanId path string(uuid) true Unique identifier for a scan.

Example: 56d61ae4-8147-4778-acb1-1f1f9c881fa7
fileId path string(uuid) true Unique identifier for a file.

Example: 48e3cece-37c6-4d92-b0d8-3620ef27d219

Example responses

CDR Detailed Results for the specified scan and file

{
"fileDetails": {
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "null",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa"
},
"processingResults": {
"status": "Failed",
"remedyItems": [
{
"technicalDescription": "Object specified as free in original will be removed",
"remedyId": 198311939,
"instanceCount": 3
}
],
"sanitisationItems": [
{
"technicalDescription": "Action of type /URI removed by content management policy.",
"sanitisationId": 346815988,
"instanceCount": 2
}
],
"issueItems": [
{
"technicalDescription": "Validation of this MTEF Version not supported",
"issueId": 289311464,
"instanceCount": 1,
"riskLevel": "Medium"
}
],
"errors": [
{
"errorCode": 12,
"errorDescription": "Invalid Content Management Policy"
}
]
}
}
{
"fileDetails": {
"fileLocation": "supported/1/test.zip",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "null",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa"
},
"processingResults": {
"archiveList": [
{
"fileLocation": "supported/1/test1.png",
"fileSize": 123456,
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa",
"status": "Failed"
},
{
"fileLocation": "supported/1/test2.pdf",
"fileSize": 123456,
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa",
"status": "Failed"
}
]
},
"pageLinks": {
"totalPages": 6,
"curr": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=3",
"next": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=4",
"prev": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=2"
}
}

Responses

Status Meaning Description Schema
200 OK CDR Detailed Results for the specified scan and file Inline
400 Bad Request Invalid request parameters None
401 Unauthorized Insufficient authorisation None
404 Not Found Specified scan not found None

Response Schema

Enumerated Values

Property Value
status Failed
status Errored
status Rebuilt

Response Headers

Status Header Type Format Description
200 Cache-Control undefined Prevent sensitive information from being cached.
Example: no-store
200 Content-Type undefined Indicates the response content type.
Example: application/json
200 X-Content-Type-Options undefined To prevent browsers from performing MIME sniffing, and inappropriately interpreting responses as HTML.
Example: nosniff
200 X-Frame-Options undefined To protect against drag-and-drop style clickjacking attacks.
Example: DENY
200 Content-Security-Policy undefined To protect against drag-and-drop style clickjacking attacks.
Example: frame-ancestors ‘none’
200 Strict-Transport-Security undefined Uses a week long max-age to prevent any communications from being sent to this domain over HTTP.
Example: max-age=604800

Retrieve the detailed CDR results for a given file within an archive for a given scan. Detailed archive mode is required.

Code samples

# You can also use wget
curl -X GET /api/v1/scan-results/{scanId}/files/{fileId}/content/{archiveContentId} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET /api/v1/scan-results/{scanId}/files/{fileId}/content/{archiveContentId} HTTP/1.1

Accept: application/json

const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};

fetch('/api/v1/scan-results/{scanId}/files/{fileId}/content/{archiveContentId}',
{
method: 'GET',

headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'

headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get '/api/v1/scan-results/{scanId}/files/{fileId}/content/{archiveContentId}',
params: {
}, headers: headers

p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}

r = requests.get('/api/v1/scan-results/{scanId}/files/{fileId}/content/{archiveContentId}', headers = headers)

print(r.json())
<?php

require 'vendor/autoload.php';

$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
$response = $client->request('GET','/api/v1/scan-results/{scanId}/files/{fileId}/content/{archiveContentId}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}

// ...
URL obj = new URL("/api/v1/scan-results/{scanId}/files/{fileId}/content/{archiveContentId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main

import (
"bytes"
"net/http"
)

func main() {

headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}

data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/api/v1/scan-results/{scanId}/files/{fileId}/content/{archiveContentId}", data)
req.Header = headers

client := &http.Client{}
resp, err := client.Do(req)
// ...
}

GET /scan-results/{scanId}/files/{fileId}/content/{archiveContentId}

This endpoint is applicable only if the archive mode is set to “detailed”.

The response provides the CDR analysis results for a given file within the archive. {fileId} corresponds to the fileId of the archive and {archiveContentId} corresponds to the fileId of the file within the archive.

Requests submitted with the ‘StandardUser’ role are only permitted to retrieve self-started scans.

Parameters

Name In Type Required Description
scanId path string(uuid) true Unique identifier for a scan.

Example: 56d61ae4-8147-4778-acb1-1f1f9c881fa7
fileId path string(uuid) true Unique identifier for a file.

Example: 48e3cece-37c6-4d92-b0d8-3620ef27d219
archiveContentId path string(uuid) true Unique identifier for a file within an archive.

Example: b2b1766d-bdb8-4076-b9e5-6ae76f275f03

Example responses

200 Response

{
"fileDetails": {
"archiveId": "lk09f362-6c83-49a1-bbcb-7c08389a0mnb",
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa"
},
"processingResults": {
"status": "Failed",
"remedyItems": [
{
"technicalDescription": "Object specified as free in original will be removed",
"remedyId": 198311939,
"instanceCount": 3
}
],
"sanitisationItems": [
{
"technicalDescription": "Action of type /URI removed by content management policy.",
"sanitisationId": 346815988,
"instanceCount": 2
}
],
"issueItems": [
{
"technicalDescription": "Validation of this MTEF Version not supported",
"issueId": 289311464,
"instanceCount": 1,
"riskLevel": "Medium"
}
],
"errors": [
{
"errorCode": 12,
"errorDescription": "Invalid Content Management Policy"
}
]
}
}

Responses

Status Meaning Description Schema
200 OK Detailed CDR results for a given file within an archive ScanStatusArchiveResultsDetailed
400 Bad Request Invalid request parameters None
401 Unauthorized Insufficient authorisation None
404 Not Found Specified scan not found None

Response Headers

Status Header Type Format Description
200 Cache-Control undefined Prevent sensitive information from being cached.
Example: no-store
200 Content-Type undefined Indicates the response content type.
Example: application/json
200 X-Content-Type-Options undefined To prevent browsers from performing MIME sniffing, and inappropriately interpreting responses as HTML.
Example: nosniff
200 X-Frame-Options undefined To protect against drag-and-drop style clickjacking attacks.
Example: DENY
200 Content-Security-Policy undefined To protect against drag-and-drop style clickjacking attacks.
Example: frame-ancestors ‘none’
200 Strict-Transport-Security undefined Uses a week long max-age to prevent any communications from being sent to this domain over HTTP.
Example: max-age=604800

Retrieve the filetype information for a given scan

Code samples

# You can also use wget
curl -X GET /api/v1/scan-results/{scanId}/files-format \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
GET /api/v1/scan-results/{scanId}/files-format HTTP/1.1

Accept: application/json

const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};

fetch('/api/v1/scan-results/{scanId}/files-format',
{
method: 'GET',

headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'

headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}

result = RestClient.get '/api/v1/scan-results/{scanId}/files-format',
params: {
}, headers: headers

p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}

r = requests.get('/api/v1/scan-results/{scanId}/files-format', headers = headers)

print(r.json())
<?php

require 'vendor/autoload.php';

$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
$response = $client->request('GET','/api/v1/scan-results/{scanId}/files-format', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}

// ...
URL obj = new URL("/api/v1/scan-results/{scanId}/files-format");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main

import (
"bytes"
"net/http"
)

func main() {

headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}

data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/api/v1/scan-results/{scanId}/files-format", data)
req.Header = headers

client := &http.Client{}
resp, err := client.Do(req)
// ...
}

GET /scan-results/{scanId}/files-format

The response provides the counts on the different filetypes that are recognized by Glasswall CDR Engine during the scan.

Requests submitted with the ‘StandardUser’ role are only permitted to retrieve self-started scans.

Parameters

Name In Type Required Description
scanId path string(uuid) true Unique identifier for a scan.

Example: 56d61ae4-8147-4778-acb1-1f1f9c881fa7

Example responses

200 Response

{
"pdfCount": 0,
"excelCount": 0,
"powerpointCount": 0,
"wordCount": 0,
"mediaCount": 0,
"imagesCount": 0,
"archiveCount": 0,
"metafilesCount": 0,
"executableCount": 0,
"unrecognizedCount": 0
}

Responses

Status Meaning Description Schema
200 OK Recognized file types by the Glasswall CDR Engine ScanFileFormatResults
401 Unauthorized Insufficient authorisation None
404 Not Found Specified scan not found None

Response Headers

Status Header Type Format Description
200 Cache-Control undefined Prevent sensitive information from being cached.
Example: no-store
200 Content-Type undefined Indicates the response content type.
Example: application/json
200 X-Content-Type-Options undefined To prevent browsers from performing MIME sniffing, and inappropriately interpreting responses as HTML.
Example: nosniff
200 X-Frame-Options undefined To protect against drag-and-drop style clickjacking attacks.
Example: DENY
200 Content-Security-Policy undefined To protect against drag-and-drop style clickjacking attacks.
Example: frame-ancestors ‘none’
200 Strict-Transport-Security undefined Uses a week long max-age to prevent any communications from being sent to this domain over HTTP.
Example: max-age=604800

Schemas

ScanStatusItem

{
"scanOwner": "string",
"scanId": "fda3f490-eac1-4267-a13b-69d14aceb1f0",
"scanStatus": "Processing",
"scanStartTime": "2019-08-24T14:15:22Z",
"scanEndTime": "2019-08-24T14:15:22Z",
"sourceStorage": "scan-source.blob.core.windows.net",
"sourceContainerPath": "SourceContainer",
"targetStorage": "output-location.blob.core.windows.net",
"targetContainerPath": "TargetContainerName",
"quarantineContainerPath": "QuarantineContainerName",
"autoRescan": true,
"parentScan": "f18eda36-7eb5-477a-a1b1-51c71ab2ba81",
"childScans": null
}

Properties

Name Type Required Restrictions Description
scanOwner string true none Identity of User that started the scan
scanId string(uuid) true none Unique identifier for a scan
scanStatus string true none Reports the current processing status of the scan
scanStartTime string(date-time) true none The time at which the scan started
scanEndTime string(date-time)¦null false none The time at which the scan finished, or was cancelled. Null if scan still in progress.
sourceStorage string true none Storage account containing the sourceContainerPath.
sourceContainerPath string true none Name of the container to be scanned in the specified storage account
targetStorage string true none Storage account containing the targetContainerPath and quarantineContainerPath.
targetContainerPath string true none Name of the container in the destination storage account into which rebuilt files are to be written
quarantineContainerPath string true none Name of the container in the destination storage account into which quarantine reports are to be written
autoRescan boolean true none Flag is set to ‘true’ if an automatic rescan has been configured to start when the original scan is completed.
parentScan string(uuid) false none If this scan is a rescan, then the parent scan’s identity is recorded in this property.
childScans [string] false none If and rescans have been requested, based on this scan, then the identities of the rescans are recorded in this property.

Enumerated Values

Property Value
scanStatus Listing
scanStatus Processing
scanStatus Cancelled
scanStatus Completed
scanStatus Error
scanStatus Unknown

ScanStatusSummary

{
"scanDetails": {
"scanOwner": "string",
"scanId": "fda3f490-eac1-4267-a13b-69d14aceb1f0",
"scanStatus": "Processing",
"scanStartTime": "2019-08-24T14:15:22Z",
"scanEndTime": "2019-08-24T14:15:22Z",
"sourceStorage": "scan-source.blob.core.windows.net",
"sourceContainerPath": "SourceContainer",
"targetStorage": "output-location.blob.core.windows.net",
"targetContainerPath": "TargetContainerName",
"quarantineContainerPath": "QuarantineContainerName",
"autoRescan": true,
"parentScan": "f18eda36-7eb5-477a-a1b1-51c71ab2ba81",
"childScans": null
},
"processingResults": {
"numberOfFiles": 0,
"numberOfProcessedFiles": 0,
"numberOfFailedFiles": 0,
"numberOfRebuiltFiles": 0,
"numberOfErroredFiles": 0
}
}

Properties

Name Type Required Restrictions Description
scanDetails ScanStatusItem true none none
processingResults ProcessingSummaryItem true none none

ProcessingSummaryItem

{
"numberOfFiles": 0,
"numberOfProcessedFiles": 0,
"numberOfFailedFiles": 0,
"numberOfRebuiltFiles": 0,
"numberOfErroredFiles": 0
}

Properties

Name Type Required Restrictions Description
numberOfFiles integer(int64) true none The number of file files found in the scanned container
numberOfProcessedFiles integer(int64) true none The number of files processed through the CDR engine
numberOfFailedFiles integer(int64) true none The number of file files that could not be processed through the CDR engine
numberOfRebuiltFiles integer(int64) true none The number of files that have been successfully rebuilt through the CDR Engine
numberOfErroredFiles integer(int64) true none The number of files that experienced errors during the CDR processing

ScanStatusResults

{
"scanDetails": {
"scanOwner": "string",
"scanId": "fda3f490-eac1-4267-a13b-69d14aceb1f0",
"scanStatus": "Processing",
"scanStartTime": "2019-08-24T14:15:22Z",
"scanEndTime": "2019-08-24T14:15:22Z",
"sourceStorage": "scan-source.blob.core.windows.net",
"sourceContainerPath": "SourceContainer",
"targetStorage": "output-location.blob.core.windows.net",
"targetContainerPath": "TargetContainerName",
"quarantineContainerPath": "QuarantineContainerName",
"autoRescan": true,
"parentScan": "f18eda36-7eb5-477a-a1b1-51c71ab2ba81",
"childScans": null
},
"scanFiles": [
{
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa",
"status": "Failed"
}
],
"pageLinks": {
"totalPages": 4,
"curr": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=3",
"next": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=4",
"prev": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=2"
}
}

Properties

Name Type Required Restrictions Description
scanDetails ScanStatusItem true none none
scanFiles ScanFilesItemList true none none
pageLinks PageLinksForFiles false none These links provide access to the paged results either side of the current page segment, along with the total number of pages.

If the number of results returned is within a single page segment, then these links are not included in the response.

ScanStatusFileResults

{
"fileDetails": {
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa"
},
"processingResults": {
"status": "Failed",
"remedyItems": [
{
"technicalDescription": "Object specified as free in original will be removed",
"remedyId": 198311939,
"instanceCount": 3
}
],
"sanitisationItems": [
{
"technicalDescription": "Action of type /URI removed by content management policy.",
"sanitisationId": 346815988,
"instanceCount": 2
}
],
"issueItems": [
{
"technicalDescription": "Validation of this MTEF Version not supported",
"issueId": 289311464,
"instanceCount": 1,
"riskLevel": "Medium"
}
],
"errors": [
{
"errorCode": 12,
"errorDescription": "Invalid Content Management Policy"
}
]
}
}

Properties

Name Type Required Restrictions Description
fileDetails ScanFileMetadata true none none
processingResults ScanFilesAssessmentProcessingResults true none none

ScanStatusArchiveResults

{
"fileDetails": {
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa"
},
"processingResults": {
"status": "Failed",
"archiveList": [
{
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa",
"status": "Failed"
}
]
},
"pageLinks": {
"totalPages": 4,
"curr": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=3",
"next": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=4",
"prev": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=2"
}
}

Properties

Name Type Required Restrictions Description
fileDetails ScanFileMetadata true none none
processingResults ScanFilesAssessmentArchiveList true none none
pageLinks PageLinksForArchives false none These links provide access to the paged results either side of the current page segment, along with the total number of pages.

If the number of results returned is within a single page segment, then these links are not included in the response.

ScanStatusArchiveResultsDetailed

{
"fileDetails": {
"archiveId": "lk09f362-6c83-49a1-bbcb-7c08389a0mnb",
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa"
},
"processingResults": {
"status": "Failed",
"remedyItems": [
{
"technicalDescription": "Object specified as free in original will be removed",
"remedyId": 198311939,
"instanceCount": 3
}
],
"sanitisationItems": [
{
"technicalDescription": "Action of type /URI removed by content management policy.",
"sanitisationId": 346815988,
"instanceCount": 2
}
],
"issueItems": [
{
"technicalDescription": "Validation of this MTEF Version not supported",
"issueId": 289311464,
"instanceCount": 1,
"riskLevel": "Medium"
}
],
"errors": [
{
"errorCode": 12,
"errorDescription": "Invalid Content Management Policy"
}
]
}
}

Properties

Name Type Required Restrictions Description
fileDetails ScanArchiveFileMetadata true none none
processingResults ScanFilesAssessmentProcessingResults true none none
{
"totalPages": 4,
"curr": "/scans?startDate=2022-12-20T16:44:41.741Z?endDate=2022-12-20T16:44:41.741Z?scanStatus=Processing&scanStatus=Completed?pageSize=10?page=3",
"next": "/scans?startDate=2022-12-20T16:44:41.741Z?endDate=2022-12-20T16:44:41.741Z?scanStatus=Processing&scanStatus=Completed?pageSize=10?page=4",
"prev": "/scans?startDate=2022-12-20T16:44:41.741Z?endDate=2022-12-20T16:44:41.741Z?scanStatus=Processing&scanStatus=Completed?pageSize=10?page=2"
}

These links provide access to the paged results either side of the current page segment, along with the total number of pages.

If the number of results returned is within a single page segment, then these links are not included in the response.

Properties

Name Type Required Restrictions Description
totalPages integer false none The total number of pages
curr string false none URL providing access to the current page of results
next string false none URL providing access to the next page of results
prev string false none URL providing access to the previous page of results

ScanResultsLinksAllUsers

{
"totalPages": 4,
"curr": "/scans/allusers?startDate=2022-12-20T16:44:41.741Z?endDate=2022-12-20T16:44:41.741Z?scanStatus=Processing&scanStatus=Completed?pageSize=10?page=3",
"next": "/scans/allusers?startDate=2022-12-20T16:44:41.741Z?endDate=2022-12-20T16:44:41.741Z?scanStatus=Processing&scanStatus=Completed?pageSize=10?page=4",
"prev": "/scans/allusers?startDate=2022-12-20T16:44:41.741Z?endDate=2022-12-20T16:44:41.741Z?scanStatus=Processing&scanStatus=Completed?pageSize=10?page=2"
}

These links provide access to the paged results either side of the current page segment, along with the total number of pages.

If the number of results returned is within a single page segment, then these links are not included in the response.

Properties

Name Type Required Restrictions Description
totalPages integer false none The total number of pages
curr string false none URL providing access to the current page of results
next string false none URL providing access to the next page of results
prev string false none URL providing access to the previous page of results

PageLinksForFiles

{
"totalPages": 4,
"curr": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=3",
"next": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=4",
"prev": "/scan-results/{scanId}/files?pageSize=100?includeRebuilt=true?page=2"
}

These links provide access to the paged results either side of the current page segment, along with the total number of pages.

If the number of results returned is within a single page segment, then these links are not included in the response.

Properties

Name Type Required Restrictions Description
totalPages integer false none The total number of pages
curr string false none URL providing access to the current page of results
next string false none URL providing access to the next page of results
prev string false none URL providing access to the previous page of results

PageLinksForArchives

{
"totalPages": 4,
"curr": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=3",
"next": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=4",
"prev": "/scan-results/{scanId}/files/{fileId}?pageSize=100?includeRebuilt=true?page=2"
}

These links provide access to the paged results either side of the current page segment, along with the total number of pages.

If the number of results returned is within a single page segment, then these links are not included in the response.

Properties

Name Type Required Restrictions Description
totalPages integer false none The total number of pages
curr string false none URL providing access to the current page of results
next string false none URL providing access to the next page of results
prev string false none URL providing access to the previous page of results

ScanFilesItemList

[
{
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa",
"status": "Failed"
}
]

Properties

Name Type Required Restrictions Description
anonymous [ScanFilesAssessmentMetadata] false none none

ScanFilesAssessmentArchiveList

{
"status": "Failed",
"archiveList": [
{
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa",
"status": "Failed"
}
]
}

Properties

Name Type Required Restrictions Description
status string false none Status of the processed file from CDR Engine
- Failed: File was not rebuilt due to policy
- Errored: File was not rebuilt due to processing error
- Rebuilt: File was successfully rebuilt
archiveList ScanFilesItemList false none none

ScanFilesAssessmentMetadata

{
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa",
"status": "Failed"
}

Properties

Name Type Required Restrictions Description
fileLocation string false none Full file path locating the processed file
fileSize integer false none Size of the processed file in bytes
sourceFileHash string false none Hash value of the source file for the configured algorithm
rebuiltFileHash string false none Hash value of the rebuilt file for the configured algorithm
hashingAlgorithm string false none Configured hashing algorithm with a default of SHA256
fileId string(uuid) false none Uniquely identifies the file
status string false none Status of the processed file from CDR Engine
- Failed: File was not rebuilt due to policy
- Errored: File was not rebuilt due to processing error
- Rebuilt: File was successfully rebuilt

Enumerated Values

Property Value
status Failed
status Errored
status Rebuilt

ScanFileMetadata

{
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"sourceFileHash": "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"rebuiltFileHash": "r6hWfYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=",
"hashingAlgorithm": "SHA256",
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa"
}

Properties

Name Type Required Restrictions Description
fileLocation string false none Full file path locating the processed file
fileSize integer false none Size of the processed file in bytes
sourceFileHash string false none Hash value of the source file for the configured algorithm
rebuiltFileHash string false none Hash value of the rebuilt file for the configured algorithm
hashingAlgorithm string false none Configured hashing algorithm with a default of SHA256
fileId string(uuid) false none Uniquely identifies the file

ScanArchiveFileMetadata

{
"archiveId": "lk09f362-6c83-49a1-bbcb-7c08389a0mnb",
"fileLocation": "supported/1/test.png",
"fileSize": 123456,
"fileId": "cd88f362-6c83-49a1-bbcb-7c08389a0caa"
}

Properties

Name Type Required Restrictions Description
archiveId string(uuid) false none Uniquely identifies the archive file
fileLocation string false none Full file path locating the processed file
fileSize integer false none Size of the processed file in bytes
fileId string(uuid) false none Uniquely identifies the file

ScanFilesAssessmentProcessingResults

{
"status": "Failed",
"remedyItems": [
{
"technicalDescription": "Object specified as free in original will be removed",
"remedyId": 198311939,
"instanceCount": 3
}
],
"sanitisationItems": [
{
"technicalDescription": "Action of type /URI removed by content management policy.",
"sanitisationId": 346815988,
"instanceCount": 2
}
],
"issueItems": [
{
"technicalDescription": "Validation of this MTEF Version not supported",
"issueId": 289311464,
"instanceCount": 1,
"riskLevel": "Medium"
}
],
"errors": [
{
"errorCode": 12,
"errorDescription": "Invalid Content Management Policy"
}
]
}

Properties

Name Type Required Restrictions Description
status string false none Provides an assessment of the processing outcome
- Unprocessed: File was not rebuilt due to Local checks failing file not submitted to CDR Engine
- Failed: File was not rebuilt due to policy
- Errored: File was not rebuilt due to processing error
- Rebuilt: File was successfully rebuilt
remedyItems [object] false none Collection of remedy items found in the file by the CDR processing
» technicalDescription string false none Description of remedy item from CDR Analysis Report
» remedyId integer false none Unique identifier of the remedy type
» instanceCount integer false none Number of instances of this remedy found in the file
sanitisationItems [object] false none Collection of sanitisation items found in the file by the CDR processing
» technicalDescription string false none Description of sanitisation item from CDR Analysis Report
» sanitisationId integer false none Unique identifier of the sanitisation type
» instanceCount integer false none Number of instances of this sanitisation found in the file
issueItems [object] false none Collection of issue items found in the file by the CDR processing
» technicalDescription string false none Description of issue item from CDR Analysis Report
» issueId integer false none Unique identifier of the issue type
» instanceCount integer false none Number of instances of this issue found in the file
» riskLevel string false none Indication of the risk posed by this issue
errors [object] false none Collection of errors found in the file by the CDR processing
» errorCode integer false none Error code from CDR processing
» errorDescription string false none Error description for the error code

ScanFileFormatResults

{
"pdfCount": 0,
"excelCount": 0,
"powerpointCount": 0,
"wordCount": 0,
"mediaCount": 0,
"imagesCount": 0,
"archiveCount": 0,
"metafilesCount": 0,
"executableCount": 0,
"unrecognizedCount": 0
}

Properties

Name Type Required Restrictions Description
pdfCount integer false none Count of the files that the Glasswall engine recognized as “pdf”
excelCount integer false none Count of the files that the Glasswall engine recognized as “xls” or “xlt” or “xlsx” or “xltx” or “xlsm” or “xltm”
powerpointCount integer false none Count of the files that the Glasswall engine recognized as “ppt”, "“pps”, “pptx”, “pptm”, “ppsx”, “ppam”, “potm”, “ppsm”, “potx”, “pot”
wordCount integer false none Count of the files that the Glasswall engine recognized as “doc”, “dot”,“docx”, “docm”, “dotx”, “dotm”
mediaCount integer false none Count of the files that the Glasswall engine recognized as “webp”, “wav”, “wave”, “mpg”, “mpeg”, “mp1”, “mp2”, “mp3”, “mp4”, “m4a”, “m4p”, “m4b”, “m4r”, “m4v”
imagesCount integer false none Count of the files that the Glasswall engine recognized as “tif”, “tiff”, “geotiff”, “svg”, “jpeg”, “jpg”, “jpe”, “jif”, “jfif”, “jfi”, “png”,“gif”, “bmp”, “dib”
archiveCount integer false none Count of the files that the Glasswall engine recognized as “zip”, “zip64”, “7z”, “bz2”, “gz”, “rar”, “tar”, “xz”
metafilesCount integer false none Count of the files that the Glasswall engine recognized as “emf” or “wmf”
executableCount integer false none Count of the files that the Glasswall engine recognized as “acm”, “ax”, “cpl”, “dll”, “drv”, “mui”, “exe”, “ocx”, “scr”, “sys”, “efi”, “tsp”, “o”, “dylib” “obj”, “elf”, “so”, “axf”, “bin”, “ko”, “mod”, “out”
unrecognizedCount integer false none Count of the files that could not be recognized by the Glasswall engine

ErrorResponseList

[
{
"errorCode": 105,
"errorDescription": "The signed start (se) parameter must be in the future for the source connection string."
}
]

List of errors found during validation

Properties

Name Type Required Restrictions Description
errorCode integer false none Error code from the validation
errorDescription string false none Error description for the error code