FastComments.com

FastComments Rust SDK

This is the official Rust SDK for FastComments.

Official Rust SDK for the FastComments API

Repository

View on GitHub

Installation Internal Link

cargo add fastcomments-sdk

The SDK requires Rust 2021 edition or later.

Library Contents Internal Link

The FastComments Rust SDK consists of several modules:

  • Client Module - Auto-generated API client for FastComments REST APIs

    • Complete type definitions for all API models
    • Both authenticated (DefaultApi) and public (PublicApi) endpoints
    • Full async/await support with tokio
    • See client/README.md for detailed API documentation
  • SSO Module - Server-side Single Sign-On utilities

    • Secure token generation for user authentication
    • Support for both simple and secure SSO modes
    • HMAC-SHA256 based token signing
  • Core Types - Shared type definitions and utilities

    • Comment models and metadata structures
    • User and tenant configurations
    • Helper functions for common operations

Quick Start Internal Link

Using the Public API

use fastcomments_sdk::client::apis::configuration::Configuration;
use fastcomments_sdk::client::apis::public_api;

#[tokio::main]
async fn main() {
    // Create API configuration
    let config = Configuration::new();

    // Fetch comments for a page
    let result = public_api::get_comments_public(
        &config,
        public_api::GetCommentsPublicParams {
            tenant_id: "your-tenant-id".to_string(),
            urlid: Some("page-url-id".to_string()),
            url: None,
            count_only: None,
            skip: None,
            limit: None,
            sort_dir: None,
            page: None,
            sso_hash: None,
            simple_sso_hash: None,
            has_no_comment: None,
            has_comment: None,
            comment_id_filter: None,
            child_ids: None,
            start_date_time: None,
            starts_with: None,
        },
    )
    .await;

    match result {
        Ok(response) => {
            println!("Found {} comments", response.comments.len());
            for comment in response.comments {
                println!("Comment: {:?}", comment);
            }
        }
        Err(e) => eprintln!("Error fetching comments: {:?}", e),
    }
}

Using the Authenticated API

use fastcomments_sdk::client::apis::configuration::{ApiKey, Configuration};
use fastcomments_sdk::client::apis::default_api;

#[tokio::main]
async fn main() {
    // Create configuration with API key
    let mut config = Configuration::new();
    config.api_key = Some(ApiKey {
        prefix: None,
        key: "your-api-key".to_string(),
    });

    // Fetch comments using authenticated API
    let result = default_api::get_comments(
        &config,
        default_api::GetCommentsParams {
            tenant_id: "your-tenant-id".to_string(),
            skip: None,
            limit: None,
            sort_dir: None,
            urlid: Some("page-url-id".to_string()),
            url: None,
            is_spam: None,
            user_id: None,
            all_comments: None,
            for_moderation: None,
            parent_id: None,
            is_flagged: None,
            is_flagged_tag: None,
            is_by_verified: None,
            is_pinned: None,
            asc: None,
            include_imported: None,
            origin: None,
            tags: None,
        },
    )
    .await;

    match result {
        Ok(response) => {
            println!("Total comments: {}", response.count);
            for comment in response.comments {
                println!("Comment ID: {}, Text: {}", comment.id, comment.comment);
            }
        }
        Err(e) => eprintln!("Error: {:?}", e),
    }
}

Using SSO for Authentication

use fastcomments_sdk::sso::{
    fastcomments_sso::FastCommentsSSO,
    secure_sso_user_data::SecureSSOUserData,
};

fn main() {
    let api_key = "your-api-key".to_string();

    // Create secure SSO user data (server-side only!)
    let user_data = SecureSSOUserData::new(
        "user-123".to_string(),           // User ID
        "[email protected]".to_string(),   // Email
        "John Doe".to_string(),            // Username
        "https://example.com/avatar.jpg".to_string(), // Avatar URL
    );

    // Generate SSO token
    let sso = FastCommentsSSO::new_secure(api_key, &user_data).unwrap();
    let token = sso.create_token().unwrap();

    println!("SSO Token: {}", token);
    // Pass this token to your frontend for authentication
}

Common Issues Internal Link

401 Unauthorized Errors

If you're getting 401 errors when using the authenticated API:

  1. Check your API key: Ensure you're using the correct API key from your FastComments dashboard
  2. Verify the tenant ID: Make sure the tenant ID matches your account
  3. API key format: The API key should be passed in the Configuration:
let mut config = Configuration::new();
config.api_key = Some(ApiKey {
    prefix: None,
    key: "YOUR_API_KEY".to_string(),
});

SSO Token Issues

If SSO tokens aren't working:

  1. Use secure mode for production: Always use FastCommentsSSO::new_secure() with your API key for production
  2. Server-side only: Generate SSO tokens on your server, never expose your API key to clients
  3. Check user data: Ensure all required fields (id, email, username) are provided

Async Runtime Errors

The SDK uses tokio for async operations. Make sure to:

  1. Add tokio to your dependencies:

    [dependencies]
    tokio = { version = "1", features = ["full"] }
  2. Use the tokio runtime:

    #[tokio::main]
    async fn main() {
     // Your async code here
    }

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.

aggregate Internal Link

Aggregates documents by grouping them (if groupBy is provided) and applying multiple operations. Different operations (e.g. sum, countDistinct, avg, etc.) are supported.

Parameters

Name Type Required Description
tenant_id String Yes
aggregation_request models::AggregationRequest Yes
parent_tenant_id String No
include_stats bool No

Response

Returns: AggregationResponse

get_audit_logs Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
limit f64 No
skip f64 No
order models::SortDir No
after f64 No
before f64 No

Response

Returns: GetAuditLogs200Response

block_from_comment_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
public_block_from_comment_params models::PublicBlockFromCommentParams Yes
sso String No

Response

Returns: BlockFromCommentPublic200Response

un_block_comment_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
public_block_from_comment_params models::PublicBlockFromCommentParams Yes
sso String No

Response

Returns: UnBlockCommentPublic200Response

checked_comments_for_blocked Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_ids String Yes
sso String No

Response

Returns: CheckedCommentsForBlocked200Response

block_user_from_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
block_from_comment_params models::BlockFromCommentParams Yes
user_id String No
anon_user_id String No

Response

Returns: BlockFromCommentPublic200Response

create_comment_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes
broadcast_id String Yes
comment_data models::CommentData Yes
session_id String No
sso String No

Response

Returns: CreateCommentPublic200Response

delete_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
context_user_id String No
is_live bool No

Response

Returns: DeleteComment200Response

delete_comment_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
broadcast_id String Yes
edit_key String No
sso String No

Response

Returns: DeleteCommentPublic200Response

delete_comment_vote Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
vote_id String Yes
url_id String Yes
broadcast_id String Yes
edit_key String No
sso String No

Response

Returns: DeleteCommentVote200Response

flag_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
user_id String No
anon_user_id String No

Response

Returns: FlagComment200Response

get_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetComment200Response

get_comment_text Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
edit_key String No
sso String No

Response

Returns: GetCommentText200Response

get_comment_vote_user_names Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
dir i32 Yes
sso String No

Response

Returns: GetCommentVoteUserNames200Response

get_comments Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
page i32 No
limit i32 No
skip i32 No
as_tree bool No
skip_children i32 No
limit_children i32 No
max_tree_depth i32 No
url_id String No
user_id String No
anon_user_id String No
context_user_id String No
hash_tag String No
parent_id String No
direction models::SortDirections No

Response

Returns: GetComments200Response

get_comments_public Internal Link

