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

# Jarvis Moderator

# Overview

Automate content moderation reduces the cost of your image, video, text, and voice moderation by accurately detecting inappropriate content.

Jarvis Moderator provides services through open application programming interfaces (APIs). You can obtain the inference result by calling APIs. It helps you build an intelligent service system and improves service efficiency.

* A software tool such as curl and Postman

These are good options if you are more comfortable writing code, HTTP requests, and API calls. For details, see Using Postman to Call Jarvis.

# Internationalization labels

The following content will be subject to review and detection to ensure compliance with relevant laws, regulations, and platform policies:

1. Advertising: Detects malicious advertising and redirection content to prevent users from being led to unsafe or inappropriate sites.
2. Violent Content: Detects violent or terrorist content to prevent the dissemination of harmful information.
3. Political Content: Reviews political content to ensure that it does not involve sensitive or inflammatory political information.
4. Specified Speech: Detects specified speech or voice content to identify and manage audio that meets certain conditions.
5. Specified Lyrics: Detects specified lyrics content to prevent the spread of inappropriate or harmful lyrics.
6. Sexual Content: Reviews content related to sexual behavior or sexual innuendo to protect users from inappropriate information.
7. Moaning Sounds: Detects sounds related to sexual activity, such as moaning, to prevent the spread of such audio.
8. Contraband: Identifies and blocks all illegal or prohibited content.
9. Profane Language: Reviews and filters content containing profanity or vulgar language.
10. Religious Content: Reviews religious content to avoid controversy or offense to specific religious beliefs.
11. Cyberbullying: Detects cyberbullying behavior to prevent such content from harming users.
12. Harmful or Inappropriate Content: Reviews and manages harmful or inappropriate content to maintain a safe and positive environment on the platform.
13. Silent Audio: Detects silent audio content to identify and address potential technical issues or other anomalies.
14. Customized Content: Allows users to define and review specific types of content according to business needs or compliance requirements.

This content will be thoroughly detected by our review system to ensure that all content on the platform meets the relevant standards and regulations.

# Subscribing to the Service

**NOTE:**
This service is available only to enterprise users now.

To subscribe to Jarvis Moderator, perform the following steps:

1. Register an AKOOL account.
2. Then click the picture icon in the upper right corner of the website, and click the “APl Credentials” function to set the key pair (clientId, clientSecret) used when accessing the API and save it.
3. Use the secret key pair just saved to send the api interface to obtain the access token.
4. Pricing:
   | **Content Type** | **Credits**         | **Pricing**             |
   | ---------------- | ------------------- | ----------------------- |
   | Text             | 0.1C/600 characters | 0.004USD/600 characters |
   | Image            | 0.2C/image          | 0.008USD/image          |
   | Audio            | 0.5C/min            | 0.02USD/min             |
   | Video            | 1C/min              | 0.04USD/min             |

### Jarvis Moderator

```
POST https://openapi.akool.com/api/open/v3/content/analysis/sentiment
```

**Request Headers**

