curl --request POST \
--url https://api.tuteliq.ai/api/v1/safety/document \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tuteliq.ai/api/v1/safety/document', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tuteliq.ai/api/v1/safety/document"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)val client = OkHttpClient()
val request = Request.Builder()
.url("https://api.tuteliq.ai/api/v1/safety/document")
.post(null)
.addHeader("Authorization", "Bearer <token>")
.build()
val response = client.newCall(request).execute()import Foundation
let url = URL(string: "https://api.tuteliq.ai/api/v1/safety/document")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api.tuteliq.ai/api/v1/safety/document");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
false{
"file_id": "<string>",
"document_hash": "<string>",
"total_pages": 123,
"pages_analyzed": 123,
"extraction_summary": {
"text_layer_pages": 123,
"ocr_pages": 123,
"failed_pages": 123,
"average_ocr_confidence": 123
},
"page_results": [
{
"page_number": 123,
"text_preview": "<string>",
"extraction_method": "text_layer",
"ocr_confidence": 123,
"results": [
{
"endpoint": "<string>",
"detected": true,
"severity": 123,
"confidence": 123,
"risk_score": 123,
"level": "<string>",
"categories": [
{}
],
"evidence": [
{}
],
"recommended_action": "<string>",
"rationale": "<string>"
}
],
"page_risk_score": 123,
"page_severity": "<string>"
}
],
"overall_risk_score": 123,
"overall_severity": "none",
"detected_endpoints": [
"<string>"
],
"flagged_pages": [
{
"page_number": 123,
"risk_score": 123,
"severity": "<string>",
"detected_endpoints": [
"<string>"
]
}
],
"credits_used": 123,
"processing_time_ms": 123,
"language": "<string>",
"language_status": "<string>",
"support": {},
"external_id": "<string>",
"incident_moderation_enabled": "<string>",
"customer_id": "<string>",
"metadata": {}
}Analyze a PDF or image for safety and compliance concerns
Upload a PDF (max 50MB, max 100 pages) or a single image (png, jpeg, webp) for multi-endpoint safety analysis. PDFs are read from the text layer per page; images are read by OCR and analysed as a one-page document. Choose which detectors run with the endpoints field. For a messaging screenshot, set split_by_sender=true to have the conversation split into messages with a side attributed to each, so the detector judges the last received message with the rest as history; this costs one additional vision call. Returns per-page results with an overall risk assessment, plus a SHA-256 hash of the uploaded file for chain-of-custody verification. Zero-retention: no document or image data is stored after processing.
curl --request POST \
--url https://api.tuteliq.ai/api/v1/safety/document \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tuteliq.ai/api/v1/safety/document', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tuteliq.ai/api/v1/safety/document"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)val client = OkHttpClient()
val request = Request.Builder()
.url("https://api.tuteliq.ai/api/v1/safety/document")
.post(null)
.addHeader("Authorization", "Bearer <token>")
.build()
val response = client.newCall(request).execute()import Foundation
let url = URL(string: "https://api.tuteliq.ai/api/v1/safety/document")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api.tuteliq.ai/api/v1/safety/document");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
false{
"file_id": "<string>",
"document_hash": "<string>",
"total_pages": 123,
"pages_analyzed": 123,
"extraction_summary": {
"text_layer_pages": 123,
"ocr_pages": 123,
"failed_pages": 123,
"average_ocr_confidence": 123
},
"page_results": [
{
"page_number": 123,
"text_preview": "<string>",
"extraction_method": "text_layer",
"ocr_confidence": 123,
"results": [
{
"endpoint": "<string>",
"detected": true,
"severity": 123,
"confidence": 123,
"risk_score": 123,
"level": "<string>",
"categories": [
{}
],
"evidence": [
{}
],
"recommended_action": "<string>",
"rationale": "<string>"
}
],
"page_risk_score": 123,
"page_severity": "<string>"
}
],
"overall_risk_score": 123,
"overall_severity": "none",
"detected_endpoints": [
"<string>"
],
"flagged_pages": [
{
"page_number": 123,
"risk_score": 123,
"severity": "<string>",
"detected_endpoints": [
"<string>"
]
}
],
"credits_used": 123,
"processing_time_ms": 123,
"language": "<string>",
"language_status": "<string>",
"support": {},
"external_id": "<string>",
"incident_moderation_enabled": "<string>",
"customer_id": "<string>",
"metadata": {}
}Authorizations
API key as Bearer token
Response
Default Response
Client-provided file identifier (echoed back)
SHA-256 hash of the uploaded PDF for chain-of-custody verification
Total pages in the document
Pages with extractable text that were analyzed
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Highest risk score across all pages
none, low, medium, high, critical Endpoints that detected threats
Show child attributes
Show child attributes
Per-call override of account incident logging: "true" forces persistence, "false" suppresses it. Omit for account default.