Other APIs
This page covers Chat, Announcements, Hashtags, Invite codes, and Service Worker push notifications.
ChatApi
client.chat provides direct messages and group room messaging. All chat endpoints require authentication.
History and read state
// Recent DM conversation history
final dmHistory = await client.chat.history(limit: 10);
// Recent room message history
final roomHistory = await client.chat.history(limit: 10, room: true);
// Mark all messages as read
await client.chat.readAll();
Direct messages
// Send a message to a user
final msg = await client.chat.messages.createToUser(
toUserId: targetUserId,
text: 'Hello!',
);
// Attach a Drive file
final msg = await client.chat.messages.createToUser(
toUserId: targetUserId,
text: 'Here is the file.',
fileId: driveFileId,
);
// Delete a message
await client.chat.messages.delete(messageId: msg.id);
// React to a message
await client.chat.messages.react(messageId: msg.id, reaction: ':heart:');
// Remove a reaction
await client.chat.messages.unreact(messageId: msg.id, reaction: ':heart:');
Message timelines
// Direct message history with a user (cursor-based pagination)
final messages = await client.chat.messages.userTimeline(
userId: targetUserId,
limit: 20,
);
// Fetch older messages
final older = await client.chat.messages.userTimeline(
userId: targetUserId,
limit: 20,
untilId: messages.last.id,
);
// Room message timeline
final roomMessages = await client.chat.messages.roomTimeline(
roomId: roomId,
limit: 20,
);
Message search
final results = await client.chat.messages.search(
query: 'meeting',
limit: 20,
userId: targetUserId, // optional: restrict to one conversation
);
Chat rooms
// Create a room
final room = await client.chat.rooms.create(
name: 'Project Alpha',
description: 'Coordination channel',
);
// Update room details
await client.chat.rooms.update(
roomId: room.id,
name: 'Project Alpha — Active',
);
// Delete a room
await client.chat.rooms.delete(roomId: room.id);
// Join and leave
await client.chat.rooms.join(roomId: room.id);
await client.chat.rooms.leave(roomId: room.id);
// Mute/unmute a room
await client.chat.rooms.setMute(roomId: room.id, mute: true);
// Member list
final members = await client.chat.rooms.members(roomId: room.id, limit: 30);
// Rooms you own
final owned = await client.chat.rooms.owned(limit: 20);
// Rooms you have joined
final joined = await client.chat.rooms.joining(limit: 20);
Room invitations
// Invite a user to a room
await client.chat.rooms.invitationsCreate(
roomId: room.id,
userId: targetUserId,
);
// List received invitations
final inbox = await client.chat.rooms.invitationsInbox(limit: 20);
// List sent invitations for a room
final outbox = await client.chat.rooms.invitationsOutbox(
roomId: room.id,
limit: 20,
);
// Dismiss a received invitation
await client.chat.rooms.invitationsIgnore(roomId: room.id);
AnnouncementsApi
client.announcements retrieves server announcements. Authentication is optional;
when authenticated, each item includes an isRead flag.
// Active announcements (default)
final active = await client.announcements.list(limit: 10);
// Include inactive announcements too
final all = await client.announcements.list(isActive: false, limit: 20);
// Details for a single announcement
final ann = await client.announcements.show(announcementId: ann.id);
print(ann.title);
print(ann.text);
Paginate with sinceId, untilId, sinceDate, and untilDate.
Marking as read
Mark an announcement read via client.account:
await client.account.readAnnouncement(announcementId: ann.id);
HashtagsApi
client.hashtags provides hashtag lookup and trending data. No authentication is required.
Listing and searching
// Hashtags sorted by number of users who have posted them
final tags = await client.hashtags.list(
sort: '+mentionedUsers',
limit: 20,
);
// Prefix search — returns a list of tag name strings
final suggestions = await client.hashtags.search(
query: 'miss',
limit: 10,
);
Available sort values: +mentionedUsers / -mentionedUsers,
+mentionedLocalUsers / -mentionedLocalUsers,
+mentionedRemoteUsers / -mentionedRemoteUsers,
+attachedUsers / -attachedUsers,
+attachedLocalUsers / -attachedLocalUsers,
+attachedRemoteUsers / -attachedRemoteUsers.
Tag details and trends
// Detailed stats for one tag
final tag = await client.hashtags.show(tag: 'misskey');
print(tag.mentionedUsersCount);
// Trending tags (up to 10, cached 60 s)
final trending = await client.hashtags.trend();
for (final t in trending) {
print('${t.tag}: ${t.chart}');
}
Users for a tag
final users = await client.hashtags.users(
tag: 'misskey',
sort: '+follower',
limit: 20,
origin: 'local', // 'local', 'remote', or 'combined'
state: 'alive', // 'all' or 'alive'
);
InviteApi
client.invite manages invite codes on invitation-only servers. All endpoints require
authentication and the canInvite role policy.
// Create an invite code
final code = await client.invite.create();
print(code.code);
// Check remaining quota (null means unlimited)
final remaining = await client.invite.limit();
if (remaining != null) {
print('$remaining invite(s) remaining');
}
// List your issued codes
final codes = await client.invite.list(limit: 20);
// Delete a code
await client.invite.delete(inviteId: code.id);
SwApi
client.sw manages Service Worker push notification subscriptions. All endpoints require authentication.
Register
final registration = await client.sw.register(
endpoint: 'https://push.example.com/subscribe/abc123',
auth: 'auth-secret',
publickey: 'vapid-public-key',
);
print(registration.state); // 'subscribed' or 'already-subscribed'
Pass sendReadMessage: true to also receive read-message notifications.
Check registration
final sub = await client.sw.showRegistration(
endpoint: 'https://push.example.com/subscribe/abc123',
);
if (sub != null) {
print(sub.sendReadMessage);
}
Update settings
await client.sw.updateRegistration(
endpoint: 'https://push.example.com/subscribe/abc123',
sendReadMessage: false,
);
Unregister
await client.sw.unregister(
endpoint: 'https://push.example.com/subscribe/abc123',
);