FastComments.com

FastComments Nim SDK

This is the official Nim SDK for FastComments.

Official Nim SDK for the FastComments API

Repository

View on GitHub

Requirements Internal Link

  • Nim >= 1.6.0
  • nimcrypto >= 0.5.4

Installation Internal Link

Using Nimble

nimble install fastcomments

Building from Source

nimble build

Library Contents

This library contains the generated API client and the SSO utilities to make working with the API easier.

Public vs Secured APIs

For the API client, there are two API modules, api_default and api_public. The api_default contains methods that require your API key, and api_public contains api calls that can be made directly from a browser/mobile device/etc without authentication.

Quick Start Internal Link

Using Authenticated APIs (DefaultAPI)

Important: Authenticated endpoints require your API key to be set as the x-api-key header.

import httpclient
import fastcomments
import fastcomments/apis/api_default
import fastcomments/models/model_comment_data

let client = newHttpClient()
client.headers["x-api-key"] = "your-api-key"

# Make authenticated API calls
let (response, httpResponse) = getComments(
  httpClient = client,
  tenantId = "your-tenant-id",
  page = 0,
  limit = 0,
  skip = 0,
  asTree = false,
  skipChildren = 0,
  limitChildren = 0,
  maxTreeDepth = 0,
  urlId = "your-url-id",
  userId = "",
  anonUserId = "",
  contextUserId = "",
  hashTag = "",
  parentId = "",
  direction = SortDirections.DESC
)

if response.isSome:
  let resp = response.get()
  if resp.comments.isSome:
    echo "Found ", resp.comments.get().len, " comments"

Using Public APIs (PublicAPI)

Public endpoints don't require authentication:

import httpclient
import fastcomments
import fastcomments/apis/api_public

let client = newHttpClient()

# Make public API calls
let (response, httpResponse) = getCommentsPublic(
  httpClient = client,
  tenantId = "your-tenant-id",
  urlId = "your-url-id",
  page = 0,
  direction = SortDirections.DESC,
  sso = "",
  skip = 0,
  skipChildren = 0,
  limit = 0,
  limitChildren = 0,
  countChildren = false,
  fetchPageForCommentId = "",
  includeConfig = false,
  countAll = false,
  includei10n = false,
  locale = "",
  modules = "",
  isCrawler = false,
  includeNotificationCount = false,
  asTree = false,
  maxTreeDepth = 0,
  useFullTranslationIds = false,
  parentId = "",
  searchText = "",
  hashTags = @[],
  userId = "",
  customConfigStr = "",
  afterCommentId = "",
  beforeCommentId = ""
)

if response.isSome:
  let resp = response.get()
  if resp.comments.isSome:
    echo "Found ", resp.comments.get().len, " comments"

Common Issues

  1. 401 authentication error: Make sure you set the x-api-key header on your HttpClient before making DefaultAPI requests: client.headers["x-api-key"] = "your-api-key"
  2. Wrong API class: Use api_default for server-side authenticated requests, api_public for client-side/public requests.

Making API Calls Internal Link

All API methods in this SDK return tuples of (Option[ResponseType], Response). The first element contains the parsed response if successful, and the second element is the raw HTTP response.

Example: Fetching Comments

import httpclient
import options
import fastcomments
import fastcomments/apis/api_default

let client = newHttpClient()
client.headers["x-api-key"] = "your-api-key"

let (response, httpResponse) = getComments(
  httpClient = client,
  tenantId = "your-tenant-id",
  page = 0,
  limit = 0,
  skip = 0,
  asTree = false,
  skipChildren = 0,
  limitChildren = 0,
  maxTreeDepth = 0,
  urlId = "your-url-id",
  userId = "",
  anonUserId = "",
  contextUserId = "",
  hashTag = "",
  parentId = "",
  direction = SortDirections.DESC
)

if httpResponse.code == Http200:
  if response.isSome:
    let resp = response.get()
    if resp.comments.isSome:
      echo "Found ", resp.comments.get().len, " comments"

Notes Internal Link

Broadcast Ids

You'll see you're supposed to pass a broadcastId in some API calls. When you receive events, you'll get this ID back, so you know to ignore the event if you plan to optimistically apply changes on the client (which you'll probably want to do since it offers the best experience). Pass a UUID here. The ID should be unique enough to not occur twice in a browser session.

SSO (Single Sign-On)

For SSO examples, see below.

SSO Usage Internal Link

Simple SSO

import fastcomments/sso

let user = newSimpleSSOUserData(
  userId = "user-123",
  email = "user@example.com",
  avatar = "https://example.com/avatar.jpg"
)
let sso = newSimple(simpleUserData = user)
let token = sso.createToken()

echo "SSO Token: ", token

Secure SSO

import fastcomments/sso

let user = newSecureSSOUserData(
  userId = "user-123",
  email = "user@example.com",
  username = "johndoe",
  avatar = "https://example.com/avatar.jpg"
)

let apiKey = "your-api-key"
let sso = newSecure(apiKey = apiKey, secureUserData = user)
let token = sso.createToken()

echo "Secure SSO Token: ", token

Testing Internal Link

Set the required environment variables:

export FASTCOMMENTS_API_KEY="your-api-key"
export FASTCOMMENTS_TENANT_ID="your-tenant-id"

Run the tests:

nimble test

Or run specific tests:

nim c -r tests/test_sso.nim
nim c -r tests/test_sso_integration.nim

Development Internal Link

To update the generated client from the OpenAPI spec:

./update.sh

addDomainConfig Internal Link

Parameters

Name Type Required Description
tenantId string Yes
addDomainConfigParams AddDomainConfigParams No

Response

Returns: Option[AddDomainConfig_200_response]

Example

addDomainConfig Example
Copy Copy
1
2let (response, httpResponse) = client.addDomainConfig(
3 tenantId = "my-tenant-123",
4 addDomainConfigParams = AddDomainConfigParams(
5 domain = "comments.mynews.com",
6 enableSsl = true,
7 allowedOrigins = @["https://mynews.com", "https://www.mynews.com"],
8 path = "/"
9 )
10)
11if response.isSome:
12 let created = response.get()
13 echo "Domain config created:", created.domain
14

addPage Internal Link

Parameters

Name Type Required Description
tenantId string Yes
createAPIPageData CreateAPIPageData No

Response

Returns: Option[AddPageAPIResponse]

Example

addPage Example
Copy Copy
1
2let (response, httpResponse) = client.addPage(tenantId = "my-tenant-123", createAPIPageData = CreateAPIPageData(url = "news/local-devs", title = "Local Nim Developers Launch App", path = "news/local-devs", description = "Coverage of the Nim community release", tags = @["nim", "community"], isHidden = false))
3if response.isSome:
4 let page = response.get()
5 discard page
6

addSSOUser Internal Link

Parameters

Name Type Required Description
tenantId string Yes
createAPISSOUserData CreateAPISSOUserData No

Response

Returns: Option[AddSSOUserAPIResponse]

Example