req tenantId urlId

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes
page i32 No
direction models::SortDirections No
sso String No
skip i32 No
skip_children i32 No
limit i32 No
limit_children i32 No
count_children bool No
fetch_page_for_comment_id String No
include_config bool No
count_all bool No
includei10n bool No
locale String No
modules String No
is_crawler bool No
include_notification_count bool No
as_tree bool No
max_tree_depth i32 No
use_full_translation_ids bool No
parent_id String No
search_text String No
hash_tags Vec No
user_id String No
custom_config_str String No
after_comment_id String No
before_comment_id String No

Response

Returns: GetCommentsPublic200Response

lock_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
broadcast_id String Yes
sso String No

Response

Returns: LockComment200Response

pin_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
broadcast_id String Yes
sso String No

Response

Returns: PinComment200Response

save_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_comment_params models::CreateCommentParams Yes
is_live bool No
do_spam_check bool No
send_emails bool No
populate_notifications bool No

Response

Returns: SaveComment200Response

save_comments_bulk Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_comment_params Vecmodels::CreateCommentParams Yes
is_live bool No
do_spam_check bool No
send_emails bool No
populate_notifications bool No

Response

Returns: Vec<models::SaveComment200Response>

set_comment_text Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
broadcast_id String Yes
comment_text_update_request models::CommentTextUpdateRequest Yes
edit_key String No
sso String No

Response

Returns: SetCommentText200Response

un_block_user_from_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
un_block_from_comment_params models::UnBlockFromCommentParams Yes
user_id String No
anon_user_id String No

Response

Returns: UnBlockCommentPublic200Response

un_flag_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
user_id String No
anon_user_id String No

Response

Returns: FlagComment200Response

un_lock_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
broadcast_id String Yes
sso String No

Response

Returns: LockComment200Response

un_pin_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
broadcast_id String Yes
sso String No

Response

Returns: PinComment200Response

update_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
body models::PickApiCommentPeriodUpdatableCommentFields Yes
context_user_id String No
do_spam_check bool No
is_live bool No

Response

Returns: FlagCommentPublic200Response

vote_comment Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
url_id String Yes
broadcast_id String Yes
vote_body_params models::VoteBodyParams Yes
session_id String No
sso String No

Response

Returns: VoteComment200Response

add_domain_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
add_domain_config_params models::AddDomainConfigParams Yes

Response

Returns: AddDomainConfig200Response

delete_domain_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
domain String Yes

Response

Returns: DeleteDomainConfig200Response

get_domain_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
domain String Yes

Response

Returns: GetDomainConfig200Response

get_domain_configs Internal Link

Parameters

Name Type Required Description
tenant_id String Yes

Response

Returns: GetDomainConfigs200Response

patch_domain_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
domain_to_update String Yes
patch_domain_config_params models::PatchDomainConfigParams Yes

Response

Returns: GetDomainConfig200Response

put_domain_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
domain_to_update String Yes
update_domain_config_params models::UpdateDomainConfigParams Yes

Response

Returns: GetDomainConfig200Response

create_email_template Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_email_template_body models::CreateEmailTemplateBody Yes

Response

Returns: CreateEmailTemplate200Response

Example

create_email_template Example
Copy Copy
1
2let params: CreateEmailTemplateParams = CreateEmailTemplateParams {
3 tenant_id: "acme-corp-tenant".to_string(),
4 create_email_template_body: models::CreateEmailTemplateBody {
5 name: "New Comment Notification".to_string(),
6 subject: "New comment on your article".to_string(),
7 html_body: "<p>A new comment was posted on <strong>{article_title}</strong>.</p>".to_string(),
8 text_body: Some("A new comment was posted on {article_title}.".to_string()),
9 from_email: Some("[email protected]".to_string()),
10 enabled: Some(true),
11 },
12};
13let response: CreateEmailTemplate200Response = create_email_template(&configuration, params).await?;
14

delete_email_template Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: FlagCommentPublic200Response

Example

delete_email_template Example
Copy Copy
1
2async fn run_delete() -> Result<FlagCommentPublic200Response, Error> {
3 let params: DeleteEmailTemplateParams = DeleteEmailTemplateParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "welcome-email-template".to_string(),
6 };
7 let response: FlagCommentPublic200Response = delete_email_template(&configuration, params).await?;
8 Ok(response)
9}
10

delete_email_template_render_error Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
error_id String Yes

Response

Returns: FlagCommentPublic200Response

Example

delete_email_template_render_error Example
Copy Copy
1
2async fn delete_email_template_render_error_example() -> Result<FlagCommentPublic200Response, Error> {
3 let params: DeleteEmailTemplateRenderErrorParams = DeleteEmailTemplateRenderErrorParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "marketing/newsletter/welcome-email".to_string(),
6 error_id: "render-err-2026-01-12-01".to_string(),
7 };
8 let response: FlagCommentPublic200Response = delete_email_template_render_error(configuration, params).await?;
9 Ok(response)
10}
11

get_email_template Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetEmailTemplate200Response

Example

get_email_template Example
Copy Copy
1
2async fn fetch_template() -> Result<GetEmailTemplate200Response, Error> {
3 let params: GetEmailTemplateParams = GetEmailTemplateParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "welcome-email-template".to_string(),
6 };
7 let template: GetEmailTemplate200Response = get_email_template(&configuration, params).await?;
8 Ok(template)
9}
10

get_email_template_definitions Internal Link

Parameters

Name Type Required Description
tenant_id String Yes

Response

Returns: GetEmailTemplateDefinitions200Response

Example

get_email_template_definitions Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let config: configuration::Configuration = configuration::Configuration::default();
4 let params: GetEmailTemplateDefinitionsParams = GetEmailTemplateDefinitionsParams {
5 tenant_id: "acme-corp-tenant".to_string(),
6 locale: Some("en-US".to_string()),
7 include_inactive: Some(false),
8 };
9 let resp: GetEmailTemplateDefinitions200Response = get_email_template_definitions(&config, params).await?;
10 let _definitions = resp;
11 Ok(())
12}
13

get_email_template_render_errors Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
skip f64 No

Response

Returns: GetEmailTemplateRenderErrors200Response

Example

get_email_template_render_errors Example
Copy Copy
1
2async fn example_call() -> Result<(), Error> {
3 let params: GetEmailTemplateRenderErrorsParams = GetEmailTemplateRenderErrorsParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "welcome-email-template".to_string(),
6 skip: Some(10.0),
7 };
8 let _response: GetEmailTemplateRenderErrors200Response =
9 get_email_template_render_errors(&configuration, params).await?;
10 Ok(())
11}
12

get_email_templates Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
skip f64 No

Response

Returns: GetEmailTemplates200Response

Example

get_email_templates Example
Copy Copy
1
2async fn fetch_email_templates() -> Result<GetEmailTemplates200Response, Error> {
3 let params: GetEmailTemplatesParams = GetEmailTemplatesParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 skip: Some(20.0),
6 };
7 let templates: GetEmailTemplates200Response = get_email_templates(&configuration, params).await?;
8 Ok(templates)
9}
10

render_email_template Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
render_email_template_body models::RenderEmailTemplateBody Yes
locale String No

Response

Returns: RenderEmailTemplate200Response

Example

render_email_template Example
Copy Copy
1
2let params: RenderEmailTemplateParams = RenderEmailTemplateParams {
3 tenant_id: "acme-corp-tenant".to_string(),
4 render_email_template_body: models::RenderEmailTemplateBody {
5 template_id: "comment-notification".to_string(),
6 subject: Some("New comment on your article".to_string()),
7 placeholders: std::collections::HashMap::from([
8 ("article_title".to_string(), "Rust Gains Momentum in 2026".to_string()),
9 ("comment_author".to_string(), "Jane Doe".to_string()),
10 ("comment_snippet".to_string(), "Great insights — thanks for sharing!".to_string()),
11 ]),
12 },
13 locale: Some("en-US".to_string()),
14};
15let rendered: RenderEmailTemplate200Response = render_email_template(&configuration, params).await?;
16

