Skip to main content
POST
Detect bullying, harassment, and intimidation in text

Authorizations

Authorization
string
header
required

API key as Bearer token

Body

application/json
text
string
required

The message text to analyze

Maximum string length: 10000
context
object
options
object
support_threshold
enum<string>

Top-level alias for options.support_threshold. Minimum severity to show crisis support resources (default: high). Critical always shows.

Available options:
low,
medium,
high,
critical
continuation_token
string

Opaque signed token from a previous /bullying call. Carries derived analysis state — no message content is stored server-side.

reset_conversation
boolean

Discard any continuation_token and start a fresh conversation.

message_id
string

Optional customer-side message id for evidence pointers.

Maximum string length: 128
external_id
string

Your unique identifier (e.g. message ID, content ID) for correlating Tuteliq results with your own system. Echoed back in the response and included in webhook payloads so you can match alerts to the original content.

Maximum string length: 255
customer_id
string

Your end-customer identifier for multi-tenant / B2B2C scenarios. If you serve multiple customers (schools, apps, brands) from a single API key, set this to route webhook alerts to the correct customer. Echoed back in the response and included in webhook payloads as "customerId".

Maximum string length: 255
metadata
object

Arbitrary key-value pairs for additional context (e.g. { "channel": "discord", "region": "eu" }). Stored with the detection result, echoed in the response, and included in webhook payloads. Maximum 20 properties.

incident_moderation_enabled
boolean

Per-call override of your account incident logging setting. When set, it takes precedence over the account-level flag for THIS request: true forces the incident to be persisted, false suppresses persistence. Omit to use your account default (which itself defaults to enabled). Lets you control incident logging per request, e.g. suppress logging for test traffic.

Response

200 - application/json

Default Response

speaker_role
enum<string>

The speaker's relationship to the conduct described, so a report can be routed to a victim-protection queue rather than a sender-sanction one without parsing rationale prose. enacting = the speaker is bullying. experiencing = the speaker describes what was done to them. reporting_other = a bystander describing a third party's conduct, or relaying someone else's decision. self_directed = the speaker disparages only themselves. unclear = cannot be determined. Descriptive: this never changes is_bullying, severity, risk_score or recommended_action. It is the ONLY field that distinguishes the person bullying from the person being bullied, since is_bullying reports presence for both. Same vocabulary as speaker_role on /safety/coercive-control.

Available options:
enacting,
experiencing,
reporting_other,
self_directed,
unclear
is_bullying
boolean

Whether a bullying signal is PRESENT in the content, at ANY severity (including low / monitor cases). Presence, not authorship: this is true for a child describing bullying being done TO them, exactly as it is for the person doing it. Use speaker_role to tell those apart before you act on it, or you will sanction the victim. For production branching prefer recommended_action (flag_for_review / block / immediate_intervention), which is a stable enum, over the bare presence of a signal.

bullying_type
enum<string>[]

Canonical vocabulary. Values outside this enum are dropped before the response is built, so this field is safe to switch on.

Available options:
exclusion,
verbal_abuse,
humiliation,
threat,
intimidation,
sexual_harassment,
body_shaming,
identity_based,
impersonation,
outing,
pile_on,
cyberstalking,
exclusion_threat,
coded_harassment,
cyberbullying,
relational
confidence
number
severity
enum<string>
Available options:
low,
medium,
high,
critical
rationale
string

Routing key, weakest to strongest: none, monitor, flag_for_review, block, immediate_intervention. Safe to switch on.

Available options:
none,
monitor,
flag_for_review,
block,
immediate_intervention
action_detail
string

Optional human-readable expansion of recommended_action for a moderator UI. Free text: do not branch on it.

risk_score
number
language
string

Language code used for analysis (auto-detected or provided)

language_status
enum<string>

Language support maturity: "stable" (en) or "beta" (all others)

Available options:
stable,
beta
credits_used
number

Number of credits consumed by this request

continuation_token
string

Signed token carrying derived analysis state for the next call. Server stores nothing.

continuation_expires_at
string

ISO 8601 expiry timestamp of the continuation_token.

state_source
enum<string>

How prior state was sourced.

Available options:
token,
fresh,
reset
trajectory_risk
number

Conversation-level risk 0-1, distinct from risk_score which scores only this message. Anchored on the highest severity seen so far and decaying slowly across benign turns, so a friendly message after an escalation does not reset it. Absent on the first turn. Derived from the signed token: no message content is stored to produce it.

trajectory
enum<string>

Direction of travel across the conversation so far.

Available options:
rising,
stable,
declining,
none
severity_series
number[]

Per-turn severity, oldest first — the evidence behind trajectory_risk, so a moderator can see why a benign-looking message carries elevated conversation risk.

escalation_capped
boolean

True when a coded-term match pushed severity toward critical but this endpoint's corroboration-cap logic held recommended_action below immediate_intervention pending independent confirmation. Absent when no cap applied.

escalation_capped_reason
string

Human-readable explanation of the cap. Present only when escalation_capped is true.

profanity
object | null

Present only when options.flag_profanity (or the account-level default_flag_profanity setting) is true. Deterministic word-list result — additive, never affects is_bullying/severity/risk_score/recommended_action.

risk_terms
object | null

Present only when options.flag_risk_terms (or the account-level default_flag_risk_terms setting) is true. Deterministic drug/violence word-list result — additive, never affects is_bullying/severity/risk_score/recommended_action. Purely lexical: can fire on benign uses of an included term.

external_id
string

Echo of the external_id you provided in the request

customer_id
string

Echo of the customer_id you provided in the request

metadata
object

Echo of the metadata you provided in the request

support
object

Country-specific crisis helplines and response guidance (only included for high/critical severity)