openapi: 3.1.0
info:
  title: Yandex Wiki API as wrapped by ycli (unofficial)
  version: v1
  description: 'Derived from ycli''s own code, not published by Yandex: the requests ycli sends to Yandex
    Wiki and the models it parses the replies into. It is only as complete as ycli; README''s "Against
    the published API" lists where the two differ. Generated by scripts/gen_openapi.py; do not edit by
    hand.'
servers:
- url: https://api.wiki.yandex.net/v1
security:
- oauth: []
  organization: []
paths:
  /grids:
    post:
      operationId: grids_create
      tags:
      - grids
      x-ycli-operations:
      - grids.create
      x-ycli-effect: write
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridCreate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Grid'
  /grids/{grid_id}:
    delete:
      operationId: grids_delete
      tags:
      - grids
      x-ycli-operations:
      - grids.delete
      x-ycli-effect: destructive
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ycli reads no body.
    get:
      operationId: grids_get
      tags:
      - grids
      x-ycli-operations:
      - grids.get
      x-ycli-effect: read
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      - name: fields
        in: query
        schema:
          type: string
      - name: filter
        in: query
        schema:
          type: string
      - name: only_cols
        in: query
        schema:
          type: string
      - name: only_rows
        in: query
        schema:
          type: string
      - name: revision
        in: query
        schema:
          type: string
      - name: sort
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Grid'
    post:
      operationId: grids_update
      tags:
      - grids
      x-ycli-operations:
      - grids.update
      x-ycli-effect: idempotent_write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridUpdate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionResult'
  /grids/{grid_id}/cells:
    post:
      operationId: grids_update_cells
      tags:
      - grids
      x-ycli-operations:
      - grids.update_cells
      x-ycli-effect: idempotent_write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CellsUpdate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CellsUpdateResult'
  /grids/{grid_id}/clone:
    post:
      operationId: grids_clone
      tags:
      - grids
      x-ycli-operations:
      - grids.clone
      x-ycli-effect: write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridClone'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncOperation'
  /grids/{grid_id}/column/{column_slug}:
    post:
      operationId: grids_update_column
      tags:
      - grids
      x-ycli-operations:
      - grids.update_column
      x-ycli-effect: idempotent_write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      - name: column_slug
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ColumnUpdate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ColumnUpdateResult'
  /grids/{grid_id}/columns:
    delete:
      operationId: grids_remove_columns
      tags:
      - grids
      x-ycli-operations:
      - grids.remove_columns
      x-ycli-effect: destructive
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ColumnsRemove'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionResult'
    post:
      operationId: grids_add_columns
      tags:
      - grids
      x-ycli-operations:
      - grids.add_columns
      x-ycli-effect: write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ColumnsAdd'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionResult'
  /grids/{grid_id}/columns/move:
    post:
      operationId: grids_move_columns
      tags:
      - grids
      x-ycli-operations:
      - grids.move_columns
      x-ycli-effect: write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ColumnsMove'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionResult'
  /grids/{grid_id}/columns/suggest:
    post:
      operationId: grids_suggest_column
      tags:
      - grids
      x-ycli-operations:
      - grids.suggest_column
      x-ycli-effect: read
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ColumnSuggest'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ColumnSuggestion'
  /grids/{grid_id}/rows:
    delete:
      operationId: grids_remove_rows
      tags:
      - grids
      x-ycli-operations:
      - grids.remove_rows
      x-ycli-effect: destructive
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RowsRemove'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionResult'
    post:
      operationId: grids_add_rows
      tags:
      - grids
      x-ycli-operations:
      - grids.add_rows
      x-ycli-effect: write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RowsAdd'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RowsAddResult'
  /grids/{grid_id}/rows/move:
    post:
      operationId: grids_move_rows
      tags:
      - grids
      x-ycli-operations:
      - grids.move_rows
      x-ycli-effect: write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RowsMove'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionResult'
  /grids/{grid_id}/rows/{row_id}:
    post:
      operationId: grids_update_row
      tags:
      - grids
      x-ycli-operations:
      - grids.update_row
      x-ycli-effect: idempotent_write
      parameters:
      - name: grid_id
        in: path
        required: true
        schema:
          type: string
      - name: row_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RowUpdate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RowUpdateResult'
  /operations/clone/{task_id}:
    get:
      operationId: operations_clone_get
      tags:
      - operations
      x-ycli-operations:
      - operations.clone_get
      x-ycli-effect: read
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CloneOperationStatus'
  /operations/clone_inline_grid/{task_id}:
    get:
      operationId: operations_gridclone_get
      tags:
      - operations
      x-ycli-operations:
      - operations.gridclone_get
      x-ycli-effect: read
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GridCloneOperationStatus'
  /operations/move/{task_id}:
    get:
      operationId: operations_move_get
      tags:
      - operations
      x-ycli-operations:
      - operations.move_get
      x-ycli-effect: read
      parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MoveOperationStatus'
  /pages:
    get:
      operationId: pages_get
      tags:
      - pages
      x-ycli-operations:
      - pages.get
      x-ycli-effect: read
      parameters:
      - name: fields
        in: query
        schema:
          type: string
      - name: raise_on_redirect
        in: query
        schema:
          type: string
      - name: revision_id
        in: query
        schema:
          type: integer
      - name: slug
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageDetails'
    post:
      operationId: pages_create
      tags:
      - pages
      x-ycli-operations:
      - pages.create
      x-ycli-effect: write
      parameters:
      - name: fields
        in: query
        schema:
          type: string
      - name: is_silent
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageCreate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageDetails'
  /pages/attachments/download_by_url:
    get:
      operationId: attachments_download_by_url
      tags:
      - attachments
      x-ycli-operations:
      - attachments.download_by_url
      x-ycli-effect: read
      parameters:
      - name: download
        in: query
        schema:
          type: string
      - name: url
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Raw bytes.
          content:
            application/octet-stream: {}
  /pages/descendants:
    get:
      operationId: pages_descendants
      tags:
      - pages
      x-ycli-operations:
      - pages.descendants
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: actuality
        in: query
        schema:
          type: string
      - name: cursor
        in: query
        schema: {}
      - name: include_self
        in: query
        schema:
          type: string
      - name: page_size
        in: query
        schema:
          type: integer
      - name: show_all
        in: query
        schema:
          type: string
      - name: slug
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageRefPage'
  /pages/move:
    post:
      operationId: pages_move
      tags:
      - pages
      x-ycli-operations:
      - pages.move
      x-ycli-effect: write
      parameters:
      - name: dry_run
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageMove'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncOperation'
  /pages/{page_id}:
    delete:
      operationId: pages_delete
      tags:
      - pages
      x-ycli-operations:
      - pages.delete
      x-ycli-effect: destructive
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: recursive
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageDeleteResult'
    get:
      operationId: pages_get_by_id
      tags:
      - pages
      x-ycli-operations:
      - pages.get_by_id
      x-ycli-effect: read
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: fields
        in: query
        schema:
          type: string
      - name: raise_on_redirect
        in: query
        schema:
          type: string
      - name: revision_id
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageDetails'
    post:
      operationId: pages_update
      tags:
      - pages
      x-ycli-operations:
      - pages.update
      x-ycli-effect: idempotent_write
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: allow_merge
        in: query
        schema:
          type: string
      - name: fields
        in: query
        schema:
          type: string
      - name: is_silent
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageUpdate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageDetails'
  /pages/{page_id}/access:
    delete:
      operationId: access_clear
      tags:
      - access
      x-ycli-operations:
      - access.clear
      x-ycli-effect: destructive
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: prevent_selflock
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: ycli reads no body.
    post:
      operationId: access_create
      tags:
      - access
      x-ycli-operations:
      - access.create
      x-ycli-effect: write
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageAccessCreate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageAccess'
  /pages/{page_id}/access/{access_id}:
    delete:
      operationId: access_delete
      tags:
      - access
      x-ycli-operations:
      - access.delete
      x-ycli-effect: destructive
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: access_id
        in: path
        required: true
        schema:
          type: string
      - name: prevent_selflock
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: ycli reads no body.
    post:
      operationId: access_update
      tags:
      - access
      x-ycli-operations:
      - access.update
      x-ycli-effect: idempotent_write
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: access_id
        in: path
        required: true
        schema:
          type: string
      - name: prevent_selflock
        in: query
        schema:
          type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageAccessUpdate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageAccess'
  /pages/{page_id}/append-content:
    post:
      operationId: pages_append_content
      tags:
      - pages
      x-ycli-operations:
      - pages.append_content
      x-ycli-effect: write
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: fields
        in: query
        schema:
          type: string
      - name: is_silent
        in: query
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageAppendContent'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageDetails'
  /pages/{page_id}/attachments:
    get:
      operationId: attachments_list
      tags:
      - attachments
      x-ycli-operations:
      - attachments.list
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: cursor
        in: query
        schema: {}
      - name: order_by
        in: query
        schema:
          type: string
      - name: order_direction
        in: query
        schema:
          type: string
      - name: page_size
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttachmentPage'
    post:
      operationId: attachments_attach
      tags:
      - attachments
      x-ycli-operations:
      - attachments.attach
      - attachments.upload
      x-ycli-effect: write
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AttachmentCreate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttachResponse'
  /pages/{page_id}/attachments/{file_id}:
    delete:
      operationId: attachments_delete
      tags:
      - attachments
      x-ycli-operations:
      - attachments.delete
      x-ycli-effect: destructive
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: file_id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: ycli reads no body.
    get:
      operationId: attachments_get
      tags:
      - attachments
      x-ycli-operations:
      - attachments.get
      x-ycli-effect: read
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: file_id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttachedFile'
  /pages/{page_id}/attachments/{file_id}/download:
    get:
      operationId: attachments_download
      tags:
      - attachments
      x-ycli-operations:
      - attachments.download
      x-ycli-effect: read
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: file_id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Raw bytes.
          content:
            application/octet-stream: {}
  /pages/{page_id}/attachments/{file_id}/preview:
    get:
      operationId: attachments_preview
      tags:
      - attachments
      x-ycli-operations:
      - attachments.preview
      x-ycli-effect: read
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: file_id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Raw bytes.
          content:
            application/octet-stream: {}
  /pages/{page_id}/backlinks:
    get:
      operationId: pages_backlinks
      tags:
      - pages
      x-ycli-operations:
      - pages.backlinks
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: cursor
        in: query
        schema: {}
      - name: for_cluster
        in: query
        schema:
          type: string
      - name: page_size
        in: query
        schema:
          type: integer
      - name: show_all
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageRefPage'
  /pages/{page_id}/clone:
    post:
      operationId: pages_clone
      tags:
      - pages
      x-ycli-operations:
      - pages.clone
      x-ycli-effect: write
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PageClone'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncOperation'
  /pages/{page_id}/comments:
    get:
      operationId: comments_thread
      tags:
      - comments
      x-ycli-operations:
      - comments.list
      - comments.thread
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: cursor
        in: query
        schema: {}
      - name: order_by
        in: query
        schema:
          type: string
      - name: order_direction
        in: query
        schema:
          type: string
      - name: page_size
        in: query
        schema:
          type: integer
      - name: status_filter
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentPage'
    post:
      operationId: comments_create
      tags:
      - comments
      x-ycli-operations:
      - comments.create
      x-ycli-effect: write
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommentCreate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentCreated'
  /pages/{page_id}/comments/{comment_id}:
    delete:
      operationId: comments_delete
      tags:
      - comments
      x-ycli-operations:
      - comments.delete
      x-ycli-effect: destructive
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: comment_id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentDeleteResult'
  /pages/{page_id}/comments/{comment_id}/thread:
    get:
      operationId: comments_thread_get
      tags:
      - comments
      x-ycli-operations:
      - comments.thread_get
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: comment_id
        in: path
        required: true
        schema:
          type: integer
      - name: cursor
        in: query
        schema: {}
      - name: page_size
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommentPage'
  /pages/{page_id}/descendants:
    get:
      operationId: pages_descendants_by_id
      tags:
      - pages
      x-ycli-operations:
      - pages.descendants_by_id
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: actuality
        in: query
        schema:
          type: string
      - name: cursor
        in: query
        schema: {}
      - name: include_self
        in: query
        schema:
          type: string
      - name: page_size
        in: query
        schema:
          type: integer
      - name: show_all
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageRefPage'
  /pages/{page_id}/grids:
    get:
      operationId: pages_grids
      tags:
      - pages
      x-ycli-operations:
      - pages.grids
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: cursor
        in: query
        schema: {}
      - name: order_by
        in: query
        schema:
          type: string
      - name: order_direction
        in: query
        schema:
          type: string
      - name: page_size
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GridRefPage'
  /pages/{page_id}/resources:
    get:
      operationId: resources_list
      tags:
      - resources
      x-ycli-operations:
      - resources.list
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: cursor
        in: query
        schema: {}
      - name: order_by
        in: query
        schema:
          type: string
      - name: order_direction
        in: query
        schema:
          type: string
      - name: page_size
        in: query
        schema:
          type: integer
      - name: q
        in: query
        schema:
          type: string
      - name: types
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceItemPage'
  /pages/{page_id}/revisions:
    get:
      operationId: pages_revisions
      tags:
      - pages
      x-ycli-operations:
      - pages.revisions
      x-ycli-effect: read
      x-ycli-pagination: CursorPagination
      parameters:
      - name: page_id
        in: path
        required: true
        schema:
          type: integer
      - name: cursor
        in: query
        schema: {}
      - name: ids
        in: query
        schema:
          type: string
      - name: page_size
        in: query
        schema:
          type: integer
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageRevisionPage'
  /recovery_tokens/{token}/recover:
    post:
      operationId: recovery_restore
      tags:
      - recovery
      x-ycli-operations:
      - recovery.restore
      x-ycli-effect: write
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecoveredPage'
  /search:
    post:
      operationId: search_query
      tags:
      - search
      x-ycli-operations:
      - search.query
      x-ycli-effect: read
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequest'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchPage'
  /upload_sessions:
    post:
      operationId: uploadsessions_create
      tags:
      - uploadsessions
      x-ycli-operations:
      - attachments.upload
      - uploadsessions.create
      x-ycli-effect: write
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadSessionCreate'
        x-ycli-body: typed
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadSession'
  /upload_sessions/abort_active_uploads:
    post:
      operationId: uploadsessions_abort_all
      tags:
      - uploadsessions
      x-ycli-operations:
      - uploadsessions.abort_all
      x-ycli-effect: destructive
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AbortActiveUploadsResult'
  /upload_sessions/{session_id}:
    get:
      operationId: uploadsessions_get
      tags:
      - uploadsessions
      x-ycli-operations:
      - uploadsessions.get
      x-ycli-effect: read
      parameters:
      - name: session_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadSession'
  /upload_sessions/{session_id}/abort:
    post:
      operationId: uploadsessions_abort
      tags:
      - uploadsessions
      x-ycli-operations:
      - uploadsessions.abort
      x-ycli-effect: destructive
      parameters:
      - name: session_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadSession'
  /upload_sessions/{session_id}/finish:
    post:
      operationId: uploadsessions_finish
      tags:
      - uploadsessions
      x-ycli-operations:
      - attachments.upload
      - uploadsessions.finish
      x-ycli-effect: write
      parameters:
      - name: session_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadSession'
  /upload_sessions/{session_id}/upload_part:
    put:
      operationId: uploadsessions_upload_part
      tags:
      - uploadsessions
      x-ycli-operations:
      - attachments.upload
      - uploadsessions.upload_part
      x-ycli-effect: idempotent_write
      parameters:
      - name: session_id
        in: path
        required: true
        schema:
          type: string
      - name: part_number
        in: query
        schema:
          type: integer
      requestBody:
        content:
          application/octet-stream: {}
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadSession'
  /users/me:
    get:
      operationId: me_get
      tags:
      - me
      x-ycli-operations:
      - me.get
      x-ycli-effect: read
      responses:
        '200':
          description: Parsed by ycli.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Me'