addSSOUser Example
Copy Copy
1
2let (response, httpResponse) = client.addSSOUser(
3 tenantId = "my-tenant-123",
4 createAPISSOUserData = CreateAPISSOUserData(
5 email = "jane.doe@newsroom.com",
6 externalId = "jane-doe-789",
7 displayName = "Jane Doe",
8 isAdmin = false,
9 roles = @["commenter", "subscriber"]
10 )
11)
12if response.isSome:
13 let added = response.get()
14 echo added
15

aggregate Internal Link

Parameters

Name Type Required Description
tenantId string Yes
aggregationRequest AggregationRequest No
parentTenantId string No
includeStats bool No

Response

Returns: Option[AggregationResponse]

Example

aggregate Example
Copy Copy
1
2let (response, httpResponse) = client.aggregate(tenantId = "my-tenant-123",
3 aggregationRequest = AggregationRequest(),
4 parentTenantId = "",
5 includeStats = false)
6
7if response.isSome:
8 let agg = response.get()
9 discard agg
10

aggregateQuestionResults Internal Link

Parameters

Name Type Required Description
tenantId string Yes
questionId string No
questionIds seq[string] No
urlId string Yes
timeBucket AggregateTimeBucket No
startDate string No
forceRecalculate bool No

Response

Returns: Option[AggregateQuestionResults_200_response]

Example

aggregateQuestionResults Example
Copy Copy
1
2let (response, httpResponse) = client.aggregateQuestionResults(
3 tenantId = "my-tenant-123",
4 questionId = "q-top-comments-2025",
5 questionIds = @["q-top-comments-2025", "q-reader-polls-2025"],
6 urlId = "news/2025/01/top-story",
7 timeBucket = AggregateTimeBucket.day,
8 startDate = "2025-01-01",
9 forceRecalculate = false
10)
11
12if response.isSome:
13 let aggregated = response.get()
14 discard aggregated
15else:
16 discard httpResponse
17

blockFromCommentPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
publicBlockFromCommentParams PublicBlockFromCommentParams No
sso string No

Response

Returns: Option[BlockFromCommentPublic_200_response]

Example

blockFromCommentPublic Example
Copy Copy
1
2let (response, httpResponse) = client.blockFromCommentPublic(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-987654321",
5 publicBlockFromCommentParams = PublicBlockFromCommentParams(),
6 sso = ""
7)
8
9if response.isSome:
10 let blockInfo = response.get()
11 echo "Block result:", $blockInfo
12

blockUserFromComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
blockFromCommentParams BlockFromCommentParams No
userId string No
anonUserId string No

Response

Returns: Option[BlockFromCommentPublic_200_response]

Example

blockUserFromComment Example
Copy Copy
1
2let (response, httpResponse) = client.blockUserFromComment(
3 tenantId = "my-tenant-123",
4 id = "comment-789",
5 blockFromCommentParams = BlockFromCommentParams(),
6 userId = "user-456",
7 anonUserId = ""
8)
9if response.isSome:
10 let blocked = response.get()
11 echo "Blocked response received:"
12 echo blocked
13else:
14 echo "No block response; HTTP status: ", httpResponse.status
15

bulkAggregateQuestionResults Internal Link

Parameters

Name Type Required Description
tenantId string Yes
bulkAggregateQuestionResultsRequest BulkAggregateQuestionResultsRequest No
forceRecalculate bool No

Response

Returns: Option[BulkAggregateQuestionResults_200_response]

Example

bulkAggregateQuestionResults Example
Copy Copy
1
2let request = BulkAggregateQuestionResultsRequest(
3 questionIds = @["article-123-views", "article-124-views"],
4 startDate = "2025-01-01T00:00:00Z",
5 endDate = "2025-01-31T23:59:59Z"
6)
7
8let (response, httpResponse) = client.bulkAggregateQuestionResults(
9 tenantId = "my-tenant-123",
10 bulkAggregateQuestionResultsRequest = request,
11 forceRecalculate = true
12)
13
14if response.isSome:
15 let results = response.get()
16 echo results
17else:
18 echo "No aggregated results, HTTP status: ", httpResponse.status
19

checkedCommentsForBlocked Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentIds string No
sso string No

Response

Returns: Option[CheckedCommentsForBlocked_200_response]

Example

checkedCommentsForBlocked Example
Copy Copy
1
2let (response, httpResponse) = client.checkedCommentsForBlocked(
3 tenantId = "my-tenant-123",
4 commentIds = "cmt-456,cmt-789",
5 sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.signedPayload"
6)
7if response.isSome:
8 let checked = response.get()
9 echo "Received checked comments"
10else:
11 echo "No body returned; HTTP status: ", httpResponse.status
12

combineCommentsWithQuestionResults Internal Link

Parameters

Name Type Required Description
tenantId string Yes
questionId string No
questionIds seq[string] No
urlId string Yes
startDate string No
forceRecalculate bool No
minValue float64 No
maxValue float64 No
limit float64 No

Response

Returns: Option[CombineCommentsWithQuestionResults_200_response]

Example

combineCommentsWithQuestionResults Example
Copy Copy
1
2let (response, httpResponse) = client.combineCommentsWithQuestionResults(
3 tenantId = "my-tenant-123",
4 questionId = "",
5 questionIds = @[],
6 urlId = "news/breaking-political-reform-2026",
7 startDate = "",
8 forceRecalculate = false,
9 minValue = 0.0,
10 maxValue = 0.0,
11 limit = 0.0
12)
13if response.isSome:
14 let combined = response.get()
15 echo "Combined comments with question results received"
16else:
17 echo "No combined results available"
18

createCommentPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
urlId string Yes
broadcastId string No
commentData CommentData No
sessionId string No
sso string No

Response

Returns: Option[CreateCommentPublic_200_response]

Example

createCommentPublic Example
Copy Copy
1
2let (response, httpResponse) = client.createCommentPublic(
3 tenantId = "my-tenant-123",
4 urlId = "news/2026/01/fastcomments-sdk",
5 broadcastId = "",
6 commentData = CommentData(
7 text = "Great write-up on the SDK — thanks!",
8 authorName = "Alice Johnson",
9 authorEmail = "alice.johnson@example.com",
10 attachments = @[]
11 ),
12 sessionId = "",
13 sso = ""
14)
15
16if response.isSome:
17 let created = response.get()
18 echo "Created comment:", $created
19else:
20 echo "Create failed, status: ", httpResponse.status
21

createFeedPost Internal Link

Parameters

Name Type Required Description
tenantId string Yes
createFeedPostParams CreateFeedPostParams No
broadcastId string No
isLive bool No
doSpamCheck bool No
skipDupCheck bool No

Response

Returns: Option[CreateFeedPost_200_response]

Example

createFeedPost Example
Copy Copy
1
2let createParams = CreateFeedPostParams(title: "AI breakthrough", content: "A new model achieves state-of-the-art performance on summarization.", author: "Jane Doe", tags: @["ai","research"])
3let (response, httpResponse) = client.createFeedPost(tenantId = "my-tenant-123", createFeedPostParams = createParams, broadcastId = "broadcast-456", isLive = true, doSpamCheck = true, skipDupCheck = false)
4if response.isSome:
5 let post = response.get()
6 discard post
7 discard httpResponse
8

createFeedPostPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
createFeedPostParams CreateFeedPostParams No
broadcastId string No
sso string No

Response

Returns: Option[CreateFeedPostPublic_200_response]

Example

createFeedPostPublic Example
Copy Copy
1
2let createParams = CreateFeedPostParams(
3 title = "Product update: FastComments v2",
4 content = "We released performance improvements and new moderation tools across the platform.",
5 authorId = "editor-42",
6 tags = @["product","release"],
7 isPinned = false,
8 isPublished = true
9)
10
11let (response, httpResponse) = client.createFeedPostPublic(tenantId = "my-tenant-123", createFeedPostParams = createParams, broadcastId = "", sso = "")
12
13if response.isSome:
14 let created = response.get()
15 discard created
16

createSubscription Internal Link

Parameters

Name Type Required Description
tenantId string Yes
createAPIUserSubscriptionData CreateAPIUserSubscriptionData No

Response

Returns: Option[CreateSubscriptionAPIResponse]

Example

createSubscription Example
Copy Copy
1
2let (response, httpResponse) = client.createSubscription(tenantId = "my-tenant-123",
3 createAPIUserSubscriptionData = CreateAPIUserSubscriptionData(email = "alice@example.com",
4 urlId = "news/article-123", subscribeToReplies = true, topics = @["politics", "world"]))
5
6if response.isSome:
7 let subscription = response.get()
8 echo "Created subscription:", $subscription
9else:
10 echo "Failed to create subscription; HTTP status:", httpResponse.status
11

createUserBadge Internal Link

Parameters

Name Type Required Description
tenantId string Yes
createUserBadgeParams CreateUserBadgeParams No

Response

Returns: Option[CreateUserBadge_200_response]

Example

createUserBadge Example
Copy Copy
1
2let (response, httpResponse) = client.createUserBadge(tenantId = "my-tenant-123",
3 createUserBadgeParams = CreateUserBadgeParams())
4if response.isSome:
5 let badge = response.get()
6 echo "Created user badge for tenant my-tenant-123: ", $badge
7

deleteComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
contextUserId string No
isLive bool No

Response

Returns: Option[DeleteComment_200_response]

Example

deleteComment Example
Copy Copy
1
2let (response, httpResponse) = client.deleteComment(tenantId = "my-tenant-123", id = "cmt-987654", contextUserId = "user-456", isLive = true)
3if response.isSome:
4 let deleted = response.get()
5 echo "Comment deleted successfully"
6else:
7 echo "Delete failed, status: " & $httpResponse.status
8

deleteCommentPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
broadcastId string No
editKey string No
sso string No

Response

Returns: Option[DeleteCommentPublic_200_response]

Example

deleteCommentPublic Example
Copy Copy
1
2let (response, httpResponse) = client.deleteCommentPublic(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-98765",
5 broadcastId = "live-broadcast-2026-01",
6 editKey = "edit_ab12cd34",
7 sso = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.sampleSsoToken"
8)
9if response.isSome:
10 let deleted = response.get()
11 echo "Deleted comment:", deleted
12else:
13 echo "Delete failed, HTTP status:", httpResponse.status
14

deleteCommentVote Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
voteId string No
urlId string Yes
broadcastId string No
editKey string No
sso string No

Response

Returns: Option[DeleteCommentVote_200_response]

Example

deleteCommentVote Example
Copy Copy
1
2let (response, httpResponse) = client.deleteCommentVote(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-987654",
5 voteId = "",
6 urlId = "news/article-title",
7 broadcastId = "",
8 editKey = "",
9 sso = ""
10)
11if response.isSome:
12 let deleted = response.get()
13 echo "Deleted vote response: ", $deleted
14else:
15 echo "No delete response, HTTP response: ", $httpResponse
16

deleteDomainConfig Internal Link

Parameters

Name Type Required Description
tenantId string Yes
domain string No

Response

Returns: Option[DeleteDomainConfig_200_response]

Example

deleteDomainConfig Example
Copy Copy
1
2let (response, httpResponse) = client.deleteDomainConfig(tenantId = "my-tenant-123", domain = "news.example.com")
3if response.isSome:
4 let cfg = response.get()
5 echo cfg
6else:
7 echo "No domain config returned, HTTP status: " & $httpResponse.status
8

deleteFeedPostPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
postId string No
broadcastId string No
sso string No

Response

Returns: Option[DeleteFeedPostPublic_200_response]

Example

deleteFeedPostPublic Example
Copy Copy
1
2let (response, httpResponse) = client.deleteFeedPostPublic(tenantId = "my-tenant-123", postId = "", broadcastId = "", sso = "")
3if response.isSome:
4 let deleted = response.get()
5 echo "Deleted feed post response received:", deleted
6else:
7 echo "No response body, HTTP status: ", $httpResponse.status
8

deletePage Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No

Response

Returns: Option[DeletePageAPIResponse]

Example

deletePage Example
Copy Copy
1
2let (response, httpResponse) = client.deletePage(tenantId = "my-tenant-123", id = "")
3
4if response.isSome:
5 let deleteResp = response.get()
6 echo "DeletePage response:" & $deleteResp
7else:
8 echo "No DeletePage response received. HTTP status: " & $httpResponse.status.code
9

deleteSSOUser Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
deleteComments bool No
commentDeleteMode string No

Response

Returns: Option[DeleteSSOUserAPIResponse]

Example

deleteSSOUser Example
Copy Copy
1
2let (response, httpResponse) = client.deleteSSOUser(
3 tenantId = "my-tenant-123",
4 id = "user-987",
5 deleteComments = true,
6 commentDeleteMode = "anonymize"
7)
8if response.isSome:
9 let deleteResult = response.get()
10 discard deleteResult
11

deleteSubscription Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
userId string No

Response

Returns: Option[DeleteSubscriptionAPIResponse]

Example

deleteSubscription Example
Copy Copy
1
2let tenantId = "my-tenant-123"
3let subscriptionId = "sub-9876"
4let userId = "user-42"
5
6let (response, httpResponse) = client.deleteSubscription(tenantId = tenantId, id = subscriptionId, userId = userId)
7
8if response.isSome:
9 let deleted = response.get()
10 echo "Deleted subscription:", repr(deleted)
11

deleteUserBadge Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No

Response

Returns: Option[UpdateUserBadge_200_response]

Example

deleteUserBadge Example
Copy Copy
1
2let (response, httpResponse) = client.deleteUserBadge(tenantId = "my-tenant-123", id = "badge-789")
3if response.isSome:
4 let badgeResp = response.get()
5 echo "Badge deletion response received."
6else:
7 echo "No response body returned."
8

flagComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
userId string No
anonUserId string No

Response

Returns: Option[FlagComment_200_response]

Example

flagComment Example
Copy Copy
1
2let (response, httpResponse) = client.flagComment(tenantId = "my-tenant-123", id = "", userId = "", anonUserId = "")
3if response.isSome:
4 let flagResult = response.get()
5 echo "Flag comment succeeded"
6 echo flagResult
7else:
8 echo "Flag comment failed, HTTP status: ", httpResponse.status
9

flagCommentPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
isFlagged bool No
sso string No

Response

Returns: Option[FlagCommentPublic_200_response]

