cURL JavaScript Node.JS C# Java Go Python Ruby PHP Powershell

Introduction

Verisys Antivirus API provides authorised API consumers with the ability to scan files for malware and NSFW (Not Safe for Work) content. REST API endpoints are provided for performing both synchronous and asynchronous scans.

You can find the OpenAPI Specification for our API here. The spec can be used to auto-generate API clients for many popular programming languages.

 
_  _ ____ ____ _ ____ _   _ ____
|  | |___ |__/ | [__   \_/  [__ 
 \/  |___ |  \ | ___]   |   ___]
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

Endpoints

Multiple base URLs are available, segregated by geographic region. For compliance purposes, data sent to a specific region never leaves that region.

Note that URLs must include the API version, with the latest version currently at v1

Base URL Region
https://gb1.api.av.ionxsolutions.com/v1 UK
https://eu1.api.av.ionxsolutions.com/v1 EU
https://us1.api.av.ionxsolutions.com/v1 USA

Authentication

API keys are used to authenticate requests. When subscribing to Verisys Antivirus API, we create a default API key for you, and you can create amd manage additional API keys at the Verisys Licensing & Support site.

For example, to call the `/v1/ping` test endpoint
curl --header 'X-Api-Key: API_KEY' https://gb1.api.av.ionxsolutions.com/v1/ping
fetch("https://gb1.api.av.ionxsolutions.com/v1/ping", {
  "method": "GET",
  "headers": {
    "X-API-Key": "API_KEY"
  }
});
const http = require("https");

const options = {
  "method": "GET",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "path": "/v1/ping",
  "headers": {
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) { });
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/ping"),
    Headers =
    {
        { "X-API-Key", "API_KEY" },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
}
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/ping")
  .get()
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    url := "https://gb1.api.av.ionxsolutions.com/v1/ping"

    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)
    if err != nil {
      fmt.Println("HTTP call failed:", err)
    }

    defer res.Body.Close()
}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/ping"

response = requests.request("GET", url, headers={
    "X-API-Key": "API_KEY"
})
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/ping")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["X-API-Key"] = 'API_KEY'

response = http.request(request)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/ping",
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
}
$headers=@{}
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/ping' -Method GET -Headers $headers

A valid API key must be sent in an X-API-Key HTTP header with every request.

Rate Limits

To ensure sufficient capacity for all API consumers, we use request rate limiting, on a per-API key basis.

The API returns HTTP code 429 when it receives too many requests, and also returns a Retry-After header, which contains the minimum number of seconds that must be waited before the API can handle another request.

For API requests that are not rate limited, the response includes headers that indicate the current state of your rate limit quota:

Header Value
X-Rate-Limit-Limit Rate limit ceiling that is applicable for the current request, e.g. 1m ("1 minute")
X-Rate-Limit-Remaining Number of requests left for the current rate-limit window, e.g. 9
X-Rate-Limit-Reset The time at which the rate limit resets, specified as an ISO 8601 timestamp

If you are having difficulties with limits, please feel free to contact us.

File Limits

The maximum permitted file sizes are shown below.

Scan Type Scan Method Maximum File Size
Malware Sync 100MB
Malware Async 250MB
NSFW Image Async 8MB
NSFW Image Async 16MB

NSFW Image scanning APIs support the following image formats:

Format Permitted File Extensions
JPEG .jpg, .jpeg
PNG .png
GIF* .gif
WebP .webp

Credits

Each plan comes with a set number of credits, and 1 credit is consumed when you make a request to an API endpoint that requests file scanning:

Every API response includes headers containing information about your remaining credits:

Header Value
X-API-Credit-Limit Total number of credits that were allocated for your current billing cycle, e.g. 10000
X-API-Credit-Remaining Number of credits remaining in your current billing cycle, e.g. 5000

If you need more credits, you can upgrade your plan at any time, or purchase a credit addon that provides additional credits.

Versioning

