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

# Content moderation with TypeScript

> Learn how to moderate content using Moderation API's TypeScript SDK

***

<Snippet file="prerequisites.mdx" />

***

## 1. Install the SDK

<CodeGroup>
  ```bash npm theme={"theme":"nord"}
  npm install @moderation-api/sdk
  ```

  ```bash yarn theme={"theme":"nord"}
  yarn add @moderation-api/sdk
  ```

  ```bash pnpm theme={"theme":"nord"}
  pnpm add @moderation-api/sdk
  ```
</CodeGroup>

## 2. Submit content

Grab the API key from your [project](https://dash.moderationapi.com) and begin submitting text, images, or other media to your project for moderation.

<CodeGroup>
  ```typescript Text moderation theme={"theme":"nord"}
  import ModerationAPI from "@moderation-api/sdk";

  // Option 1: Use environment variable MODAPI_SECRET_KEY
  const moderationApi = new ModerationAPI();

  // Option 2: Pass key explicitly
  // const moderationApi = new ModerationAPI({ secretKey: 'proj_...' });

  // Submit text for moderation
  const result = await moderationApi.content.submit({
    content: {
      type: "text",
      text: "Hello world!",
    },
    contentId: "message-123",
    authorId: "user-123",
    conversationId: "room-456",
    metadata: {
      customField: "value",
    },
  });

  // Simple boolean check
  if (result.evaluation.flagged) {
    console.warn("Text content flagged");
    // Block the content, show an error, etc...
  }

  // Use the API's recommendation (considers severity, thresholds, and more)
  switch (result.recommendation.action) {
    case "reject":
      console.log("Content should be rejected");
      break;
    case "review":
      console.log("Content needs manual review");
      break;
    case "allow":
      console.log("Content is approved");
      break;
  }
  ```

  ```typescript Image moderation theme={"theme":"nord"}
  import ModerationAPI from "@moderation-api/sdk";

  // Configure your client using environment variable MODAPI_SECRET_KEY
  const moderationApi = new ModerationAPI();

  // Submit image for moderation
  const result = await moderationApi.content.submit({
    content: {
      type: "image",
      url: "https://example.com/image.jpg",
    },
    contentId: "image-456",
    authorId: "user-123",
    metadata: {
      customField: "value",
    },
  });

  // Check if content was flagged
  if (result.evaluation.flagged) {
    console.warn("Image content flagged");
    // Block or require review
  }

  // Use the API's recommendation
  if (result.recommendation.action === "reject") {
    console.log("Image should be blocked");
  } else if (result.recommendation.action === "review") {
    console.log("Image needs manual review");
  } else {
    console.log("Image is approved");
  }
  ```

  ```typescript Object moderation theme={"theme":"nord"}
  import ModerationAPI from "@moderation-api/sdk";

  // Configure your client using environment variable MODAPI_SECRET_KEY
  const moderationApi = new ModerationAPI();

  // Submit object (complex data) for moderation
  const result = await moderationApi.content.submit({
    content: {
      type: "object",
      data: {
        title: { type: "text", text: "Post title" },
        body: { type: "text", text: "Post content" },
        thumbnail: { type: "image", url: "https://example.com/thumb.jpg" },
      },
    },
    contentId: "post-789",
    authorId: "user-123",
    metadata: {
      customField: "value",
    },
  });

  // Check if content was flagged
  if (result.evaluation.flagged) {
    console.warn("Object content flagged");
    // Block or require review
  }

  // Use the API's recommendation
  switch (result.recommendation.action) {
    case "reject":
      console.log("Object should be rejected");
      break;
    case "review":
      console.log("Object needs manual review");
      break;
    case "allow":
      console.log("Object is approved");
      break;
  }
  ```
</CodeGroup>

***

<Snippet file="dry-run.mdx" />

***

<Snippet file="review-flagged.mdx" />

***

<Snippet file="all-done.mdx" />