Example

flagCommentPublic Example
Copy Copy
1
2let (response, httpResponse) = client.flagCommentPublic(tenantId = "my-tenant-123", commentId = "cmt-987654321", isFlagged = false, sso = "")
3if response.isSome:
4 let flagResult = response.get()
5 discard flagResult
6else:
7 discard httpResponse
8

getAuditLogs Internal Link

Parameters

Name Type Required Description
tenantId string Yes
limit float64 No
skip float64 No
order SORTDIR No
after float64 No
before float64 No

Response

Returns: Option[GetAuditLogs_200_response]

Example

getAuditLogs Example
Copy Copy
1
2let (response, httpResponse) = client.getAuditLogs(
3 tenantId = "news-site-42",
4 limit = 100.0,
5 skip = 0.0,
6 order = SORTDIR.desc,
7 after = 1622505600.0,
8 before = 1625097600.0
9)
10if response.isSome:
11 let logs = response.get()
12 discard logs
13else:
14 discard httpResponse
15

getComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No

Response

Returns: Option[GetComment_200_response]

Example

getComment Example
Copy Copy
1
2let (response, httpResponse) = client.getComment(tenantId = "my-tenant-123", id = "cmt-987654321")
3if response.isSome:
4 let comment = response.get()
5 discard comment
6else:
7 echo "Comment not found or request failed"
8

getComments Internal Link

Parameters

Name Type Required Description
tenantId string Yes
page int No
limit int No
skip int No
asTree bool No
skipChildren int No
limitChildren int No
maxTreeDepth int No
urlId string Yes
userId string No
anonUserId string No
contextUserId string No
hashTag string No
parentId string No
direction SortDirections No

Response

Returns: Option[GetComments_200_response]

Example

getComments Example
Copy Copy
1
2let (response, httpResponse) = client.getComments(
3 tenantId = "my-tenant-123",
4 page = 0,
5 limit = 25,
6 skip = 0,
7 asTree = true,
8 skipChildren = 0,
9 limitChildren = 5,
10 maxTreeDepth = 3,
11 urlId = "news/2026/01/site-update",
12 userId = "",
13 anonUserId = "",
14 contextUserId = "",
15 hashTag = "",
16 parentId = "",
17 direction = SortDirections(0)
18)
19if response.isSome:
20 let comments = response.get()
21 echo "HTTP:", httpResponse.statusCode, " Response:", comments
22

getCommentsPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
urlId string Yes
page int No
direction SortDirections No
sso string No
skip int No
skipChildren int No
limit int No
limitChildren int No
countChildren bool No
fetchPageForCommentId string No
includeConfig bool No
countAll bool No
includei10n bool No
locale string No
modules string No
isCrawler bool No
includeNotificationCount bool No
asTree bool No
maxTreeDepth int No
useFullTranslationIds bool No
parentId string No
searchText string No
hashTags seq[string] No
userId string No
customConfigStr string No
afterCommentId string No
beforeCommentId string No

Response

Returns: Option[GetCommentsPublic_200_response]

Example

getCommentsPublic Example
Copy Copy
1
2let (response, httpResponse) = client.getCommentsPublic(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-title",
5 page = 1,
6 direction = SortDirections.DESC,
7 sso = "sso-token-abc123",
8 skip = 0,
9 skipChildren = 0,
10 limit = 25,
11 limitChildren = 10,
12 countChildren = true,
13 fetchPageForCommentId = "",
14 includeConfig = true,
15 countAll = false,
16 includei10n = false,
17 locale = "en-US",
18 modules = "likes,moderation",
19 isCrawler = false,
20 includeNotificationCount = true,
21 asTree = true,
22 maxTreeDepth = 3,
23 useFullTranslationIds = false,
24 parentId = "",
25 searchText = "climate change",
26 hashTags = @["climate", "environment"],
27 userId = "user-789",
28 customConfigStr = "",
29 afterCommentId = "",
30 beforeCommentId = ""
31)
32
33if response.isSome:
34 let data = response.get()
35 discard data
36

getCommentText Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
editKey string No
sso string No

Response

Returns: Option[GetCommentText_200_response]

Example

getCommentText Example
Copy Copy
1
2let (response, httpResponse) = client.getCommentText(tenantId = "my-tenant-123", commentId = "news/article-2026-01-08-cmt-15", editKey = "", sso = "")
3if response.isSome:
4 let commentText = response.get()
5 echo commentText
6else:
7 echo "No comment text returned, HTTP status: " & $httpResponse.status
8

getCommentVoteUserNames Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
dir int No
sso string No

Response

Returns: Option[GetCommentVoteUserNames_200_response]

Example

getCommentVoteUserNames Example
Copy Copy
1
2let (response, httpResponse) = client.getCommentVoteUserNames(tenantId = "my-tenant-123",
3 commentId = "cmt-456789",
4 dir = 0,
5 sso = "")
6
7if response.isSome:
8 let data: GetCommentVoteUserNames_200_response = response.get()
9 echo "Fetched vote usernames for comment cmt-456789"
10else:
11 echo "No vote usernames returned"
12

getDomainConfig Internal Link

Parameters

Name Type Required Description
tenantId string Yes
domain string No

Response

Returns: Option[GetDomainConfig_200_response]

Example

getDomainConfig Example
Copy Copy
1
2let (response, httpResponse) = client.getDomainConfig(tenantId = "my-tenant-123", domain = "blog.news.example.com")
3if response.isSome:
4 let config = response.get()
5 discard config
6else:
7 discard httpResponse
8

getDomainConfigs Internal Link

Parameters

Name Type Required Description
tenantId string Yes

Response

Returns: Option[GetDomainConfigs_200_response]

Example

getDomainConfigs Example
Copy Copy
1
2let (response, httpResponse) = client.getDomainConfigs(tenantId = "my-tenant-123")
3if response.isSome:
4 let configs = response.get()
5 echo "Received domain configs for tenant my-tenant-123:", configs
6else:
7 echo "No domain configs returned, HTTP status:", httpResponse.status
8

getEventLog Internal Link

Parameters

Name Type Required Description
tenantId string Yes
urlId string Yes
userIdWS string No
startTime int64 No
endTime int64 No

Response

Returns: Option[GetEventLog_200_response]

Example

getEventLog Example
Copy Copy
1
2let (response, httpResponse) = client.getEventLog(tenantId = "my-tenant-123", urlId = "news/top-story-2026", userIdWS = "", startTime = 0, endTime = 0)
3if response.isSome:
4 let eventLog = response.get()
5 discard eventLog
6

getFeedPosts Internal Link

Parameters

Name Type Required Description
tenantId string Yes
afterId string No
limit int No
tags seq[string] No

Response

Returns: Option[GetFeedPosts_200_response]

Example

getFeedPosts Example
Copy Copy
1
2let (response, httpResponse) = client.getFeedPosts(tenantId = "my-tenant-123", afterId = "", limit = 0, tags = @[])
3if response.isSome:
4 let feed = response.get()
5 echo "Received feed posts"
6else:
7 echo "No feed posts returned, status: " & $httpResponse.status
8

getFeedPostsPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
afterId string No
limit int No
tags seq[string] No
sso string No
isCrawler bool No
includeUserInfo bool No

Response

Returns: Option[GetFeedPostsPublic_200_response]

Example

getFeedPostsPublic Example
Copy Copy
1
2let (response, httpResponse) = client.getFeedPostsPublic(
3 tenantId = "my-tenant-123",
4 afterId = "",
5 limit = 0,
6 tags = @[],
7 sso = "",
8 isCrawler = false,
9 includeUserInfo = false
10)
11
12if response.isSome:
13 let feed = response.get()
14 echo "Received feed posts:", feed
15

getFeedPostsStats Internal Link

Parameters

Name Type Required Description
tenantId string Yes
postIds seq[string] No
sso string No

Response

Returns: Option[GetFeedPostsStats_200_response]

Example

getFeedPostsStats Example
Copy Copy
1
2let (response, httpResponse) = client.getFeedPostsStats(tenantId = "my-tenant-123", postIds = @[], sso = "")
3if response.isSome:
4 let stats = response.get()
5 echo "Received feed posts stats:", stats
6else:
7 echo "No stats returned, HTTP status:", httpResponse.status
8

getGlobalEventLog Internal Link

Parameters

Name Type Required Description
tenantId string Yes
urlId string Yes
userIdWS string No
startTime int64 No
endTime int64 No

Response

Returns: Option[GetEventLog_200_response]

Example

getGlobalEventLog Example
Copy Copy
1
2let (response, httpResponse) = client.getGlobalEventLog(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-2026-01",
5 userIdWS = "",
6 startTime = int64(0),
7 endTime = int64(0)
8)
9
10if response.isSome:
11 let eventLog = response.get()
12 echo eventLog
13

getPageByURLId Internal Link

Parameters

Name Type Required Description
tenantId string Yes
urlId string Yes

Response

Returns: Option[GetPageByURLIdAPIResponse]

Example

getPageByURLId Example
Copy Copy
1
2let (response, httpResponse) = client.getPageByURLId(tenantId = "my-tenant-123", urlId = "news/2026/01/important-update")
3if response.isSome:
4 let page = response.get()
5 echo "Page ID: ", page.id
6 echo "Page URL: ", page.url
7 echo "Title: ", page.title
8else:
9 echo "Page not found. HTTP status: ", httpResponse.status
10

getPages Internal Link

Parameters

Name Type Required Description
tenantId string Yes

Response

Returns: Option[GetPagesAPIResponse]

Example

getPages Example
Copy Copy
1
2let (response, httpResponse) = client.getPages(tenantId = "my-tenant-123")
3if response.isSome:
4 let pagesResp = response.get()
5 echo pagesResp
6else:
7 echo "No pages found for tenant my-tenant-123"
8

getSSOUserByEmail Internal Link

Parameters

Name Type Required Description
tenantId string Yes
email string No

Response

Returns: Option[GetSSOUserByEmailAPIResponse]

Example

getSSOUserByEmail Example
Copy Copy
1
2let (response, httpResponse) = client.getSSOUserByEmail(tenantId = "my-tenant-123", email = "jane.doe@news-site.com")
3if response.isSome:
4 let ssoUser = response.get()
5 echo "SSO user ID: ", ssoUser.id, " Email: ", ssoUser.email
6else:
7 echo "No SSO user found, HTTP status: ", httpResponse.statusCode
8

getSSOUserById Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No

Response

Returns: Option[GetSSOUserByIdAPIResponse]

Example

getSSOUserById Example
Copy Copy
1
2let (response, httpResponse) = client.getSSOUserById(tenantId = "my-tenant-123", id = "sso-user-987")
3if response.isSome:
4 let user = response.get()
5 echo "SSO user retrieved"
6else:
7 echo "SSO user not found"
8

getSSOUsers Internal Link

Parameters

Name Type Required Description
tenantId string Yes
skip int No

Response

Returns: Option[GetSSOUsers_200_response]

Example

getSSOUsers Example
Copy Copy
1
2let (response, httpResponse) = client.getSSOUsers(tenantId = "my-tenant-123", skip = 0)
3if response.isSome:
4 let users = response.get()
5 echo users
6else:
7 echo "No SSO users returned"
8

getSubscriptions Internal Link

Parameters

Name Type Required Description
tenantId string Yes
userId string No

Response

Returns: Option[GetSubscriptionsAPIResponse]

Example

getSubscriptions Example
Copy Copy
1
2let (response, httpResponse) = client.getSubscriptions(tenantId = "my-tenant-123", userId = "user-9876")
3if response.isSome:
4 let subscriptions = response.get()
5 echo "Found subscriptions for tenant my-tenant-123:"
6 echo $subscriptions
7else:
8 echo "No subscriptions returned. HTTP status: ", $httpResponse.status
9

getUserBadge Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No

Response

Returns: Option[GetUserBadge_200_response]

Example

getUserBadge Example
Copy Copy
1
2let (response, httpResponse) = client.getUserBadge(tenantId = "my-tenant-123", id = "badge-456")
3if response.isSome:
4 let badge = response.get()
5 discard badge
6

getUserBadgeProgressById Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No

Response

Returns: Option[GetUserBadgeProgressById_200_response]

Example

getUserBadgeProgressById Example
Copy Copy
1
2let (response, httpResponse) = client.getUserBadgeProgressById(tenantId = "my-tenant-123", id = "badge-789")
3if response.isSome:
4 let badgeProgress: GetUserBadgeProgressById_200_response = response.get()
5 echo "Badge progress received for tenant my-tenant-123"
6else:
7 echo "No badge progress found for tenant my-tenant-123"
8

getUserBadgeProgressByUserId Internal Link

Parameters

Name Type Required Description
tenantId string Yes
userId string No

Response

Returns: Option[GetUserBadgeProgressById_200_response]

Example

getUserBadgeProgressByUserId Example
Copy Copy
1
2let (response, httpResponse) = client.getUserBadgeProgressByUserId(tenantId = "my-tenant-123", userId = "user-789")
3if response.isSome:
4 let badgeProgress = response.get()
5 echo badgeProgress
6else:
7 echo "No badge progress for user 'user-789' (HTTP " & $httpResponse.status & ")"
8

getUserBadgeProgressList Internal Link

Parameters

Name Type Required Description
tenantId string Yes
userId string No
limit float64 No
skip float64 No

Response

Returns: Option[GetUserBadgeProgressList_200_response]

Example

getUserBadgeProgressList Example
Copy Copy
1
2let (response, httpResponse) = client.getUserBadgeProgressList(
3 tenantId = "my-tenant-123",
4 userId = "user-456",
5 limit = 25.0,
6 skip = 0.0
7)
8
9if response.isSome:
10 let badgeProgress = response.get()
11 discard badgeProgress
12else:
13 discard httpResponse
14

getUserBadges Internal Link

Parameters

Name Type Required Description
tenantId string Yes
userId string No
badgeId string No
displayedOnComments bool No
limit float64 No
skip float64 No

Response

Returns: Option[GetUserBadges_200_response]

Example

