// Create a pinned message
const { message } = await channel.sendMessage({
text: "Important announcement",
pinned: true,
pin_expires: "2077-01-01T00:00:00Z",
});
// Pin an existing message for 120 seconds
await client.pinMessage(message, 120);
// Pin with a specific expiration date
await client.pinMessage(message, "2077-01-01T00:00:00Z");
// Pin indefinitely (remove expiration)
await client.pinMessage(message, null);
// Unpin a message
await client.unpinMessage(message);Pinned Messages
Pinned messages highlight important content in a channel. Use them for announcements, key information, or temporarily promoted content. Each channel can have multiple pinned messages, with optional expiration times.
Pinning and Unpinning Messages
Pin an existing message using pinMessage, or create a pinned message by setting pinned: true when sending.
let messageController = client.messageController(
cid: .init(type: .messaging, id: "general"),
messageId: "message-id"
)
// Pin message for 120 seconds
messageController.pin(.expirationTime(120))
// Pin to a specific date
messageController.pin(.expirationDate(Date()))
// Unpin message
messageController.unpin()Pin Parameters
| Name | Type | Description | Default | Optional |
|---|---|---|---|---|
| pinned | boolean | Whether the message is pinned | false | ✓ |
| pinned_at | string | Timestamp when the message was pinned | - | ✓ |
| pin_expires | string | Timestamp when the pin expires. Null means the message does not expire | null | ✓ |
| pinned_by | object | The user who pinned the message | - | ✓ |
Pinning a message requires the PinMessage permission. See Permission Resources and Default Permissions for details.
Retrieving Pinned Messages
Query a channel to retrieve the 10 most recent pinned messages from pinned_messages.
let channelController = client.channelController(for: .init(type: .messaging, id: "general"))
channelController.synchronize() { error in
if error == nil {
channelController.channel?.pinnedMessages
}
}Paginating Pinned Messages
Use the dedicated pinned messages endpoint to retrieve all pinned messages with pagination.
channelController.loadPinnedMessages(
pageSize: 10,
sorting: [.init(key: .pinnedAt, isAscending: false)],
pagination: .earlier(Date(), inclusive: true)) { result in
switch result {
case .success(let pinnedMessages):
print(pinnedMessages)
case .failure(let failure):
// Handle error
}
}
// Next page using message ID
let fetchedPinnedMessageId = ...
channelController.loadPinnedMessages(
pagination: .before(fetchedPinnedMessageId, inclusive: false)) { result in
// Handle result
}