---
source_url: https://www.pubnub.com/docs/chat/sdks/moderation/flags
title: Report offensive messages (deprecated)
updated_at: 2026-06-12T11:23:08.576Z
---

> Documentation Index
> For a curated overview of PubNub documentation, see: https://www.pubnub.com/docs/llms.txt
> For the full list of all documentation pages, see: https://www.pubnub.com/docs/llms-full.txt


# Report offensive messages (deprecated)

:::warning Use Chat SDKs
This documentation is deprecated. Use any of our dedicated [Chat SDKs](https://www.pubnub.com/docs/chat/overview) to quickly implement chat functionality in your application.
:::

PubNub provides a mechanism for users to report offensive content in messages directly from their applications. A moderator can then fetch these flagged messages from Message Persistence and either delete them or take appropriate action against the users who sent the messages.

:::note User ID / UUID
User ID is also referred to as **UUID/uuid** in some APIs and server responses but **holds the value** of the **userId** parameter you [set during initialization](https://www.pubnub.com/docs/general/setup/users-and-devices#set-the-user-id).
:::

## Flag messages

Use the `addMessageAction` method to add a flag as an action to a published message. The flag is stored and linked to the original message, so you can see if messages are flagged or not when you fetch them from Message Persistence.

### JavaScript

```js
pubnub.addMessageAction(
  {
    channel: 'ch-1'
    messageTimetoken: '15610547826970040',
    action: {
      type: 'flagged',
      value: 'message is inappropriate',
    },
  },
  function(status, response) {

  }
);
```

### Swift

```swift
extension MyAppMessageAction: MessageAction {}

let action = MyAppMessageAction(type: "flagged", value: "message is inappropriate")

pubnub.addMessageAction(
  channel: "ch-1",
  message: action,
  messageTimetoken: 15610547826969050
) { result in
  switch result {
  case let .success(response):
    print("Successfully Message Reaction Add Response: \(response)")
  case let .failure(error):
    print("Error from failed response: \(error.localizedDescription)")
  }
})
```

### Java

```java
pubnub.addMessageAction()
    .channel("ch-1")
    .messageAction(new PNMessageAction()
            .setType("flagged")
            .setValue("message is inappropriate")
            .setMessageTimetoken(15701761818730000L)
    )
    .async(result -> {
        result.onSuccess(res -> {
                System.out.println(res.getType());
                System.out.println(res.getValue());
                System.out.println(res.getUserId());
                System.out.println(res.getActionTimetoken());
                System.out.println(res.getMessageTimetoken());
        }).onFailure(exception -> {
            exception.printStackTrace();
        });
    });
```

### Unity

```csharp
MessageActionAdd messageAct = new MessageActionAdd();
messageAct.ActionType = "flagged";
messageAct.ActionValue = "message is inappropriate";

pubnub.AddMessageActions().Channel("ch-1").MessageAction(messageAct).MessageTimetoken(15701761818730000).Async((result, status) => {
        if (!status.Error) {
            Debug.Log("result.ActionTimetoken: " + result.ActionTimetoken);
            Debug.Log("result.ActionType: " + result.ActionType);
            Debug.Log("result.ActionValue: " + result.ActionValue);
            Debug.Log("result.MessageTimetoken: " + result.MessageTimetoken);
            Debug.Log("result.UserID: " + result.UserID);
        } else {
            Debug.Log(status.Error);
            Debug.Log(status.ErrorData.Info);
        }
});
```

## Unflag messages

Use the `removeMessageAction` method to remove a flag from a message.

### JavaScript

```js
pubnub.removeMessageAction(
{
    channel: 'ch-1'
    messageTimetoken: '15610547826970040',
    actionTimetoken: '15610547826970040',
},
function(status, response) {
}
);
```

### Swift

```swift
pubnub.removeMessageActions(
  channel: "ch-1",
  message: 15610547826969050,
  action: 15610547826970050
) { result in
  switch result {
  case let .success(response):
    print("Successfully Message Reaction Remove Response: \(response)")
  case let .failure(error):
    print("Error from failed response: \(error.localizedDescription)")
  }
})
```

### Java

```java
pubnub.removeMessageAction()
    .channel("ch-1")
    .messageTimetoken(15701761818730000L)
    .actionTimetoken(15701775691010000L)
    .async(result -> { /* check result */ });
```

### Unity

```csharp
pubnub.RemoveMessageActions().ActionTimetoken(15701775691010000).Channel("ch-1").MessageTimetoken(15701761818730000).Async((result, status) => {
        if (!status.Error) {
            // result has no actionable data
        } else {
            Debug.Log(status.Error);
            Debug.Log(status.ErrorData.Info);
        }
});
```

## Flagging Events

PubNub triggers events when flags are added or removed. Users that are subscribed to channels will receive these events.

Message reaction added:

```json
{
   "channel":"my_channel",
   "subscription":null,
   "timetoken":"15871508399473609",
   "publisher":"user-1",
   "message":{
      "source":"actions",
      "version":"1.0",
      "action":"added",
      "data":{
         "type":"flagged",
         "value":"message is inappropriate",
         "messageTimetoken":"15632184115444390",
         "actionTimetoken":"15632184115444394"
      }
   }
}
```

Message reaction removed:

```json
{
   "channel":"my_channel",
   "subscription":null,
   "timetoken":"15871508399473609",
   "publisher":"user-1",
   "message":{
      "source":"actions",
      "version":"1.0",
      "action":"removed",
      "data":{
         "type":"flagged",
         "value":"message is inappropriate",
         "messageTimetoken":"15632184115444390",
         "actionTimetoken":"15632184115444394"
      }
   }
}
```