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

# Profanity Detection

> This method helps safeguard your website or app by detecting offensive or inappropriate language in user inputs. By screening for profanity and other harmful content before it’s made public, you can maintain a positive user environment, protect your brand, and prevent abusive behavior on your platform.

This method uses Machine Learning (ML) to analyze text and determine whether it contains profanity. It returns a score for the text you pass, classifying it as safe or risky.

export const MCPCallout = () => {
  return <div class="callout my-4 px-5 py-4 overflow-hidden rounded-2xl flex gap-3 border border-[rgba(192, 132, 252, 0.2)] bg-[rgba(192, 132, 252, 0.1)] dark:border-[#c084fc4d] dark:bg-[#c084fc1a] text-[#6005BB] dark:text-[#FFFFFF]" data-callout-type="callout">
      <div class="mt-0.5 w-4" data-component-part="callout-icon">
        <svg class="h-4 w-4 !m-0 shrink-0 bg-[#c084fc] [mask-image:url('https://d3gk2c5xim1je2.cloudfront.net/v7.1.0/duotone/fire.svg')] [-webkit-mask-image:url('https://d3gk2c5xim1je2.cloudfront.net/v7.1.0/duotone/fire.svg')] [mask-repeat:no-repeat] [-webkit-mask-repeat:no-repeat] [mask-position:center] [-webkit-mask-position:center]"></svg>
      </div>
      <div class="text-sm prose dark:prose-invert min-w-0 w-full [&_kbd]:bg-background-light dark:[&_kbd]:bg-background-dark text-[#6005BB] dark:text-[#FFFFFF]" data-component-part="callout-content">
        <span data-as="p">
          Want to skip the docs? Use the{" "}
          <a class="link mint-text-xs border-[#C792FC]" href="/docs-mcp-server">
            <b>MCP Server</b>
          </a>
        </span>
      </div>
    </div>;
};

export const Availability = ({plan, color}) => {
  const colorMap = {
    green: "text-green-700 dark:text-green-400",
    blue: "text-blue-700 dark:text-blue-400",
    purple: "text-purple-700 dark:text-purple-400"
  };
  return <div dir="ltr" data-orientation="horizontal" class="p-4 px-5 mt-0 md:mt-4 flex flex-col sm:flex-row flex-wrap gap-2 relative overflow-hidden rounded-2xl border border-gray-950/10 dark:border-white/10 my-0 bg-gray-50 dark:bg-white/5 dark:codeblock-dark text-gray-950 dark:text-gray-50 codeblock-light text-sm prose prose-gray dark:prose-invert font-semibold no-wrap-words">
      Endpoint availability:{" "}
      <span class={` ${colorMap[color]} flex-1`}>{plan}</span>
      <a class="custom-link text-xs" href="https://greip.io/detailed-pricing">
        Learn more
      </a>
    </div>;
};

### Query Parameters

<ParamField query="text" type="string" placeholder="The text" required>
  The text you want to filter

  Sample value: `This is a sample text without profanity!`
</ParamField>

<ParamField query="scoreOnly" type="string" default="no" placeholder="The value">
  Returns only the score of the text and whether it's safe or not.

  Expected values: `yes`, or `no`.
</ParamField>

<ParamField query="listBadWords" type="string" default="no" placeholder="The value">
  Used to list the bad words in an array.

  Expected values: `yes`, or `no`.
</ParamField>

<ParamField query="format" type="string" default="JSON" placeholder="Response format">
  The format command is used to get a response in a specific format.

  Expected values: `JSON`, `XML`, or `CSV`

  For more information please refer to [Response Format](/options/response-format).
</ParamField>

<ParamField query="mode" type="string" default="live" placeholder="Environment">
  The mode command is used to in the development stage to simulate the integration process before releasing it to the production environment.

  Expected values: `live`, or `test`.

  For more information please refer to [Development Environment](/options/development-environment).
</ParamField>

<ParamField query="callback" type="string" placeholder="JSONP callback">
  The callback command can help you make the response as a JSONP format.

  Expected values: any name that can be used as a function name in Javascript, e.g: `myFunctionName`.

  For more information please refer to [JSONP Callback](/options/jsonp-callback).
</ParamField>

<Panel>
  <MCPCallout />

  <Availability plan="Free and above" color="green" />

  <ResponseExample>
    ```json Success theme={null}
    {
      "data": {
        "isML": true,
        "text": "This is just a normal text",
        "totalBadWords": null,
        "riskScore": 0,
        "isSafe": true,
        "status": "success",
        "executionTime": 120
      }
    }
    ```

    ```json Error theme={null}
    {
      "status": "error",
      "code": 101,
      "type": "invalid_key",
      "description": "The API Key is missing or invalid."
    }
    ```
  </ResponseExample>
</Panel>

### Response properties

<ResponseField name="data" type="object" required>
  <Expandable title="properties" defaultOpen={true}>
    <ResponseField name="isML" type="boolean" required>
      A boolean value that indicates whether the detection is done by Machine Learning or not.
    </ResponseField>

    <ResponseField name="text" type="string" required>
      The text you passed to the API.
    </ResponseField>

    <ResponseField name="totalBadWords" type="number" required>
      The total number of profane words found in the text.

      **Note:** This field is only available when `isML` is `true`, otherwise you'll get `null`.
    </ResponseField>

    <ResponseField name="riskScore" type="number" required>
      The risk score of the text you passed.
    </ResponseField>

    <ResponseField name="isSafe" type="boolean" required>
      A boolean value that indicates whether the text is safe or not.
    </ResponseField>
  </Expandable>

  <ResponseField name="status" type="string" required>
    The response status.

    Expected values: `success`, or `error`.
  </ResponseField>

  <ResponseField name="executionTime" type="integer" required>
    Time spent in milliseconds to process the data.
  </ResponseField>
</ResponseField>

<Note>
  This method returns a score for the text you pass.

  We classify profanity into 4 different level. The first level contains the most risky words and phrases (risky). The second level contains the medium-risk words and phrases. Whereas, the third level contains the low-risk words.

  When you use the API, the response will the determine the score of the text you passed as follows:

  * `riskScore = 0` means that this text is completely safe.
  * `riskScode = 1` means that this is a high-risk text.
  * `riskScode = 2` means that this is a medium-risk text.
  * `riskScode = 3` means that this is a low-risk text.
</Note>
