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

# Kiểm duyệt nội dung

> Kiểm tra nội dung để đảm bảo không có hại hoặc không phù hợp

export const HeaderAPI = ({noProfileKey, profileKeyRequired}) => <>
    <ParamField header="Authorization" type="string" required>
      <a href="/apis/overview#authorization">API Key</a> of the Primary Profile.
      <br />
      <br />
      Format: <code>Authorization: Bearer API_KEY</code>
    </ParamField>
    {!noProfileKey && (profileKeyRequired ? <ParamField header="Profile-Key" type="string" required>
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField> : <ParamField header="Profile-Key" type="string">
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField>)}
  </>;

export const PlansAvailable = ({plans = [], maxPackRequired}) => {
  let displayPlans = plans;
  if (plans && plans.length === 1) {
    const lowerCasePlan = plans[0].toLowerCase();
    if (lowerCasePlan === "business") {
      displayPlans = ["Launch", "Business", "Enterprise"];
    } else if (lowerCasePlan === "premium") {
      displayPlans = ["Premium", "Launch", "Business", "Enterprise"];
    }
  }
  return <Note>
Available on {displayPlans.length === 1 ? "the " : ""}
{displayPlans.join(", ").replace(/\b\w/g, l => l.toUpperCase())}{" "}
{displayPlans.length > 1 ? "plans" : "plan"}.

{maxPackRequired && <span onClick={() => window.open('https://www.ayrshare.com/docs/additional/maxpack', '_self')} className="flex items-center mt-2 cursor-pointer">
 <span className="px-1.5 py-0.5 rounded text-sm" style={{
    backgroundColor: '#C264B6',
    color: 'white',
    fontSize: '12px'
  }}>
   Max Pack required
 </span>
</span>}
</Note>;
};

<PlansAvailable plans={["premium"]} maxPackRequired={false} />

API kiểm duyệt nội dung được thiết kế để giúp các nhà phát triển xác định nội dung văn bản có khả năng gây hại hoặc không phù hợp.
Endpoint này phân tích đầu vào văn bản và phân loại dựa trên các loại nội dung đáng lo ngại khác nhau.

## Tính năng chính

<ul className="custom-bullets">
  <li>Tự động phát hiện nội dung có hại.</li>
  <li>Nhiều danh mục văn bản có vấn đề.</li>
  <li>Dễ dàng tích hợp để lọc nội dung.</li>
</ul>

## Cách thức hoạt động

Khi bạn gửi văn bản đến endpoint kiểm duyệt, nó sử dụng các mô hình OpenAI để phân tích nội dung. Sau đó, API trả về kết quả cho biết văn bản có thuộc bất kỳ danh mục có vấn đề nào đã được xác định hay không.

## Các danh mục nội dung có hại

API phân loại văn bản vào các danh mục sau:

| DANH MỤC               | MÔ TẢ                                                                                                                                                                                                                                                                              |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| hate                   | Nội dung thể hiện, kích động hoặc thúc đẩy sự thù ghét dựa trên chủng tộc, giới tính, dân tộc, tôn giáo, quốc tịch, khuynh hướng tình dục, tình trạng khuyết tật hoặc đẳng cấp. Nội dung thù ghét nhắm vào các nhóm không được bảo vệ (ví dụ: người chơi cờ) được coi là quấy rối. |
| hate/threatening       | Nội dung thù ghét cũng bao gồm bạo lực hoặc gây hại nghiêm trọng đối với nhóm được nhắm mục tiêu dựa trên chủng tộc, giới tính, dân tộc, tôn giáo, quốc tịch, khuynh hướng tình dục, tình trạng khuyết tật hoặc đẳng cấp.                                                          |
| harassment             | Nội dung thể hiện, kích động hoặc thúc đẩy ngôn ngữ quấy rối đối với bất kỳ mục tiêu nào.                                                                                                                                                                                          |
| harassment/threatening | Nội dung quấy rối cũng bao gồm bạo lực hoặc gây hại nghiêm trọng đối với bất kỳ mục tiêu nào.                                                                                                                                                                                      |
| self-harm              | Nội dung thúc đẩy, khuyến khích hoặc mô tả các hành vi tự làm hại bản thân, như tự tử, tự cắt và rối loạn ăn uống.                                                                                                                                                                 |
| self-harm/intent       | Nội dung mà người nói bày tỏ rằng họ đang tham gia hoặc có ý định tham gia vào các hành vi tự làm hại bản thân, như tự tử, tự cắt và rối loạn ăn uống.                                                                                                                             |
| self-harm/instructions | Nội dung khuyến khích thực hiện các hành vi tự làm hại bản thân, như tự tử, tự cắt và rối loạn ăn uống, hoặc đưa ra hướng dẫn hoặc lời khuyên về cách thực hiện các hành vi đó.                                                                                                    |
| sexual                 | Nội dung nhằm mục đích kích thích tình dục, như mô tả hoạt động tình dục, hoặc quảng cáo các dịch vụ tình dục (không bao gồm giáo dục giới tính và sức khỏe).                                                                                                                      |
| sexual/minors          | Nội dung tình dục bao gồm một cá nhân dưới 18 tuổi.                                                                                                                                                                                                                                |
| violence               | Nội dung mô tả cái chết, bạo lực hoặc thương tích thể chất.                                                                                                                                                                                                                        |
| violence/graphic       | Nội dung mô tả cái chết, bạo lực hoặc thương tích thể chất một cách chi tiết.                                                                                                                                                                                                      |