update_email_template Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_email_template_body models::UpdateEmailTemplateBody Yes

Response

Returns: FlagCommentPublic200Response

Example

update_email_template Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: UpdateEmailTemplateParams = UpdateEmailTemplateParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "welcome-template-001".to_string(),
6 update_email_template_body: models::UpdateEmailTemplateBody {
7 name: Some("Welcome Template".to_string()),
8 subject: Some("Welcome to Acme News".to_string()),
9 body_html: Some("<p>Hi , welcome to Acme News!</p>".to_string()),
10 from_address: Some("[email protected]".to_string()),
11 reply_to: Some("[email protected]".to_string()),
12 enabled: Some(true),
13 language: Some("en-US".to_string()),
14 custom_config: Some(models::CustomConfigParameters {
15 tracking_pixel_url: Some("https://acme-news.com/pixel".to_string()),
16 }),
17 },
18 };
19
20 let response: FlagCommentPublic200Response = update_email_template(&configuration, params).await?;
21 let _ = response;
22 Ok(())
23}
24

get_event_log Internal Link

req tenantId urlId userIdWS

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes
user_id_ws String Yes
start_time i64 Yes
end_time i64 Yes

Response

Returns: GetEventLog200Response

get_global_event_log Internal Link

req tenantId urlId userIdWS

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes
user_id_ws String Yes
start_time i64 Yes
end_time i64 Yes

Response

Returns: GetEventLog200Response

create_feed_post Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_feed_post_params models::CreateFeedPostParams Yes
broadcast_id String No
is_live bool No
do_spam_check bool No
skip_dup_check bool No

Response

Returns: CreateFeedPost200Response

create_feed_post_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_feed_post_params models::CreateFeedPostParams Yes
broadcast_id String No
sso String No

Response

Returns: CreateFeedPostPublic200Response

delete_feed_post_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
post_id String Yes
broadcast_id String No
sso String No

Response

Returns: DeleteFeedPostPublic200Response

get_feed_posts Internal Link

req tenantId afterId

Parameters

Name Type Required Description
tenant_id String Yes
after_id String No
limit i32 No
tags Vec No

Response

Returns: GetFeedPosts200Response

get_feed_posts_public Internal Link

req tenantId afterId

Parameters

Name Type Required Description
tenant_id String Yes
after_id String No
limit i32 No
tags Vec No
sso String No
is_crawler bool No
include_user_info bool No

Response

Returns: GetFeedPostsPublic200Response

get_feed_posts_stats Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
post_ids Vec Yes
sso String No

Response

Returns: GetFeedPostsStats200Response

get_user_reacts_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
post_ids Vec No
sso String No

Response

Returns: GetUserReactsPublic200Response

react_feed_post_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
post_id String Yes
react_body_params models::ReactBodyParams Yes
is_undo bool No
broadcast_id String No
sso String No

Response

Returns: ReactFeedPostPublic200Response

update_feed_post Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
feed_post models::FeedPost Yes

Response

Returns: FlagCommentPublic200Response

update_feed_post_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
post_id String Yes
update_feed_post_params models::UpdateFeedPostParams Yes
broadcast_id String No
sso String No

Response

Returns: CreateFeedPostPublic200Response

flag_comment_public Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
is_flagged bool Yes
sso String No

Response

Returns: FlagCommentPublic200Response

add_hash_tag Internal Link

Parameters

Name Type Required Description
tenant_id String No
create_hash_tag_body models::CreateHashTagBody No

Response

Returns: AddHashTag200Response

Example

add_hash_tag Example
Copy Copy
1
2async fn run_add_hash_tag(configuration: &configuration::Configuration) -> Result<(), Error> {
3 let params: AddHashTagParams = AddHashTagParams {
4 tenant_id: Some("acme-corp-tenant".to_string()),
5 create_hash_tag_body: Some(models::CreateHashTagBody {
6 tag: "breaking-news".to_string(),
7 label: Some("Breaking News".to_string()),
8 visible: Some(true),
9 }),
10 };
11
12 let created: AddHashTag200Response = add_hash_tag(configuration, params).await?;
13 println!("{:#?}", created);
14 Ok(())
15}
16

add_hash_tags_bulk Internal Link

Parameters

Name Type Required Description
tenant_id String No
bulk_create_hash_tags_body models::BulkCreateHashTagsBody No

Response

Returns: AddHashTagsBulk200Response

Example

add_hash_tags_bulk Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: AddHashTagsBulkParams = AddHashTagsBulkParams {
4 tenant_id: Some("acme-corp-tenant".to_string()),
5 bulk_create_hash_tags_body: Some(models::BulkCreateHashTagsBody {
6 tags: vec![
7 models::BulkCreateHashTagsBodyTagsInner {
8 name: "news/article".to_string(),
9 path: "news/article".to_string(),
10 description: Some("Article tag for front page".to_string()),
11 enabled: Some(true),
12 },
13 ],
14 }),
15 };
16
17 let response: AddHashTagsBulk200Response = add_hash_tags_bulk(&configuration, params).await?;
18 Ok(())
19}
20

delete_hash_tag Internal Link

Parameters

Name Type Required Description
tag String Yes
tenant_id String No
delete_hash_tag_request models::DeleteHashTagRequest No

Response

Returns: FlagCommentPublic200Response

Example

delete_hash_tag Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: DeleteHashTagParams = DeleteHashTagParams {
4 tag: "news/politics".to_string(),
5 tenant_id: Some("acme-corp-tenant".to_string()),
6 delete_hash_tag_request: Some(models::DeleteHashTagRequest::default()),
7 };
8 let response: FlagCommentPublic200Response = delete_hash_tag(&configuration, params).await?;
9 Ok(())
10}
11

get_hash_tags Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
page f64 No

Response

Returns: GetHashTags200Response

Example

get_hash_tags Example
Copy Copy
1
2async fn example_get_hash_tags() -> Result<GetHashTags200Response, Error> {
3 let params: GetHashTagsParams = GetHashTagsParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 page: Some(1.0_f64),
6 };
7 let response: GetHashTags200Response = get_hash_tags(&configuration, params).await?;
8 Ok(response)
9}
10

patch_hash_tag Internal Link

Parameters

Name Type Required Description
tag String Yes
tenant_id String No
update_hash_tag_body models::UpdateHashTagBody No

Response

Returns: PatchHashTag200Response

Example

patch_hash_tag Example
Copy Copy
1
2async fn run_patch_hash_tag() -> Result<PatchHashTag200Response, Error> {
3 let params: PatchHashTagParams = PatchHashTagParams {
4 tag: "breaking-news".to_string(),
5 tenant_id: Some("acme-corp-tenant".to_string()),
6 update_hash_tag_body: Some(models::UpdateHashTagBody {
7 name: "Breaking News".to_string(),
8 description: "Posts about breaking news and urgent updates".to_string(),
9 synonyms: vec!["breaking".to_string(), "urgent".to_string()],
10 is_active: true,
11 }),
12 };
13 let response: PatchHashTag200Response = patch_hash_tag(&configuration, params).await?;
14 Ok(response)
15}
16

create_moderator Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_moderator_body models::CreateModeratorBody Yes

Response

Returns: CreateModerator200Response

Example