| **Parameter** | **Value**        | **Description**                                                                                                                                                 |
| ------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| x-api-key     | API Key          | Your API Key used for request authorization. If both Authorization and x-api-key have values, Authorization will be used first and x-api-key will be discarded. |
| Authorization | Bearer `{token}` | Your API Key used for request authorization.[Get Token](/authentication/usage#get-the-token).                                                                   |

**Body Attributes**

| **Parameter** | **Type** | **Value** | **Description**                                                                                                                                               |
| ------------- | -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| content       | String   |           | url or text， when the content is a image, video, or audio, a url must be provided. When the content provided is text, it can be either text content or a url. |
| type          | Number   |           | 1: image  2:video  3: auido  4: text                                                                                                                          |
| language      | String   |           | When type=2 or 3 or 4, it is best to provide the language to ensure the accuracy of the results。 Supplying the input language in ISO-639-1 format             |
| webhookUrl    | String   |           | Callback url address based on HTTP request.                                                                                                                   |
| input         | String   | Optional  | The user defines the content to be detected in words                                                                                                          |

<Note>We restrict image to 20MB. we currently support PNG (.png), JPEG (.jpeg and .jpg), WEBP (.webp), and non-animated GIF (.gif).</Note>
<Note>We restrict audio to 25MB, 60minute.  we currently support .flac, .mp3, .mp4, .mpeg, .mpga, .m4a, .ogg, .wav, .webm</Note>
<Note>We restrict video to 1024MB, resolution limited to 1080p. we currently support .mp4, .avi</Note>
<Note> When the content provided is text, it can be either text content or a url. If it is url, we currently support .txt, .docx, .xml, .pdf, .csv, .md, .json </Note>

<Note>ISO-639-1: [https://en.wikipedia.org/wiki/List\_of\_ISO\_639\_language\_codes](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes)</Note>

**Response Attributes**

| **Parameter** | **Type** | **Value**                    | **Description**                                                                                                |
| ------------- | -------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------- |
| code          | int      | 1000                         | Interface returns business status code(1000:success)                                                           |
| msg           | String   |                              | Interface returns status information                                                                           |
| data          | Object   | `{ "_id": "", "status": 1 }` | `_id`: Interface returns data, status: the status of video： \[1:queueing, 2:processing, 3:completed, 4:failed] |

**Example**

**Body**

```json theme={null}
{
   
    "type":1,   // 1:image 2:video 3: auido 4:text
    "content":"https://drz0f01yeq1cx.cloudfront.net/1714023431475-food.jpg",
    "webhookUrl":""
}
```

**Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl --location 'https://openapi.akool.com/api/open/v3/content/analysis/sentiment' \
  --header "x-api-key: {{API Key}}" \
  --header 'Content-Type: application/json' \
  --data '{
     
      "type":1,
      "content":"https://drz0f01yeq1cx.cloudfront.net/1714023431475-food.jpg",


  }'
  ```

  ```java Java theme={null}
  OkHttpClient client = new OkHttpClient().newBuilder()
    .build();
  MediaType mediaType = MediaType.parse("application/json");
  RequestBody body = RequestBody.create(mediaType, "{\n   \n    \"type\":1,\n    \"content\":\"https://drz0f01yeq1cx.cloudfront.net/1714023431475-food.jpg\"\n\n}");
  Request request = new Request.Builder()
    .url("https://openapi.akool.com/api/open/v3/content/analysis/sentiment")
    .method("POST", body)
    .addHeader("x-api-key", "{{API Key}}")
    .addHeader("Content-Type", "application/json")
    .build();
  Response response = client.newCall(request).execute();
  ```

  ```js Javascript theme={null}
  const myHeaders = new Headers();
  myHeaders.append("x-api-key", "{{API Key}}");
  myHeaders.append("Content-Type", "application/json");

  const raw = JSON.stringify({
    "type": 1,
    "content": "https://drz0f01yeq1cx.cloudfront.net/1714023431475-food.jpg"
  });

  const requestOptions = {
    method: "POST",
    headers: myHeaders,
    body: raw,
    redirect: "follow"
  };

  fetch("https://openapi.akool.com/api/open/v3/content/analysis/sentiment", requestOptions)
    .then((response) => response.text())
    .then((result) => console.log(result))
    .catch((error) => console.error(error));
  ```

  ```php PHP  theme={null}
  <?php
  $client = new Client();
  $headers = [
    'x-api-key' =>'{{API Key}}',
    'Content-Type' => 'application/json'
  ];
  $body = '{
    "type": 1,
    "content": "https://drz0f01yeq1cx.cloudfront.net/1714023431475-food.jpg"
  }';
  $request = new Request('POST', 'https://openapi.akool.com/api/open/v3/content/analysis/sentiment', $headers, $body);
  $res = $client->sendAsync($request)->wait();
  echo $res->getBody();

  ```

  ```python Python  theme={null}
  import requests
  import json

  url = "https://openapi.akool.com/api/open/v3/content/analysis/sentiment"

  payload = json.dumps({
    "type": 1,
    "content": "https://drz0f01yeq1cx.cloudfront.net/1714023431475-food.jpg"
  })
  headers = {
    'x-api-key':'{{API Key}}',
    'Content-Type': 'application/json'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)

  ```
</CodeGroup>

**Response**

```json theme={null}
{
    "code": 1000,
    "msg": "OK",
    "data": {
        "create_time": 1710757900382,
        "uid": 101690,
        "type": 1,
        "status": 1,   // current status of content： 【1：queueing（The requested operation is being processed），2：processing（The requested operation is being processing），3：completed（The request operation has been processed successfully），4：failed（The request operation processing failed）】
        "webhookUrl": "",
        "result": "",
        "_id": "65f8180c24d9989e93dde3b6",
        "__v": 0
    }
}
```

### Get  analysis  Info Result

```
GET https://openapi.akool.com/api/open/v3/content/analysis/infobyid?_id=662df7928ee006bf033b64bf
```

**Request Headers**

| **Parameter** | **Value**        | **Description**                                                                                                                                                 |
| ------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| x-api-key     | API Key          | Your API Key used for request authorization. If both Authorization and x-api-key have values, Authorization will be used first and x-api-key will be discarded. |
| Authorization | Bearer `{token}` | Your API Key used for request authorization.[Get Token](/authentication/usage#get-the-token)                                                                    |

**Query Attributes**

| **Parameter** | **Type** | **Value** | **Description**                                                                                                                                |
| ------------- | -------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| \_id          | String   | NULL      | video db id: You can get it based on the `_id` field returned by [Sentiment Analysis API](/ai-tools-suite/jarvis-moderator#jarvis-moderator) . |

**Response Attributes**

| **Parameter** | **Type** | **Value**                                               | **Description**                                                                                                                                                                                                                                                                   |
| ------------- | -------- | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| code          | int      | 1000                                                    | Interface returns business status code(1000:success)                                                                                                                                                                                                                              |
| msg           | String   | OK                                                      | Interface returns status information                                                                                                                                                                                                                                              |
| data          | Object   | `{ status:1, _id:"", result:"", final_conclusion: "" }` | video\_status: the status of video：【1:queueing, 2:processing, 3:completed, 4:failed】 result:  sentiment analysis result【Related information returned by the detection content】 final\_conclusion: final conclusion.【Non-Compliant、Compliant、Unknown】 \_id: Interface returns data |

**Example**

**Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl --location 'https://openapi.akool.com/api/open/v3/content/analysis/infobyid?_id=662e20b93baa7aa53169a325' \
  --header "x-api-key: {{API Key}}"
  ```

  ```java Java theme={null}
  OkHttpClient client = new OkHttpClient().newBuilder()
    .build();
  MediaType mediaType = MediaType.parse("text/plain");
  RequestBody body = RequestBody.create(mediaType, "");
  Request request = new Request.Builder()
    .url("https://openapi.akool.com/api/open/v3/content/analysis/infobyid?_id=662e20b93baa7aa53169a325")
    .method("GET", body)
    .addHeader("x-api-key", "{{API Key}}")
    .build();
  Response response = client.newCall(request).execute();
  ```

  ```js Javascript theme={null}
  const myHeaders = new Headers();
  myHeaders.append("x-api-key", "{{API Key}}");

  const requestOptions = {
    method: "GET",
    headers: myHeaders,
    redirect: "follow"
  };

  fetch("https://openapi.akool.com/api/open/v3/content/analysis/infobyid?_id=662e20b93baa7aa53169a325", requestOptions)
    .then((response) => response.text())
    .then((result) => console.log(result))
    .catch((error) => console.error(error));
  ```

  ```php PHP  theme={null}
  <?php
  <?php
  $client = new Client();
  $headers = [
    'x-api-key' =>'{{API Key}}'
  ];
  $request = new Request('GET', 'https://openapi.akool.com/api/open/v3/content/analysis/infobyid?_id=662e20b93baa7aa53169a325', $headers);
  $res = $client->sendAsync($request)->wait();
  echo $res->getBody();

  ```

  ```python Python  theme={null}
  import requests

  url = "https://openapi.akool.com/api/open/v3/content/analysis/infobyid?_id=662e20b93baa7aa53169a325"

  payload = {}
  headers = {
    'x-api-key':'{{API Key}}'
  }

  response = requests.request("GET", url, headers=headers, data=payload)

  print(response.text)

  ```
