{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-@l10n/vi/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Migrating from Two Hat Community Sift to Tisane API","projectTitle":"Tisane Developer Documentation","description":"Tisane is an NLP platform, used for content moderation & more.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"migrating-from-two-hat-community-sift-to-tisane-api","__idx":0},"children":["Migrating from Two Hat Community Sift to Tisane API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A developer how-to guide for teams moving their text moderation pipeline from Microsoft/Two Hat Community Sift to Tisane API."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"table-of-contents","__idx":1},"children":["Table of Contents"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#1-background-and-motivation"},"children":["Background and Motivation"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#2-architecture-overview"},"children":["Architecture Overview"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#3-authentication"},"children":["Authentication"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#4-api-endpoint-mapping"},"children":["API Endpoint Mapping"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#5-request-structure-mapping"},"children":["Request Structure Mapping"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#6-response-structure-mapping"},"children":["Response Structure Mapping"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#7-abuse-category-mapping"},"children":["Abuse Category Mapping"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#8-severity-and-risk-level-mapping"},"children":["Severity and Risk Level Mapping"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#9-user-reputation-and-trust-states"},"children":["User Reputation and Trust States"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#10-webhook-and-decision-handling"},"children":["Webhook and Decision Handling"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#11-settings-and-configuration-mapping"},"children":["Settings and Configuration Mapping"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#12-code-migration-examples"},"children":["Code Migration Examples"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#13-feature-parity-reference"},"children":["Feature Parity Reference"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#14-migration-checklist"},"children":["Migration Checklist"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1-background-and-motivation","__idx":2},"children":["1. Background and Motivation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Two Hat Community Sift (now marketed under Microsoft) is sunsetting. Teams that built real-time text moderation pipelines on Community Sift need a replacement that offers:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Granular, per-instance abuse classification (not just a binary pass/fail)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Multi-language support"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Real-time latency suitable for pre-publish filtering"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Transparent, explainable results"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Tisane API"]}," is a natural language processing (NLP) API focused on abusive content detection and analysis. It classifies text into typed abuse instances with per-instance severity levels, and supports 35+ languages. Its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /parse"]}," method is broadly equivalent to Community Sift's text analysis endpoint."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Scope of this guide:"]}," This guide covers text-based moderation. Community Sift's image, video, and OCR moderation capabilities are outside Tisane's scope. For image/video, you will need a separate provider alongside Tisane."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2-architecture-overview","__idx":3},"children":["2. Architecture Overview"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"community-sift","__idx":4},"children":["Community Sift"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Community Sift is a managed, opaque SaaS platform. You POST content (text, images, usernames) and receive a structured decision. Risk sliders and topic sensitivity are configured through its dashboard. Webhooks push decisions (FLOOD, MUTE, BAN, etc.) to your application."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"tisane-api","__idx":5},"children":["Tisane API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Tisane is a text-only NLP API. You POST a JSON body with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["language"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settings"]},", and receive a structured JSON response listing every detected instance of problematic content, sentiment, entities, and topics. Moderation decisions (block, review, pass) are made by your application based on the returned classifications. There is no built-in dashboard for policy management; your policy logic lives in your code or a wrapper layer."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Key architectural implication:"]}," Community Sift acted as a decision engine. Tisane acts as a classifier. You must implement your own decision layer on top of Tisane's response."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3-authentication","__idx":6},"children":["3. Authentication"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Community Sift"},"children":["Community Sift"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane API"},"children":["Tisane API"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["API key passed as a query parameter (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["?apiKey=..."]},") or as a request header"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["API key passed as the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ocp-Apim-Subscription-Key"]}," HTTP request header"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Key obtained from the Two Hat / Microsoft developer portal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Key obtained from the Tisane Labs developer portal at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dev.tisane.ai"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Community Sift (before):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST https://api.communitysift.com/v2/content?apiKey=YOUR_KEY\nContent-Type: application/json\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Tisane API (after):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST https://api.tisane.ai/parse\nContent-Type: application/json\nOcp-Apim-Subscription-Key: YOUR_KEY\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," For on-premise Tisane deployments, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ocp-Apim-Subscription-Key"]}," header is not required."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"4-api-endpoint-mapping","__idx":7},"children":["4. API Endpoint Mapping"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Community Sift Endpoint"},"children":["Community Sift Endpoint"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane Equivalent"},"children":["Tisane Equivalent"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/content"]}," — analyze text"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /parse"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Core text analysis endpoint"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/username"]}," — analyze a username"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /parse"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"format\": \"alias\""]}," in settings"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane uses format cues rather than a separate endpoint"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/image"]}," — analyze image"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No direct equivalent"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane is text-only; use a separate image moderation provider"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v2/languages"]}," — list supported languages"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /languages"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Same purpose; Tisane supports 35+ languages"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["User reputation / trust state update"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No direct equivalent"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Must be implemented in your application layer; see Section 9"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Webhook (CS → your app)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not applicable — Tisane is synchronous only"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane returns results inline in the HTTP response; no push model"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"5-request-structure-mapping","__idx":8},"children":["5. Request Structure Mapping"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"community-sift-request","__idx":9},"children":["Community Sift Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"text\": \"You're such an idiot, kill yourself\",\n  \"lang\": \"en\",\n  \"userId\": \"user_12345\",\n  \"contextId\": \"chat_room_42\",\n  \"customFilter\": \"default\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"CS Field"},"children":["CS Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":["Type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Purpose"},"children":["Purpose"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["text"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Content to analyze"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lang"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ISO 639-1 language code"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Identifies the author (used for reputation tracking)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["contextId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Channel or session identifier"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customFilter"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Selects which risk configuration profile to apply"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"tisane-api-request","__idx":10},"children":["Tisane API Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"language\": \"en\",\n  \"content\": \"You're such an idiot, kill yourself\",\n  \"settings\": {\n    \"format\": \"dialogue\",\n    \"explain\": true\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane Field"},"children":["Tisane Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":["Type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Purpose"},"children":["Purpose"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["language"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ISO 639-1 language code (required)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["string"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Content to analyze (required)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settings"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["object"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional configuration; controls output format and analysis behavior"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"field-mapping","__idx":11},"children":["Field Mapping"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Community Sift"},"children":["Community Sift"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane"},"children":["Tisane"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["text"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Direct rename"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lang"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["language"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Direct rename; same ISO 639-1 codes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not in request"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["User identity is not sent to Tisane; manage reputation in your layer"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["contextId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not in request"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No session context in Tisane"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customFilter"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settings"]}," object"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Risk thresholds are implemented in your decision layer, not in Tisane"]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Maximum content length:"]}," Tisane's public cloud API accepts JSON bodies up to 2,048 bytes. For longer texts, use an on-premise or private cloud deployment."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"6-response-structure-mapping","__idx":12},"children":["6. Response Structure Mapping"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"community-sift-response-representative","__idx":13},"children":["Community Sift Response (representative)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"text\": \"You're such an idiot, kill yourself\",\n  \"action\": \"ESCALATE\",\n  \"risk_level\": 3,\n  \"categories\": {\n    \"bully\": 95,\n    \"hatespeech\": 12,\n    \"selfharm\": 78,\n    \"profanity\": 20\n  },\n  \"filtered_text\": \"You're such an *****, kill yourself\",\n  \"user_reputation\": \"NOT_TRUSTED\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Community Sift response fields:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"CS Field"},"children":["CS Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["text"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The analyzed text"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["action"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Platform decision: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PASS"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WARN"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MUTE"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ESCALATE"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BAN"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BLOCK"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["risk_level"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Overall risk score (integer 0–5 or 0–100 depending on configuration)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["categories"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Map of topic names to confidence scores (0–100)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filtered_text"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Text with detected terms replaced by asterisks"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user_reputation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Author's computed trust state: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NOT_TRUSTED"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DEFAULT"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRUSTED"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"tisane-api-response-equivalent","__idx":14},"children":["Tisane API Response (equivalent)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n\t\"text\": \"You're such an idiot, kill yourself\",\n\t\"topics\": [\n\t\t\"death\",\n\t\t\"suicide\"\n\t],\n\t\"abuse\": [\n\t\t{\n\t\t\t\"sentence_index\": 0,\n\t\t\t\"offset\": 0,\n\t\t\t\"length\": 20,\n\t\t\t\"text\": \"You're such an idiot\",\n\t\t\t\"type\": \"personal_attack\",\n\t\t\t\"severity\": \"low\",\n\t\t\t\"explanation\": \"You are a something negative\",\n\t\t\t\"tags\": [\n\t\t\t\t\"ableism\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"sentence_index\": 0,\n\t\t\t\"offset\": 22,\n\t\t\t\"length\": 13,\n\t\t\t\"text\": \"kill yourself\",\n\t\t\t\"type\": \"personal_attack\",\n\t\t\t\"severity\": \"extreme\",\n\t\t\t\"explanation\": \"Suggestion to commit suicide\",\n\t\t\t\"tags\": [\n\t\t\t\t\"bodily_harm\",\n\t\t\t\t\"death\"\n\t\t\t]\n\t\t}\n\t],\n\t\"sentiment_expressions\": [\n\t\t{\n\t\t\t\"sentence_index\": 0,\n\t\t\t\"offset\": 0,\n\t\t\t\"length\": 20,\n\t\t\t\"text\": \"You're such an idiot\",\n\t\t\t\"polarity\": \"negative\",\n\t\t\t\"reasons\": [\n\t\t\t\t\"intelligence\"\n\t\t\t],\n\t\t\t\"explanation\": \"Smb is an unpleasant person\"\n\t\t},\n\t\t{\n\t\t\t\"sentence_index\": 0,\n\t\t\t\"offset\": 22,\n\t\t\t\"length\": 13,\n\t\t\t\"text\": \"kill yourself\",\n\t\t\t\"polarity\": \"negative\",\n\t\t\t\"explanation\": \"Suffer\"\n\t\t}\n\t]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Tisane response fields:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane Field"},"children":["Tisane Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["text"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Echo of the analyzed text"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Array of detected abuse instances; each is a typed, located finding"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Category of problematic content (see Section 7)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].severity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Severity level: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["low"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["medium"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["high"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["extreme"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].offset"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Character offset of the abusive span within the text"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].length"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Character length of the abusive span"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].text"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The exact abusive text span"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].explanation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Human-readable rationale (requires ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"explain\": true"]}," in settings)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].tags"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Subtypes and contextual labels (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["xenophobia"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["death"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["firearms"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sentiment_expressions"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Aspect-based sentiment snippets"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["topics"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Detected topics"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["entities_summary"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Named entity mentions"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"response-structure-comparison","__idx":15},"children":["Response Structure Comparison"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Community Sift Field"},"children":["Community Sift Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane Equivalent"},"children":["Tisane Equivalent"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["action"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not returned — derive from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].severity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Implement your own decision logic; see Section 10"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["risk_level"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Derived from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].severity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Map ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["extreme"]},"→block, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["high"]},"→escalate, etc."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["categories{}"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].type"]}," per instance"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane returns typed instances, not document-level scores"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filtered_text"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not returned"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane identifies spans via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["offset"]},"+",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["length"]},"; apply censoring in your app"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user_reputation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not returned"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Must be tracked in your application layer"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"7-problematic-content-abuse-category-mapping","__idx":16},"children":["7. Problematic Content (Abuse) Category Mapping"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Community Sift classified content against approximately 19 topics using confidence scores. Tisane classifies content into typed abuse instances. The mapping below is conceptual — Tisane does not output confidence scores but does output per-instance severity."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Community Sift Category"},"children":["Community Sift Category"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane abuse.type"},"children":["Tisane ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse.type"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane Tags (for further specificity)"},"children":["Tisane Tags (for further specificity)"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["cyberbullying"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["personal_attack"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["hate speech"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bigotry"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["racism"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["xenophobia"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["homophobia"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["antisemitism"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["islamophobia"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sexism"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transphobia"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ableism"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ageism"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["christianophobia"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sinophobia"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["violent threats"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["criminal_activity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["call_for_violence"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["threat"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["self-harm, suicide"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mental_issues"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bodily_harm"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["sexual harassment"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sexual_advances"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sex"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["adult-only content"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["adult_only"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["profanity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["profanity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["PII / contact details"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["criminal_activity"]}," with tags"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pii"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credentials"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["doxing"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["privacy"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["attempts to share contact info"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_contact"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["drug use"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["criminal_activity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["controlled_substance"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cannabis"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cocaine"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["heroin"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["meth"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hard_drug"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["soft_drug"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["opioid"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["weapons"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["criminal_activity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["firearms"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cold_weapons"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["explosives"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["spam"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["spam"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["terrorism"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["criminal_activity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["call_for_violence"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["human trafficking"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["criminal_activity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sex_work"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["gambling"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No direct equivalent"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Use topic extraction (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["topics"]},") to detect gambling-related subjects"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["allegation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["allegation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["—"]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Important:"]}," Community Sift returned a single confidence score per category for the whole message. Tisane returns one or more discrete, located instances per type. A single message may generate multiple ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse"]}," entries of the same or different types."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"8-severity-and-risk-level-mapping","__idx":17},"children":["8. Severity and Risk Level Mapping"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Community Sift expressed risk as either a numeric level (0–5 or 0–100) or a named action. Tisane uses a four-level severity per abuse instance."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane Severity"},"children":["Tisane Severity"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Approximate Community Sift Equivalent"},"children":["Approximate Community Sift Equivalent"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Suggested Action"},"children":["Suggested Action"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["low"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Risk level 1 / category score 20–40"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Log; consider a soft warning for repeated low-severity offenses"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["medium"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Risk level 2–3 / category score 40–70"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Warn the user; queue for human review"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["high"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Risk level 3–4 / category score 70–90"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Escalate for review; consider pre-publication hold"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["extreme"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Risk level 5 / category score 90–100"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Auto-reject / block immediately"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Deriving a composite risk level from Tisane:"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Because Tisane returns per-instance severity rather than a document-level score, you need to derive a document-level risk in your application:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"function getDocumentRisk(abuseArray) {\n  const severityRank = { low: 1, medium: 2, high: 3, extreme: 4 };\n  if (!abuseArray || abuseArray.length === 0) return 'none';\n  return abuseArray.reduce((max, instance) => {\n    return severityRank[instance.severity] > severityRank[max]\n      ? instance.severity\n      : max;\n  }, 'low');\n}\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"9-user-reputation-and-trust-states","__idx":18},"children":["9. User Reputation and Trust States"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Community Sift's patented User Reputation system maintained three states per user — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NOT_TRUSTED"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DEFAULT"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRUSTED"]}," — updated automatically based on moderation history. This is one of the most significant architectural differences."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Tisane has no built-in user reputation model."]}," You must replicate this in your application layer."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"recommended-implementation","__idx":19},"children":["Recommended Implementation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Track a reputation state per user in your own datastore and factor it into your decision logic:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"// Pseudocode: reputation-aware decision layer on top of Tisane\nasync function moderateWithReputation(userId, text, language) {\n  const reputation = await db.getUserReputation(userId); // 'not_trusted' | 'default' | 'trusted'\n  const tisaneResult = await tisane.parse({ language, content: text, settings: { explain: true } });\n\n  const documentRisk = getDocumentRisk(tisaneResult.abuse);\n\n  // Apply stricter thresholds for untrusted users\n  if (reputation === 'not_trusted') {\n    if (['medium', 'high', 'extreme'].includes(documentRisk)) return 'BLOCK';\n  } else if (reputation === 'trusted') {\n    if (documentRisk === 'extreme') return 'BLOCK';\n    if (documentRisk === 'high') return 'ESCALATE';\n  } else {\n    if (documentRisk === 'extreme') return 'BLOCK';\n    if (['high', 'medium'].includes(documentRisk)) return 'ESCALATE';\n  }\n\n  // Update reputation based on history\n  if (documentRisk !== 'none') await db.recordViolation(userId, documentRisk);\n\n  return 'PASS';\n}\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"10-webhook-and-decision-handling","__idx":20},"children":["10. Webhook and Decision Handling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Community Sift pushed decisions to your webhook in real time using named event types (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FLOOD"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MUTE"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BAN"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BLOCK"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ESCALATE"]},"). Tisane is a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["synchronous request-response API"]}," — there are no outbound webhooks from Tisane."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"migration-pattern","__idx":21},"children":["Migration Pattern"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Replace your webhook handler with synchronous in-line decision logic:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Before (Community Sift webhook handler):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"// CS pushed decisions to your endpoint\napp.post('/cs-webhook', (req, res) => {\n  const { action, userId, text } = req.body;\n  if (action === 'BAN') banUser(userId);\n  else if (action === 'MUTE') muteUser(userId, 3600);\n  else if (action === 'ESCALATE') queueForReview(text, userId);\n  res.sendStatus(200);\n});\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["After (Tisane synchronous decision layer):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"async function analyzeAndAct(userId, text, language) {\n  const response = await fetch('https://api.tisane.ai/parse', {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      'Ocp-Apim-Subscription-Key': process.env.TISANE_KEY\n    },\n    body: JSON.stringify({ language, content: text, settings: { explain: true } })\n  });\n\n  const result = await response.json();\n  const risk = getDocumentRisk(result.abuse);\n\n  if (risk === 'extreme') {\n    blockMessage();\n    await recordViolation(userId, result.abuse);\n  } else if (risk === 'high') {\n    queueForReview(text, userId, result.abuse);\n  } else if (risk === 'medium') {\n    warnUser(userId);\n  }\n\n  return result;\n}\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"11-settings-and-configuration-mapping","__idx":22},"children":["11. Settings and Configuration Mapping"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Community Sift allowed risk sensitivity to be tuned per topic through sliders in its dashboard. Tisane exposes these as settings in the request body."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Community Sift Configuration"},"children":["Community Sift Configuration"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane settings Parameter"},"children":["Tisane ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settings"]}," Parameter"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Risk slider per topic (0–100)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No equivalent — implement thresholds in your decision layer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane returns raw severity; your code applies thresholds"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Language selection"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["language"]}," (required top-level field)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ISO 639-1 code"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Username / alias mode"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"format\": \"alias\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tells the model to expect a screen name, not prose"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Chat / message mode"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"format\": \"dialogue\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optimizes analysis for short conversational messages"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Review mode"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"format\": \"review\""]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Better sentiment detection for product/service reviews"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Explainability / rationale"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"explain\": true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Populates the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["explanation"]}," field in each abuse instance"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Spellcheck disable"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"disable_spellcheck\": true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Useful for usernames or structured data"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"example-full-moderation-oriented-settings-object","__idx":23},"children":["Example: Full moderation-oriented settings object"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"language\": \"en\",\n  \"content\": \"User message here\",\n  \"settings\": {\n    \"format\": \"dialogue\",\n    \"explain\": true\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"12-code-migration-examples","__idx":24},"children":["12. Code Migration Examples"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"python","__idx":25},"children":["Python"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Before (Community Sift):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"import requests\n\ndef check_content(text, user_id, lang='en'):\n    response = requests.post(\n        'https://api.communitysift.com/v2/content',\n        params={'apiKey': CS_API_KEY},\n        json={'text': text, 'lang': lang, 'userId': user_id}\n    )\n    data = response.json()\n    return data['action'], data['risk_level'], data['categories']\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["After (Tisane API):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"import requests\n\nSEVERITY_RANK = {'low': 1, 'medium': 2, 'high': 3, 'extreme': 4}\n\ndef get_document_risk(abuse_list):\n    if not abuse_list:\n        return 'none'\n    return max(abuse_list, key=lambda x: SEVERITY_RANK.get(x['severity'], 0))['severity']\n\ndef check_content(text, lang='en'):\n    response = requests.post(\n        'https://api.tisane.ai/parse',\n        headers={'Ocp-Apim-Subscription-Key': TISANE_KEY},\n        json={\n            'language': lang,\n            'content': text,\n            'settings': {'format': 'chat', 'explain': True}\n        }\n    )\n    data = response.json()\n    abuse = data.get('abuse', [])\n    document_risk = get_document_risk(abuse)\n\n    # Replicate CS-style action names\n    action_map = {'none': 'PASS', 'low': 'WARN', 'medium': 'ESCALATE',\n                  'high': 'ESCALATE', 'extreme': 'BLOCK'}\n    action = action_map.get(document_risk, 'PASS')\n\n    return action, document_risk, abuse\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"nodejs","__idx":26},"children":["Node.js"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Before (Community Sift):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"async function moderateText(text, userId, lang = 'en') {\n  const res = await fetch(`https://api.communitysift.com/v2/content?apiKey=${CS_KEY}`, {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify({ text, lang, userId })\n  });\n  return await res.json(); // { action, risk_level, categories, filtered_text }\n}\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["After (Tisane API):"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"const SEVERITY_RANK = { low: 1, medium: 2, high: 3, extreme: 4 };\n\nfunction getDocumentRisk(abuseArray) {\n  if (!abuseArray?.length) return 'none';\n  return abuseArray.reduce((max, i) =>\n    SEVERITY_RANK[i.severity] > SEVERITY_RANK[max] ? i.severity : max, 'low');\n}\n\nfunction applyRedactions(text, abuseArray) {\n  // Build filtered_text equivalent using Tisane's offset+length spans\n  let result = text;\n  const sorted = [...abuseArray].sort((a, b) => b.offset - a.offset);\n  for (const instance of sorted) {\n    const stars = '*'.repeat(instance.length);\n    result = result.slice(0, instance.offset) + stars + result.slice(instance.offset + instance.length);\n  }\n  return result;\n}\n\nasync function moderateText(text, lang = 'en') {\n  const res = await fetch('https://api.tisane.ai/parse', {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      'Ocp-Apim-Subscription-Key': process.env.TISANE_KEY\n    },\n    body: JSON.stringify({\n      language: lang,\n      content: text,\n      settings: { format: 'chat', explain: true }\n    })\n  });\n\n  const data = await res.json();\n  const abuse = data.abuse || [];\n  const documentRisk = getDocumentRisk(abuse);\n  const filteredText = applyRedactions(text, abuse);\n\n  const actionMap = { none: 'PASS', low: 'WARN', medium: 'ESCALATE', high: 'ESCALATE', extreme: 'BLOCK' };\n\n  return {\n    action: actionMap[documentRisk] || 'PASS',\n    risk: documentRisk,\n    abuse,\n    filtered_text: filteredText,\n    raw: data\n  };\n}\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"13-feature-parity-reference","__idx":27},"children":["13. Feature Parity Reference"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Feature"},"children":["Feature"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Community Sift"},"children":["Community Sift"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tisane API"},"children":["Tisane API"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Text moderation"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Core capability"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Per-instance abuse location (offset + length)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No — document-level scores only"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane is more granular"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Abuse type classification"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (19 topics)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (5 primary types + tag subtypes)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Broadly equivalent; see Section 7"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Severity levels"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Numeric score 0–100 per topic"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["4-level categorical: low/medium/high/extreme"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Different representation"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Explainability / rationale"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Limited"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"explain\": true"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane is more transparent"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Username moderation"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (dedicated endpoint)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"format\": \"alias\""]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Image moderation"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Need a separate provider"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Video moderation"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Need a separate provider"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["OCR on images"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Need a separate provider"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Multi-language support"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["English primary; limited others"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["35+ languages"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane has significantly broader language support"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["User Reputation / Trust States"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (patented)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Must implement in application layer"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Real-time pre-publish filtering"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Both support sub-100ms latency at scale"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Webhook / push decisions"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No — synchronous only"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Must rework to inline decision logic"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Dashboard UI"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane is API-only"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sentiment analysis"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane bonus capability"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Topic extraction"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (IAB/IPTC)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane bonus capability"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Named entity extraction"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane bonus capability"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["On-premise deployment"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tisane Embedded SDKs available"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Free tier"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (rate-limited)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"14-migration-checklist","__idx":28},"children":["14. Migration Checklist"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this checklist to track your migration:"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"preparation","__idx":29},"children":["Preparation"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Sign up for a Tisane Labs account at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://tisane.ai/signup/"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Obtain your API key from the Tisane developer portal"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Review the Tisane API documentation at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://docs.tisane.ai"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Inventory all Community Sift API call sites in your codebase"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Document which CS categories and risk sliders are active in your current setup"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Identify all webhook handlers and decision actions your system currently uses"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"implementation","__idx":30},"children":["Implementation"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Replace authentication header (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["apiKey"]}," query param → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ocp-Apim-Subscription-Key"]}," header)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Replace endpoint URLs"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Rename request fields (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["text"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["content"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lang"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["language"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Add ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settings"]}," object with appropriate ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["format"]}," and feature flags"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Implement ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getDocumentRisk()"]}," to derive a composite severity from the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse"]}," array"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Implement your decision layer mapping Tisane severity → your actions (PASS/WARN/ESCALATE/BLOCK)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Implement text redaction using ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].offset"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["abuse[].length"]}," (replaces ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filtered_text"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Rework webhook handlers into synchronous inline decision logic"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Implement a user reputation datastore if you relied on CS's trust states"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Map CS abuse categories to Tisane ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," + ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tags"]}," values (see Section 7)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Add a fallback / error handler for Tisane ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["4xx"]},"/",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5xx"]}," responses"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"testing","__idx":31},"children":["Testing"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Run a representative sample of historical messages through both APIs in parallel"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Compare decisions; calibrate your severity thresholds to match your previous CS risk sliders"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Test edge cases: algospeak, l33t speak, emoji-encoded abuse, mixed-language messages"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Validate username moderation using ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"format\": \"alias\""]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Test with all languages your platform supports; verify Tisane language codes"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Load-test against your peak message throughput"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"cutover","__idx":32},"children":["Cutover"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Deploy new code in shadow mode (run Tisane alongside CS, log both, act on CS)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Compare disagreement rates and refine thresholds"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Ramp traffic to Tisane as confidence increases"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Decommission Community Sift integration"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Update monitoring and alerting dashboards"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"additional-resources","__idx":33},"children":["Additional Resources"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Tisane API documentation: https://docs.tisane.ai"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Tisane API reference (OpenAPI): https://docs.tisane.ai/apis/tisane-api-short"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Tisane abuse type guides: https://docs.tisane.ai/guides/abuse/tags"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Tisane configuration reference: https://docs.tisane.ai/apis/tisane-api-configuration"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Tisane free plan sign-up: https://tisane.ai/signup/"]}]}]},"headings":[{"value":"Migrating from Two Hat Community Sift to Tisane API","id":"migrating-from-two-hat-community-sift-to-tisane-api","depth":1},{"value":"Table of Contents","id":"table-of-contents","depth":2},{"value":"1. Background and Motivation","id":"1-background-and-motivation","depth":2},{"value":"2. Architecture Overview","id":"2-architecture-overview","depth":2},{"value":"Community Sift","id":"community-sift","depth":3},{"value":"Tisane API","id":"tisane-api","depth":3},{"value":"3. Authentication","id":"3-authentication","depth":2},{"value":"4. API Endpoint Mapping","id":"4-api-endpoint-mapping","depth":2},{"value":"5. Request Structure Mapping","id":"5-request-structure-mapping","depth":2},{"value":"Community Sift Request","id":"community-sift-request","depth":3},{"value":"Tisane API Request","id":"tisane-api-request","depth":3},{"value":"Field Mapping","id":"field-mapping","depth":3},{"value":"6. Response Structure Mapping","id":"6-response-structure-mapping","depth":2},{"value":"Community Sift Response (representative)","id":"community-sift-response-representative","depth":3},{"value":"Tisane API Response (equivalent)","id":"tisane-api-response-equivalent","depth":3},{"value":"Response Structure Comparison","id":"response-structure-comparison","depth":3},{"value":"7. Problematic Content (Abuse) Category Mapping","id":"7-problematic-content-abuse-category-mapping","depth":2},{"value":"8. Severity and Risk Level Mapping","id":"8-severity-and-risk-level-mapping","depth":2},{"value":"9. User Reputation and Trust States","id":"9-user-reputation-and-trust-states","depth":2},{"value":"Recommended Implementation","id":"recommended-implementation","depth":3},{"value":"10. Webhook and Decision Handling","id":"10-webhook-and-decision-handling","depth":2},{"value":"Migration Pattern","id":"migration-pattern","depth":3},{"value":"11. Settings and Configuration Mapping","id":"11-settings-and-configuration-mapping","depth":2},{"value":"Example: Full moderation-oriented settings object","id":"example-full-moderation-oriented-settings-object","depth":3},{"value":"12. Code Migration Examples","id":"12-code-migration-examples","depth":2},{"value":"Python","id":"python","depth":3},{"value":"Node.js","id":"nodejs","depth":3},{"value":"13. Feature Parity Reference","id":"13-feature-parity-reference","depth":2},{"value":"14. Migration Checklist","id":"14-migration-checklist","depth":2},{"value":"Preparation","id":"preparation","depth":3},{"value":"Implementation","id":"implementation","depth":3},{"value":"Testing","id":"testing","depth":3},{"value":"Cutover","id":"cutover","depth":3},{"value":"Additional Resources","id":"additional-resources","depth":2}],"frontmatter":{"seo":{"title":"Migrating from Two Hat Community Sift to Tisane API"}},"lastModified":"2026-05-28T09:54:31.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/vi/guides/how-tos/communitysiftmigration","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}