API reference
Mirage
/ v1/ hooks/ messaging/ servers/ :serverId/ iconA server's icon image (a redirect, cached for 50 minutes); 404 when it has none or uses an emoji. No authentication.
- Auth
- None.
Path parameters
serverIdMirage server id (
gld_…).
Errors
404No icon.
curl 'https://api.cactive.com.au/v1/hooks/messaging/servers/{serverId}/icon'/ v1/ hooks/ messaging/ emojis/ :emojiIdAn emoji's image (a redirect, cached for 50 minutes): a server's (mem_…), or one of Discord's copied across the bridge (dce_<id>). No authentication.
- Auth
- None.
Path parameters
emojiIdMirage emoji id (
mem_…).
Errors
404Emoji not found.
curl 'https://api.cactive.com.au/v1/hooks/messaging/emojis/{emojiId}'/ v1/ hooks/ messaging/ stickers/ :stickerIdA sticker's image (a redirect): a server's (mst_…), or one of Discord's copied across the bridge (dst_<id>). No authentication.
- Auth
- None.
Path parameters
stickerIdMirage sticker id (
mst_…; Discord's from the bridge aredst_<id>).
Errors
404Sticker not found.
curl 'https://api.cactive.com.au/v1/hooks/messaging/stickers/{stickerId}'/ v1/ hooks/ messaging/ gif-preview/ :provider/ :sigA GIF picker preview (a redirect to Mirage's copy): u is one of the provider's media links as GET /v1/messaging/gifs signed it; copied into Mirage's files once, so viewers never load the provider's hosts. No authentication.
- Auth
- None.
Path parameters
providerGIF provider:
klipyorgiphy.sigMirage's signature of the preview link (
u), fromGET /v1/messaging/gifs.
Query parameters
ustringDefault
"".
Errors
404Preview not found.
curl 'https://api.cactive.com.au/v1/hooks/messaging/gif-preview/{provider}/{sig}'/ v1/ hooks/ messaging/ sounds/ :soundIdA sound's file (a redirect). No authentication.
- Auth
- None.
Path parameters
soundIdMirage soundboard sound id (
msd_…).
Errors
404Sound not found.
curl 'https://api.cactive.com.au/v1/hooks/messaging/sounds/{soundId}'/ v1/ hooks/ messaging/ servers/ :serverId/ pageA community server's public page (when its owners turned it on): name, icon, banner, description, traits, member count and a lasting invite. No authentication.
- Auth
- None.
Path parameters
serverIdMirage server id (
gld_…).
curl 'https://api.cactive.com.au/v1/hooks/messaging/servers/{serverId}/page'Response 200
{
page: {
serverId: string
name: string
icon: null | string
banner: null | string
description: null | string
traits: {
label: string
emoji?: string
}[]
memberCount: number
createdAt: number
inviteUrl: null | string
}
}/ v1/ hooks/ messaging/ invites/ :codeAn invite's preview without signing in (link previews of the invite page): the server's name, icon, description, member and online counts; 404 when it's expired. Limited per address a minute. No authentication.
- Auth
- None.
Path parameters
codeMirage invite code (8 letters and digits); under
me/fooda household invitation's code (from its link).
curl 'https://api.cactive.com.au/v1/hooks/messaging/invites/{code}'Response 200
{
code: string
server: {
serverId: string
name: string
icon: null | string
description: null | string
memberCount: number
onlineCount: number
}
channel: {
channelId: string
name: null | string
}
member?: boolean
}/ v1/ hooks/ messaging/ incoming/ :webhookId/ :tokenPosts in the webhook's channel with Discord's payload: content (Markdown; people as <@usr_…>), username (instead of the webhook's name) and embeds (title, url, description, author, fields, footer: shown as a quote). JSON, or a form's payload_json. 204, or the message with ?wait=true. Up to 30 posts a minute by default (platform data); never pings roles or @everyone. The token in the URL is the only credential.
- Auth
- None.
Path parameters
webhookIdWebhook id (
whk_…).tokenA secret from a link: an issue automation rule's incoming-webhook token (shown once when issued), a map's share link, a notification recipient's confirm and unsubscribe link, a Drive public link (
/l/<token>), a Vehicles drive's share link, or a Mirage interaction's token (itk_…, sent with the interaction, good for 15 minutes), or the token in the link to a file of a message Mirage sent to Discord, or a Marketing link's sealed token (a tracked click, the open pixel, unsubscribe and the preference centre, a double opt-in confirmation); or a Food recipe's public link (/r/<token>) or a household's calendar feed.
Query parameters
waitstring
curl -X POST 'https://api.cactive.com.au/v1/hooks/messaging/incoming/{webhookId}/{token}'Response 200
{
message: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: {
name: string
id?: string
animated?: boolean
}
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object[]
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}
}Response 204 with no body
/ v1/ hooks/ messaging/ incoming/ :webhookId/ :token/ slackPosts in the webhook's channel with Slack's payload: text (mrkdwn), blocks (header, section, context, divider, rich text) and attachments (as quotes), username. JSON, or a form's payload. Answers ok. Up to 30 posts a minute.
- Auth
- None.
Path parameters
webhookIdWebhook id (
whk_…).tokenA secret from a link: an issue automation rule's incoming-webhook token (shown once when issued), a map's share link, a notification recipient's confirm and unsubscribe link, a Drive public link (
/l/<token>), a Vehicles drive's share link, or a Mirage interaction's token (itk_…, sent with the interaction, good for 15 minutes), or the token in the link to a file of a message Mirage sent to Discord, or a Marketing link's sealed token (a tracked click, the open pixel, unsubscribe and the preference centre, a double opt-in confirmation); or a Food recipe's public link (/r/<token>) or a household's calendar feed.
curl -X POST 'https://api.cactive.com.au/v1/hooks/messaging/incoming/{webhookId}/{token}/slack'/ v1/ messaging/ meYour Mirage profile: name, status, custom status and the order of your servers; whether your account shows you are 18 or over (adult), and whether age-restricted channels show in the phone app (ageRestrictedOnPhone).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
userId: string
name: string
status: "online" | "idle" | "dnd" | "invisible"
customStatus: null | string
serverOrder: string[]
adult: boolean
ageRestrictedOnPhone: boolean
}/ v1/ messaging/ meSets your status (online, idle, dnd, invisible), custom status or server order; your servers, friends and DM members hear the new status, and your other devices what you chose. ageRestrictedOnPhone shows age-restricted channels in the phone app: adults only, and never from the phone app itself (403).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
userId: string
name: string
status: "online" | "idle" | "dnd" | "invisible"
customStatus: null | string
serverOrder: string[]
adult: boolean
ageRestrictedOnPhone: boolean
}/ v1/ messaging/ socketA one-time ticket (a minute) and the socket URL: open <url>?ticket=<ticket> for live events from your servers. Send {"type":"ping"} within 10 minutes to keep it open, and {"type":"idle","idle":true} (or false) when nobody's using it: with every connection idle, an online person shows as idle.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/socket' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
ticket: string
url: null | string
expiresIn: number
}/ v1/ messaging/ presenceYour friends' and DM members' presence (status: online, idle, dnd or offline, with their custom status); servers' member lists carry their members'.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/presence' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
presence: {
at: number
status: "offline" | "online" | "idle" | "dnd"
customStatus?: string
userId: string
}[]
}/ v1/ messaging/ read-statesWhere you've read up to in each channel, and unread mentions.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/read-states' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
readStates: {
channelId: string
serverId: string
lastReadId: string
mentions: number
notify: "default" | "none" | "all" | "mentions"
muted: boolean
mutedUntil: null | number
}[]
}/ v1/ messaging/ serversYour servers in your order, each with whether it has unread messages and your unread mentions there.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
servers: {
unread: boolean
mentions: number
notify: "none" | "all" | "mentions"
serverId: string
name: string
icon: null | string
description: null | string
ownerId: string
systemChannelId: null | string
memberCount: number
leaderboards: boolean
createdAt: number
banner: null | string
traits: {
label: string
emoji?: string
}[]
tag: null | string
tagBadge: null | string
verification: "none" | "low" | "medium" | "high"
defaultNotify: "all" | "mentions"
joinMessages: boolean
rulesChannelId: null | string
reportsChannelId: null | string
community: boolean
welcome: unknown
onboarding: unknown
optInChannelIds: string[]
webPage: boolean
invitesPausedUntil: null | number
dmsPausedUntil: null | number
afkChannelId: null | string
afkTimeout: number
}[]
}/ v1/ messaging/ serversCreates a server you own (name, optional icon emoji, description, template), with @everyone, #general and a General voice channel. Servers belong to people, never to an organisation.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
server: {
serverId: string
name: string
icon: null | string
description: null | string
ownerId: string
systemChannelId: null | string
memberCount: number
leaderboards: boolean
createdAt: number
banner: null | string
traits: {
label: string
emoji?: string
}[]
tag: null | string
tagBadge: null | string
verification: "none" | "low" | "medium" | "high"
defaultNotify: "all" | "mentions"
joinMessages: boolean
rulesChannelId: null | string
reportsChannelId: null | string
community: boolean
welcome: unknown
onboarding: unknown
optInChannelIds: string[]
webPage: boolean
invitesPausedUntil: null | number
dmsPausedUntil: null | number
afkChannelId: null | string
afkTimeout: number
}
channels: {
bitrate?: number
audio?: "voice" | "music" | "stereo"
videoQuality?: "auto" | "full"
rtcRegion?: null | string
channelId: string
serverId: string
type: "text" | "voice" | "category" | "announcement" | "forum" | "stage"
name: string
topic: null | string
parentId: null | string
position: number
nsfw: boolean
slowmode: number
userLimit: number
overwrites: {
id: string
type: "role" | "member"
allow: string
deny: string
}[]
lastMessageId: null | string
}[]
roles: {
roleId: string
name: string
color: null | string
permissions: string
position: number
hoist: boolean
mentionable: boolean
}[]
member: {
nick: null | string
roleIds: string[]
joinedAt: number
timeoutUntil: null | number
mute: boolean
deaf: boolean
status: string
customStatus: null | string
bot: null | "platform" | "server" | "bot"
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
userId: string
name: string
}
settings: {
notify: "none" | "all" | "mentions"
muted: boolean
mutedUntil: null | number
suppressEveryone: boolean
suppressRoles: boolean
allowDms: boolean
wearTag: boolean
hideMutedChannels: boolean
onboarded: boolean
onboardingAnswers: null | number[][]
showAllChannels: boolean
hiddenChannelIds: string[]
optedInChannelIds: string[]
}
permissions: string
permissionNames: ("CREATE_INVITE" | "KICK_MEMBERS" | "BAN_MEMBERS" | "ADMINISTRATOR" | "MANAGE_CHANNELS" | "MANAGE_SERVER" | "ADD_REACTIONS" | "VIEW_AUDIT_LOG" | "PRIORITY_SPEAKER" | "STREAM" | "VIEW_CHANNEL" | "SEND_MESSAGES" | "MANAGE_MESSAGES" | "EMBED_LINKS" | "ATTACH_FILES" | "READ_MESSAGE_HISTORY" | "MENTION_EVERYONE" | "USE_EXTERNAL_EMOJI" | "CONNECT" | "SPEAK" | "MUTE_MEMBERS" | "DEAFEN_MEMBERS" | "MOVE_MEMBERS" | "CHANGE_NICKNAME" | "MANAGE_NICKNAMES" | "MANAGE_ROLES" | "MANAGE_WEBHOOKS" | "MANAGE_EMOJIS" | "REQUEST_TO_SPEAK" | "MANAGE_EVENTS" | "MANAGE_THREADS" | "CREATE_THREADS" | "USE_EXTERNAL_STICKERS" | "SEND_IN_THREADS" | "MODERATE_MEMBERS" | "USE_SOUNDBOARD" | "USE_EXTERNAL_SOUNDS" | "SEND_POLLS" | "USE_EXTERNAL_APPS")[]
}/ v1/ messaging/ servers/ discoverRetired with organisation links: always { servers: [] }, for apps from before. Servers are joined with an invite.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/discover' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
servers: []
}/ v1/ messaging/ me/ linkable-orgsRetired with organisation links: always { orgs: [] }, for apps from before.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/me/linkable-orgs' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
orgs: []
}/ v1/ messaging/ servers/ :serverId/ orgRetired with organisation links: 410. Mirage is a space of its own, apart from organisations and Personal.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
curl -X PUT 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/org' \
-H "Authorization: Bearer $CACTIVE_TOKEN"/ v1/ messaging/ servers/ :serverId/ orgRetired with organisation links: 410.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/org' \
-H "Authorization: Bearer $CACTIVE_TOKEN"/ v1/ messaging/ servers/ :serverId/ orgRetired with organisation links: 410. Links left from before are removed by the separation script.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/org' \
-H "Authorization: Bearer $CACTIVE_TOKEN"/ v1/ messaging/ servers/ :serverId/ joinRetired with organisation links: 410. Join with an invite (POST /v1/messaging/invites/:code).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/join' \
-H "Authorization: Bearer $CACTIVE_TOKEN"/ v1/ messaging/ servers/ :serverIdA server: its channels you can see, roles, your membership and your server permissions.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
server: {
serverId: string
name: string
icon: null | string
description: null | string
ownerId: string
systemChannelId: null | string
memberCount: number
leaderboards: boolean
createdAt: number
banner: null | string
traits: {
label: string
emoji?: string
}[]
tag: null | string
tagBadge: null | string
verification: "none" | "low" | "medium" | "high"
defaultNotify: "all" | "mentions"
joinMessages: boolean
rulesChannelId: null | string
reportsChannelId: null | string
community: boolean
welcome: unknown
onboarding: unknown
optInChannelIds: string[]
webPage: boolean
invitesPausedUntil: null | number
dmsPausedUntil: null | number
afkChannelId: null | string
afkTimeout: number
}
channels: {
bitrate?: number
audio?: "voice" | "music" | "stereo"
videoQuality?: "auto" | "full"
rtcRegion?: null | string
channelId: string
serverId: string
type: "text" | "voice" | "category" | "announcement" | "forum" | "stage"
name: string
topic: null | string
parentId: null | string
position: number
nsfw: boolean
slowmode: number
userLimit: number
overwrites: {
id: string
type: "role" | "member"
allow: string
deny: string
}[]
lastMessageId: null | string
}[]
roles: {
roleId: string
name: string
color: null | string
permissions: string
position: number
hoist: boolean
mentionable: boolean
}[]
member: {
nick: null | string
roleIds: string[]
joinedAt: number
timeoutUntil: null | number
mute: boolean
deaf: boolean
status: string
customStatus: null | string
bot: null | "platform" | "server" | "bot"
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
userId: string
name: string
}
settings: {
notify: "none" | "all" | "mentions"
muted: boolean
mutedUntil: null | number
suppressEveryone: boolean
suppressRoles: boolean
allowDms: boolean
wearTag: boolean
hideMutedChannels: boolean
onboarded: boolean
onboardingAnswers: null | number[][]
showAllChannels: boolean
hiddenChannelIds: string[]
optedInChannelIds: string[]
}
permissions: string
permissionNames: ("CREATE_INVITE" | "KICK_MEMBERS" | "BAN_MEMBERS" | "ADMINISTRATOR" | "MANAGE_CHANNELS" | "MANAGE_SERVER" | "ADD_REACTIONS" | "VIEW_AUDIT_LOG" | "PRIORITY_SPEAKER" | "STREAM" | "VIEW_CHANNEL" | "SEND_MESSAGES" | "MANAGE_MESSAGES" | "EMBED_LINKS" | "ATTACH_FILES" | "READ_MESSAGE_HISTORY" | "MENTION_EVERYONE" | "USE_EXTERNAL_EMOJI" | "CONNECT" | "SPEAK" | "MUTE_MEMBERS" | "DEAFEN_MEMBERS" | "MOVE_MEMBERS" | "CHANGE_NICKNAME" | "MANAGE_NICKNAMES" | "MANAGE_ROLES" | "MANAGE_WEBHOOKS" | "MANAGE_EMOJIS" | "REQUEST_TO_SPEAK" | "MANAGE_EVENTS" | "MANAGE_THREADS" | "CREATE_THREADS" | "USE_EXTERNAL_STICKERS" | "SEND_IN_THREADS" | "MODERATE_MEMBERS" | "USE_SOUNDBOARD" | "USE_EXTERNAL_SOUNDS" | "SEND_POLLS" | "USE_EXTERNAL_APPS")[]
}/ v1/ messaging/ servers/ :serverIdRenames a server or changes its icon, description or system channel (MANAGE_SERVER).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
server: {
serverId: string
name: string
icon: null | string
description: null | string
ownerId: string
systemChannelId: null | string
memberCount: number
leaderboards: boolean
createdAt: number
banner: null | string
traits: {
label: string
emoji?: string
}[]
tag: null | string
tagBadge: null | string
verification: "none" | "low" | "medium" | "high"
defaultNotify: "all" | "mentions"
joinMessages: boolean
rulesChannelId: null | string
reportsChannelId: null | string
community: boolean
welcome: unknown
onboarding: unknown
optInChannelIds: string[]
webPage: boolean
invitesPausedUntil: null | number
dmsPausedUntil: null | number
afkChannelId: null | string
afkTimeout: number
}
}/ v1/ messaging/ servers/ :serverIdDeletes a server and everything in it. Owner only.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ leaveLeaves a server (the owner transfers it or deletes it instead).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leave' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ transferHands the server to another member (userId, never a bot); recorded in the audit log. Owner only.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/transfer' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
server: {
serverId: string
name: string
icon: null | string
description: null | string
ownerId: string
systemChannelId: null | string
memberCount: number
leaderboards: boolean
createdAt: number
banner: null | string
traits: {
label: string
emoji?: string
}[]
tag: null | string
tagBadge: null | string
verification: "none" | "low" | "medium" | "high"
defaultNotify: "all" | "mentions"
joinMessages: boolean
rulesChannelId: null | string
reportsChannelId: null | string
community: boolean
welcome: unknown
onboarding: unknown
optInChannelIds: string[]
webPage: boolean
invitesPausedUntil: null | number
dmsPausedUntil: null | number
afkChannelId: null | string
afkTimeout: number
}
}/ v1/ messaging/ servers/ :serverId/ channelsCreates a channel or category (type, name, parentId, topic, slowmode, nsfw, userLimit, overwrites; voice channels also bitrate 8 to 96 kbps, audio voice, music or stereo, videoQuality auto or full, rtcRegion). MANAGE_CHANNELS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/channels' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
channel: {
bitrate?: number
audio?: "voice" | "music" | "stereo"
videoQuality?: "auto" | "full"
rtcRegion?: null | string
channelId: string
serverId: string
type: "text" | "voice" | "category" | "announcement" | "forum" | "stage"
name: string
topic: null | string
parentId: null | string
position: number
nsfw: boolean
slowmode: number
userLimit: number
overwrites: {
id: string
type: "role" | "member"
allow: string
deny: string
}[]
lastMessageId: null | string
}
}/ v1/ messaging/ servers/ :serverId/ channelsReorders channels and moves them between categories: [{ id, position, parentId }]. MANAGE_CHANNELS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/channels' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
channels: {
bitrate?: number
audio?: "voice" | "music" | "stereo"
videoQuality?: "auto" | "full"
rtcRegion?: null | string
channelId: string
serverId: string
type: "text" | "voice" | "category" | "announcement" | "forum" | "stage"
name: string
topic: null | string
parentId: null | string
position: number
nsfw: boolean
slowmode: number
userLimit: number
overwrites: {
id: string
type: "role" | "member"
allow: string
deny: string
}[]
lastMessageId: null | string
}[]
}/ v1/ messaging/ servers/ :serverId/ channels/ :channelIdChanges a channel's name, topic, category, slow mode, NSFW, user limit, position (MANAGE_CHANNELS there) or permission overwrites (MANAGE_ROLES there; only permissions you have, server-wide or there; one overwrite per role or member); a voice channel's bitrate, audio, video quality or region override (rtcRegion, a location id; null for automatic). Fields sent unchanged need nothing. New overwrites apply to people connected at once, and a category's reach its synced channels.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/channels/{channelId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
channel: {
bitrate?: number
audio?: "voice" | "music" | "stereo"
videoQuality?: "auto" | "full"
rtcRegion?: null | string
channelId: string
serverId: string
type: "text" | "voice" | "category" | "announcement" | "forum" | "stage"
name: string
topic: null | string
parentId: null | string
position: number
nsfw: boolean
slowmode: number
userLimit: number
overwrites: {
id: string
type: "role" | "member"
allow: string
deny: string
}[]
lastMessageId: null | string
}
}/ v1/ messaging/ servers/ :serverId/ channels/ :channelIdDeletes a channel and its messages (a category's channels stay, uncategorised). MANAGE_CHANNELS in the channel.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/channels/{channelId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ rolesCreates a role just above @everyone (name, color, permissions, hoist, mentionable); you can only grant permissions you have. MANAGE_ROLES.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/roles' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
role: {
roleId: string
name: string
color: null | string
permissions: string
position: number
hoist: boolean
mentionable: boolean
}
}/ v1/ messaging/ servers/ :serverId/ rolesReorders roles below your highest role: [{ roleId, position }].
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/roles' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
roles: {
roleId: string
name: string
color: null | string
permissions: string
position: number
hoist: boolean
mentionable: boolean
}[]
}/ v1/ messaging/ servers/ :serverId/ roles/ :roleIdChanges a role below your highest role.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).roleIdA built-in role (
owner,admin,developer,viewer) or a custom role id (rol_…); in Mirage, a server role (mrl_…, or the server's id for @everyone).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/roles/{roleId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
role: {
roleId: string
name: string
color: null | string
permissions: string
position: number
hoist: boolean
mentionable: boolean
}
}/ v1/ messaging/ servers/ :serverId/ roles/ :roleIdDeletes a role below your highest role; members lose it and channels drop its overwrites.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).roleIdA built-in role (
owner,admin,developer,viewer) or a custom role id (rol_…); in Mirage, a server role (mrl_…, or the server's id for @everyone).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/roles/{roleId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ messages/ searchSearches a server's messages you can read, newest first (sort=oldest for oldest): words in q (case and accents ignored), from (user id), mentions (user id), in (channel or thread id; a channel includes its threads), has (link, file, image, video; repeat or comma-separate), before and after (ms or ISO dates), limit up to 50. Pass the returned cursor back for more. End-to-end encrypted DMs aren't searchable on the server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/messages/search' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
results: {
parentId: string
channelName: null | string
threadName: null | string
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: object[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: object
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}[]
cursor: null | string
}/ v1/ messaging/ servers/ :serverId/ icon/ uploadsWhere to PUT a new server icon (mime: PNG, JPEG, WebP or GIF; size up to 2 MB); then save the server with the icon it answers (image:<version>). MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/icon/uploads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
icon: string
url: string
headers: {
"content-type": string
}
}/ v1/ messaging/ servers/ :serverId/ automod/ rulesA server's AutoMod rules. MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/automod/rules' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
rules: {
ruleId: string
name: string
trigger: "links" | "mentions" | "keyword" | "invites"
enabled: boolean
keywords: string[]
allow: string[]
limit: number
block: boolean
blockMessage: null | string
alertChannelId: null | string
timeoutMinutes: number
exemptRoles: string[]
exemptChannels: string[]
}[]
}/ v1/ messaging/ servers/ :serverId/ automod/ rulesAdds an AutoMod rule (up to 20): trigger (keyword with keywords and an allow list, invites to other servers, mentions or links over a limit), what it does (block with an optional blockMessage, alertChannelId, timeoutMinutes), and exemptRoles and exemptChannels. Keywords: word whole words, word* starting, *word ending, *word* anywhere. The owner, Administrator, Manage Server and bots aren't checked. MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/automod/rules' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
rule: {
ruleId: string
name: string
trigger: "links" | "mentions" | "keyword" | "invites"
enabled: boolean
keywords: string[]
allow: string[]
limit: number
block: boolean
blockMessage: null | string
alertChannelId: null | string
timeoutMinutes: number
exemptRoles: string[]
exemptChannels: string[]
}
}/ v1/ messaging/ servers/ :serverId/ automod/ rules/ :ruleIdChanges an AutoMod rule (or turns it off with enabled: false). MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).ruleIdRule id: a storage lifecycle rule (as returned by the settings or lifecycle routes), an issue automation rule (
rul_…) or a Mirage AutoMod rule (mar_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/automod/rules/{ruleId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
rule: {
ruleId: string
name: string
trigger: "links" | "mentions" | "keyword" | "invites"
enabled: boolean
keywords: string[]
allow: string[]
limit: number
block: boolean
blockMessage: null | string
alertChannelId: null | string
timeoutMinutes: number
exemptRoles: string[]
exemptChannels: string[]
}
}/ v1/ messaging/ servers/ :serverId/ automod/ rules/ :ruleIdDeletes an AutoMod rule. MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).ruleIdRule id: a storage lifecycle rule (as returned by the settings or lifecycle routes), an issue automation rule (
rul_…) or a Mirage AutoMod rule (mar_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/automod/rules/{ruleId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ eventsA server's upcoming and live events (and ones that ended in the last day) you can see, soonest first, with whether you're interested.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/events' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
events: {
eventId: string
serverId: string
name: string
description: null | string
startAt: number
endAt: null | number
channelId: null | string
place: null | string
creatorId: string
status: "canceled" | "live" | "upcoming" | "over"
interestedCount: number
goingCount: number
interested: boolean
}[]
}/ v1/ messaging/ servers/ :serverId/ eventsSchedules an event: name, startAt (ms), in a voice channel (channelId) or somewhere else (place, with endAt), optional description. MANAGE_EVENTS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/events' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
event: {
eventId: string
serverId: string
name: string
description: null | string
startAt: number
endAt: null | number
channelId: null | string
place: null | string
creatorId: string
status: "canceled" | "live" | "upcoming" | "over"
interestedCount: number
goingCount: number
interested: boolean
}
}/ v1/ messaging/ servers/ :serverId/ events/ :eventIdChanges an event's name, description or times, ends it now (end: true) or cancels it (cancel: true). MANAGE_EVENTS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).eventIdEvent id: a calendar event (
evt_…; a recurring event's occurrences share it), or a Mirage server's event (mev_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/events/{eventId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
event: {
eventId: string
serverId: string
name: string
description: null | string
startAt: number
endAt: null | number
channelId: null | string
place: null | string
creatorId: string
status: "canceled" | "live" | "upcoming" | "over"
interestedCount: number
goingCount: number
interested: boolean
}
}/ v1/ messaging/ servers/ :serverId/ events/ :eventIdDeletes an event. MANAGE_EVENTS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).eventIdEvent id: a calendar event (
evt_…; a recurring event's occurrences share it), or a Mirage server's event (mev_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/events/{eventId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ events/ :eventId/ interestedMarks you interested in an event.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).eventIdEvent id: a calendar event (
evt_…; a recurring event's occurrences share it), or a Mirage server's event (mev_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/events/{eventId}/interested' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
event: {
eventId: string
serverId: string
name: string
description: null | string
startAt: number
endAt: null | number
channelId: null | string
place: null | string
creatorId: string
status: "canceled" | "live" | "upcoming" | "over"
interestedCount: number
goingCount: number
interested: boolean
}
}/ v1/ messaging/ servers/ :serverId/ events/ :eventId/ interestedTakes your interest back.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).eventIdEvent id: a calendar event (
evt_…; a recurring event's occurrences share it), or a Mirage server's event (mev_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/events/{eventId}/interested' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
event: {
eventId: string
serverId: string
name: string
description: null | string
startAt: number
endAt: null | number
channelId: null | string
place: null | string
creatorId: string
status: "canceled" | "live" | "upcoming" | "over"
interestedCount: number
goingCount: number
interested: boolean
}
}/ v1/ messaging/ servers/ :serverId/ events/ :eventId/ interestedWho's interested (first 100).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).eventIdEvent id: a calendar event (
evt_…; a recurring event's occurrences share it), or a Mirage server's event (mev_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/events/{eventId}/interested' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
users: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
}/ v1/ messaging/ emojisEvery emoji of your servers, by server (its name, icon and emoji): what a story's emoji stickers pick from.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/emojis' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
servers: {
serverId: string
serverName: string
icon: null | string
emojis: {
emojiId: string
name: string
animated: boolean
}[]
}[]
}/ v1/ messaging/ servers/ :serverId/ emojisA server's own emoji (name, animated, who added it) and its limits (platform data; by default 100 still and 100 animated, 256 KB each).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/emojis' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
emojis: {
emojiId: string
name: string
animated: boolean
creator: {
userId: string
name: string
}
createdAt: number
}[]
limits: {
still: number
animated: number
bytes: number
}
}/ v1/ messaging/ servers/ :serverId/ emojis/ uploadsWhere to PUT an emoji image (name, mime: PNG, JPEG, GIF, WebP or AVIF, size) before adding it. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/emojis/uploads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
emojiId: string
url: string
headers: {
"content-type": "image/png" | "image/jpeg" | "image/webp" | "image/gif" | "image/avif"
}
}/ v1/ messaging/ servers/ :serverId/ emojisAdds an uploaded emoji (emojiId from the upload, name: 2–32 letters, numbers and underscores, unique in the server). GIFs are animated. Use it as <:name:id> in messages and name:id as a reaction. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/emojis' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
emoji: {
emojiId: string
name: string
animated: boolean
creator: {
userId: string
name: string
}
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ emojis/ :emojiIdRenames an emoji. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).emojiIdMirage emoji id (
mem_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/emojis/{emojiId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
emoji: {
emojiId: string
name: string
animated: boolean
creator: {
userId: string
name: string
}
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ emojis/ :emojiIdDeletes an emoji. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).emojiIdMirage emoji id (
mem_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/emojis/{emojiId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ stickersEvery sticker you can pick, by server (each of your servers with stickers: its name, icon and stickers). Another server's need USE_EXTERNAL_STICKERS where you send them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/stickers' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
servers: {
serverId: string
serverName: string
icon: null | string
stickers: {
stickerId: string
serverId: string
name: string
description: null | string
tags: null | string
format: "gif" | "png" | "webp" | "apng"
creator: {
userId: string
name: string
}
createdAt: number
}[]
}[]
}/ v1/ messaging/ servers/ :serverId/ stickersA server's stickers (name, description, related emoji as tags, format, who added it) and its limits (platform data; by default 60 stickers, 512 KB each).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/stickers' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
stickers: {
stickerId: string
serverId: string
name: string
description: null | string
tags: null | string
format: "gif" | "png" | "webp" | "apng"
creator: {
userId: string
name: string
}
createdAt: number
}[]
limits: {
count: number
bytes: number
}
}/ v1/ messaging/ servers/ :serverId/ stickers/ uploadsWhere to PUT a sticker image (mime: PNG, APNG, GIF or WebP; size) before adding it; the answer names its stickerId. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/stickers/uploads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
stickerId: string
url: string
headers: {
"content-type": "image/png" | "image/webp" | "image/gif" | "image/apng"
}
}/ v1/ messaging/ servers/ :serverId/ stickersAdds an uploaded sticker (stickerId, mime, name 2 to 30 characters, optional description and tags: the emoji it's like). Send it with a message's stickerIds (up to 3). MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/stickers' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
sticker: {
stickerId: string
serverId: string
name: string
description: null | string
tags: null | string
format: "gif" | "png" | "webp" | "apng"
creator: {
userId: string
name: string
}
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ stickers/ :stickerIdChanges a sticker's name, description or tags (null clears). MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).stickerIdMirage sticker id (
mst_…; Discord's from the bridge aredst_<id>).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/stickers/{stickerId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
sticker: {
stickerId: string
serverId: string
name: string
description: null | string
tags: null | string
format: "gif" | "png" | "webp" | "apng"
creator: {
userId: string
name: string
}
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ stickers/ :stickerIdDeletes a sticker. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).stickerIdMirage sticker id (
mst_…; Discord's from the bridge aredst_<id>).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/stickers/{stickerId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ soundsEvery soundboard sound you can play, by server (each of your servers with sounds). Another server's need USE_EXTERNAL_SOUNDS where you play them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/sounds' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
servers: {
serverId: string
serverName: string
icon: null | string
sounds: {
soundId: string
serverId: string
name: string
emoji: null | string
volume: number
durationMs: number
creator: {
userId: string
name: string
}
createdAt: number
}[]
}[]
}/ v1/ messaging/ servers/ :serverId/ soundsA server's soundboard (name, emoji, volume, length, who added it) and its limits (platform data; by default 48 sounds, 512 KB and 5.2 seconds each).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/sounds' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
sounds: {
soundId: string
serverId: string
name: string
emoji: null | string
volume: number
durationMs: number
creator: {
userId: string
name: string
}
createdAt: number
}[]
limits: {
count: number
bytes: number
seconds: number
}
}/ v1/ messaging/ servers/ :serverId/ sounds/ uploadsWhere to PUT a sound (mime: MP3, Ogg, WAV, WebM or MP4 audio; size) before adding it; the answer names its soundId. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/sounds/uploads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
soundId: string
url: string
headers: {
"content-type": "audio/mpeg" | "audio/ogg" | "audio/webm" | "audio/wav" | "audio/x-wav" | "audio/mp4"
}
}/ v1/ messaging/ servers/ :serverId/ soundsAdds an uploaded sound (soundId, mime, durationMs as measured, name 2 to 32 characters, optional emoji and volume 0 to 1). MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/sounds' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
sound: {
soundId: string
serverId: string
name: string
emoji: null | string
volume: number
durationMs: number
creator: {
userId: string
name: string
}
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ sounds/ :soundIdChanges a sound's name, emoji or volume. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).soundIdMirage soundboard sound id (
msd_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/sounds/{soundId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
sound: {
soundId: string
serverId: string
name: string
emoji: null | string
volume: number
durationMs: number
creator: {
userId: string
name: string
}
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ sounds/ :soundIdDeletes a sound. MANAGE_EMOJIS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).soundIdMirage soundboard sound id (
msd_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/sounds/{soundId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ channels/ :channelId/ soundboardPlays a sound (soundId) for everyone connected to the voice or stage channel: they get a soundboard event and their apps play it. You must be connected there, able to speak and not deafened; USE_SOUNDBOARD (and USE_EXTERNAL_SOUNDS for another server's). Up to 12 a minute.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/soundboard' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
played: boolean
}/ v1/ messaging/ servers/ :serverId/ membersThe server's members with nicknames, roles and presence (q filters by name).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Query parameters
qstring
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/members' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
members: {
nick: null | string
roleIds: string[]
joinedAt: number
timeoutUntil: null | number
mute: boolean
deaf: boolean
status: string
customStatus: null | string
bot: null | "platform" | "server" | "bot"
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
userId: string
name: string
}[]
}/ v1/ messaging/ servers/ :serverId/ members/ searchThe member directory, a page at a time: sort (name, joined_desc, joined_asc), roleId, q (names and nicknames, accents and case ignored), limit (up to 100) and cursor (from the last page; null when there's no more). Every member may look; moderators also get, per person, what they may do to them (manage).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Query parameters
qstringroleIdstringsortstringcursorstringlimitstring
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/members/search' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
members: {
nick: null | string
roleIds: string[]
joinedAt: number
timeoutUntil: null | number
mute: boolean
deaf: boolean
status: string
customStatus: null | string
bot: null | "platform" | "server" | "bot"
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
userId: string
name: string
manage?: {
kick: boolean
ban: boolean
timeout: boolean
roles: boolean
nick: boolean
}
}[]
cursor: null | string
total: number
}/ v1/ messaging/ servers/ :serverId/ members/ bulkOne action for up to 100 members: kick, ban (reason), timeout (until, ms, or null to remove), add_role or remove_role (roleId). Each goes through the usual permission and hierarchy checks; returns who it was done to and who failed and why.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/members/bulk' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
done: string[]
failed: {
userId: string
error: string
}[]
}/ v1/ messaging/ servers/ :serverId/ members/ meYour settings in a server: nickname (CHANGE_NICKNAME), notifications (notify: all, mentions, none; muted with muteMinutes; suppressEveryone, suppressRoles), privacy (allowDms from its members), whether you wear its tag, hiding muted channels, and your channel list (Browse Channels: showAllChannels, and channels switched on or off as { channelId, listed }, a category's id for all its channels; only channels you can see).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/members/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
member: null | {
nick: null | string
roleIds: string[]
joinedAt: number
timeoutUntil: null | number
mute: boolean
deaf: boolean
status: string
customStatus: null | string
bot: null | "platform" | "server" | "bot"
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
userId: string
name: string
}
settings: {
notify: "none" | "all" | "mentions"
muted: boolean
mutedUntil: null | number
suppressEveryone: boolean
suppressRoles: boolean
allowDms: boolean
wearTag: boolean
hideMutedChannels: boolean
onboarded: boolean
onboardingAnswers: null | number[][]
showAllChannels: boolean
hiddenChannelIds: string[]
optedInChannelIds: string[]
}
}/ v1/ messaging/ servers/ :serverId/ onboardingAnswers the server's onboarding questions (answers: option indexes per question), at joining or again later (Channels & Roles): the chosen options' roles are granted (answering again takes back roles of options no longer chosen) and their channels added to your channel list. Returns your roles and settings.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/onboarding' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
roleIds: string[]
settings: {
notify: "none" | "all" | "mentions"
muted: boolean
mutedUntil: null | number
suppressEveryone: boolean
suppressRoles: boolean
allowDms: boolean
wearTag: boolean
hideMutedChannels: boolean
onboarded: boolean
onboardingAnswers: null | number[][]
showAllChannels: boolean
hiddenChannelIds: string[]
optedInChannelIds: string[]
}
}/ v1/ messaging/ servers/ :serverId/ insightsMembership and activity: members, online now, joins per day over 30 days, messages and people per channel over 7 days, members per role. MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/insights' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
members: number
online: number
joinedLast7: number
joinedLast30: number
joins: {
day: string
count: number
}[]
channels: {
channelId: string
name: string
messages: number
people: number
}[]
roles: {
roleId: string
name: string
color: null | string
members: number
}[]
}/ v1/ messaging/ servers/ :serverId/ templateThe server's template, if it has one: its link, name, uses and size. MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/template' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
template: null | {
code: string
url: string
name: string
description: null | string
uses: number
updatedAt: number
channels: number
roles: number
}
}/ v1/ messaging/ servers/ :serverId/ templateMakes (or replaces) the server's template from its current channels, roles, permission overwrites and settings. Messages and members are never included. MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/template' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
template: {
code: string
url: string
name: string
description: null | string
uses: number
updatedAt: number
channels: number
roles: number
}
}/ v1/ messaging/ servers/ :serverId/ templateBrings the template up to date with the server's current channels and roles.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/template' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
template: {
code: string
url: string
name: string
description: null | string
uses: number
updatedAt: number
channels: number
roles: number
}
}/ v1/ messaging/ servers/ :serverId/ templateDeletes the server's template; its link stops working.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/template' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ templates/ :codeWhat a template link holds: name, description, categories with their channels, and roles.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
codeMirage invite code (8 letters and digits); under
me/fooda household invitation's code (from its link).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/templates/{code}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
template: {
categories: {
name: string
channels: {
type: string
name: string
}[]
}[]
roleNames: string[]
code: string
url: string
name: string
description: null | string
uses: number
updatedAt: number
channels: number
roles: number
}
}/ v1/ messaging/ templates/ :codeCreates a server you own from a template (name, optional icon).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
codeMirage invite code (8 letters and digits); under
me/fooda household invitation's code (from its link).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/templates/{code}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
server: {
serverId: string
name: string
icon: null | string
description: null | string
ownerId: string
systemChannelId: null | string
memberCount: number
leaderboards: boolean
createdAt: number
banner: null | string
traits: {
label: string
emoji?: string
}[]
tag: null | string
tagBadge: null | string
verification: "none" | "low" | "medium" | "high"
defaultNotify: "all" | "mentions"
joinMessages: boolean
rulesChannelId: null | string
reportsChannelId: null | string
community: boolean
welcome: unknown
onboarding: unknown
optInChannelIds: string[]
webPage: boolean
invitesPausedUntil: null | number
dmsPausedUntil: null | number
afkChannelId: null | string
afkTimeout: number
}
}/ v1/ messaging/ servers/ :serverId/ securitySecurity actions: pause new joins through invites (invitesPausedHours) or DMs between members who aren't friends (dmsPausedHours) for up to 24 hours; 0 resumes. MANAGE_SERVER.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/security' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
server: {
serverId: string
name: string
icon: null | string
description: null | string
ownerId: string
systemChannelId: null | string
memberCount: number
leaderboards: boolean
createdAt: number
banner: null | string
traits: {
label: string
emoji?: string
}[]
tag: null | string
tagBadge: null | string
verification: "none" | "low" | "medium" | "high"
defaultNotify: "all" | "mentions"
joinMessages: boolean
rulesChannelId: null | string
reportsChannelId: null | string
community: boolean
welcome: unknown
onboarding: unknown
optInChannelIds: string[]
webPage: boolean
invitesPausedUntil: null | number
dmsPausedUntil: null | number
afkChannelId: null | string
afkTimeout: number
}
}/ v1/ messaging/ servers/ :serverId/ audit-logThe audit log, newest first (45 days): who changed the server, its channels, roles, members, invites and settings. Filters action, userId; before pages. VIEW_AUDIT_LOG.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Query parameters
beforestringactionstringuserIdstringlimitstringDefault
50.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/audit-log' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
entries: {
auditId: string
action: string
actor: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}
targetType: null | string
targetId: null | string
target: null | string
changes: unknown
reason: null | string
createdAt: number
}[]
hasMore: boolean
}/ v1/ messaging/ servers/ :serverId/ members/ :userIdA member's nickname, roles, timeout (timeoutUntil, up to 28 days) or voice mute and deafen, by permission and hierarchy.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/members/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
member: null | {
nick: null | string
roleIds: string[]
joinedAt: number
timeoutUntil: null | number
mute: boolean
deaf: boolean
status: string
customStatus: null | string
bot: null | "platform" | "server" | "bot"
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
userId: string
name: string
}
}/ v1/ messaging/ servers/ :serverId/ members/ :userIdKicks a member below you (KICK_MEMBERS).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/members/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ bansBanned people and why (BAN_MEMBERS).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/bans' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
bans: {
user: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}
reason: null | string
at: number
}[]
}/ v1/ messaging/ servers/ :serverId/ bans/ :userIdBans someone (reason optional): they're removed and can't rejoin.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/bans/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ bans/ :userIdLifts a ban.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/bans/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ invitesThe server's working invites (not expired or used up), newest first, with who made each (inviter) and their uses (MANAGE_SERVER).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/invites' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
invites: {
code: string
url: string
channelId: string
createdBy: string
inviter: null | {
userId: string
name: string
avatarUrl: null | string
}
uses: number
maxUses: number
expiresAt: null | number
createdAt: number
}[]
}/ v1/ messaging/ servers/ :serverId/ invitesCreates an invite (channelId, maxUses up to 100, maxAgeSeconds up to 7 days; 0 never expires). CREATE_INVITE.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/invites' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
code: string
url: string
channelId: string
maxUses: number
expiresAt: null | number
}/ v1/ messaging/ channels/ :channelId/ invitesOne channel's working invites, as the server's list gives them (MANAGE_CHANNELS in the channel).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/invites' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
invites: {
code: string
url: string
channelId: string
createdBy: string
inviter: null | {
userId: string
name: string
avatarUrl: null | string
}
uses: number
maxUses: number
expiresAt: null | number
createdAt: number
}[]
}/ v1/ messaging/ invites/ :codeWhat an invite opens: the server's name, icon, description, member and online counts, and whether you're in it already. Limited per person a minute.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
codeMirage invite code (8 letters and digits); under
me/fooda household invitation's code (from its link).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/invites/{code}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
code: string
server: {
serverId: string
name: string
icon: null | string
description: null | string
memberCount: number
onlineCount: number
}
channel: {
channelId: string
name: null | string
}
member?: boolean
}/ v1/ messaging/ invites/ :codeJoins the invite's server (bans apply).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
codeMirage invite code (8 letters and digits); under
me/fooda household invitation's code (from its link).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/invites/{code}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
server: {
serverId: string
name: string
icon: null | string
description: null | string
ownerId: string
systemChannelId: null | string
memberCount: number
leaderboards: boolean
createdAt: number
banner: null | string
traits: {
label: string
emoji?: string
}[]
tag: null | string
tagBadge: null | string
verification: "none" | "low" | "medium" | "high"
defaultNotify: "all" | "mentions"
joinMessages: boolean
rulesChannelId: null | string
reportsChannelId: null | string
community: boolean
welcome: unknown
onboarding: unknown
optInChannelIds: string[]
webPage: boolean
invitesPausedUntil: null | number
dmsPausedUntil: null | number
afkChannelId: null | string
afkTimeout: number
}
channelId: string
joined: boolean
}/ v1/ messaging/ invites/ :codeRevokes an invite (its creator, MANAGE_SERVER, or MANAGE_CHANNELS in its channel).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
codeMirage invite code (8 letters and digits); under
me/fooda household invitation's code (from its link).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/invites/{code}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ channels/ :channelId/ messagesA page of messages, oldest first: the newest by default, before or after a message id, or around one (jumping to it), limit up to 100. hasMoreBefore and hasMoreAfter say whether there's more either side.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Query parameters
beforestringafterstringaroundstringlimitstringDefault
50.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
messages: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: object[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: object
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}[]
hasMore: boolean
hasMoreBefore: boolean
hasMoreAfter: boolean
}/ v1/ messaging/ channels/ :channelId/ messagesSends a message (content up to 4,000 characters, replyTo, attachments uploaded first, nonce to send once). Mentions: <@usr_…>, <@&role>, @everyone/@here (MENTION_EVERYONE).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
message: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: {
name: string
id?: string
animated?: boolean
}
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object[]
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageIdOne message.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: {
name: string
id?: string
animated?: boolean
}
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object[]
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageIdEdits your own message (content).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: {
name: string
id?: string
animated?: boolean
}
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object[]
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageIdDeletes a message: your own, or anyone's with MANAGE_MESSAGES.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ channels/ :channelId/ pinsThe channel's pinned messages, newest first (50 at most).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/pins' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
messages: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: object[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: object
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}[]
}/ v1/ messaging/ channels/ :channelId/ pins/ :messageIdPins a message (MANAGE_MESSAGES).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/pins/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: {
name: string
id?: string
animated?: boolean
}
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object[]
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}
}/ v1/ messaging/ channels/ :channelId/ pins/ :messageIdUnpins a message.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/pins/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: {
name: string
id?: string
animated?: boolean
}
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object[]
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ reactions/ :emojiAdds your reaction (a new emoji on the message needs ADD_REACTIONS; 20 different at most).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).emojiA Unicode emoji, URL-encoded.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/reactions/{emoji}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
emoji: string
count: number
me: boolean
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ reactions/ :emojiRemoves your reaction.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).emojiA Unicode emoji, URL-encoded.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/reactions/{emoji}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
emoji: string
count: number
me: boolean
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ reactions/ :emojiWho reacted with an emoji.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).emojiA Unicode emoji, URL-encoded.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/reactions/{emoji}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
users: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
}/ v1/ messaging/ channels/ :channelId/ settingsYour notifications for a channel, category or thread (notify: default follows the next place out: a thread its channel, a channel its category, a category the server; all, mentions or none) and its mute (muted, with muteMinutes for a while). A muted place (or one in a muted category) shows no unread mark and sends no pushes; none shows no mention count; all pushes every message to your phone.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/settings' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
channelId: string
serverId: string
lastReadId: string
mentions: number
notify: "default" | "none" | "all" | "mentions"
muted: boolean
mutedUntil: null | number
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ poll/ answers/ :answerIdVotes for a poll's answer (with one answer each, it replaces your earlier vote). Polls are posted with poll (question, 2–10 answers, hours open, multiple) on a new message; SEND_POLLS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).answerIdA poll answer's id (
1–10).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/poll/answers/{answerId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
poll: {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ poll/ answers/ :answerIdTakes your vote for an answer back.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).answerIdA poll answer's id (
1–10).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/poll/answers/{answerId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
poll: {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ poll/ answers/ :answerId/ votersWho chose an answer (first 100).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).answerIdA poll answer's id (
1–10).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/poll/answers/{answerId}/voters' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
users: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ poll/ endEnds a poll early (its author, or MANAGE_MESSAGES).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/poll/end' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
poll: {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ embedsRemoves a message's link previews for good (its author, or MANAGE_MESSAGES). Links are previewed after a message is sent or edited; <https://…> in angle brackets isn't.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/embeds' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: {
name: string
id?: string
animated?: boolean
}
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object[]
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ forwardForwards a copy of a message (its text, files and link previews, as they are now, and where it came from; not its author) to up to five channels in to, with an optional note. Mentions in the copy don't notify; polls and system messages can't be forwarded; forwarding a forward sends the original copy on. Each channel's own rules apply (Send Messages, Attach Files for files, slow mode, AutoMod); results says what happened in each. Forwards to direct messages are made by the app (they're end to end). Needs READ_MESSAGE_HISTORY where it's from.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/forward' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
results: {
channelId: string
messageId?: string
error?: string
}[]
}/ v1/ messaging/ forward-targetsWhere you can forward to: by server, the text and announcement channels you can post in.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/forward-targets' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
servers: {
serverId: string
name: string
icon: null | string
channels: {
channelId: string
name: string
type: "text" | "voice" | "category" | "announcement" | "forum" | "stage"
lastMessageId: null | string
}[]
}[]
}/ v1/ messaging/ channels/ :channelId/ messages/ :messageId/ publishPublishes a post in an announcement channel to the channels following it: each gets a copy shown as this server and channel, with a link back. Edits and deletion of the post reach the copies; mentions in copies don't notify. Your own post (with SEND_MESSAGES), or anyone's with MANAGE_MESSAGES; once per post.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/messages/{messageId}/publish' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: {
name: string
id?: string
animated?: boolean
}
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object[]
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
}
}/ v1/ messaging/ channels/ :channelId/ followersHas targetChannelId (a text channel where you have MANAGE_WEBHOOKS) follow this announcement channel, which you need to see. The target channel gets a notice; it can follow up to 10 channels.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/followers' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ channels/ :channelId/ followers/ :targetChannelIdStops a channel following this announcement channel. MANAGE_WEBHOOKS in the following channel.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).targetChannelIdThe following channel's id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/followers/{targetChannelId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ followingThe announcement channels this server's channels follow, with their server and channel names. MANAGE_WEBHOOKS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/following' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
following: {
sourceServerId: string
sourceServerName: string
sourceServerIcon: null | string
sourceChannelId: string
sourceChannelName: string
targetChannelId: string
createdAt: number
}[]
}/ v1/ messaging/ follow-targetsWhere you can have a channel follow an announcement channel: by server, the text channels where you have MANAGE_WEBHOOKS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/follow-targets' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
servers: {
serverId: string
name: string
icon: null | string
channels: {
channelId: string
name: string
type: "text" | "voice" | "category" | "announcement" | "forum" | "stage"
}[]
}[]
}/ v1/ messaging/ channels/ :channelId/ unreadMarks a channel or thread unread from messageId on (the read marker moves to the message before it).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/unread' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
channelId: string
lastReadId: string
mentions: number
}/ v1/ messaging/ channels/ :channelId/ ackMarks the channel read up to messageId and clears its mentions; your other devices hear.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/ack' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
channelId: string
lastReadId: string
mentions: number
}/ v1/ messaging/ channels/ :channelId/ typingShows you typing to the channel for 8 seconds.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/typing' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ uploadsWhere to PUT a file (channelId, name, size up to 25 MB, mime) before sending it as an attachment (ATTACH_FILES).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/uploads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
attachmentId: string
url: string
headers: {
"content-type": string
}
}/ v1/ messaging/ channels/ :channelId/ threadsA channel's threads you can see: active ones, or archived ones with archived=1, most recently active first.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Query parameters
archivedstring
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/threads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
threads: {
joined: boolean
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}[]
}/ v1/ messaging/ channels/ :channelId/ threadsStarts a thread (name; messageId to start it from a message; private in text channels; autoArchive 60, 1440, 4320 or 10080 minutes). In a forum channel it's a post and needs a first message. CREATE_THREADS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/threads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
thread: {
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ threadsThe active threads you follow in a server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/threads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
threads: {
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}[]
}/ v1/ messaging/ threads/ :threadIdA thread with its members. Its messages use the channel message routes with the thread's id.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/threads/{threadId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
thread: {
members: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
joined: boolean
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}
}/ v1/ messaging/ threads/ :threadIdRenames, archives, unarchives or changes a thread's auto-archive (its creator or MANAGE_THREADS); locks it (MANAGE_THREADS).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/threads/{threadId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
thread: {
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}
}/ v1/ messaging/ threads/ :threadIdDeletes a thread and its messages. MANAGE_THREADS.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/threads/{threadId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ threads/ :threadId/ members/ meFollows a thread.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/threads/{threadId}/members/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
thread: {
members: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
joined: boolean
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}
}/ v1/ messaging/ threads/ :threadId/ members/ meStops following a thread.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/threads/{threadId}/members/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
thread: {
members: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
joined: boolean
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}
}/ v1/ messaging/ threads/ :threadId/ members/ :userIdAdds someone to a thread (private threads: its members or MANAGE_THREADS).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/threads/{threadId}/members/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
thread: {
members: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
joined: boolean
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}
}/ v1/ messaging/ threads/ :threadId/ members/ :userIdRemoves someone from a thread (themselves, its creator or MANAGE_THREADS).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
threadIdConversation id (
thr_…), or in Mirage a thread id (mth_…).userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/threads/{threadId}/members/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
thread: {
members: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
joined: boolean
threadId: string
parentId: string
serverId: string
name: string
ownerId: string
starterMessageId: null | string
private: boolean
locked: boolean
archived: boolean
autoArchive: number
lastActivityAt: number
lastMessageId: null | string
messageCount: number
memberCount: number
createdAt: number
}
}/ v1/ messaging/ relationshipsYour friends, friend requests (incoming and outgoing) and people you've blocked.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/relationships' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
relationships: {
userId: string
name: string
avatarUrl: null | string
type: "blocked" | "friend" | "incoming" | "outgoing"
since: number
}[]
}/ v1/ messaging/ relationshipsSends a friend request by userId or exact email (the answer is the same whether or not the address has an account). Accepts theirs if they already asked you.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/relationships' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
sent: boolean
friends?: undefined
} | {
sent: boolean
friends: boolean
}/ v1/ messaging/ relationships/ :userIdAccepts a friend request.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/relationships/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
sent: boolean
friends: boolean
}/ v1/ messaging/ relationships/ :userId/ blockBlocks someone: no friendship, requests or DMs between you. They aren't told.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/relationships/{userId}/block' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ relationships/ :userIdRemoves a friend, cancels or declines a request, or unblocks.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/relationships/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ devicesYour devices registered for end-to-end DMs.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/devices' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
devices: {
deviceId: string
name: null | string
lastSeenAt: number
createdAt: number
registeredAt: number
}[]
}/ v1/ messaging/ devices/ signerMirage's device-signing key (a P-256 JWK, or null on a stage without one): devices check other devices' certificates with it before sealing keys for them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/devices/signer' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
publicKey: null | {
kty: "EC"
crv: "P-256"
x: string
y: string
kid: string
}
}/ v1/ messaging/ devices/ :deviceIdRegisters a device's public key (a P-256 JWK, publicKey) for end-to-end DMs, again on each launch. Mirage certifies it; a new device's conversations ask their members' devices to share their keys with it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
deviceIdDevice id: an agent's (
dev_…); under/v1/me/notificationsa phone's install id; under/v1/me/sign-in-approvalsa phone that approves sign-ins (apd_…); under/v1/me/vaultthe id a device made for its vault (22 base64url characters).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/devices/{deviceId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
deviceId: string
registeredAt: number
}/ v1/ messaging/ devices/ :deviceIdRemoves a device: conversations move to new keys it doesn't get.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
deviceIdDevice id: an agent's (
dev_…); under/v1/me/notificationsa phone's install id; under/v1/me/sign-in-approvalsa phone that approves sign-ins (apd_…); under/v1/me/vaultthe id a device made for its vault (22 base64url characters).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/devices/{deviceId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ dmsYour open DMs and group DMs, most recent first, with members, the current key version and read position.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
dms: {
dmId: string
type: "group" | "dm"
name: null | string
icon: null | string
ownerId: null | string
members: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: object
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
memberSince: {
[key: string]: number
}
keyVersion: number
keyRequestAt: null | number
lastMessageId: null | string
lastReadId: string
createdAt: number
updatedAt: number
}[]
}/ v1/ messaging/ dmsOpens a DM with one person (userIds: [id], reusing the existing one) or a group DM with up to 9 others (name optional). Friends and people you share a server with.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
dm: {
dmId: string
type: "group" | "dm"
name: null | string
icon: null | string
ownerId: null | string
members: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
memberSince: {
[key: string]: number
}
keyVersion: number
keyRequestAt: null | number
lastMessageId: null | string
lastReadId: string
createdAt: number
updatedAt: number
}
}/ v1/ messaging/ dms/ candidatesPeople you can message: friends first, then people in your servers (q filters by name).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Query parameters
qstringDefault
"".
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/candidates' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
people: {
friend: boolean
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
}/ v1/ messaging/ dms/ :dmIdChanges a group DM: its name or icon (name, icon; any member, and the conversation says who), or its members (add, remove; removing is the owner's). Membership changes start a new key version.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/dms/{dmId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
dm: {
dmId: string
type: "group" | "dm"
name: null | string
icon: null | string
ownerId: null | string
members: {
userId: string
name: string
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
bot?: "platform" | "server" | "bot"
external?: "discord" | "webhook"
}[]
memberSince: {
[key: string]: number
}
keyVersion: number
keyRequestAt: null | number
lastMessageId: null | string
lastReadId: string
createdAt: number
updatedAt: number
}
}/ v1/ messaging/ dms/ :dmIdCloses a DM (it reopens with the next message) or leaves a group DM.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/dms/{dmId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ dms/ :dmId/ devicesThe members' certified devices in use, each with its certificate and whether it has the current key, and the current key version.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/devices' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
keyVersion: number
keyCreated: boolean
devices: {
hasKey: boolean
userId: string
deviceId: string
publicKey: string
name: null | string
registeredAt: number
cert: null | string
}[]
}/ v1/ messaging/ dms/ :dmId/ keysThe conversation keys sealed for one of your devices (device), every version it has, each with the device that sealed it; which members can still share each version (holders); and when your device registered.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Query parameters
devicestringDefault
"".
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/keys' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
keys: {
keyVersion: number
senderDeviceId: string
senderPublicKey: string
iv: string
sealed: string
sender: null | {
userId: string
deviceId: string
publicKey: string
name: null | string
registeredAt: number
cert: null | string
hasKey?: boolean
}
}[]
keyVersion: number
memberIds: string[]
holders: {
[key: string]: string[]
}
device: null | {
registeredAt: number
}
}/ v1/ messaging/ dms/ :dmId/ keys/ missingMembers' certified devices without a key version that exists, so any member's device that has it can seal it for them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/keys/missing' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
devices: {
userId: string
deviceId: string
publicKey: string
name: null | string
registeredAt: number
cert: null | string
hasKey?: boolean
keyVersions: number[]
}[]
}/ v1/ messaging/ dms/ :dmId/ keysStores conversation keys a member's device sealed (senderDeviceId, keys), for current members' certified devices: the current version's key (create, once), the next version's (rotate), or versions the device has, shared with devices that lack them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/keys' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
stored: number
keyVersion: number
} | {
stored: number
keyVersion?: undefined
}/ v1/ messaging/ dms/ :dmId/ keys/ requestAsks the members' devices to share keys one of your devices lacks (deviceId); at most once a minute per conversation.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/keys/request' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
asked: boolean
}/ v1/ messaging/ dms/ :dmId/ messagesA page of encrypted messages, oldest first (before, limit), with their encrypted reactions and votes; thread replies only with thread (the message that started it; after for newer).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Query parameters
beforestringafterstringthreadstringlimitstringDefault
50.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
messages: {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}[]
hasMore: boolean
}/ v1/ messaging/ dms/ :dmId/ messages/ :messageIdOne encrypted message (a reply's original, a pin or a saved message).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}
}/ v1/ messaging/ dms/ :dmId/ messages/ :messageId/ editsAn edited message's earlier versions, oldest first, each still encrypted under the key it was written with.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages/{messageId}/edits' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
edits: {
messageId: string
writtenAt: number
replacedAt: number
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
}[]
}/ v1/ messaging/ dms/ :dmId/ messages/ :messageId/ marks/ :kindSets your encrypted reactions to a message (reactions) or your vote in its poll (vote), with the current key; members hear dm_mark.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).kindWhat the resource is:
project(a Serverless App Service),database,bucket,domain,repositoryoragent; undervehiclesthe kind of schedule,chargeorprecondition.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages/{messageId}/marks/{kind}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
mark: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}
}/ v1/ messaging/ dms/ :dmId/ messages/ :messageId/ marks/ :kindTakes back your reactions to a message, or your vote.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).kindWhat the resource is:
project(a Serverless App Service),database,bucket,domain,repositoryoragent; undervehiclesthe kind of schedule,chargeorprecondition.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages/{messageId}/marks/{kind}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ dms/ :dmId/ messages/ :messageId/ poll/ endEnds your poll early: it takes no more votes.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages/{messageId}/poll/end' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}
}/ v1/ messaging/ dms/ :dmId/ messages/ :messageId/ forwardForwards a DM's text to up to 5 channels (to, optional note): your device decrypts it and sends the copy (copy.content); its files stay in the DM.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages/{messageId}/forward' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
results: {
channelId: string
messageId?: string
error?: string
}[]
}/ v1/ messaging/ dms/ :dmId/ pinsThe conversation's pinned messages, most recently pinned first.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/pins' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
messages: {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}[]
}/ v1/ messaging/ dms/ :dmId/ pins/ :messageIdPins a message (any member, up to 50); the conversation says who.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/pins/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}
}/ v1/ messaging/ dms/ :dmId/ pins/ :messageIdUnpins a message.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/pins/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}
}/ v1/ messaging/ dms/ :dmId/ uploadsWhere to PUT a file's ciphertext before sending it (size, up to 25 MB): the file is encrypted on your device under a key the message's ciphertext holds.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/uploads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
uploadId: string
url: string
headers: {
"content-type": string
}
}/ v1/ messaging/ dms/ :dmId/ files/ :uploadIdA short-lived URL for one of the conversation's files (its ciphertext; your device decrypts it).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).uploadIdUpload id (
dup_…), from starting the upload.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/files/{uploadId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
url: string
}/ v1/ messaging/ dms/ :dmId/ icon/ uploadsWhere to PUT a group DM's new icon (mime, size up to 2 MB); PATCH /v1/messaging/dms/:dmId with icon sets it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/icon/uploads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
icon: string
url: string
headers: {
"content-type": "image/png" | "image/jpeg" | "image/webp" | "image/gif"
}
}/ v1/ messaging/ dms/ :dmId/ iconRedirects to a group DM's icon (members only; the image isn't encrypted, as the group's name isn't). ?as=url answers { url }, a short-lived link, instead.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Query parameters
asstring
Errors
403Bots can't use this route.403Mirage is only for the person signed in.404This group has no icon.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/icon' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
url: string
}/ v1/ messaging/ dms/ :dmId/ scheduledSend Later in a DM: a message your device sealed now (senderDeviceId, keyVersion, iv, ciphertext), sent at at. If the key changes first it waits for your device to seal it again.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/scheduled' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
scheduled: {
dm?: {
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
stale: boolean
}
scheduledId: string
kind: "message" | "reminder"
serverId: string
channelId: string
content: null | string
messageId: null | string
at: number
createdAt: number
}
}/ v1/ messaging/ dms/ :dmId/ remindersRemind Me about a DM message (messageId, at): it's saved to Later, and the reminder says who sent it, not what.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/reminders' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
scheduled: {
dm?: {
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
stale: boolean
}
scheduledId: string
kind: "message" | "reminder"
serverId: string
channelId: string
content: null | string
messageId: null | string
at: number
createdAt: number
}
}/ v1/ messaging/ composer-settingsWhat the composer offers: gifs (enabled, the provider and its label, shown as "Powered by") and voiceMaxSeconds, the longest voice message (a platform limit).
- Auth
- A person's token or an API key, as Authorization: Bearer.
curl 'https://api.cactive.com.au/v1/messaging/composer-settings' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
gifs: {
enabled: true
provider: "klipy" | "giphy"
label: string
} | {
enabled: false
provider: null
label: null
}
voiceMaxSeconds: number
}/ v1/ messaging/ gifsTrending GIFs, or a search with q; page (from next) and locale. 24 a page; every preview link (preview.mp4, gif, still) loads from Mirage. Send a GIF by sending its url as a message. 60 a minute.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Query parameters
qstringpagestringlocalestring
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/gifs' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
provider: "klipy" | "giphy"
label: string
items: {
provider: "klipy" | "giphy"
id: string
url: string
title: string
width: number
height: number
preview: {
mp4: null | string
gif: null | string
still: null | string
width: number
height: number
}
}[]
next: null | number
}/ v1/ messaging/ gifs/ favouritesYour favourite GIFs, newest first.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/gifs/favourites' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
favourites: {
provider: "klipy" | "giphy"
id: string
url: string
title: string
width: number
height: number
preview: {
mp4: null | string
gif: null | string
still: null | string
width: number
height: number
}
}[]
}/ v1/ messaging/ gifs/ favouritesAdds a GIF to your favourites (provider, id), looked up with its provider; up to mirage.gifs.favourites (a platform limit).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/gifs/favourites' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
favourites: {
provider: "klipy" | "giphy"
id: string
url: string
title: string
width: number
height: number
preview: {
mp4: null | string
gif: null | string
still: null | string
width: number
height: number
}
}[]
}/ v1/ messaging/ gifs/ favourites/ :provider/ :gifIdTakes a GIF out of your favourites.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
providerGIF provider:
klipyorgiphy.gifIdThe GIF's id with its provider (GIPHY's id, KLIPY's slug).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/gifs/favourites/{provider}/{gifId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
favourites: {
provider: "klipy" | "giphy"
id: string
url: string
title: string
width: number
height: number
preview: {
mp4: null | string
gif: null | string
still: null | string
width: number
height: number
}
}[]
}/ v1/ messaging/ link-previewsA link's preview for a DM you're writing (url): fetched by the API (browsers can't; YouTube, X, Spotify, Vimeo, SoundCloud and TikTok through their oEmbed), with its image up to 1 MB, kept nowhere; a GIF provider's link comes with its still and animated GIF. Your device encrypts it into the message. 30 a minute.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
400Give a link.403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/link-previews' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
preview: null | {
gif: {
mime: string
data: string
width: number
height: number
}
image?: {
mime: string
data: string
width: number
height: number
}
title?: string
url: string
type: "gifv"
siteName: string
} | {
url: string
type: "image"
image: {
width?: number
height?: number
mime: string
data: string
}
} | {
image?: {
width?: number
height?: number
mime: string
data: string
}
thumbnail?: boolean
color?: string
author?: string
siteName?: string
description?: string
title?: string
url: string
type: "link" | "video"
}
}/ v1/ messaging/ dms/ :dmId/ messagesSends an encrypted message (senderDeviceId, keyVersion: the current one, iv, ciphertext, nonce). With strict, refused (409 devices_missing, listing them) while a member's current device lacks the key. In the clear for the API: attachmentIds (uploaded files), poll.endsAt, threadId.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
message: {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}
}/ v1/ messaging/ dms/ :dmId/ messages/ :messageIdReplaces your message's ciphertext (an edit); the version it replaces is kept for the edit history.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
message: {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}
}/ v1/ messaging/ dms/ :dmId/ messages/ :messageIdDeletes your message.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/messages/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ dms/ :dmId/ ackMarks the DM read up to messageId.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/ack' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ dms/ :dmId/ typingShows you typing to the others for 8 seconds.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/typing' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ channels/ :channelId/ summaryCatch Me Up: Caity summarises what you haven't read in the channel (or its recent conversation when you're up to date) and sends it to you alone over the socket as caity_summary (channelId, text, count). It reads only what Caity may read, for someone who can read the channel; counts against your hourly questions to Caity. READ_MESSAGE_HISTORY.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/summary' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 202
{
pending: boolean
}/ v1/ messaging/ savedYour Later list: messages you saved, newest saved first, each with done and the message (null when it was deleted or you can't read it any more). Up to 500.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/saved' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
saved: {
dmMessage?: null | {
messageId: string
dmId: string
authorId: string
type: "default" | "system"
senderDeviceId: null | string
keyVersion: null | number
iv: null | string
ciphertext: null | string
system: null | {
event?: string
userIds?: string[]
name?: string
messageId?: string
}
editedAt: null | number
editCount: number
createdAt: number
nonce: null | string
attachmentIds: string[]
poll: null | {
endsAt: number
closedAt: null | number
}
threadId: null | string
thread: null | {
count: number
lastAt: number
}
pinned: boolean
marks: {
kind: "reactions" | "vote"
userId: string
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
updatedAt: number
}[]
}
messageId: string
channelId: string
serverId: string
done: boolean
savedAt: number
message: null | {
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: object[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | object
video: null | object
gif: null | object
provider: null | string
authorUrl: null | string
authorIcon: null | object
thumb: null | object
fields: object
footer: null | string
footerIcon: null | object
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: object[]
}[]
}
}[]
}/ v1/ messaging/ saved/ idsThe ids of the messages you saved (for showing Save or Remove).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/saved/ids' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
ids: string[]
}/ v1/ messaging/ saved/ :messageIdSaves a message for later (channelId where it is). You need to be able to read it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/saved/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
saved: boolean
}/ v1/ messaging/ saved/ :messageIdMarks a saved message done (done: true) or not.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/saved/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ saved/ :messageIdRemoves a message from your Later list.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
messageIdMessage id (
msg_…; Mirage messages aremmg_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/saved/{messageId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ users/ :userId/ profileSomeone beyond their card: the servers you're both in (with their nickname there), your mutual friends, and your private note about them. Only for people in a server or conversation with you, or among your friends, requests and blocks; 404 otherwise.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/users/{userId}/profile' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
person: {
avatarUrl: null | string
bannerUrl: null | string
banner: null | string
accent: null | string
about: null | string
effect: null | {
id: string
renderer: "sparkles" | "snow" | "hearts" | "glow" | "aurora" | "confetti"
colors: string[]
}
username: null | string
kind: "org" | "personal"
badges: {
kind: "early-supporter"
since: null | number
} | {
kind: "subscriber"
since: number
tier: {
form: "stone" | "cut" | "brilliant" | "radiant" | "spark"
name: string
months: number
art: "quartz" | "bronze" | "silver" | "gold" | "platinum" | "diamond" | "emerald" | "ruby" | "opal" | "early"
id: string
}
}[]
name: string
}
mutualServers: {
serverId: string
name: string
icon: null | string
nick: null | string
}[]
mutualFriends: {
userId: string
name: string
avatarUrl: null | string
}[]
note: null | string
}/ v1/ messaging/ users/ :userId/ noteYour private note about someone (note, up to 256 characters; empty clears it). Only you see it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
userIdA member's user id (
usr_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/users/{userId}/note' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
note: null | string
}/ v1/ messaging/ channels/ :channelId/ webhooksMakes an incoming webhook in a text or announcement channel (name, default Webhook; Manage Webhooks there; up to 15 a channel by default, as platform data sets). The answer's url holds the token: it's shown this once, and whoever has it can post.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/webhooks' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
webhook: {
webhookId: string
serverId: string
channelId: string
name: string
createdBy: string
createdAt: number
lastUsedAt: null | number
}
url: string
}/ v1/ messaging/ servers/ :serverId/ webhooksA server's incoming webhooks in the channels where you have Manage Webhooks and can see (name, channel, who made it, when it last posted), never their tokens. Refused without Manage Webhooks anywhere.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/webhooks' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
webhooks: {
webhookId: string
serverId: string
channelId: string
name: string
createdBy: string
createdAt: number
lastUsedAt: null | number
}[]
}/ v1/ messaging/ servers/ :serverId/ webhooks/ :webhookIdRenames a webhook (name) or moves it to another channel of the server (channelId, where you also manage webhooks).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).webhookIdWebhook id (
whk_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/webhooks/{webhookId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
webhook: {
webhookId: string
serverId: string
channelId: string
name: string
createdBy: string
createdAt: number
lastUsedAt: null | number
}
}/ v1/ messaging/ servers/ :serverId/ webhooks/ :webhookId/ tokenA new token for a webhook: the answer's url replaces the old one, which stops working at once.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).webhookIdWebhook id (
whk_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/webhooks/{webhookId}/token' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
webhook: {
webhookId: string
serverId: string
channelId: string
name: string
createdBy: string
createdAt: number
lastUsedAt: null | number
}
url: string
}/ v1/ messaging/ servers/ :serverId/ webhooks/ :webhookIdDeletes a webhook; its URL stops working. Its messages stay.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).webhookIdWebhook id (
whk_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/webhooks/{webhookId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ inbox/ mentionsYour recent mentions across your servers, newest first (limit up to 50), each with its server's name: you by name, your roles and @everyone/@here (as each server's suppress settings allow; roles=0 or everyone=0 leaves them out), never your own messages; cursor (the last result's id) for the next page.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Query parameters
cursorstringlimitstringrolesstringeveryonestring
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/inbox/mentions' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
results: {
parentId: string
channelName: null | string
threadName: null | string
messageId: string
channelId: string
serverId: string
author: {
userId: string
name: string
bot: "server"
avatarUrl: null
} | {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
type: "default" | "join" | "system" | "reply" | "pin" | "follow"
content: string
replyTo: null | {
author: {
avatarUrl: null | string
external?: "discord" | "webhook"
bot?: "platform" | "server" | "bot"
userId: string
name: string
}
content: string
messageId: string
} | {
deleted: boolean
messageId: string
}
mentions: string[]
mentionRoles: string[]
mentionEveryone: boolean
attachments: {
url: string
durationSecs?: null | number
waveform?: string
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
}[]
reactions: {
emoji: string
count: number
me: boolean
}[]
pinned: boolean
thread: null | {
threadId: string
name: string
messageCount: number
lastActivityAt: number
archived: boolean
}
poll: null | {
question: string
answers: {
answerId: string
text: string
emoji: null | string
count: number
}[]
multiple: boolean
expiresAt: number
closed: boolean
total: number
mine: string[]
}
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: {
name: string
value: string
inline: boolean
}[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
editedAt: null | number
createdAt: number
nonce: null | string
interaction: null | {
interactionId: string
name: string
userId: string
userName: string
options?: {
name: string
value: boolean | string | number
}[]
kind?: "command" | "component" | "modal"
label?: string
}
forwarded: null | {
content: string
attachments: {
attachmentId: string
name: string
mime: string
size: number
width: null | number
height: null | number
url: string
}[]
embeds: {
url: string
type: "link" | "video" | "image" | "gifv" | "rich"
title: null | string
description: null | string
siteName: null | string
author: null | string
color: null | string
thumbnail: boolean
image: null | {
url: string
width: null | number
height: null | number
}
video: null | {
url: string
width: null | number
height: null | number
}
gif: null | {
url: string
width: null | number
height: null | number
}
provider: null | string
authorUrl: null | string
authorIcon: null | {
url: string
width: null | number
height: null | number
}
thumb: null | {
url: string
width: null | number
height: null | number
}
fields: object[]
footer: null | string
footerIcon: null | {
url: string
width: null | number
height: null | number
}
timestamp: null | number
source: null | string
}[]
origin: {
serverId: string
channelId: string
messageId: string
createdAt: number
}
}
published: boolean
crosspost: null | {
serverId: string
channelId: string
messageId: string
serverName: string
channelName: string
serverIcon: null | string
}
display: null | {
source: "discord" | "webhook"
name: null | string
avatarUrl: null | string
linked: boolean
externalId: null | string
externalAuthorId: null | string
}
stickers: {
stickerId: string
name: string
format: "gif" | "png" | "webp" | "apng" | "lottie"
}[]
components: {
type: 1
components: {
type: 2
style: 2 | 1 | 3 | 4 | 5
label?: string
emoji?: object
customId?: string
url?: string
disabled?: boolean
} | {
type: 3
customId: string
options: object
placeholder?: string
minValues?: number
maxValues?: number
disabled?: boolean
}[]
}[]
serverName: string
}[]
cursor: null | string
}/ v1/ messaging/ inbox/ unreadsThe channels with messages you haven't read, by server, newest first, with their mention counts; muted servers and channels are left out.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/inbox/unreads' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
servers: {
serverId: string
name: string
icon: null | string
channels: {
channelId: string
name: string
type: "text" | "voice" | "category" | "announcement" | "forum" | "stage"
lastMessageId: string
mentions: number
}[]
}[]
}/ v1/ messaging/ me/ noticesYour notices from the platform, newest first (notices: id, kind (report: a report you filed was reviewed), title, body, read, createdAt; kept 90 days), and how many are unread.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/me/notices' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
notices: {
noticeId: string
kind: "report"
title: string
body: string
read: boolean
createdAt: number
}[]
unread: number
}/ v1/ messaging/ me/ notices/ readMarks your notices read; your other devices hear (notice event with unread: 0).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/me/notices/read' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
unread: number
}/ v1/ messaging/ channels/ :channelId/ scheduledSend Later: posts content in the channel at at (milliseconds since 1970; at least a minute and at most 120 days ahead), as you, with your permissions then. If it can't go, you hear why over the socket (scheduled_failed, with the text). Up to 50 scheduled messages and reminders at once.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/scheduled' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
scheduled: {
dm?: {
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
stale: boolean
}
scheduledId: string
kind: "message" | "reminder"
serverId: string
channelId: string
content: null | string
messageId: null | string
at: number
createdAt: number
}
}/ v1/ messaging/ channels/ :channelId/ remindersRemind Me: a reminder about messageId at at, on your open apps (reminder over the socket) and your phone; the message is saved to your Later list now and comes back into progress when it's due.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/reminders' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
scheduled: {
dm?: {
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
stale: boolean
}
scheduledId: string
kind: "message" | "reminder"
serverId: string
channelId: string
content: null | string
messageId: null | string
at: number
createdAt: number
}
}/ v1/ messaging/ scheduledYour scheduled messages and reminders, soonest first (channelId for one channel).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Query parameters
channelIdstring
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/scheduled' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
scheduled: {
dm?: {
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
stale: boolean
}
scheduledId: string
kind: "message" | "reminder"
serverId: string
channelId: string
content: null | string
messageId: null | string
at: number
createdAt: number
}[]
}/ v1/ messaging/ scheduled/ :scheduledIdChanges a scheduled message's content or at (a reminder's at).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
scheduledIdMirage scheduled message or reminder id (
msc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/scheduled/{scheduledId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
scheduled: {
dm?: {
senderDeviceId: string
keyVersion: number
iv: string
ciphertext: string
stale: boolean
}
scheduledId: string
kind: "message" | "reminder"
serverId: string
channelId: string
content: null | string
messageId: null | string
at: number
createdAt: number
}
}/ v1/ messaging/ scheduled/ :scheduledIdCancels a scheduled message or reminder.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
scheduledIdMirage scheduled message or reminder id (
msc_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/scheduled/{scheduledId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ reportsReports something to the people who can act on it: kind message (channelId, messageId: the server's moderators), user (userId, with serverId for that server's moderators) or dm_message (dmId, messageId and content, the text as your device decrypted it: platform staff only). With a reason (spam, harassment, hate, violence, self_harm, sexual, illegal, impersonation, other) and optional details. A copy of what was reported is kept; moderators don't see who reported. Once per thing, and up to 20 an hour.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/reports' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
reportId: string
}/ v1/ messaging/ servers/ :serverId/ reportsA server's open reports (status=all for every one), newest first, with a copy of what was reported. For moderators: Manage Messages, Moderate Members, Kick Members or Ban Members.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Query parameters
statusstring
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/reports' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
reports: {
reporter?: {
userId: string
name: string
}
serverName?: null | string
reportId: string
kind: "post" | "message" | "user" | "server" | "dm_message" | "story"
status: "open" | "dismissed" | "actioned"
reason: string
reasonLabel: string
details: null | string
target: {
userId: string
name: string
}
serverId: null | string
channelId: null | string
messageId: null | string
dmId: null | string
snapshot: unknown
resolvedBy: null | {
userId: string
name: string
}
resolvedAt: null | number
note: null | string
createdAt: number
}[]
}/ v1/ messaging/ servers/ :serverId/ reports/ :reportIdMarks a report actioned or dismissed (with an optional note), or open again. For moderators.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).reportIdA report's id: a Mirage report's (
mrp_…) or a feedback report's (fbk_…).
Errors
403Bots can't use this route.403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/reports/{reportId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
report: {
reporter?: {
userId: string
name: string
}
serverName?: null | string
reportId: string
kind: "post" | "message" | "user" | "server" | "dm_message" | "story"
status: "open" | "dismissed" | "actioned"
reason: string
reasonLabel: string
details: null | string
target: {
userId: string
name: string
}
serverId: null | string
channelId: null | string
messageId: null | string
dmId: null | string
snapshot: unknown
resolvedBy: null | {
userId: string
name: string
}
resolvedAt: null | number
note: null | string
createdAt: number
}
}/ v1/ messaging/ channels/ :channelId/ voiceJoins a voice or stage channel (CONNECT), starting its meeting when nobody's in it; on a stage you join the audience, listening, and in the server's AFK channel join is null (there's no call). Returns your voice state and join: the meeting, your attendee and its join token (yours alone), the channel's audio profile and camera quality, and local on the local stack. sessionId names this tab or app; joining elsewhere leaves where you were. A full channel (userLimit) refuses unless you have MOVE_MEMBERS; without SPEAK you only listen, without STREAM camera and screen share are receive-only, and server mute and deafen apply.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/voice' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
voiceState: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}
join: null | {
placeId: string
kind: "call" | "channel"
meeting: {
MeetingId: string
MediaRegion: string
ExternalMeetingId?: string
MeetingArn?: string
MediaPlacement: {
[key: string]: undefined | string
}
MeetingFeatures?: unknown
}
attendee: {
AttendeeId: string
ExternalUserId: string
JoinToken: string
}
local: boolean
audio: {
bitrateBps: number
stereo: boolean
speech: boolean
}
video: {
width: number
height: number
frameRate: number
}
}
}/ v1/ messaging/ servers/ :serverId/ voice-statesWho's connected to the server's voice channels you can see, with their mute, deafen, camera and screen share.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/voice-states' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
voiceStates: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}[]
}/ v1/ messaging/ servers/ :serverId/ voice-states/ :userIdModerators: server mute (mute, MUTE_MEMBERS) or deafen (deaf, DEAFEN_MEMBERS) someone, kept on their membership; move them to another voice or stage channel (channelId: MOVE_MEMBERS there and where they are, CONNECT there; passes the user limit) or disconnect them (channelId: null); on a stage, bring them up to speak (muted) or back to the audience (speaker, stage moderators: MANAGE_CHANNELS, MUTE_MEMBERS and MOVE_MEMBERS there). Moves and disconnects are in the audit log.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).userIdA member's user id (
usr_…).
Errors
403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/voice-states/{userId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
voiceState: null | {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}
}/ v1/ messaging/ channels/ :channelId/ voice/ moveMoves everyone in a voice or stage channel to another (channelId; MOVE_MEMBERS in both, CONNECT there; people who can't see it stay) or disconnects them all (channelId: null). Returns how many moved. In the audit log.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/voice/move' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
moved: number
}/ v1/ messaging/ servers/ :serverId/ stagesThe server's live stages you can see: channel, topic, who started it and when.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/stages' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
stages: {
channelId: string
serverId: string
topic: string
startedBy: string
startedAt: number
}[]
}/ v1/ messaging/ channels/ :channelId/ stageStarts a stage with a topic (up to 120 characters), or changes the topic of a live one. Everyone who can see the channel gets a stage event. Stage moderators.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/stage' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
stage: {
channelId: string
serverId: string
topic: string
startedBy: string
startedAt: number
}
}/ v1/ messaging/ channels/ :channelId/ stageEnds a live stage; people stay connected. It also ends when the last person leaves. Stage moderators.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/stage' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ channels/ :channelId/ stage/ meOn a stage you're connected to: raise or lower your hand (request, REQUEST_TO_SPEAK), step down to the audience (speaker: false), or step up to speak (speaker: true, stage moderators).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
channelIdMirage channel id (
chn_…).
Errors
403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/channels/{channelId}/stage/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
voiceState: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}
}/ v1/ messaging/ voice/ regionsLocations a voice channel can keep its media in (its rtcRegion). Without one, media goes to the location serving whoever starts the call.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/voice/regions' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
regions: {
locationId: string
label: string
}[]
}/ v1/ messaging/ voice/ meWhere you're connected (a voice channel or a DM call), or null.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/voice/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
voiceState: null | {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}
}/ v1/ messaging/ voice/ meYour own mute, deafen, camera and screen share (selfMute, selfDeaf, selfVideo, selfStream) for the session given (sessionId). Camera and screen share need STREAM.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/voice/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
voiceState: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}
}/ v1/ messaging/ voice/ heartbeatKeeps your connection listed: every 45 seconds, or after 2 minutes you're taken out. 404 when you aren't connected, 409 when another session took over.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/voice/heartbeat' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
voiceState: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}
}/ v1/ messaging/ voice/ idleYour app saw you idle (not speaking, not using it) for the server's AFK timeout: moves your connection (sessionId) to the server's AFK channel, where there's no call. Nothing happens without an AFK channel.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/voice/idle' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
voiceState: null | {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}
}/ v1/ messaging/ voice/ leaveLeaves the voice channel or call, when sessionId is still the one connected (a closed tab's beacon can't end a newer session). The last one out ends the meeting.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/voice/leave' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ callsCalls going on in your DMs: who's in each and who's being rung.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/calls' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
calls: {
dmId: string
startedBy: string
startedAt: number
video: boolean
ringing: string[]
ringUntil: null | number
participants: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}[]
messageId: null | string
}[]
}/ v1/ messaging/ dms/ :dmId/ callThe DM's call going on, or null.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/call' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
call: null | {
dmId: string
startedBy: string
startedAt: number
video: boolean
ringing: string[]
ringUntil: null | number
participants: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}[]
messageId: null | string
}
}/ v1/ messaging/ dms/ :dmId/ callStarts a call in a DM or group DM, ringing everyone else for 45 seconds (video starts with cameras on), or joins the one going on (answering). Returns the call, your voice state and join, as for voice channels. Not in a DM where either person blocked the other.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/call' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
call: null | {
dmId: string
startedBy: string
startedAt: number
video: boolean
ringing: string[]
ringUntil: null | number
participants: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}[]
messageId: null | string
}
voiceState: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}
join: null | {
placeId: string
kind: "call" | "channel"
meeting: {
MeetingId: string
MediaRegion: string
ExternalMeetingId?: string
MeetingArn?: string
MediaPlacement: {
[key: string]: undefined | string
}
MeetingFeatures?: unknown
}
attendee: {
AttendeeId: string
ExternalUserId: string
JoinToken: string
}
local: boolean
audio: {
bitrateBps: number
stereo: boolean
speech: boolean
}
video: {
width: number
height: number
frameRate: number
}
}
}/ v1/ messaging/ dms/ :dmId/ call/ ringRings people in the DM who aren't in the call (userIds, or everyone). You must be in it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/call/ring' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
call: null | {
dmId: string
startedBy: string
startedAt: number
video: boolean
ringing: string[]
ringUntil: null | number
participants: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}[]
messageId: null | string
}
}/ v1/ messaging/ dms/ :dmId/ call/ declineStops the call ringing for you.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
dmIdMirage DM id (
dmc_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/dms/{dmId}/call/decline' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
call: null | {
dmId: string
startedBy: string
startedAt: number
video: boolean
ringing: string[]
ringUntil: null | number
participants: {
placeId: string
kind: "call" | "channel"
serverId: null | string
dmId: null | string
userId: string
sessionId: string
selfMute: boolean
selfDeaf: boolean
selfVideo: boolean
selfStream: boolean
mute: boolean
deaf: boolean
suppress: boolean
noStream: boolean
speaker: boolean
requestToSpeakAt: null | number
afk: boolean
joinedAt: number
}[]
messageId: null | string
}
}/ v1/ messaging/ servers/ :serverId/ leaderboardsA server's leaderboards page in one read: its settings (enabled, timeZone, coursesBy, channelId), whether you manage them and may make courses, its boards, courses (with a thinned preview of each route), seasons, badges, your entry, recent awards, its leagues, and the closed circuits speed boards may use. Members, once a manager has turned them on.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
settings: {
enabled: boolean
timeZone: string
coursesBy: "members" | "managers"
channelId: null | string
}
canManage: boolean
canMakeCourses: boolean
boards: {
boardId: string
name: string
description: null | string
emoji: null | string
metric: string
period: string
seasonId: null | string
from: null | string
to: null | string
groupBy: "role" | "member" | "car"
roleIds: string[]
models: string[]
tripClasses: string[]
minimum: null | number
circuitId: null | string
top: number
anonymous: boolean
channelId: null | string
announce: boolean
position: number
createdAt: number
}[]
courses: {
preview: [number, number][]
courseId: string
name: string
description: null | string
emoji: null | string
km: number
loop: boolean
rankBy: "time" | "efficiency" | "topSpeed" | "efforts" | "smoothness"
circuitId: null | string
circuitName: null | string
source: "drive" | "points" | "drawn"
createdAt: number
}[]
seasons: {
seasonId: string
name: string
emoji: null | string
from: string
to: string
}[]
badges: {
badgeId: string
name: string
emoji: string
color: null | string
description: null | string
rule: {
kind: "rank"
boardId: string
top: number
} | {
kind: "threshold"
metric: string
value: number
period: "all" | "month" | "year" | "season"
} | {
kind: "course"
courseId: string
efforts: number
} | {
kind: "manual"
}
}[]
entry: {
joined: boolean
vehicles: {
vehicleId: string
name: string
model: null | string
}[]
anonymous: boolean
showCars: boolean
courses: boolean
notifyResults: boolean
notifyRecords: boolean
paused: boolean
joinedAt: number
} | {
joined: false
vehicles?: undefined
anonymous?: undefined
showCars?: undefined
courses?: undefined
notifyResults?: undefined
notifyRecords?: undefined
paused?: undefined
joinedAt?: undefined
}
awards: {
badgeId: string
awardKey: string
label: string
at: number
person: {
userId: string
name: string
avatarUrl: null | string
anonymous: boolean
me: boolean
}
}[]
leagues: {
code?: string
leagueId: string
name: string
emoji: null | string
metric: string
period: string
aggregate: "total" | "average"
servers: number
host: boolean
}[]
circuits: {
circuitId: string
name: string
region: string
lengthKm: number
boundary: [number, number][]
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ settingsTurns leaderboards on or off and sets the time zone periods are cut in (a place's zone), who may make courses (managers or members) and the channel results are posted in. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/settings' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
settings: {
enabled: boolean
timeZone: string
coursesBy: "members" | "managers"
channelId: null | string
}
}/ v1/ messaging/ leaderboards/ circuitsThe closed circuits speed and lap boards may use (checked and enabled in Admin): names, regions, lengths and boundaries.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/leaderboards/circuits' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
circuits: {
circuitId: string
name: string
region: string
lengthKm: number
boundary: [number, number][]
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ meYour entry in a server's leaderboards (joined, the cars entered and your choices) and the cars you may enter: your own, from your Personal space.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
entry: {
joined: boolean
vehicles: {
vehicleId: string
name: string
model: null | string
}[]
anonymous: boolean
showCars: boolean
courses: boolean
notifyResults: boolean
notifyRecords: boolean
paused: boolean
joinedAt: number
} | {
joined: false
vehicles?: undefined
anonymous?: undefined
showCars?: undefined
courses?: undefined
notifyResults?: undefined
notifyRecords?: undefined
paused?: undefined
joinedAt?: undefined
}
cars: {
vehicleId: string
name: string
model: null | string
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ meTakes part, or changes which cars do (vehicleIds: up to 5 of your own), with your choices: anonymous (show a stand-in name), showCars, courses (join course boards), notifyResults, notifyRecords, paused. Newly entered cars' drives from the last 90 days are counted too.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
entry: {
joined: boolean
vehicles: {
vehicleId: string
name: string
model: null | string
}[]
anonymous: boolean
showCars: boolean
courses: boolean
notifyResults: boolean
notifyRecords: boolean
paused: boolean
joinedAt: number
} | {
joined: false
vehicles?: undefined
anonymous?: undefined
showCars?: undefined
courses?: undefined
notifyResults?: undefined
notifyRecords?: undefined
paused?: undefined
joinedAt?: undefined
}
cars: {
vehicleId: string
name: string
model: null | string
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ meChanges your choices (anonymous, showCars, courses, notifyResults, notifyRecords, paused).
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
entry: {
joined: boolean
vehicles: {
vehicleId: string
name: string
model: null | string
}[]
anonymous: boolean
showCars: boolean
courses: boolean
notifyResults: boolean
notifyRecords: boolean
paused: boolean
joinedAt: number
} | {
joined: false
vehicles?: undefined
anonymous?: undefined
showCars?: undefined
courses?: undefined
notifyResults?: undefined
notifyRecords?: undefined
paused?: undefined
joinedAt?: undefined
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ meStops taking part: everything counted for you in this server (stats, course efforts, badges) is deleted.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/me' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
entry: {
joined: boolean
vehicles: {
vehicleId: string
name: string
model: null | string
}[]
anonymous: boolean
showCars: boolean
courses: boolean
notifyResults: boolean
notifyRecords: boolean
paused: boolean
joinedAt: number
} | {
joined: false
vehicles?: undefined
anonymous?: undefined
showCars?: undefined
courses?: undefined
notifyResults?: undefined
notifyRecords?: undefined
paused?: undefined
joinedAt?: undefined
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ boardsMakes a board: name, metric (efficiency, consistency, regenShare, co2Saved, distance, drives, smoothness, activeDays, streak, offPeakShare, solarShare, superchargerVisits, newSuperchargers, placesExplored, climbing; and on a closed circuit only, with circuitId, bestLap, topSpeed, circuitLaps, circuitDistance), period (week, month, year, all, season with seasonId or the current season, rolling7, rolling30, custom with from and to), groupBy (member, car, role with roleIds), filters (models, tripClasses, minimum), top, anonymous, channelId, announce, emoji, description. Speed and time on public roads are refused. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/boards' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
board: {
boardId: string
name: string
description: null | string
emoji: null | string
metric: string
period: string
seasonId: null | string
from: null | string
to: null | string
groupBy: "role" | "member" | "car"
roleIds: string[]
models: string[]
tripClasses: string[]
minimum: null | number
circuitId: null | string
top: number
anonymous: boolean
channelId: null | string
announce: boolean
position: number
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ boards/ orderPuts the boards in the order given (boardIds). Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X PUT 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/boards/order' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
boards: {
boardId: string
name: string
description: null | string
emoji: null | string
metric: string
period: string
seasonId: null | string
from: null | string
to: null | string
groupBy: "role" | "member" | "car"
roleIds: string[]
models: string[]
tripClasses: string[]
minimum: null | number
circuitId: null | string
top: number
anonymous: boolean
channelId: null | string
announce: boolean
position: number
createdAt: number
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ boards/ :boardIdA board with its standings for the current period (offset=-1 the one before, back to 52), its period's dates, how its metric reads, and your own place. Stand-in names hide who's behind them, ids included.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).boardIdBoard id: a Tasks board (
brd_…), or under/leaderboardsa Mirage leaderboard (lbd_…).
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/boards/{boardId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
board: {
boardId: string
name: string
description: null | string
emoji: null | string
metric: string
period: string
seasonId: null | string
from: null | string
to: null | string
groupBy: "role" | "member" | "car"
roleIds: string[]
models: string[]
tripClasses: string[]
minimum: null | number
circuitId: null | string
top: number
anonymous: boolean
channelId: null | string
announce: boolean
position: number
createdAt: number
}
period: {
label: string
from: null | string
to: null | string
offset: number
key: null | string
}
standings: null | {
rows: {
rank: number
value: number
display: string
subject: {
kind: "role" | "member" | "car"
key: string
name: string
avatarUrl: null | string
anonymous: boolean
me: boolean
car: null | {
name: string
model: null | string
}
color: null | string
}
ids?: {
userId?: string
vehicleId?: string
roleId?: string
}
}[]
me: null | {
rank: number
value: number
display: string
subject: {
kind: "role" | "member" | "car"
key: string
name: string
avatarUrl: null | string
anonymous: boolean
me: boolean
car: null | {
name: string
model: null | string
}
color: null | string
}
ids?: {
userId?: string
vehicleId?: string
roleId?: string
}
}
participants: number
ranked: number
computedAt: number
}
metric: {
label: string
unit: string
better: string
estimated: boolean
circuitOnly: boolean
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ boards/ :boardId/ resultsA board's finished periods, newest first: each one's standings as it ended.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).boardIdBoard id: a Tasks board (
brd_…), or under/leaderboardsa Mirage leaderboard (lbd_…).
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/boards/{boardId}/results' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
results: {
period: string
label: string
standings: unknown
finishedAt: number
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ boards/ :boardIdChanges a board (the fields of making one; null clears an optional one). The same safety rule applies. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).boardIdBoard id: a Tasks board (
brd_…), or under/leaderboardsa Mirage leaderboard (lbd_…).
Errors
403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/boards/{boardId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
board: {
boardId: string
name: string
description: null | string
emoji: null | string
metric: string
period: string
seasonId: null | string
from: null | string
to: null | string
groupBy: "role" | "member" | "car"
roleIds: string[]
models: string[]
tripClasses: string[]
minimum: null | number
circuitId: null | string
top: number
anonymous: boolean
channelId: null | string
announce: boolean
position: number
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ boards/ :boardIdDeletes a board. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).boardIdBoard id: a Tasks board (
brd_…), or under/leaderboardsa Mirage leaderboard (lbd_…).
Errors
403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/boards/{boardId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ leaderboards/ drivesYour recent drives of one of your cars (vehicleId), newest first, to make a course from: when, how far, whether each has a route. Private drives aren't listed. For people who may make courses.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Query parameters
vehicleIdstring
Errors
400Name the car (vehicleId).403Mirage is only for the person signed in.403Only people who manage the server can make courses here.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/drives' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
drives: {
tripId: string
startedAt: number
endedAt: number
km: null | number
hasTrack: boolean
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ drives/ :vehicleId/ :tripIdOne of your own drives' route (simplified), to choose a stretch of for a course (startedAt: when it started, from the list). Yours alone.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).vehicleIdA vehicle's id (
veh_…): one owner's period with one VIN. Another owner of the same car has another id.tripIdA drive's id (
drv_…), as the drives list gives it.
Query parameters
startedAtstring
Errors
400Say when the drive started (startedAt).403Mirage is only for the person signed in.403Only people who manage the server can make courses here.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/drives/{vehicleId}/{tripId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
tripId: string
startedAt: number
km: null | number
route: [number, number][]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ coursesMakes a course: name, rankBy (efficiency, smoothness or efforts; time and topSpeed only for a course wholly inside a closed circuit), and either path ([lat, lon] points drawn or typed) or a stretch of your own drive (vehicleId, tripId, startedAt, fromKm, toKm). Entered cars' drives from the last 30 days are matched against it. Manage Server, or any member where the server allows it.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
400Pick the stretch of the drive (fromKm,toKm).403Mirage is only for the person signed in.403Only people who manage the server can make courses here.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/courses' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
course: {
courseId: string
name: string
description: null | string
emoji: null | string
path: [number, number][]
km: number
loop: boolean
rankBy: "time" | "efficiency" | "topSpeed" | "efforts" | "smoothness"
circuitId: null | string
circuitName: null | string
source: "drive" | "points" | "drawn"
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ courses/ snapPuts a drawn route on the roads: path (2 to 501 [lat, lon] points). Returns path and snapped; where no road matches closely, or snapping isn't available (reason: no_match, no_token, error), the route as sent. Up to 60 an hour a person. Whoever may make courses here.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/courses/snap' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
path: [number, number][]
snapped: boolean
reason?: "error" | "no_match" | "no_token"
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ courses/ previewWhich of your own drives from the last 30 days would count on a drawn route: path (2 to 501 [lat, lon] points). Returns checked (drives read, at most 20) and matches (each car, when, distance, smoothness, efficiency and the stretch; never a time or speed). Only yours. Up to 30 an hour a person. Whoever may make courses here.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/courses/preview' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
checked: number
matches: {
vehicleId: string
car: string
startedAt: number
km: number
smoothness: number
whPerKm?: number
path: [number, number][]
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ courses/ :courseIdA course (its route), its standings for a period (all, season, year, month, week; offset for earlier ones), best effort per person, and your own efforts. Road courses keep no times.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).courseIdA Mirage leaderboard course id (
lcr_…).
Query parameters
periodstringDefault
"all".
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/courses/{courseId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
course: {
courseId: string
name: string
description: null | string
emoji: null | string
path: [number, number][]
km: number
loop: boolean
rankBy: "time" | "efficiency" | "topSpeed" | "efforts" | "smoothness"
circuitId: null | string
circuitName: null | string
source: "drive" | "points" | "drawn"
createdAt: number
}
period: {
period: "all" | "month" | "year" | "week" | "season"
label: string
from: null | string
to: null | string
}
rows: {
rank: number
value: number
display: string
efforts: number
person: {
userId: string
name: string
avatarUrl: null | string
anonymous: boolean
me: boolean
}
}[]
me: null | {
rank: number
value: number
display: string
efforts: number
person: {
userId: string
name: string
avatarUrl: null | string
anonymous: boolean
me: boolean
}
}
myEfforts: {
elapsedMs?: null | number
topSpeedKmh?: null | number
day: string
km: number
whPerKm: null | number
smoothness: number
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ courses/ :courseIdRenames a course or changes how it ranks (the safety rule applies). Its maker or Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).courseIdA Mirage leaderboard course id (
lcr_…).
Errors
403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/courses/{courseId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
course: {
courseId: string
name: string
description: null | string
emoji: null | string
path: [number, number][]
km: number
loop: boolean
rankBy: "time" | "efficiency" | "topSpeed" | "efforts" | "smoothness"
circuitId: null | string
circuitName: null | string
source: "drive" | "points" | "drawn"
createdAt: number
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ courses/ :courseIdDeletes a course. Its maker or Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).courseIdA Mirage leaderboard course id (
lcr_…).
Errors
403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/courses/{courseId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ leaderboards/ seasonsMakes a season: name, from and to (local days, inclusive, at most 400 days), optional emoji. Season boards rank over it. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/seasons' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
season: {
seasonId: string
name: string
emoji: null | string
from: string
to: string
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ seasons/ :seasonIdChanges a season's name, emoji or dates. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).seasonIdA Mirage leaderboard season id (
lss_…).
Errors
403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/seasons/{seasonId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
season: {
seasonId: string
name: string
emoji: null | string
from: string
to: string
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ seasons/ :seasonIdDeletes a season. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).seasonIdA Mirage leaderboard season id (
lss_…).
Errors
403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/seasons/{seasonId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ leaderboards/ badgesMakes a badge: name, emoji, optional color and description, and a rule: { kind: rank, boardId, top } (a top place when a board's period ends), { kind: threshold, metric, value, period } (a total reached in a month, year, season or all time; road metrics only), { kind: course, courseId, efforts }, or { kind: manual }. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/badges' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
badge: {
badgeId: string
name: string
emoji: string
color: null | string
description: null | string
rule: {
kind: "rank"
boardId: string
top: number
} | {
kind: "threshold"
metric: string
value: number
period: "all" | "month" | "year" | "season"
} | {
kind: "course"
courseId: string
efforts: number
} | {
kind: "manual"
}
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ badges/ :badgeIdChanges a badge. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).badgeIdA Mirage leaderboard badge id (
lbg_…).
Errors
403Mirage is only for the person signed in.
curl -X PATCH 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/badges/{badgeId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
badge: {
badgeId: string
name: string
emoji: string
color: null | string
description: null | string
rule: {
kind: "rank"
boardId: string
top: number
} | {
kind: "threshold"
metric: string
value: number
period: "all" | "month" | "year" | "season"
} | {
kind: "course"
courseId: string
efforts: number
} | {
kind: "manual"
}
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ badges/ :badgeIdDeletes a badge and its awards. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).badgeIdA Mirage leaderboard badge id (
lbg_…).
Errors
403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/badges/{badgeId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ leaderboards/ badges/ :badgeId/ awardsGives a hand-awarded badge to a member (userId, optional note). Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).badgeIdA Mirage leaderboard badge id (
lbg_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/badges/{badgeId}/awards' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
awardKey: string
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ badges/ :badgeId/ awards/ :userId/ :awardKeyTakes an award back. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).badgeIdA Mirage leaderboard badge id (
lbg_…).userIdA member's user id (
usr_…).awardKeyWhat an award was for: the board and period, the course, or
hand:<time>for one given by hand.
Errors
403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/badges/{badgeId}/awards/{userId}/{awardKey}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ messaging/ servers/ :serverId/ leaderboards/ leaguesMakes a league between servers: name, metric (a road metric), period (week, month, year, all), aggregate (total or average of members), optional emoji. Its code (for other servers to join with) is shown to its host. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/leagues' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 201
{
league: {
code?: string
leagueId: string
name: string
emoji: null | string
metric: string
period: string
aggregate: "total" | "average"
servers: number
host: boolean
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ leagues/ joinJoins a league with its code, as this server (up to 20 servers a league). Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).
Errors
403Mirage is only for the person signed in.
curl -X POST 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/leagues/join' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
league: {
code?: string
leagueId: string
name: string
emoji: null | string
metric: string
period: string
aggregate: "total" | "average"
servers: number
host: boolean
}
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ leagues/ :leagueIdA league's standings: each server's score from its taking-part members, with names and icons; never anyone in them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).leagueIdA Mirage league id (
lgu_…).
Errors
403Mirage is only for the person signed in.
curl 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/leagues/{leagueId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
league: {
code?: string
leagueId: string
name: string
emoji: null | string
metric: string
period: string
aggregate: "total" | "average"
servers: number
host: boolean
}
period: {
label: string
from: null | string
to: null | string
}
rows: {
rank: number
value: number
display: string
server: {
serverId: string
name: string
icon: null | string
people: number
mine: boolean
}
}[]
unranked: {
serverId: string
name: string
icon: null | string
people: number
mine: boolean
}[]
}/ v1/ messaging/ servers/ :serverId/ leaderboards/ leagues/ :leagueIdLeaves a league; its host leaving ends it. Manage Server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
serverIdMirage server id (
gld_…).leagueIdA Mirage league id (
lgu_…).
Errors
403Mirage is only for the person signed in.
curl -X DELETE 'https://api.cactive.com.au/v1/messaging/servers/{serverId}/leaderboards/leagues/{leagueId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body