# Silent & System Messages

Silent and system messages provide ways to add informational content to channels without disrupting users.

## Silent Messages

Silent messages do not increment unread counts or mark channels as unread. Use them for transactional or automated content such as:

- "Your ride is waiting"
- "James updated the trip information"
- "You and Jane are now matched"

Set `silent: true` when sending a message.

<Tabs>

```js label="JavaScript"
const message = {
  text: "You completed your trip",
  user: systemUser,
  silent: true,
  attachments: [{ type: "trip", ...tripData }],
};
await channel.sendMessage(message);
```

```kotlin label="Kotlin"
val message = Message(
  text = "You and Jane are now matched!",
  user = systemUser,
  silent = true,
)
channelClient.sendMessage(message).enqueue { /* ... */ }
```

```swift label="Swift"
let channelController = client.channelController(for: .init(type: .messaging, id: "general"))
channelController.createNewMessage(text: "You completed your trip", isSilent: true)
```

```dart label="Dart"
final message = Message(
  text: 'You completed your trip',
  user: systemUser,
  silent: true,
  attachments: tripAttachments,
);
await channel.sendMessage(message);
```

```java label="Java"
// Android SDK
Message message = new Message();
message.setText("You and Jane are now matched!");
message.setUser(systemUser);
message.setSilent(true);

channelClient.sendMessage(message).enqueue(result -> { /* ... */ });

// Backend SDK
chat.sendMessage(type, id, SendMessageRequest.builder()
    .message(MessageRequest.builder()
        .text("You completed your trip")
        .userID(systemUserId)
        .silent(true)
        .build())
    .build()).execute();
```

```python label="Python"
from getstream.models import MessageRequest

channel.send_message(
    MessageRequest(text="You completed your trip", silent=True, user_id=user_id)
)
```

```php label="PHP"
$client->sendMessage("messaging", "general", new Models\SendMessageRequest(
    message: new Models\MessageRequest(
        text: "You completed your trip",
        silent: true,
        userID: "jenny",
    ),
));
```

```ruby label="Ruby"
require 'getstream_ruby'
Models = GetStream::Generated::Models

client.chat.send_message('messaging', channel_id, Models::SendMessageRequest.new(
  message: Models::MessageRequest.new(
    text: 'You completed your trip',
    silent: true,
    user_id: user_id
  )
))
```

```go label="Go"
channel.SendMessage(ctx, &getstream.SendMessageRequest{
  Message: getstream.MessageRequest{
    Text:   getstream.PtrTo("You completed your trip"),
    Silent: getstream.PtrTo(true),
    UserID: getstream.PtrTo(userID),
  },
})
```

```csharp label="C#"
var resp = await chat.SendMessageAsync("messaging", channelId,
    new SendMessageRequest
    {
        Message = new MessageRequest
        {
            Text = "You completed your trip",
            UserID = userId,
            Silent = true
        }
    });
```

```csharp label="Unity"
var silentMessage = await channel.SendNewMessageAsync(new StreamSendMessageRequest
{
  Text = "System message",
  Silent = true
});
```

```cpp label="Unreal"
FMessage Message{TEXT("You completed your trip")};
Message.User = SystemUser;
Message.bIsSilent = true;
Channel->SendMessage(Message);
```

</Tabs>

<admonition type="info">

Existing messages cannot be converted to silent messages.

</admonition>

<admonition type="info">

Silent replies still increment the parent message's `reply_count`.

</admonition>

<admonition type="info">

Silent messages still trigger push notifications by default. Set `skip_push: true` to disable push notifications. See [Messages Overview](/chat/docs/dotnet-csharp/send-message/) for details.

</admonition>

## System Messages

System messages have a distinct visual presentation, typically styled differently from user messages. Set `type: "system"` to create a system message.

Stream's UI SDKs include default styling for system messages. However, customizing their appearance is common to match your application's design. See your platform's UI customization documentation for details on styling system messages.

Client-side users require the `Create System Message` permission. Server-side system messages do not require this permission.

<Tabs>

```js label="JavaScript"
const message = {
  text: "You completed your trip",
  user: systemUser,
  type: "system",
};
await channel.sendMessage(message);
```

```java label="Java"
// Backend SDK
chat.sendMessage(type, id, SendMessageRequest.builder()
    .message(MessageRequest.builder()
        .text(text)
        .type("system")
        .userID(systemUserId)
        .build())
    .build()).execute();
```

```python label="Python"
from getstream.models import MessageRequest

channel.send_message(
    MessageRequest(text="You completed your trip", type="system", user_id=user_id)
)
```

```php label="PHP"
$client->sendMessage("messaging", "general", new Models\SendMessageRequest(
    message: new Models\MessageRequest(
        text: "You completed your trip",
        type: "system",
        userID: "jenny",
    ),
));
```

```ruby label="Ruby"
require 'getstream_ruby'
Models = GetStream::Generated::Models

client.chat.send_message('messaging', channel_id, Models::SendMessageRequest.new(
  message: Models::MessageRequest.new(
    text: 'You completed your trip',
    type: 'system',
    user_id: user_id
  )
))
```

```go label="Go"
resp, err := channel.SendMessage(ctx, &getstream.SendMessageRequest{
  Message: getstream.MessageRequest{
    Text:   getstream.PtrTo("You completed your trip"),
    Type:   getstream.PtrTo("system"),
    UserID: getstream.PtrTo(systemUserID),
  },
})
```

</Tabs>


---

This page was last updated at 2026-05-22T16:32:16.367Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/dotnet-csharp/silent-messages/](https://getstream.io/chat/docs/dotnet-csharp/silent-messages/).