curl --request POST \
--url https://api.identifai.net/api/v2/tampering/tickets \
--header 'Content-Type: multipart/form-data' \
--header 'X-Api-Key: <api-key>' \
--form 'tickets=<string>' \
--form 'ref_ids=Ticket-1, Ticket-2, Ticket-3' \
--form 'models=Model-1, Model-2, Model-3' \
--form tickets.items='@example-file'import requests
url = "https://api.identifai.net/api/v2/tampering/tickets"
files = { "tickets.items": ("example-file", open("example-file", "rb")) }
payload = {
"tickets": "<string>",
"ref_ids": "Ticket-1, Ticket-2, Ticket-3",
"models": "Model-1, Model-2, Model-3"
}
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('tickets', '<string>');
form.append('ref_ids', 'Ticket-1, Ticket-2, Ticket-3');
form.append('models', 'Model-1, Model-2, Model-3');
form.append('tickets.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'X-Api-Key': '<api-key>'}};
options.body = form;
fetch('https://api.identifai.net/api/v2/tampering/tickets', 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://api.identifai.net/api/v2/tampering/tickets",
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=\"tickets\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_ids\"\r\n\r\nTicket-1, Ticket-2, Ticket-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"models\"\r\n\r\nModel-1, Model-2, Model-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\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://api.identifai.net/api/v2/tampering/tickets"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_ids\"\r\n\r\nTicket-1, Ticket-2, Ticket-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"models\"\r\n\r\nModel-1, Model-2, Model-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\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://api.identifai.net/api/v2/tampering/tickets")
.header("X-Api-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_ids\"\r\n\r\nTicket-1, Ticket-2, Ticket-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"models\"\r\n\r\nModel-1, Model-2, Model-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.identifai.net/api/v2/tampering/tickets")
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=\"tickets\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_ids\"\r\n\r\nTicket-1, Ticket-2, Ticket-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"models\"\r\n\r\nModel-1, Model-2, Model-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"batch_id": "674a3c9b8e2d4f12b7c9a8d3",
"total_tickets": 3,
"submissions": [
{
"identifier": "674a3c9b8e2d4f12b7c9a8d4",
"ref_id": "Ticket-001"
},
{
"identifier": "674a3c9b8e2d4f12b7c9a8d5",
"ref_id": "Ticket-002"
},
{
"identifier": "674a3c9b8e2d4f12b7c9a8d6",
"ref_id": "Ticket-003"
}
]
}{
"error": "Invalid request",
"message": "The number of ref_ids must match the number of tickets"
}{
"error": "Unauthorized",
"message": "Invalid or missing API key"
}{
"error": "Payload too large",
"message": "Maximum batch size is 10 tickets"
}Submit tickets for analysis
Submit a batch of ticket images for tampering detection. Each ticket can have an external ID that will be returned in the response for easier tracking.
curl --request POST \
--url https://api.identifai.net/api/v2/tampering/tickets \
--header 'Content-Type: multipart/form-data' \
--header 'X-Api-Key: <api-key>' \
--form 'tickets=<string>' \
--form 'ref_ids=Ticket-1, Ticket-2, Ticket-3' \
--form 'models=Model-1, Model-2, Model-3' \
--form tickets.items='@example-file'import requests
url = "https://api.identifai.net/api/v2/tampering/tickets"
files = { "tickets.items": ("example-file", open("example-file", "rb")) }
payload = {
"tickets": "<string>",
"ref_ids": "Ticket-1, Ticket-2, Ticket-3",
"models": "Model-1, Model-2, Model-3"
}
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('tickets', '<string>');
form.append('ref_ids', 'Ticket-1, Ticket-2, Ticket-3');
form.append('models', 'Model-1, Model-2, Model-3');
form.append('tickets.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'X-Api-Key': '<api-key>'}};
options.body = form;
fetch('https://api.identifai.net/api/v2/tampering/tickets', 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://api.identifai.net/api/v2/tampering/tickets",
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=\"tickets\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_ids\"\r\n\r\nTicket-1, Ticket-2, Ticket-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"models\"\r\n\r\nModel-1, Model-2, Model-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\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://api.identifai.net/api/v2/tampering/tickets"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_ids\"\r\n\r\nTicket-1, Ticket-2, Ticket-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"models\"\r\n\r\nModel-1, Model-2, Model-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\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://api.identifai.net/api/v2/tampering/tickets")
.header("X-Api-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_ids\"\r\n\r\nTicket-1, Ticket-2, Ticket-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"models\"\r\n\r\nModel-1, Model-2, Model-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.identifai.net/api/v2/tampering/tickets")
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=\"tickets\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"ref_ids\"\r\n\r\nTicket-1, Ticket-2, Ticket-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"models\"\r\n\r\nModel-1, Model-2, Model-3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"tickets.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"batch_id": "674a3c9b8e2d4f12b7c9a8d3",
"total_tickets": 3,
"submissions": [
{
"identifier": "674a3c9b8e2d4f12b7c9a8d4",
"ref_id": "Ticket-001"
},
{
"identifier": "674a3c9b8e2d4f12b7c9a8d5",
"ref_id": "Ticket-002"
},
{
"identifier": "674a3c9b8e2d4f12b7c9a8d6",
"ref_id": "Ticket-003"
}
]
}{
"error": "Invalid request",
"message": "The number of ref_ids must match the number of tickets"
}{
"error": "Unauthorized",
"message": "Invalid or missing API key"
}{
"error": "Payload too large",
"message": "Maximum batch size is 10 tickets"
}Authorizations
Body
Array of ticket files (images or PDF) to analyze
String containing a list of comma-separated ref_ids. The number of items must match the length of tickets array if provided.
"Ticket-1, Ticket-2, Ticket-3"
Optional string of comma-separated model names to use for tampering detection. If not given, all available models for your tier will be used. If empty, no classification will be performed.
"Model-1, Model-2, Model-3"
Response
Batch submission successful. Returns the list of analysis identifiers.
Unique identifier for this batch submission
Total number of tickets submitted in this batch
List of image submission identifiers created. The list could be greater than the number of tickets if multiple images have been extracted from a single ticket (e.g. PDF file). In this case, multiple submission will refer to the same ref_id.
Show child attributes
Show child attributes