Comments service#

Comments service manages conversations about resources.

OpenAPI file: CommentsService.json

Endpoints#

Get conversation#

GET /comments/v1/conversations/{resourceType}/{resourceRid}

A conversation is a fully resolved comment tree. It includes all comments for the given resource and all the nested comments/replies to those comments.

Path parameters

resourceType string, one of RUN, EVENT required

The type of resource that the comments are associated with

resourceRid string (RID) required

The RID of resource that the comments are associated with

Response

resourceRid string (RID)

RID for the resource that the conversation is associated with.

resourceType ResourceType

The type of the resource that the conversation is associated with.

Values of ResourceType
RUN

​

EVENT

​

comments array of ConversationNode

The comments on the conversation ordered by creation time. Empty if the comment has no replies.

Fields of ConversationNode
comment Comment

The comment

Fields of Comment
rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

replies array of ConversationNode

The comments on (aka replies to) the comment ordered by creation time. Empty if the comment has no replies.

Request

curl "https://api.gov.nominal.io/api/comments/v1/conversations/<resource type>/<resource rid>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/comments/v1/conversations/<resource type>/<resource rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/comments/v1/conversations/<resource type>/<resource rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/comments/v1/conversations/<resource type>/<resource rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "resourceRid": "<resource rid>",
  "resourceType": "RUN",
  "comments": [
    {
      "comment": {
        "rid": "<comment rid>",
        "parent": {
          "type": "resource",
          "resource": {
            "resourceType": "RUN",
            "resourceRid": "<resource rid>"
          }
        },
        "authorRid": "<author rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "editedAt": "2026-01-01T00:00:00Z",
        "deletedAt": "2026-01-01T00:00:00Z",
        "content": "<content>",
        "pinnedBy": "<pinned by>",
        "pinnedAt": "2026-01-01T00:00:00Z",
        "reactions": [
          {
            "rid": "<reaction rid>",
            "userRid": "<user rid>",
            "createdAt": "2026-01-01T00:00:00Z",
            "type": "LIKE"
          }
        ],
        "attachments": [
          "<attachment rid>"
        ]
      },
      "replies": []
    }
  ]
}

Get conversation count#

GET /comments/v1/conversations/{resourceType}/{resourceRid}/count

Returns the number of comments in a conversation.

Path parameters

resourceType string, one of RUN, EVENT required

The type of resource that the comments are associated with

resourceRid string (RID) required

The RID of resource that the comments are associated with

Query parameters

includeDeleted boolean

Whether to include deleted comments in the count

Response

The body is an integer.

Request

curl "https://api.gov.nominal.io/api/comments/v1/conversations/<resource type>/<resource rid>/count" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/comments/v1/conversations/<resource type>/<resource rid>/count",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/comments/v1/conversations/<resource type>/<resource rid>/count",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/comments/v1/conversations/<resource type>/<resource rid>/count",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

1

Get comment#

GET /comments/v1/comments/{commentRid}

Get a comment identified by its RID

Path parameters

commentRid string (RID) required

The RID of comment to fetch

Response

rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

Request

curl "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.get(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "rid": "<comment rid>",
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "authorRid": "<author rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "editedAt": "2026-01-01T00:00:00Z",
  "deletedAt": "2026-01-01T00:00:00Z",
  "content": "<content>",
  "pinnedBy": "<pinned by>",
  "pinnedAt": "2026-01-01T00:00:00Z",
  "reactions": [
    {
      "rid": "<reaction rid>",
      "userRid": "<user rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "type": "LIKE"
    }
  ],
  "attachments": [
    "<attachment rid>"
  ]
}

Edit comment#

PUT /comments/v1/comments/{commentRid}

Edit an existing comment

Path parameters

commentRid string (RID) required

The RID of comment to edit

Body

content string required

The content of the comment. Markdown supported.

attachments array of string (RID)

Attachments to the comment.

Response

rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

Request