getUserBadges Example
Copy Copy
1
2let (response, httpResponse) = client.getUserBadges(
3 tenantId = "my-tenant-123",
4 userId = "user-456",
5 badgeId = "top-commenter",
6 displayedOnComments = true,
7 limit = 25.0,
8 skip = 0.0
9)
10if response.isSome:
11 let badges = response.get()
12 echo "Badges retrieved: ", badges
13else:
14 echo "No badges found. HTTP response: ", httpResponse
15

getUserNotificationCount Internal Link

Parameters

Name Type Required Description
tenantId string Yes
sso string No

Response

Returns: Option[GetUserNotificationCount_200_response]

Example

getUserNotificationCount Example
Copy Copy
1
2let (response, httpResponse) = client.getUserNotificationCount(tenantId = "my-tenant-123", sso = "")
3if response.isSome:
4 let userNotifications = response.get()
5 discard userNotifications
6else:
7 discard httpResponse
8

getUserNotifications Internal Link

Parameters

Name Type Required Description
tenantId string Yes
pageSize int No
afterId string No
includeContext bool No
afterCreatedAt int64 No
unreadOnly bool No
dmOnly bool No
noDm bool No
includeTranslations bool No
sso string No

Response

Returns: Option[GetUserNotifications_200_response]

Example

getUserNotifications Example
Copy Copy
1
2let (response, httpResponse) = client.getUserNotifications(
3 tenantId = "my-tenant-123",
4 pageSize = 0,
5 afterId = "",
6 includeContext = false,
7 afterCreatedAt = 0'i64,
8 unreadOnly = false,
9 dmOnly = false,
10 noDm = false,
11 includeTranslations = false,
12 sso = ""
13)
14
15if response.isSome:
16 let notifications = response.get()
17 echo "Received notifications: ", notifications
18else:
19 echo "No notifications, HTTP status: ", httpResponse.status
20

getUserPresenceStatuses Internal Link

Parameters

Name Type Required Description
tenantId string Yes
urlIdWS string No
userIds string No

Response

Returns: Option[GetUserPresenceStatuses_200_response]

Example

getUserPresenceStatuses Example
Copy Copy
1
2let (response, httpResponse) = client.getUserPresenceStatuses(tenantId = "my-tenant-123", urlIdWS = "news/article-2026", userIds = "user-789,user-456")
3if response.isSome:
4 let presenceStatuses = response.get()
5 echo "Presence statuses received: ", presenceStatuses
6else:
7 echo "No presence data; HTTP status: ", httpResponse.status
8

getUserReactsPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
postIds seq[string] No
sso string No

Response

Returns: Option[GetUserReactsPublic_200_response]

Example

getUserReactsPublic Example
Copy Copy
1
2let (response, httpResponse) = client.getUserReactsPublic(tenantId = "my-tenant-123", postIds = @[], sso = "")
3if response.isSome:
4 let reacts = response.get()
5 echo "Received user reacts"
6else:
7 echo "No reacts returned"
8

lockComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
broadcastId string No
sso string No

Response

Returns: Option[LockComment_200_response]

Example

lockComment Example
Copy Copy
1
2let (response, httpResponse) = client.lockComment(tenantId = "my-tenant-123", commentId = "cmt-456789", broadcastId = "", sso = "")
3if response.isSome:
4 let locked = response.get()
5 echo locked
6

patchDomainConfig Internal Link

Parameters

Name Type Required Description
tenantId string Yes
domainToUpdate string No
patchDomainConfigParams PatchDomainConfigParams No

Response

Returns: Option[GetDomainConfig_200_response]

Example

patchDomainConfig Example
Copy Copy
1
2let (response, httpResponse) = client.patchDomainConfig(
3 tenantId = "my-tenant-123",
4 domainToUpdate = "news.example.com",
5 patchDomainConfigParams = PatchDomainConfigParams()
6)
7
8if response.isSome:
9 let updatedConfig = response.get()
10 discard updatedConfig
11

patchPage Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
updateAPIPageData UpdateAPIPageData No

Response

Returns: Option[PatchPageAPIResponse]

Example

patchPage Example
Copy Copy
1
2let (response, httpResponse) = client.patchPage(tenantId = "my-tenant-123", id = "news/article-title", updateAPIPageData = UpdateAPIPageData(url: "/news/article-title", title: "Market Rally Today", description: "Updated summary and headline", isActive: true, tags: @["finance", "markets"], priority: 1))
3if response.isSome:
4 let page = response.get()
5 discard page
6else:
7 discard httpResponse
8

patchSSOUser Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
updateAPISSOUserData UpdateAPISSOUserData No
updateComments bool No

Response

Returns: Option[PatchSSOUserAPIResponse]

Example

patchSSOUser Example
Copy Copy
1
2let (response, httpResponse) = client.patchSSOUser(
3 tenantId = "my-tenant-123",
4 id = "sso-user-98765",
5 updateAPISSOUserData = UpdateAPISSOUserData(
6 email = "jane.doe@example.com",
7 displayName = "Jane Doe",
8 externalId = "jd-98765",
9 avatarUrl = "https://cdn.news-site.com/avatars/jane.jpg",
10 roles = @["editor", "contributor"]
11 ),
12 updateComments = true
13)
14
15if response.isSome:
16 let patched = response.get()
17 echo "Patched SSO user:", patched
18else:
19 echo "Request failed, HTTP status:", httpResponse.status
20

pinComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
broadcastId string No
sso string No

Response

Returns: Option[PinComment_200_response]

Example

pinComment Example
Copy Copy
1
2let (response, httpResponse) = client.pinComment(tenantId = "my-tenant-123", commentId = "cmt-456789", broadcastId = "", sso = "")
3if response.isSome:
4 let pinResp = response.get()
5 discard pinResp
6else:
7 discard httpResponse
8

putDomainConfig Internal Link

Parameters

Name Type Required Description
tenantId string Yes
domainToUpdate string No
updateDomainConfigParams UpdateDomainConfigParams No

Response

Returns: Option[GetDomainConfig_200_response]

Example

putDomainConfig Example
Copy Copy
1
2let updateParams = UpdateDomainConfigParams(
3 allowedOrigins = @["https://news.example.com"],
4 enableModeration = true,
5 moderationMode = "pre",
6 maxCommentLength = 1000
7)
8
9let (response, httpResponse) = client.putDomainConfig(
10 tenantId = "my-tenant-123",
11 domainToUpdate = "news.example.com",
12 updateDomainConfigParams = updateParams
13)
14
15if response.isSome:
16 let domainConfig = response.get()
17

putSSOUser Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
updateAPISSOUserData UpdateAPISSOUserData No
updateComments bool No

Response

Returns: Option[PutSSOUserAPIResponse]

Example

putSSOUser Example
Copy Copy
1
2let (response, httpResponse) = client.putSSOUser(
3 tenantId = "my-tenant-123",
4 id = "user-9876",
5 updateAPISSOUserData = UpdateAPISSOUserData(
6 email = "jane.doe@example.com",
7 displayName = "Jane Doe",
8 externalId = "sso-451",
9 avatarUrl = "https://cdn.news-site.com/avatars/jane.jpg",
10 roles = @["commenter"],
11 optedOut = false
12 ),
13 updateComments = true
14)
15
16if response.isSome:
17 let res = response.get()
18 echo "SSO user updated: ", res
19else:
20 echo "Failed to update SSO user, HTTP status: ", httpResponse.statusCode
21

reactFeedPostPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
postId string No
reactBodyParams ReactBodyParams No
isUndo bool No
broadcastId string No
sso string No

Response

Returns: Option[ReactFeedPostPublic_200_response]

Example

reactFeedPostPublic Example
Copy Copy
1
2let reactBody: ReactBodyParams = ReactBodyParams(reaction = "like")
3let (response, httpResponse) = client.reactFeedPostPublic(
4 tenantId = "my-tenant-123",
5 postId = "news/global-economy-q1",
6 reactBodyParams = reactBody,
7 isUndo = false,
8 broadcastId = "",
9 sso = ""
10)
11if response.isSome:
12 let result = response.get()
13 echo "Reaction response received: ", result
14else:
15 echo "No response body, HTTP status: ", httpResponse.status.contentType
16

resetUserNotificationCount Internal Link

Parameters

Name Type Required Description
tenantId string Yes
sso string No

Response

Returns: Option[ResetUserNotifications_200_response]

Example

resetUserNotificationCount Example
Copy Copy
1
2let (response, httpResponse) = client.resetUserNotificationCount(tenantId = "my-tenant-123", sso = "")
3
4if response.isSome:
5 let resetResult = response.get()
6 echo "Reset succeeded: ", resetResult
7else:
8 echo "Reset failed, response not present"
9

resetUserNotifications Internal Link

Parameters

Name Type Required Description
tenantId string Yes
afterId string No
afterCreatedAt int64 No
unreadOnly bool No
dmOnly bool No
noDm bool No
sso string No

Response

Returns: Option[ResetUserNotifications_200_response]

Example

resetUserNotifications Example
Copy Copy
1
2let (response, httpResponse) = client.resetUserNotifications(
3 tenantId = "my-tenant-123",
4 afterId = "",
5 afterCreatedAt = 0'i64,
6 unreadOnly = false,
7 dmOnly = false,
8 noDm = false,
9 sso = ""
10)
11if response.isSome:
12 let result = response.get()
13 echo result
14

saveComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
createCommentParams CreateCommentParams No
isLive bool No
doSpamCheck bool No
sendEmails bool No
populateNotifications bool No

Response

Returns: Option[SaveComment_200_response]

Example

saveComment Example
Copy Copy
1
2let commentParams = CreateCommentParams(
3 body = "Great reporting — thanks for the update.",
4 url = "news/2026/01/08/major-update",
5 authorName = "Jane Doe",
6 authorEmail = "jane.doe@example.com",
7 parentId = 0,
8 tags = @["update", "breaking"],
9 ipAddress = "203.0.113.42",
10 userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
11)
12
13let (response, httpResponse) = client.saveComment(
14 tenantId = "my-tenant-123",
15 createCommentParams = commentParams,
16 isLive = true,
17 doSpamCheck = true,
18 sendEmails = false,
19 populateNotifications = true
20)
21
22if response.isSome:
23 let saved = response.get()
24 echo "Saved comment response: ", $saved
25

saveCommentsBulk Internal Link

Parameters

