The detection pipeline
1. Content ingestion & language detection
When you send a request to any Safety endpoint, Tuteliq first normalizes the input and detects the content language. Text is analyzed directly. Audio is transcribed and then analyzed as text with timestamped segments preserved. Images are processed for visual classification and OCR text extraction simultaneously — so a screenshot of a harmful conversation is caught by both the visual and textual classifiers.Transcription runs on our own infrastructure. Audio is transcribed by a self-hosted Whisper deployment on our GCP infrastructure in an EU region. It is never sent to a third-party transcription API, and it is never written to disk: the audio is transcribed and analysed in memory and discarded when the request completes.
- Explicit code — If you pass a
languageparameter, it is used directly. - Trigram detection — If no explicit language is given, the API runs trigram-based analysis on the input text.
- LLM confirmation — The LLM also identifies the content language during analysis. When the LLM’s detection is a supported language, it takes precedence — this ensures correct detection for closely related languages like Norwegian, Swedish, and Danish.
2. Multi-model classification
Rather than relying on a single model, Tuteliq runs content through specialized classifiers for each harm category in parallel:
Each classifier produces an independent confidence score. When multiple classifiers fire on the same content (e.g., grooming + sexual exploitation), Tuteliq combines the signals to produce a holistic risk assessment.
The
/analyse/multi endpoint lets you run up to 10 classifiers on a single piece of content in one API call. When vulnerability exploitation detection is included, it produces a cross-endpoint vulnerability modifier that automatically adjusts severity scores across all other results — amplifying risk when the content targets vulnerable individuals.
Valid endpoint values for /analyse/multi:
3. Context engine
This is where Tuteliq diverges from keyword-based filters. The context engine evaluates:- Linguistic intent — Is “I want to kill myself” an expression of frustration over a video game, or a genuine crisis signal? Tuteliq analyzes surrounding context, tone, and conversational history to distinguish the two.
- Relationship dynamics — A single message may appear harmless. The context engine tracks multi-turn escalation patterns — compliments, then secrecy requests, then isolation attempts, then boundary violations — that only become visible across a conversation. Every conversation-aware endpoint returns a
message_analysisarray that shows exactly how risk escalates message by message, with individual risk scores and detected tactics for each entry. - Platform norms — Teen slang, gaming culture, and social media language evolve fast. The context engine recognizes that “I’m literally dead” in a group chat has a fundamentally different risk profile than the same phrase in a private message to a younger child.
- Adversarial fragmentation — Bad actors sometimes try to evade detection by spreading a phrase across many one-character or two-character messages. Conversation-aware endpoints reassemble runs of consecutive same-role short messages before analysis, so
"d","o","n","t","t","e","l","l"is evaluated as"donttell". Reassembled fragments score at a lower severity than the same intent written naturally (the underlying signal is weaker), butrecommended_actionstill escalates when the verdict is medium or above. Branch alerting onrecommended_action, not onseverity === 'critical'— that way reassembled grooming attempts still reach a moderator. - Long conversation handling —
detect_groomingis designed for conversation windows up to about 20 turns; this is where the multi-turn risk-trajectory analysis is sharpest. For longer threads, pass the response’scontinuation_tokenback on the next call and analyse the next chunk — server state stays on the customer’s side and the trajectory carries across windows. If a conversation is submitted that exceeds the engine’s processing window, the response returnsanalysis_status: "engine_error"withrecommended_action: "flag_for_moderator"rather than a generic failure — escalate to a human moderator regardless of the risk score in that case.
4. Age-calibrated scoring
The same content carries different risk depending on the child’s age. Tuteliq adjusts severity across four brackets:
You specify the
age_group in your request context. If omitted, Tuteliq defaults to the most protective bracket.
5. Response generation
Context fields
You can pass acontext object with any detection request to improve accuracy:
When
sender_trust is "verified", the API fully suppresses AUTH_IMPERSONATION — a verified sender cannot be impersonating an authority by definition. Routine urgency (schedules, deadlines) is also suppressed. Only genuinely malicious content (credential theft, phishing links, financial demands) will be flagged.Crisis support resources (support_threshold)
Detection responses can include country-specific crisis helplines and response guidance. The support_threshold parameter controls when these are included:
Critical severity always includes support resources regardless of the threshold setting.
support_threshold in the options object or as a top-level request field:
unsafe(boolean, legacy endpoints) ordetected(boolean, new detection endpoints) — Clear yes/no for immediate routing decisions. Legacy endpoints returnunsafe; newer detection endpoints usedetectedinstead.categories(array) — Which KOSA harm categories were triggered.severity(string) —low,medium,high, orcritical, calibrated to the age group.risk_score(float, 0.0–1.0) — Granular score for threshold-based automation.confidence(float) — Model confidence in the classification.rationale(string) — Human-readable explanation of why the content was flagged. Useful for trust & safety review and audit trails.message_analysis(array, conversation-aware endpoints) — Per-message risk breakdown, returned whenconversation_historyis provided. Each entry containsmessage_index,risk_score,flags, andsummary, making the escalation sequence visible for dashboards and reporting. Available on grooming, social engineering, app fraud, romance scam, mule recruitment, gambling harm, coercive control, vulnerability exploitation, and radicalisation endpoints.recommended_action(string) — Suggested next step, such as “Escalate to counselor” or “Block and report.”language(string) — Resolved language code (ISO 639-1) used for analysis, auto-detected or explicit.language_status(string) —"stable"for English,"beta"for all other supported languages.
Beyond detection
Tuteliq doesn’t stop at “this content is unsafe.” Two additional endpoints complete the workflow:Action plan generation
The/guidance/action-plan endpoint takes a detection result and generates age-appropriate guidance tailored to the audience:
- For children — Gentle, reading-level-appropriate language explaining what happened and what to do next.
- For parents — Clear explanation of the detected risk with suggested conversations and resources.
- For trust & safety teams — Technical summary with recommended platform actions and escalation paths.
Incident reports
The/reports/incident endpoint converts raw conversation data into structured, professional reports suitable for school counselors responding to bullying incidents, platform moderators documenting patterns of abuse, and compliance teams maintaining audit trails for KOSA reporting.
Architecture principles
Fully stateless. Every API call is independent — Tuteliq never stores conversation text, context, or session state between requests. This is a deliberate privacy-by-design decision: when processing children’s data under GDPR/COPPA, the safest data is data you never store. Pass conversation history with each request that needs it; results are returned and content is discarded. No training on your data. Content sent to Tuteliq is used solely for real-time analysis and is not retained for model training. See the GDPR section for data retention details. Parallel processing. All harm classifiers in/analyse/multi run simultaneously, not sequentially — so checking against all nine KOSA categories costs no more wall-clock time than checking one. Typical p95 for LLM-backed detection is ~1.4s; warm single-endpoint calls land lower.
Policy-configurable. Use the /policy/ endpoint to adjust detection thresholds, category weights, and moderation rules for your specific use case — without changing your integration code.
Next steps
Quickstart
Make your first detection call in under 5 minutes.
KOSA Compliance
See how each harm category maps to regulatory requirements.