openapi: 3.1.0
info:
  title: 墨墨开放 API
  version: v1
  description: >+
    # 说明

    1. 获取请求凭证，有两种方式获取
       1. 通过墨墨背单词 App：我的 -> 更多设置 -> 实验功能 -> 开放 API
       2. 点击[此处](https://open.maimemo.com/open/api/v1/tokens/openapi)获取
    2. 将请求凭证放在 `Authorization: Bearer XXX` 中，curl 示例如下：
        ```bash
        curl --request GET \
          --url https://open.maimemo.com/open/api/v1/phrases \
          --header 'Accept: application/json' \
          --header 'Authorization: Bearer xxx'
        ```

    ## 请求频控

    - 10 秒 20 次

    - 60 秒 40 次

    - 5 小时 2000 次（墨墨背单词）

    - 5 小时 8000 次（墨墨记忆卡）


    ### 墨墨内容创建频控

    为了避免滥用和保证服务质量，每天最多创建 600 条内容（例句、助记、释义合并在内），若大量创建低质、无意义、违规内容可能则会被进一步限制。


    ## 墨墨记忆卡制卡指南


    Markji 也称“墨墨记忆卡”。本文用于编写可直接粘贴到
    Markji（墨墨记忆卡）中的内容。普通文字可以直接输入；需要挖空、样式、选择题、公式或媒体时，再使用对应语法。


    ### 目录


    - [先记住这些规则](#先记住这些规则)

    - [行内语法](#行内语法)
      - [文字样式](#文字样式)
      - [挖空](#挖空)
      - [音频](#音频)
      - [关联卡片](#关联卡片)
    - [块级语法](#块级语法)
      - [段落样式](#段落样式)
      - [选择题](#选择题)
      - [图片与画廊](#图片与画廊)
      - [独立公式](#独立公式)
      - [答案分隔线](#答案分隔线)
    - [转义与特殊字符](#转义与特殊字符)

    - [嵌套和位置限制](#嵌套和位置限制)

    - [完整示例](#完整示例)

    - [常见错误](#常见错误)

    - [输出前检查清单](#输出前检查清单)


    ### 先记住这些规则


    普通文字不需要任何标签：


    ```text

    光合作用把光能转化为化学能。

    ```


    需要语法时，通常使用下面的结构：


    ```text

    [名称#参数1,参数2#内容]

    ```


    请遵守以下约束：


    1. 标签和参数区分大小写。必须写成 `T`、`P`、`F`、`Choice`、`Pic`、`Audio`、`Card`、`E` 等规定形式。

    2. `#` 分隔名称、参数和内容。没有参数时也要保留两个 `#`，例如 `[E##x+y]`、`[Choice##...]`。

    3. 多个参数使用英文逗号 `,` 分隔；标签名、参数和分隔符之间不要加空格。

    4. 每个语法都必须有未被转义的右中括号 `]` 作为结尾。

    5. 普通换行会产生新段落。段落样式、选择题、图片、独立公式和答案分隔线应从一行的开头开始。

    6. 除明确允许的位置外，不要嵌套语法。

    7. 文字内容里需要显示普通中括号时，写成 `\[` 和 `\]`。

    8. 不要依赖错误语法被自动修复；无法确认时使用纯文本。


    一个常用的问答卡片：


    ```text

    [P#H1#光合作用]

    光合作用主要发生在哪种细胞器中？

    ---

    叶绿体。

    ```


    ### 行内语法


    行内语法可以和普通文字写在同一段中。


    #### 文字样式


    格式：


    ```text

    [T#参数#文字]

    ```


    可用参数：


    | 参数 | 效果 | 示例 |

    |---|---|---|

    | `B` | 加粗 | `[T#B#重点]` |

    | `I` | 斜体 | `[T#I#术语]` |

    | `U` | 下划线 | `[T#U#关键词]` |

    | `!rrggbb` | 文字颜色 | `[T#!e53935#红色文字]` |

    | `!!rrggbb` | 背景颜色 | `[T#!!fff59d#高亮文字]` |

    | `up` | 上标 | `x[T#up#2]` |

    | `down` | 下标 | `H[T#down#2]O` |

    | `link/"网址"` | 超链接 | `[T#link/"https://markji.com"#访问网站]` |


    多个样式可以组合：


    ```text

    [T#B,U,!e53935#红色加粗下划线]

    ```


    约束：


    - 颜色必须是 6 位小写十六进制字符，不要带 `#`，例如 `!0f0f0f`。

    - `up` 和 `down` 不要同时使用。

    - 同一种参数不要重复；多个颜色或多个对齐方式也不要冲突。

    - 链接网址必须放在英文双引号中。参数区里的 `#`、英文逗号和换行会破坏语法；网址含这些字符时，应在确认语义不变的前提下先做 URL 编码。

    - 样式内容中不要再放其他语法。


    #### 挖空


    格式：


    ```text

    [F#编号#要隐藏的内容]

    ```


    示例：


    ```text

    光合作用主要发生在[F#1#叶绿体]中。

    ```


    编号表示挖空分组：


    - 使用从 `1` 开始的正整数。

    - 相同编号属于同一组；希望一起显示或隐藏时使用相同编号。

    - 不同编号是不同组。

    - 不要省略编号，也不要使用 `0`、负数、小数或文字编号。

    - 挖空内容中不要嵌套其他语法；需要样式时，把样式放在挖空外部或改写内容。


    #### 音频


    格式：


    ```text

    [Audio#ID/音频ID#显示文字]

    ```


    常用参数：


    | 参数 | 含义 |

    |---|---|

    | `ID/音频ID` | 指定已有音频 |

    | `M` | 手动播放 |

    | `A` | 自动播放；不写 `M` 时也按自动播放处理 |

    | `D` | 播放行为跟随用户设置 |


    示例：


    ```text

    [Audio#M,ID/audio123#点击播放发音]

    [Audio#ID/audio123,D#单词发音]

    ```


    约束：


    - 只使用真实、已有的音频 ID，不要猜测或编造。

    - `M` 和 `A` 不要同时使用。需要手动播放时写 `M`；需要自动播放时可省略 `A`。

    - 显示文字可以为空，但仍要保留第二个 `#`。

    - 显示文字中不要嵌套其他语法。


    #### 卡片引用


    格式：


    ```text

    [Card#ID/卡片ID#显示文字]

    ```


    关联多张卡片时，用连字符 `-` 分隔 ID：


    ```text

    [Card#ID/abc123-def456#查看相关卡片]

    ```


    约束：


    - 只使用真实、已有的卡片 ID，不要猜测或编造。

    - ID 本身不能包含用作分隔符的连字符。

    - 重复 ID 没有意义，应在输出前去重；空 ID 应删除。

    - 显示文字中不要嵌套其他语法。


    ### 块级语法


    块级语法应从新一行的第一个字符开始。


    #### 段落样式


    格式：


    ```text

    [P#参数#段落内容]

    ```


    可用参数：


    | 参数 | 效果 | 示例 |

    |---|---|---|

    | `H1` | 标题 | `H1` |

    | `L` | 无序列表 | `L` |

    | `I<n>` | 缩进级别 | `I2` |

    | `left` | 左对齐 | `left` |

    | `center` | 居中 | `center` |

    | `right` | 右对齐 | `right` |


    示例：


    ```text

    [P#H1,center#细胞呼吸]

    [P#L#线粒体]

    ```


    约束：


    - 标题只支持 `H1`；不要使用其他标题级别。

    - `I<n>` 中的 `n` 使用正整数。

    - 一段只能选择一种对齐方式。

    - 当前仅使用 `L` 表示无序列表；不要生成有序列表、折叠、行内代码等未列出的参数。

    - 整个段落语法尽量写在同一行。

    - 段落内容可以包含文字样式、挖空、音频和关联卡片，但这些行内语法之间不要互相嵌套。

    - 普通段落不需要空参数的 `[P##内容]`，直接写文字即可。


    #### 选择题


    基本格式：


    ```text

    [Choice#参数#

    * 正确选项

    - 错误选项

    ]

    ```


    参数：


    | 参数 | 含义 |

    |---|---|

    | `fixed` | 保持选项顺序；省略时默认随机排列 |

    | `multi` | 多选题 |


    单选题示例：


    ```text

    [Choice#fixed#

    - 叶绿体

    * 线粒体

    - 核糖体

    ]

    ```


    多选题示例：


    ```text

    [Choice#multi#

    * 氧气

    * 水

    - 氯化钠

    ]

    ```


    约束：


    - `[Choice...` 必须从新一行开头开始，结尾的 `]` 单独占一行。

    - 每个选项也必须从新一行开始，并准确使用 `* ` 或 `- `（符号后有一个空格）。

    - `* ` 表示正确选项，`- ` 表示错误选项。

    - 有多个正确选项时必须加 `multi`；单选题只保留一个 `* `。

    - 希望固定顺序时加 `fixed`；希望随机排列时省略 `fixed`。

    - 选项内只使用普通文字和 `[T#...#...]` 文字样式。不要放挖空、音频、卡片关联、图片或公式。

    - 不要使用其他方式声明答案；以每行的 `* ` 和 `- ` 为准。


    #### 图片与画廊


    单张图片：


    ```text

    [Pic#ID/图片ID#]

    ```


    带遮罩的图片：


    ```text

    [Pic#ID/图片ID,MID/遮罩ID#]

    ```


    相邻且没有换行的多张图片会组成同一个画廊：


    ```text

    [Pic#ID/image1#][Pic#ID/image2,MID/mask2#]

    ```


    分别放在两行会形成两个独立的图片区块：


    ```text

    [Pic#ID/image1#]

    [Pic#ID/image2#]

    ```


    约束：


    - 图片语法必须从新一行开头开始。

    - 图片内容区必须为空，所以结尾是 `#]`。

    - 只使用真实、已有的图片 ID 和遮罩 ID，不要猜测或编造。

    - 需要同一画廊时不要在相邻图片之间加入空格或换行。


    #### 独立公式


    把公式单独放在一行，即可作为独立公式：


    ```text

    [E##E=mc^2]

    ```


    公式内容可以换行：


    ```text

    [E##\begin{aligned}

    a^2+b^2&=c^2

    \end{aligned}]

    ```


    独立公式的 `[E##` 必须从新一行开头开始，结束的 `]` 后不要在同一行追加普通文字。


    #### 答案分隔线


    使用三个半角连字符，并让它单独占一行：


    ```text

    ---

    ```


    常用于分隔问题和答案：


    ```text

    法国的首都是哪里？

    ---

    巴黎。

    ```


    不要在 `---` 前后添加空格、其他符号或同行文字。若答案分隔线位于卡片末尾，仍应保留它后面的换行。


    ### 转义与特殊字符


    在普通文字或语法的内容区中，需要显示中括号本身时进行转义：


    | 想显示 | 应输入 |

    |---|---|

    | `[` | `\[` |

    | `]` | `\]` |


    示例：


    ```text

    数学中的闭区间可以写作 \[a,b\]。

    [T#B#请阅读第 \[3\] 章]

    ```


    注意：


    - 只转义作为普通文字显示的中括号；真正的语法外层括号不要转义。

    - 内容区中的 `#` 和英文逗号通常可以直接写；参数区中的 `#`、英文逗号和换行具有结构含义，不能当普通字符使用。

    - 反斜杠只有紧挨中括号时才用于这里的转义。公式中的 LaTeX 反斜杠按公式原样书写。


    ### 嵌套和位置限制


    按下表决定一种语法能否放进另一种语法：


    | 容器 | 可放入的语法 |

    |---|---|

    | 普通段落 | `T`、`F`、`Audio`、`Card` |

    | `P` 段落 | `T`、`F`、`Audio`、`Card` |

    | `Choice` 选项 | 仅 `T` |

    | `T` 内容 | 不放其他语法 |

    | `F` 内容 | 不放其他语法 |

    | `Audio` 显示文字 | 不放其他语法 |

    | `Card` 显示文字 | 不放其他语法 |

    | `Pic` | 内容必须为空 |

    | `E` 公式 | 只写公式内容 |


    块级语法 `P`、`Choice`、`Pic`、独立 `E` 和 `---` 不要放进段落或其他语法内部。


    ### 完整示例


    #### 重点与挖空


    ```text

    [P#H1#细胞结构]

    [T#B#线粒体]是细胞进行[F#1#有氧呼吸]的主要场所。

    ---

    它常被称为细胞的“动力工厂”。

    ```


    #### 带公式的问答卡


    ```text

    勾股定理的公式是什么？

    ---

    [E##a^2+b^2=c^2]

    ```


    #### 固定顺序的多选题


    ```text

    以下哪些是哺乳动物？

    [Choice#fixed,multi#

    * 鲸

    - 鲨鱼

    * 蝙蝠

    - 企鹅

    ]

    ```


    ### 常见错误


    错误：少写一个 `#`。


    ```text

    [F#1挖空]

    ```


    正确：


    ```text

    [F#1#挖空]

    ```


    错误：块级语法前有普通文字。


    ```text

    题目：[Choice##

    * A

    - B

    ]

    ```


    正确：


    ```text

    题目：

    [Choice##

    * A

    - B

    ]

    ```


    错误：多选题漏掉 `multi`。


    ```text

    [Choice##

    * A

    * B

    - C

    ]

    ```


    正确：


    ```text

    [Choice#multi#

    * A

    * B

    - C

    ]

    ```


    错误：选项符号后没有空格。


    ```text

    *正确选项

    ```


    正确：


    ```text

    * 正确选项

    ```


    错误：普通右中括号未转义。


    ```text

    [T#B#区间 [0,1]]

    ```


    正确：


    ```text

    [T#B#区间 \[0,1\]]

    ```


    ### 输出前检查清单


    1. 是否所有标签和参数都使用规定的大小写？

    2. 是否每个语法都有两个结构分隔 `#`，并有正确的结尾 `]`？

    3. 是否所有块级语法都从新一行的第一个字符开始？

    4. 是否每个选择题选项都使用准确的 `* ` 或 `- ` 前缀？

    5. 是否多选题写了 `multi`，需要固定顺序时写了 `fixed`？

    6. 是否所有挖空都使用正整数编号，且分组符合预期？

    7. 是否普通文字中的 `[` 和 `]` 已写成 `\[` 和 `\]`？

    8. 是否没有在不支持的位置嵌套语法？

    9. 是否所有标题都只使用 `H1`？

    10. 是否所有颜色都是 6 位小写十六进制字符？

    11. 是否没有编造图片、遮罩、音频或关联卡片 ID？

    12. 是否避免了未列出的参数和不必要的复杂样式？

paths:
  /api/v1/markji/decks/folders:
    servers: &ref_0
      - url: https://open.maimemo.com/open
        description: 生产服务
      - url: https://open-dev.maimemo.com/open
        description: 测试服务
    get:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.ListFolders
      summary: 获取文件夹列表
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  folders:
                    description: <br><br>引用自：[MarkjiFolder](/schemas/MarkjiFolder)
                    type: array
                    items:
                      $ref: '#/components/schemas/MarkjiFolder'
                required:
                  - folders
      parameters: []
      security:
        - user:
            - ''
  /api/v1/markji/decks:
    servers: *ref_0
    get:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.ListDecks
      summary: 获取我的自建牌组列表
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  decks:
                    description: <br><br>引用自：[MarkjiDeck](/schemas/MarkjiDeck)
                    type: array
                    items:
                      $ref: '#/components/schemas/MarkjiDeck'
                  total:
                    description: 总数
                    type: integer
                    example: null
                required:
                  - decks
                  - total
      parameters:
        - name: offset
          in: query
          deprecated: false
          required: false
          description: 偏移量
          schema:
            description: 偏移量
            type: integer
            example: null
        - name: limit
          in: query
          deprecated: false
          required: false
          description: 每页数量
          schema:
            description: 每页数量
            type: integer
            example: null
        - name: folder_id
          in: query
          deprecated: false
          required: false
          description: 文件夹 OpenAPI ID
          schema:
            description: 文件夹 OpenAPI ID
            type: string
            example: null
      security:
        - user:
            - ''
  /api/v1/markji/decks/{deck}:
    servers: *ref_0
    get:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.GetDeck
      summary: 获取自建牌组信息
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  deck:
                    description: null<br><br>引用自：[MarkjiDeck](/schemas/MarkjiDeck)
                    type: object
                    $ref: '#/components/schemas/MarkjiDeck'
                required:
                  - deck
      parameters:
        - name: deck
          in: path
          deprecated: false
          required: true
          description: 牌组 OpenAPI ID
          schema:
            description: 牌组 OpenAPI ID
            type: string
            example: null
        - name: with_root
          in: query
          deprecated: false
          required: false
          description: 是否返回根牌组信息
          schema:
            description: 是否返回根牌组信息
            type: boolean
            example: false
      security:
        - user:
            - ''
  /api/v1/markji/decks/{deck}/chapters:
    servers: *ref_0
    get:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.ListChapters
      summary: 获取自建牌组章节
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  chapterset:
                    description: >-
                      null<br><br>引用自：[MarkjiChapterset](/schemas/MarkjiChapterset)
                    type: object
                    $ref: '#/components/schemas/MarkjiChapterset'
                  chapters:
                    description: <br><br>引用自：[MarkjiChapter](/schemas/MarkjiChapter)
                    type: array
                    items:
                      $ref: '#/components/schemas/MarkjiChapter'
                  cards:
                    description: <br><br>引用自：[MarkjiCard](/schemas/MarkjiCard)
                    type: array
                    items:
                      $ref: '#/components/schemas/MarkjiCard'
                required:
                  - chapters
      parameters:
        - name: deck
          in: path
          deprecated: false
          required: true
          description: 牌组 OpenAPI ID
          schema:
            description: 牌组 OpenAPI ID
            type: string
            example: null
        - name: updated_time
          in: query
          deprecated: false
          required: false
          description: 只返回更新时间晚于该时间的章节
          schema:
            description: 只返回更新时间晚于该时间的章节
            type: string
            format: ISODate
            example: 2021-07-09T00:16:00.000Z
        - name: with_cards
          in: query
          deprecated: false
          required: false
          description: 是否同时返回章节内卡片
          schema:
            description: 是否同时返回章节内卡片
            type: boolean
            example: false
      security:
        - user:
            - ''
  /api/v1/markji/decks/{deck}/chapters/{chapter}:
    servers: *ref_0
    get:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.GetChapter
      summary: 获取自建牌组指定章节
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  chapterset:
                    description: >-
                      null<br><br>引用自：[MarkjiChapterset](/schemas/MarkjiChapterset)
                    type: object
                    $ref: '#/components/schemas/MarkjiChapterset'
                  chapter:
                    description: null<br><br>引用自：[MarkjiChapter](/schemas/MarkjiChapter)
                    type: object
                    $ref: '#/components/schemas/MarkjiChapter'
                  cards:
                    description: <br><br>引用自：[MarkjiCard](/schemas/MarkjiCard)
                    type: array
                    items:
                      $ref: '#/components/schemas/MarkjiCard'
                required: []
      parameters:
        - name: deck
          in: path
          deprecated: false
          required: true
          description: 牌组 OpenAPI ID
          schema:
            description: 牌组 OpenAPI ID
            type: string
            example: null
        - name: chapter
          in: path
          deprecated: false
          required: true
          description: 章节 OpenAPI ID
          schema:
            description: 章节 OpenAPI ID
            type: string
            example: null
        - name: with_cards
          in: query
          deprecated: false
          required: false
          description: 是否同时返回章节内卡片
          schema:
            description: 是否同时返回章节内卡片
            type: boolean
            example: false
        - name: updated_time
          in: query
          deprecated: false
          required: false
          description: 只返回更新时间晚于该时间的章节
          schema:
            description: 只返回更新时间晚于该时间的章节
            type: string
            format: ISODate
            example: 2021-07-09T00:16:00.000Z
      security:
        - user:
            - ''
  /api/v1/markji/decks/{deck}/cards/{card}:
    servers: *ref_0
    get:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.GetCard
      summary: 获取自建牌组卡片
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  card:
                    description: null<br><br>引用自：[MarkjiCard](/schemas/MarkjiCard)
                    type: object
                    $ref: '#/components/schemas/MarkjiCard'
                required:
                  - card
      parameters:
        - name: deck
          in: path
          deprecated: false
          required: true
          description: 牌组 OpenAPI ID
          schema:
            description: 牌组 OpenAPI ID
            type: string
            example: null
        - name: card
          in: path
          deprecated: false
          required: true
          description: 卡片 OpenAPI ID
          schema:
            description: 卡片 OpenAPI ID
            type: string
            example: null
      security:
        - user:
            - ''
  /api/v1/markji/decks/{deck}/chapters/{chapter}/cards:
    servers: *ref_0
    post:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.CreateCard
      summary: 新建卡片
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                deck:
                  description: 牌组 OpenAPI ID
                  type: string
                  example: null
                chapter:
                  description: 章节 OpenAPI ID
                  type: string
                  example: null
                card:
                  description: ''
                  type: object
                  properties:
                    content:
                      description: 卡片内容
                      type: string
                      example: null
                    grammar_version:
                      description: 语法版本
                      type: integer
                      example: null
                  required:
                    - content
                    - grammar_version
                order:
                  description: 插入位置，不传则追加到章节末尾
                  type: integer
                  example: null
              required:
                - deck
                - chapter
                - card
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  card:
                    description: null<br><br>引用自：[MarkjiCard](/schemas/MarkjiCard)
                    type: object
                    $ref: '#/components/schemas/MarkjiCard'
                  chapter:
                    description: null<br><br>引用自：[MarkjiChapter](/schemas/MarkjiChapter)
                    type: object
                    $ref: '#/components/schemas/MarkjiChapter'
                required:
                  - card
                  - chapter
      parameters: []
      security:
        - user:
            - ''
  /api/v1/markji/decks/{deck_id}/cards/{card_id}:
    servers: *ref_0
    post:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.UpdateCard
      summary: 更新卡片
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                deck_id:
                  description: 要更新的牌组 ID
                  type: string
                  example: null
                card_id:
                  description: 要更新的卡片 ID
                  type: string
                  example: null
                card:
                  description: ''
                  type: object
                  properties:
                    content:
                      description: 卡片内容
                      type: string
                      example: null
                    grammar_version:
                      description: 语法版本
                      type: integer
                      example: null
                  required:
                    - content
                    - grammar_version
              required:
                - deck_id
                - card_id
                - card
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  card:
                    description: null<br><br>引用自：[MarkjiCard](/schemas/MarkjiCard)
                    type: object
                    $ref: '#/components/schemas/MarkjiCard'
                required:
                  - card
      parameters: []
      security:
        - user:
            - ''
  /api/v1/markji/files:
    servers: *ref_0
    post:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.UploadFile
      summary: 上传文件
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                deck_id:
                  description: 可选，牌组 OpenAPI ID，指定后按牌组编辑权限归属文件
                  type: string
                  example: null
                file:
                  description: multipart/form-data 中的文件字段，字段名为 `file`
                  type: string
                  example: null
              required:
                - file
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  file:
                    description: null<br><br>引用自：[MarkjiFile](/schemas/MarkjiFile)
                    type: object
                    $ref: '#/components/schemas/MarkjiFile'
                required:
                  - file
      parameters: []
      security:
        - user:
            - ''
      description: multipart/form-data 请求，文件字段名为 `file`
  /api/v1/markji/files/query:
    servers: *ref_0
    post:
      tags:
        - 内容
        - 墨墨记忆卡
      operationId: maimemo.openapi.markji.v1.MarkjiContentService.QueryFiles
      summary: 查询文件
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                ids:
                  description: 文件 OpenAPI ID 列表
                  type: array
                  example: null
                  items:
                    type: string
                expires:
                  description: 文件外链有效期，默认 30 天，单位秒
                  type: integer
                  example: null
              required:
                - ids
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  files:
                    description: <br><br>引用自：[MarkjiFile](/schemas/MarkjiFile)
                    type: array
                    items:
                      $ref: '#/components/schemas/MarkjiFile'
                required:
                  - files
      parameters: []
      security:
        - user:
            - ''
  /api/v1/memo/interpretations:
    servers: &ref_1
      - url: https://open.maimemo.com/open
        description: 生产服务
      - url: https://open-dev.maimemo.com/open
        description: 测试服务
    get:
      tags:
        - 释义
        - 墨墨背单词
      operationId: >-
        maimemo.openapi.memo.interpretation.v1.InterpretationService.ListInterpretations
      summary: 获取释义
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  interpretations:
                    description: 释义列表<br><br>引用自：[Interpretation](/schemas/Interpretation)
                    type: array
                    items:
                      $ref: '#/components/schemas/Interpretation'
                required:
                  - interpretations
      parameters:
        - name: voc_id
          in: query
          deprecated: false
          required: true
          description: 单词 id
          schema:
            description: 单词 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
      description: 获取单词下自己创建的释义
    post:
      tags:
        - 释义
        - 墨墨背单词
      operationId: >-
        maimemo.openapi.memo.interpretation.v1.InterpretationService.CreateInterpretation
      summary: 创建释义
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                interpretation:
                  description: ''
                  type: object
                  properties:
                    voc_id:
                      description: 单词 id
                      type: string
                      example: 5a7BFf4F63612e5AD9fdebB7a50D3881
                    interpretation:
                      description: 释义
                      type: string
                      example: n. 苹果
                    tags:
                      description: 标签
                      type: array
                      example:
                        - 考研
                      items:
                        type: string
                    status:
                      description: >-
                        状态，公开或非公开可选

                        @Example
                        PUBLISHED<br><br>引用自：[InterpretationStatus](/schemas/InterpretationStatus)
                      type: object
                      $ref: '#/components/schemas/InterpretationStatus'
                  required:
                    - voc_id
                    - interpretation
                    - tags
                    - status
              required:
                - interpretation
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  interpretation:
                    description: 释义<br><br>引用自：[Interpretation](/schemas/Interpretation)
                    type: object
                    $ref: '#/components/schemas/Interpretation'
                required:
                  - interpretation
      parameters: []
      security:
        - user:
            - ''
  /api/v1/memo/interpretations/{id}:
    servers: *ref_1
    post:
      tags:
        - 释义
        - 墨墨背单词
      operationId: >-
        maimemo.openapi.memo.interpretation.v1.InterpretationService.UpdateInterpretation
      summary: 更新释义
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                interpretation:
                  description: ''
                  type: object
                  properties:
                    interpretation:
                      description: 释义
                      type: string
                      example: n. 苹果
                    tags:
                      description: 标签
                      type: array
                      example:
                        - 考研
                      items:
                        type: string
                    status:
                      description: >-
                        状态，公开或非公开可选

                        @Example
                        PUBLISHED<br><br>引用自：[InterpretationStatus](/schemas/InterpretationStatus)
                      type: object
                      $ref: '#/components/schemas/InterpretationStatus'
                  required:
                    - interpretation
                    - tags
                    - status
                id:
                  description: 释义 id
                  type: string
                  example: 5a7BFf4F63612e5AD9fdebB7a50D3881
              required:
                - interpretation
                - id
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  interpretation:
                    description: 释义<br><br>引用自：[Interpretation](/schemas/Interpretation)
                    type: object
                    $ref: '#/components/schemas/Interpretation'
                required:
                  - interpretation
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 释义 id
          schema:
            description: 释义 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
    delete:
      tags:
        - 释义
        - 墨墨背单词
      operationId: >-
        maimemo.openapi.memo.interpretation.v1.InterpretationService.DeleteInterpretation
      summary: 删除释义
      requestBody: {}
      responses: {}
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 释义 id
          schema:
            description: 释义 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
  /api/v1/memo/notes:
    servers: &ref_2
      - url: https://open.maimemo.com/open
        description: 生产服务
      - url: https://open-dev.maimemo.com/open
        description: 测试服务
    get:
      tags:
        - 助记
        - 墨墨背单词
      operationId: maimemo.openapi.memo.note.v1.NoteService.ListNotes
      summary: 获取助记
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  notes:
                    description: 助记列表<br><br>引用自：[Note](/schemas/Note)
                    type: array
                    items:
                      $ref: '#/components/schemas/Note'
                required:
                  - notes
      parameters:
        - name: voc_id
          in: query
          deprecated: false
          required: true
          description: 单词 id
          schema:
            description: 单词 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
      description: 获取单词下自己创建的助记
    post:
      tags:
        - 助记
        - 墨墨背单词
      operationId: maimemo.openapi.memo.note.v1.NoteService.CreateNote
      summary: 创建助记
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                note:
                  description: ''
                  type: object
                  properties:
                    voc_id:
                      description: 单词 id
                      type: string
                      example: 5a7BFf4F63612e5AD9fdebB7a50D3881
                    note_type:
                      description: 类型
                      type: string
                      example: 谐音.
                    note:
                      description: 助记
                      type: string
                      example: apple
                  required:
                    - voc_id
                    - note_type
                    - note
              required:
                - note
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  note:
                    description: 助记<br><br>引用自：[Note](/schemas/Note)
                    type: object
                    $ref: '#/components/schemas/Note'
                required:
                  - note
      parameters: []
      security:
        - user:
            - ''
  /api/v1/memo/notes/{id}:
    servers: *ref_2
    post:
      tags:
        - 助记
        - 墨墨背单词
      operationId: maimemo.openapi.memo.note.v1.NoteService.UpdateNote
      summary: 更新助记
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                id:
                  description: 要更新的助记 ID
                  type: string
                  example: null
                note:
                  description: ''
                  type: object
                  properties:
                    note_type:
                      description: 类型
                      type: string
                      example: 谐音.
                    note:
                      description: 助记
                      type: string
                      example: apple
                  required:
                    - note_type
                    - note
              required:
                - id
                - note
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  note:
                    description: 助记<br><br>引用自：[Note](/schemas/Note)
                    type: object
                    $ref: '#/components/schemas/Note'
                required:
                  - note
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 助记 id
          schema:
            description: 助记 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
    delete:
      tags:
        - 助记
        - 墨墨背单词
      operationId: maimemo.openapi.memo.note.v1.NoteService.DeleteNote
      summary: 删除助记
      requestBody: {}
      responses: {}
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 助记 id
          schema:
            description: 助记 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
  /api/v1/memo/notepads:
    servers: &ref_3
      - url: https://open.maimemo.com/open
        description: 生产服务
      - url: https://open-dev.maimemo.com/open
        description: 测试服务
    get:
      tags:
        - 云词本
        - 墨墨背单词
      operationId: maimemo.openapi.memo.notepad.v1.NotepadService.ListNotepads
      summary: 查询云词本
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  notepads:
                    description: 云词本列表<br><br>引用自：[BriefNotepad](/schemas/BriefNotepad)
                    type: array
                    items:
                      $ref: '#/components/schemas/BriefNotepad'
                required:
                  - notepads
      parameters:
        - name: limit
          in: query
          deprecated: false
          required: false
          description: 查询数量
          schema:
            description: 查询数量
            type: integer
            example: 10
        - name: offset
          in: query
          deprecated: false
          required: false
          description: 查询跳过
          schema:
            description: 查询跳过
            type: integer
            example: 0
        - name: ids
          in: query
          deprecated: false
          required: false
          description: 词本 id 列表
          schema:
            description: 词本 id 列表
            type: array
            example:
              - 5a7BFf4F63612e5AD9fdebB7a50D3881
            items:
              type: string
      security:
        - user:
            - ''
    post:
      tags:
        - 云词本
        - 墨墨背单词
      operationId: maimemo.openapi.memo.notepad.v1.NotepadService.CreateNotepad
      summary: 创建云词本
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                notepad:
                  description: 创建数据
                  type: object
                  properties:
                    status:
                      description: >-
                        状态

                        @Example
                        PUBLISHED<br><br>引用自：[NotepadStatus](/schemas/NotepadStatus)
                      type: object
                      $ref: '#/components/schemas/NotepadStatus'
                    content:
                      description: 内容
                      type: string
                      example: apple
                    title:
                      description: 标题
                      type: string
                      example: 常用词汇
                    brief:
                      description: 简介
                      type: string
                      example: 常用
                    tags:
                      description: 标签
                      type: array
                      example:
                        - 考研
                      items:
                        type: string
                  required:
                    - status
                    - content
                    - title
                    - brief
                    - tags
              required:
                - notepad
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  notepad:
                    description: 云词本<br><br>引用自：[Notepad](/schemas/Notepad)
                    type: object
                    $ref: '#/components/schemas/Notepad'
                required:
                  - notepad
      parameters: []
      security:
        - user:
            - ''
  /api/v1/memo/notepads/{id}:
    servers: *ref_3
    get:
      tags:
        - 云词本
        - 墨墨背单词
      operationId: maimemo.openapi.memo.notepad.v1.NotepadService.GetNotepad
      summary: 获取云词本
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  notepad:
                    description: 云词本<br><br>引用自：[Notepad](/schemas/Notepad)
                    type: object
                    $ref: '#/components/schemas/Notepad'
                required:
                  - notepad
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 云词本 id
          schema:
            description: 云词本 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
    post:
      tags:
        - 云词本
        - 墨墨背单词
      operationId: maimemo.openapi.memo.notepad.v1.NotepadService.UpdateNotepad
      summary: 更新云词本
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                notepad:
                  description: 更新数据
                  type: object
                  properties:
                    status:
                      description: >-
                        状态

                        @Example
                        PUBLISHED<br><br>引用自：[NotepadStatus](/schemas/NotepadStatus)
                      type: object
                      $ref: '#/components/schemas/NotepadStatus'
                    content:
                      description: 内容
                      type: string
                      example: apple
                    title:
                      description: 标题
                      type: string
                      example: 常用词汇
                    brief:
                      description: 简介
                      type: string
                      example: 常用
                    tags:
                      description: 标签
                      type: array
                      example:
                        - 考研
                      items:
                        type: string
                  required:
                    - status
                    - content
                    - title
                    - brief
                    - tags
                id:
                  description: 云词本 id
                  type: string
                  example: 5a7BFf4F63612e5AD9fdebB7a50D3881
              required:
                - notepad
                - id
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  notepad:
                    description: 云词本<br><br>引用自：[Notepad](/schemas/Notepad)
                    type: object
                    $ref: '#/components/schemas/Notepad'
                required:
                  - notepad
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 云词本 id
          schema:
            description: 云词本 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
    delete:
      tags:
        - 云词本
        - 墨墨背单词
      operationId: maimemo.openapi.memo.notepad.v1.NotepadService.DeleteNotepad
      summary: 删除云词本
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  notepad:
                    description: 云词本<br><br>引用自：[Notepad](/schemas/Notepad)
                    type: object
                    $ref: '#/components/schemas/Notepad'
                required:
                  - notepad
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 云词本 id
          schema:
            description: 云词本 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
  /api/v1/memo/phrases:
    servers: &ref_4
      - url: https://open.maimemo.com/open
        description: 生产服务
      - url: https://open-dev.maimemo.com/open
        description: 测试服务
    get:
      tags:
        - 例句
        - 墨墨背单词
      operationId: maimemo.openapi.memo.phrase.v1.PhraseService.ListPhrases
      summary: 获取例句
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  phrases:
                    description: 例句列表<br><br>引用自：[Phrase](/schemas/Phrase)
                    type: array
                    items:
                      $ref: '#/components/schemas/Phrase'
                required:
                  - phrases
      parameters:
        - name: voc_id
          in: query
          deprecated: false
          required: true
          description: 单词 id
          schema:
            description: 单词 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
      description: 获取单词下自己创建的例句
    post:
      tags:
        - 例句
        - 墨墨背单词
      operationId: maimemo.openapi.memo.phrase.v1.PhraseService.CreatePhrase
      summary: 创建例句
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                phrase:
                  description: ''
                  type: object
                  properties:
                    voc_id:
                      description: 单词 id
                      type: string
                      example: 5a7BFf4F63612e5AD9fdebB7a50D3881
                    phrase:
                      description: 例句
                      type: string
                      example: This is an apple.
                    interpretation:
                      description: 翻译
                      type: string
                      example: 这是一个苹果。
                    tags:
                      description: 标签
                      type: array
                      example:
                        - 考研
                      items:
                        type: string
                    origin:
                      description: 来源
                      type: string
                      example: 考研
                  required:
                    - voc_id
                    - phrase
                    - interpretation
                    - tags
                    - origin
              required:
                - phrase
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  phrase:
                    description: 例句<br><br>引用自：[Phrase](/schemas/Phrase)
                    type: object
                    $ref: '#/components/schemas/Phrase'
                required:
                  - phrase
      parameters: []
      security:
        - user:
            - ''
  /api/v1/memo/phrases/{id}:
    servers: *ref_4
    post:
      tags:
        - 例句
        - 墨墨背单词
      operationId: maimemo.openapi.memo.phrase.v1.PhraseService.UpdatePhrase
      summary: 更新例句
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                phrase:
                  description: ''
                  type: object
                  properties:
                    phrase:
                      description: 例句
                      type: string
                      example: This is an apple.
                    interpretation:
                      description: 翻译
                      type: string
                      example: 这是一个苹果。
                    tags:
                      description: 标签
                      type: array
                      example:
                        - 考研
                      items:
                        type: string
                    origin:
                      description: 来源
                      type: string
                      example: 考研
                  required:
                    - phrase
                    - interpretation
                    - tags
                    - origin
                id:
                  description: 例句 id
                  type: string
                  example: 5a7BFf4F63612e5AD9fdebB7a50D3881
              required:
                - phrase
                - id
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  phrase:
                    description: 例句<br><br>引用自：[Phrase](/schemas/Phrase)
                    type: object
                    $ref: '#/components/schemas/Phrase'
                required:
                  - phrase
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 例句 id
          schema:
            description: 例句 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
    delete:
      tags:
        - 例句
        - 墨墨背单词
      operationId: maimemo.openapi.memo.phrase.v1.PhraseService.DeletePhrase
      summary: 删除例句
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  phrase:
                    description: 例句<br><br>引用自：[Phrase](/schemas/Phrase)
                    type: object
                    $ref: '#/components/schemas/Phrase'
                required:
                  - phrase
      parameters:
        - name: id
          in: path
          deprecated: false
          required: true
          description: 例句 id
          schema:
            description: 例句 id
            type: string
            example: 5a7BFf4F63612e5AD9fdebB7a50D3881
      security:
        - user:
            - ''
  /api/v1/memo/study/get_study_progress:
    servers: &ref_5
      - url: https://open.maimemo.com/open
        description: 生产服务
      - url: https://open-dev.maimemo.com/open
        description: 测试服务
    post:
      tags:
        - 学习数据（公测）
        - 墨墨背单词
      operationId: maimemo.openapi.memo.study.v1.StudyService.GetStudyProgress
      summary: 获取今日学习进度（公测）
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  progress:
                    description: 学习进度及时长<br><br>引用自：[StudyProgress](/schemas/StudyProgress)
                    type: object
                    $ref: '#/components/schemas/StudyProgress'
                required:
                  - progress
      parameters: []
      security:
        - user:
            - ''
      description: |-
        如果当日未打开 App 进行初始化则无法准确计算总数
          \
          \
        <b>公测期间不保证可用性和可能会随时调整，需要在 App 中开启自动同步</b>
  /api/v1/memo/study/get_today_items:
    servers: *ref_5
    post:
      tags:
        - 学习数据（公测）
        - 墨墨背单词
      operationId: maimemo.openapi.memo.study.v1.StudyService.GetTodayItems
      summary: 获取今日学习单词（公测）
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                is_finished:
                  description: 筛选是否已完成
                  type: boolean
                  example: false
                is_new:
                  description: 筛选是否新学单词
                  type: boolean
                  example: false
                voc_ids:
                  description: 根据单词 ID 列表查询，最多 1000，忽略其他条件
                  maxItems: 1000
                  type: array
                  example:
                    - id1
                    - id2
                  items:
                    type: string
                spellings:
                  description: 根据单词拼写列表查询，最多 1000，忽略其他条件，不可与 voc_ids 同时使用
                  maxItems: 1000
                  type: array
                  example:
                    - hello
                    - world
                  items:
                    type: string
                limit:
                  description: 最多根据学习顺序获取前 1000 条数据，默认 50
                  maximum: 1000
                  type: integer
                  example: 50
              required: []
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  today_items:
                    description: >-
                      今日学习列表<br><br>引用自：[StudyTodayItem](/schemas/StudyTodayItem)
                    type: array
                    items:
                      $ref: '#/components/schemas/StudyTodayItem'
                required:
                  - today_items
      parameters: []
      security:
        - user:
            - ''
      description: |-
        如果当日未打开 App 进行初始化则无法获取
          \
          \
        <b>公测期间不保证可用性和可能会随时调整，需要在 App 中开启自动同步</b>
  /api/v1/memo/study/query_study_records:
    servers: *ref_5
    post:
      tags:
        - 学习数据（公测）
        - 墨墨背单词
      operationId: maimemo.openapi.memo.study.v1.StudyService.QueryStudyRecords
      summary: 查询学习记录（公测）
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                next_study_date:
                  description: 根据下次学习日期筛选
                  type: object
                  properties:
                    start:
                      description: 大于等于时间，北京时区
                      type: string
                      format: ISODate
                      example: 2021-07-09T00:16:00.000Z
                    end:
                      description: 小于等于时间，北京时区
                      type: string
                      format: ISODate
                      example: 2021-07-09T00:16:00.000Z
                  required: []
                voc_ids:
                  description: 根据单词 ID 筛选，忽略其他条件
                  type: array
                  example:
                    - id1
                    - id2
                  items:
                    type: string
                spellings:
                  description: 根据单词拼写列表查询，最多 1000，忽略其他条件，不可与 voc_ids 同时使用
                  maxItems: 1000
                  type: array
                  example:
                    - hello
                    - world
                  items:
                    type: string
                tags:
                  description: 按照标签筛选，多个标签为 or 关系
                  type: string
                  enum:
                    - STICKING
                as_count:
                  description: 仅计算结果总数，不返回数据列表
                  type: boolean
                  example: false
                limit:
                  description: 最多根据下次学习日期获取前 1000 条数据，默认 50
                  maximum: 1000
                  type: integer
                  example: 50
              required: []
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  records:
                    description: >-
                      `as_count=true`
                      时为空<br><br>引用自：[StudyRecord](/schemas/StudyRecord)
                    type: array
                    items:
                      $ref: '#/components/schemas/StudyRecord'
                  count:
                    description: '`as_count=true` 时有效'
                    type: integer
                    example: 114514
                required:
                  - records
                  - count
      parameters: []
      security:
        - user:
            - ''
      description: >-
        查询场景举例

        - 获取规划总量：`as_count=true`

        - 获取未来某天要背的单词数：`next_study_date: {end: "2026-04-01T00:00:00+08:00"},
        as_count=true`

        - 获取未来某天要背的单词列表：`next_study_date: {end: "2026-04-01T00:00:00+08:00"}`

          \
        <b>公测期间不保证可用性和可能会随时调整，需要在 App 中开启自动同步</b>
  /api/v1/memo/study/add_words:
    servers: *ref_5
    post:
      tags:
        - 学习数据（公测）
        - 墨墨背单词
      operationId: maimemo.openapi.memo.study.v1.StudyService.AddWords
      summary: 添加单词（公测）
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                words:
                  description: 单词列表，最多一次添加 1000 个单词
                  maxItems: 1000
                  type: array
                  items:
                    properties:
                      id:
                        description: 单词 ID，通过查询单词接口获取
                        type: string
                        example: id1
                    required:
                      - id
                advance:
                  description: 是否一并提前复习，无等级限制
                  type: boolean
                  example: false
              required:
                - words
                - advance
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  added_count:
                    description: 成功添加的数量，单词上限不足或者已经添加过会影响成功添加的数量
                    type: integer
                    example: 114
                required:
                  - added_count
      parameters: []
      security:
        - user:
            - ''
      description: |-

        <b>公测期间不保证可用性和可能会随时调整，需要在 App 中开启自动同步</b>
  /api/v1/memo/study/advance_study:
    servers: *ref_5
    post:
      tags:
        - 学习数据（公测）
        - 墨墨背单词
      operationId: maimemo.openapi.memo.study.v1.StudyService.AdvanceStudy
      summary: 提前复习（公测）
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                voc_ids:
                  description: ''
                  maxItems: 1000
                  type: array
                  example:
                    - id1
                    - id2
                  items:
                    type: string
              required:
                - voc_ids
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  advanced_count:
                    description: 成功提前的数量，单词未加入会影响成功提前的数量
                    type: integer
                    example: 514
                required:
                  - advanced_count
      parameters: []
      security:
        - user:
            - ''
      description: |-
        将单词提前到当下马上复习，需要升级到 10 级解锁提前复习功能

        <b>公测期间不保证可用性和可能会随时调整，需要在 App 中开启自动同步</b>
  /api/v1/memo/vocabulary:
    servers: &ref_6
      - url: https://open.maimemo.com/open
        description: 生产服务
      - url: https://open-dev.maimemo.com/open
        description: 测试服务
    get:
      tags:
        - 单词
        - 墨墨背单词
      operationId: maimemo.openapi.memo.vocabulary.v1.VocabularyService.GetVocabulary
      summary: 获取单词
      requestBody: {}
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  voc:
                    description: 单词<br><br>引用自：[Vocabulary](/schemas/Vocabulary)
                    type: object
                    $ref: '#/components/schemas/Vocabulary'
                required:
                  - voc
      parameters:
        - name: spelling
          in: query
          deprecated: false
          required: true
          description: 单词拼写
          schema:
            description: 单词拼写
            type: string
            example: apple
      security:
        - user:
            - ''
  /api/v1/memo/vocabulary/query:
    servers: *ref_6
    post:
      tags:
        - 单词
        - 墨墨背单词
      operationId: maimemo.openapi.memo.vocabulary.v1.VocabularyService.ListVocabulary
      summary: 查询单词
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: 暂无文档
              properties:
                spellings:
                  description: 根据拼写查询，最多 1000
                  maxItems: 1000
                  type: array
                  example: null
                  items:
                    type: string
                ids:
                  description: 根据 id 查询，最多 1000
                  maxItems: 1000
                  type: array
                  example: null
                  items:
                    type: string
              required: []
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                description: 暂无文档
                properties:
                  voc:
                    description: <br><br>引用自：[Vocabulary](/schemas/Vocabulary)
                    type: array
                    items:
                      $ref: '#/components/schemas/Vocabulary'
                required:
                  - voc
      parameters: []
      security:
        - user:
            - ''
      description: 查询条件互斥，只能生效一个
components:
  schemas:
    MarkjiSource:
      type: string
      description: |-
        墨墨记忆卡资源来源

        - `SELF`: 自建
        - `FORK`: 派生
      enum:
        - SELF
        - FORK
    MarkjiStatus:
      type: string
      description: |-
        墨墨记忆卡资源状态

        - `NORMAL`: 正常
        - `DELETED`: 删除
        - `BLOCKED`: 封禁
      enum:
        - NORMAL
        - DELETED
        - BLOCKED
    MarkjiContentType:
      type: string
      description: |-
        墨墨记忆卡内容类型

        - `PLAIN`: 纯文本
      enum:
        - PLAIN
    MarkjiFolderItemClass:
      type: string
      description: |-
        文件夹内对象类型

        - `FOLDER`: 文件夹
        - `DECK`: 牌组
      enum:
        - FOLDER
        - DECK
    MarkjiRootDeck:
      type: object
      description: 暂无文档
      properties:
        id:
          description: 牌组 OpenAPI ID
          type: string
          example: null
        parent_id:
          description: 上游牌组 OpenAPI ID
          type: string
          example: null
        source:
          description: 牌组来源<br><br>引用自：[MarkjiSource](/schemas/MarkjiSource)
          type: object
          $ref: '#/components/schemas/MarkjiSource'
        status:
          description: 牌组状态<br><br>引用自：[MarkjiStatus](/schemas/MarkjiStatus)
          type: object
          $ref: '#/components/schemas/MarkjiStatus'
        name:
          description: 牌组名称
          type: string
          example: null
        description:
          description: 牌组简介
          type: string
          example: null
        creator:
          description: 用户 OpenAPI ID
          type: string
          example: null
        authors:
          description: 用户 OpenAPI ID 列表
          type: array
          example: null
          items:
            type: string
        revision:
          description: 牌组版本
          type: integer
          example: null
        is_private:
          description: 是否私有
          type: boolean
          example: false
        card_count:
          description: 卡片数量
          type: integer
          example: null
        chapter_count:
          description: 章节数量
          type: integer
          example: null
        created_time:
          description: 创建时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        updated_time:
          description: 更新时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
      required:
        - id
        - source
        - status
        - name
        - description
        - creator
        - authors
        - revision
        - is_private
        - card_count
        - chapter_count
        - created_time
        - updated_time
    MarkjiDeck:
      type: object
      description: 暂无文档
      properties:
        id:
          description: 牌组 OpenAPI ID
          type: string
          example: null
        parent_id:
          description: 上游牌组 OpenAPI ID
          type: string
          example: null
        source:
          description: 牌组来源<br><br>引用自：[MarkjiSource](/schemas/MarkjiSource)
          type: object
          $ref: '#/components/schemas/MarkjiSource'
        status:
          description: 牌组状态<br><br>引用自：[MarkjiStatus](/schemas/MarkjiStatus)
          type: object
          $ref: '#/components/schemas/MarkjiStatus'
        name:
          description: 牌组名称
          type: string
          example: null
        description:
          description: 牌组简介
          type: string
          example: null
        creator:
          description: 用户 OpenAPI ID
          type: string
          example: null
        authors:
          description: 用户 OpenAPI ID 列表
          type: array
          example: null
          items:
            type: string
        revision:
          description: 牌组版本
          type: integer
          example: null
        is_private:
          description: 是否私有
          type: boolean
          example: false
        card_count:
          description: 卡片数量
          type: integer
          example: null
        chapter_count:
          description: 章节数量
          type: integer
          example: null
        created_time:
          description: 创建时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        updated_time:
          description: 更新时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        root_deck:
          description: 根牌组<br><br>引用自：[MarkjiRootDeck](/schemas/MarkjiRootDeck)
          type: object
          $ref: '#/components/schemas/MarkjiRootDeck'
      required:
        - id
        - source
        - status
        - name
        - description
        - creator
        - authors
        - revision
        - is_private
        - card_count
        - chapter_count
        - created_time
        - updated_time
    MarkjiChapterset:
      type: object
      description: 暂无文档
      properties:
        id:
          description: 章节集 OpenAPI ID
          type: string
          example: null
        deck_id:
          description: 牌组 OpenAPI ID
          type: string
          example: null
        revision:
          description: 章节集版本
          type: integer
          example: null
        chapter_ids:
          description: 章节 OpenAPI ID 列表
          type: array
          example: null
          items:
            type: string
        created_time:
          description: 创建时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        updated_time:
          description: 更新时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
      required:
        - id
        - deck_id
        - revision
        - chapter_ids
        - created_time
        - updated_time
    MarkjiChapter:
      type: object
      description: 暂无文档
      properties:
        id:
          description: 章节 OpenAPI ID
          type: string
          example: null
        deck_id:
          description: 牌组 OpenAPI ID
          type: string
          example: null
        name:
          description: 章节名称
          type: string
          example: null
        revision:
          description: 章节版本
          type: integer
          example: null
        card_ids:
          description: 卡片 OpenAPI ID 列表
          type: array
          example: null
          items:
            type: string
        creator:
          description: 用户 OpenAPI ID
          type: string
          example: null
        created_time:
          description: 创建时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        updated_time:
          description: 更新时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
      required:
        - id
        - deck_id
        - name
        - revision
        - card_ids
        - creator
        - created_time
        - updated_time
    MarkjiCard:
      type: object
      description: 暂无文档
      properties:
        id:
          description: 卡片 OpenAPI ID
          type: string
          example: null
        status:
          description: 卡片状态<br><br>引用自：[MarkjiStatus](/schemas/MarkjiStatus)
          type: object
          $ref: '#/components/schemas/MarkjiStatus'
        deck_id:
          description: 牌组 OpenAPI ID
          type: string
          example: null
        parent_id:
          description: 上游卡片 OpenAPI ID
          type: string
          example: null
        root_id:
          description: 根卡片 OpenAPI ID
          type: string
          example: null
        revision:
          description: 卡片版本
          type: integer
          example: null
        content:
          description: 卡片内容
          type: string
          example: null
        content_type:
          description: 内容类型<br><br>引用自：[MarkjiContentType](/schemas/MarkjiContentType)
          type: object
          $ref: '#/components/schemas/MarkjiContentType'
        files:
          description: 卡片包含的文件<br><br>引用自：[MarkjiFile](/schemas/MarkjiFile)
          type: array
          items:
            $ref: '#/components/schemas/MarkjiFile'
        creator:
          description: 用户 OpenAPI ID
          type: string
          example: null
        source:
          description: 卡片来源<br><br>引用自：[MarkjiSource](/schemas/MarkjiSource)
          type: object
          $ref: '#/components/schemas/MarkjiSource'
        grammar_version:
          description: 语法版本
          type: integer
          example: null
        card_rids:
          description: 引用的根卡片 OpenAPI ID 列表
          type: array
          example: null
          items:
            type: string
        created_time:
          description: 创建时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        updated_time:
          description: 更新时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
      required:
        - id
        - status
        - deck_id
        - revision
        - content
        - content_type
        - files
        - creator
        - source
        - grammar_version
        - created_time
        - updated_time
    MarkjiFolderItem:
      type: object
      description: 暂无文档
      properties:
        object_id:
          description: 对象 OpenAPI ID。object_class 为 DECK 时是牌组 ID，为 FOLDER 时是文件夹 ID
          type: string
          example: null
        object_class:
          description: >-
            对象类型<br><br>引用自：[MarkjiFolderItemClass](/schemas/MarkjiFolderItemClass)
          type: object
          $ref: '#/components/schemas/MarkjiFolderItemClass'
        order:
          description: 排序值
          type: integer
          example: null
      required:
        - object_id
        - object_class
        - order
    MarkjiFolder:
      type: object
      description: 暂无文档
      properties:
        id:
          description: 文件夹 OpenAPI ID
          type: string
          example: null
        items:
          description: 文件夹内对象<br><br>引用自：[MarkjiFolderItem](/schemas/MarkjiFolderItem)
          type: array
          items:
            $ref: '#/components/schemas/MarkjiFolderItem'
        parent_id:
          description: 父文件夹 OpenAPI ID
          type: string
          example: null
        name:
          description: 文件夹名称
          type: string
          example: null
      required:
        - id
        - items
        - name
    MarkjiFile:
      type: object
      description: 暂无文档
      properties:
        id:
          description: 文件 OpenAPI ID
          type: string
          example: null
        url:
          description: 文件访问地址
          type: string
          example: null
        mime:
          description: MIME 类型
          type: string
          example: null
        size:
          description: 文件大小，单位 KB，按 4KB 对齐
          type: integer
          example: null
        info:
          description: 文件信息
          type: Object(any)
          example: null
        expire_time:
          description: 文件访问地址过期时间
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
      required:
        - id
        - url
        - mime
        - size
        - info
        - expire_time
    InterpretationStatus:
      type: string
      description: |-
        释义状态

        - `PUBLISHED`: 发布
        - `UNPUBLISHED`: 未发布
        - `DELETED`: 删除
      enum:
        - PUBLISHED
        - UNPUBLISHED
        - DELETED
    Interpretation:
      type: object
      description: 释义
      properties:
        id:
          description: id
          type: string
          example: 5a7BFf4F63612e5AD9fdebB7a50D3881
        interpretation:
          description: 释义
          type: string
          example: n. 苹果
        tags:
          description: 标签
          type: array
          example:
            - 考研
          items:
            type: string
        status:
          description: >-
            状态

            @Example
            PUBLISHED<br><br>引用自：[InterpretationStatus](/schemas/InterpretationStatus)
          type: object
          $ref: '#/components/schemas/InterpretationStatus'
        created_time:
          description: |-
            创建时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
        updated_time:
          description: |-
            更新时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
      required:
        - id
        - interpretation
        - tags
        - status
        - created_time
        - updated_time
    NoteStatus:
      type: string
      description: |-
        助记状态

        - `PUBLISHED`: 发布
        - `DELETED`: 删除
      enum:
        - PUBLISHED
        - DELETED
    Note:
      type: object
      description: 助记
      properties:
        id:
          description: id
          type: string
          example: 5a7BFf4F63612e5AD9fdebB7a50D3881
        note_type:
          description: 类型
          type: string
          example: 谐音.
        note:
          description: 助记
          type: string
          example: apple
        status:
          description: |-
            状态
            @Example PUBLISHED<br><br>引用自：[NoteStatus](/schemas/NoteStatus)
          type: object
          $ref: '#/components/schemas/NoteStatus'
        created_time:
          description: |-
            创建时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
        updated_time:
          description: |-
            更新时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
      required:
        - id
        - note_type
        - note
        - status
        - created_time
        - updated_time
    NotepadStatus:
      type: string
      description: |-
        云词本状态

        - `PUBLISHED`: 发布
        - `UNPUBLISHED`: 未发布
        - `DELETED`: 删除
      enum:
        - PUBLISHED
        - UNPUBLISHED
        - DELETED
    NotepadType:
      type: string
      description: |-
        云词本类型

        - `FAVORITE`: 我的收藏
        - `NOTEPAD`: 云词本
      enum:
        - FAVORITE
        - NOTEPAD
    NotepadParsedItem:
      type: object
      description: 云词本解析结果
      properties:
        type:
          description: 类型
          type: string
          enum:
            - CHAPTER
            - WORD
          example: CHAPTER
        data:
          description: 数据
          type: object
          properties:
            chapter:
              description: 章节
              type: string
              example: 我的章节
            word:
              description: |-
                单词
                当 type=WORD 时，该字段才有值
              type: string
              example: apple
          required:
            - chapter
      required:
        - type
        - data
    Notepad:
      type: object
      description: 云词本
      properties:
        id:
          description: id
          type: string
          example: 5a7BFf4F63612e5AD9fdebB7a50D3881
        type:
          description: |-
            类型
            @Example NOTEPAD<br><br>引用自：[NotepadType](/schemas/NotepadType)
          type: object
          $ref: '#/components/schemas/NotepadType'
        creator:
          description: 创建者 id
          type: integer
          example: 192
        status:
          description: >-
            状态

            @Example
            PUBLISHED<br><br>引用自：[NotepadStatus](/schemas/NotepadStatus)
          type: object
          $ref: '#/components/schemas/NotepadStatus'
        content:
          description: |
            内容
            - 章节模式：以 `#` 开头，井号后是章节名称，下方是该章节的单词列表，一行一个
            - 文本模式：不以 `#` 开头，不限格式，会识别尽量多的单词和短语，开头添加 `//` 则还原单词原型后再提取
          type: string
          example: apple
        title:
          description: 标题
          type: string
          example: 常用词汇
        brief:
          description: 简介
          type: string
          example: 常用
        tags:
          description: 标签
          type: array
          example:
            - 考研
          items:
            type: string
        list:
          description: 解析结果<br><br>引用自：[NotepadParsedItem](/schemas/NotepadParsedItem)
          type: array
          items:
            $ref: '#/components/schemas/NotepadParsedItem'
        created_time:
          description: |-
            创建时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
        updated_time:
          description: |-
            更新时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
      required:
        - id
        - type
        - creator
        - status
        - content
        - title
        - brief
        - tags
        - list
        - created_time
        - updated_time
    BriefNotepad:
      type: object
      description: 简要云词本
      properties:
        id:
          description: id
          type: string
          example: 5a7BFf4F63612e5AD9fdebB7a50D3881
        type:
          description: |-
            类型
            @Example NOTEPAD<br><br>引用自：[NotepadType](/schemas/NotepadType)
          type: object
          $ref: '#/components/schemas/NotepadType'
        creator:
          description: 创建者 id
          type: integer
          example: 192
        status:
          description: >-
            状态

            @Example
            PUBLISHED<br><br>引用自：[NotepadStatus](/schemas/NotepadStatus)
          type: object
          $ref: '#/components/schemas/NotepadStatus'
        title:
          description: 标题
          type: string
          example: 常用词汇
        brief:
          description: 简介
          type: string
          example: 常用
        tags:
          description: 标签
          type: array
          example:
            - 考研
          items:
            type: string
        created_time:
          description: |-
            创建时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
        updated_time:
          description: |-
            更新时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
      required:
        - id
        - type
        - creator
        - status
        - title
        - brief
        - tags
        - created_time
        - updated_time
    PhraseStatus:
      type: string
      description: |-
        例句状态

        - `PUBLISHED`: 发布
        - `DELETED`: 删除
      enum:
        - PUBLISHED
        - DELETED
    PhraseHighlightRange:
      type: object
      description: |-
        例句中的单词高亮区间
        [start, end)
      properties:
        start:
          description: 高亮起始位置
          type: integer
          example: 1
        end:
          description: 高亮结束位置（不包含）
          type: integer
          example: 10
      required:
        - start
        - end
    Phrase:
      type: object
      description: 例句
      properties:
        id:
          description: id
          type: string
          example: 5a7BFf4F63612e5AD9fdebB7a50D3881
        phrase:
          description: 例句
          type: string
          example: This is an apple.
        interpretation:
          description: 翻译
          type: string
          example: 这是一个苹果。
        tags:
          description: 标签
          type: array
          example:
            - 考研
          items:
            type: string
        highlight:
          description: >-
            例句中的单词高亮区间

            实际返回的数据是二维数组<br><br>引用自：[PhraseHighlightRange](/schemas/PhraseHighlightRange)
          type: array
          items:
            $ref: '#/components/schemas/PhraseHighlightRange'
        status:
          description: |-
            状态
            @Example PUBLISHED<br><br>引用自：[PhraseStatus](/schemas/PhraseStatus)
          type: object
          $ref: '#/components/schemas/PhraseStatus'
        created_time:
          description: |-
            创建时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
        updated_time:
          description: |-
            更新时间
            ISO 8601 格式
          type: string
          format: ISODate
          example: 2023-03-13T16:00:00.000Z
        origin:
          description: 来源
          type: string
          example: 考研
      required:
        - id
        - phrase
        - interpretation
        - tags
        - highlight
        - status
        - created_time
        - updated_time
        - origin
    StudyResponse:
      type: string
      description: |-


        - `FAMILIAR`: 认识
        - `VAGUE`: 模糊
        - `FORGET`: 忘记
        - `WELL_FAMILIAR`: 熟知
        - `CANCEL_WELL_FAMILIAR`: 取消熟知
      enum:
        - FAMILIAR
        - VAGUE
        - FORGET
        - WELL_FAMILIAR
        - CANCEL_WELL_FAMILIAR
    StudyProgress:
      type: object
      description: 暂无文档
      properties:
        finished:
          description: 已完成的单词数
          type: integer
          example: 10
        total:
          description: 今日应完成的单词数
          type: integer
          example: 20
        study_time:
          description: 今日学习时长，毫秒
          type: integer
          example: 114514
      required:
        - finished
        - total
        - study_time
    StudyTodayItem:
      type: object
      description: 今日学习单词
      properties:
        voc_id:
          description: 单词 ID
          type: string
          example: vocid
        voc_spelling:
          description: 单词拼写
          type: string
          example: apple
        order:
          description: 学习顺序
          type: integer
          example: 1
        first_response:
          description: 当天第一次反馈<br><br>引用自：[StudyResponse](/schemas/StudyResponse)
          type: object
          $ref: '#/components/schemas/StudyResponse'
        is_new:
          description: 是否是新学单词
          type: boolean
          example: false
        is_finished:
          description: 是否已完成当日学习
          type: boolean
          example: false
      required:
        - voc_id
        - voc_spelling
        - order
        - is_new
        - is_finished
    StudyRecord:
      type: object
      description: 学习记录
      properties:
        voc_id:
          description: 单词 ID
          type: string
          example: vocid
        voc_spelling:
          description: 单词拼写
          type: string
          example: apple
        add_date:
          description: 添加日期
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        first_study_date:
          description: 首次学习日期
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        last_study_date:
          description: 上次学习日期
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        next_study_date:
          description: 下次学习日期
          type: string
          format: ISODate
          example: 2021-07-09T00:16:00.000Z
        last_response:
          description: 上次反馈<br><br>引用自：[StudyResponse](/schemas/StudyResponse)
          type: object
          $ref: '#/components/schemas/StudyResponse'
        study_count:
          description: 学习次数（每日最多计入 1 次）
          type: integer
          example: 10
        tags:
          description: 标签
          type: string
          enum:
            - STICKING
            - WELL_FAMILIAR
      required:
        - voc_id
        - voc_spelling
        - add_date
        - study_count
        - tags
    Vocabulary:
      type: object
      description: 暂无文档
      properties:
        id:
          description: id
          type: string
          example: 5a7BFf4F63612e5AD9fdebB7a50D3881
        spelling:
          description: 拼写
          type: string
          example: apple
      required:
        - id
        - spelling
  securitySchemes:
    user:
      description: 需要用户身份进行请求，申请到的 token 需要放到 Header 中
      type: oauth2