create_moderator Example
Copy Copy
1
2async fn run_create_moderator() -> Result<(), Error> {
3 let params: CreateModeratorParams = CreateModeratorParams {
4 tenant_id: "acme-corp-tenant".to_owned(),
5 create_moderator_body: models::CreateModeratorBody {
6 email: "[email protected]".to_owned(),
7 display_name: "Jane Doe".to_owned(),
8 role: Some("moderator".to_owned()),
9 active: Some(true),
10 notes: Some("Handles product and support forums".to_owned()),
11 permissions: Some(vec!["approve_comment".to_owned(), "delete_comment".to_owned()]),
12 },
13 };
14
15 let _response: CreateModerator200Response = create_moderator(&configuration, params).await?;
16 Ok(())
17}
18

delete_moderator Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
send_email String No

Response

Returns: FlagCommentPublic200Response

Example

delete_moderator Example
Copy Copy
1
2async fn run(configuration: &configuration::Configuration) -> Result<FlagCommentPublic200Response, Error> {
3 let params: DeleteModeratorParams = DeleteModeratorParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "moderator-1234".to_string(),
6 send_email: Some("true".to_string()),
7 };
8 let response: FlagCommentPublic200Response = delete_moderator(configuration, params).await?;
9 Ok(response)
10}
11

get_moderator Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetModerator200Response

Example

get_moderator Example
Copy Copy
1
2async fn example() -> Result<(), Error> {
3 let params: GetModeratorParams = GetModeratorParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "moderator-42".to_string(),
6 include: Some(vec!["roles".to_string(), "recent_comments".to_string()]),
7 };
8 let moderator: GetModerator200Response = get_moderator(&configuration, params).await?;
9 println!("{:#?}", moderator);
10 Ok(())
11}
12

get_moderators Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
skip f64 No

Response

Returns: GetModerators200Response

Example

get_moderators Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: GetModeratorsParams = GetModeratorsParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 skip: Some(10.0),
6 };
7 let moderators: GetModerators200Response = get_moderators(&configuration, params).await?;
8 let _moderators = moderators;
9 Ok(())
10}
11

send_invite Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
from_name String Yes

Response

Returns: FlagCommentPublic200Response

Example

send_invite Example
Copy Copy
1
2let params: SendInviteParams = SendInviteParams {
3 tenant_id: "acme-corp-tenant".to_string(),
4 id: "articles/2026/01/ai-news-12345".to_string(),
5 from_name: "Acme Newsroom".to_string(),
6 reply_to: Some("[email protected]".to_string()),
7 message: Some("You have been invited to moderate comments on this article.".to_string()),
8};
9
10let invite_response: FlagCommentPublic200Response = send_invite(&configuration, params).await?;
11

update_moderator Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_moderator_body models::UpdateModeratorBody Yes

Response

Returns: FlagCommentPublic200Response

Example

update_moderator Example
Copy Copy
1
2let params: UpdateModeratorParams = UpdateModeratorParams {
3 tenant_id: "acme-corp-tenant".to_string(),
4 id: "moderator-12345".to_string(),
5 update_moderator_body: models::UpdateModeratorBody {
6 username: "jane.doe".to_string(),
7 display_name: Some("Jane Doe".to_string()),
8 email: Some("[email protected]".to_string()),
9 is_active: Some(true),
10 permissions: Some(vec!["moderate_comments".to_string(), "view_reports".to_string()]),
11 },
12};
13let response: FlagCommentPublic200Response = update_moderator(&configuration, params).await?;
14

delete_notification_count Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: FlagCommentPublic200Response

Example

delete_notification_count Example
Copy Copy
1
2async fn run_delete_notification_count(configuration: &configuration::Configuration) -> Result<FlagCommentPublic200Response, Error> {
3 let params: DeleteNotificationCountParams = DeleteNotificationCountParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "notification-9f8b7a6".to_string(),
6 };
7 let response: FlagCommentPublic200Response = delete_notification_count(configuration, params).await?;
8 Ok(response)
9}
10

get_cached_notification_count Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetCachedNotificationCount200Response

Example

get_cached_notification_count Example
Copy Copy
1
2async fn run_get_cached_notification_count() -> Result<(), Error> {
3 let params: GetCachedNotificationCountParams = GetCachedNotificationCountParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "news/article-12345".to_string(),
6 };
7 let preferred_channel: Option<String> = Some("email".to_string());
8 let response: GetCachedNotificationCount200Response =
9 get_cached_notification_count(&configuration, params).await?;
10 Ok(())
11}
12

get_notification_count Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
user_id String No
url_id String No
from_comment_id String No
viewed bool No

Response

Returns: GetNotificationCount200Response

Example

get_notification_count Example
Copy Copy
1
2async fn example_get_notification_count() -> Result<GetNotificationCount200Response, Error> {
3 let params: GetNotificationCountParams = GetNotificationCountParams {
4 tenant_id: String::from("acme-corp-tenant"),
5 user_id: Some(String::from("user-12345")),
6 url_id: Some(String::from("news/article/2026/product-launch")),
7 from_comment_id: Some(String::from("cmt-000987")),
8 viewed: Some(false),
9 };
10 let response: GetNotificationCount200Response = get_notification_count(&configuration, params).await?;
11 Ok(response)
12}
13

get_notifications Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
user_id String No
url_id String No
from_comment_id String No
viewed bool No
skip f64 No

Response

Returns: GetNotifications200Response

Example

get_notifications Example
Copy Copy
1
2async fn fetch_notifications() -> Result<(), Error> {
3 let params: GetNotificationsParams = GetNotificationsParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 user_id: Some("user-1234".to_string()),
6 url_id: Some("news/politics/article-2026-01-12".to_string()),
7 from_comment_id: Some("cmt-98765".to_string()),
8 viewed: Some(false),
9 skip: Some(0.0),
10 };
11 let notifications: GetNotifications200Response = get_notifications(&configuration, params).await?;
12 let _ = notifications;
13 Ok(())
14}
15

update_notification Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_notification_body models::UpdateNotificationBody Yes
user_id String No

Response

Returns: FlagCommentPublic200Response

Example

update_notification Example
Copy Copy
1
2pub async fn run_update_notification(configuration: &configuration::Configuration) -> Result<FlagCommentPublic200Response, Error> {
3 let params: UpdateNotificationParams = UpdateNotificationParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "notification-67890".to_string(),
6 update_notification_body: models::UpdateNotificationBody {
7 title: Some("Flag Review Complete".to_string()),
8 message: Some("A moderator reviewed the flagged comment and marked it resolved.".to_string()),
9 resolved: Some(true),
10 channels: Some(vec!["email".to_string(), "in_app".to_string()]),
11 },
12 user_id: Some("moderator-007".to_string()),
13 };
14 let response: FlagCommentPublic200Response = update_notification(configuration, params).await?;
15 Ok(response)
16}
17

add_page Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_api_page_data models::CreateApiPageData Yes

Response

Returns: AddPageApiResponse

delete_page Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: DeletePageApiResponse

get_page_by_urlid Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes

Response

Returns: GetPageByUrlidApiResponse

get_pages Internal Link

Parameters

Name Type Required Description
tenant_id String Yes

Response

Returns: GetPagesApiResponse

patch_page Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_api_page_data models::UpdateApiPageData Yes

Response

Returns: PatchPageApiResponse

delete_pending_webhook_event Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: FlagCommentPublic200Response

Example

