Comments service#

Comments service manages conversations about resources.

OpenAPI file: nominal.comments.v1.json

Endpoints#

Create comment#

POST /comments/v2/comments

Create a comment on a resource

Body

parent CommentParent

​

Fields of CommentParent
one of resource, comment required

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

content string

The content of the comment. Markdown supported.

attachments array of string

Attachments to the comment.

Response

comment Comment

​

Fields of Comment
rid string

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

The comment’s attachments

Request

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

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

response = httpx.post(
    "https://api.gov.nominal.io/api/comments/v2/comments",
    headers={"Authorization": "Bearer <api key>"},
    json={
        "parent": {"resource": {"resourceType": "RUN", "resourceRid": "<resource rid>"}},
        "content": "<content>",
        "attachments": ["<attachments>"],
    },
)
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/v2/comments",
            headers={"Authorization": "Bearer <api key>"},
            json={
                "parent": {
                    "resource": {"resourceType": "RUN", "resourceRid": "<resource rid>"},
                },
                "content": "<content>",
                "attachments": ["<attachments>"],
            },
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "comment": {
    "rid": "<rid>",
    "parent": {
      "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": "<rid>",
        "userRid": "<user rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "type": "LIKE"
      }
    ],
    "attachments": [
      "<attachments>"
    ]
  }
}

Get comment#

GET /comments/v2/comments/{commentRid}

Get a comment identified by its RID

Path parameters

commentRid string required

The RID of comment to fetch

Response

comment Comment

​

Fields of Comment
rid string

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

The comment’s attachments

Request

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

response = requests.get(
    "https://api.gov.nominal.io/api/comments/v2/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/v2/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/v2/comments/<comment rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "comment": {
    "rid": "<rid>",
    "parent": {
      "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": "<rid>",
        "userRid": "<user rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "type": "LIKE"
      }
    ],
    "attachments": [
      "<attachments>"
    ]
  }
}

Delete comment#

DELETE /comments/v2/comments/{commentRid}

Delete an existing comment

Path parameters

commentRid string required

The RID of comment to delete

Response

comment Comment

​

Fields of Comment
rid string

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

The comment’s attachments

Request

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

response = requests.delete(
    "https://api.gov.nominal.io/api/comments/v2/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/v2/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/v2/comments/<comment rid>",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "comment": {
    "rid": "<rid>",
    "parent": {
      "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": "<rid>",
        "userRid": "<user rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "type": "LIKE"
      }
    ],
    "attachments": [
      "<attachments>"
    ]
  }
}

Edit comment#

PUT /comments/v2/comments/{commentRid}

Edit an existing comment

Path parameters

commentRid string required

The RID of comment to edit

Body

content string

The content of the comment. Markdown supported.

attachments array of string

Attachments to the comment.

Response

comment Comment

​

Fields of Comment
rid string

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

The comment’s attachments

Request

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

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

response = httpx.put(
    "https://api.gov.nominal.io/api/comments/v2/comments/<comment rid>",
    headers={"Authorization": "Bearer <api key>"},
    json={"content": "<content>", "attachments": ["<attachments>"]},
)
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/v2/comments/<comment rid>",
            headers={"Authorization": "Bearer <api key>"},
            json={"content": "<content>", "attachments": ["<attachments>"]},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "comment": {
    "rid": "<rid>",
    "parent": {
      "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": "<rid>",
        "userRid": "<user rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "type": "LIKE"
      }
    ],
    "attachments": [
      "<attachments>"
    ]
  }
}

Pin comment#

POST /comments/v2/comments/{commentRid}/pin

Pin a comment to the top of the conversation

Path parameters

commentRid string required

The RID of comment to pin

Response

comment Comment

​

Fields of Comment
rid string

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

The comment’s attachments

Request

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

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

response = httpx.post(
    "https://api.gov.nominal.io/api/comments/v2/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.post(
            "https://api.gov.nominal.io/api/comments/v2/comments/<comment rid>/pin",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "comment": {
    "rid": "<rid>",
    "parent": {
      "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": "<rid>",
        "userRid": "<user rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "type": "LIKE"
      }
    ],
    "attachments": [
      "<attachments>"
    ]
  }
}

Remove reaction#

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

Create a reaction on a comment

Path parameters

commentRid string required

The RID of comment to delete

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

The type of reaction

Response

comment Comment

​

Fields of Comment
rid string

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

The comment’s attachments

Request

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

response = requests.delete(
    "https://api.gov.nominal.io/api/comments/v2/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/v2/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/v2/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

{
  "comment": {
    "rid": "<rid>",
    "parent": {
      "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": "<rid>",
        "userRid": "<user rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "type": "LIKE"
      }
    ],
    "attachments": [
      "<attachments>"
    ]
  }
}

Add reaction#

POST /comments/v2/comments/{commentRid}/reactions/{type}

Create a reaction on a comment

Path parameters

commentRid string required

The RID of comment to delete

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

The type of reaction

Response

comment Comment

​

Fields of Comment
rid string

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

The comment’s attachments

