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 document for safety and compliance concerns
Upload a PDF (max 50MB, max 100 pages) for multi-endpoint safety analysis. Extracts text from each page (text layer or OCR fallback), runs detection endpoints in parallel, and returns per-page results with an overall risk assessment. Response includes a SHA-256 document hash for chain-of-custody verification. Zero-retention: no document 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.