Faqs
Aggregate
Aggregated option counts for the FAQ filter panel. field_keys: category (0 =
uncategorized), cluster_label, status. Counts respect the same status/search/filters
conditions as the list itself.
GET
/api/{tenant:minlength(2)}/v{version:apiVersion}/faqs/aggregate
- Authorisation
- Minimum role: USER
Request arguments
Request body example
Response
- Status
- 200 (OK)
- Type
- DTO_faq[]
- Wrapper
- DTO_response_wrap_get_many
- Other statuses
- 400 (BadRequest), 401 (Unauthorized), 403 (Forbidden), 429 (TooManyRequests)
Response body example
DTO_faq_filter
| Name | Type | ReadOnly | Description |
| status | faq_status (nullable) | | Status |
| cluster_id | Int32 (nullable) | | Filter by the cluster that generated these FAQs (local/decoupled int ID) |
| cluster_label_id | Int32 (nullable) | | Filter by cluster label (local/decoupled int ID) |
| category_id | Int32 (nullable) | | Filter by knowledge base category (local/decoupled int ID). 0 = only uncategorized items;
omit for no category filtering |
| include_conflicts | Boolean | | When true, each FAQ with a conflict will include the conflicting FAQ data in the response |
| only_conflicts | Boolean | | When true, only return FAQs that have at least one conflict |
| filters | String[] | | Filter-panel conditions, each structured field_key:OPERATOR:value1|value2.
Supported field keys: category (0 = uncategorized), cluster_label, status.
Supported operators: MATCH_ANY, EXCLUDE, MISSING (category/cluster_label only). |
| search | String | | Search |
| sort_order | ENUM sort_order | | Sort order |
| take | Int32 | | Take |
| page | Int32 | | Page |
DTO_faq
| Name | Type | ReadOnly | Description |
| cluster | DTO_reference | | Cluster |
| cluster_label | DTO_reference | | Cluster label |
| category | DTO_reference | | Category |
| conflicting_faq_ids | Int32[] | | Conflicting faq ids |
| conflicting_faqs | DTO_faq[] | | Conflicting faqs |
| sys_attachments | DTO_reference_attachment[] | ReadOnly | Files (inline images + attachments) referenced by sys_content_rich, with download URLs |
| id | Int32 | | Id |
| status | ENUM faq_status | | Status |
| question | String | | Question |
| answer | String | | The answer as plain text - always populated. When the answer has rich formatting this
is the server-extracted text variant (what search, embeddings and the AI consume) |
| sys_content_rich | DTO_rich_text | | The answer as rich text (tiptap). Null while the answer is plain text only |
| embeddings_status_enum_id | Int32 | | Embeddings status enum id |
| votes_up | Int32 | ReadOnly | Portal feedback votes on the item, maintained server-side |
| votes_down | Int32 | ReadOnly | Votes down |
| view_count | Int64 | ReadOnly | Views of the item's public portal page (deduplicated per visitor) |
| updated_at | DateTime (nullable) | | Updated at |
| chat_bot_only | Boolean | | Kept for the AI chat-bot corpus only: hidden from the public FAQ portal's
navigation, search and sitemap |
| sys_translation_status | Dictionary`2 | ReadOnly | Per-language state of the stored portal translations, keyed by lowercase language
code: true = up to date, false = outdated (retranslated after the next sweep).
A configured portal language missing from the map has no stored translation yet.
Null when the item has no stored translations. |
DTO_reference
| Name | Type | ReadOnly | Description |
| id | Int32 | | The id of the reference |
| label | Object | ReadOnly | Name/Label from referenced object. |
DTO_faq
| Name | Type | ReadOnly | Description |
| cluster | DTO_reference | | Cluster |
| cluster_label | DTO_reference | | Cluster label |
| category | DTO_reference | | Category |
| conflicting_faq_ids | Int32[] | | Conflicting faq ids |
| conflicting_faqs | DTO_faq[] | | Conflicting faqs |
| sys_attachments | DTO_reference_attachment[] | ReadOnly | Files (inline images + attachments) referenced by sys_content_rich, with download URLs |
| id | Int32 | | Id |
| status | ENUM faq_status | | Status |
| question | String | | Question |
| answer | String | | The answer as plain text - always populated. When the answer has rich formatting this
is the server-extracted text variant (what search, embeddings and the AI consume) |
| sys_content_rich | DTO_rich_text | | The answer as rich text (tiptap). Null while the answer is plain text only |
| embeddings_status_enum_id | Int32 | | Embeddings status enum id |
| votes_up | Int32 | ReadOnly | Portal feedback votes on the item, maintained server-side |
| votes_down | Int32 | ReadOnly | Votes down |
| view_count | Int64 | ReadOnly | Views of the item's public portal page (deduplicated per visitor) |
| updated_at | DateTime (nullable) | | Updated at |
| chat_bot_only | Boolean | | Kept for the AI chat-bot corpus only: hidden from the public FAQ portal's
navigation, search and sitemap |
| sys_translation_status | Dictionary`2 | ReadOnly | Per-language state of the stored portal translations, keyed by lowercase language
code: true = up to date, false = outdated (retranslated after the next sweep).
A configured portal language missing from the map has no stored translation yet.
Null when the item has no stored translations. |
DTO_reference_attachment
| Name | Type | ReadOnly | Description |
| size_kb | Int32 | ReadOnly | Size kb |
| status | ENUM attachment_status | ReadOnly | Status |
| status_message | String | ReadOnly | Status message |
| download_url | String | ReadOnly | Download url |
| id | Int32 | | Id |
| label | Object | ReadOnly | Label |
DTO_rich_text
| Name | Type | ReadOnly | Description |
| plain_preview | String | ReadOnly | Plain preview |
| html | String | | Html |
| editorjs | DTO_editorjs | | Editorjs |
| tiptap | DTO_tiptap | | Tiptap |
| read_minutes | Int32 | | Read minutes |
DTO_editorjs
| Name | Type | ReadOnly | Description |
| time | Int64 | | Time |
| version | String | | Version |
| blocks | DTO_editorjs_block[] | | Blocks |
DTO_editorjs_block
| Name | Type | ReadOnly | Description |
| id | String | | Id |
| type | String | | Type |
| data | Object | | Data |
DTO_tiptap_attrs
| Name | Type | ReadOnly | Description |
| textAlign | String | | Textalign |
| level | Int32 (nullable) | | Level |
| checked | Boolean (nullable) | | Checked |
| id | Int32 (nullable) | | Id |
| alt | String | | Alt |
| title | String | | Title |
| width | String | | Width |
| wrapperStyle | String | | Wrapperstyle |
| containerStyle | String | | Containerstyle |
| files | DTO_tiptap_file_ref[] | | Files |
| href | String | | Href |
| target | String | | Target |
| colspan | Int32 (nullable) | | Colspan |
| rowspan | Int32 (nullable) | | Rowspan |
| color | String | | Color |
| text | String | | Text |
| name | String | | For emoji |
| native | String | | For emoji |
DTO_tiptap_file_ref
| Name | Type | ReadOnly | Description |
| id | Int32 | | Id |
| label | String | | Label |
ENUM faq_status
| Value | Name | Description |
| 0 | UNKNOWN | UNKNOWN |
| 1 | SUGGESTED | SUGGESTED |
| 11 | MANUALLY_CREATED | MANUALLY_CREATED |
| 21 | APPROVED_AS_IS | APPROVED_AS_IS |
| 22 | APPROVED_WITH_EDITS | APPROVED_WITH_EDITS |
| 31 | DECLINED | DECLINED |
| 32 | DUPLICATED_IGNORE | DUPLICATED_IGNORE |
| 41 | REMOVED | REMOVED |
ENUM attachment_status
| Value | Name | Description |
| 0 | UNKNOWN | UNKNOWN |
| 1 | UNAVAILABLE | UNAVAILABLE, processing in progress |
| 2 | OK | OK |
| 3 | WARNING | WARNING |
| 4 | ERROR | ERROR |
ENUM sort_order
| Value | Name | Description |
| 0 | ASC | ASC |
| 1 | DESC | DESC |
Generated Aug 22, 2026 09:36