Name Type Required Description
tenantId string Yes
createCommentParams seq[CreateCommentParams] No
isLive bool No
doSpamCheck bool No
sendEmails bool No
populateNotifications bool): (Option[seq[SaveComment_200_response]] No
id string No
unBlockFromCommentParams UnBlockFromCommentParams No
userId string No
anonUserId string No

Response

Returns: Option[UnBlockCommentPublic_200_response]

Example

saveCommentsBulk Example
Copy Copy
1
2let (response, httpResponse) = client.saveCommentsBulk(
3 tenantId = "my-tenant-123",
4 createCommentParams = @[],
5 isLive = true,
6 doSpamCheck = true,
7 sendEmails = false,
8 populateNotifications = true,
9 id = "",
10 unBlockFromCommentParams = UnBlockFromCommentParams(),
11 userId = "editor-42",
12 anonUserId = "anon-987"
13)
14if response.isSome:
15 let unblocked = response.get()
16 echo "Unblocked response:", repr(unblocked)
17

searchUsers Internal Link

Parameters

Name Type Required Description
tenantId string Yes
urlId string Yes
usernameStartsWith string No
mentionGroupIds seq[string] No
sso string No

Response

Returns: Option[SearchUsers_200_response]

Example

searchUsers Example
Copy Copy
1
2let (response, httpResponse) = client.searchUsers(
3 tenantId = "my-tenant-123",
4 urlId = "news/article-title",
5 usernameStartsWith = "",
6 mentionGroupIds = @[],
7 sso = ""
8)
9
10if response.isSome:
11 let users = response.get()
12 discard users
13else:
14 discard httpResponse
15

setCommentText Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
broadcastId string No
commentTextUpdateRequest CommentTextUpdateRequest No
editKey string No
sso string No

Response

Returns: Option[SetCommentText_200_response]

Example

setCommentText Example
Copy Copy
1
2let (response, httpResponse) = client.setCommentText(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-7890",
5 broadcastId = "",
6 commentTextUpdateRequest = CommentTextUpdateRequest(text = "Updated comment text: fixed a typo and clarified the point."),
7 editKey = "",
8 sso = ""
9)
10
11if response.isSome:
12 let updated = response.get()
13 echo "Comment updated for tenant: ", "my-tenant-123"
14

unBlockCommentPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
publicBlockFromCommentParams PublicBlockFromCommentParams No
sso string No

Response

Returns: Option[UnBlockCommentPublic_200_response]

Example

unBlockCommentPublic Example
Copy Copy
1
2let (response, httpResponse) = client.unBlockCommentPublic(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-456789",
5 publicBlockFromCommentParams = PublicBlockFromCommentParams(),
6 sso = ""
7)
8if response.isSome:
9 let unblocked = response.get()
10 discard unblocked
11

unFlagComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
userId string No
anonUserId string No

Response

Returns: Option[FlagComment_200_response]

Example

unFlagComment Example
Copy Copy
1
2let (response, httpResponse) = client.unFlagComment(
3 tenantId = "my-tenant-123",
4 id = "cmt-987654",
5 userId = "",
6 anonUserId = ""
7)
8
9if response.isSome:
10 let flagResp = response.get()
11 discard flagResp
12

unLockComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
broadcastId string No
sso string No

Response

Returns: Option[LockComment_200_response]

Example

unLockComment Example
Copy Copy
1
2let (response, httpResponse) = client.unLockComment(tenantId = "my-tenant-123", commentId = "comment-98765", broadcastId = "", sso = "")
3if response.isSome:
4 let lockResp = response.get()
5 discard lockResp
6

unPinComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
broadcastId string No
sso string No

Response

Returns: Option[PinComment_200_response]

Example

unPinComment Example
Copy Copy
1
2let (response, httpResponse) = client.unPinComment(tenantId = "acme-tenant-42", commentId = "cmt-987654321", broadcastId = "", sso = "")
3if response.isSome:
4 let pinResp = response.get()
5 discard pinResp
6else:
7 discard httpResponse
8

updateComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
updatableCommentParams UpdatableCommentParams No
contextUserId string No
doSpamCheck bool No
isLive bool No

Response

Returns: Option[FlagCommentPublic_200_response]

Example

updateComment Example
Copy Copy
1
2let (response, httpResponse) = client.updateComment(
3 tenantId = "my-tenant-123",
4 id = "cmt-456",
5 updatableCommentParams = UpdatableCommentParams(
6 content = "Updated the comment to correct a factual error and clarify the timeline.",
7 authorName = "Jane Doe",
8 tags = @["correction", "timeline"]
9 ),
10 contextUserId = "user-789",
11 doSpamCheck = true,
12 isLive = true
13)
14if response.isSome:
15 let flagResp = response.get()
16 echo "Update returned a flag response:"
17 echo flagResp
18else:
19 echo "No flag response returned. HTTP status: ", httpResponse.status.code
20

updateFeedPost Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
feedPost FeedPost No

Response

Returns: Option[FlagCommentPublic_200_response]

Example

updateFeedPost Example
Copy Copy
1
2let feedPost = FeedPost(title = "AI policy update", content = "We updated commenting rules to cover AI-generated content.", url = "/news/ai-policy-update", published = true, tags = @["policy", "ai"])
3let (response, httpResponse) = client.updateFeedPost(tenantId = "news-site-001", id = "feedpost-20260108-abc", feedPost = feedPost)
4if response.isSome:
5 let updated = response.get()
6 echo "Feed post updated successfully"
7

updateFeedPostPublic Internal Link

Parameters

Name Type Required Description
tenantId string Yes
postId string No
updateFeedPostParams UpdateFeedPostParams No
broadcastId string No
sso string No

Response

Returns: Option[CreateFeedPostPublic_200_response]

Example

updateFeedPostPublic Example
Copy Copy
1
2let updateParams = UpdateFeedPostParams(
3 title = "Breaking: City Council Approves New Park",
4 body = "The council voted 6-1 to approve the new waterfront park project.",
5 tags = @["local", "community", "park"],
6 isPinned = false
7)
8
9let (response, httpResponse) = client.updateFeedPostPublic(
10 tenantId = "my-tenant-123",
11 postId = "news/city-council-park-2026",
12 updateFeedPostParams = updateParams,
13 broadcastId = "",
14 sso = ""
15)
16
17if response.isSome:
18 let updated = response.get()
19 echo "Update successful for tenant:", "my-tenant-123"
20

updateUserBadge Internal Link

Parameters

Name Type Required Description
tenantId string Yes
id string No
updateUserBadgeParams UpdateUserBadgeParams No

Response

Returns: Option[UpdateUserBadge_200_response]

Example

updateUserBadge Example
Copy Copy
1
2let (response, httpResponse) = client.updateUserBadge(tenantId = "my-tenant-123", id = "badge-456", updateUserBadgeParams = UpdateUserBadgeParams(name: "Moderator", description: "Community moderator badge", icon: "shield", color: "#007bff", enabled: true, priority: 10, tags: @["trusted", "veteran"]))
3if response.isSome:
4 let badge = response.get()
5 discard badge
6

updateUserNotificationCommentSubscriptionStatus Internal Link

Parameters

Name Type Required Description
tenantId string Yes
notificationId string No
optedInOrOut string No
commentId string Yes
sso string No

Response

Returns: Option[UpdateUserNotificationStatus_200_response]

Example

updateUserNotificationCommentSubscriptionStatus Example
Copy Copy
1
2let (response, httpResponse) = client.updateUserNotificationCommentSubscriptionStatus(
3 tenantId = "my-tenant-123",
4 notificationId = "notif-456",
5 optedInOrOut = "opted_out",
6 commentId = "comment-789",
7 sso = "sso-token-abc123"
8)
9if response.isSome:
10 let updated = response.get()
11 discard updated
12

updateUserNotificationPageSubscriptionStatus Internal Link

Parameters

Name Type Required Description
tenantId string Yes
urlId string Yes
url string No
pageTitle string No
subscribedOrUnsubscribed string No
sso string No

Response

Returns: Option[UpdateUserNotificationStatus_200_response]

Example

updateUserNotificationPageSubscriptionStatus Example
Copy Copy
1
2let (response, httpResponse) = client.updateUserNotificationPageSubscriptionStatus(
3 tenantId = "my-tenant-123",
4 urlId = "news/2026/01/08/breaking-story",
5 url = "https://www.example.com/news/2026/01/08/breaking-story",
6 pageTitle = "Breaking News: Major Event",
7 subscribedOrUnsubscribed = "subscribed",
8 sso = "sso-jwt-abcdef123456"
9)
10if response.isSome:
11 let updateResult = response.get()
12 discard updateResult
13

updateUserNotificationStatus Internal Link

Parameters

Name Type Required Description
tenantId string Yes
notificationId string No
newStatus string No
sso string No

Response

Returns: Option[UpdateUserNotificationStatus_200_response]

Example

updateUserNotificationStatus Example
Copy Copy
1
2let (response, httpResponse) = client.updateUserNotificationStatus(
3 tenantId = "my-tenant-123",
4 notificationId = "notif-789",
5 newStatus = "read",
6 sso = "user-sso-token-abc123"
7)
8if response.isSome:
9 let updated = response.get()
10 echo "Notification updated, HTTP status: ", httpResponse.status
11 echo updated
12else:
13 echo "No update response, HTTP status: ", httpResponse.status
14

uploadImage Internal Link

Parameters

Name Type Required Description
tenantId string Yes
file string No
sizePreset SizePreset No
urlId string Yes

Response

Returns: Option[UploadImageResponse]

Example

uploadImage Example
Copy Copy
1
2let (response, httpResponse) = client.uploadImage(
3 tenantId = "my-tenant-123",
4 file = "/home/alice/images/article-cover.jpg",
5 sizePreset = SizePreset.Large,
6 urlId = "news/2026-01-08-major-update"
7)
8if response.isSome:
9 let uploadResp = response.get()
10 echo "Upload successful for urlId: ", "news/2026-01-08-major-update"
11else:
12 echo "Upload failed"
13

voteComment Internal Link

Parameters

Name Type Required Description
tenantId string Yes
commentId string Yes
urlId string Yes
broadcastId string No
voteBodyParams VoteBodyParams No
sessionId string No
sso string No

Response

Returns: Option[VoteComment_200_response]

Example

voteComment Example
Copy Copy
1
2let (response, httpResponse) = client.voteComment(
3 tenantId = "my-tenant-123",
4 commentId = "cmt-987654",
5 urlId = "news/article-title",
6 broadcastId = "",
7 voteBodyParams = VoteBodyParams(),
8 sessionId = "",
9 sso = ""
10)
11
12if response.isSome:
13 let voteResp = response.get()
14 echo "VoteComment succeeded:", voteResp
15else:
16 echo "VoteComment failed, HTTP status:", httpResponse.status
17

Need Help?

If you encounter any issues or have questions about the Nim SDK, please:

Contributing

Contributions are welcome! Please visit the GitHub repository for contribution guidelines.