curl -X PUT "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "content": "<content>"
}'
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
    headers={"Authorization": "Bearer <api key>"},
    json={"content": "<content>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
    headers={"Authorization": "Bearer <api key>"},
    json={"content": "<content>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.put(
            "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
            headers={"Authorization": "Bearer <api key>"},
            json={"content": "<content>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "rid": "<comment rid>",
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "authorRid": "<author rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "editedAt": "2026-01-01T00:00:00Z",
  "deletedAt": "2026-01-01T00:00:00Z",
  "content": "<content>",
  "pinnedBy": "<pinned by>",
  "pinnedAt": "2026-01-01T00:00:00Z",
  "reactions": [
    {
      "rid": "<reaction rid>",
      "userRid": "<user rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "type": "LIKE"
    }
  ],
  "attachments": [
    "<attachment rid>"
  ]
}

Delete comment#

DELETE /comments/v1/comments/{commentRid}

Delete an existing comment

Path parameters

commentRid string (RID) required

The RID of comment to delete

Response

rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

Request

curl -X DELETE "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.delete(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.delete(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.delete(
            "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "rid": "<comment rid>",
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "authorRid": "<author rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "editedAt": "2026-01-01T00:00:00Z",
  "deletedAt": "2026-01-01T00:00:00Z",
  "content": "<content>",
  "pinnedBy": "<pinned by>",
  "pinnedAt": "2026-01-01T00:00:00Z",
  "reactions": [
    {
      "rid": "<reaction rid>",
      "userRid": "<user rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "type": "LIKE"
    }
  ],
  "attachments": [
    "<attachment rid>"
  ]
}

Create comment#

POST /comments/v1/comments

Create a comment on a resource

Body

parent CommentParent required

​

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType required

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID) required

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID) required

The resource identifier for the comment that the comment is replying to

content string required

The content of the comment. Markdown supported.

attachments array of string (RID)

Attachments to the comment.

Response

rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

Request

curl -X POST "https://api.gov.nominal.io/api/comments/v1/comments" \
  -H "Authorization: Bearer <api key>" \
  -H "Content-Type: application/json" \
  --data '{
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "content": "<content>"
}'
import requests

response = requests.post(
    "https://api.gov.nominal.io/api/comments/v1/comments",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "parent": {
            "type": "resource",
            "resource": {"resourceType": "RUN", "resourceRid": "<resource rid>"},
        },
        "content": "<content>",
    },
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.post(
    "https://api.gov.nominal.io/api/comments/v1/comments",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "parent": {
            "type": "resource",
            "resource": {"resourceType": "RUN", "resourceRid": "<resource rid>"},
        },
        "content": "<content>",
    },
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.post(
            "https://api.gov.nominal.io/api/comments/v1/comments",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "parent": {
                    "type": "resource",
                    "resource": {"resourceType": "RUN", "resourceRid": "<resource rid>"},
                },
                "content": "<content>",
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "rid": "<comment rid>",
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "authorRid": "<author rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "editedAt": "2026-01-01T00:00:00Z",
  "deletedAt": "2026-01-01T00:00:00Z",
  "content": "<content>",
  "pinnedBy": "<pinned by>",
  "pinnedAt": "2026-01-01T00:00:00Z",
  "reactions": [
    {
      "rid": "<reaction rid>",
      "userRid": "<user rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "type": "LIKE"
    }
  ],
  "attachments": [
    "<attachment rid>"
  ]
}

Pin comment#

PUT /comments/v1/comments/{commentRid}/pin

Pin a comment to the top of the conversation

Path parameters

commentRid string (RID) required

The RID of comment to pin

Response

rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

Request

curl -X PUT "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/pin" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/pin",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/pin",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.put(
            "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/pin",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "rid": "<comment rid>",
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "authorRid": "<author rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "editedAt": "2026-01-01T00:00:00Z",
  "deletedAt": "2026-01-01T00:00:00Z",
  "content": "<content>",
  "pinnedBy": "<pinned by>",
  "pinnedAt": "2026-01-01T00:00:00Z",
  "reactions": [
    {
      "rid": "<reaction rid>",
      "userRid": "<user rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "type": "LIKE"
    }
  ],
  "attachments": [
    "<attachment rid>"
  ]
}

Unpin comment#

DELETE /comments/v1/comments/{commentRid}/pin

Unpin a comment from the top of the conversation

Path parameters

commentRid string (RID) required

The RID of comment to unpin

Response

rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

Request

curl -X DELETE "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/pin" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.delete(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/pin",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.delete(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/pin",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.delete(
            "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/pin",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "rid": "<comment rid>",
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "authorRid": "<author rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "editedAt": "2026-01-01T00:00:00Z",
  "deletedAt": "2026-01-01T00:00:00Z",
  "content": "<content>",
  "pinnedBy": "<pinned by>",
  "pinnedAt": "2026-01-01T00:00:00Z",
  "reactions": [
    {
      "rid": "<reaction rid>",
      "userRid": "<user rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "type": "LIKE"
    }
  ],
  "attachments": [
    "<attachment rid>"
  ]
}

Add reaction#

PUT /comments/v1/comments/{commentRid}/reactions/{type}

Create a reaction on a comment

Path parameters

commentRid string (RID) required

The RID of comment to delete

type string, one of LIKE, DISLIKE, HEART, HOORAY, ROCKET, EYES required

The type of reaction

Response

rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

Request

curl -X PUT "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/reactions/<type>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.put(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/reactions/<type>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.put(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/reactions/<type>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.put(
            "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/reactions/<type>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "rid": "<comment rid>",
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "authorRid": "<author rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "editedAt": "2026-01-01T00:00:00Z",
  "deletedAt": "2026-01-01T00:00:00Z",
  "content": "<content>",
  "pinnedBy": "<pinned by>",
  "pinnedAt": "2026-01-01T00:00:00Z",
  "reactions": [
    {
      "rid": "<reaction rid>",
      "userRid": "<user rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "type": "LIKE"
    }
  ],
  "attachments": [
    "<attachment rid>"
  ]
}

