---
title: "Queries Memo summaries for a workspace view"
method: POST
path: "/search/memo"
tags: ["search"]
---

# Queries Memo summaries for a workspace view

`POST /search/memo`

## Request body

- QueryRequestMemoColumns
  - `project_id` integer, required — Project the search runs in
  - `search_query` string — Full-text query
  - `filter` FilterMemoColumnsInput, required
    - `id` string, required — Unique id of this node within the filter tree
    - `items` union[], required — Child expressions and/or nested filter nodes
      - union
        - FilterExpressionMemoColumns
          - `id` string, required — Unique id of this expression within the filter tree
          - `column` union, required — The column to filter on: an enum member, or an int id referring to a project-metadata column
            - 'M_TITLE' | 'M_CONTENT' | 'M_USER_ID' | 'M_ATTACHED_OBJECT_TYPE' | 'M_ATTACHED_OBJECT_ID' | 'M_CREATED' | 'M_UPDATED' | 'M_FAVORITE'
            - integer
          - `operator` union, required — The comparison operator applied to the column
            - 'ID_EQUALS' | 'ID_NOT_EQUALS'
            - 'NUMBER_EQUALS' | 'NUMBER_NOT_EQUALS' | 'NUMBER_GT' | 'NUMBER_LT' | 'NUMBER_GTE' | 'NUMBER_LTE'
            - 'STRING_CONTAINS' | 'STRING_EQUALS' | 'STRING_NOT_EQUALS' | 'STRING_STARTS_WITH' | 'STRING_ENDS_WITH'
            - 'ID_LIST_CONTAINS' | 'ID_LIST_NOT_CONTAINS'
            - 'IDLR_CONTAINS' | 'IDLR_NOT_CONTAINS' | 'IDLR_CONTAINS_RECURSIVE'
            - 'LIST_CONTAINS' | 'LIST_NOT_CONTAINS'
            - 'DATE_EQUALS' | 'DATE_GT' | 'DATE_LT' | 'DATE_GTE' | 'DATE_LTE'
            - 'BOOLEAN_EQUALS' | 'BOOLEAN_NOT_EQUALS'
            - 'ATTACHED_OBJECT_TYPE_EQUALS' | 'ATTACHED_OBJECT_TYPE_NOT_EQUALS' — Filters on the attached object's type (a single AttachedObjectType value).
            - 'ATTACHED_OBJECT_EQUALS' | 'ATTACHED_OBJECT_NOT_EQUALS' — Compares an attached object as a (type, id) pair. The column is a tuple ``(type_expr, id_expr)`` and the value is a two-element list ``[type, id]`` (e.g. ``["tag", "5"]``). Filtering by the raw id alone is meaningless because ids collide across entity types (tag 5, code 5, sdoc 5 are different objects), so the type is always part of the comparison.
            - 'SPAN_ANNOTATION_CONTAINS' | 'SPAN_ANNOTATION_NOT_CONTAINS' — Filters by a single span annotation, given as a [code_id, span_text] pair. The column is an aggregated 2-D array of ``[code_id, span_text]`` string pairs (e.g. ``subquery_dict.SPAN_ANNOTATIONS``), so membership is tested by checking whether the pair is an element of that array.
          - `value` union, required — The value the column is compared against
            - boolean
            - string
            - integer
            - string[]
            - array[]
              - …
        - FilterMemoColumnsInput — recursive
    - `logic_operator` 'or' | 'and', required — This tells our filter how to combine multiple column expressions.
  - `sorts` SortMemoColumns[] — Ordered sort expressions; empty means the entity's default sort
    - `column` union, required — The column to sort by: an enum member, or an int id referring to a project-metadata column
      - 'M_TITLE' | 'M_CONTENT' | 'M_USER_ID' | 'M_ATTACHED_OBJECT_TYPE' | 'M_ATTACHED_OBJECT_ID' | 'M_CREATED' | 'M_UPDATED' | 'M_FAVORITE'
      - integer
    - `direction` 'asc' | 'desc', required — Sort direction. `apply` appends `.nulls_last()` so rows missing a value sink to the bottom regardless of direction.
  - `group_by` GroupConfigMemoColumns
    - `field` 'M_TITLE' | 'M_CONTENT' | 'M_USER_ID' | 'M_ATTACHED_OBJECT_TYPE' | 'M_ATTACHED_OBJECT_ID' | 'M_CREATED' | 'M_UPDATED' | 'M_FAVORITE', required
    - `date_granularity` 'day' | 'week' | 'month' | 'year' — Bucket size used when grouping a date column.
  - `group_key` string, nullable — Key of the single group to drill into (requires `group_by`). Both must be set or both omitted.
  - `page_number` integer — Zero-based page index
  - `page_size` integer — Number of rows per page