</CodeGroup>

**Response**

```json theme={null}

{
    "code": 1000,
    "msg": "OK",
    "data": {
        "_id": "662e20b93baa7aa53169a325",
        "uid": 100002,
        "status": 3,
        "result": "- violence: Presence of a person holding a handgun, which can be associated with violent content.\nResult: Non-Compliant",
        "final_conclusion" :"Non-Compliant"   // Non-Compliant、Compliant、Unknown
    }
}
```

**Response Code Description**

<Note> Please note that if the value of the response code is not equal to 1000, the request is failed or wrong</Note>

| **Parameter** | **Value** | **Description**                                                                    |
| ------------- | --------- | ---------------------------------------------------------------------------------- |
| code          | 1000      | Success                                                                            |
| code          | 1003      | Parameter error  or Parameter can not be empty                                     |
| code          | 1008      | The content you get does not exist                                                 |
| code          | 1009      | You do not have permission to operate                                              |
| code          | 1101      | Invalid authorization or The request token has expired                             |
| code          | 1102      | Authorization cannot be empty                                                      |
| code          | 1200      | The account has been banned                                                        |
| code          | 1201      | create audio error, please try again later                                         |
| code          | 1202      | The same video cannot be translated lipSync in the same language more than 1 times |
| code          | 1203      | video should be with audio                                                         |
