success, statusCode, message and data — so a caller reads ok first and touches data only when it is set.
Method names follow the route segments, which is why some read as a name and a verb at once —
captchaConfigGET, socialLinkedinPublish. That is the generator being literal, not a mistake.How to read this page
Each resource opens with a table of its methods and the route each one calls, then a section per method with the full parameter list. Every parameter says where it goes (path, query or body), its type, and whether it is required.
Resources
AI— AI automationAIConversation— AI conversationArticle— ArticlesAuthor— AuthorsCategory— CategoriesFormSubmission— Form submissionsForm— FormsLanguage— LanguagesReport— ReportsSubcategory— SubcategoriesTag— Tags
AI
Summarize, translate, SEO, repurpose, generate and social publishing.
GenerateContentAsync
POST /ai/generateContent
Generate full content (title, slug, summary, body).
Multi-step pipeline with timeouts & fallbacks. body is returned as a stringified HTML-wrapper like <div>{"body":"<div>…</div>"}</div>.
GenerateImageAsync
POST /ai/generateImage
Generate a featured image.
Either prompt or articleId must be provided. When articleId is given and prompt is omitted, the prompt is derived from the article’s title, summary, tags and a content excerpt. setAsThumbnail stores the generated image as the article thumbnail.
GenerateTitleAsync
POST /ai/generateTitle
Generate a title from text.
OptimizeArticleAsync
POST /ai/optimizeArticle
Optimize an article for SEO and save the result.
Optimizes each target language of the article and persists the patched fields plus the recomputed seo.perLanguage metrics. When languages is omitted, every language present on the article is optimized. title, summary and content default to true; tags defaults to false.
OptimizeArticleStreamAsync
POST /ai/optimizeArticle/stream
Optimize article SEO with streaming progress (Server-Sent Events).
RepurposeAsync
POST /ai/repurpose
Repurpose article/text for social platforms.
RepurposeStreamAsync
POST /ai/repurpose/stream
Repurpose article/text for social platforms with SSE.
RepurposeTemplateGETAsync
GET /ai/repurpose/template
Get the tenant repurpose template.
Returns the stored template for the tenant, creating it with the service defaults (en / professional / medium and per-platform tone, length, CTA, hashtag style and max hashtag counts) on first read.
RepurposeTemplatePUTAsync
PUT /ai/repurpose/template
Update the tenant repurpose template.
Deep-merges the supplied values into the stored template. Omitted keys keep their current values, and unknown keys are stripped before validation. The per-platform sub-objects all have identical fields.
SeoOptimizeAsync
POST /ai/seoOptimize
SEO optimize text (content + metaDescription).
SeoOptimizeStreamAsync
POST /ai/seoOptimize/stream
SEO optimize text with streaming response (Server-Sent Events).
SocialConnectionsAsync
GET /ai/social/connections
List the tenant’s social publishing connections.
Returns every stored connection for the tenant. Only linkedin, telegram and twitter are supported. Secrets are stored encrypted and are always masked in the response (abcd...wxyz).
SocialLinkedinConnectAsync
PUT /ai/social/linkedin/connect
Connect or replace the tenant’s LinkedIn account.
Upserts the LinkedIn connection. The access token is encrypted at rest and masked in the response. Re-calling this endpoint replaces the stored credentials and marks the connection active.
SocialLinkedinPublishAsync
POST /ai/social/linkedin/publish
Publish a text post to the connected LinkedIn account.
Requires an active LinkedIn connection for the tenant. Posts a UGC share with lifecycleState: PUBLISHED and no media. visibility defaults to PUBLIC. Upstream LinkedIn failures are surfaced as 502.
SocialTelegramConnectAsync
PUT /ai/social/telegram/connect
Connect or replace the tenant’s Telegram bot.
Upserts the Telegram connection. The bot token is encrypted at rest and masked in the response. Re-calling this endpoint replaces the stored credentials and marks the connection active.
SocialTelegramPublishAsync
POST /ai/social/telegram/publish
Send a message to the connected Telegram chat.
Requires an active Telegram connection for the tenant. Sends via the bot’s sendMessage to the stored chatId. parseMode defaults to HTML. Upstream Telegram failures are surfaced as 502.
SocialTwitterConnectAsync
PUT /ai/social/twitter/connect
Connect or replace the tenant’s Twitter/X bearer token.
Upserts the Twitter connection. The bearer token is encrypted at rest and masked in the response. Re-calling this endpoint replaces the stored credential and marks the connection active.
SocialTwitterPublishAsync
POST /ai/social/twitter/publish
Post a tweet to the connected Twitter/X account.
Requires an active Twitter connection for the tenant. Posts to the Twitter v2 tweets endpoint using the stored bearer token. Upstream Twitter failures are surfaced as 502.
SummarizeArticleStreamAsync
POST /ai/summarizeArticle/stream
Summarize an article by ID with streaming response.
SummarizeAsync
POST /ai/summarize
Summarize text.
SummarizeStreamAsync
POST /ai/summarize/stream
Summarize text with streaming response.
TranslateArticleAsync
POST /ai/translateArticle
Translate an article into one or more languages.
Requires articleId, a non-empty targetLanguages array and at least one selected field (all fields default to false, so a request without fields is rejected). The source language is detected from the article unless sourceLanguage is given. If a target language already has a translation for a selected multilingual field and sourceLanguage is omitted, the request fails with 409 instead of overwriting.
TranslateArticleStreamAsync
POST /ai/translateArticle/stream
Translate article with streaming progress (Server-Sent Events).
TranslateAsync
POST /ai/translate
Translate text.
TranslateFormAsync
POST /ai/translateForm
Translate a form into one or more languages.
Translates a form’s multilingual text, section titles/descriptions, field labels/placeholders and option labels. The source language is detected from the form unless sourceLanguage is provided. Every flag in fields defaults to true, so an empty fields object translates the whole form. A target language that already holds a translation and no explicit sourceLanguage fails with 400 rather than overwriting.
TranslateStreamAsync
POST /ai/translate/stream
Translate text with streaming response (Server-Sent Events).
AIConversation
Multi-turn article drafting that keeps context between calls.
ConversationContinueAsync
POST /ai/conversation/continue
Continue conversation with answers.
ConversationConversationIdAsync
GET /ai/conversation/{conversationId}
Get conversation state.
ConversationGenerateAsync
POST /ai/conversation/generate
Continue conversation and generate article (combined).
ConversationGenerateStreamAsync
POST /ai/conversation/generate/stream
Continue and generate article with streaming (SSE).
ConversationRegenerateAsync
POST /ai/conversation/regenerate
Regenerate article with SEO improvements.
ConversationStartAsync
POST /ai/conversation/start
Start a new article generation conversation.
Article
Create, read, publish, archive and delete articles, plus comments, reactions and engagement settings.
AdvanceSearchAsync
GET /articles/advanceSearch
Advanced search articles.
Combine filters (category, subCategory, author, tags, keyword) with pagination & sorting. Always restricted to published, non-private, non-deleted articles.
ArchiveAsync
PUT /articles/archive
Archive article.
Archives an article by soft-deleting it (sets isDeleted=true). The record is retained and the publish state is left unchanged.
CommentsCommentIdDELETEAsync
DELETE /articles/comments/{commentId}
Delete comment.
Soft-deletes the comment (sets isDeleted), removes its reactions, and detaches it from the article. A caller may only delete their own comment; a privileged role (SUPER_USER, MANAGER, CHIEF_EDITOR, PUBLISHER, EDITOR) may delete any comment in the tenant.
CommentsCommentIdPATCHAsync
PATCH /articles/comments/{commentId}
Update comment.
Partial update — send content, status, or both (at least one is required). A caller may only edit their own comment; changing status additionally requires a privileged role (SUPER_USER, MANAGER, CHIEF_EDITOR, PUBLISHER, EDITOR) and is rejected with 403 otherwise.
CommentsCommentIdReactionDELETEAsync
DELETE /articles/comments/{commentId}/reaction
Remove reaction from comment.
Deletes the caller’s own reaction for an approved comment. Removing a reaction that does not exist still succeeds, and the returned totals reflect the comment after refresh.
CommentsCommentIdReactionPOSTAsync
POST /articles/comments/{commentId}/reaction
Set reaction on comment.
Creates or updates the caller’s reaction for an approved comment. One reaction per actor (authenticated user, or guest fingerprint) is kept, so submitting like after dislike switches it. Rejected with 403 when the parent article, its category, or its sub-category disables reactions.
CommentsCommentIdReactionSummaryAsync
GET /articles/comments/{commentId}/reactionSummary
Get comment reaction summary.
Returns the stored like/dislike totals for an approved comment. userReaction is the caller’s own reaction (like, dislike, or null when the caller has none or cannot be identified as a user or guest).
CommentsGetAllAsync
GET /articles/comments/getAll
Get all comments for tenant (moderation).
Paginated moderation feed of every non-deleted comment in the tenant, newest first, including pending and rejected ones. Each row is joined with its article, the article’s categories, and the comment author. All filters are optional and combine together.
CreateAsync
POST /articles/create
Create article.
DeleteIdAsync
DELETE /articles/delete/{id}
Delete article.
EngagementSettingsGETAsync
GET /articles/engagementSettings
Get tenant engagement settings (public).
Returns the effective engagement configuration for your tenant. When the tenant has no stored record, the built-in defaults are returned. Article and category/sub-category overrides are applied separately and are not reflected here.
EngagementSettingsPUTAsync
PUT /articles/engagementSettings
Update tenant engagement settings.
Upserts the engagement configuration for your tenant. Every field is optional — omitted fields keep their current value, and a tenant with no record yet starts from the built-in defaults. Booleans and numbers are validated server-side; out-of-range values are rejected with 400. The authenticated user id is stored as updatedBy.
GetAllAsync
GET /articles/getAll
Get all articles (public).
Returns a paginated list. Public view defaults to published & active & not private/deleted. Use filters to refine results.
GetByAuthorIdAsync
GET /articles/getByAuthorId/{authorId}
Get articles by author id (public).
GetByCategoryIdAsync
GET /articles/getByCategoryId/{categoryId}
Get articles by category id (public).
GetByCategorySlugAsync
GET /articles/getByCategorySlug/{slug}
Get articles by category slug (public).
GetByIdAsync
GET /articles/getById/{id}
Get article by id (public).
Multilingual fields are localized from the lang or accept-language request header. Omit the headers to receive every configured language.
GetBySlugAsync
GET /articles/getBySlug/{slug}
Get article by slug (public).
Multilingual fields are localized from the lang request header. Omit the header to receive every configured language.
GetBySubCategoryIdAsync
GET /articles/getBySubCategoryId/{subCategoryId}
Get articles by subcategory id (public).
GetBySubCategorySlugAsync
GET /articles/getBySubCategorySlug/{slug}
Get articles by subcategory slug (public).
GetByTagAsync
GET /articles/getByTag/{tag}
Get articles by tag (public).
IdCommentsGETAsync
GET /articles/{id}/comments
Get comments for article (public).
Paginated list of approved, non-deleted comments for the article, each with the author (firstName, lastName, avatar) and the caller’s own reaction. When comments are disabled for the article, category, or sub-category, an empty list is returned with 200 instead of an error.
IdCommentsPOSTAsync
POST /articles/{id}/comments
Create comment on article.
Adds a comment to the article. The stored status is approved or pending depending on the tenant/article autoApproveComments setting. Pass parentId to reply to an existing comment on the same article; the parent must exist and not be deleted. Rejected with 403 when the article, its category, or its sub-category disables comments.
IdReactionDELETEAsync
DELETE /articles/{id}/reaction
Remove reaction from article.
Deletes the caller’s own reaction for the article. Removing a reaction that does not exist still succeeds, and the returned totals reflect the article after refresh. Rejected with 403 when the article, its category, or its sub-category disables reactions.
IdReactionPOSTAsync
POST /articles/{id}/reaction
Set reaction on article.
Creates or updates the caller’s reaction for the article. One reaction per actor (authenticated user, or guest fingerprint) is kept, so submitting like after dislike switches it. Reactions are rejected with 403 when the article, its category, or its sub-category disables reactions.
IdReactionSummaryAsync
GET /articles/{id}/reactionSummary
Get article reaction summary.
Returns the stored like/dislike totals for the article. userReaction is the caller’s own reaction (like, dislike, or null when the caller has none or cannot be identified as a user or guest).
SearchAsync
GET /articles/search
Search articles.
SeoAnalysisIdAsync
GET /articles/seoAnalysis/{id}
Get SEO analysis for article.
Returns comprehensive SEO analysis including keyword analysis, link/image metrics, readability scores, and technical SEO checks. Supports filtering by language via query parameter.
UpdateAsync
PUT /articles/update
Update article.
Partial update. Provide only fields you want to change, plus the id.
Author
The people articles are attributed to.
CreateAsync
POST /authors/create
Create author.
DeleteIdAsync
DELETE /authors/delete/{id}
Delete author.
GetAllAsync
GET /authors/getAll
Get all authors (public).
GetByIdAsync
GET /authors/getById/{id}
Get author by id (public).
GetBySlugAsync
GET /authors/getBySlug/{slug}
Get author by slug (public).
UpdateAsync
PUT /authors/update
Update author.
Partial update. Provide only fields to change, plus id.
Category
The top level of the content tree.
CreateAsync
POST /categories/create
Create category.
DeleteIdAsync
DELETE /categories/delete/{id}
Delete category.
Soft-deletes the category and cascades isDeleted onto its sub-categories.
GetAllAsync
GET /categories/getAll
Get all categories (public).
GetByIdAsync
GET /categories/getById/{id}
Get category by id (public).
GetBySlugAsync
GET /categories/getBySlug/{slug}
Get category by slug (public).
UpdateAsync
PUT /categories/update
Update category.
Partial update. Provide only fields to change, plus id.
FormSubmission
Submitted answers and the relations between them and other records.
GetSubmissionByIdAsync
GET /forms/getSubmissionById/{id}
Get submission by id.
Requires auth.
IdGetAllSubmissionsAsync
GET /forms/{id}/getAllSubmissions
Get submissions by form id.
Returns submissions for the given form with optional filters and pagination. Requires auth. Callers whose role is WRITER are restricted to forms they created.
IdInternalSubmitAsync
POST /forms/{id}/internal-submit
Submit a form from the backend (internal).
Server-to-server submission endpoint. Shares its implementation with the public /forms/{id}/submit route but runs on the internal channel, which changes three things: - the form is not restricted to formType: public — internal forms are reachable; - CAPTCHA is not verified, even when the form has captcha.enabled=true; - the stored status is taken from the request body’s status instead of being forced to pending. Required-field, disabled-field and type validation still run, as do field relation checks. The caller must present the form.read permission, and the tenant’s seat limit for form submissions is enforced; a tenant at its limit is rejected with 426. “Internal” describes the calling party (a trusted backend), not a separate authentication scheme.
IdSubmitAsync
POST /forms/{id}/submit
Submit a form (public).
Public submission endpoint. Backend enforces required fields, disabled fields, and type-based validation. For “select”, “multi-select”, and “multi-checkbox”, values must be taken from form options[].value. If a field has relation, submitted values must be related submission ids from the target form. one-to-one and many-to-one accept a single id string. one-to-many and many-to-many accept an array of id strings. Requires the gateway (publicRoutes) and a valid the service status header (enforceTenantStatus, otherwise 400/423/403). checkLimits("formSubmissions") applies the tenant’s seat limit and rejects with 426 once the limit is reached. Status is always stored as pending on this route; only /forms/{id}/internal-submit honours a body status.
SubmissionDeleteIdAsync
DELETE /forms/submission/delete/{id}
Delete submission.
Soft-deletes a submission by its ID — the record is retained with isDeleted: true and excluded from all list queries.
SubmissionIdRelationsAsync
GET /forms/submission/{id}/relations
Get submission relations.
Returns resolved forward relations and reverse relations for a submission. Optional fieldName query narrows forward relations to one field.
SubmissionIdRelationsFieldNameConnectAsync
POST /forms/submission/{id}/relations/{fieldName}/connect
Connect relation.
Connects one related submission to a relation field. For single-value relations, the existing value is replaced.
SubmissionIdRelationsFieldNameDisconnectAsync
POST /forms/submission/{id}/relations/{fieldName}/disconnect
Disconnect relation.
Removes one related submission from a relation field. For single-value relations, the field is cleared. For multi-value relations, omit relatedSubmissionId to clear all.
SubmissionIdRelationsFieldNameReorderAsync
POST /forms/submission/{id}/relations/{fieldName}/reorder
Reorder multi relation.
Reorders the ids of a multi-value relation field. The provided array must contain exactly the same ids currently connected. Only one-to-many and many-to-many fields support reorder.
SubmissionUpdateIdAsync
PUT /forms/submission/update/{id}
Update submission (partial).
Update submission values and/or status. Values are validated against the form definition (same rules as on submission). At least one of values or status must be present. status is the stored numeric enum, not a name: 0 = pending, 1 = approved, 2 = rejected. Changing status is restricted to SUPER_USER, MANAGER, CHIEF_EDITOR, PUBLISHER and EDITOR; any other role receives 403.
SubmissionsGetAllAsync
GET /forms/submissions/getAll
Get all submissions for the tenant.
Lists submissions across every form in the calling tenant (not scoped to a single form), newest first, with the owning form’s title, slug and type joined onto each row. Requires the form.submission.read permission. Callers whose role is WRITER (5) are automatically restricted to submissions on forms they created; a WRITER whose identity cannot be resolved is rejected with 401. Soft-deleted submissions are always excluded.
SubmissionsRelationsBackfillAsync
POST /forms/submissions/relations/backfill
Backfill normalized submission relations.
Recomputes and persists the normalized relations array for existing submissions. Optionally scope to one form.
Form
Form definitions, captcha configuration, and both submit paths.
CaptchaConfigGETAsync
GET /forms/captcha/config
Get tenant captcha config.
Returns tenant captcha config metadata (masked secret), never returns raw secret.
CaptchaConfigPUTAsync
PUT /forms/captcha/config
Upsert tenant captcha config.
Stores or updates CAPTCHA provider settings for the current tenant. Secret key is stored encrypted server-side.
CaptchaConfigSecretAsync
PATCH /forms/captcha/config/secret
Rotate tenant captcha secret.
Rotates only the CAPTCHA secret key for the current tenant, keeping other config fields unchanged.
CreateAsync
POST /forms/create
Create form.
Creates a new form with multilingual text fields, sections, and fields. Keys inside multilingual objects must be valid language codes configured in your system (e.g., “en”, “fa”, …).
DeleteAsync
DELETE /forms/delete
Delete form.
Deletes a form by ID supplied in the request body.
GetAllAsync
GET /forms/getAll
Get all forms.
Returns a paginated list. Requires auth. Soft-deleted forms are always excluded; forms are returned regardless of isActive unless the status filter is used. Each row carries a submissionsCount.
GetByIdAsync
GET /forms/getById/{id}
Get form by id.
Requires auth.
GetBySlugAsync
GET /forms/getBySlug/{slug}
Get form by slug.
Public endpoint to fetch a form definition by its slug.
GetNextByIdAsync
GET /forms/getNextById/{id}
Get next form by current form id.
Public endpoint for multi-step flows. Returns nextForm=null if no next form is configured.
UpdateAsync
PUT /forms/update
Update form.
Partial update. Provide only the fields to change. ID is required in the body.
Language
The locales a multilingual field can be written in.
CreateAsync
POST /languages/create
Create a language.
Creates a new language record for the current tenant.
Request body (validated): - code (string, required): Short language code. Must be exactly 2 characters (e.g., “en”, “es”, “fa”). - name (string, required): Human-readable language name. Must be a non-empty string (e.g., “English”).
Uniqueness: - The pair (code, tenant) must be unique. If a language with the same code already exists for the current tenant, the request fails with 409 Conflict.
Defaults: - Newly created records are active (isActive=true) and not deleted (isDeleted=false).
DeleteIdAsync
DELETE /languages/delete/{id}
Delete a language (soft delete).
Marks a language as deleted for the current tenant.
Path parameters: - id (string, required): The language identifier to delete. Must be a 24-character hexadecimal string.
Behavior: - This is a soft delete (the record remains but is flagged as deleted). - Subsequent reads (e.g., list, getById) do not return deleted records.
GetAllAsync
GET /languages/getAll
List languages (paginated).
Returns a paginated list of languages for the current tenant.
Query parameters: - page (integer, optional): 1-based page index. Must be >= 1. Defaults to 1. - limit (integer, optional): Items per page. Must be >= 1. Defaults to 10.
Notes: - Only non-deleted records are returned. - Results are tenant-scoped. - page and limit are used only to compute the pagination block; the returned languages array is not currently sliced by them.
GetByIdAsync
GET /languages/getById
Get a language by id.
Fetch a single language for the current tenant using its identifier.
Request body: - id (string, required): The language identifier. Must be a 24-character hexadecimal string. Note: despite the endpoint using GET, the identifier is read from the request body, not from the query string.
Behavior: - Returns 404 if the identifier does not match a language owned by the current tenant.
UpdateAsync
PUT /languages/update
Update a language.
Updates an existing language for the current tenant.
The payload is read from the bodyData property of the request body, i.e. the validated fields below are nested inside a bodyData object.
Request body (validated): - id (string, required): The language identifier to update. - code (string, required): Updated language code. Must be exactly 2 characters. - name (string, required): Updated language name. Must be a non-empty string.
Notes: - If id does not belong to an existing language in the current tenant, returns 404. - Validation failures (including a missing field) return 409.
Report
Statistics, charts and dashboard configuration.
AiContentImpactAsync
GET /reports/aiContentImpact
Compare AI-generated and human-authored content performance.
AiUsageBreakdownAsync
GET /reports/aiUsageBreakdown
Get AI usage breakdown report for the authenticated tenant.
CategoryPerformanceAsync
GET /reports/categoryPerformance
Get category performance report for the authenticated tenant.
ChartContentTrendAsync
GET /reports/chart/contentTrend
Get content trend chart for the authenticated tenant.
ChartEngagementTrendAsync
GET /reports/chart/engagementTrend
Get engagement trend chart for the authenticated tenant.
ChartSubmissionFunnelAsync
GET /reports/chart/submissionFunnel
Get submission funnel chart for the authenticated tenant.
CommentOverviewAsync
GET /reports/commentOverview
Get comment and moderation overview for the authenticated tenant.
ContentHealthAsync
GET /reports/contentHealth
Get content health report for the authenticated tenant.
ContentOverviewAsync
GET /reports/contentOverview
Get content overview report for the authenticated tenant.
DashboardConfigGETAsync
GET /reports/dashboardConfig
Get the dashboard layout preference for the authenticated user.
Returns the stored dashboard configuration for the tenant and user resolved from the request context. If the user has never saved a configuration, the built-in default is returned instead of a 404.
DashboardConfigPUTAsync
PUT /reports/dashboardConfig
Save the dashboard layout preference for the authenticated user.
Upserts the dashboard configuration for the tenant and user resolved from the request context and returns the normalized result. The whole body is optional — an empty body, a body with no slots, or an empty slots array all fall back to the built-in default configuration. The response is always the fully normalized config, so unknown widget types, spans and ranges are replaced by their defaults. The authenticated user id is stored as updatedBy.
FormsOverviewAsync
GET /reports/formsOverview
Get forms overview report for the authenticated tenant.
GetAllAuthorsStatisticsAsync
GET /reports/getAllAuthorsStatistics
Get statistics of all authors (aggregated).
GetAllUsersStatisticsAsync
GET /reports/getAllUsersStatistics
Get statistics of all users (aggregated).
GetAuthorStatisticsAuthorIdAsync
GET /reports/getAuthorStatistics/{authorId}
Get statistics for a specific author.
GetStatisticsAsync
GET /reports/getStatistics
Get tenant usage statistics for the authenticated tenant.
GetUserStatisticsUserIdAsync
GET /reports/getUserStatistics/{userId}
Get statistics for a specific user (secure).
PeriodComparisonAsync
GET /reports/periodComparison
Compare the current report period against the previous equal-length period.
PublishingPerformanceAsync
GET /reports/publishingPerformance
Get publishing performance report for the authenticated tenant.
SubmissionsOverviewAsync
GET /reports/submissionsOverview
Get submissions overview report for the authenticated tenant.
TopArticlesAsync
GET /reports/topArticles
Get top articles report for the authenticated tenant.
Subcategory
The optional second level under a category.
CreateAsync
POST /subcategories/create
Create subCategory.
DeleteIdAsync
DELETE /subcategories/delete/{id}
Delete subCategory.
GetAllAsync
GET /subcategories/getAll
Get all subCategories (public).
GetByCategoryIdAsync
GET /subcategories/getByCategoryId/{categoryId}
Get subCategories by parent category id (public).
GetByIdAsync
GET /subcategories/getById/{id}
Get subCategory by id (public).
GetBySlugAsync
GET /subcategories/getBySlug/{slug}
Get subCategory by slug (public).
UpdateAsync
PUT /subcategories/update
Update subCategory.
Partial update. Provide only fields to change, plus id.
Tag
Free-form labels attached to articles.
CreateAsync
POST /tags/create
Create a new tag.
Manually create a new tag
GetAllAsync
GET /tags/getAll
Get all tags for current tenant.
Returns a paginated list of all tags for your tenant. No user authentication is required.
SearchAsync
GET /tags/search
Search tags.
Case-insensitive partial name match against the tags of your tenant. No user authentication is required.

