curl --request POST \
--url https://backend.identifai.net/api/validate \
--header 'Content-Type: multipart/form-data' \
--header 'X-Api-Key: <api-key>' \
--form file=@example-file \
--form with_morphing=true \
--form with_tampering=true \
--form with_heatmap=true \
--form with_nsfw=true \
--form with_audio=trueimport requests
url = "https://backend.identifai.net/api/validate"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"with_morphing": "true",
"with_tampering": "true",
"with_heatmap": "true",
"with_nsfw": "true",
"with_audio": "true"
}
headers = {"X-Api-Key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('with_morphing', 'true');
form.append('with_tampering', 'true');
form.append('with_heatmap', 'true');
form.append('with_nsfw', 'true');
form.append('with_audio', 'true');
const options = {method: 'POST', headers: {'X-Api-Key': '<api-key>'}};
options.body = form;
fetch('https://backend.identifai.net/api/validate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://backend.identifai.net/api/validate",
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\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_morphing\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_tampering\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_heatmap\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_nsfw\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_audio\"\r\n\r\ntrue\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://backend.identifai.net/api/validate"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_morphing\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_tampering\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_heatmap\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_nsfw\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_audio\"\r\n\r\ntrue\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://backend.identifai.net/api/validate")
.header("X-Api-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_morphing\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_tampering\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_heatmap\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_nsfw\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_audio\"\r\n\r\ntrue\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://backend.identifai.net/api/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_morphing\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_tampering\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_heatmap\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_nsfw\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_audio\"\r\n\r\ntrue\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"valid": true,
"filesize": 1048576,
"mimetype": "image/jpeg",
"width": 1920,
"height": 1080,
"models": [
"image_model_a",
"image_model_b"
]
}Validate a media file
Check whether an image, a video or an audio file can be analyzed, without submitting it for classification: the file is not stored, no classification is started and no credits are consumed.
The file is checked against the requirements of the models that would analyze it. These models are resolved exactly as in the classification endpoints, from your pricing plan and from the options sent with the request: to get a meaningful result, send the same options (e.g. with_morphing, with_heatmap, with_audio) you are going to use for the actual submission.
The checks performed are:
- File type and size: the same formats and limits of the corresponding classification endpoint (image, video, audio).
- Minimum resolution (image and video): the short side of the media must satisfy the minimum size required by every selected model.
- Minimum video resolution (video only): the video height must satisfy the minimum resolution supported by the platform (e.g. 720p).
The outcome is always reported in the valid field of the response: true with status 200 when the media can be analyzed, false with status 422 or 413 when it cannot, together with a detail explaining the reason.
curl --request POST \
--url https://backend.identifai.net/api/validate \
--header 'Content-Type: multipart/form-data' \
--header 'X-Api-Key: <api-key>' \
--form file=@example-file \
--form with_morphing=true \
--form with_tampering=true \
--form with_heatmap=true \
--form with_nsfw=true \
--form with_audio=trueimport requests
url = "https://backend.identifai.net/api/validate"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"with_morphing": "true",
"with_tampering": "true",
"with_heatmap": "true",
"with_nsfw": "true",
"with_audio": "true"
}
headers = {"X-Api-Key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('with_morphing', 'true');
form.append('with_tampering', 'true');
form.append('with_heatmap', 'true');
form.append('with_nsfw', 'true');
form.append('with_audio', 'true');
const options = {method: 'POST', headers: {'X-Api-Key': '<api-key>'}};
options.body = form;
fetch('https://backend.identifai.net/api/validate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://backend.identifai.net/api/validate",
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\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_morphing\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_tampering\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_heatmap\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_nsfw\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_audio\"\r\n\r\ntrue\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://backend.identifai.net/api/validate"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_morphing\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_tampering\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_heatmap\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_nsfw\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_audio\"\r\n\r\ntrue\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://backend.identifai.net/api/validate")
.header("X-Api-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_morphing\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_tampering\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_heatmap\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_nsfw\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_audio\"\r\n\r\ntrue\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://backend.identifai.net/api/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_morphing\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_tampering\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_heatmap\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_nsfw\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_audio\"\r\n\r\ntrue\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"valid": true,
"filesize": 1048576,
"mimetype": "image/jpeg",
"width": 1920,
"height": 1080,
"models": [
"image_model_a",
"image_model_b"
]
}Authorizations
Your API key.
Body
The kind of media to validate. Video and audio validation require the same enablement of the corresponding classification endpoints.
image, video, audio Image and video only. Set it to true to validate the file also against the models used to analyze people's faces (morphing).
Image and video only. Set it to true to validate the file also against the models used to analyze signs of tampering or manipulation.
Image only. Set it to true to validate the file also against the models used to produce the AI content heatmap.
Image and video only. Set it to true to validate the file also against the models used for NSFW (Not Safe For Work) content detection.
[BETA] Video only. Set it to true to validate the file also against the models used to analyze the audio track of the video. You must be enabled in your pricing plan to use it, otherwise the parameter is ignored.
Response
The media is valid and can be submitted for classification with the given options.
Always true for a successful validation: the media can be submitted for classification with the given options.
Size of the validated file, in bytes.
MIME type detected from the file content (e.g. image/jpeg, video/mp4, audio/mpeg).
Identifiers of the models the media has been validated against, resolved from your pricing plan and the selected options.
Width of the media in pixels. null for audio files.
Height of the media in pixels. null for audio files.