This API uses versioning. A new API version is released whenever we introduce any backwards-incompatible changes to the API, such as changing a parameter name or type, or deprecating an endpoint. Previous versions will remain functional, but will be considered deprecated, and it is therefore strongly recommended to always use the latest version. When making an API request, the desired version must be used to prefix the endpoint path, for example to call v1 of the ping endpoint: https://gb1.api.av.ionxsolutions.com/v1/ping

Data Retention

Files sent to the API for Malware/NSFW scanning are only kept for the short time it takes to perform the scan, and are then immediately and permanently deleted. Files are not shared with any third parties, and are processed solely for the purposes of the request Malware/NSFW scan.

Validation

API endpoints perform validation on all input. Any request that fails validation will result in an error response with HTTP status code 422. The response body will be a ValidationProblemDetails that contains details of all validation errors.

Validation Errors Example

{
    "type": "https://ionxsolutions.com/schema/rest/model-validation-error",
    "title": "One or more validation errors occurred.",
    "status": 422,
    "traceId": "00-dbb62d1d43e81d9af3952ec39bdec4e0-6aa0ae188e8e1154-01",
    "errors": {
        "file_url": [
            "Invalid format for file_url"
        ],
        "file_name": [
            "file_name must not be empty"
        ]
    }
}

Errors

Verisys Antivirus API uses standard HTTP response codes to indicate the success or failure of an API request. In case of an error, the response body will be a ProblemDetails that contains additional information about the error.

Error Code Meaning
401 Unauthorized; API key may be missing or invalid, or your subscription may have expired. Ensure your API key is passed via the X-Api-Key header
403 Forbidden; insufficient credit quota remaining
404 Not Found; resource not found
422 Unprocessable Content; unable to validate your request, see Validation
429 Too Many Requests; rate limit exceeded, see Rate Limits
500 Server Error; something is wrong at our end. Try again later or contact us: contact us

Webhooks

Verisys Antivirus API provides endpoints for performing both synchronous and asynchronous scans. When performing an asynchronous scan, there are two different means to later obtain the scan result:

  1. Polling: repeatedly calling a Fetch Scan Result endpoint (e.g. /v1/malware/{id}, /v1/nsfw/images/{id}) until the result is available
  2. Callback/webhook: we automatically contact one of your API endpoints when the result is available

If you provided a valid callback URL in your asynchronous scan request, when the scan result is available our system will automatically send a POST request to the specified URL with a ScanResult object as the payload.

Each webhook request will include an X-Api-Signature header, which contains an HMAC-256 signature computed over the payload. You can verify that webhook requests originated from the Verisys Antivirus API by computing the HMAC-256 signature and comparing it to the X-Api-Signature header. Each Verisys Antivirus API account uses a unique webhook secret for the HMAC key, which you can find at the Verisys Licensing & Support site.

Security & Privacy

All data in transit is secured by TLS.

Files submitted for scanning are stored in encrypted format (using AES-256), and are only kept for as long as is required to complete the scan - often as little as 1 second.

Verisys Antivirus API is fully compliant with GDPR. Files submitted to a particular region will never leave that region - your data will never traverse jurisdictions, allowing you to remain compliant.

Content Type Detection

When submitting files for Malware/NSFW scans, we will also detect the actual content type (the real content type can differ from that purported by the file extension) by scanning the file signature. The following content types are currently supported:

File Type Media Type
Microsoft Office Excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Microsoft Office Outlook application/vnd.ms-outlook
Microsoft Office PowerPoint application/vnd.openxmlformats-officedocument.presentationml.presentation
Microsoft Office Visio application/vnd.visio
Microsoft Office Word application/vnd.openxmlformats-officedocument.wordprocessingml.document
Microsoft Office XPS application/vnd.ms-xpsdocument
Microsoft Office Excel (97-2003) application/vnd.ms-excel
Microsoft Office PowerPoint (97-2003) application/vnd.ms-powerpoint
Microsoft Office Visio (97-2003) application/vnd.visio
Microsoft Office Word (97-2003) application/msword
OpenDocument Text application/vnd.oasis.opendocument.text
OpenDocument Presentation application/vnd.oasis.opendocument.presentation
OpenDocument Spreadsheet application/vnd.oasis.opendocument.spreadsheet
Rich Text Document application/rtf
PDF Document application/pdf
Plain Text text/plain
XML application/xml
vCard (VCF) text/vcard
7-Zip Archive application/x-7z-compressed
Bzip2 Archive application/x-bzip2
Microsoft Cabinet Archive application/vnd.ms-cab-compressed
GZIP Archive application/gzip
RAR Archive application/vnd.rar
Tarball Archive application/x-tar
ZIP Archive application/zip
AutoCAD Drawing application/acad
Bitmap Image image/bmp
GIF Image image/gif
JPEG Image image/jpeg
Photoshop Image image/vnd.adobe.photoshop
PNG Image image/png
TIFF Image image/tiff
WebP Image image/webp
Adaptive Multi-Rate Wideband Audio audio/amr
Dolby Digital AC-3 Audio audio/ac3
FLAC Audio audio/flac
MP3 Audio audio/mpeg
Ogg Vorbis Audio audio/ogg
Ogg Opus Audio audio/opus
Waveform Audio audio/wav
ASF Audio video/x-ms-asf
3GPP Video video/3gpp
AVI Video video/x-msvideo
QuickTime Video video/quicktime
MP4 (MPEG-4) Video video/mp4
Matroska (MKV) Video video/x-matroska
ASF Video video/x-ms-asf
DOS Executable application/vnd.microsoft.portable-executable
Windows Executable application/vnd.microsoft.portable-executable
Linux ELF Executable application/x-elf
Linux Shared Library application/x-elf
Linux PIE Executable application/x-elf
Unknown Binary Data application/octet-stream

Malware Scanning

Fetch Scan Result

Code samples
curl --request GET \
  --url https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08 \
  --header 'Accept: application/json' \
  --header 'X-API-Key: API_KEY'
