Submit File
Submits a file for asynchronous malware scanning.
The result can be obtained later by calling GET /v1/malware/{id}
. Alternatively, if a webhook callback URL is provided, the result will be sent automatically when ready.
Request parameters
# Callback URL is optional
curl https://eu1.api.av.ionxsolutions.com/v1/malware/submit/file \
--header 'X-API-Key: YOUR_API_KEY' \
--form file=@/path/to/a/file.docx \
--form callback_url=https://www.example.com
const axios = require('axios');
const fs = require('fs');
const FormData = require('form-data');
const api = axios.create({
baseURL: 'https://eu1.api.av.ionxsolutions.com/v1/'
});
const formData = new FormData();
formData.append('file', fs.createReadStream('/path/to/a/file.docx'), 'file.docx');
// Callback URL is optional
formData.append('callback_url', 'https://www.example.com');
api.post('malware/submit/file', formData, {
headers: {
...formData.getHeaders(),
'X-API-Key': 'YOUR_API_KEY'
}
}).then(res => {
console.log('response', res.data);
}).catch(err => {
console.log('error', err);
});
using var client = new HttpClient();
client.BaseAddress = new Uri("https://eu1.api.av.ionxsolutions.com/v1/");
client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");
using var file = File.OpenRead("/path/to/a/file.docx");
using var formData = new MultipartFormDataContent();
formData.Add(new StreamContent(file), "file", file.Name);
// Optional callback URL
formData.Add(new StringContent("https://www.example.com"), "callback_url");
using var response = await client.PostAsync("malware/submit/file", formData);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import okhttp3.Request;
import okhttp3.Response;
import java.io.File;
import java.io.IOException;
String apiKey = "YOUR_API_KEY";
String url = "https://eu1.api.av.ionxsolutions.com/v1/malware/submit/file";
String filePath = "/path/to/a/file.docx";
OkHttpClient client = new OkHttpClient();
File file = new File(filePath);
MediaType mediaType = MediaType.parse("application/octet-stream");
RequestBody fileBody = RequestBody.create(file, mediaType);
// Callback URL is optional
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", "file.docx", fileBody)
.addFormDataPart("callback_url", "https://www.example.com")
.build();
Request request = new Request.Builder()
.url(url)
.addHeader("X-API-Key", apiKey)
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.err.println("Request failed. Status code: " + response.code());
System.err.println("Response message: " + response.message());
System.err.println(response.body().string());
}
import requests
url = 'https://eu1.api.av.ionxsolutions.com/v1/malware/submit/file'
headers = {
'X-API-Key': 'YOUR_API_KEY'
}
files = {
'file': ('file.docx', open('/path/to/a/file.docx', 'rb'))
}
# Callback URL is optional
data = {
'callback_url': 'https://www.example.com'
}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.text)
package main
import (
"bytes"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
apiKey := "YOUR_API_KEY"
url := "https://eu1.api.av.ionxsolutions.com/v1/malware/submit/file"
var buffer bytes.Buffer
writer := multipart.NewWriter(&buffer)
file, err := os.Open("/path/to/a/file.docx")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
fileWriter, _ := writer.CreateFormFile("file", "file.docx")
io.Copy(fileWriter, file)
// Callback URL is optional
_ = writer.WriteField("callback_url", "https://www.example.com")
writer.Close()
req, _ := http.NewRequest("POST", url, &buffer)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", apiKey)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
if resp.StatusCode == 202 {
var respBuffer bytes.Buffer
io.Copy(&respBuffer, resp.Body)
fmt.Println(respBuffer.String())
} else {
fmt.Printf("Request failed. Status code: %d\n", resp.StatusCode)
}
}
require 'net/http'
require 'uri'
url = URI.parse('https://eu1.api.av.ionxsolutions.com/v1/malware/submit/file')
file_path = '/path/to/a/file.docx'
request = Net::HTTP::Post.new(url)
request['X-API-Key'] = 'YOUR_API_KEY'
# Callback URL is optional
request.set_form([
['file', File.open(file_path)],
['callback_url', 'https://www.example.com']
], 'multipart/form-data')
response = Net::HTTP.start(url.hostname, url.port, use_ssl: true) do |http|
http.request(request)
end
puts response.body
<?php
$url = 'https://eu1.api.av.ionxsolutions.com/v1/malware/submit/file';
$api_key = 'YOUR_API_KEY';
$file_path = '/path/to/a/file.docx';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// Callback URL is optional
$form = [
'file' => new \CurlFile($file_path, 'application/octet-stream', 'file.docx'),
'callback_url' => 'https://www.example.com'
];
curl_setopt($curl, CURLOPT_POSTFIELDS, $form);
$headers = array();
$headers[] = 'Content-Type: multipart/form-data';
$headers[] = 'X-API-Key: '.$api_key;
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($curl);
if ($result === false) {
curl_close($curl);
die('Curl error: '.curl_error($curl).'('.curl_errno($curl).')');
}
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($http_code != 202) {
die('HTTP error: Status code '.$http_code);
}
echo $result;
$Uri = "https://eu1.api.av.ionxsolutions.com/v1/malware/submit/file"
$Headers = @{
"X-API-Key" = "YOUR_API_KEY"
};
# Callback URL is optional
$Form = @{
file = Get-Item -Path "/path/to/a/file.docx"
callback_url = "https://www.example.com"
}
$Result = Invoke-RestMethod -Uri $Uri -Method Post -Headers $Headers -Form $Form
Write-Host ($Result | ConvertTo-Json)
Responses
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.6.1",
"title": "Internal Server Error",
"status": 500,
"detail": "Something went wrong",
"traceId": "00-17d017df2498eac9e698f1a06747a161-c9d4f32199479052-01"
}
{
"id": "5a53b6f5-871a-495a-8972-b8d0dcb80844"
}
{
"type": "https://datatracker.ietf.org/doc/html/rfc7807#section-15.5.21",
"title": "One or more validation errors occurred.",
"status": 422,
"instance": "/v1/malware/submit/file",
"errors": {
"file_name": [
"Invalid filename - too long"
]
},
"traceId": "00-f4ee9395de696115b3b8af12e193c3d0-3b2749428bed3231-01"
}
Last modified: 08 November 2024