components:
  securitySchemes:
    oauth:
      type: apiKey
      in: header
      name: Authorization
      description: '`OAuth <token>`'
    organization:
      type: apiKey
      in: header
      name: X-Org-Id
  schemas:
    AbortActiveUploadsResult:
      description: "Result of ``uploadsessions.abort_all`` (``POST /upload_sessions/abort_active_uploads``).\n\
        \nExamples:\n    >>> AbortActiveUploadsResult.model_validate({\"status\": \"ok\"}).status\n  \
        \  'ok'"
      properties:
        status:
          default: ok
          description: Literal ``ok`` once every active session has been aborted.
          title: Status
          type: string
      title: AbortActiveUploadsResult
      type: object
    AccessGroup:
      description: "A group in an access entry.\n\nExamples:\n    >>> AccessGroup.model_validate({\"name\"\
        : \"Docs\", \"type\": \"group\"}).name\n    'Docs'"
      properties:
        id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Group id (dir_id outside, staff_id inside).
          title: Id
        identity:
          anyOf:
          - $ref: '#/components/schemas/GroupIdentity'
          - type: 'null'
          default: null
          description: Directory and id.
        name:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Name of the group.
          title: Name
        type:
          anyOf:
          - enum:
            - wiki
            - service
            - servicerole
            - group
            - department
            type: string
          - type: 'null'
          default: null
          description: Kind of group.
          title: Type
        metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          default: null
          description: Directory-specific details (url, dir_id, externals_count).
          title: Metadata
        members_count:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Number of members.
          title: Members Count
      title: AccessGroup
      type: object
    AsyncOperation:
      description: "Reply of a call that works in the background (a page clone or move, a grid clone).\n\
        \nIt names the started ``operation`` and a ``status_url``; poll the ``operations`` resource\n\
        with ``operation.id`` until it reaches a terminal state.\n\nExamples:\n    >>> AsyncOperation.model_validate({\"\
        operation\": {\"type\": \"move\", \"id\": \"t1\"}}).operation.id\n    't1'"
      properties:
        operation:
          anyOf:
          - $ref: '#/components/schemas/OperationIdentity'
          - type: 'null'
          default: null
          description: The started operation (``id`` is the task to poll).
        status_url:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: URL that reports the operation's progress.
          title: Status Url
        dry_run:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether this was a validation-only dry run.
          title: Dry Run
      title: AsyncOperation
      type: object
    AttachResponse:
      description: "Envelope for ``POST /pages/{id}/attachments`` — ``{results: [AttachedFile, …]}``.\n\
        \nInternal parse type used by ``AttachmentsClient._attach``; callers get the flat\n``ItemList[AttachedFile]``.\n\
        \nExamples:\n    >>> AttachResponse.model_validate({\"results\": [{\"id\": 7}]}).results[0].id\n\
        \    7"
      properties:
        results:
          items:
            $ref: '#/components/schemas/AttachedFile'
          title: Results
          type: array
      title: AttachResponse
      type: object
    AttachedFile:
      description: "A file just attached to a page (``results[]`` item of ``POST /pages/{id}/attachments``).\n\
        \nRicher than the list-surface :class:`Attachment`: carries the new ``id``, ``download_url``\n\
        and virus-``check_status`` the attach response returns.\n\nExamples:\n    >>> AttachedFile.model_validate({\"\
        id\": 7, \"name\": \"d.png\"}).id\n    7"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Numeric id of the new attachment.
          title: Id
        name:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: File name of the attachment.
          title: Name
        is_downloadable:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the file's bytes can be downloaded.
          title: Is Downloadable
        download_url:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: URL from which the attachment's bytes can be downloaded.
          title: Download Url
        size:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Human-readable size of the attachment.
          title: Size
        description:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Optional description of the file.
          title: Description
        user:
          anyOf:
          - $ref: '#/components/schemas/User'
          - type: 'null'
          default: null
          description: Who attached the file.
        mimetype:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: MIME type of the attachment.
          title: Mimetype
        has_preview:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the attachment has a rendered preview.
          title: Has Preview
        check_status:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Virus-scan status — one of check, ready, deleted, infected, error.
          title: Check Status
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 timestamp when the file was attached.
          title: Created At
      title: AttachedFile
      type: object
    Attachment:
      description: "A page attachment descriptor (``/pages/{id}/attachments`` item).\n\nThe list payload\
        \ reports ``size`` as a human-readable string (e.g. ``\"0.00\"``) and names the\nMIME type ``mimetype``\
        \ — matching the sibling :class:`AttachedFile` and the ``resources``\nlisting.\n\nExamples:\n\
        \    >>> Attachment.model_validate(\n    ...     {\"id\": 7, \"name\": \"d.png\", \"size\": \"\
        0.00\", \"mimetype\": \"image/png\"}\n    ... ).id\n    7"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Numeric id of the attachment (the ``file_id`` other calls take).
          title: Id
        name:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Name
        size:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Size
        mimetype:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Mimetype
      title: Attachment
      type: object
    AttachmentCreate:
      description: "Typed request body for ``attachments.attach`` (``POST /pages/{id}/attachments``).\n\
        \nAttaches file(s) already uploaded via the upload-session pipeline; each entry is a\nfinished\
        \ session's ``session_id``.\n\nExamples:\n    >>> AttachmentCreate(upload_sessions=[\"1e5c…\"\
        ]).upload_sessions\n    ['1e5c…']"
      properties:
        upload_sessions:
          description: UUID4 ids of finished upload sessions whose files to attach to the page.
          items:
            type: string
          title: Upload Sessions
          type: array
      required:
      - upload_sessions
      title: AttachmentCreate
      type: object
    AttachmentPage:
      properties:
        results:
          description: Items on this page of the listing.
          items:
            $ref: '#/components/schemas/Attachment'
          title: Results
          type: array
        next_cursor:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cursor for the next page; ``null`` when the listing is exhausted.
          title: Next Cursor
      title: CursorPage[Attachment]
      type: object
    Breadcrumb:
      description: "One step of the path from the root to a page (``breadcrumbs`` item).\n\nExamples:\n\
        \    >>> Breadcrumb.model_validate({\"title\": \"Team\", \"slug\": \"team\", \"page_exists\":\
        \ True}).slug\n    'team'"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Numeric id of the page at this step.
          title: Id
        title:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Title of the page at this step.
          title: Title
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Slug of the page at this step.
          title: Slug
        page_exists:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether a page exists at this slug (a gap in the tree if not).
          title: Page Exists
      title: Breadcrumb
      type: object
    CellSchema:
      description: "A single updated cell in a ``cells update`` reply (``row_id``, ``column_slug``, ``value``).\n\
        \nExamples:\n    >>> CellSchema.model_validate({\"row_id\": \"r1\", \"column_slug\": \"name\"\
        , \"value\": 1}).value\n    1"
      properties:
        row_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Id of the row the cell belongs to.
          title: Row Id
        column_slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Slug of the cell's column.
          title: Column Slug
        value:
          default: null
          description: The cell's value after the update.
          title: Value
      title: CellSchema
      type: object
    CellsUpdate:
      description: "Typed body for ``POST /grids/{id}/cells`` — set the value of individual cells.\n\n\
        Examples:\n    >>> CellsUpdate(\n    ...     revision=\"3\", cells=[UpdateCellSchema(row_id=1,\
        \ column_slug=\"name\", value=\"x\")]\n    ... ).model_dump(exclude_none=True)\n    {'revision':\
        \ '3', 'cells': [{'row_id': 1, 'column_slug': 'name', 'value': 'x'}]}"
      properties:
        revision:
          description: Current grid revision (optimistic lock).
          title: Revision
          type: string
        cells:
          description: The cells to update.
          items:
            $ref: '#/components/schemas/UpdateCellSchema'
          title: Cells
          type: array
      required:
      - revision
      - cells
      title: CellsUpdate
      type: object
    CellsUpdateResult:
      description: "Reply of ``POST /grids/{id}/cells`` — the new ``revision`` plus the updated cells.\n\
        \nExamples:\n    >>> CellsUpdateResult.model_validate({\"revision\": \"6\", \"cells\": []}).revision\n\
        \    '6'"
      properties:
        revision:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The grid's revision after updating cells.
          title: Revision
        cells:
          description: The cells that were updated.
          items:
            $ref: '#/components/schemas/CellSchema'
          title: Cells
          type: array
      title: CellsUpdateResult
      type: object
    CloneOperationStatus:
      description: "Status of a page-clone operation (``GET /operations/clone/{task_id}``).\n\nPoll this\
        \ until :attr:`is_terminal`; on ``success`` the ``result.page`` names the clone.\n\nExamples:\n\
        \    >>> CloneOperationStatus.model_validate({\"status\": \"success\"}).is_terminal\n    True"
      properties:
        status:
          anyOf:
          - enum:
            - scheduled
            - in_progress
            - success
            - failed
            type: string
          - type: 'null'
          default: null
          description: Lifecycle status (``scheduled``/``in_progress``/``success``/``failed``).
          title: Status
        progress:
          anyOf:
          - $ref: '#/components/schemas/OperationProgress'
          - type: 'null'
          default: null
          description: Progress of the running operation.
        result:
          anyOf:
          - $ref: '#/components/schemas/PageCloneResult'
          - type: 'null'
          default: null
          description: Result payload (present once ``status`` is ``success``).
      title: CloneOperationStatus
      type: object
    ColumnSchema:
      description: "A column in a grid's structure (``structure.columns[]`` on a read).\n\nExamples:\n\
        \    >>> ColumnSchema.model_validate({\"slug\": \"name\", \"type\": \"string\"}).type\n    'string'"
      properties:
        id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The column's identifier.
          title: Id
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Machine slug used to address the column.
          title: Slug
        title:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Human-readable column header.
          title: Title
        type:
          anyOf:
          - enum:
            - string
            - number
            - date
            - select
            - staff
            - checkbox
            - ticket
            - ticket_field
            type: string
          - type: 'null'
          default: null
          description: Value type of the column.
          title: Type
        required:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether a value is mandatory.
          title: Required
        width:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Column width in ``width_units``.
          title: Width
        width_units:
          anyOf:
          - enum:
            - '%'
            - px
            type: string
          - type: 'null'
          default: null
          description: 'Unit of ``width``: ``%`` or ``px``.'
          title: Width Units
        pinned:
          anyOf:
          - enum:
            - left
            - right
            type: string
          - type: 'null'
          default: null
          description: Edge the column is pinned to (``left``/``right``).
          title: Pinned
        color:
          anyOf:
          - enum:
            - blue
            - yellow
            - pink
            - red
            - green
            - mint
            - grey
            - orange
            - magenta
            - purple
            - copper
            - ocean
            type: string
          - type: 'null'
          default: null
          description: Background colour of the column.
          title: Color
        multiple:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: 'For ``select``/``staff``: allow multiple values.'
          title: Multiple
        format:
          anyOf:
          - enum:
            - yfm
            - wom
            - plain
            type: string
          - type: 'null'
          default: null
          description: 'For text columns: rich-text format (``None`` = plain).'
          title: Format
        ticket_field:
          anyOf:
          - enum:
            - assignee
            - components
            - created_at
            - deadline
            - description
            - end
            - estimation
            - fixversions
            - followers
            - last_comment_updated_at
            - original_estimation
            - parent
            - pending_reply_from
            - priority
            - project
            - queue
            - reporter
            - resolution
            - resolved_at
            - sprint
            - start
            - status
            - status_start_time
            - status_type
            - storypoints
            - subject
            - tags
            - type
            - updated_at
            - votes
            type: string
          - type: 'null'
          default: null
          description: 'For ``ticket_field`` columns: the mirrored Tracker field.'
          title: Ticket Field
        select_options:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: null
          description: 'For ``select`` columns: the allowed choices.'
          title: Select Options
        mark_rows:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: 'For ``checkbox`` columns: mark the row done when ticked.'
          title: Mark Rows
        description:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Free-text column description.
          title: Description
      title: ColumnSchema
      type: object
    ColumnSortSchema:
      description: "One entry of a grid's default sort as the API *reads* it back (``{slug, title, direction}``).\n\
        \nRead shape only — a grid update must send :class:`ColumnSortWrite` instead (the API's write\n\
        shape is a plain ``{\"<column_slug>\": \"asc\"|\"desc\"}`` mapping and 400s on this read shape).\n\
        \nExamples:\n    >>> ColumnSortSchema(slug=\"priority\", direction=\"desc\").direction\n    'desc'"
      properties:
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Slug of the column to sort by.
          title: Slug
        title:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Human-readable column title.
          title: Title
        direction:
          anyOf:
          - enum:
            - asc
            - desc
            type: string
          - type: 'null'
          default: null
          description: 'Sort direction: ``asc`` or ``desc``.'
          title: Direction
      title: ColumnSortSchema
      type: object
    ColumnSortWrite:
      additionalProperties:
        enum:
        - asc
        - desc
        type: string
      description: "One default-sort entry as the API *writes* it — ``{\"<column_slug>\": \"asc\"|\"desc\"\
        }``.\n\nThe write shape differs from the read shape: reads return ``[{slug, title, direction}]``\n\
        (:class:`ColumnSortSchema`), but ``POST /grids/{id}`` accepts only a list of single-key\n``column_slug\
        \ → direction`` mappings and rejects the read shape with a 400\n(``type_error.enum``). Values\
        \ are validated against :data:`SortDirection`.\n\nExamples:\n    >>> ColumnSortWrite({\"priority\"\
        : \"desc\"}).model_dump()\n    {'priority': 'desc'}"
      title: ColumnSortWrite
      type: object
    ColumnSuggest:
      description: "Typed body for ``POST /grids/{id}/columns/suggest`` — check a column slug (undocumented).\n\
        \nGive a ``slug`` to see whether it is taken, or a ``title`` to have it turned into a slug first:\n\
        exactly one of them (the API answers 400 for neither or both). The call only reads: it changes\n\
        nothing in the grid.\n\nExamples:\n    >>> ColumnSuggest(title=\"Due date\").model_dump(exclude_none=True)\n\
        \    {'title': 'Due date'}"
      properties:
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          default: null
          description: Column title to turn into a slug and check.
          title: Title
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Column slug to check.
          title: Slug
      title: ColumnSuggest
      type: object
    ColumnSuggestion:
      description: "Reply of ``POST /grids/{id}/columns/suggest`` — the checked slug and free alternatives.\n\
        \nExamples:\n    >>> ColumnSuggestion.model_validate(\n    ...     {\"slug\": \"name\", \"occupied\"\
        : True, \"suggest\": [\"name_1\"]}\n    ... ).suggest\n    ['name_1']"
      properties:
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The slug that was checked.
          title: Slug
        occupied:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether a column already has that slug.
          title: Occupied
        suggest:
          description: Free slugs to use instead when it is occupied.
          items:
            type: string
          title: Suggest
          type: array
      title: ColumnSuggestion
      type: object
    ColumnUpdate:
      description: "Typed body for ``POST /grids/{id}/column/{slug}`` — edit a column in place (undocumented).\n\
        \nEvery field is optional and only the ones sent change. The column ``type`` and ``slug`` cannot\n\
        be edited. Unlike the other grid writes this one does not enforce ``revision``: a live check\n\
        accepted a stale revision and none at all. Every call moves the grid's revision on.\n\nExamples:\n\
        \    >>> ColumnUpdate(revision=\"3\", title=\"Owner\", width=40, width_units=\"%\").model_dump(\n\
        \    ...     exclude_none=True\n    ... )\n    {'revision': '3', 'title': 'Owner', 'width': 40,\
        \ 'width_units': '%'}"
      properties:
        revision:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Grid revision; this endpoint accepts a stale or missing one.
          title: Revision
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          default: null
          description: New column header.
          title: Title
        description:
          anyOf:
          - maxLength: 1024
            type: string
          - type: 'null'
          default: null
          description: New free-text column description.
          title: Description
        required:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether a value is mandatory.
          title: Required
        width:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Column width in ``width_units``.
          title: Width
        width_units:
          anyOf:
          - enum:
            - '%'
            - px
            type: string
          - type: 'null'
          default: null
          description: Unit of ``width``.
          title: Width Units
        format:
          anyOf:
          - enum:
            - yfm
            - wom
            - plain
            type: string
          - type: 'null'
          default: null
          description: 'For text columns: rich-text format.'
          title: Format
        pinned:
          anyOf:
          - enum:
            - left
            - right
            type: string
          - type: 'null'
          default: null
          description: Edge to pin the column to.
          title: Pinned
        color:
          anyOf:
          - enum:
            - blue
            - yellow
            - pink
            - red
            - green
            - mint
            - grey
            - orange
            - magenta
            - purple
            - copper
            - ocean
            type: string
          - type: 'null'
          default: null
          description: Background colour of the column.
          title: Color
        multiple:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: 'For ``select``/``staff``: allow multiple values.'
          title: Multiple
        ticket_field:
          anyOf:
          - enum:
            - assignee
            - components
            - created_at
            - deadline
            - description
            - end
            - estimation
            - fixversions
            - followers
            - last_comment_updated_at
            - original_estimation
            - parent
            - pending_reply_from
            - priority
            - project
            - queue
            - reporter
            - resolution
            - resolved_at
            - sprint
            - start
            - status
            - status_start_time
            - status_type
            - storypoints
            - subject
            - tags
            - type
            - updated_at
            - votes
            type: string
          - type: 'null'
          default: null
          description: 'For ``ticket_field`` columns: the mirrored Tracker field.'
          title: Ticket Field
        select_options:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: null
          description: 'For ``select`` columns: the allowed choices.'
          title: Select Options
        mark_rows:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: 'For ``checkbox`` columns: mark the row done when ticked.'
          title: Mark Rows
      title: ColumnUpdate
      type: object
    ColumnUpdateResult:
      description: "Reply of ``POST /grids/{id}/column/{slug}`` — the new ``revision`` and the column\
        \ as saved.\n\nExamples:\n    >>> ColumnUpdateResult.model_validate(\n    ...     {\"revision\"\
        : \"5\", \"column\": {\"slug\": \"owner\", \"title\": \"Owner\"}}\n    ... ).column.title\n  \
        \  'Owner'"
      properties:
        revision:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The grid's revision after the edit.
          title: Revision
        column:
          anyOf:
          - $ref: '#/components/schemas/ColumnSchema'
          - type: 'null'
          default: null
          description: The column after the edit.
      title: ColumnUpdateResult
      type: object
    ColumnsAdd:
      description: "Typed body for ``POST /grids/{id}/columns`` — add columns at a position.\n\nExamples:\n\
        \    >>> ColumnsAdd(\n    ...     revision=\"3\", columns=[NewColumnSchema(title=\"C\", type=\"\
        string\")]\n    ... ).model_dump(exclude_none=True)[\"columns\"]\n    [{'title': 'C', 'type':\
        \ 'string', 'slug': 'c', 'required': False}]"
      properties:
        revision:
          description: Current grid revision (optimistic lock).
          title: Revision
          type: string
        columns:
          description: Columns to add (in order).
          items:
            $ref: '#/components/schemas/NewColumnSchema'
          title: Columns
          type: array
        position:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Zero-based index to insert at.
          title: Position
      required:
      - revision
      - columns
      title: ColumnsAdd
      type: object
    ColumnsMove:
      description: "Typed body for ``POST /grids/{id}/columns/move`` — move a run of columns to a position.\n\
        \nExamples:\n    >>> ColumnsMove(revision=\"3\", column_slug=\"name\", position=0).model_dump(exclude_none=True)\n\
        \    {'revision': '3', 'column_slug': 'name', 'position': 0}"
      properties:
        revision:
          description: Current grid revision (optimistic lock).
          title: Revision
          type: string
        column_slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Slug of the first column to move.
          title: Column Slug
        position:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Zero-based destination index.
          title: Position
        columns_count:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: How many consecutive columns to move (default 1).
          title: Columns Count
      required:
      - revision
      title: ColumnsMove
      type: object
    ColumnsRemove:
      description: "Typed body for ``DELETE /grids/{id}/columns`` — delete columns by slug.\n\nExamples:\n\
        \    >>> ColumnsRemove(revision=\"3\", column_slugs=[\"name\"]).model_dump(exclude_none=True)\n\
        \    {'revision': '3', 'column_slugs': ['name']}"
      properties:
        revision:
          description: Current grid revision (optimistic lock).
          title: Revision
          type: string
        column_slugs:
          description: Slugs of the columns to delete.
          items:
            type: string
          title: Column Slugs
          type: array
      required:
      - revision
      - column_slugs
      title: ColumnsRemove
      type: object
    Comment:
      description: "A wiki page comment (``/pages/{id}/comments`` item).\n\nThe list payload names the\
        \ text ``body`` and the author ``{display_name: …}``, so ``content``\nreads the ``body`` key (via\
        \ ``validation_alias``; it still renders as ``content``) and\n``author`` flattens ``display_name``.\n\
        \n``id`` and ``parent_id`` carry the thread wiring: the list returns a reply *flat* — as a\nsibling\
        \ of its parent, tagged only by ``parent_id`` (``thread_id`` / ``thread_info`` come back\n``null``).\
        \ ``CommentsClient.thread`` reads that wiring to reconstruct a single thread — the\ntarget comment\
        \ followed by its descendants — from an otherwise flat listing.\n\nExamples:\n    >>> Comment.model_validate({\"\
        author\": {\"display_name\": \"Сава\"}, \"body\": \"ok\"}).content\n    'ok'"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          title: Id
        parent_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Id of the comment this one replies to; ``None`` on a root.
          title: Parent Id
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Created At
        author:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Author
        body:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Body
      title: Comment
      type: object
    CommentCreate:
      description: "Typed body for ``POST /pages/{id}/comments`` — a new comment (or threaded reply).\n\
        \n``body`` is the comment text; the rest place it: ``inline_text`` pins it to a quoted\nfragment\
        \ of the page, ``parent_id`` makes it a reply to another comment, ``thread_id``\nfiles it into\
        \ an existing thread.\n\nExamples:\n    >>> CommentCreate(body=\"LGTM\", parent_id=7).model_dump(exclude_none=True)\n\
        \    {'body': 'LGTM', 'parent_id': 7}"
      properties:
        body:
          description: The comment text (non-empty).
          minLength: 1
          title: Body
          type: string
        inline_text:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Page fragment this comment is pinned to (inline comment).
          title: Inline Text
        parent_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Id of the comment this one replies to (threaded reply).
          title: Parent Id
        thread_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Id of an existing thread to file this comment into.
          title: Thread Id
      required:
      - body
      title: CommentCreate
      type: object
    CommentCreated:
      description: "The comment returned by ``POST /pages/{id}/comments`` — id + echoed placement fields.\n\
        \nExamples:\n    >>> CommentCreated.model_validate({\"id\": 5, \"body\": \"LGTM\"}).id\n    5"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Numeric id of the created comment.
          title: Id
        body:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The stored comment text.
          title: Body
        inline_text:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Page fragment the comment is pinned to, if inline.
          title: Inline Text
        parent_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Id of the parent comment, if this is a reply.
          title: Parent Id
        thread_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Id of the thread the comment belongs to.
          title: Thread Id
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 creation timestamp.
          title: Created At
        author:
          anyOf:
          - $ref: '#/components/schemas/User'
          - type: 'null'
          default: null
          description: Who wrote the comment.
        is_deleted:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the comment is deleted.
          title: Is Deleted
        resolve_status:
          anyOf:
          - enum:
            - resolved
            - unresolved
            type: string
          - type: 'null'
          default: null
          description: '``resolved`` or ``unresolved``.'
          title: Resolve Status
        reactions:
          description: Reactions left on the comment.
          items:
            $ref: '#/components/schemas/CommentReaction'
          title: Reactions
          type: array
      title: CommentCreated
      type: object
    CommentDeleteResult:
      description: "Result of ``DELETE /pages/{id}/comments/{comment_id}`` — the page's remaining comment\
        \ count.\n\nExamples:\n    >>> CommentDeleteResult.model_validate({\"comments_count\": 4}).comments_count\n\
        \    4"
      properties:
        comments_count:
          description: Number of comments left on the page after this deletion.
          title: Comments Count
          type: integer
      required:
      - comments_count
      title: CommentDeleteResult
      type: object
    CommentPage:
      properties:
        results:
          description: Items on this page of the listing.
          items:
            $ref: '#/components/schemas/Comment'
          title: Results
          type: array
        next_cursor:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cursor for the next page; ``null`` when the listing is exhausted.
          title: Next Cursor
      title: CursorPage[Comment]
      type: object
    CommentReaction:
      description: "One reaction left on a comment (``reactions`` item).\n\nExamples:\n    >>> CommentReaction.model_validate({\"\
        type\": \"like\"}).type\n    'like'"
      properties:
        type:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Kind of reaction, e.g. ``like``, ``heart``, ``check``.
          title: Type
        author:
          anyOf:
          - $ref: '#/components/schemas/User'
          - type: 'null'
          default: null
          description: Who left the reaction.
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 time it was left.
          title: Created At
      title: CommentReaction
      type: object
    Grid:
      description: "A full dynamic table (``POST /grids`` / ``GET /grids/{id}``) — structure, rows, revision.\n\
        \n``revision`` is the optimistic-lock token: pass it back on the next write. ``attributes`` and\n\
        ``user_permissions`` are only present when requested via ``fields=``.\n\nExamples:\n    >>> Grid.model_validate({\"\
        id\": \"g-uuid\", \"title\": \"Roadmap\", \"revision\": \"3\"}).revision\n    '3'"
      properties:
        id:
          anyOf:
          - type: string
          - type: integer
          - type: 'null'
          default: null
          description: The grid's identifier (uuid4 or int).
          title: Id
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 creation timestamp.
          title: Created At
        title:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Human-readable grid title.
          title: Title
        page:
          anyOf:
          - $ref: '#/components/schemas/PageIdentity'
          - type: 'null'
          default: null
          description: Page the grid belongs to.
        structure:
          anyOf:
          - $ref: '#/components/schemas/GridStructureSchema'
          - type: 'null'
          default: null
          description: Columns and default sort of the grid.
        rich_text_format:
          anyOf:
          - enum:
            - yfm
            - wom
            - plain
            type: string
          - type: 'null'
          default: null
          description: Rich-text format of the grid body, if any.
          title: Rich Text Format
        rows:
          description: The grid's rows.
          items:
            $ref: '#/components/schemas/GridRow'
          title: Rows
          type: array
        revision:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Optimistic-lock token — echo it back on the next write.
          title: Revision
        user_permissions:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: null
          description: Caller's permissions on the owning page (``fields=`` only).
          title: User Permissions
        attributes:
          anyOf:
          - $ref: '#/components/schemas/GridAttributes'
          - type: 'null'
          default: null
          description: Extra attributes (only present with ``fields=attributes``).
        template_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Id of the template the grid was created from, if any.
          title: Template Id
      title: Grid
      type: object
    GridAttributes:
      description: "Extra grid attributes (``fields=attributes``) — creation / modification timestamps.\n\
        \nExamples:\n    >>> GridAttributes(created_at=\"2025-01-01T00:00:00Z\").created_at\n    '2025-01-01T00:00:00Z'"
      properties:
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 creation timestamp.
          title: Created At
        modified_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 last-modification timestamp.
          title: Modified At
      title: GridAttributes
      type: object
    GridClone:
      description: "Typed body for ``POST /grids/{id}/clone`` — copy a grid onto another page (async).\n\
        \n``target`` is the destination page slug (created if absent); ``with_data`` copies the rows as\n\
        well as the structure. The call is deferred — see :class:`AsyncOperation`.\n\nExamples:\n    >>>\
        \ GridClone(target=\"data/y\", with_data=True).model_dump(exclude_none=True)\n    {'target': 'data/y',\
        \ 'with_data': True}"
      properties:
        target:
          description: Slug of the page to copy the grid onto (created if absent).
          title: Target
          type: string
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          default: null
          description: Title of the copy, if renaming.
          title: Title
        with_data:
          default: false
          description: Copy the rows too, not just the structure.
          title: With Data
          type: boolean
      required:
      - target
      title: GridClone
      type: object
    GridCloneOperationStatus:
      description: "Status of an inline-grid-clone operation (``GET /operations/clone_inline_grid/{task_id}``).\n\
        \nPoll this until :attr:`is_terminal`; on ``success`` the ``result.grid_id`` names the copy.\n\
        \nExamples:\n    >>> GridCloneOperationStatus.model_validate(\n    ...     {\"status\": \"success\"\
        , \"result\": {\"grid_id\": \"g2\"}}\n    ... ).result.grid_id\n    'g2'"
      properties:
        status:
          anyOf:
          - enum:
            - scheduled
            - in_progress
            - success
            - failed
            type: string
          - type: 'null'
          default: null
          description: Lifecycle status (``scheduled``/``in_progress``/``success``/``failed``).
          title: Status
        progress:
          anyOf:
          - $ref: '#/components/schemas/OperationProgress'
          - type: 'null'
          default: null
          description: Progress of the running operation.
        result:
          anyOf:
          - $ref: '#/components/schemas/GridCloneResult'
          - type: 'null'
          default: null
          description: Result payload (present once ``status`` is ``success``).
      title: GridCloneOperationStatus
      type: object
    GridCloneResult:
      description: "Result payload of a finished grid-clone operation — the new ``grid_id`` (and page).\n\
        \n``page`` is the page the grid landed on; ``grid`` is a transitional legacy-table schema.\n\n\
        Examples:\n    >>> GridCloneResult.model_validate({\"grid_id\": \"g2\"}).grid_id\n    'g2'"
      properties:
        grid_id:
          anyOf:
          - type: string
          - type: integer
          - type: 'null'
          default: null
          description: Id of the cloned grid (uuid4 or int).
          title: Grid Id
        page:
          anyOf:
          - $ref: '#/components/schemas/PageIdentity'
          - type: 'null'
          default: null
          description: Page the dynamic table was copied onto.
        grid:
          anyOf:
          - $ref: '#/components/schemas/PageIdentity'
          - type: 'null'
          default: null
          description: Transitional legacy-table schema (deprecated).
      title: GridCloneResult
      type: object
    GridCreate:
      description: "Typed body for ``POST /grids`` — create a new grid as a resource of a page.\n\nA new\
        \ grid has no prior revision, so this body carries none. Columns and rows are added\nafterwards\
        \ via the ``columns``/``rows`` calls.\n\nExamples:\n    >>> GridCreate(title=\"Roadmap\", page=PageIdentity(slug=\"\
        data/x\")).model_dump(\n    ...     exclude_none=True\n    ... )\n    {'title': 'Roadmap', 'page':\
        \ {'slug': 'data/x'}}"
      properties:
        title:
          description: Title of the new grid.
          maxLength: 255
          minLength: 1
          title: Title
          type: string
        page:
          $ref: '#/components/schemas/PageIdentity'
          description: Page the grid is created under (by id or slug).
      required:
      - title
      - page
      title: GridCreate
      type: object
    GridRef:
      description: "A dynamic-table (grid) reference attached to a page (``/pages/{id}/grids`` item).\n\
        \nGrids are identified by a UUID string ``id`` (unlike pages, which use an integer id).\n\nExamples:\n\
        \    >>> GridRef.model_validate({\"id\": \"abc-uuid\", \"title\": \"Roadmap\"}).title\n    'Roadmap'"
      properties:
        id:
          description: The grid's permanent UUID4 identifier.
          title: Id
          type: string
        title:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Human-readable grid title.
          title: Title
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 timestamp of when the grid was created.
          title: Created At
      required:
      - id
      title: GridRef
      type: object
    GridRefPage:
      properties:
        results:
          description: Items on this page of the listing.
          items:
            $ref: '#/components/schemas/GridRef'
          title: Results
          type: array
        next_cursor:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cursor for the next page; ``null`` when the listing is exhausted.
          title: Next Cursor
      title: CursorPage[GridRef]
      type: object
    GridRow:
      description: "One row of a grid (``rows[]`` on a read) — an ordered list of cell values.\n\n``row``\
        \ is positional (aligned to ``structure.columns``) and heterogeneous: a cell may be a\nscalar,\
        \ a string list, a ticket ref, or a user object, so it is typed permissively.\n\nExamples:\n \
        \   >>> GridRow.model_validate({\"id\": \"r1\", \"row\": [1, \"x\"], \"pinned\": True}).row\n\
        \    [1, 'x']"
      properties:
        id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The row's identifier.
          title: Id
        row:
          description: Positional cell values aligned to the grid's columns.
          items: {}
          title: Row
          type: array
        pinned:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the row is pinned.
          title: Pinned
        color:
          anyOf:
          - enum:
            - blue
            - yellow
            - pink
            - red
            - green
            - mint
            - grey
            - orange
            - magenta
            - purple
            - copper
            - ocean
            type: string
          - type: 'null'
          default: null
          description: Background colour of the row.
          title: Color
      title: GridRow
      type: object
    GridStructureSchema:
      description: "A grid's structure — its columns and default sort.\n\nExamples:\n    >>> GridStructureSchema(columns=[ColumnSchema(slug=\"\
        a\")]).columns[0].slug\n    'a'"
      properties:
        columns:
          description: Ordered columns of the grid.
          items:
            $ref: '#/components/schemas/ColumnSchema'
          title: Columns
          type: array
        default_sort:
          description: Default row sort applied when the grid is opened.
          items:
            $ref: '#/components/schemas/ColumnSortSchema'
          title: Default Sort
          type: array
      title: GridStructureSchema
      type: object
    GridUpdate:
      description: "Typed body for ``POST /grids/{id}`` — rename or re-sort a grid (POST, not PATCH).\n\
        \n``revision`` is required (optimistic lock); ``title`` and ``default_sort`` are the editable\n\
        fields. ``default_sort`` takes the API's *write* shape — a list of single-key\n``{\"<column_slug>\"\
        : \"asc\"|\"desc\"}`` mappings (:class:`ColumnSortWrite`), **not** the\n``{slug, title, direction}``\
        \ read shape a grid ``get`` returns.\n\nExamples:\n    >>> GridUpdate(revision=\"3\", title=\"\
        New\").model_dump(exclude_none=True)\n    {'revision': '3', 'title': 'New'}\n    >>> GridUpdate(revision=\"\
        3\", default_sort=[{\"col\": \"asc\"}]).model_dump(exclude_none=True)\n    {'revision': '3', 'default_sort':\
        \ [{'col': 'asc'}]}"
      properties:
        revision:
          description: Current grid revision (optimistic lock).
          title: Revision
          type: string
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          default: null
          description: New grid title.
          title: Title
        default_sort:
          anyOf:
          - items:
              $ref: '#/components/schemas/ColumnSortWrite'
            type: array
          - type: 'null'
          default: null
          description: 'New default row sort — write shape ``[{"<column_slug>": "asc"|"desc"}]``.'
          title: Default Sort
      required:
      - revision
      title: GridUpdate
      type: object
    GroupIdentity:
      description: "A group by the directory it lives in (``src``) and its id there.\n\nExamples:\n  \
        \  >>> GroupIdentity(src=\"dir\", id=\"42\").model_dump()\n    {'src': 'dir', 'id': '42'}"
      properties:
        src:
          description: 'Directory that owns the group: ``dir``, ``cloud``, ``com`` or ``staff``.'
          enum:
          - dir
          - cloud
          - com
          - staff
          title: Src
          type: string
        id:
          description: Group id inside that directory.
          title: Id
          type: string
      required:
      - src
      - id
      title: GroupIdentity
      type: object
    Me:
      description: The authenticated Wiki user (``GET /v1/users/me``) — a safe auth probe.
      properties:
        username:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Username
        home_cluster:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Home Cluster
        identity:
          anyOf:
          - $ref: '#/components/schemas/UserIdentity'
          - type: 'null'
          default: null
        org:
          anyOf:
          - $ref: '#/components/schemas/Organization'
          - type: 'null'
          default: null
      title: Me
      type: object
    MoveOperationStatus:
      description: "Status of a page-move operation (``GET /operations/move/{task_id}``).\n\nUndocumented\
        \ by Yandex (it is in the live OpenAPI only) and may change. Poll this until\n:attr:`is_terminal`;\
        \ on ``success`` the ``result.page_count`` says how many pages moved.\n\nExamples:\n    >>> MoveOperationStatus.model_validate(\n\
        \    ...     {\"status\": \"success\", \"result\": {\"page_count\": 2}}\n    ... ).result.page_count\n\
        \    2"
      properties:
        status:
          anyOf:
          - enum:
            - scheduled
            - in_progress
            - success
            - failed
            type: string
          - type: 'null'
          default: null
          description: Lifecycle status (``scheduled``/``in_progress``/``success``/``failed``).
          title: Status
        progress:
          anyOf:
          - $ref: '#/components/schemas/OperationProgress'
          - type: 'null'
          default: null
          description: Progress of the running operation.
        result:
          anyOf:
          - $ref: '#/components/schemas/PageMoveResult'
          - type: 'null'
          default: null
          description: Result payload (present once ``status`` is ``success``).
      title: MoveOperationStatus
      type: object
    NewColumnSchema:
      description: "Typed body for one new column in a ``columns add`` request.\n\n``title`` and ``type``\
        \ are required; the remaining fields shape a specific column type\n(``select_options`` for ``select``,\
        \ ``ticket_field`` for ``ticket_field``, …). The live API\nrequires a ``slug`` on every column\
        \ (400 ``value_error.missing`` without one), so when\n``slug`` is omitted it is derived from ``title``:\
        \ lowercased, with every run of non-word\ncharacters collapsed to a single ``_`` and edge underscores\
        \ stripped (``\"Owner\"`` →\n``\"owner\"``, ``\"My Col!\"`` → ``\"my_col\"``). The derivation\
        \ is Unicode-aware, so a Cyrillic\ntitle yields a Cyrillic slug (``\"Владелец\"`` → ``\"владелец\"\
        ``); only a title with no word\ncharacters at all (pure punctuation) needs an explicit ``slug``.\n\
        \nExamples:\n    >>> NewColumnSchema(title=\"Owner\", type=\"staff\", multiple=True).model_dump(\n\
        \    ...     exclude_none=True\n    ... )\n    {'title': 'Owner', 'type': 'staff', 'slug': 'owner',\
        \ 'required': False, 'multiple': True}"
      properties:
        title:
          description: Column header (non-empty).
          maxLength: 255
          minLength: 1
          title: Title
          type: string
        type:
          description: Value type of the new column.
          enum:
          - string
          - number
          - date
          - select
          - staff
          - checkbox
          - ticket
          - ticket_field
          title: Type
          type: string
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Machine slug of the column — required by the API; derived from ``title`` when omitted
            (lowercased, non-``a-z0-9`` runs collapsed to ``_``).
          title: Slug
        required:
          default: false
          description: Whether a value is mandatory. The API requires this on every column, so it defaults
            to ``False`` (never ``None``) to survive ``exclude_none`` serialization.
          title: Required
          type: boolean
        width:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Column width in ``width_units``.
          title: Width
        width_units:
          anyOf:
          - enum:
            - '%'
            - px
            type: string
          - type: 'null'
          default: null
          description: Unit of ``width``.
          title: Width Units
        pinned:
          anyOf:
          - enum:
            - left
            - right
            type: string
          - type: 'null'
          default: null
          description: Edge to pin the column to.
          title: Pinned
        color:
          anyOf:
          - enum:
            - blue
            - yellow
            - pink
            - red
            - green
            - mint
            - grey
            - orange
            - magenta
            - purple
            - copper
            - ocean
            type: string
          - type: 'null'
          default: null
          description: Background colour of the column.
          title: Color
        multiple:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: 'For ``select``/``staff``: allow multiple values.'
          title: Multiple
        format:
          anyOf:
          - enum:
            - yfm
            - wom
            - plain
            type: string
          - type: 'null'
          default: null
          description: 'For text columns: rich-text format.'
          title: Format
        ticket_field:
          anyOf:
          - enum:
            - assignee
            - components
            - created_at
            - deadline
            - description
            - end
            - estimation
            - fixversions
            - followers
            - last_comment_updated_at
            - original_estimation
            - parent
            - pending_reply_from
            - priority
            - project
            - queue
            - reporter
            - resolution
            - resolved_at
            - sprint
            - start
            - status
            - status_start_time
            - status_type
            - storypoints
            - subject
            - tags
            - type
            - updated_at
            - votes
            type: string
          - type: 'null'
          default: null
          description: 'For ``ticket_field`` columns: the mirrored Tracker field.'
          title: Ticket Field
        select_options:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: null
          description: 'For ``select`` columns: the allowed choices.'
          title: Select Options
        mark_rows:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: 'For ``checkbox`` columns: mark the row done when ticked.'
          title: Mark Rows
        description:
          anyOf:
          - maxLength: 1024
            type: string
          - type: 'null'
          default: null
          description: Free-text column description.
          title: Description
      required:
      - title
      - type
      title: NewColumnSchema
      type: object
    OperationIdentity:
      description: "Reference to a deferred operation (``{type, id}``) returned by the call that started\
        \ it.\n\nExamples:\n    >>> OperationIdentity(type=\"clone_inline_grid\", id=\"task-1\").id\n\
        \    'task-1'"
      properties:
        type:
          anyOf:
          - enum:
            - move
            - clone
            - clone_inline_grid
            type: string
          - type: 'null'
          default: null
          description: 'Operation kind: ``move`` or ``clone`` for a page, ``clone_inline_grid`` for a
            grid.'
          title: Type
        id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Task id to poll on the ``operations`` resource.
          title: Id
      title: OperationIdentity
      type: object
    OperationProgress:
      description: "Progress of a running clone operation — a fraction plus an optional detail string.\n\
        \nExamples:\n    >>> OperationProgress(percentage=0.5).percentage\n    0.5"
      properties:
        percentage:
          anyOf:
          - type: number
          - type: 'null'
          default: null
          description: Completion fraction in ``[0, 1]`` (``0.5`` = half done).
          title: Percentage
        details:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Free-text progress detail, if any.
          title: Details
      title: OperationProgress
      type: object
    Organization:
      description: The organization ids the user belongs to (``dir_id``, ``collab_id``).
      properties:
        dir_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Dir Id
        collab_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Collab Id
      title: Organization
      type: object
    PageAccess:
      description: "One personal grant on a page: a user or a group with a role.\n\nExamples:\n    >>>\
        \ PageAccess.model_validate({\"id\": \"9\", \"role\": \"reader\"}).role\n    'reader'"
      properties:
        id:
          description: Id of the grant, the ``access_id`` of update and delete.
          title: Id
          type: string
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 time of the grant.
          title: Created At
        user:
          anyOf:
          - $ref: '#/components/schemas/User'
          - type: 'null'
          default: null
          description: The user, for a user grant.
        group:
          anyOf:
          - $ref: '#/components/schemas/AccessGroup'
          - type: 'null'
          default: null
          description: The group, for a group grant.
        role:
          description: What the holder may do.
          enum:
          - reader
          - editor
          - extra_editor
          - author
          title: Role
          type: string
        inheritance:
          anyOf:
          - enum:
            - inherited
            - not_inherited
            type: string
          - type: 'null'
          default: null
          description: Whether the grant also covers subpages.
          title: Inheritance
      required:
      - id
      - role
      title: PageAccess
      type: object
    PageAccessCreate:
      description: "Typed body for ``POST /pages/{id}/access`` — grant a user or a group a role on a page.\n\
        \nName exactly one of ``user`` and ``group``.\n\nExamples:\n    >>> PageAccessCreate(user=UserIdentity(uid=\"\
        1000\"), role=\"editor\").model_dump(\n    ...     exclude_none=True\n    ... )\n    {'user':\
        \ {'uid': '1000'}, 'role': 'editor'}"
      properties:
        user:
          anyOf:
          - $ref: '#/components/schemas/UserIdentity'
          - type: 'null'
          default: null
          description: Grant this user the role.
        group:
          anyOf:
          - $ref: '#/components/schemas/GroupIdentity'
          - type: 'null'
          default: null
          description: Grant this group the role.
        role:
          description: Role to grant.
          enum:
          - reader
          - editor
          - extra_editor
          - author
          title: Role
          type: string
        inheritance:
          anyOf:
          - enum:
            - inherited
            - not_inherited
            type: string
          - type: 'null'
          default: null
          description: Whether the grant also covers subpages.
          title: Inheritance
      required:
      - role
      title: PageAccessCreate
      type: object
    PageAccessLists:
      description: "The grants on a page by origin (``fields=access_lists``).\n\nExamples:\n    >>> PageAccessLists.model_validate({\"\
        direct\": [{\"id\": \"9\", \"role\": \"author\"}]}).direct[0].id\n    '9'"
      properties:
        direct:
          description: Granted on this page.
          items:
            $ref: '#/components/schemas/PageAccess'
          title: Direct
          type: array
        by_link:
          description: Granted by a link.
          items:
            $ref: '#/components/schemas/PageAccess'
          title: By Link
          type: array
        inherited:
          description: Inherited from parent pages.
          items:
            $ref: '#/components/schemas/PageAccess'
          title: Inherited
          type: array
      title: PageAccessLists
      type: object
    PageAccessPolicy:
      description: "Who may open a page at all (``fields=access_policy``).\n\nExamples:\n    >>> PageAccessPolicy.model_validate({\"\
        access_type\": \"custom\"}).access_type\n    'custom'"
      properties:
        access_type:
          description: '``inherited`` from the parent, ``all_staff``, or ``custom`` (grants only).'
          enum:
          - inherited
          - all_staff
          - custom
          title: Access Type
          type: string
        inherited_access_type:
          anyOf:
          - enum:
            - all_staff
            - custom
            type: string
          - type: 'null'
          default: null
          description: The type inherited from the parent page.
          title: Inherited Access Type
        all_staff_role:
          anyOf:
          - enum:
            - reader
            - editor
            - extra_editor
            type: string
          - type: 'null'
          default: null
          description: Role every employee holds under ``all_staff``.
          title: All Staff Role
        has_external:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether external consultants can open the page.
          title: Has External
        invite:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          default: null
          description: Status of the invitation.
          title: Invite
      required:
      - access_type
      title: PageAccessPolicy
      type: object
    PageAccessPolicyUpdate:
      description: "Who may open a page, in a create or update body (``access_policy``).\n\nExamples:\n\
        \    >>> PageAccessPolicyUpdate(access_type=\"all_staff\", all_staff_role=\"editor\").access_type\n\
        \    'all_staff'"
      properties:
        access_type:
          description: '``inherited`` (as the parent), ``all_staff`` or ``custom``.'
          enum:
          - inherited
          - all_staff
          - custom
          title: Access Type
          type: string
        all_staff_role:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Role every employee gets under ``all_staff``, e.g. editor.
          title: All Staff Role
      required:
      - access_type
      title: PageAccessPolicyUpdate
      type: object
    PageAccessUpdate:
      description: "Typed body for ``POST /pages/{id}/access/{access_id}`` — change a grant's role or\
        \ reach.\n\nExamples:\n    >>> PageAccessUpdate(role=\"reader\").model_dump(exclude_none=True)\n\
        \    {'role': 'reader'}"
      properties:
        role:
          anyOf:
          - enum:
            - reader
            - editor
            - extra_editor
            - author
            type: string
          - type: 'null'
          default: null
          description: New role.
          title: Role
        inheritance:
          anyOf:
          - enum:
            - inherited
            - not_inherited
            type: string
          - type: 'null'
          default: null
          description: Whether the grant also covers subpages.
          title: Inheritance
      title: PageAccessUpdate
      type: object
    PageActuality:
      description: "Whether a page is marked up to date or obsolete (``fields=actuality``).\n\nExamples:\n\
        \    >>> PageActuality.model_validate({\"status\": \"obsolete\", \"comment\": \"moved\"}).status\n\
        \    'obsolete'"
      properties:
        status:
          anyOf:
          - enum:
            - possibly_obsolete
            - unspecified
            - actual
            - obsolete
            type: string
          - type: 'null'
          default: null
          description: '``actual``, ``obsolete``, ``possibly_obsolete``, ``unspecified``.'
          title: Status
        marked_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 time the mark was set.
          title: Marked At
        user:
          anyOf:
          - $ref: '#/components/schemas/User'
          - type: 'null'
          default: null
          description: Who set the mark.
        comment:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Note left with the mark.
          title: Comment
        external_links:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: null
          description: Links to the up-to-date material outside the wiki.
          title: External Links
        actual_pages:
          anyOf:
          - items:
              $ref: '#/components/schemas/PageSummary'
            type: array
          - type: 'null'
          default: null
          description: Wiki pages that replace an obsolete one.
          title: Actual Pages
      title: PageActuality
      type: object
    PageActualityUpdate:
      description: "Whether a page is up to date (``actuality`` of an update body).\n\nExamples:\n   \
        \ >>> PageActualityUpdate(is_actual=False, comment=\"replaced\").is_actual\n    False"
      properties:
        is_actual:
          description: '``True`` marks the page up to date, ``False`` obsolete.'
          title: Is Actual
          type: boolean
        comment:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Note left with the mark.
          title: Comment
        links:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: null
          description: Links to the up-to-date material.
          title: Links
      required:
      - is_actual
      title: PageActualityUpdate
      type: object
    PageAppendContent:
      description: "Typed body for ``POST /pages/{id}/append-content`` — add YFM without a full rewrite.\n\
        \n``content`` is the required, non-empty YFM fragment to append; ``body``, ``section`` and\n``anchor``\
        \ pinpoint where. The live API requires **exactly one** of the three placement\nselectors — a\
        \ bare ``{content}`` (or two selectors at once) is rejected with a 400\n\"mutually exclusive\"\
        \ validation error. Contrast with ``PagesClient.update``, which\nreplaces the whole page body.\n\
        \nExamples:\n    >>> PageAppendContent(\n    ...     content=\"## More\", body=PageAppendContentBody(location=\"\
        bottom\")\n    ... ).model_dump(exclude_none=True)\n    {'content': '## More', 'body': {'location':\
        \ 'bottom'}}"
      properties:
        content:
          description: YFM fragment to append (non-empty).
          minLength: 1
          title: Content
          type: string
        body:
          anyOf:
          - $ref: '#/components/schemas/PageAppendContentBody'
          - type: 'null'
          default: null
          description: Append at the top/bottom of the whole page body.
        section:
          anyOf:
          - $ref: '#/components/schemas/PageAppendContentSection'
          - type: 'null'
          default: null
          description: Append relative to a numbered section.
        anchor:
          anyOf:
          - $ref: '#/components/schemas/PageAppendContentAnchor'
          - type: 'null'
          default: null
          description: Append relative to a named text anchor.
      required:
      - content
      title: PageAppendContent
      type: object
    PageAppendContentAnchor:
      description: "Append relative to a named text anchor (``append-content`` ``anchor``).\n\nExamples:\n\
        \    >>> PageAppendContentAnchor(name=\"Roadmap\", regex=True).regex\n    True"
      properties:
        name:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Anchor text to append next to.
          title: Name
        fallback:
          default: false
          description: Fall back to the body end if the anchor is not found.
          title: Fallback
          type: boolean
        regex:
          default: false
          description: Treat ``name`` as a regular expression.
          title: Regex
          type: boolean
      title: PageAppendContentAnchor
      type: object
    PageAppendContentBody:
      description: "Where in the whole page body to append — ``top`` or ``bottom`` (``append-content``\
        \ ``body``).\n\nExamples:\n    >>> PageAppendContentBody(location=\"bottom\").location\n    'bottom'"
      properties:
        location:
          anyOf:
          - enum:
            - top
            - bottom
            type: string
          - type: 'null'
          default: null
          description: Anchor the appended content at the ``top`` or ``bottom`` of the page body.
          title: Location
      title: PageAppendContentBody
      type: object
    PageAppendContentSection:
      description: "Append relative to a numbered section (``append-content`` ``section``).\n\nExamples:\n\
        \    >>> PageAppendContentSection(id=3, location=\"top\").id\n    3"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Target section id to append relative to.
          title: Id
        location:
          anyOf:
          - enum:
            - top
            - bottom
            type: string
          - type: 'null'
          default: null
          description: Place the content at the ``top`` or ``bottom`` of that section.
          title: Location
      title: PageAppendContentSection
      type: object
    PageAttributes:
      description: "Optional page metadata (``fields=attributes``) — timestamps, draft flag.\n\nExamples:\n\
        \    >>> PageAttributes.model_validate({\"is_draft\": True, \"comments_count\": 3}).comments_count\n\
        \    3"
      properties:
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Created At
        modified_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Modified At
        comments_count:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          title: Comments Count
        is_draft:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          title: Is Draft
      title: PageAttributes
      type: object
    PageClone:
      description: "Typed body for ``POST /pages/{id}/clone`` — copy a page to a new address (async).\n\
        \n``target`` is the destination slug; ``subscribe_me`` subscribes the caller to the copy.\nClone\
        \ is deferred — see :class:`AsyncOperation` and poll via the ``operations`` resource.\n\nExamples:\n\
        \    >>> PageClone(target=\"data/y\", subscribe_me=True).model_dump(exclude_none=True)\n    {'target':\
        \ 'data/y', 'subscribe_me': True}"
      properties:
        target:
          description: Slug of the page's new address after the copy.
          title: Target
          type: string
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          default: null
          description: Title of the copy, if renaming.
          title: Title
        subscribe_me:
          default: false
          description: Subscribe the caller to changes on the copy.
          title: Subscribe Me
          type: boolean
      required:
      - target
      title: PageClone
      type: object
    PageCloneResult:
      description: "Result payload of a finished page-clone operation — the cloned ``page``.\n\nExamples:\n\
        \    >>> PageCloneResult.model_validate({\"page\": {\"id\": 42, \"slug\": \"data/y\"}}).page.slug\n\
        \    'data/y'"
      properties:
        page:
          anyOf:
          - $ref: '#/components/schemas/PageIdentity'
          - type: 'null'
          default: null
          description: The page that was cloned.
      title: PageCloneResult
      type: object
    PageCreate:
      description: "Typed request body for ``POST /pages``: a new page at ``slug``.\n\nExamples:\n   \
        \ >>> PageCreate(slug=\"eng/new\", title=\"New page\", content=\"# New\").slug\n    'eng/new'"
      properties:
        slug:
          description: Address of the page, e.g. ``data/x``.
          title: Slug
          type: string
        title:
          description: Title of the page.
          maxLength: 255
          minLength: 1
          title: Title
          type: string
        content:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Body of the page in YFM markdown.
          title: Content
        access_policy:
          anyOf:
          - $ref: '#/components/schemas/PageAccessPolicyUpdate'
          - type: 'null'
          default: null
          description: Who may open the page.
      required:
      - slug
      - title
      title: PageCreate
      type: object
    PageDeleteResult:
      description: "Result of ``DELETE /pages/{id}`` — carries the ``recovery_token`` for undo.\n\nKeep\
        \ this token: it is the only way to restore the just-deleted page (feed it to\n``wiki recovery\
        \ restore`` → ``POST /recovery_tokens/{token}/recover``).\n\nExamples:\n    >>> PageDeleteResult.model_validate({\"\
        recovery_token\": \"abc-uuid4\"}).recovery_token\n    'abc-uuid4'"
      properties:
        recovery_token:
          description: UUID4 token restoring the deleted page via /recovery_tokens/{token}/recover.
          title: Recovery Token
          type: string
      required:
      - recovery_token
      title: PageDeleteResult
      type: object
    PageDetails:
      description: "A single wiki page (``GET /pages?slug=``) — id, slug, title, optional content.\n\n\
        ``content``, ``attributes``, ``owner``, ``access_policy``, ``access_lists``, ``breadcrumbs``,\n\
        ``redirect`` and ``actuality`` come back only when named in ``fields``; ``active_revision``\n\
        only when the page was asked for at a past revision. ``owner_username`` walks\n``owner.user.username``\
        \ defensively.\n\nExamples:\n    >>> PageDetails.model_validate(\n    ...     {\"id\": 42, \"\
        slug\": \"data/x\", \"title\": \"X\", \"owner\": {\"user\": {\"username\": \"ivan\"}}}\n    ...\
        \ ).owner_username\n    'ivan'"
      properties:
        id:
          title: Id
          type: integer
        slug:
          title: Slug
          type: string
        title:
          title: Title
          type: string
        page_type:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Page Type
        content:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Content
        owner:
          anyOf:
          - $ref: '#/components/schemas/PageOwner'
          - type: 'null'
          default: null
          description: Owner (``fields=owner``).
        attributes:
          anyOf:
          - $ref: '#/components/schemas/PageAttributes'
          - type: 'null'
          default: null
        access_policy:
          anyOf:
          - $ref: '#/components/schemas/PageAccessPolicy'
          - type: 'null'
          default: null
          description: Who may open the page (``fields=access_policy``).
        access_lists:
          anyOf:
          - $ref: '#/components/schemas/PageAccessLists'
          - type: 'null'
          default: null
          description: 'Personal accesses: direct, by link, inherited (``fields=access_lists``).'
        breadcrumbs:
          anyOf:
          - items:
              $ref: '#/components/schemas/Breadcrumb'
            type: array
          - type: 'null'
          default: null
          description: Path from the root to the page (``fields=breadcrumbs``).
          title: Breadcrumbs
        redirect:
          anyOf:
          - $ref: '#/components/schemas/PageRedirect'
          - type: 'null'
          default: null
          description: Where the page redirects to (``fields=redirect``); ``null`` if nowhere.
        actuality:
          anyOf:
          - $ref: '#/components/schemas/PageActuality'
          - type: 'null'
          default: null
          description: Up-to-date or obsolete mark (``fields=actuality``).
        active_revision:
          anyOf:
          - $ref: '#/components/schemas/PageRevision'
          - type: 'null'
          default: null
          description: The past revision shown, when the page was asked for with ``revision_id``.
      required:
      - id
      - slug
      - title
      title: PageDetails
      type: object
    PageIdentity:
      description: "A page by its numeric ``id`` and its ``slug``.\n\nIn a request either one addresses\
        \ the page, and ``id`` takes priority when both are given.\n\nExamples:\n    >>> PageIdentity(slug=\"\
        data/x\").slug\n    'data/x'"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Numeric id of the page.
          title: Id
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Slug of the page, e.g. ``data/x``.
          title: Slug
      title: PageIdentity
      type: object
    PageMove:
      description: "Typed body for ``POST /pages/move`` — give pages new addresses (async, undocumented).\n\
        \nThe API runs the steps in order. It moves a page together with its subtree, which is the only\n\
        way to rename or relocate a page (a page update has no ``slug``). The endpoint is undocumented\n\
        by Yandex (live OpenAPI only) and may change.\n\nExamples:\n    >>> PageMove(\n    ...     operations=[PageMoveStep(source=\"\
        data/old\", target=\"archive/old\")],\n    ...     copy_inherited_access=True,\n    ... ).model_dump(exclude_none=True)[\"\
        copy_inherited_access\"]\n    True"
      properties:
        operations:
          description: Moves to run, in order (at least one).
          items:
            $ref: '#/components/schemas/PageMoveStep'
          minItems: 1
          title: Operations
          type: array
        copy_inherited_access:
          default: false
          description: Copy the accesses a page inherited from its old parent when it moves. The API refuses
            a move that leaves this unset (400 INHERITANCE_BEHAVIOR_IS_NOT_SPECIFIED), so it is always
            sent, ``false`` by default.
          title: Copy Inherited Access
          type: boolean
      required:
      - operations
      title: PageMove
      type: object
    PageMoveResult:
      description: "Result payload of a finished page-move operation — how many pages changed address.\n\
        \nExamples:\n    >>> PageMoveResult.model_validate({\"page_count\": 3}).page_count\n    3"
      properties:
        page_count:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Number of pages moved (the page and its descendants).
          title: Page Count
      title: PageMoveResult
      type: object
    PageMoveStep:
      description: "One step of a page move: take the page at ``source`` and give it the address ``target``.\n\
        \n``next_to_slug`` and ``position`` set where the moved page lands among its new siblings.\n\n\
        Examples:\n    >>> PageMoveStep(source=\"data/old\", target=\"archive/old\").model_dump(exclude_none=True)\n\
        \    {'source': 'data/old', 'target': 'archive/old'}"
      properties:
        source:
          description: Slug of the page before the move.
          title: Source
          type: string
        target:
          description: Slug of the page after the move.
          title: Target
          type: string
        next_to_slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Sibling page to place the moved page next to.
          title: Next To Slug
        position:
          anyOf:
          - enum:
            - before
            - after
            type: string
          - type: 'null'
          default: null
          description: Put the moved page ``before`` or ``after`` ``next_to_slug``.
          title: Position
      required:
      - source
      - target
      title: PageMoveStep
      type: object
    PageOwner:
      description: "The owner of a page (``fields=owner``).\n\nExamples:\n    >>> PageOwner.model_validate({\"\
        user\": {\"username\": \"ivan\"}}).user.username\n    'ivan'"
      properties:
        user:
          anyOf:
          - $ref: '#/components/schemas/User'
          - type: 'null'
          default: null
          description: The owning user.
        group:
          anyOf:
          - $ref: '#/components/schemas/AccessGroup'
          - type: 'null'
          default: null
          description: The owning group (not in use).
      title: PageOwner
      type: object
    PageOwnerUpdate:
      description: "The new owner of a page (``owner`` of an update body).\n\nExamples:\n    >>> PageOwnerUpdate(user=UserIdentity(uid=\"\
        1000\")).user.uid\n    '1000'"
      properties:
        user:
          anyOf:
          - $ref: '#/components/schemas/UserIdentity'
          - type: 'null'
          default: null
          description: The user who becomes the owner.
      title: PageOwnerUpdate
      type: object
    PageRedirect:
      description: "Where a page redirects to (``fields=redirect``).\n\nExamples:\n    >>> PageRedirect.model_validate({\"\
        page_id\": 9}).page_id\n    9"
      properties:
        page_id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Id of the page this one redirects to.
          title: Page Id
        redirect_target:
          anyOf:
          - $ref: '#/components/schemas/PageSummary'
          - type: 'null'
          default: null
          description: The page at the end of the redirect chain.
      title: PageRedirect
      type: object
    PageRedirectUpdate:
      description: "Where a page should redirect to (``redirect`` of an update body).\n\n``page`` has\
        \ no default: ``None`` is sent as ``null`` and removes the redirect.\n\nExamples:\n    >>> PageRedirectUpdate(page=PageIdentity(slug=\"\
        eng/new\")).page.slug\n    'eng/new'"
      properties:
        page:
          anyOf:
          - $ref: '#/components/schemas/PageIdentity'
          - type: 'null'
          description: The page to redirect to, by id or slug; ``None`` removes the redirect.
      required:
      - page
      title: PageRedirectUpdate
      type: object
    PageRef:
      description: "A lightweight ``{id, slug}`` reference (``/pages/descendants`` item).\n\nExamples:\n\
        \    >>> PageRef.model_validate({\"id\": 1, \"slug\": \"data/a\"}).slug\n    'data/a'"
      properties:
        id:
          title: Id
          type: integer
        slug:
          title: Slug
          type: string
      required:
      - id
      - slug
      title: PageRef
      type: object
    PageRefPage:
      properties:
        results:
          description: Items on this page of the listing.
          items:
            $ref: '#/components/schemas/PageRef'
          title: Results
          type: array
        next_cursor:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cursor for the next page; ``null`` when the listing is exhausted.
          title: Next Cursor
      title: CursorPage[PageRef]
      type: object
    PageRevision:
      description: "One saved revision of a page (``/pages/{id}/revisions`` item).\n\nExamples:\n    >>>\
        \ PageRevision.model_validate(\n    ...     {\"id\": 7, \"author\": {\"username\": \"ivan\"},\
        \ \"page_type\": \"page\"}\n    ... ).author.username\n    'ivan'"
      properties:
        id:
          description: Revision id (the ``revision_id`` of ``GET /pages``).
          title: Id
          type: integer
        author:
          anyOf:
          - $ref: '#/components/schemas/User'
          - type: 'null'
          default: null
          description: Who saved the revision.
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 time it was saved.
          title: Created At
        page_type:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: 'Kind of page: page, grid, cloud_page, wysiwyg or template.'
          title: Page Type
        revision_draft:
          anyOf:
          - $ref: '#/components/schemas/RevisionDraft'
          - type: 'null'
          default: null
          description: Draft the revision was published from, if any.
        publication:
          anyOf:
          - $ref: '#/components/schemas/RevisionPublication'
          - type: 'null'
          default: null
          description: Whether the revision is published yet.
      required:
      - id
      title: PageRevision
      type: object
    PageRevisionPage:
      properties:
        results:
          description: Items on this page of the listing.
          items:
            $ref: '#/components/schemas/PageRevision'
          title: Results
          type: array
        next_cursor:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cursor for the next page; ``null`` when the listing is exhausted.
          title: Next Cursor
      title: CursorPage[PageRevision]
      type: object
    PageSummary:
      description: "A page named inside another page's reply: its reference, title and kind.\n\nExamples:\n\
        \    >>> PageSummary.model_validate({\"id\": 1, \"slug\": \"data/a\", \"title\": \"A\"}).title\n\
        \    'A'"
      properties:
        id:
          title: Id
          type: integer
        slug:
          title: Slug
          type: string
        title:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Title of the page.
          title: Title
        page_type:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: 'Kind of page: page, grid, cloud_page, wysiwyg or template.'
          title: Page Type
      required:
      - id
      - slug
      title: PageSummary
      type: object
    PageUpdate:
      description: "Typed request body for ``POST /pages/{id}``: only the fields set are changed.\n\n\
        A page's address is not among them: :class:`PageMove` renames or relocates a page.\n\nExamples:\n\
        \    >>> PageUpdate(content=\"# Rewritten\", title=\"Renamed\").title\n    'Renamed'"
      properties:
        title:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          default: null
          description: New title of the page.
          title: Title
        content:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: New body, replacing the whole one.
          title: Content
        redirect:
          anyOf:
          - $ref: '#/components/schemas/PageRedirectUpdate'
          - type: 'null'
          default: null
          description: Make the page a redirect, or remove its redirect.
        actuality:
          anyOf:
          - $ref: '#/components/schemas/PageActualityUpdate'
          - type: 'null'
          default: null
          description: Mark the page up to date or obsolete.
        access_policy:
          anyOf:
          - $ref: '#/components/schemas/PageAccessPolicyUpdate'
          - type: 'null'
          default: null
          description: Who may open the page.
        owner:
          anyOf:
          - $ref: '#/components/schemas/PageOwnerUpdate'
          - type: 'null'
          default: null
          description: The new owner of the page.
      title: PageUpdate
      type: object
    RecoveredPage:
      description: "The page a restore brought back, and how many pages came back with it.\n\nExamples:\n\
        \    >>> RecoveredPage.model_validate({\"id\": 7, \"slug\": \"data/x\", \"pages_count\": 3}).pages_count\n\
        \    3"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Numeric id of the page.
          title: Id
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Slug of the page, e.g. ``data/x``.
          title: Slug
        pages_count:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: 'Number of pages restored: the page and those under it.'
          title: Pages Count
      title: RecoveredPage
      type: object
    ResourceItem:
      description: "A page resource — a ``{type, item}`` envelope over an attachment or a grid.\n\n``type``\
        \ discriminates the payload (``attachment`` → an ``AttachmentSchema``; ``grid`` → a\n``PageGridsSchema``);\
        \ ``item`` keeps that payload verbatim so both shapes flow through one\nlisting without loss.\
        \ This is the unified surface over the separate attachments/grids\nlistings — use it to enumerate\
        \ everything on a page in one pass.\n\nExamples:\n    >>> ResourceItem.model_validate({\"type\"\
        : \"attachment\", \"item\": {\"name\": \"d.png\"}}).type\n    'attachment'"
      properties:
        type:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: 'Resource kind: ``attachment`` or ``grid``.'
          title: Type
        item:
          additionalProperties: true
          description: The resource payload (an AttachmentSchema or PageGridsSchema), kept verbatim.
          title: Item
          type: object
      title: ResourceItem
      type: object
    ResourceItemPage:
      properties:
        results:
          description: Items on this page of the listing.
          items:
            $ref: '#/components/schemas/ResourceItem'
          title: Results
          type: array
        next_cursor:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cursor for the next page; ``null`` when the listing is exhausted.
          title: Next Cursor
      title: CursorPage[ResourceItem]
      type: object
    RevisionDraft:
      description: "The draft a revision was published from (``revision_draft`` of a revision).\n\nExamples:\n\
        \    >>> RevisionDraft.model_validate({\"id\": 3, \"modified_at\": \"2026-10-03T10:00:00Z\"}).id\n\
        \    3"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Draft id.
          title: Id
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 time the draft was made.
          title: Created At
        modified_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 time of its last edit.
          title: Modified At
      title: RevisionDraft
      type: object
    RevisionPublication:
      description: "Publication state of a revision (``publication`` of a revision).\n\nExamples:\n  \
        \  >>> RevisionPublication(status=\"published\").status\n    'published'"
      properties:
        status:
          anyOf:
          - enum:
            - pending_publication
            - published
            type: string
          - type: 'null'
          default: null
          description: '``pending_publication`` or ``published``.'
          title: Status
      title: RevisionPublication
      type: object
    RevisionResult:
      description: "The common ``{revision}`` reply of a grid write (update / remove / move / columns\
        \ add).\n\nCarries the grid's new optimistic-lock token; feed it to the next write.\n\nExamples:\n\
        \    >>> RevisionResult.model_validate({\"revision\": \"4\"}).revision\n    '4'"
      properties:
        revision:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The grid's revision after the write.
          title: Revision
      title: RevisionResult
      type: object
    RowUpdate:
      description: "Typed body for ``POST /grids/{id}/rows/{row_id}`` — pin or colour a row (undocumented).\n\
        \nCell values are not part of it; set those with ``cells update``. Like ``ColumnUpdate`` it does\n\
        not enforce ``revision`` (a stale or missing one is accepted), and every call moves the grid's\n\
        revision on.\n\nExamples:\n    >>> RowUpdate(revision=\"3\", pinned=True, color=\"mint\").model_dump(exclude_none=True)\n\
        \    {'revision': '3', 'pinned': True, 'color': 'mint'}"
      properties:
        revision:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Grid revision; this endpoint accepts a stale or missing one.
          title: Revision
        pinned:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Pin the row to the top of the grid.
          title: Pinned
        color:
          anyOf:
          - enum:
            - blue
            - yellow
            - pink
            - red
            - green
            - mint
            - grey
            - orange
            - magenta
            - purple
            - copper
            - ocean
            type: string
          - type: 'null'
          default: null
          description: Background colour of the row.
          title: Color
      title: RowUpdate
      type: object
    RowUpdateResult:
      description: "Reply of ``POST /grids/{id}/rows/{row_id}`` — carries no revision.\n\nThe spec says\
        \ ``{status: \"ok\"}``, but a live check got an empty object, so ``status`` stays\n``None``: the\
        \ 2xx is the success signal, and the new revision comes from ``grids get``.\n\nExamples:\n   \
        \ >>> RowUpdateResult.model_validate({\"status\": \"ok\"}).status\n    'ok'\n    >>> RowUpdateResult.model_validate({}).status\
        \ is None\n    True"
      properties:
        status:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: '``ok`` when the API says so; the live API sends nothing.'
          title: Status
      title: RowUpdateResult
      type: object
    RowsAdd:
      description: "Typed body for ``POST /grids/{id}/rows`` — insert rows at a position.\n\nEach item\
        \ of ``rows`` maps a column slug to its cell value. ``position`` /\n``after_row_id`` place the\
        \ new rows; omit both to append.\n\nExamples:\n    >>> RowsAdd(revision=\"3\", rows=[{\"name\"\
        : \"x\"}]).model_dump(exclude_none=True)\n    {'revision': '3', 'rows': [{'name': 'x'}]}"
      properties:
        revision:
          description: Current grid revision (optimistic lock).
          title: Revision
          type: string
        rows:
          description: Rows to insert; each maps a column slug to its cell value.
          items:
            additionalProperties: true
            type: object
          title: Rows
          type: array
        position:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Zero-based index to insert at.
          title: Position
        after_row_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Insert after this row id (alternative to ``position``).
          title: After Row Id
      required:
      - revision
      - rows
      title: RowsAdd
      type: object
    RowsAddResult:
      description: "Reply of ``POST /grids/{id}/rows`` — the new ``revision`` plus the created rows.\n\
        \nExamples:\n    >>> RowsAddResult.model_validate({\"revision\": \"5\", \"results\": [{\"id\"\
        : \"r1\"}]}).results[0].id\n    'r1'"
      properties:
        revision:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: The grid's revision after adding rows.
          title: Revision
        results:
          description: The rows that were created.
          items:
            $ref: '#/components/schemas/GridRow'
          title: Results
          type: array
      title: RowsAddResult
      type: object
    RowsMove:
      description: "Typed body for ``POST /grids/{id}/rows/move`` — move a run of rows to a position.\n\
        \nExamples:\n    >>> RowsMove(revision=\"3\", row_id=\"r1\", position=0).model_dump(exclude_none=True)\n\
        \    {'revision': '3', 'row_id': 'r1', 'position': 0}"
      properties:
        revision:
          description: Current grid revision (optimistic lock).
          title: Revision
          type: string
        row_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Id of the first row to move.
          title: Row Id
        after_row_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Move to just after this row id (alternative to ``position``).
          title: After Row Id
        position:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Zero-based destination index.
          title: Position
        rows_count:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: How many consecutive rows to move (default 1).
          title: Rows Count
      required:
      - revision
      title: RowsMove
      type: object
    RowsRemove:
      description: "Typed body for ``DELETE /grids/{id}/rows`` — delete rows by id.\n\nExamples:\n   \
        \ >>> RowsRemove(revision=\"3\", row_ids=[\"r1\"]).model_dump(exclude_none=True)\n    {'revision':\
        \ '3', 'row_ids': ['r1']}"
      properties:
        revision:
          description: Current grid revision (optimistic lock).
          title: Revision
          type: string
        row_ids:
          description: Ids of the rows to delete (at least one).
          items:
            type: string
          minItems: 1
          title: Row Ids
          type: array
      required:
      - revision
      - row_ids
      title: RowsRemove
      type: object
    SearchDateRange:
      description: "A time window for ``created_at`` / ``modified_at``; both ends are required.\n\nThe\
        \ spec calls both ends optional, but the live API answers an open-ended window with\n``400 SEARCH_BAD_REQUEST``,\
        \ so a missing end fails here instead.\n\nExamples:\n    >>> SearchDateRange(start=\"2026-01-01\"\
        , end=\"2026-02-01\").model_dump(mode=\"json\")\n    {'from': '2026-01-01T00:00:00', 'to': '2026-02-01T00:00:00'}"
      properties:
        from:
          description: Start of the window (ISO 8601).
          format: date-time
          title: From
          type: string
        to:
          description: End of the window (ISO 8601).
          format: date-time
          title: To
          type: string
      required:
      - from
      - to
      title: SearchDateRange
      type: object
    SearchFilters:
      description: "What to narrow a search to; every filter is optional.\n\nExamples:\n    >>> SearchFilters(type=\"\
        page\", cluster=\"docs\").model_dump(exclude_none=True)\n    {'type': 'page', 'cluster': 'docs',\
        \ 'show_obsolete': False}"
      properties:
        type:
          anyOf:
          - enum:
            - page
            - file
            type: string
          - type: 'null'
          default: null
          description: Only pages or only files.
          title: Type
        authors:
          anyOf:
          - items:
              $ref: '#/components/schemas/UserIdentity'
            type: array
          - type: 'null'
          default: null
          description: Only documents by these users (uid or cloud_uid).
          title: Authors
        cluster:
          anyOf:
          - maxLength: 255
            minLength: 1
            type: string
          - type: 'null'
          default: null
          description: Only documents under this page slug, e.g. ``team/handbook``.
          title: Cluster
        created_at:
          anyOf:
          - $ref: '#/components/schemas/SearchDateRange'
          - type: 'null'
          default: null
          description: Only documents created in this window.
        modified_at:
          anyOf:
          - $ref: '#/components/schemas/SearchDateRange'
          - type: 'null'
          default: null
          description: Only documents modified in this window.
        show_obsolete:
          default: false
          description: Also return obsolete (outdated) documents.
          title: Show Obsolete
          type: boolean
      title: SearchFilters
      type: object
    SearchPage:
      description: "One page of search results.\n\n``next_cursor`` is the number of the following page\
        \ as text (``\"2\"``), to pass back as the\nnext request's ``cursor``. The API sets it even after\
        \ a page with no results, so do not\npage until it is ``null``: stop at the first empty page.\n\
        \nExamples:\n    >>> SearchPage.model_validate({\"results\": [], \"next_cursor\": \"2\"}).next_cursor\n\
        \    '2'"
      properties:
        results:
          description: Hits on this page.
          items:
            $ref: '#/components/schemas/SearchResult'
          title: Results
          type: array
        next_cursor:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cursor of the next page, or ``null`` when there is none.
          title: Next Cursor
        prev_cursor:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cursor of the previous page, or ``null`` on the first.
          title: Prev Cursor
      title: SearchPage
      type: object
    SearchRequest:
      description: "Body of ``POST /search``: the query, filters and one page of the results.\n\nExamples:\n\
        \    >>> SearchRequest(query=\"roadmap\", limit=5).model_dump(exclude_none=True)\n    {'query':\
        \ 'roadmap', 'cursor': 1, 'limit': 5, 'order_by': 'relevancy', 'highlight': False}"
      properties:
        query:
          description: Text to search for.
          minLength: 1
          title: Query
          type: string
        filters:
          anyOf:
          - $ref: '#/components/schemas/SearchFilters'
          - type: 'null'
          default: null
          description: Narrow the search.
        cursor:
          default: 1
          description: Number of the result page, from 1.
          maximum: 500
          minimum: 1
          title: Cursor
          type: integer
        limit:
          default: 10
          description: Results per page.
          maximum: 50
          minimum: 1
          title: Limit
          type: integer
        order_by:
          default: relevancy
          description: How to sort the results.
          enum:
          - relevancy
          - creation_date
          - modified_date
          title: Order By
          type: string
        highlight:
          default: false
          description: Wrap the matches in ``<em>`` tags in title and content.
          title: Highlight
          type: boolean
      required:
      - query
      title: SearchRequest
      type: object
    SearchResult:
      description: "One hit of a search.\n\nExamples:\n    >>> SearchResult.model_validate({\"slug\":\
        \ \"docs/a\", \"title\": \"A\"}).slug\n    'docs/a'"
      properties:
        url:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Path of the document on the Wiki.
          title: Url
        slug:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Slug of the page the hit belongs to.
          title: Slug
        title:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Title, with matches in ``<em>`` if asked.
          title: Title
        content:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Snippet of the matching text.
          title: Content
        type:
          anyOf:
          - enum:
            - page
            - file
            type: string
          - type: 'null'
          default: null
          description: Page or file.
          title: Type
        modified_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Time of the last change, as the API prints it.
          title: Modified At
      title: SearchResult
      type: object
    UpdateCellSchema:
      description: "Typed body for one cell in a ``cells update`` request (``row_id``, ``column_slug``,\
        \ value).\n\nExamples:\n    >>> UpdateCellSchema(row_id=1, column_slug=\"name\", value=\"x\").model_dump()\n\
        \    {'row_id': 1, 'column_slug': 'name', 'value': 'x'}"
      properties:
        row_id:
          description: Numeric id of the row whose cell is updated.
          title: Row Id
          type: integer
        column_slug:
          description: Slug of the cell's column.
          title: Column Slug
          type: string
        value:
          default: null
          description: New cell value (scalar, list, or user ref).
          title: Value
      required:
      - row_id
      - column_slug
      title: UpdateCellSchema
      type: object
    UploadSession:
      description: "A file upload session — create / get / upload-part / finish / abort all return this\
        \ shape.\n\n``session_id`` addresses the session across the whole pipeline; ``status`` walks\n\
        ``not_started`` → ``in_progress`` → ``finished`` (or ``aborted`` / ``used`` / ``cleanup``).\n\
        Once ``finished`` the file can be attached to a page (see ``AttachmentsClient.attach``).\n\nExamples:\n\
        \    >>> UploadSession.model_validate({\"session_id\": \"s1\", \"status\": \"not_started\"}).session_id\n\
        \    's1'"
      properties:
        session_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: UUID4 identifying the upload session across the pipeline.
          title: Session Id
        file_name:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Name of the file being uploaded.
          title: File Name
        file_size:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Declared total size of the file, in bytes.
          title: File Size
        status:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Session status — one of not_started, in_progress, finished, aborted, used, cleanup.
          title: Status
        user:
          anyOf:
          - $ref: '#/components/schemas/User'
          - type: 'null'
          default: null
          description: The user that created the session.
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 timestamp when the session was created.
          title: Created At
        finished_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: ISO-8601 timestamp when the session finished, if it has.
          title: Finished At
        storage_type:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Backing storage of the upload — one of mds, s3, custom_s3.
          title: Storage Type
      title: UploadSession
      type: object
    UploadSessionCreate:
      description: "Typed request body for ``uploadsessions.create`` (``POST /upload_sessions``).\n\n\
        Examples:\n    >>> UploadSessionCreate(file_name=\"diagram.png\", file_size=2048).file_size\n\
        \    2048"
      properties:
        file_name:
          description: Name to give the uploaded file.
          title: File Name
          type: string
        file_size:
          description: Total size of the file in bytes (sum of every part).
          title: File Size
          type: integer
      required:
      - file_name
      - file_size
      title: UploadSessionCreate
      type: object
    User:
      description: "A Wiki user: its numeric id, login, display name and external identity.\n\nExamples:\n\
        \    >>> User.model_validate({\"id\": 7, \"username\": \"ivan\"}).username\n    'ivan'"
      properties:
        id:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          description: Wiki's numeric id of the user.
          title: Id
        identity:
          anyOf:
          - $ref: '#/components/schemas/UserIdentity'
          - type: 'null'
          default: null
          description: Passport and cloud uids.
        username:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Login of the user.
          title: Username
        display_name:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Name to show for the user.
          title: Display Name
        is_dismissed:
          anyOf:
          - type: boolean
          - type: 'null'
          default: null
          description: Whether the user has left.
          title: Is Dismissed
        affiliation:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Affiliation of the user.
          title: Affiliation
      title: User
      type: object
    UserIdentity:
      description: "A user by passport ``uid`` or ``cloud_uid``.\n\nExamples:\n    >>> UserIdentity(uid=\"\
        1000\").model_dump(exclude_none=True)\n    {'uid': '1000'}"
      properties:
        uid:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Passport uid of the user.
          title: Uid
        cloud_uid:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          description: Cloud uid of the user.
          title: Cloud Uid
      title: UserIdentity
      type: object