fetch("https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08", {
  "method": "GET",
  "headers": {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "GET",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "headers": {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08"

    req, _ := http.NewRequest("GET", url, nil)

    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08"

headers = {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/malware/497f6eca-6276-4993-bfeb-53cbbbba6f08' -Method GET -Headers $headers
GET /v1/malware/{id}

Fetch the result of a previously submitted malware scan job

Parameters

Name In Type Required Description
id path string(uuid) true Identifier of the malware scan job to fetch results for

Example responses

200 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "scan_type": "malware",
  "status": "pending",
  "content_length": 0,
  "content_type": "string",
  "signals": [
    "string"
  ],
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "created_at": "2019-08-24T14:15:22Z",
  "completed_at": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
200 OK Returns the result of a previously submitted malware scan job ScanResult
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Scan File

Code samples
curl --request POST \
  --url https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file \
  --header 'Accept: application/json' \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --header 'X-API-Key: API_KEY' \
  --form file=string \
  --form file_name=my-file.docx
const form = new FormData();
form.append("file", "string");
form.append("file_name", "my-file.docx");

fetch("https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file", {
  "method": "POST",
  "headers": {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "POST",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/malware/scan/file",
  "headers": {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n");
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
    Content = new MultipartFormDataContent
    {
        new StreamContent(File.OpenRead("my-file.docx"))
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "file",
                }
            }
        },
        new StringContent("my-file.docx")
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "file_name",
                }
            }
        },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001");
RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n");
Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file")
  .post(body)
  .addHeader("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file"

    payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file"

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n"
headers = {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: multipart/form-data; boundary=---011000010111000001101001",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/malware/scan/file' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001
Content-Disposition: form-data; name="file"

string
-----011000010111000001101001
Content-Disposition: form-data; name="file_name"

my-file.docx
-----011000010111000001101001--
'
POST /v1/malware/scan/file

Scans a file for malware

Body parameters
file: binary
file_name: my-file.docx

Parameters

Name In Type Required Description
body body object false none
» file body string(binary) false none
» file_name body string false none

Example responses

201 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "scan_type": "malware",
  "status": "pending",
  "content_length": 0,
  "content_type": "string",
  "signals": [
    "string"
  ],
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "created_at": "2019-08-24T14:15:22Z",
  "completed_at": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
201 Created File has been scanned ScanResult
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Scan URL

Code samples
curl --request POST \
  --url https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: API_KEY' \
  --data '{"file_url":"https://www.example.com/my-file","file_name":"my-file.docx"}'
fetch("https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url", {
  "method": "POST",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  },
  "body": "{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "POST",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/malware/scan/url",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(JSON.stringify({file_url: 'https://www.example.com/my-file', file_name: 'my-file.docx'}));
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
    Content = new StringContent("{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}")
    {
        Headers =
        {
            ContentType = new MediaTypeHeaderValue("application/json")
        }
    }
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}");
Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url"

    payload := strings.NewReader("{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url"

payload = {
    "file_url": "https://www.example.com/my-file",
    "file_name": "my-file.docx"
}
headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'
request.body = "{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}"

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: application/json",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/malware/scan/url' -Method POST -Headers $headers -ContentType 'application/json' -Body '{"file_url":"https://www.example.com/my-file","file_name":"my-file.docx"}'
POST /v1/malware/scan/url

Downloads and scans a file for malware

Body parameters
{
  "file_url": "https://www.example.com/my-file",
  "file_name": "my-file.docx"
}

Parameters

Name In Type Required Description
body body ScanUrlCommand false none

Example responses

201 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "scan_type": "malware",
  "status": "pending",
  "content_length": 0,
  "content_type": "string",
  "signals": [
    "string"
  ],
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "created_at": "2019-08-24T14:15:22Z",
  "completed_at": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
201 Created File has been scanned ScanResult
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Submit File

Code samples
curl --request POST \
  --url https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file \
  --header 'Accept: application/json' \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --header 'X-API-Key: API_KEY' \
  --form file=string \
  --form file_name=my-file.docx \
  --form callback_url=https://www.example.com/webhook
const form = new FormData();
form.append("file", "string");
form.append("file_name", "my-file.docx");
form.append("callback_url", "https://www.example.com/webhook");

fetch("https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file", {
  "method": "POST",
  "headers": {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "POST",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/malware/submit/file",
  "headers": {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n");
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
    Content = new MultipartFormDataContent
    {
        new StreamContent(File.OpenRead("my-file.docx"))
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "file",
                }
            }
        },
        new StringContent("my-file.docx")
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "file_name",
                }
            }
        },
        new StringContent("https://www.example.com/webhook")
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "callback_url",
                }
            }
        },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001");
RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n");
Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file")
  .post(body)
  .addHeader("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file"

    payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file"

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n"
headers = {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: multipart/form-data; boundary=---011000010111000001101001",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/malware/submit/file' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001
Content-Disposition: form-data; name="file"

string
-----011000010111000001101001
Content-Disposition: form-data; name="file_name"

my-file.docx
-----011000010111000001101001
Content-Disposition: form-data; name="callback_url"

https://www.example.com/webhook
-----011000010111000001101001--
'
POST /v1/malware/submit/file

Submits a file for asynchronous malware scanning.

The result can be obtained at a later date by calling: GET /v1/malware/{id}

Alternatively, if a webhook callback URL is provided, the result will be sent automatically when ready.

Body parameters
file: binary
file_name: my-file.docx
callback_url: https://www.example.com/webhook

Parameters

Name In Type Required Description
body body object false none
» file body string(binary) false none
» file_name body string false none
» callback_url body string false none

Example responses

202 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}

Responses

Status Meaning Description Schema
201 Created Scan job submitted None
202 Accepted Accepted ScanReceipt
401 Unauthorized Invalid API key ProblemDetails
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Response Headers

Status Header Type Format Description
202 X-API-Result string Identifier of the newly created malware scan job

Submit URL

Code samples
curl --request POST \
  --url https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: API_KEY' \
  --data '{"file_name":"my-file.docx","file_url":"https://www.example.com/my-file","callback_url":"https://www.example.com/webhook"}'
fetch("https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url", {
  "method": "POST",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  },
  "body": "{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "POST",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/malware/submit/url",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(JSON.stringify({
  file_name: 'my-file.docx',
  file_url: 'https://www.example.com/my-file',
  callback_url: 'https://www.example.com/webhook'
}));
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
    Content = new StringContent("{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}")
    {
        Headers =
        {
            ContentType = new MediaTypeHeaderValue("application/json")
        }
    }
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}");
Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url"

    payload := strings.NewReader("{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url"

payload = {
    "file_name": "my-file.docx",
    "file_url": "https://www.example.com/my-file",
    "callback_url": "https://www.example.com/webhook"
}
headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'
request.body = "{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}"

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: application/json",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/malware/submit/url' -Method POST -Headers $headers -ContentType 'application/json' -Body '{"file_name":"my-file.docx","file_url":"https://www.example.com/my-file","callback_url":"https://www.example.com/webhook"}'
POST /v1/malware/submit/url

Submits a URL for asynchronous malware scanning.

The result can be obtained at a later date by calling: GET /v1/malware/{id}

Alternatively, if a webhook callback URL is provided, the result will be sent automatically when ready

Body parameters
{
  "file_name": "my-file.docx",
  "file_url": "https://www.example.com/my-file",
  "callback_url": "https://www.example.com/webhook"
}

Parameters

Name In Type Required Description
body body SubmitUrlCommand false none

Example responses

202 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}

Responses

Status Meaning Description Schema
201 Created Scan job submitted None
202 Accepted Accepted ScanReceipt
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Response Headers

Status Header Type Format Description
202 X-API-Result string Identifier of the newly created malware scan job

NSFW Image Scanning

Fetch Scan Result

Code samples
curl --request GET \
  --url https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08 \
  --header 'Accept: application/json' \
  --header 'X-API-Key: API_KEY'
fetch("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08", {
  "method": "GET",
  "headers": {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "GET",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "headers": {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08"

    req, _ := http.NewRequest("GET", url, nil)

    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08"

headers = {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/497f6eca-6276-4993-bfeb-53cbbbba6f08' -Method GET -Headers $headers
GET /v1/nsfw/images/{id}

Fetch the result of a previously submitted NSFW (Not Safe for Work) image scan job

Parameters

Name In Type Required Description
id path string(uuid) true Identifier of the NSFW image scan job to fetch results for

Example responses

200 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "scan_type": "malware",
  "status": "pending",
  "content_length": 0,
  "content_type": "string",
  "signals": [
    "string"
  ],
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "created_at": "2019-08-24T14:15:22Z",
  "completed_at": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
200 OK Returns the result of a previously submitted NSFW image scan job ScanResult
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Scan File

Code samples
curl --request POST \
  --url https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file \
  --header 'Accept: application/json' \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --header 'X-API-Key: API_KEY' \
  --form file=string \
  --form file_name=my-file.docx
const form = new FormData();
form.append("file", "string");
form.append("file_name", "my-file.docx");

fetch("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file", {
  "method": "POST",
  "headers": {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "POST",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/nsfw/images/scan/file",
  "headers": {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n");
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
    Content = new MultipartFormDataContent
    {
        new StreamContent(File.OpenRead("my-file.docx"))
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "file",
                }
            }
        },
        new StringContent("my-file.docx")
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "file_name",
                }
            }
        },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001");
RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n");
Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file")
  .post(body)
  .addHeader("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file"

    payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file"

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n"
headers = {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001--\r\n",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: multipart/form-data; boundary=---011000010111000001101001",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/file' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001
Content-Disposition: form-data; name="file"

string
-----011000010111000001101001
Content-Disposition: form-data; name="file_name"

my-file.docx
-----011000010111000001101001--
'
POST /v1/nsfw/images/scan/file

Scans an image file for NSFW (Not Safe for Work) content

Body parameters
file: binary
file_name: my-file.docx

Parameters

Name In Type Required Description
body body object false none
» file body string(binary) false none
» file_name body string false none

Example responses

201 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "scan_type": "malware",
  "status": "pending",
  "content_length": 0,
  "content_type": "string",
  "signals": [
    "string"
  ],
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "created_at": "2019-08-24T14:15:22Z",
  "completed_at": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
201 Created Image file has been scanned ScanResult
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Scan URL

Code samples
curl --request POST \
  --url https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: API_KEY' \
  --data '{"file_url":"https://www.example.com/my-file","file_name":"my-file.docx"}'
fetch("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url", {
  "method": "POST",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  },
  "body": "{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "POST",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/nsfw/images/scan/url",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(JSON.stringify({file_url: 'https://www.example.com/my-file', file_name: 'my-file.docx'}));
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
    Content = new StringContent("{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}")
    {
        Headers =
        {
            ContentType = new MediaTypeHeaderValue("application/json")
        }
    }
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}");
Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url"

    payload := strings.NewReader("{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url"

payload = {
    "file_url": "https://www.example.com/my-file",
    "file_name": "my-file.docx"
}
headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'
request.body = "{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}"

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"file_url\":\"https://www.example.com/my-file\",\"file_name\":\"my-file.docx\"}",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: application/json",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/scan/url' -Method POST -Headers $headers -ContentType 'application/json' -Body '{"file_url":"https://www.example.com/my-file","file_name":"my-file.docx"}'
POST /v1/nsfw/images/scan/url

Downloads and scans an image file for NSFW (Not Safe for Work) content

Body parameters
{
  "file_url": "https://www.example.com/my-file",
  "file_name": "my-file.docx"
}

Parameters

Name In Type Required Description
body body ScanUrlCommand false none

Example responses

201 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "scan_type": "malware",
  "status": "pending",
  "content_length": 0,
  "content_type": "string",
  "signals": [
    "string"
  ],
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "created_at": "2019-08-24T14:15:22Z",
  "completed_at": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
201 Created Image file has been scanned ScanResult
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Submit File

Code samples
curl --request POST \
  --url https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file \
  --header 'Accept: application/json' \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --header 'X-API-Key: API_KEY' \
  --form file=string \
  --form file_name=my-file.docx \
  --form callback_url=https://www.example.com/webhook
const form = new FormData();
form.append("file", "string");
form.append("file_name", "my-file.docx");
form.append("callback_url", "https://www.example.com/webhook");

fetch("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file", {
  "method": "POST",
  "headers": {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "POST",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/nsfw/images/submit/file",
  "headers": {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n");
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
    Content = new MultipartFormDataContent
    {
        new StreamContent(File.OpenRead("my-file.docx"))
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "file",
                }
            }
        },
        new StringContent("my-file.docx")
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "file_name",
                }
            }
        },
        new StringContent("https://www.example.com/webhook")
        {
            Headers =
            {
                ContentDisposition = new ContentDispositionHeaderValue("form-data")
                {
                    Name = "callback_url",
                }
            }
        },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001");
RequestBody body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n");
Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file")
  .post(body)
  .addHeader("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file"

    payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file"

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n"
headers = {
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_name\"\r\n\r\nmy-file.docx\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"callback_url\"\r\n\r\nhttps://www.example.com/webhook\r\n-----011000010111000001101001--\r\n",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: multipart/form-data; boundary=---011000010111000001101001",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/file' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001
Content-Disposition: form-data; name="file"

string
-----011000010111000001101001
Content-Disposition: form-data; name="file_name"

my-file.docx
-----011000010111000001101001
Content-Disposition: form-data; name="callback_url"

https://www.example.com/webhook
-----011000010111000001101001--
'
POST /v1/nsfw/images/submit/file

Submits a file for asynchronous NSFW image scanning.

The result can be obtained at a later date by calling GET /v1/nsfw/images/{id}

Alternatively, if a webhook callback URL is provided, the result will be sent automatically when ready.

Body parameters
file: binary
file_name: my-file.docx
callback_url: https://www.example.com/webhook

Parameters

Name In Type Required Description
body body object false none
» file body string(binary) false none
» file_name body string false none
» callback_url body string false none

Example responses

202 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}

Responses

Status Meaning Description Schema
201 Created Scan job submitted None
202 Accepted Accepted ScanReceipt
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Response Headers

Status Header Type Format Description
202 X-API-Result string Identifier of the submitted NSFW scan job

Submit URL

Code samples
curl --request POST \
  --url https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: API_KEY' \
  --data '{"file_name":"my-file.docx","file_url":"https://www.example.com/my-file","callback_url":"https://www.example.com/webhook"}'
fetch("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url", {
  "method": "POST",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  },
  "body": "{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "POST",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/nsfw/images/submit/url",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(JSON.stringify({
  file_name: 'my-file.docx',
  file_url: 'https://www.example.com/my-file',
  callback_url: 'https://www.example.com/webhook'
}));
req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
    Content = new StringContent("{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}")
    {
        Headers =
        {
            ContentType = new MediaTypeHeaderValue("application/json")
        }
    }
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}");
Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url"

    payload := strings.NewReader("{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}")

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url"

payload = {
    "file_name": "my-file.docx",
    "file_url": "https://www.example.com/my-file",
    "callback_url": "https://www.example.com/webhook"
}
headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'
request.body = "{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}"

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"file_name\":\"my-file.docx\",\"file_url\":\"https://www.example.com/my-file\",\"callback_url\":\"https://www.example.com/webhook\"}",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Content-Type: application/json",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/nsfw/images/submit/url' -Method POST -Headers $headers -ContentType 'application/json' -Body '{"file_name":"my-file.docx","file_url":"https://www.example.com/my-file","callback_url":"https://www.example.com/webhook"}'
POST /v1/nsfw/images/submit/url

Submits a URL for asynchronous NSFW image scanning.

The result can be obtained at a later date by calling GET /v1/nsfw/images/{id}

Alternatively, if a webhook callback URL is provided, the result will be sent automatically when ready.

Body parameters
{
  "file_name": "my-file.docx",
  "file_url": "https://www.example.com/my-file",
  "callback_url": "https://www.example.com/webhook"
}

Parameters

Name In Type Required Description
body body SubmitUrlCommand false none

Example responses

202 Response

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}

Responses

Status Meaning Description Schema
201 Created Scan job submitted None
202 Accepted Accepted ScanReceipt
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
422 Unprocessable Entity Validation errors ValidationProblemDetails
500 Internal Server Error Internal Server Error ProblemDetails

Response Headers

Status Header Type Format Description
202 X-API-Result string Identifier of the submitted NSFW scan job

General

Fetch Account Info

Code samples
curl --request GET \
  --url https://gb1.api.av.ionxsolutions.com/v1/me \
  --header 'Accept: application/json' \
  --header 'X-API-Key: API_KEY'
fetch("https://gb1.api.av.ionxsolutions.com/v1/me", {
  "method": "GET",
  "headers": {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "GET",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/me",
  "headers": {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/me"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/me")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/me"

    req, _ := http.NewRequest("GET", url, nil)

    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/me"

headers = {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/me")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/me",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/me' -Method GET -Headers $headers
GET /v1/me

Fetch information about your account, including the number of credits remaining

Example responses

200 Response

{
  "plan": "string",
  "credit_limit": 0,
  "credit_remaining": 0,
  "created_date": "2019-08-24T14:15:22Z",
  "period_start_date": "2019-08-24T14:15:22Z",
  "period_end_date": "2019-08-24T14:15:22Z"
}

Responses

Status Meaning Description Schema
200 OK Returns account information Account
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
500 Internal Server Error Internal Server Error ProblemDetails

Test Endpoint

Code samples
curl --request GET \
  --url https://gb1.api.av.ionxsolutions.com/v1/ping \
  --header 'Accept: application/json' \
  --header 'X-API-Key: API_KEY'
fetch("https://gb1.api.av.ionxsolutions.com/v1/ping", {
  "method": "GET",
  "headers": {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
const http = require("https");

const options = {
  "method": "GET",
  "hostname": "gb1.api.av.ionxsolutions.com",
  "port": null,
  "path": "/v1/ping",
  "headers": {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
  }
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://gb1.api.av.ionxsolutions.com/v1/ping"),
    Headers =
    {
        { "Accept", "application/json" },
        { "X-API-Key", "API_KEY" },
    },
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://gb1.api.av.ionxsolutions.com/v1/ping")
  .get()
  .addHeader("Accept", "application/json")
  .addHeader("X-API-Key", "API_KEY")
  .build();

Response response = client.newCall(request).execute();
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://gb1.api.av.ionxsolutions.com/v1/ping"

    req, _ := http.NewRequest("GET", url, nil)

    req.Header.Add("Accept", "application/json")
    req.Header.Add("X-API-Key", "API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}
import requests

url = "https://gb1.api.av.ionxsolutions.com/v1/ping"

headers = {
    "Accept": "application/json",
    "X-API-Key": "API_KEY"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://gb1.api.av.ionxsolutions.com/v1/ping")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Accept"] = 'application/json'
request["X-API-Key"] = 'API_KEY'

response = http.request(request)
puts response.read_body
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gb1.api.av.ionxsolutions.com/v1/ping",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "X-API-Key: API_KEY"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
$headers=@{}
$headers.Add("Accept", "application/json")
$headers.Add("X-API-Key", "API_KEY")
$response = Invoke-WebRequest -Uri 'https://gb1.api.av.ionxsolutions.com/v1/ping' -Method GET -Headers $headers
GET /v1/ping

Can be used to test API connectivity and authentication

Example responses

401 Response

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}

Responses

Status Meaning Description Schema
200 OK Returns an empty body None
401 Unauthorized Invalid API key ProblemDetails
403 Forbidden Insufficient credit quota remaining None
500 Internal Server Error Internal Server Error ProblemDetails

Schemas

Account

{
  "plan": "string",
  "credit_limit": 0,
  "credit_remaining": 0,
  "created_date": "2019-08-24T14:15:22Z",
  "period_start_date": "2019-08-24T14:15:22Z",
  "period_end_date": "2019-08-24T14:15:22Z"
}

Properties

Name Type Required Description
plan string true none
credit_limit integer(int32) true none
credit_remaining integer(int32) true none
created_date string(date-time) true none
period_start_date string(date-time) true none
period_end_date string(date-time) true none

JobType

"malware"

Enumerated Values

Value
malware
nsfw_image
nsfw_text

ProblemDetails

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}

Properties

Name Type Required Description
additionalProperties any false none
type string¦null false none
title string¦null false none
status integer(int32)¦null false none
detail string¦null false none
instance string¦null false none

ScanReceipt

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}

Properties

Name Type Required Description
id string(uuid) true none

ScanResult

{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "scan_type": "malware",
  "status": "pending",
  "content_length": 0,
  "content_type": "string",
  "signals": [
    "string"
  ],
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "created_at": "2019-08-24T14:15:22Z",
  "completed_at": "2019-08-24T14:15:22Z"
}

Properties

Name Type Required Description
id string(uuid) true none
scan_type JobType true none
status ScanResultType true none
content_length integer(int64) true Size of the scanned content, in bytes
content_type string true The detected media type, determined by inspecting file content, e.g. application/gzip
signals [string]¦null false none
metadata object¦null false Content metadata, including SHA-1 and SHA-256 hashes
» additionalProperties string false none
created_at string(date-time) true Time when the Job was first submitted
completed_at string(date-time)¦null false Time when the Job was completed (whether it resulted in an error or not)

ScanResultType

"pending"

Enumerated Values

Value
pending
clean
threat
error

ScanUrlCommand

{
  "file_url": "https://www.example.com/my-file",
  "file_name": "my-file.docx"
}

Properties

Name Type Required Description
file_url string true none
file_name string¦null false none

SubmitUrlCommand

{
  "file_name": "my-file.docx",
  "file_url": "https://www.example.com/my-file",
  "callback_url": "https://www.example.com/webhook"
}

Properties

Name Type Required Description
file_name string true none
file_url string true none
callback_url string¦null false none

ValidationProblemDetails

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "errors": {
    "property1": [
      "string"
    ],
    "property2": [
      "string"
    ]
  },
  "property1": null,
  "property2": null
}

Properties

Name Type Required Description
additionalProperties any false none
type string¦null false none
title string¦null false none
status integer(int32)¦null false none
detail string¦null false none
instance string¦null false none
errors object false none
» additionalProperties [string] false none