Request

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

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

response = httpx.post(
    "https://api.gov.nominal.io/api/comments/v2/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.post(
            "https://api.gov.nominal.io/api/comments/v2/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

{
  "comment": {
    "rid": "<rid>",
    "parent": {
      "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": "<rid>",
        "userRid": "<user rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "type": "LIKE"
      }
    ],
    "attachments": [
      "<attachments>"
    ]
  }
}

Unpin comment#

POST /comments/v2/comments/{commentRid}/unpin

Unpin a comment from the top of the conversation

Path parameters

commentRid string required

The RID of comment to unpin

Response

comment Comment

​

Fields of Comment
rid string

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

Values of ResourceType
RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

The comment’s attachments

Request

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

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

response = httpx.post(
    "https://api.gov.nominal.io/api/comments/v2/comments/<comment rid>/unpin",
    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.post(
            "https://api.gov.nominal.io/api/comments/v2/comments/<comment rid>/unpin",
            headers={"Authorization": "Bearer <api key>"},
        ) as response:
            response.raise_for_status()
            print(await response.json())


asyncio.run(main())

Response: 200

{
  "comment": {
    "rid": "<rid>",
    "parent": {
      "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": "<rid>",
        "userRid": "<user rid>",
        "createdAt": "2026-01-01T00:00:00Z",
        "type": "LIKE"
      }
    ],
    "attachments": [
      "<attachments>"
    ]
  }
}

Get conversation#

GET /comments/v2/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 RESOURCE_TYPE_UNSPECIFIED, RUN, EVENT required

The type of resource that the comments are associated with

resourceRid string required

The RID of resource that the comments are associated with

Response

conversation Conversation

​

Fields of Conversation
resourceRid string

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
RESOURCE_TYPE_UNSPECIFIED

​

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

Unique resource identifier for the comment

parent CommentParent

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

Fields of CommentParent
one of resource, comment

​

resource CommentParentResource

​

Fields of CommentParentResource
resourceType ResourceType

The type of resource that the comment is associated with

resourceRid string

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

comment CommentParentComment

​

Fields of CommentParentComment
commentRid string

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

authorRid string

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

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

Unique resource identifier for the reaction

userRid string

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
REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

attachments array of string

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/v2/conversations/<resource type>/<resource rid>" \
  -H "Authorization: Bearer <api key>"
import requests

response = requests.get(
    "https://api.gov.nominal.io/api/comments/v2/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/v2/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/v2/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

{
  "conversation": {
    "resourceRid": "<resource rid>",
    "resourceType": "RUN",
    "comments": [
      {
        "comment": {
          "rid": "<rid>",
          "parent": {
            "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": "<rid>",
              "userRid": "<user rid>",
              "createdAt": "2026-01-01T00:00:00Z",
              "type": "LIKE"
            }
          ],
          "attachments": [
            "<attachments>"
          ]
        },
        "replies": []
      }
    ]
  }
}

Get conversation count#

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

Returns the number of comments in a conversation.

Path parameters

resourceType string, one of RESOURCE_TYPE_UNSPECIFIED, RUN, EVENT required

The type of resource that the comments are associated with

resourceRid string required

The RID of resource that the comments are associated with

Query parameters

includeDeleted boolean

Whether to include deleted comments in the count

Response

count integer

​

Request

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

response = requests.get(
    "https://api.gov.nominal.io/api/comments/v2/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/v2/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/v2/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

{
  "count": 1
}

Errors#

Errors shows how these errors are sent.

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

Status

Name

Notes

400

CommentsErrorContentTooLong

ContentTooLong

400

CommentsErrorEmptyCommentContent

EmptyCommentContent

400

CommentsErrorInvalidArgument

InvalidArgument

400

CommentsErrorInvalidAttachment

InvalidAttachment

400

CommentsErrorMaxNestingDepthExceeded

MaxNestingDepthExceeded

403

CommentsErrorUnauthorized

Unauthorized

404

CommentsErrorCommentNotFound

CommentNotFound

Types#

Comment#

rid string

Unique resource identifier for the comment

parent CommentParent

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

authorRid string

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

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

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 exactly one of the fields below.

one of resource, comment required

​

resource CommentParentResource

​

CommentParentComment#

commentRid string

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

CommentParentResource#

resourceType ResourceType

The type of resource that the comment is associated with

resourceRid string

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

Conversation#

resourceRid string

RID for the resource that the conversation is associated with.

resourceType ResourceType

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

comments array of ConversationNode

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

ConversationNode#

comment Comment

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

Unique resource identifier for the reaction

userRid string

The user who authored the reaction

createdAt string (date-time)

The time the reaction was created

type ReactionType

The type of reaction

ReactionType#

REACTION_TYPE_UNSPECIFIED

​

LIKE

​

DISLIKE

​

HEART

​

HOORAY

​

ROCKET

​

EYES

​

ResourceType#

RESOURCE_TYPE_UNSPECIFIED

​

RUN

​

EVENT

​

Page design based on Scalar, MIT License.