delete_pending_webhook_event Example
Copy Copy
1
2async fn run() -> Result<FlagCommentPublic200Response, Error> {
3 let event_id_opt: Option<String> = Some("webhook-event/news-article-2026-01-10-1234".to_string());
4 let event_id: String = event_id_opt.unwrap();
5 let params: DeletePendingWebhookEventParams = DeletePendingWebhookEventParams {
6 tenant_id: "acme-corp-tenant".to_string(),
7 id: event_id,
8 };
9 let response: FlagCommentPublic200Response = delete_pending_webhook_event(&configuration, params).await?;
10 Ok(response)
11}
12

get_pending_webhook_event_count Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String No
external_id String No
event_type String No
domain String No
attempt_count_gt f64 No

Response

Returns: GetPendingWebhookEventCount200Response

Example

get_pending_webhook_event_count Example
Copy Copy
1
2async fn example() -> Result<GetPendingWebhookEventCount200Response, Error> {
3 let params: GetPendingWebhookEventCountParams = GetPendingWebhookEventCountParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 comment_id: Some("cmt-12345".to_string()),
6 external_id: Some("news/article-98765".to_string()),
7 event_type: Some("comment.created".to_string()),
8 domain: Some("news.example.com".to_string()),
9 attempt_count_gt: Some(2.0),
10 };
11 let response: GetPendingWebhookEventCount200Response =
12 get_pending_webhook_event_count(&configuration, params).await?;
13 Ok(response)
14}
15

get_pending_webhook_events Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String No
external_id String No
event_type String No
domain String No
attempt_count_gt f64 No
skip f64 No

Response

Returns: GetPendingWebhookEvents200Response

Example

get_pending_webhook_events Example
Copy Copy
1
2let params: GetPendingWebhookEventsParams = GetPendingWebhookEventsParams {
3 tenant_id: "acme-corp-tenant".to_string(),
4 comment_id: Some("cmt-12345".to_string()),
5 external_id: Some("article-98765".to_string()),
6 event_type: Some("comment.create".to_string()),
7 domain: Some("news.example.com".to_string()),
8 attempt_count_gt: Some(1.0),
9 skip: Some(0.0),
10};
11
12let pending: GetPendingWebhookEvents200Response = get_pending_webhook_events(&configuration, params).await?;
13

create_question_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_question_config_body models::CreateQuestionConfigBody Yes

Response

Returns: CreateQuestionConfig200Response

Example

create_question_config Example
Copy Copy
1
2let params: CreateQuestionConfigParams = CreateQuestionConfigParams {
3 tenant_id: String::from("acme-corp-tenant"),
4 create_question_config_body: models::CreateQuestionConfigBody {
5 key: String::from("article-usefulness"),
6 label: Some(String::from("Was this article useful?")),
7 description: Some(String::from("Help us improve by rating this article.")),
8 required: Some(true),
9 rendering_type: Some(models::QuestionRenderingType::MultipleChoice),
10 custom_options: Some(vec![
11 models::QuestionConfigCustomOptionsInner { value: String::from("1"), label: Some(String::from("Not useful")) },
12 models::QuestionConfigCustomOptionsInner { value: String::from("3"), label: Some(String::from("Somewhat useful")) },
13 models::QuestionConfigCustomOptionsInner { value: String::from("5"), label: Some(String::from("Very useful")) },
14 ]),
15 enabled: Some(true),
16 },
17};
18let response: CreateQuestionConfig200Response = create_question_config(configuration, params).await?;
19

delete_question_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: FlagCommentPublic200Response

Example

delete_question_config Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: DeleteQuestionConfigParams = DeleteQuestionConfigParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "news/article-comments-config-2025".to_string(),
6 force: Some(true),
7 };
8 let response: FlagCommentPublic200Response = delete_question_config(&configuration, params).await?;
9 Ok(())
10}
11

get_question_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetQuestionConfig200Response

Example

get_question_config Example
Copy Copy
1
2async fn fetch_question_config() -> Result<(), Error> {
3 let tenant_env: Option<&str> = Some("prod");
4 let tenant_id: String = match tenant_env {
5 Some(env) => format!("acme-corp-tenant-{}", env),
6 None => "acme-corp-tenant".to_string(),
7 };
8 let params: GetQuestionConfigParams = GetQuestionConfigParams {
9 tenant_id,
10 id: "news/article/2026/01/12-politics".to_string(),
11 };
12 let response: GetQuestionConfig200Response = get_question_config(&configuration, params).await?;
13 let _status: ApiStatus = response.0;
14 Ok(())
15}
16

get_question_configs Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
skip f64 No

Response

Returns: GetQuestionConfigs200Response

Example

get_question_configs Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: GetQuestionConfigsParams = GetQuestionConfigsParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 skip: Some(10.0),
6 };
7 let response: GetQuestionConfigs200Response = get_question_configs(&configuration, params).await?;
8 let _cfgs: GetQuestionConfigs200Response = response;
9 Ok(())
10}
11

update_question_config Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_question_config_body models::UpdateQuestionConfigBody Yes

Response

Returns: FlagCommentPublic200Response

Example

update_question_config Example
Copy Copy
1
2async fn run_update() -> Result<(), Error> {
3 let params: UpdateQuestionConfigParams = UpdateQuestionConfigParams {
4 tenant_id: String::from("acme-corp-tenant"),
5 id: String::from("news/article-2026-01-12"),
6 update_question_config_body: models::UpdateQuestionConfigBody {
7 question_text: String::from("Did you find this reporting accurate?"),
8 required: Some(true),
9 rendering_type: Some(models::QuestionRenderingType::Inline),
10 options: Some(vec![
11 models::QuestionConfigCustomOptionsInner { id: String::from("opt-yes"), label: String::from("Yes"), value: String::from("yes") },
12 models::QuestionConfigCustomOptionsInner { id: String::from("opt-no"), label: String::from("No"), value: String::from("no") },
13 ]),
14 when_save: Some(models::QuestionWhenSave::OnSubmit),
15 },
16 };
17 let response: FlagCommentPublic200Response = update_question_config(&configuration, params).await?;
18 Ok(())
19}
20

create_question_result Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_question_result_body models::CreateQuestionResultBody Yes

Response

Returns: CreateQuestionResult200Response

Example

create_question_result Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: CreateQuestionResultParams = CreateQuestionResultParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 create_question_result_body: models::CreateQuestionResultBody {
6 question_id: "feedback-article-2026".to_string(),
7 comment_id: Some("cmt-2026-001".to_string()),
8 user_id: Some("reader-007".to_string()),
9 answer: "yes".to_string(),
10 score: Some(4),
11 metadata: Some(std::collections::HashMap::from([(
12 "path".to_string(),
13 "news/politics/2026-election".to_string(),
14 )])),
15 anonymous: Some(false),
16 submitted_at: Some("2026-01-12T09:15:00Z".to_string()),
17 },
18 };
19
20 let created: CreateQuestionResult200Response = create_question_result(&configuration, params).await?;
21 Ok(())
22}
23

delete_question_result Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: FlagCommentPublic200Response

Example

delete_question_result Example
Copy Copy
1
2async fn run_delete() -> Result<(), Error> {
3 let params: DeleteQuestionResultParams = DeleteQuestionResultParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "news/article/12345/question/67890".to_string(),
6 dry_run: Some(false),
7 request_id: Some("req-20260112-7a3b".to_string()),
8 };
9 let response: FlagCommentPublic200Response = delete_question_result(&configuration, params).await?;
10 Ok(())
11}
12

get_question_result Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetQuestionResult200Response

Example