Remove reaction#

DELETE /comments/v1/comments/{commentRid}/reactions/{type}

Create a reaction on a comment

Path parameters

commentRid string (RID) required

The RID of comment to delete

type string, one of LIKE, DISLIKE, HEART, HOORAY, ROCKET, EYES required

The type of reaction

Response

rid string (RID)

Unique resource identifier for the comment

parent CommentParent

The parent of the comment. It can be a resource or another comment.

Set type to "resource".

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RUN

​

EVENT

​

resourceRid string (RID)

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

Set type to "comment".

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string (RID)

The resource identifier for the comment that the comment is replying to

authorRid string (RID)

The user who authored the comment

createdAt string (date-time)

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

Fields of Reaction
rid string (RID)

Unique resource identifier for the reaction

userRid string (RID)

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

Values of ReactionType
LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string (RID)

The comment’s attachments

Request

curl -X DELETE "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/reactions/<type>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.delete(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/reactions/<type>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx

response = httpx.delete(
    "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/reactions/<type>",
    headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio

import aiohttp


async def main() -> None:
    async with aiohttp.ClientSession() as session:
        async with session.delete(
            "https://api.gov.nominal.io/api/comments/v1/comments/<comment rid>/reactions/<type>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "rid": "<comment rid>",
  "parent": {
    "type": "resource",
    "resource": {
      "resourceType": "RUN",
      "resourceRid": "<resource rid>"
    }
  },
  "authorRid": "<author rid>",
  "createdAt": "2026-01-01T00:00:00Z",
  "editedAt": "2026-01-01T00:00:00Z",
  "deletedAt": "2026-01-01T00:00:00Z",
  "content": "<content>",
  "pinnedBy": "<pinned by>",
  "pinnedAt": "2026-01-01T00:00:00Z",
  "reactions": [
    {
      "rid": "<reaction rid>",
      "userRid": "<user rid>",
      "createdAt": "2026-01-01T00:00:00Z",
      "type": "LIKE"
    }
  ],
  "attachments": [
    "<attachment rid>"
  ]
}

Errors#

Errors shows how these errors are sent.

Each error’s errorName is Comments: followed by its name below.

Status

Name

Notes

400

ContentTooLong

400

EmptyCommentContent

400

InvalidAttachment

400

MaxNestingDepthExceeded

403

Unauthorized

404

CommentNotFound

Types#

Comment#

rid string (RID) required

Unique resource identifier for the comment

parent CommentParent required

The parent of the comment. It can be a resource or another comment.

authorRid string (RID) required

The user who authored the comment

createdAt string (date-time) required

The time the comment was created

editedAt string (date-time)

The time the comment was edited. Empty if the comment has not been edited.

deletedAt string (date-time)

The time the comment was deleted. Empty if the comment has not been deleted.

content string required

The markdown content of the comment.

pinnedBy string (RID)

The user who pinned the comment. Empty if the comment is not pinned.

pinnedAt string (date-time)

The time the comment was pinned. Empty if the comment is not pinned.

reactions array of Reaction

The reactions on the comment

attachments array of string (RID)

The comment’s attachments

CommentParent#

The parent of a comment. It can be a resource or another comment in the case of a reply.

Set type to the name of one of the other fields, and set only that field.

resource CommentParentResource

​

comment CommentParentComment

​

CommentParentComment#

commentRid string (RID) required

The resource identifier for the comment that the comment is replying to

CommentParentResource#

resourceType ResourceType required

The type of resource that the comment is associated with

resourceRid string (RID) required

The resource identifier for the resource that the comment is associated with. For example, a run or a workbook.

ConversationNode#

comment Comment required

The comment

replies array of ConversationNode

The comments on (aka replies to) the comment ordered by creation time. Empty if the comment has no replies.

Reaction#

rid string (RID) required

Unique resource identifier for the reaction

userRid string (RID) required

The user who authored the reaction

createdAt string (date-time) required

The time the reaction was created

type ReactionType required

The type of reaction

ReactionType#

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

ResourceType#

RUN

​

EVENT

​

Page design based on Scalar, MIT License.