## Response `200`

Successful Response

- PageMemoRead
  - `items` MemoRead[], required — The rows on the requested page
    - `title` string, required — Title of the Memo
    - `icon` string, nullable — Optional Unicode emoji used as the Memo icon
    - `content` string, required — Textual content of the Memo
    - `content_json` string, required — JSON content of the Memo
    - `id` integer, required — ID of the Memo
    - `is_favorite` boolean — Whether the requesting user favorited the Memo
    - `user_id` integer, required — User the Memo belongs to
    - `project_id` integer, required — Project the Memo belongs to
    - `created` string, date-time, required — Created timestamp of the Memo
    - `updated` string, date-time, required — Updated timestamp of the Memo
    - `attached_object_id` integer, required — ID of the Object the Memo is attached to
    - `attached_object_type` 'source_document' | 'code' | 'sentence_annotation' | 'span_annotation' | 'span_group' | 'bbox_annotation' | 'project' | 'tag', required
  - `total_results` integer, required — Total number of matching rows (unpaginated), used for pagination

## Other responses

- `422` — Validation Error

## Changes

- **2026-08-25** `cadd559ceccf` — 3 breaking, 3 info
  - the response property `items/items/icon` became optional for the status `200`
  - the response property `items/items/is_favorite` became optional for the status `200`
  - removed the required property `items/items/content_excerpt` from the response with the `200` status
  - the `is_favorite` response's property default value `false` was added for the status `200`
  - …2 more
- **2026-08-20** `28b2f0e8bc01` — 5 breaking, 5 warning, 20 info
  - added the new required request property `project_id`
  - removed `#/components/schemas/Filter_MemoColumns_` from the `filter/items/items/` request property `anyOf` list
  - removed the enum value `M_STARRED` of the request property `filter/items/items/anyOf[subschema #1: FilterExpression[MemoColumns]]/column/anyOf[subschema #1: MemoColumns]/`
  - removed the enum value `M_STARRED` of the request property `sorts/items/column/anyOf[subschema #1: MemoColumns]/`
  - …26 more
- **2026-07-20** `01c6f5cdc4f3` — 1 info
  - added `#/components/schemas/IDListRecursiveOperator` to the `filter/items/items/anyOf[subschema #1: FilterExpression[MemoColumns]]/operator` request property `anyOf` list
- **2026-07-15** `bd1187f3520e` — 1 breaking
  - removed `#/components/schemas/IDListRecursiveOperator` from the `filter/items/items/anyOf[subschema #1: FilterExpression[MemoColumns]]/operator` request property `anyOf` list
- …earlier changes not shown

[Full history](https://skmtc.dev/uhh-lt/apis/discourse-analysis-tool-suite-api/changes/search/memo/post.md)

---

[API](https://skmtc.dev/uhh-lt/apis/discourse-analysis-tool-suite-api.md) · [All operations](https://skmtc.dev/uhh-lt/apis/discourse-analysis-tool-suite-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/uhh-lt/discourse-analysis-tool-suite-api/revisions/a84d27ef7a0d/schema)