get_question_result Example
Copy Copy
1
2async fn run() -> Result<GetQuestionResult200Response, Error> {
3 let include_metadata: Option<bool> = Some(true);
4 let params: GetQuestionResultParams = GetQuestionResultParams {
5 tenant_id: "acme-corp-tenant".to_string(),
6 id: "news/article/2026/12345".to_string(),
7 };
8 let response: GetQuestionResult200Response = get_question_result(&configuration, params).await?;
9 Ok(response)
10}
11

get_question_results Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
url_id String No
user_id String No
start_date String No
question_id String No
question_ids String No
skip f64 No

Response

Returns: GetQuestionResults200Response

Example

get_question_results Example
Copy Copy
1
2async fn example_get_question_results() -> Result<(), Error> {
3 let params = GetQuestionResultsParams {
4 tenant_id: String::from("acme-corp-tenant"),
5 url_id: Some(String::from("news/article/2026/01/12/breaking")),
6 user_id: Some(String::from("user-98765")),
7 start_date: Some(String::from("2025-12-01")),
8 question_id: Some(String::from("q-42")),
9 question_ids: Some(String::from("q-42,q-43")),
10 skip: Some(10.0),
11 };
12 let results: GetQuestionResults200Response = get_question_results(&configuration, params).await?;
13 Ok(())
14}
15

update_question_result Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_question_result_body models::UpdateQuestionResultBody Yes

Response

Returns: FlagCommentPublic200Response

Example

update_question_result Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let body: models::UpdateQuestionResultBody = models::UpdateQuestionResultBody {
4 question_id: "q-12345".to_string(),
5 result: true,
6 comment: Some("Marked by moderator after review".to_string()),
7 };
8
9 let params: UpdateQuestionResultParams = UpdateQuestionResultParams {
10 tenant_id: "acme-corp-tenant".to_string(),
11 id: "news/article/98765".to_string(),
12 update_question_result_body: body,
13 };
14
15 let response: FlagCommentPublic200Response = update_question_result(&configuration, params).await?;
16 println!("{:#?}", response);
17 Ok(())
18}
19

aggregate_question_results Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
question_id String No
question_ids Vec No
url_id String No
time_bucket models::AggregateTimeBucket No
start_date String No
force_recalculate bool No

Response

Returns: AggregateQuestionResults200Response

bulk_aggregate_question_results Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
bulk_aggregate_question_results_request models::BulkAggregateQuestionResultsRequest Yes
force_recalculate bool No

Response

Returns: BulkAggregateQuestionResults200Response

combine_comments_with_question_results Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
question_id String No
question_ids Vec No
url_id String No
start_date String No
force_recalculate bool No
min_value f64 No
max_value f64 No
limit f64 No

Response

Returns: CombineCommentsWithQuestionResults200Response

add_sso_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_apisso_user_data models::CreateApissoUserData Yes

Response

Returns: AddSsoUserApiResponse

delete_sso_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
delete_comments bool No
comment_delete_mode String No

Response

Returns: DeleteSsoUserApiResponse

get_sso_user_by_email Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
email String Yes

Response

Returns: GetSsoUserByEmailApiResponse

get_sso_user_by_id Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetSsoUserByIdApiResponse

get_sso_users Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
skip i32 No

Response

Returns: GetSsoUsers200Response

patch_sso_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_apisso_user_data models::UpdateApissoUserData Yes
update_comments bool No

Response

Returns: PatchSsoUserApiResponse

put_sso_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_apisso_user_data models::UpdateApissoUserData Yes
update_comments bool No

Response

Returns: PutSsoUserApiResponse

create_subscription Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_api_user_subscription_data models::CreateApiUserSubscriptionData Yes

Response

Returns: CreateSubscriptionApiResponse

delete_subscription Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
user_id String No

Response

Returns: DeleteSubscriptionApiResponse

get_subscriptions Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
user_id String No

Response

Returns: GetSubscriptionsApiResponse

get_tenant_daily_usages Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
year_number f64 No
month_number f64 No
day_number f64 No
skip f64 No

Response

Returns: GetTenantDailyUsages200Response

Example

get_tenant_daily_usages Example
Copy Copy
1
2async fn example() -> Result<GetTenantDailyUsages200Response, Error> {
3 let params: GetTenantDailyUsagesParams = GetTenantDailyUsagesParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 year_number: Some(2024.0),
6 month_number: Some(9.0),
7 day_number: Some(15.0),
8 skip: Some(0.0),
9 };
10 let response: GetTenantDailyUsages200Response = get_tenant_daily_usages(&configuration, params).await?;
11 Ok(response)
12}
13

create_tenant_package Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_tenant_package_body models::CreateTenantPackageBody Yes

Response

Returns: CreateTenantPackage200Response

Example

create_tenant_package Example
Copy Copy
1
2async fn run_create_package() -> Result<(), Error> {
3 let params: CreateTenantPackageParams = CreateTenantPackageParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 create_tenant_package_body: models::CreateTenantPackageBody {
6 name: "Acme News Package".to_string(),
7 description: Some("Moderated comments for Acme News articles".to_string()),
8 plan: Some("standard".to_string()),
9 allow_gifs: Some(true),
10 gif_rating: Some(GifRating::GeneralAudience),
11 image_content_profanity_level: Some(ImageContentProfanityLevel::Moderate),
12 sso_security_level: Some(SsoSecurityLevel::Strict),
13 custom_config: Some(CustomConfigParameters {
14 max_comment_length: Some(1000),
15 require_moderation: Some(true),
16 }),
17 },
18 };
19 let response: CreateTenantPackage200Response = create_tenant_package(&configuration, params).await?;
20 let _package: TenantPackage = response.0;
21 Ok(())
22}
23

delete_tenant_package Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: FlagCommentPublic200Response

Example

delete_tenant_package Example
Copy Copy
1
2let params: DeleteTenantPackageParams = DeleteTenantPackageParams {
3 tenant_id: "acme-corp-tenant".to_string(),
4 id: "pkg-news-comments-2025-01".to_string(),
5 cascade: Some(true),
6};
7let response: FlagCommentPublic200Response = delete_tenant_package(&configuration, params).await?;
8

get_tenant_package Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetTenantPackage200Response

Example

get_tenant_package Example
Copy Copy
1
2async fn example_get_tenant_package(configuration: &configuration::Configuration) -> Result<GetTenantPackage200Response, Error> {
3 let params: GetTenantPackageParams = GetTenantPackageParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "premium-plan".to_string(),
6 include_details: Some(true),
7 };
8 let package: GetTenantPackage200Response = get_tenant_package(configuration, params).await?;
9 Ok(package)
10}
11

get_tenant_packages Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
skip f64 No

Response

Returns: GetTenantPackages200Response

Example

get_tenant_packages Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: GetTenantPackagesParams = GetTenantPackagesParams {
4 tenant_id: String::from("acme-corp-tenant"),
5 skip: Some(20.0),
6 };
7 let _packages: GetTenantPackages200Response = get_tenant_packages(&configuration, params).await?;
8 Ok(())
9}
10

replace_tenant_package Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
replace_tenant_package_body models::ReplaceTenantPackageBody Yes

Response

Returns: FlagCommentPublic200Response

Example

replace_tenant_package Example
Copy Copy
1
2async fn run_replace_package() -> Result<FlagCommentPublic200Response, Error> {
3 let params: ReplaceTenantPackageParams = ReplaceTenantPackageParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "package-basic-2026".to_string(),
6 replace_tenant_package_body: models::ReplaceTenantPackageBody {
7 name: "Moderation Basic".to_string(),
8 description: Some("Standard moderation package for news sites".to_string()),
9 enabled: Some(true),
10 plan: Some("standard".to_string()),
11 custom_config_parameters: Some(models::CustomConfigParameters {
12 max_comment_length: Some(1000),
13 allow_images: Some(true),
14 }),
15 vote_style: Some(models::VoteStyle::Thumbs),
16 },
17 };
18 let response = replace_tenant_package(&configuration, params).await?;
19 Ok(response)
20}
21

