chat
Methods and types of the `chat` namespace (`client.chat` / `bot.chat`).
Interfaces
AddableMembersByScope
Addable members for a legacy project-scoped member chat, split by the membership they come from.
Properties
AttachmentUploadRecord
One entry of an upload response: the created asset plus the signed upload data the
caller uses to PUT the bytes, or a per-file failure (status: 'fail' with error).
Properties
| Property | Type |
|---|---|
asset? | Asset |
error? | string |
id | string | number |
name | string |
signedUrlData? | any |
status | "success" | "fail" |
uploadChunkSizeInBytes? | number |
BaseAnnotation
Extended by
NestedDotAnnotationNestedShapeAnnotationNestedTextAnnotationNestedPathAnnotationDotAnnotationFrameCommentAnnotationShapeAnnotationTextAnnotationPathAnnotation
Properties
CreateAssetChatAndMessageData
Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
annotations? | Annotation[] | - | CreateMessageData.annotations |
assetMentions? | string[] | - | CreateMessageData.assetMentions |
attachments? | ( | FileAttachmentData | ScratchAttachmentRef)[] | - | CreateMessageData.attachments |
content? | string | - | CreateMessageData.content |
folderMentions? | string[] | - | CreateMessageData.folderMentions |
linkPreviews? | LinkPreview[] | - | CreateMessageData.linkPreviews |
mentions? | string[] | - | CreateMessageData.mentions |
pageContext? | { pageTitle?: string; path?: string; visibleAssetIds?: string[]; } | AI-chat only. Sent on the regular chat endpoint when the target chat is an AI topic so the assistant sees a snapshot of the page the user was looking at. Regular chats ignore this field. | CreateMessageData.pageContext |
pageContext.pageTitle? | string | - | - |
pageContext.path? | string | - | - |
pageContext.visibleAssetIds? | string[] | - | - |
publicMentions? | string[] | - | CreateMessageData.publicMentions |
quotes? | string[] | - | CreateMessageData.quotes |
replyToId? | string | - | CreateMessageData.replyToId |
submissionMentions? | string[] | - | CreateMessageData.submissionMentions |
taskMentions? | string[] | - | CreateMessageData.taskMentions |
CreateAssetChatAndMessageParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
messages? | number | - |
replies? | number | - |
sort? | Record<string, -1 | 1> | SortParams.sort |
CreateMemberChatData
Properties
CreateMessageData
Extended by
Properties
| Property | Type | Description |
|---|---|---|
annotations? | Annotation[] | - |
assetMentions? | string[] | - |
attachments? | ( | FileAttachmentData | ScratchAttachmentRef)[] | - |
content? | string | - |
folderMentions? | string[] | - |
linkPreviews? | LinkPreview[] | - |
mentions? | string[] | - |
pageContext? | { pageTitle?: string; path?: string; visibleAssetIds?: string[]; } | AI-chat only. Sent on the regular chat endpoint when the target chat is an AI topic so the assistant sees a snapshot of the page the user was looking at. Regular chats ignore this field. |
pageContext.pageTitle? | string | - |
pageContext.path? | string | - |
pageContext.visibleAssetIds? | string[] | - |
publicMentions? | string[] | - |
quotes? | string[] | - |
replyToId? | string | - |
submissionMentions? | string[] | - |
taskMentions? | string[] | - |
CreateReactionData
Properties
CreateTopicChatData
Properties
| Property | Type |
|---|---|
subject? | string |
topicId | string |
topicType | "asset" | "project" |
visibility? | "creator" | "reviewer" |
DateRangeParams
Extended by
Properties
| Property | Type |
|---|---|
createdAfter? | string | number |
createdBefore? | string | number |
updatedBefore? | string | number |
DotAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
coordinates | PercentageCoordinates | - |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
nestedAnnotations? | NestedAnnotation[] | - |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
radius? | number | - |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "dot" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
FetchLinkPreviewsData
Properties
FileAttachmentData
Properties
FrameCommentAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
nestedAnnotations? | NestedAnnotation[] | - |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "frameComment" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
GetChatByTopicIdParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
messages? | number | - |
replies? | number | - |
sort? | Record<string, -1 | 1> | SortParams.sort |
topicType | string | - |
visibility? | "creator" | "reviewer" | - |
GetMentionableAssetsParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
cursor? | string | PaginationParams.cursor |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
limit? | number | PaginationParams.limit |
nameSearch? | string | - |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
GetMentionableFoldersParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
cursor? | string | PaginationParams.cursor |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
limit? | number | PaginationParams.limit |
nameSearch? | string | - |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
GetMentionablePublicsParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
cursor? | string | PaginationParams.cursor |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
limit? | number | PaginationParams.limit |
nameSearch? | string | - |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
GetMentionableSubmissionsParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
cursor? | string | PaginationParams.cursor |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
limit? | number | PaginationParams.limit |
nameSearch? | string | - |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
GetMentionableTasksParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
cursor? | string | PaginationParams.cursor |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
limit? | number | PaginationParams.limit |
nameSearch? | string | - |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
GetMessageParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
replies? | number | - |
sort? | Record<string, -1 | 1> | SortParams.sort |
GetMessagesParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
authorId? | string | - |
contentSearch? | string | - |
createdAfter? | string | number | DateRangeParams.createdAfter |
createdBefore? | string | number | DateRangeParams.createdBefore |
cursor? | string | PaginationParams.cursor |
excludeReplies? | boolean | - |
hasAnnotations? | boolean | - |
hasAttachments? | boolean | - |
highlighted? | boolean | - |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
isConvoMessage? | boolean | - |
limit? | number | PaginationParams.limit |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
replies? | number | - |
replyLimit? | number | - |
replySort? | Record<string, -1 | 1> | - |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
type? | "user" | "system" | - |
updatedBefore? | string | number | DateRangeParams.updatedBefore |
GetRepliesParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
createdAfter? | string | number | DateRangeParams.createdAfter |
createdBefore? | string | number | DateRangeParams.createdBefore |
cursor? | string | PaginationParams.cursor |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
limit? | number | PaginationParams.limit |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
updatedBefore? | string | number | DateRangeParams.updatedBefore |
GetUsersMemberChatsParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
archived? | boolean | - |
createdAfter? | string | number | DateRangeParams.createdAfter |
createdBefore? | string | number | DateRangeParams.createdBefore |
cursor? | string | PaginationParams.cursor |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
limit? | number | PaginationParams.limit |
memberSearch? | string | - |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
recentMessages? | number | - |
scopeId? | string | - |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
subjectSearch? | string | - |
updatedBefore? | string | number | DateRangeParams.updatedBefore |
GetUsersMentionsParams
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
authorId? | string | - |
chatId? | string | - |
createdAfter? | string | number | DateRangeParams.createdAfter |
createdBefore? | string | number | DateRangeParams.createdBefore |
cursor? | string | PaginationParams.cursor |
includeCounts? | boolean | PaginationParams.includeCounts |
includeCursorRecord? | boolean | PaginationParams.includeCursorRecord |
includeStartAtRecord? | boolean | PaginationParams.includeStartAtRecord |
limit? | number | PaginationParams.limit |
page? | number | PaginationParams.page |
paginate? | "cursor" | "index" | PaginationParams.paginate |
paginateReverse? | boolean | PaginationParams.paginateReverse |
sort? | Record<string, -1 | 1> | SortParams.sort |
startAt? | string | PaginationParams.startAt |
updatedBefore? | string | number | DateRangeParams.updatedBefore |
LinkPreviewResponse
Properties
MemberIdList
Properties
MentionablePublic
Mentionable public collection entry returned by
getMentionablePublics. token is the URL-safe stable identifier
used in the publicMention:<token> message-token payload.
Properties
MentionableSubmission
Mentionable submission entry returned by
getMentionableSubmissions. Each submission's id doubles as the
chatId (the ChatSubmission row IS the submission chat).
Properties
NestedDotAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
coordinates | PercentageCoordinates | - |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
radius? | number | - |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "dot" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
NestedPathAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
pathData | string | - |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeColor? | string | - |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
strokeWidth? | number | - |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "path" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
NestedShapeAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
coordinates | PercentageCoordinates[] | - |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillColor? | string | - |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeColor? | string | - |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
strokeWidth? | number | - |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "rectangle" | "circle" | "triangle" | "arrow" | "line" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
NestedTextAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
content | string | - |
coordinates | PercentageCoordinates | - |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
fontFamily? | | "Arial" | "Helvetica" | "Times New Roman" | "Courier New" | "Georgia" | "Verdana" | - |
fontSize? | number | - |
fontStyle? | "normal" | "italic" | - |
fontWeight? | "normal" | "bold" | - |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
textColor? | string | - |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "text" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
PaginationParams
Extended by
GetUsersMemberChatsParamsGetUsersMentionsParamsGetMessagesParamsGetRepliesParamsGetMentionableAssetsParamsGetMentionableFoldersParamsGetMentionableTasksParamsGetMentionableSubmissionsParamsGetMentionablePublicsParams
Properties
| Property | Type |
|---|---|
cursor? | string |
includeCounts? | boolean |
includeCursorRecord? | boolean |
includeStartAtRecord? | boolean |
limit? | number |
page? | number |
paginate? | "cursor" | "index" |
paginateReverse? | boolean |
startAt? | string |
PathAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
nestedAnnotations? | NestedAnnotation[] | - |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
pathData | string | - |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeColor? | string | - |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
strokeWidth? | number | - |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "path" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
PercentageCoordinates
Properties
ReviseMessageData
Properties
| Property | Type |
|---|---|
annotations? | Annotation[] |
assetMentions? | string[] |
content? | string |
folderMentions? | string[] |
linkPreviews? | LinkPreview[] |
mentions? | string[] |
publicMentions? | string[] |
quotes? | string[] |
submissionMentions? | string[] |
taskMentions? | string[] |
ScratchAttachmentRef
Scratch-shape attachment ref — points at bytes already uploaded as a
scratch upload. Used by AI Revision (Attach to chat) and the Nurama
Support chat (image attachments). The chat-send endpoint accepts
either this shape OR the upload-shape (FileAttachmentData) in the
same attachments[] array; the server handles each item according
to its shape.
Properties
ShapeAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
coordinates | PercentageCoordinates[] | - |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillColor? | string | - |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
nestedAnnotations? | NestedAnnotation[] | - |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeColor? | string | - |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
strokeWidth? | number | - |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "rectangle" | "circle" | "triangle" | "arrow" | "line" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
SortParams
Extended by
GetUsersMemberChatsParamsGetUsersMentionsParamsGetChatByTopicIdParamsGetMessagesParamsCreateAssetChatAndMessageParamsGetMessageParamsGetRepliesParamsGetMentionableAssetsParamsGetMentionableFoldersParamsGetMentionableTasksParamsGetMentionableSubmissionsParamsGetMentionablePublicsParams
Properties
TextAnnotation
Extends
Properties
| Property | Type | Inherited from |
|---|---|---|
angle? | number | BaseAnnotation.angle |
color? | string | BaseAnnotation.color |
content | string | - |
coordinates | PercentageCoordinates | - |
endTimestamp? | number | BaseAnnotation.endTimestamp |
fillRule? | "nonzero" | "evenodd" | BaseAnnotation.fillRule |
flipX? | boolean | BaseAnnotation.flipX |
flipY? | boolean | BaseAnnotation.flipY |
fontFamily? | | "Arial" | "Helvetica" | "Times New Roman" | "Courier New" | "Georgia" | "Verdana" | - |
fontSize? | number | - |
fontStyle? | "normal" | "italic" | - |
fontWeight? | "normal" | "bold" | - |
frame? | number | BaseAnnotation.frame |
height? | number | BaseAnnotation.height |
left? | number | BaseAnnotation.left |
nestedAnnotations? | NestedAnnotation[] | - |
opacity? | number | BaseAnnotation.opacity |
originX? | "left" | "center" | "right" | BaseAnnotation.originX |
originY? | "center" | "top" | "bottom" | BaseAnnotation.originY |
scaleX? | number | BaseAnnotation.scaleX |
scaleY? | number | BaseAnnotation.scaleY |
shadow? | { blur?: number; color?: string; offsetX?: number; offsetY?: number; } | BaseAnnotation.shadow |
shadow.blur? | number | - |
shadow.color? | string | - |
shadow.offsetX? | number | - |
shadow.offsetY? | number | - |
skewX? | number | BaseAnnotation.skewX |
skewY? | number | BaseAnnotation.skewY |
startTimestamp? | number | BaseAnnotation.startTimestamp |
strokeDashArray? | number[] | BaseAnnotation.strokeDashArray |
strokeLineCap? | "butt" | "round" | "square" | BaseAnnotation.strokeLineCap |
strokeLineJoin? | "round" | "miter" | "bevel" | BaseAnnotation.strokeLineJoin |
strokeMiterLimit? | number | BaseAnnotation.strokeMiterLimit |
textColor? | string | - |
timestamp? | number | BaseAnnotation.timestamp |
top? | number | BaseAnnotation.top |
type | "text" | - |
visible? | boolean | BaseAnnotation.visible |
width? | number | BaseAnnotation.width |
UpdateChatSubjectData
Properties
UpdateMemberChatData
Properties
UpdateMemberChatIconData
Properties
Type Aliases
Annotation
type Annotation =
| DotAnnotation
| FrameCommentAnnotation
| ShapeAnnotation
| TextAnnotation
| PathAnnotation;AttachmentResponse
type AttachmentResponse = AttachmentUploadRecord;ChatMessageResponse
type ChatMessageResponse = ChatMessage;ChatResponse
type ChatResponse = Chat;MemberChatResponse
type MemberChatResponse = ChatMember;MemberResponse
type MemberResponse = Membership;NestedAnnotation
type NestedAnnotation =
| NestedDotAnnotation
| NestedShapeAnnotation
| NestedTextAnnotation
| NestedPathAnnotation;PaginatedResponse
type PaginatedResponse<T> = PaginatedResult | CursorPaginatedResult & {
results?: T[];
};Type Declaration
| Name | Type |
|---|---|
results? | T[] |
Type Parameters
| Type Parameter |
|---|
T |
Functions
default()
function default(client): {
addAttachments: Promise<AttachmentUploadRecord[]>;
addMembers: Promise<ChatMember>;
archiveMemberChat: Promise<ChatMember>;
createAssetChatAndMessage: Promise<any>;
createMemberChat: Promise<ChatMember>;
createMessage: Promise<ChatMessage>;
createMessageShortLink: Promise<{
code: string;
shortUrl: string;
}>;
createReaction: Promise<ChatMessage>;
createTopicChat: Promise<Chat>;
deleteChat: Promise<void>;
deleteMemberChat: Promise<void>;
deleteMessage: Promise<ChatMessage>;
fetchLinkPreviews: Promise<LinkPreviewResponse>;
followChat: Promise<void>;
getAddableMembers: Promise<AddableMembersByScope | Membership[]>;
getChat: Promise<Chat>;
getChatByTopicId: Promise<Chat>;
getMemberChat: Promise<ChatMember>;
getMentionableAssets: Promise<PaginatedResponse<Asset>>;
getMentionableFolders: Promise<PaginatedResponse<Folder>>;
getMentionablePublics: Promise<PaginatedResponse<MentionablePublic>>;
getMentionableSubmissions: Promise<PaginatedResponse<MentionableSubmission>>;
getMentionableTasks: Promise<PaginatedResponse<any>>;
getMentions: Promise<PaginatedResponse<ChatMessage>>;
getMessage: Promise<ChatMessage>;
getMessages: Promise<PaginatedResponse<ChatMessage>>;
getReplies: Promise<PaginatedResponse<ChatMessage>>;
getScopeAddableMembers: Promise<AddableMembersByScope | Membership[]>;
getUsersMemberChats: Promise<PaginatedResponse<ChatMember>>;
getWorkspaceProjectChats: Promise<any[]>;
highlightMessage: Promise<ChatMessage>;
removeAttachment: Promise<ChatMessage>;
removeMembers: Promise<ChatMember>;
removeReaction: Promise<ChatMessage>;
reviseMessage: Promise<ChatMessage>;
unarchiveMemberChat: Promise<ChatMember>;
unfollowChat: Promise<void>;
unhighlightMessage: Promise<ChatMessage>;
updateChatSubject: Promise<Chat>;
updateMemberChat: Promise<ChatMember>;
updateMemberChatIcon: Promise<{
chat: ChatMember;
} & AttachmentUploadRecord>;
};Defines chat-related methods for the NuramaClient.
Parameters
| Parameter | Type | Description |
|---|---|---|
client | default | The NuramaClient instance. |
Returns
An object containing the chat-related methods.
| Name | Type | Description |
|---|---|---|
addAttachments() | (messageId, attachments) => Promise<AttachmentUploadRecord[]> | Creates attachment assets for an existing message and returns signed upload URLs for them. Only the message's author may attach, and in topic/submission chats they also need canCreateAttachment. Only image and video file names are accepted, each checksum must be a 32-64 character hex MD5/SHA-256 digest, id must be an integer no greater than 10, and the message may hold at most 6 attachments in total (exceedsMaxAttachments). The request is also checked against the workspace storage quota (uploadRequestExceedsSubscription). Throws 'messageId is required.' when messageId is falsy. |
addMembers() | (chatId, data) => Promise<ChatMember> | Adds users to a member chat by user ID. The caller must be a member of the chat, and every user must be chat-eligible in the chat's scope (membersInvalid otherwise). memberIds is not enforced by validation, but the request cannot succeed without it. Throws 'chatId is required.' when chatId is falsy. |
archiveMemberChat() | (chatId) => Promise<ChatMember> | Archives a member chat for the calling user only. Adds the caller to the chat's archivedBy list; other members' view of the chat is unaffected. The caller must be a member of the chat. Throws 'chatId is required.' when chatId is falsy. |
createAssetChatAndMessage() | ( assetId, visibility, data, params? ) => Promise<any> | Posts a message to an asset's chat at the given visibility, creating the chat first if it does not exist yet (asset chats are normally auto-created, so this mainly covers legacy assets). Only media assets are accepted (assetInvalidFunctionType / 404 otherwise). Requires both canCreate{Creator|Reviewer}Chat and canCreate{Creator|Reviewer}ChatMessage on the asset for the chosen visibility. The body follows the same rules as createMessage. The params argument is neither validated nor forwarded by the API handler, so the returned chat always carries 10 recent messages with 10 replies each, sorted { id: -1 }. Throws 'assetId is required.' when assetId is falsy. |
createMemberChat() | (data) => Promise<ChatMember> | Creates a member ("Team") chat in a workspace with the given members. Only scopeType: 'workspace' is accepted by the API: project-scoped member chats are deprecated and social is not supported yet, so both are rejected with 400 even though the type still allows them. Requires canCreateWorkspaceMemberChat on the workspace. The caller is always added as the first member, every member must be chat-eligible in the scope (membersInvalid otherwise), and a random approved colour is assigned (the API also accepts an optional color, not exposed on this type). |
createMessage() | (chatId, data) => Promise<ChatMessage> | Posts a message to any chat type (topic, member, submission, AI, support). Either content (max 10,000 chars) or at least one attachment is required. API tokens need the chat:write scope (tokenScopeMissing / 403 otherwise); users need message-create permission on the chat, e.g. canCreateCreatorChatMessage / canCreateReviewerChatMessage for topic chats or membership for member chats. Limits: 6 attachments, 10 of each mention kind, 5 quotes, 5 link previews and 100 annotations. Mentioning users in topic/member/submission chats creates tasks and notifications for them. pageContext is only read by AI chats and ignored by every other chat type. Throws 'chatId is required.' when chatId is falsy. |
createMessageShortLink() | (messageId) => Promise<{ code: string; shortUrl: string; }> | Creates a short link for a chat message, or returns the existing one if the message already has a short link. Visibility is inherited from the parent chat (creator / reviewer for topic chats, null for member chats). Requires read access to the message's chat (canCreateMessageShortLink). Throws 'messageId is required.' when messageId is falsy. |
createReaction() | (messageId, data) => Promise<ChatMessage> | Adds the caller's emoji reaction to a message, replacing any reaction they already had on it. Each user holds at most one reaction per message. Requires message-create permission on the chat (canCreateReaction). emoji must be 1-10 characters. Throws 'messageId is required.' when messageId is falsy. |
createTopicChat() | (data) => Promise<Chat> | Creates a topic chat for a project or asset at a given visibility. Requires canCreateCreatorChat (visibility creator) or canCreateReviewerChat (visibility reviewer) on the topic resource. Although visibility is optional in the type, the permission check only passes when it is one of those two values, so omitting it results in 403. |
deleteChat() | (chatId) => Promise<void> | Marks a topic chat for deletion. In practice this only succeeds for user-topic chats owned by the caller: project and asset topic chats are refused with topicChatsMayNotBeDeleted, and any other topic type with unknownError. Member chats are deleted with deleteMemberChat. Throws 'chatId is required.' when chatId is falsy. |
deleteMemberChat() | (chatId) => Promise<void> | Marks a member chat, its messages and its attachments for deletion. Only the chat's creator may delete it; other members receive 403. From the members' perspective the chat disappears immediately; the rows are removed later by the cleanup service. Throws 'chatId is required.' when chatId is falsy. |
deleteMessage() | (messageId) => Promise<ChatMessage> | Marks a message for deletion. Only the author may delete, and in topic/submission chats they also need canDeleteOwnChatMessage. The row is removed later by the cleanup service. Throws 'messageId is required.' when messageId is falsy. |
fetchLinkPreviews() | (data) => Promise<LinkPreviewResponse> | Fetches Open Graph / meta-tag preview data for one to five URLs. Each preview carries an HMAC-SHA256 signature that must be passed back unchanged in linkPreviews when creating or revising a message, as the API verifies it to reject spoofed previews. Duplicate URLs are collapsed and URLs that fail validation, fetching or SSRF checks are omitted, so previews may be shorter than urls. Rate limited to 30 requests per minute per IP. |
followChat() | (chatId) => Promise<void> | Adds the caller to a chat's following list so they are notified about new messages and updates. Works with topic, member and submission chats and is idempotent. Requires message-create permission on the chat (canCreateChatMessage). Throws 'chatId is required.' when chatId is falsy. |
getAddableMembers() | (chatId) => Promise<AddableMembersByScope | Membership[]> | Lists the members that can be added to an existing member chat, based on the chat's scope and the caller's role in it. The caller must be a member of the chat. For workspace-scoped chats the result is a flat array of memberships; for legacy project-scoped chats it is an AddableMembersByScope object. Throws 'chatId is required.' when chatId is falsy. |
getChat() | (chatId) => Promise<Chat> | Retrieves a topic chat (project, asset, task or public) by ID without its messages. Requires canGetCreatorChat or canGetReviewerChat on the chat, matching its visibility. Only topic chats are served here; member chats are served by getMemberChat and a member chat ID yields chatNotFound. Throws 'chatId is required.' when chatId is falsy. |
getChatByTopicId() | (topicId, params) => Promise<Chat> | Retrieves the topic chat for a project, asset, public release or task, together with its most recent messages and their replies. Requires canGetCreatorChat or canGetReviewerChat on the chat, matching params.visibility. replies (default 10, max 100) and sort (default { id: -1 }) are honoured, but messages is accepted and then not forwarded by the API handler, so 10 recent messages are always returned. Throws 'topicId is required.' when topicId is falsy. |
getMemberChat() | (chatId) => Promise<ChatMember> | Retrieves a member chat by ID without its messages. The caller must be a member of the chat. Throws 'chatId is required.' when chatId is falsy. |
getMentionableAssets() | (chatId, params?) => Promise<PaginatedResponse<Asset>> | Lists the active assets that can be mentioned ({{assetMention:assetId}}) in a chat. What is returned depends on the chat: project and asset topic chats return the project's assets at the chat's visibility; project-scoped member chats and submission chats return all of the project's assets; AI chats return the topic project's assets filtered to the caller's own visibility tiers; workspace/social member chats return an empty list. Requires read access to the chat (canGetChatMentionableAssets). Defaults to index pagination (page, limit max 100, sort { name: 1 }); pass paginate: 'cursor' for cursor pagination. startAt / includeStartAtRecord are not accepted here. Throws 'chatId is required.' when chatId is falsy. |
getMentionableFolders() | (chatId, params?) => Promise<PaginatedResponse<Folder>> | Lists the active folders that can be mentioned ({{folderMention:folderId}}) in a chat. What is returned depends on the chat: project and asset topic chats return the project's folders at the chat's visibility; project-scoped member chats return all of the project's folders; submission chats return the project's reviewer-visibility folders; AI chats return the topic project's folders filtered to the caller's own visibility tiers; workspace/social member chats return an empty list. Requires read access to the chat (canGetChatMentionableFolders). Defaults to index pagination (page, limit max 100, sort { name: 1 }); pass paginate: 'cursor' for cursor pagination. startAt / includeStartAtRecord are not accepted here. Throws 'chatId is required.' when chatId is falsy. |
getMentionablePublics() | (chatId, params?) => Promise<PaginatedResponse<MentionablePublic>> | Lists the active public releases (share links) owned by a chat's project that can be mentioned ({{publicMention:token}}). The project is resolved from the chat exactly as for getMentionableSubmissions; chats without a project return an empty page. Requires read access to the chat (canGetChatMentionablePublics). Index pagination only (page, limit max 100, sort { createdAt: -1 }, also sortable by title and expires); cursor-pagination params cause a 400. Throws 'chatId is required.' when chatId is falsy. |
getMentionableSubmissions() | (chatId, params?) => Promise<PaginatedResponse<MentionableSubmission>> | Lists the active submissions in a chat's project that can be mentioned ({{submissionMention:submissionId}}). The project is resolved from the chat (project/asset/task topic chats, project-scoped member chats, submission chats and project-scoped AI chats); chats without a project return an empty page. Requires read access to the chat (canGetChatMentionableSubmissions). Index pagination only (page, limit max 100, sort { createdAt: -1 }, also sortable by subject and lastMessageAt); cursor-pagination params cause a 400. Throws 'chatId is required.' when chatId is falsy. |
getMentionableTasks() | (chatId, params?) => Promise<PaginatedResponse<any>> | Lists the board tasks that can be mentioned ({{taskMention:taskId}}) in a chat. Requires the workspace to have the boards capability (capabilityNotAvailable / 403 otherwise) and read access to the chat (canGetChatMentionableTasks). Project, asset and task topic chats return tasks in the project on boards whose visibility includes the chat's; project-scoped member chats return every board task in the project; submission chats return tasks on reviewer-visible boards; workspace/social member chats return an empty list. Legacy tasks without a board are never returned. Defaults to index pagination (page, limit max 100, sort { updatedAt: -1 }); pass paginate: 'cursor' for cursor pagination. Throws 'chatId is required.' when chatId is falsy. |
getMentions() | (params?) => Promise<PaginatedResponse<ChatMessage>> | Lists the messages in which the caller was mentioned. Defaults to index pagination (page, limit max 100, sort { id: -1 }); pass paginate: 'cursor' for cursor pagination. Filter with chatId and/or authorId. createdBefore is only accepted with index pagination; createdAfter and updatedBefore from DateRangeParams are not accepted by this endpoint and cause a 400. |
getMessage() | (messageId, params?) => Promise<ChatMessage> | Retrieves a single message by ID with its most recent replies. Requires read access to the message's chat (canGetChatMessage). replies defaults to 10 (max 100) and sort (default { id: -1 }) orders the included replies. Throws 'messageId is required.' when messageId is falsy. |
getMessages() | (chatId, params?) => Promise<PaginatedResponse<ChatMessage>> | Lists a chat's active messages with their recent replies and populated attachments and mentions. Requires read access to the chat (canGetChat); API tokens need the chat:read scope (tokenScopeMissing / 403 otherwise). Defaults to index pagination (page, limit max 100, sort { id: -1 }); pass paginate: 'cursor' for cursor pagination. createdBefore / createdAfter are only accepted with index pagination and updatedBefore is not accepted at all. replyLimit (default 10, max 100) sets the replies returned per message; replies is a deprecated alias that takes precedence over replyLimit whenever it is set to anything other than 10. Throws 'chatId is required.' when chatId is falsy. |
getReplies() | (messageId, params?) => Promise<PaginatedResponse<ChatMessage>> | Lists the active replies to a message, with attachments populated. Requires read access to the message's chat (canGetChatMessage). Defaults to index pagination (page, limit max 100, sort { id: -1 }); pass paginate: 'cursor' for cursor pagination. createdBefore / createdAfter are only accepted with index pagination and updatedBefore is not accepted at all. Throws 'messageId is required.' when messageId is falsy. |
getScopeAddableMembers() | (scopeType, scopeId) => Promise<AddableMembersByScope | Membership[]> | Lists the members addable to a NEW member chat, by scope, before the chat exists. Use this to populate the create-chat member picker — unlike the raw membership-list endpoints it isn't admin-gated, so non-admin members allowed to start a Team Chat still get the correct list. Requires canCreateWorkspaceMemberChat (or canCreateProjectMemberChat) on the scope. For project scope the result is an AddableMembersByScope object; note that project-scoped member chats can no longer be created. Throws 'scopeType is required.' or 'scopeId is required.' when either is falsy. |
getUsersMemberChats() | (params?) => Promise<PaginatedResponse<ChatMember>> | Lists the member chats the caller belongs to, most recently updated first, each with its recent messages. Defaults to index pagination (page, limit max 20); pass paginate: 'cursor' for cursor pagination. updatedBefore is only accepted with index pagination, recentMessages caps the messages returned per chat (default and max 20), and archived narrows to chats the caller has (true) or has not (false) archived. createdBefore / createdAfter from DateRangeParams are not accepted by this endpoint and cause a 400. |
getWorkspaceProjectChats() | (workspaceId) => Promise<any[]> | Retrieves every project topic chat (creator/reviewer) the caller can access across all projects in a workspace, with the latest message and message count for each, ordered by most recent activity. Powers the workspace-level "Project Chat" list. Requires canGetWorkspace on the workspace; access to each project's chats is derived from the caller's inherited canGetCreatorChat / canGetReviewerChat. Throws 'workspaceId is required.' when workspaceId is falsy. |
highlightMessage() | (messageId) => Promise<ChatMessage> | Highlights a message, recording the caller as the highlighter. In topic and submission chats this requires canHighlightMessage on the chat; in member chats any member may highlight. For project and asset topic chats a system message is posted in the project chat of the same visibility, a chatHighlightMessage notification is sent and project members are emailed. Throws 'messageId is required.' when messageId is falsy. |
removeAttachment() | (messageId, assetId) => Promise<ChatMessage> | Removes an attachment from a message and marks the asset for deletion. Only the author may remove attachments, and in topic/submission chats they also need canDeleteOwnAttachment. If the message is left with no content and no attachments it is marked for deletion as well, and the deleted message is returned. Throws 'messageId is required.' or 'assetId is required.' when either is falsy. |
removeMembers() | (chatId, data) => Promise<ChatMember> | Removes users from a member chat by user ID. The caller must be a member of the chat. The chat's creator cannot be removed (ownerCannotLeaveChat) and unknown user IDs produce userNotFound. Sent as a DELETE with a JSON body. Throws 'chatId is required.' when chatId is falsy. |
removeReaction() | (messageId) => Promise<ChatMessage> | Removes the caller's own reaction from a message. Gated by the same permission as createReaction. Calling it when the caller has no reaction is a no-op that still returns the message. Throws 'messageId is required.' when messageId is falsy. |
reviseMessage() | (messageId, data) => Promise<ChatMessage> | Revises a message's content, mentions, quotes, annotations and link previews, keeping the previous version as a revision. Only the author may revise, and in topic/submission chats they also need canUpdateOwnChatMessage. Annotations are replaced, not merged: omit annotations to keep the current ones, send [] to remove them all. linkPreviews likewise replaces the stored previews. Same size limits as createMessage. Throws 'messageId is required.' when messageId is falsy. |
unarchiveMemberChat() | (chatId) => Promise<ChatMember> | Unarchives a member chat for the calling user only. Removes the caller from the chat's archivedBy list. The caller must be a member of the chat. Throws 'chatId is required.' when chatId is falsy. |
unfollowChat() | (chatId) => Promise<void> | Removes the caller from a chat's following list. Works with topic, member and submission chats and is idempotent. No chat permission is checked, so users can stop notifications for a chat they have since lost access to. Throws 'chatId is required.' when chatId is falsy. |
unhighlightMessage() | (messageId) => Promise<ChatMessage> | Removes the highlight from a message. Clears the highlighter fields and removes the associated system messages and notification. Same permission as highlightMessage. Throws 'messageId is required.' when messageId is falsy. |
updateChatSubject() | (chatId, data) => Promise<Chat> | Updates the subject of a topic chat. Requires canUpdateCreatorChat or canUpdateReviewerChat on the chat, matching its visibility. subject is limited to 100 characters. For member chats use updateMemberChat. Throws 'chatId is required.' when chatId is falsy. |
updateMemberChat() | (chatId, data) => Promise<ChatMember> | Updates a member chat's subject and/or colour. The caller must be a member of the chat. subject is limited to 100 characters and color must be one of the approved palette colours. Throws 'chatId is required.' when chatId is falsy. |
updateMemberChatIcon() | (chatId, data) => Promise<{ chat: ChatMember; } & AttachmentUploadRecord> | Creates an icon asset for a member chat and returns signed upload URLs for it. Any existing icon is marked for deletion. The caller must be a member of the chat; sizeInMB is capped at 10 and name at 100 characters. Upload the file to the returned signedUrlData.urls afterwards, exactly as for any asset upload. Throws 'chatId is required.' when chatId is falsy. |