Skip to Content

Messages

Messages are the individual comments inside a thread. Use these endpoints to add a message to a thread, edit a message, or delete one. Authenticate with an exchange token (embedded feedback) or a workspace- or organization-scoped API key (server-to-server) — see the Authentication overview.

Create message

POST /api/v2/threads/:threadId/messages

Add a message to a thread.

POST /api/v2/threads/:threadId/messages
curl "https://api.markup.io/api/v2/threads/febf569c-621e-41f8-8bf3-018f5c0e84e8/messages" \ -X POST \ -H "Authorization: Bearer <API-KEY-SECRET>" \ -H "Markup-API-Version: 2023-02-22" \ -H "Content-Type: application/json" \ --data '{}'
200 OK
{ "data": { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "scopes": [ "some string" ], "assignedRoleSlugs": [ "some string" ], "threadId": "some threadId", "message": "some message", "messageJson": {}, "user": { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "name": "some name", "email": null, "guest": true, "profileImage": "some profileImage", "avatarUrl": null, "hubspotId": null, "oktaUserId": null }, "userMetaData": {}, "attachments": [ { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "messageId": "some messageId", "url": "some url", "etag": "some etag", "mimeType": "some mimeType", "originalFilename": "some originalFilename", "filesize": 123, "width": null, "height": null } ], "loomVideos": [ { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "messageId": "some messageId", "title": "some title", "sharedUrl": "some sharedUrl", "width": 123, "height": 123 } ], "priority": { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "name": "some name", "level": 123, "color": null }, "content": "some content", "mentionIds": [ "some string" ], "read": true } }

Response Body - MessageResponsePublicWithReadState

Request Path Params ThreadIdRequestParam

OptionType
threadId string

Request Body CreateMessageBodyPublic

OptionType
content optionalstring
mentionIds optionalstring[]
message optionalDelta
attachments optional
loomVideos optional

Update message

PATCH /api/v2/messages/:id

Edit the content of an existing message.

PATCH /api/v2/messages/:id
curl "https://api.markup.io/api/v2/messages/1191354e-1985-4adb-a307-07a1dd4eb765" \ -X PATCH \ -H "Authorization: Bearer <API-KEY-SECRET>" \ -H "Markup-API-Version: 2023-02-22" \ -H "Content-Type: application/json" \ --data '{}'
200 OK
{ "data": { "message": { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "scopes": [ "some string" ], "assignedRoleSlugs": [ "some string" ], "threadId": "some threadId", "message": "some message", "messageJson": {}, "user": { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "name": "some name", "email": null, "guest": true, "profileImage": "some profileImage", "avatarUrl": null, "hubspotId": null, "oktaUserId": null }, "userMetaData": {}, "attachments": [ { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "messageId": "some messageId", "url": "some url", "etag": "some etag", "mimeType": "some mimeType", "originalFilename": "some originalFilename", "filesize": 123, "width": null, "height": null } ], "loomVideos": [ { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "messageId": "some messageId", "title": "some title", "sharedUrl": "some sharedUrl", "width": 123, "height": 123 } ], "priority": { "id": "some id", "createdAt": {}, "modifiedAt": {}, "deletedAt": null, "name": "some name", "level": 123, "color": null }, "content": "some content", "mentionIds": [ "some string" ], "read": true }, "thread": null } }

Response Body EditMessageResponsePublic

OptionType
message
thread ThreadResponsePublic | null

Request Path Params IdRequestParam

OptionType
id string

Request Body UpdateMessageBodyPublic

OptionType
content optionalstring
mentionIds optionalstring[]
message optionalDelta
attachments optional
loomVideos optional
priority optionalnumber

Mark message as read

POST /api/v2/messages/:id/read

Mark a single message as read for the authenticated user. Read state is per user: with an exchange token it is recorded against the end user the token identifies, and with an API key it is recorded against the key’s API user. This does not mark the enclosing thread as read: a thread reports read: true only once it has itself been marked through POST /api/v2/threads/:id/read and every message in it is read, so marking each message individually is not equivalent to marking the thread. Returns 204 with no body.

POST /api/v2/messages/:id/read
curl "https://api.markup.io/api/v2/messages/02758f6a-3297-4592-9c4d-b1f033d8e366/read" \ -X POST \ -H "Authorization: Bearer <API-KEY-SECRET>" \ -H "Markup-API-Version: 2023-02-22" \ -H "Content-Type: application/json"
Response
204 No Content

Request Path Params IdRequestParam

OptionType
id string

Delete message

DELETE /api/v2/messages/:id

Delete a message from its thread.

DELETE /api/v2/messages/:id
curl "https://api.markup.io/api/v2/messages/932f00b3-ad1f-4eee-9c13-984b4e455f37" \ -X DELETE \ -H "Authorization: Bearer <API-KEY-SECRET>" \ -H "Markup-API-Version: 2023-02-22" \ -H "Content-Type: application/json"
Response
204 No Content

Request Path Params IdRequestParam

OptionType
id string

MessageRequestAttachment

OptionType
fileId string
key string
etag string
mimeType string
filesize number
originalFilename string
width number
height number
requireDimensionsOverride boolean
pdfAsImage boolean

LoomVideoRequest

OptionType
id string
title string
providerUrl string
embedUrl string
sharedUrl string
width number
height number

AuthorUserResponse

OptionType
id string
createdAt Unix_Timestamp_Utc_Milliseconds
modifiedAt Unix_Timestamp_Utc_Milliseconds
deletedAt Unix_Timestamp_Utc_Milliseconds | null
name string
email string | null
guest boolean
profileImage string
avatarUrl string | null
hubspotId number | null
oktaUserId string | null

IUserResourceMetaData

OptionType
lastSeenAt number

MessageAttachmentResponse

OptionType
id string
createdAt Unix_Timestamp_Utc_Milliseconds
modifiedAt Unix_Timestamp_Utc_Milliseconds
deletedAt Unix_Timestamp_Utc_Milliseconds | null
messageId string
url string
etag string
mimeType string
originalFilename string
filesize number
width number | null
height number | null

LoomVideoResponse

OptionType
id string
createdAt Unix_Timestamp_Utc_Milliseconds
modifiedAt Unix_Timestamp_Utc_Milliseconds
deletedAt Unix_Timestamp_Utc_Milliseconds | null
messageId string
title string
sharedUrl string
width number
height number

PriorityResponse

OptionType
id string
createdAt Unix_Timestamp_Utc_Milliseconds
modifiedAt Unix_Timestamp_Utc_Milliseconds
deletedAt Unix_Timestamp_Utc_Milliseconds | null
name string
level number
color string | null

MessageResponsePublicWithReadState

OptionType
id string
createdAt Unix_Timestamp_Utc_Milliseconds
modifiedAt Unix_Timestamp_Utc_Milliseconds
deletedAt Unix_Timestamp_Utc_Milliseconds | null
scopes string[]
assignedRoleSlugs string[]
threadId string
message string
messageJson Delta
user
userMetaData
attachments
loomVideos
priority
content string
mentionIds string[]
read boolean

True when the caller has seen this message since it last changed. Always true here: writing a message records the caller's read.