update_tenant_package Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_tenant_package_body models::UpdateTenantPackageBody Yes

Response

Returns: FlagCommentPublic200Response

Example

update_tenant_package Example
Copy Copy
1
2async fn example_update_tenant_package() -> Result<FlagCommentPublic200Response, Error> {
3 let params: UpdateTenantPackageParams = UpdateTenantPackageParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "pro-plan-2026".to_string(),
6 update_tenant_package_body: models::UpdateTenantPackageBody {
7 name: Some("Pro Plan".to_string()),
8 description: Some("Priority support, custom branding, and advanced moderation tools".to_string()),
9 enabled: Some(true),
10 monthly_price_cents: Some(1999),
11 features: Some(vec![
12 "priority_support".to_string(),
13 "custom_branding".to_string(),
14 "advanced_moderation".to_string(),
15 ]),
16 },
17 };
18
19 let response: FlagCommentPublic200Response = update_tenant_package(&configuration, params).await?;
20 Ok(response)
21}
22

create_tenant_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_tenant_user_body models::CreateTenantUserBody Yes

Response

Returns: CreateTenantUser200Response

Example

create_tenant_user Example
Copy Copy
1
2let create_tenant_user_body: models::CreateTenantUserBody = models::CreateTenantUserBody {
3 email: "[email protected]".to_string(),
4 display_name: Some("Jane Doe".to_string()),
5 role: Some("moderator".to_string()),
6 external_id: Some("acme-12345".to_string()),
7 subscribed_to_digest: Some(false),
8};
9let params: CreateTenantUserParams = CreateTenantUserParams {
10 tenant_id: "acme-corp-tenant".to_string(),
11 create_tenant_user_body,
12};
13let response: CreateTenantUser200Response = create_tenant_user(&configuration, params).await?;
14

delete_tenant_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
delete_comments String No
comment_delete_mode String No

Response

Returns: FlagCommentPublic200Response

Example

delete_tenant_user Example
Copy Copy
1
2async fn run() -> Result<FlagCommentPublic200Response, Error> {
3 let params: DeleteTenantUserParams = DeleteTenantUserParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "user-12345".to_string(),
6 delete_comments: Some("true".to_string()),
7 comment_delete_mode: Some("cascade".to_string()),
8 };
9 let resp: FlagCommentPublic200Response = delete_tenant_user(&configuration, params).await?;
10 Ok(resp)
11}
12

get_tenant_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetTenantUser200Response

Example

get_tenant_user Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: GetTenantUserParams = GetTenantUserParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "user-7a3f2b".to_string(),
6 };
7 let include_related: Option<String> = Some("roles,preferences".to_string());
8 let response: GetTenantUser200Response = get_tenant_user(&configuration, params).await?;
9 Ok(())
10}
11

get_tenant_users Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
skip f64 No

Response

Returns: GetTenantUsers200Response

Example

get_tenant_users Example
Copy Copy
1
2async fn fetch_tenant_users() -> Result<GetTenantUsers200Response, Error> {
3 let params: GetTenantUsersParams = GetTenantUsersParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 skip: Some(10.0),
6 };
7 let response: GetTenantUsers200Response = get_tenant_users(&configuration, params).await?;
8 Ok(response)
9}
10

replace_tenant_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
replace_tenant_user_body models::ReplaceTenantUserBody Yes
update_comments String No

Response

Returns: FlagCommentPublic200Response

Example

replace_tenant_user Example
Copy Copy
1
2let cfg: &configuration::Configuration = &configuration;
3let replace_tenant_user_body: models::ReplaceTenantUserBody = models::ReplaceTenantUserBody {
4 external_id: Some("acct-834".to_string()),
5 email: Some("[email protected]".to_string()),
6 display_name: Some("Jane Doe".to_string()),
7 role: Some("moderator".to_string()),
8};
9let params: ReplaceTenantUserParams = ReplaceTenantUserParams {
10 tenant_id: "acme-corp-tenant".to_string(),
11 id: "user-834".to_string(),
12 replace_tenant_user_body,
13 update_comments: Some("true".to_string()),
14};
15let resp: FlagCommentPublic200Response = replace_tenant_user(cfg, params).await?;
16

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
redirect_url String No

Response

Returns: FlagCommentPublic200Response

Example

send_login_link Example
Copy Copy
1
2async fn example_send_login_link() -> Result<FlagCommentPublic200Response, Error> {
3 let params: SendLoginLinkParams = SendLoginLinkParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "[email protected]".to_string(),
6 redirect_url: Some("https://acme.example.com/dashboard".to_string()),
7 };
8 let response: FlagCommentPublic200Response = send_login_link(&configuration, params).await?;
9 Ok(response)
10}
11

update_tenant_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_tenant_user_body models::UpdateTenantUserBody Yes
update_comments String No

Response

Returns: FlagCommentPublic200Response

Example

update_tenant_user Example
Copy Copy
1
2async fn update_user_example(configuration: &configuration::Configuration) -> Result<(), Error> {
3 let params: UpdateTenantUserParams = UpdateTenantUserParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "user-78b2".to_string(),
6 update_tenant_user_body: models::UpdateTenantUserBody {
7 username: "jdoe".to_string(),
8 display_name: "John Doe".to_string(),
9 email: "[email protected]".to_string(),
10 roles: vec!["moderator".to_string()],
11 suspended: false,
12 },
13 update_comments: Some("Promoted to moderator for community moderation".to_string()),
14 };
15 let response: FlagCommentPublic200Response = update_tenant_user(configuration, params).await?;
16 println!("updated user response status: {:?}", response);
17 Ok(())
18}
19

create_tenant Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_tenant_body models::CreateTenantBody Yes

Response

Returns: CreateTenant200Response

Example

create_tenant Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: CreateTenantParams = CreateTenantParams {
4 tenant_id: "acme-news-tenant".to_string(),
5 create_tenant_body: models::CreateTenantBody {
6 name: "Acme News".to_string(),
7 domain: Some("news.acme.com".to_string()),
8 api_domain_configuration: Some(models::ApiDomainConfiguration {
9 domain: "api.news.acme.com".to_string(),
10 enforce_https: true,
11 }),
12 billing_info: Some(models::BillingInfo {
13 contact_email: "[email protected]".to_string(),
14 plan_id: "pro_monthly".to_string(),
15 }),
16 imported_site_type: Some(models::ImportedSiteType::Articles),
17 ..Default::default()
18 },
19 };
20
21 let created: CreateTenant200Response = create_tenant(&configuration, params).await?;
22 Ok(())
23}
24

delete_tenant Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
sure String No

Response

Returns: FlagCommentPublic200Response

Example

delete_tenant Example
Copy Copy
1
2async fn example_delete_tenant() -> Result<FlagCommentPublic200Response, Error> {
3 let params: DeleteTenantParams = DeleteTenantParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "news/article-12345".to_string(),
6 sure: Some("confirm".to_string()),
7 };
8 let response: FlagCommentPublic200Response = delete_tenant(&configuration, params).await?;
9 Ok(response)
10}
11

get_tenant Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetTenant200Response

Example

get_tenant Example
Copy Copy
1
2async fn run_get_tenant() -> Result<(), Error> {
3 let params: GetTenantParams = GetTenantParams {
4 tenant_id: String::from("acme-corp-tenant"),
5 id: String::from("news/article"),
6 };
7 let include_metadata: Option<bool> = Some(true);
8 let tenant_response: GetTenant200Response = get_tenant(&configuration, params).await?;
9 Ok(())
10}
11

