Skip to main content
POST
Detect money mule recruitment attempts

Authorizations

Authorization
string
header
required

API key as Bearer token

Body

application/json
text
string
required

The text content 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
include_evidence
boolean

Top-level alias for options.include_evidence. When false, the evidence array is omitted from the response. Default: true.

continuation_token
string

Opaque, signed token returned by a previous call to this endpoint. Pass it back here to continue the analysis with prior context — no need to re-send prior_messages. The token IS the state; we store nothing.

reset_conversation
boolean

When true, discard any continuation_token and treat this call as the first turn of a new conversation.

message_id
string

Optional customer-side identifier for this turn. If provided, evidence pointers in the continuation_token will reference this id so you can map detections back to your own messages. If omitted we use a deterministic short hash of the text.

Maximum string length: 128
bypass_cache
boolean

Deprecated, no effect: results are never cached — every request runs a fresh evaluation and nothing derived from the input is stored. The field is still accepted so existing integrations do not break.

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 for THIS request: true forces the incident to be persisted, false suppresses persistence. Omit to use your account default (which itself defaults to enabled). Useful to suppress logging for test traffic or to opt specific calls in or out.

Response

200 - application/json

Default Response

conversation_type_applied
string

Present only when a caller-declared context.conversation_type actually changed routing. Confirms the setting was taken into account, rather than leaving the platform to assume it was.

absence_reason_cleared
boolean

romance-scam only. Present when a detection was cleared because the reason given for not appearing on video or in person was a passing obstacle (a router down, out of data, an early start) rather than a standing property of the claimed persona (a deployment, a rig, a clearance), and the only tactics were IDENTITY_FABRICATION / SECRECY_REQUEST / URGENCY_PRESSURE. Before this, an ordinary "no wifi until Thursday" message was told its sender was fabricating an identity (#224). Absent when the gate did not fire.

endpoint
string

The detection endpoint that produced this result

detected
boolean

A signal was observed at ANY severity (including low / monitor cases). For production branching prefer recommended_action (flag_for_moderator / immediate_intervention indicate action required).

severity
number

Severity score (0.0-1.0)

confidence
number

Model confidence in the classification (0.0-1.0)

risk_score
number

Age-adjusted risk score (0.0-1.0)

level
enum<string>

Human-readable severity level

Available options:
none,
low,
medium,
high,
critical
categories
object[]

Detected categories with confidence scores

evidence
object[]

Evidence excerpts supporting the detection

age_calibration
object

Recommended action to take

rationale
string

Explanation of the detection result

message_analysis
object[]

Per-message risk breakdown (only present when prior_messages is provided)

language
string

Language code used for analysis

language_status
enum<string>

Language support maturity

Available options:
stable,
beta
credits_used
number

Credits consumed by this request

processing_time_ms
number

Processing time in milliseconds

continuation_token
string

Opaque, signed token carrying derived analysis state. Pass it back on the next call to continue the conversation without re-sending history. Server stores nothing — the token IS the state.

continuation_expires_at
string

ISO 8601 timestamp at which the continuation_token expires (24h default).

state_source
enum<string>

How the prior analysis state was sourced for this call: "token" (decoded from continuation_token), "fresh" (no prior state), "reset" (reset_conversation forced a fresh start).

Available options:
token,
fresh,
reset
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 for high/critical severity)

speaker_stance
enum<string>

The model's own conclusion on whether the speaker is recruiting the listener into moving money, or asking about/investigating an arrangement run by someone else (e.g. a bank fraud investigator interviewing a suspected victim). Feeds into recommended_action -- see action_capped below.

Available options:
deploying,
describing_third_party,
unclear
action_capped
boolean

True when speaker_stance capped a suppressive recommended_action (e.g. block) below itself, because the model identified the speaker as describing/countering a third party's conduct rather than deploying it themselves.

action_capped_reason
string

Human-readable explanation of the action_capped adjustment, present only when action_capped is true.

severity_capped
boolean

True when speaker_stance capped severity/risk_score/level at a ceiling (not to zero) for the same reason as action_capped -- a genuine third-party disclosure or exposure report still reaches human review at the ceiling; only a purely educational/protective description is prevented from reading as comparable to a real attack.

severity_capped_reason
string

Human-readable explanation of the severity_capped adjustment, present only when severity_capped is true.