> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tumban.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reason codes

> Machine-readable codes that explain a recommendation.

`reason_codes` is a list of short identifiers explaining why a scan
received its recommendation. Codes can be combined; treat the list as
an **unordered set** and as **open-ended**. New codes may be added over
time, so code defensively against unknown codes — never assume the list
is exhaustive or in a fixed order.

## Categorical codes

Emitted when matching keywords or domains are found.

| Code                       | Meaning                                                                      |
| -------------------------- | ---------------------------------------------------------------------------- |
| `PROHIBITED_DOMAIN`        | A direct link to a domain on Tumban's prohibited list.                       |
| `ADULT_KEYWORDS`           | Adult-content keywords detected in profile text.                             |
| `ADULT_CONTENT_LINK`       | Link to an adult-content platform or service.                                |
| `ADULT_SERVICES_KEYWORDS`  | Adult-services keywords (escort, in-person services).                        |
| `EXTERNAL_ADULT_CONTEXT`   | Profile is mentioned on adult sites elsewhere on the web.                    |
| `PIRACY_KEYWORDS`          | Piracy / unlicensed-streaming keywords detected.                             |
| `PIRACY_INDICATORS`        | Contextual signals of piracy (IPTV, cracked accounts, shared subscriptions). |
| `GAMBLING_KEYWORDS`        | Gambling / wagering keywords detected.                                       |
| `GAMBLING_INDICATORS`      | Contextual signals of gambling.                                              |
| `COUNTERFEIT_KEYWORDS`     | Counterfeit-goods keywords detected.                                         |
| `COUNTERFEIT_INDICATORS`   | Contextual signals of counterfeit goods.                                     |
| `ACCOUNT_SHARING_KEYWORDS` | Account-sharing or subscription-sharing keywords detected.                   |

## Pattern codes

Emitted when Tumban's analysis identifies a violation pattern.

| Code                    | Meaning                                                                    |
| ----------------------- | -------------------------------------------------------------------------- |
| `SUSPICIOUS_LINK_CHAIN` | Link path leads to a prohibited destination through one or more redirects. |
| `EVASION_PATTERN`       | High proportion of login-gated links combined with promotional language.   |
| `DARK_FUNNEL_PATTERN`   | Profile pushes users to private messaging channels with vague promotion.   |

## Exculpatory and clean codes

| Code                  | Meaning                                                                                                             |
| --------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `EXCULPATORY_CONTEXT` | Prohibited keywords appear, but in journalism, education, advocacy, or past-tense framing. The score is suppressed. |
| `CLEAN_PROFILE`       | Tumban's analysis explicitly cleared the profile.                                                                   |

## Content safety codes

Emitted when Tumban's content classification flagged text or an image.

| Code                     | Meaning                                                                                       |
| ------------------------ | --------------------------------------------------------------------------------------------- |
| `TEXT_FLAGGED`           | Profile text was flagged by the safety classifier.                                            |
| `IMAGE_FLAGGED`          | Profile or banner image was flagged by the safety classifier.                                 |
| `UNSAFE_CONTENT_BLOCKED` | Upstream safety guardrails refused to analyze the input — treated as a finding, not an error. |
| `VIOLENCE_CONTENT`       | Violence flagged by the safety classifier.                                                    |
| `HATE_CONTENT`           | Hate speech flagged by the safety classifier.                                                 |
| `SELF_HARM_CONTENT`      | Self-harm content flagged by the safety classifier.                                           |

## Adjudication codes

Emitted when a follow-up review pass evaluated a borderline score and
**changed** it. A pass that leaves the score unchanged emits no
adjudication code.

| Code                          | Meaning                                                                                |
| ----------------------------- | -------------------------------------------------------------------------------------- |
| `SECONDARY_REVIEW_CONFIRMED`  | Follow-up review pass **raised** the score, escalating it to at least `review_medium`. |
| `SECONDARY_REVIEW_DOWNGRADED` | Follow-up review pass downgraded the initial score.                                    |

## Failure codes

| Code             | Meaning                                                                                                               |
| ---------------- | --------------------------------------------------------------------------------------------------------------------- |
| `ANALYSIS_ERROR` | Contextual analysis step failed due to an infrastructure error (timeout, network, upstream 5xx). Scores 10 (neutral). |
| `PARSE_ERROR`    | Contextual analysis returned a malformed response. Conservative fallback score 50.                                    |
| `SCAN_FAILED`    | The scan as a whole could not produce a triage report. Webhook payload only — see the `error` field.                  |

<Note>
  New codes may be added over time. Treat unknown codes as
  informational rather than failing your integration on them.
</Note>