get_tenants Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
meta String No
skip f64 No

Response

Returns: GetTenants200Response

Example

get_tenants Example
Copy Copy
1
2async fn run() -> Result<(), Error> {
3 let params: GetTenantsParams = GetTenantsParams {
4 tenant_id: String::from("acme-corp-tenant"),
5 meta: Some(String::from("include=domains,settings")),
6 skip: Some(10.0),
7 };
8 let response: GetTenants200Response = get_tenants(&configuration, params).await?;
9 Ok(())
10}
11

update_tenant Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_tenant_body models::UpdateTenantBody Yes

Response

Returns: FlagCommentPublic200Response

Example

update_tenant Example
Copy Copy
1
2async fn run_update_tenant() -> Result<FlagCommentPublic200Response, Error> {
3 let params: UpdateTenantParams = UpdateTenantParams {
4 tenant_id: "acme-corp-tenant".to_owned(),
5 id: "site-42".to_owned(),
6 update_tenant_body: models::UpdateTenantBody {
7 name: Some("Acme Corporation".to_string()),
8 default_site: Some("news/article".to_string()),
9 allowed_origins: Some(vec![
10 "https://www.acme.com".to_string(),
11 "https://blog.acme.com".to_string(),
12 ]),
13 invite_only: Some(false),
14 api_domain_configuration: Some(ApiDomainConfiguration {
15 domain: "comments.acme.com".to_string(),
16 secure: Some(true),
17 ..Default::default()
18 }),
19 ..Default::default()
20 },
21 };
22 let response: FlagCommentPublic200Response = update_tenant(&configuration, params).await?;
23 Ok(response)
24}
25

upload_image Internal Link

Upload and resize an image

Parameters

Name Type Required Description
tenant_id String Yes
file std::path::PathBuf Yes
size_preset models::SizePreset No
url_id String No

Response

Returns: UploadImageResponse

get_user_badge_progress_by_id Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetUserBadgeProgressById200Response

get_user_badge_progress_by_user_id Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
user_id String Yes

Response

Returns: GetUserBadgeProgressById200Response

get_user_badge_progress_list Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
user_id String No
limit f64 No
skip f64 No

Response

Returns: GetUserBadgeProgressList200Response

create_user_badge Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
create_user_badge_params models::CreateUserBadgeParams Yes

Response

Returns: CreateUserBadge200Response

delete_user_badge Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: UpdateUserBadge200Response

get_user_badge Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetUserBadge200Response

get_user_badges Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
user_id String No
badge_id String No
displayed_on_comments bool No
limit f64 No
skip f64 No

Response

Returns: GetUserBadges200Response

update_user_badge Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
update_user_badge_params models::UpdateUserBadgeParams Yes

Response

Returns: UpdateUserBadge200Response

get_user_notification_count Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
sso String No

Response

Returns: GetUserNotificationCount200Response

get_user_notifications Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
page_size i32 No
after_id String No
include_context bool No
after_created_at i64 No
unread_only bool No
dm_only bool No
no_dm bool No
include_translations bool No
sso String No

Response

Returns: GetUserNotifications200Response

reset_user_notification_count Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
sso String No

Response

Returns: ResetUserNotifications200Response

reset_user_notifications Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
after_id String No
after_created_at i64 No
unread_only bool No
dm_only bool No
no_dm bool No
sso String No

Response

Returns: ResetUserNotifications200Response

update_user_notification_comment_subscription_status Internal Link

Enable or disable notifications for a specific comment.

Parameters

Name Type Required Description
tenant_id String Yes
notification_id String Yes
opted_in_or_out String Yes
comment_id String Yes
sso String No

Response

Returns: UpdateUserNotificationStatus200Response

update_user_notification_page_subscription_status Internal Link

Enable or disable notifications for a page. When users are subscribed to a page, notifications are created for new root comments, and also

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes
url String Yes
page_title String Yes
subscribed_or_unsubscribed String Yes
sso String No

Response

Returns: UpdateUserNotificationStatus200Response

update_user_notification_status Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
notification_id String Yes
new_status String Yes
sso String No

Response

Returns: UpdateUserNotificationStatus200Response

get_user_presence_statuses Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
url_id_ws String Yes
user_ids String Yes

Response

Returns: GetUserPresenceStatuses200Response

search_users Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes
username_starts_with String Yes
mention_group_ids Vec No
sso String No

Response

Returns: SearchUsers200Response

get_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes

Response

Returns: GetUser200Response

Example

get_user Example
Copy Copy
1
2async fn run_get_user() -> Result<(), Error> {
3 let maybe_id: Option<String> = Some("user-6412".to_owned());
4 let params: GetUserParams = GetUserParams {
5 tenant_id: "acme-corp-tenant".to_owned(),
6 id: maybe_id.unwrap(),
7 };
8 let user_response: GetUser200Response = get_user(&configuration, params).await?;
9 println!("{:#?}", user_response);
10 Ok(())
11}
12

create_vote Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
comment_id String Yes
direction String Yes
user_id String No
anon_user_id String No

Response

Returns: VoteComment200Response

Example

create_vote Example
Copy Copy
1
2async fn run_vote() -> Result<VoteComment200Response, Error> {
3 let params: CreateVoteParams = CreateVoteParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 comment_id: "news/2026/01/12/local-election-12345".to_string(),
6 direction: "up".to_string(),
7 user_id: Some("user_9876".to_string()),
8 anon_user_id: None,
9 };
10 let response: VoteComment200Response = create_vote(&configuration, params).await?;
11 Ok(response)
12}
13

delete_vote Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
id String Yes
edit_key String No

Response

Returns: DeleteCommentVote200Response

Example

delete_vote Example
Copy Copy
1
2async fn run_delete_vote() -> Result<(), Error> {
3 let params: DeleteVoteParams = DeleteVoteParams {
4 tenant_id: "acme-corp-tenant".to_string(),
5 id: "news/article/67890/comment/12345".to_string(),
6 edit_key: Some("user-editkey-7f3b".to_string()),
7 };
8 let response: DeleteCommentVote200Response = delete_vote(&configuration, params).await?;
9 Ok(())
10}
11

get_votes Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes

Response

Returns: GetVotes200Response

Example

get_votes Example
Copy Copy
1
2async fn fetch_votes_example() -> Result<(), Error> {
3 let params: GetVotesParams = GetVotesParams {
4 tenant_id: String::from("acme-corp-tenant"),
5 url_id: String::from("news/article/2026-01-12/housing-market"),
6 };
7 let votes: GetVotes200Response = get_votes(&configuration, params).await?;
8 let _ = votes;
9 Ok(())
10}
11

get_votes_for_user Internal Link

Parameters

Name Type Required Description
tenant_id String Yes
url_id String Yes
user_id String No
anon_user_id String No

Response

Returns: GetVotesForUser200Response

Example

get_votes_for_user Example
Copy Copy
1
2async fn fetch_votes() -> Result<GetVotesForUser200Response, Error> {
3 let params = GetVotesForUserParams {
4 tenant_id: String::from("acme-corp-tenant"),
5 url_id: String::from("news/2026/01/12/breaking-tech"),
6 user_id: Some(String::from("user-78a3")),
7 anon_user_id: Some(String::from("anon-4f2b")),
8 };
9 let response: GetVotesForUser200Response = get_votes_for_user(&configuration, params).await?;
10 Ok(response)
11}
12

Need Help?

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

Contributing

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