## Sử dụng và Thực hành tốt nhất

1. **Độ dài văn bản tối ưu**: Để có kết quả tốt nhất, chúng tôi khuyến nghị chia văn bản dài thành các đoạn nhỏ hơn. Nhắm đến các đoạn dưới 2.000 ký tự mỗi đoạn.
2. **Tích hợp**: Sử dụng API này để tự động gắn cờ nội dung có khả năng gây vấn đề trong các ứng dụng, diễn đàn hoặc nền tảng nội dung do người dùng tạo.
3. **Hành động dựa trên kết quả**: Dựa trên đầu ra của API, bạn có thể thực hiện các hành động phù hợp như lọc nội dung, cảnh báo người dùng hoặc các quy trình xem xét thêm.

## Tham số Header

<HeaderAPI noProfileKey={true} />

## Tham số Body

<ParamField body="text" type="string">
  Văn bản để phân tích kiểm duyệt.
</ParamField>

<ParamField body="imageUrl" type="string">
  URL của hình ảnh. Phải bắt đầu bằng `https://`.
</ParamField>

<RequestExample>
  ```bash cURL theme={"system"}
  curl --location 'https://api.ayrshare.com/api/validate/moderation' \
  --header 'Authorization: Bearer API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
      "text": "Let'\''s kill '\''em all"
  }'
  ```

  ```javascript JavaScript theme={"system"}
  const url = "https://api.ayrshare.com/api/validate/moderation";
  const apiKey = "API_KEY"; // Replace with your actual API key

  const data = {
    text: "Let's kill 'em all",
  };

  fetch(url, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${apiKey}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(data),
  })
    .then((response) => response.json())
    .then((result) => console.log(result))
    .catch((error) => console.error("Error:", error));
  ```

  ```python Python theme={"system"}
  import requests

  url = 'https://api.ayrshare.com/api/validate/moderation'
  api_key = 'API_KEY'  # Replace with your actual API key

  headers = {
      'Authorization': f'Bearer {api_key}',
      'Content-Type': 'application/json'
  }

  data = {
      'text': "Let's kill 'em all"
  }

  response = requests.post(url, json=data, headers=headers)

  if response.status_code == 200:
      result = response.json()
      print(result)
  else:
      print(f"Error: {response.status_code}")
      print(response.text)
  ```

  ```php PHP theme={"system"}
  <?php

  $url = 'https://api.ayrshare.com/api/validate/moderation';
  $apiKey = 'API_KEY';  // Replace with your actual API key

  $data = [
      'text' => "Let's kill 'em all"
  ];

  $headers = [
      'Authorization: Bearer ' . $apiKey,
      'Content-Type: application/json'
  ];

  $ch = curl_init($url);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

  $response = curl_exec($ch);

  if (curl_errno($ch)) {
      echo 'Error: ' . curl_error($ch);
  } else {
      $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      if ($httpCode == 200) {
          $result = json_decode($response, true);
          print_r($result);
      } else {
          echo "Error: HTTP Code " . $httpCode . "\n";
          echo $response;
      }
  }
  ```

  ```go Go theme={"system"}
  package main

  import (
  	"bytes"
  	"encoding/json"
  	"fmt"
  	"io/ioutil"
  	"net/http"
  )

  func main() {
  	url := "https://api.ayrshare.com/api/validate/moderation"
  	apiKey := "API_KEY" // Replace with your actual API key

  	// Create the request body
  	requestBody, err := json.Marshal(map[string]string{
  		"text": "Let's kill 'em all",
  	})
  	if err != nil {
  		fmt.Println("Error creating request body:", err)
  		return
  	}

  	// Create a new request
  	req, err := http.NewRequest("POST", url, bytes.NewBuffer(requestBody))
  	if err != nil {
  		fmt.Println("Error creating request:", err)
  		return
  	}

  	// Set headers
  	req.Header.Set("Authorization", "Bearer "+apiKey)
  	req.Header.Set("Content-Type", "application/json")

  	// Send the request
  	client := &http.Client{}
  	resp, err := client.Do(req)
  	if err != nil {
  		fmt.Println("Error sending request:", err)
  		return
  	}
  	defer resp.Body.Close()

  	// Read the response
  	body, err := ioutil.ReadAll(resp.Body)
  	if err != nil {
  		fmt.Println("Error reading response:", err)
  		return
  	}

  	// Check the status code
  	if resp.StatusCode == http.StatusOK {
  		fmt.Println("Response:")
  		fmt.Println(string(body))
  	} else {
  		fmt.Printf("Error: Status Code %d\n", resp.StatusCode)
  		fmt.Println(string(body))
  	}
  }
  ```

  ```csharp C# theme={"system"}
  using System;
  using System.Net.Http;
  using System.Text;
  using System.Threading.Tasks;
  using System.Text.Json;

  class Program
  {
      static async Task Main(string[] args)
      {
          string url = "https://api.ayrshare.com/api/validate/moderation";
          string apiKey = "API_KEY";  // Replace with your actual API key

          var data = new
          {
              text = "Let's kill 'em all"
          };

          using (var client = new HttpClient())
          {
              client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");

              var content = new StringContent(JsonSerializer.Serialize(data), Encoding.UTF8, "application/json");

              try
              {
                  HttpResponseMessage response = await client.PostAsync(url, content);

                  if (response.IsSuccessStatusCode)
                  {
                      string result = await response.Content.ReadAsStringAsync();
                      Console.WriteLine("Response:");
                      Console.WriteLine(result);
                  }
                  else
                  {
                      Console.WriteLine($"Error: {response.StatusCode}");
                      Console.WriteLine(await response.Content.ReadAsStringAsync());
                  }
              }
              catch (HttpRequestException e)
              {
                  Console.WriteLine($"Request error: {e.Message}");
                  Console.WriteLine($"InnerException: {e.InnerException?.Message}"); // Include inner exception details for more information
              }
          }
      }
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 200: Response theme={"system"}
  {
    "status": "success",
    "text": "Let's kill 'em all",
    "moderation": [
      {
        "flagged": true,
        "categories": {
          "sexual": false,
          "hate": false,
          "harassment": false,
          "self-harm": false,
          "sexual/minors": false,
          "hate/threatening": false,
          "violence/graphic": false,
          "self-harm/intent": false,
          "self-harm/instructions": false,
          "harassment/threatening": false,
          "violence": true
        },
        "categoryScores": {
          "sexual": 0.00002128273445123341,
          "hate": 0.027735227718949318,
          "harassment": 0.08523011207580566,
          "self-harm": 0.0000021838018255948555,
          "sexual/minors": 1.924875903114298e-7,
          "hate/threatening": 0.0063302298076450825,
          "violence/graphic": 0.00024857991957105696,
          "self-harm/intent": 7.833968993509188e-7,
          "self-harm/instructions": 8.686130570367823e-8,
          "harassment/threatening": 0.07459623366594315,
          "violence": 0.9833663702011108
        }
      }
    ]
  }
  ```

  ```json 400: Bad Request theme={"system"}
  {
    "action": "generate",
    "status": "error",
    "code": 331,
    "message": "There was an issue with the AI processing. Please try again and if the issue persists, contact us."
  }
  ```
</ResponseExample>
