openapi: 3.1.0 info: title: OpenAPI definition version: v0 servers: - url: "" paths: /api/notebooks/{notebook}/book/blocks/{bookBlock}/reading-record: put: tags: - notebook-books-controller summary: Set reading disposition for a book block operationId: putNotebookBookBlockReadingRecord parameters: - name: notebook in: path required: true schema: type: integer - name: bookBlock in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/BookBlockReadingRecordPutRequest" responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/BookBlockReadingRecordListItem" /api/notebooks/{notebook}/book/blocks/{bookBlock}/depth: put: tags: - notebook-books-controller summary: Change depth of a book block operationId: changeBookBlockDepth parameters: - name: notebook in: path required: true schema: type: integer - name: bookBlock in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/BookBlockDepthRequest_Full" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/BookMutationResponse_Full" /api/user: get: tags: - user-controller operationId: getUserProfile responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/User" post: tags: - user-controller operationId: createUser requestBody: content: application/json: schema: $ref: "#/components/schemas/User" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/User" /api/user/generate-token: post: tags: - user-controller operationId: generateToken requestBody: content: application/json: schema: $ref: "#/components/schemas/TokenConfigDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/GeneratedTokenDTO" /api/testability/use_real_sandbox_github_and_close_all_github_issues: post: tags: - testability-rest-controller operationId: closeAllGithubIssues responses: "200": description: OK content: '*/*': schema: type: string /api/testability/trigger_exception: post: tags: - testability-rest-controller operationId: triggerException responses: "200": description: OK content: '*/*': schema: type: string /api/testability/time_travel_relative_to_now: post: tags: - testability-rest-controller operationId: timeTravelRelativeToNow requestBody: content: application/json: schema: $ref: "#/components/schemas/TimeTravelRelativeToNow" required: true responses: "200": description: OK content: '*/*': schema: type: array items: {} /api/testability/time_travel: post: tags: - testability-rest-controller operationId: timeTravel requestBody: content: application/json: schema: $ref: "#/components/schemas/TimeTravel" required: true responses: "200": description: OK content: '*/*': schema: type: array items: {} /api/testability/testability_update_user: post: tags: - testability-rest-controller operationId: testabilityUpdateUser parameters: - name: username in: query required: true schema: type: string requestBody: content: application/json: schema: type: object additionalProperties: type: string required: true responses: "200": description: OK content: '*/*': schema: type: string /api/testability/share_to_bazaar: post: tags: - testability-rest-controller operationId: shareToBazaar requestBody: content: application/json: schema: $ref: "#/components/schemas/ShareToBazaarRequest" required: true responses: "200": description: OK content: '*/*': schema: type: string /api/testability/replace_service_url: post: tags: - testability-rest-controller operationId: replaceServiceUrl requestBody: content: application/json: schema: type: object additionalProperties: type: string required: true responses: "200": description: OK /api/testability/randomizer: post: tags: - testability-rest-controller operationId: randomizer requestBody: content: application/json: schema: $ref: "#/components/schemas/Randomization" required: true responses: "200": description: OK content: '*/*': schema: type: array items: {} /api/testability/open_ai_token: post: tags: - testability-rest-controller operationId: setOpenAiToken requestBody: content: application/json: schema: type: object additionalProperties: type: string responses: "200": description: OK /api/testability/inject_notes: post: tags: - testability-rest-controller operationId: injectNotes requestBody: content: application/json: schema: $ref: "#/components/schemas/NotesTestData" required: true responses: "200": description: OK content: '*/*': schema: type: object additionalProperties: type: integer format: int32 /api/testability/inject_circle: post: tags: - testability-rest-controller operationId: injectCircle requestBody: content: application/json: schema: type: object additionalProperties: type: string required: true responses: "200": description: OK content: '*/*': schema: type: string /api/testability/inject-predefined-questions: post: tags: - testability-rest-controller operationId: injectPredefinedQuestion requestBody: content: application/json: schema: $ref: "#/components/schemas/PredefinedQuestionsTestData" required: true responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/PredefinedQuestion" /api/testability/feature_toggle: get: tags: - testability-rest-controller operationId: getFeatureToggle responses: "200": description: OK content: '*/*': schema: type: boolean post: tags: - testability-rest-controller operationId: enableFeatureToggle requestBody: content: application/json: schema: type: object additionalProperties: type: string required: true responses: "200": description: OK content: '*/*': schema: type: array items: {} /api/testability/clean_db_and_reset_testability_settings: post: tags: - testability-rest-controller operationId: resetDBAndTestabilitySettings responses: "200": description: OK content: '*/*': schema: type: string /api/subscriptions/{subscription}: post: tags: - subscription-controller operationId: updateSubscription parameters: - name: subscription in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/SubscriptionDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Subscription" /api/subscriptions/{subscription}/delete: post: tags: - subscription-controller operationId: destroySubscription parameters: - name: subscription in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: type: integer format: int32 /api/subscriptions/notebooks/{notebook}/subscribe: post: tags: - subscription-controller operationId: createSubscription parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/SubscriptionDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Subscription" /api/settings/current-model-version: get: tags: - global-settings-controller operationId: getCurrentModelVersions responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/GlobalAiModelSettings" post: tags: - global-settings-controller operationId: setCurrentModelVersions requestBody: content: application/json: schema: $ref: "#/components/schemas/GlobalAiModelSettings" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/GlobalAiModelSettings" /api/relations/move-to-notebook-root/{sourceNote}: post: tags: - relation-controller operationId: moveNoteToNotebookRoot parameters: - name: sourceNote in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/NoteRealm" /api/relations/move-to-notebook-root/{sourceNote}/{targetNotebook}: post: tags: - relation-controller operationId: moveNoteToNotebookRootInNotebook parameters: - name: sourceNote in: path required: true schema: type: integer - name: targetNotebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/NoteRealm" /api/relations/move-to-folder/{sourceNote}/{targetFolder}: post: tags: - relation-controller operationId: moveNoteToFolder parameters: - name: sourceNote in: path required: true schema: type: integer - name: targetFolder in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/NoteRealm" /api/recall-prompts/{recallPrompt}/regenerate: post: tags: - recall-prompt-controller operationId: regenerate parameters: - name: recallPrompt in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/QuestionContestResult" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/RecallQuestion" /api/recall-prompts/{recallPrompt}/contest: post: tags: - recall-prompt-controller operationId: contest parameters: - name: recallPrompt in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/QuestionContestResult" /api/recall-prompts/{recallPrompt}/answer: post: tags: - recall-prompt-controller operationId: answerQuiz parameters: - name: recallPrompt in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/AnswerDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/AnsweredQuestion" /api/recall-prompts/{recallPrompt}/answer-spelling: post: tags: - recall-prompt-controller operationId: answerSpelling parameters: - name: recallPrompt in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/AnswerSpellingDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/AnsweredQuestion" /api/predefined-questions/{note}/refine-question: post: tags: - predefined-question-controller operationId: refineQuestion parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/PredefinedQuestion" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/PredefinedQuestion" /api/predefined-questions/{note}/note-questions: get: tags: - predefined-question-controller operationId: getAllQuestionByNote parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/PredefinedQuestion" post: tags: - predefined-question-controller operationId: addQuestionManually parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/PredefinedQuestion" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/PredefinedQuestion" /api/predefined-questions/generate-question-without-save: post: tags: - predefined-question-controller operationId: generateQuestionWithoutSave parameters: - name: note in: query required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/PredefinedQuestion" /api/notes/{note}/verify-spelling: post: tags: - note-controller operationId: verifySpelling parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/AnswerSpellingDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/SpellingVerificationResult" /api/notes/{note}/semantic-search: post: tags: - search-controller operationId: semanticSearchWithin parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/SearchTerm" required: true responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/NoteSearchResult" /api/notes/{note}/search: post: tags: - search-controller operationId: searchForRelationshipTargetWithin parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/SearchTerm" required: true responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/RelationshipLiteralSearchHit" /api/notes/{note}/recall-setting: post: tags: - note-controller operationId: updateNoteRecallSetting parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteRecallSetting" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/RedirectToNoteResponse" /api/notes/{note}/images: post: tags: - note-controller operationId: uploadNoteImage parameters: - name: note in: path required: true schema: type: integer requestBody: content: multipart/form-data: schema: $ref: "#/components/schemas/NoteImageUploadDTO" responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteImageUploadResult" /api/notes/{note}/delete: post: tags: - note-controller operationId: deleteNote parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteDeleteDTO" required: true responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/NoteRealm" /api/notes/semantic-search: post: tags: - search-controller operationId: semanticSearch requestBody: content: application/json: schema: $ref: "#/components/schemas/SearchTerm" required: true responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/NoteSearchResult" /api/notes/search: post: tags: - search-controller operationId: searchForRelationshipTarget requestBody: content: application/json: schema: $ref: "#/components/schemas/SearchTerm" required: true responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/RelationshipLiteralSearchHit" /api/notebooks/{notebook}: get: tags: - notebook-controller operationId: get parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NotebookRealm" post: tags: - notebook-controller operationId: updateNotebook parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NotebookUpdateRequest" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Notebook" /api/notebooks/{notebook}/update-index: post: tags: - notebook-controller operationId: updateNotebookIndex parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK /api/notebooks/{notebook}/share: post: tags: - notebook-controller operationId: shareNotebook parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Notebook" /api/notebooks/{notebook}/reset-index: post: tags: - notebook-controller operationId: resetNotebookIndex parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK /api/notebooks/{notebook}/health/lint: post: tags: - notebook-health-controller operationId: lint parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NotebookHealthLintReport" /api/notebooks/{notebook}/health/fix: post: tags: - notebook-health-controller operationId: fix parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NotebookHealthFixRequest" required: true responses: "200": description: OK /api/notebooks/{notebook}/folders: post: tags: - notebook-controller summary: Create a folder description: Creates a folder at notebook root when no parent is specified; as a child of underFolderId when set; otherwise nested under the context note's folder when underNoteId is set (underFolderId takes precedence when both are set). operationId: createFolder parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/FolderCreationRequest" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Folder" /api/notebooks/{notebook}/folders/{folder}/move: post: tags: - notebook-controller summary: Move a folder description: "Reparents the folder within the same notebook, or moves the folder\ \ subtree to another notebook when destinationNotebookId is set. Notes keep\ \ their folderId pointing at the same folder rows; descendant folders stay\ \ under the moved subtree. A same-name folder at the destination returns 409\ \ with FOLDER_NAME_CONFLICT unless merge=true, in which case the source subtree\ \ is merged into the existing folder (including cross-notebook moves)." operationId: moveFolder parameters: - name: notebook in: path required: true schema: type: integer - name: folder in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/FolderMoveRequest" responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Folder" /api/notebooks/{notebook}/create-note: post: tags: - notebook-controller operationId: createNoteAtNotebookRoot parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteCreationDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteRealm" /api/notebooks/{notebook}/book/reorganize-layout/suggest: post: tags: - notebook-books-controller summary: "Suggest book layout depths via AI (preview only, does not persist)" operationId: suggestBookLayoutReorganization parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/BookLayoutReorganizationSuggestion" /api/notebooks/{notebook}/book/reorganize-layout/apply: post: tags: - notebook-books-controller summary: Apply AI-suggested depth changes to the book layout operationId: applyBookLayoutReorganization parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/BookLayoutReorganizationSuggestion_Full" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/BookMutationResponse_Full" /api/notebooks/{notebook}/book/blocks: post: tags: - notebook-books-controller summary: Create a child book block by splitting at an imported content row operationId: createBookBlockFromContent parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateBookBlockFromContentRequest_Full" required: true responses: "201": description: Created content: application/json: schema: $ref: "#/components/schemas/Book_Full" /api/notebooks/{notebook}/attach-book: post: tags: - notebook-books-controller summary: Attach book operationId: attachBook parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: multipart/form-data: schema: type: object properties: metadata: $ref: "#/components/schemas/AttachBookRequest_Full" file: type: string format: binary description: Book file required: - file - metadata responses: "201": description: Created content: application/json: schema: $ref: "#/components/schemas/Book_Full" /api/notebooks/create: post: tags: - notebook-controller operationId: createNotebook requestBody: content: application/json: schema: $ref: "#/components/schemas/NotebookCreationRequest" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NotebookRealm" /api/notebook-groups: post: tags: - notebook-group-controller operationId: createGroup requestBody: content: application/json: schema: $ref: "#/components/schemas/CreateNotebookGroupRequest" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NotebookGroup" /api/memory-trackers/{memoryTracker}/soft-delete: post: tags: - memory-tracker-controller operationId: softDelete parameters: - name: memoryTracker in: path required: true schema: type: integer responses: "200": description: OK /api/memory-trackers/{memoryTracker}/remove: post: tags: - memory-tracker-controller operationId: removeFromRepeating parameters: - name: memoryTracker in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/MemoryTracker" /api/memory-trackers/{memoryTracker}/re-enable: post: tags: - memory-tracker-controller operationId: reEnable parameters: - name: memoryTracker in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/MemoryTracker" /api/failure-reports/trigger: post: tags: - failure-report-controller operationId: triggerFailure responses: "200": description: OK content: '*/*': schema: type: string /api/conversation/{conversationId}/send: post: tags: - conversation-message-controller operationId: replyToConversation parameters: - name: conversationId in: path required: true schema: type: integer requestBody: content: application/json: schema: type: string required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/ConversationMessage" /api/conversation/{conversationId}/ai-reply: post: tags: - conversation-message-controller operationId: getAiReply parameters: - name: conversationId in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/SseEmitter" /api/conversation/recall-prompt/{recallPrompt}: post: tags: - conversation-message-controller operationId: startConversationAboutRecallPrompt parameters: - name: recallPrompt in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Conversation" /api/conversation/note/{note}: get: tags: - conversation-message-controller operationId: getConversationsAboutNote parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/Conversation" post: tags: - conversation-message-controller operationId: startConversationAboutNote parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: type: string required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Conversation" /api/circles: get: tags: - circle-controller operationId: index responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/Circle" post: tags: - circle-controller operationId: createCircle requestBody: content: application/json: schema: $ref: "#/components/schemas/Circle" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Circle" /api/circles/{circle}/notebooks: post: tags: - circle-controller operationId: createNotebookInCircle parameters: - name: circle in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NotebookCreationRequest" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NotebookRealm" /api/circles/join: post: tags: - circle-controller operationId: joinCircle requestBody: content: application/json: schema: $ref: "#/components/schemas/CircleJoiningByInvitation" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Circle" /api/bazaar/{bazaarNotebook}/remove: post: tags: - bazaar-controller operationId: removeFromBazaar parameters: - name: bazaarNotebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/BazaarNotebook" /api/audio/audio-to-text: post: tags: - ai-audio-controller operationId: audioToText requestBody: content: multipart/form-data: schema: $ref: "#/components/schemas/AudioUploadDTO" responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/TextFromAudioWithCallInfo" /api/assimilation: post: tags: - assimilation-controller operationId: assimilate requestBody: content: application/json: schema: $ref: "#/components/schemas/AssimilationRequestDTO" required: true responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/MemoryTracker" /api/ai/suggest-title/{note}: post: tags: - ai-controller operationId: suggestTitle parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/SuggestedTitleDTO" /api/ai/remove-refinement-suggestion/{note}: post: tags: - ai-controller summary: Remove selected layout points from note content (response only) description: Returns AI-regenerated note content in the response. Does not persist the note; the client must save the returned text (for example via the note update API). operationId: removeRefinementSuggestion parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteRefinementLayoutSelectionRequestDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/RefinedContentResponseDTO" /api/ai/generate-refinement-suggestions/{note}: post: tags: - ai-controller operationId: generateRefinementSuggestions parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteRefinementLayoutDTO" /api/ai/extract-note-preview/{note}: post: tags: - ai-controller summary: Preview note extraction (no persistence) description: "Runs AI extraction for the selected layout points and returns\ \ the suggested new note title, new note content, and updated original note\ \ content without persisting any changes." operationId: extractNotePreview parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteRefinementLayoutSelectionRequestDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteExtractionResult" /api/ai/export-extract-request/{note}: post: tags: - ai-controller summary: Export extract-note AI request JSON description: Returns the OpenAI structured-response request body for note extraction without calling OpenAI. operationId: exportExtractRequest parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteRefinementLayoutSelectionRequestDTO" required: true responses: "200": description: OK content: '*/*': schema: type: object additionalProperties: {} /api/ai/create-extracted-note/{note}: post: tags: - ai-controller summary: Create note from edited extraction fields description: "Persists a new note and updates the original note using the provided\ \ extraction fields (typically from extract-note-preview, possibly edited\ \ by the user)." operationId: createExtractedNote parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteExtractionResult" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteRealm" /api/admin/question-generation-batch/submit-recent-recall-users: post: tags: - admin-question-generation-batch-controller operationId: submitRecentRecallUsersForQuestionGenerationBatch responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/QuestionGenerationBatchSubmissionSummaryDTO" /api/admin/question-generation-batch/resume-existing-batches: post: tags: - admin-question-generation-batch-controller operationId: resumeExistingQuestionGenerationBatches responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/QuestionGenerationBatchAdminStatusDTO" /api/user/{user}: patch: tags: - user-controller operationId: updateUser parameters: - name: user in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/UserDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/User" /api/text_content/{note}/title: patch: tags: - text-content-controller operationId: updateNoteTitle parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteUpdateTitleDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteRealm" /api/text_content/{note}/content: patch: tags: - text-content-controller operationId: updateNoteContent parameters: - name: note in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteUpdateContentDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteRealm" /api/subscriptions/{subscription}/notebook-group: patch: tags: - subscription-controller operationId: updateSubscriptionGroup parameters: - name: subscription in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateNotebookGroupRequest" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Subscription" /api/notes/{note}/undo-delete: patch: tags: - note-controller operationId: undoDeleteNote parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteRealm" /api/notebooks/{notebook}/readme-content: patch: tags: - notebook-controller summary: Update notebook readme content directly description: Saves the given markdown (with optional YAML frontmatter) as the notebook container's readmeContent field. Blank content clears the field. operationId: updateNotebookReadmeContent parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteUpdateContentDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NotebookRealm" /api/notebooks/{notebook}/notebook-group: patch: tags: - notebook-controller operationId: updateNotebookGroup parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateNotebookGroupRequest" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Notebook" /api/notebooks/{notebook}/move-to-circle/{circle}: patch: tags: - notebook-controller operationId: moveToCircle parameters: - name: notebook in: path required: true schema: type: integer - name: circle in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Notebook" /api/notebooks/{notebook}/folders/{folder}: get: tags: - notebook-controller summary: Get folder page payload description: "Notebook chrome, folder metadata, parent folder id when nested,\ \ and optional folder readme content when present." operationId: getFolderPage parameters: - name: notebook in: path required: true schema: type: integer - name: folder in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/FolderRealm" delete: tags: - notebook-controller summary: Dissolve a folder description: "Removes the folder row. Direct notes and subfolders are promoted\ \ to the dissolved folder's parent (or notebook root). Deeper descendants\ \ stay under the promoted subfolder. When merge=true, clashing promoted subfolders\ \ are merged into the existing same-name sibling instead of returning 409." operationId: dissolveFolder parameters: - name: notebook in: path required: true schema: type: integer - name: folder in: path required: true schema: type: integer - name: merge in: query required: false schema: type: boolean default: false responses: "200": description: OK patch: tags: - notebook-controller summary: Rename a folder description: Changes the folder display name under its current parent. Sibling name conflicts are rejected. operationId: renameFolder parameters: - name: notebook in: path required: true schema: type: integer - name: folder in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/FolderRenameRequest" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Folder" /api/notebooks/{notebook}/folders/{folder}/readme-content: patch: tags: - notebook-controller summary: Update folder readme content directly description: Saves the given markdown (with optional YAML frontmatter) as the folder container's readmeContent field. Blank content clears the field. operationId: updateFolderReadmeContent parameters: - name: notebook in: path required: true schema: type: integer - name: folder in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/NoteUpdateContentDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/FolderRealm" /api/notebooks/{notebook}/book/reading-position: get: tags: - notebook-books-controller summary: Get book reading position operationId: getNotebookBookReadingPosition parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: Saved position for the current user content: application/json: schema: $ref: "#/components/schemas/BookUserLastReadPosition" "204": description: No saved position yet (book exists; user has not stored a snapshot) patch: tags: - notebook-books-controller summary: Save book reading position operationId: patchNotebookBookReadingPosition parameters: - name: notebook in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/BookLastReadPositionRequest" required: true responses: "204": description: No Content /api/memory-trackers/{memoryTracker}/property-key: patch: tags: - memory-tracker-controller operationId: updatePropertyKey parameters: - name: memoryTracker in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: "#/components/schemas/UpdateMemoryTrackerPropertyKeyDTO" required: true responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/MemoryTracker" /api/memory-trackers/{memoryTracker}/mark-as-recalled: patch: tags: - memory-tracker-controller operationId: markAsRecalled parameters: - name: memoryTracker in: path required: true schema: type: integer - name: successful in: query required: true schema: type: boolean responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/MemoryTracker" /api/conversation/{conversationId}/read: patch: tags: - conversation-message-controller operationId: markConversationAsRead parameters: - name: conversationId in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/ConversationMessage" /install: get: tags: - install-controller operationId: install parameters: - name: win32 in: query required: false schema: type: boolean default: false responses: "200": description: OK content: '*/*': schema: type: string /api/wikidata/search: get: tags: - wikidata-controller operationId: searchWikidata parameters: - name: search in: query required: true schema: type: string responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/WikidataSearchEntity" /api/wikidata/entity-data/{wikidataId}: get: tags: - wikidata-controller operationId: fetchWikidataEntityDataByID parameters: - name: wikidataId in: path required: true schema: type: string responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/WikidataEntityData" /api/user/token-info: get: tags: - user-controller operationId: getTokenInfo responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/UserToken" delete: tags: - user-controller operationId: revokeToken responses: "200": description: OK /api/user/recall-stats: get: tags: - user-controller operationId: getRecallStats parameters: - name: timezone in: query required: true schema: type: string responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/RecallStatsDTO" /api/user/question-generation-batch-schedule: get: tags: - user-controller operationId: getQuestionGenerationBatchSchedule responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/QuestionGenerationBatchUserScheduleDTO" /api/user/menu-data: get: tags: - user-controller operationId: getMenuData parameters: - name: timezone in: query required: true schema: type: string responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/MenuDataDTO" /api/user/get-tokens: get: tags: - user-controller operationId: getTokens responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/UserToken" /api/user/current-user-info: get: tags: - current-user-info-controller operationId: currentUserInfo responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/CurrentUserInfo" /api/testability/github_issues: get: tags: - testability-rest-controller operationId: githubIssues responses: "200": description: OK content: '*/*': schema: type: array items: type: object additionalProperties: {} /api/recalls/recalling: get: tags: - recalls-controller operationId: recalling parameters: - name: timezone in: query required: true schema: type: string - name: dueindays in: query required: false schema: type: integer format: int32 responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/DueMemoryTrackers" /api/recalls/previously-answered: get: tags: - recalls-controller operationId: previouslyAnswered parameters: - name: timezone in: query required: true schema: type: string responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/AnsweredQuestion" /api/predefined-questions/{note}/export-question-generation: get: tags: - predefined-question-controller operationId: exportQuestionGeneration parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: application/json: schema: type: object additionalProperties: {} /api/notes/{note}: get: tags: - note-controller operationId: showNote parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteRealm" /api/notes/{note}/note-info: get: tags: - note-controller operationId: getNoteInfo parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteRecallInfo" /api/notes/{note}/graph: get: tags: - note-controller operationId: getGraph parameters: - name: note in: path required: true schema: type: integer - name: tokenLimit in: query description: Approximate token budget for focus note content plus related note content combined (bodies). required: true schema: type: integer format: int32 responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/FocusContextResult" /api/notes/{note}/ai-context-markdown: get: tags: - note-controller operationId: getAiContextMarkdown parameters: - name: note in: path required: true schema: type: integer - name: tokenLimit in: query description: Approximate token budget for focus note content plus related note content combined (bodies). required: true schema: type: integer format: int32 responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NoteAiContextMarkdown" /api/notes/recent: get: tags: - note-controller operationId: getRecentNotes responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/NoteSearchResult" /api/notebooks: get: tags: - notebook-controller operationId: myNotebooks responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/NotebooksViewedByUser" /api/notebooks/{notebook}/folders/index: get: tags: - notebook-controller description: Folder rows (including parentFolderId) for building folder trees and paths. Ordered by id. operationId: listNotebookFolderIndex parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/Folder" /api/notebooks/{notebook}/folder-listing: get: tags: - notebook-controller summary: List notes and folders at notebook root or under a parent folder description: "Without parent: notes with no folder assignment and top-level\ \ folders (notebook root scope). With parent: notes assigned to that folder\ \ and its immediate child folders. The parent folder must belong to the notebook." operationId: listNotebookFolderListing parameters: - name: notebook in: path required: true schema: type: integer - name: parent in: query required: false schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/FolderListing" /api/notebooks/{notebook}/export: get: tags: - notebook-controller summary: Export notebook as a Markdown zip operationId: exportNotebook parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: application/zip: schema: type: string format: byte /api/notebooks/{notebook}/book: get: tags: - notebook-books-controller operationId: getBook parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Book_Full" delete: tags: - notebook-books-controller summary: Delete book operationId: deleteBook parameters: - name: notebook in: path required: true schema: type: integer responses: "204": description: No Content /api/notebooks/{notebook}/book/reading-records: get: tags: - notebook-books-controller summary: List reading records for the notebook book (current user) operationId: getNotebookBookReadingRecords parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/BookBlockReadingRecordListItem" /api/notebooks/{notebook}/book/file: get: tags: - notebook-books-controller operationId: getBookFile parameters: - name: notebook in: path required: true schema: type: integer responses: "200": description: OK content: application/pdf: schema: type: string format: byte application/epub+zip: schema: type: string format: byte /api/memory-trackers/{memoryTracker}: get: tags: - memory-tracker-controller operationId: showMemoryTracker parameters: - name: memoryTracker in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/MemoryTracker" /api/memory-trackers/{memoryTracker}/threshold-exceeded: get: tags: - memory-tracker-controller operationId: getThresholdExceeded parameters: - name: memoryTracker in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/ThresholdExceededResult" /api/memory-trackers/{memoryTracker}/recall-prompts: get: tags: - memory-tracker-controller operationId: getRecallPrompts parameters: - name: memoryTracker in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/RecallPromptHistoryItem" /api/memory-trackers/{memoryTracker}/question: get: tags: - memory-tracker-controller operationId: askAQuestion parameters: - name: memoryTracker in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/RecallQuestion" /api/memory-trackers/recently-recalled: get: tags: - memory-tracker-controller operationId: getRecentlyRecalled responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/MemoryTracker" /api/memory-trackers/recent: get: tags: - memory-tracker-controller operationId: getRecentMemoryTrackers responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/MemoryTracker" /api/healthcheck: get: tags: - health-check-controller operationId: ping responses: "200": description: OK content: '*/*': schema: type: string /api/failure-reports: get: tags: - failure-report-controller operationId: failureReports responses: "200": description: OK content: '*/*': schema: type: object /api/failure-reports/{failureReport}: get: tags: - failure-report-controller operationId: showFailureReport parameters: - name: failureReport in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/FailureReportForView" /api/data_upgrade: get: tags: - health-check-controller operationId: dataUpgrade responses: "200": description: OK content: '*/*': schema: type: array items: {} /api/conversation/{conversationId}: get: tags: - conversation-message-controller operationId: getConversation parameters: - name: conversationId in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/Conversation" /api/conversation/{conversationId}/messages: get: tags: - conversation-message-controller operationId: getConversationMessages parameters: - name: conversationId in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/ConversationMessage" /api/conversation/{conversationId}/export: get: tags: - conversation-message-controller operationId: exportConversation parameters: - name: conversationId in: path required: true schema: type: integer responses: "200": description: OK content: application/json: schema: type: object additionalProperties: {} /api/conversation/all: get: tags: - conversation-message-controller operationId: getConversationsOfCurrentUser responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/ConversationListItem" /api/circles/{circle}: get: tags: - circle-controller operationId: showCircle parameters: - name: circle in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/CircleForUserView" /api/books/{book}/file: get: tags: - books-controller summary: Download book source file operationId: getBookFileByBook parameters: - name: book in: path required: true schema: type: integer responses: "200": description: OK content: application/pdf: schema: type: string format: byte application/epub+zip: schema: type: string format: byte /api/bazaar: get: tags: - bazaar-controller operationId: bazaar responses: "200": description: OK content: '*/*': schema: type: array items: $ref: "#/components/schemas/BazaarNotebook" /api/assimilation/next: get: tags: - assimilation-controller operationId: next parameters: - name: timezone in: query required: true schema: type: string responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/AssimilationNextDTO" /api/ai/export-refinement-layout-request/{note}: get: tags: - ai-controller summary: Export refinement-layout AI request JSON description: Returns the OpenAI structured-response request body for note refinement layout generation (breakdown) without calling OpenAI. operationId: exportRefinementLayoutRequest parameters: - name: note in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: type: object additionalProperties: {} /api/ai/dummy: get: tags: - ai-controller operationId: dummyEntryToGenerateDataTypesThatAreRequiredInEventStream responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/DummyForGeneratingTypes" /api/ai/available-gpt-models: get: tags: - ai-controller operationId: getAvailableGptModels responses: "200": description: OK content: '*/*': schema: type: array items: type: string /api/admin/users: get: tags: - admin-user-controller operationId: listUsers parameters: - name: pageIndex in: query required: false schema: type: integer format: int32 default: 0 - name: pageSize in: query required: false schema: type: integer format: int32 default: 10 responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/UserListingPage" /api/admin/question-generation-batch/status: get: tags: - admin-question-generation-batch-controller operationId: getQuestionGenerationBatchStatus responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/QuestionGenerationBatchAdminStatusDTO" /api/user/token/{tokenId}: delete: tags: - user-controller operationId: deleteToken parameters: - name: tokenId in: path required: true schema: type: integer responses: "200": description: OK /api/notebooks/{notebook}/book/blocks/{bookBlock}: delete: tags: - notebook-books-controller summary: Cancel a book block (merge content to previous) operationId: cancelBookBlock parameters: - name: notebook in: path required: true schema: type: integer - name: bookBlock in: path required: true schema: type: integer responses: "200": description: OK content: '*/*': schema: $ref: "#/components/schemas/BookMutationResponse_Full" /api/memory-trackers/{memoryTracker}/recall-prompts/unanswered: delete: tags: - memory-tracker-controller operationId: deleteUnansweredRecallPrompts parameters: - name: memoryTracker in: path required: true schema: type: integer responses: "200": description: OK /api/failure-reports/delete: delete: tags: - failure-report-controller operationId: deleteFailureReports requestBody: content: application/json: schema: type: array items: type: integer format: int32 required: true responses: "200": description: OK components: schemas: BookBlockReadingRecordPutRequest: type: object properties: status: type: string description: Reading disposition for the book block's direct content enum: - READ - SKIMMED - SKIPPED required: - status BookBlockReadingRecordListItem: type: object properties: bookBlockId: type: string status: type: string completedAt: type: string format: date-time required: - bookBlockId - completedAt - status BookBlockDepthRequest_Full: type: object properties: direction: type: string enum: - INDENT - OUTDENT pattern: INDENT|OUTDENT required: - direction BookBlockMutationResponse_Full: type: object properties: id: type: integer format: int32 depth: type: integer format: int32 description: Nesting depth in the book layout; root-level blocks are 0. title: type: string contentLocators: type: array description: Locators for this block; present only when geometry changed (e.g. cancel merge). items: oneOf: - $ref: "#/components/schemas/EpubLocator_Full" - $ref: "#/components/schemas/PdfLocator_Full" required: - depth - id - title BookMutationResponse_Full: type: object properties: id: type: integer format: int32 bookName: type: string format: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time blocks: type: array description: "Book blocks in depth-first preorder (parent before descendants,\ \ then siblings). Order matches ascending layout_sequence in persistence." items: $ref: "#/components/schemas/BookBlockMutationResponse_Full" notebookId: type: string required: - blocks - bookName - format - id - notebookId ContentLocator_Full: discriminator: propertyName: type mapping: PdfLocator_Full: "#/components/schemas/PdfLocator_Full" EpubLocator_Full: "#/components/schemas/EpubLocator_Full" properties: type: type: string required: - type EpubLocator_Full: allOf: - $ref: "#/components/schemas/ContentLocator_Full" - type: object properties: href: type: string fragment: type: string required: - href PdfLocator_Full: allOf: - $ref: "#/components/schemas/ContentLocator_Full" - type: object properties: pageIndex: type: integer format: int32 bbox: type: array items: type: number format: double contentBlockId: type: integer format: int32 derivedTitle: type: string required: - bbox - pageIndex Circle: type: object properties: id: type: integer format: int32 name: type: string maxLength: 255 minLength: 1 required: - id - name Ownership: type: object properties: id: type: integer format: int32 circle: $ref: "#/components/schemas/Circle" ownerName: type: string User: type: object properties: id: type: integer format: int32 name: type: string externalIdentifier: type: string ownership: $ref: "#/components/schemas/Ownership" dailyAssimilationCount: type: integer format: int32 spaceIntervals: type: string healthRemoveEmptyFoldersDefault: type: boolean admin: type: boolean required: - externalIdentifier - id - name TokenConfigDTO: type: object properties: label: type: string maxLength: 100 minLength: 0 required: - label GeneratedTokenDTO: type: object properties: id: type: integer format: int32 token: type: string label: type: string required: - id - label - token TimeTravelRelativeToNow: type: object properties: hours: type: integer format: int32 TimeTravel: type: object properties: travel_to: type: string ShareToBazaarRequest: type: object properties: notebookName: type: string required: - notebookName Randomization: type: object properties: choose: type: string enum: - first - last - seed seed: type: integer format: int32 NoteTestData: type: object properties: Title: type: string Content: type: string Skip Memory Tracking: type: boolean Remember Spelling: type: boolean Image Url: type: string Image Mask: type: string Folder: type: string description: "Notebook-local folder path (segments separated by /). E2E/testability\ \ only: missing folder rows are created here, then the note is assigned\ \ that folder. Production note APIs do not accept or infer folder paths." NotesTestData: type: object properties: noteTestData: type: array items: $ref: "#/components/schemas/NoteTestData" externalIdentifier: type: string writeOnly: true circleName: type: string writeOnly: true notebookName: type: string required: - notebookName PredefinedQuestionTestData: type: object properties: Note Title: type: string Question: type: string Answer: type: string One Wrong Choice: type: string PredefinedQuestionsTestData: type: object properties: notebookName: type: string predefinedQuestionTestData: type: array items: $ref: "#/components/schemas/PredefinedQuestionTestData" MultipleChoicesQuestion: type: object properties: questionStem: type: string responseChoices: type: array items: type: string required: - questionStem - responseChoices PredefinedQuestion: type: object properties: id: type: integer format: int32 multipleChoicesQuestion: $ref: "#/components/schemas/MultipleChoicesQuestion" correctAnswerIndex: type: integer format: int32 contextSeed: type: integer format: int64 testedFocus: type: string validationRationale: type: string required: - id - multipleChoicesQuestion SubscriptionDTO: type: object properties: dailyTargetOfNewNotes: type: integer format: int32 Notebook: type: object properties: id: type: integer format: int32 notebookSettings: $ref: "#/components/schemas/NotebookSettings" creatorId: type: string name: type: string circle: $ref: "#/components/schemas/Circle" description: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time readmeContent: type: string required: - createdAt - id - name - notebookSettings - updatedAt NotebookSettings: type: object properties: skipMemoryTrackingEntirely: type: boolean Subscription: type: object properties: name: type: string id: type: integer format: int32 dailyTargetOfNewNotes: type: integer format: int32 user: $ref: "#/components/schemas/User" notebook: $ref: "#/components/schemas/Notebook" fromDTO: $ref: "#/components/schemas/SubscriptionDTO" writeOnly: true required: - id GlobalAiModelSettings: type: object properties: questionGenerationModel: type: string evaluationModel: type: string othersModel: type: string Folder: type: object properties: id: type: integer format: int32 readmeContent: type: string name: type: string maxLength: 512 minLength: 1 createdAt: type: string format: date-time updatedAt: type: string format: date-time parentFolderId: type: integer format: int32 description: Parent folder id when nested; omitted at notebook root. required: - createdAt - id - name - updatedAt Note: type: object properties: noteTopology: $ref: "#/components/schemas/NoteTopology" content: type: string id: type: integer format: int32 deletedAt: type: string format: date-time readOnly: true required: - id - noteTopology NoteRealm: type: object properties: id: type: integer format: int32 note: $ref: "#/components/schemas/Note" notebookRealm: $ref: "#/components/schemas/NotebookRealm" description: "Notebook chrome: entity plus optional catalog hints and optional\ \ notebook readme content." ancestorFolders: type: array description: Folders from notebook root outward; see each realm for trail semantics. items: $ref: "#/components/schemas/Folder" references: type: array items: $ref: "#/components/schemas/NoteTopology" wikiTitles: type: array items: $ref: "#/components/schemas/WikiTitle" scopedReadmeContent: type: string description: Full markdown of the container readme that supplies the nearest non-blank title_pattern (inner scope toward notebook root). Omitted when none applies. required: - id - note - notebookRealm NoteTopology: type: object properties: id: type: integer format: int32 title: type: string minLength: 1 createdAt: type: string format: date-time updatedAt: type: string format: date-time required: - id - title NotebookRealm: type: object description: "Notebook chrome: entity plus optional catalog hints (attached\ \ book, readonly), and optional container-owned readme markdown." properties: notebook: $ref: "#/components/schemas/Notebook" hasAttachedBook: type: boolean readonly: type: boolean readmeContent: type: string description: Container-owned notebook readme markdown (populated by migration from legacy container note). Omitted when absent. required: - notebook WikiTitle: type: object properties: linkText: type: string targetToken: type: string displayText: type: string noteId: type: integer format: int32 required: - displayText - linkText - noteId - targetToken QuestionContestResult: type: object properties: advice: type: string rejected: type: boolean RecallQuestion: type: object properties: id: type: integer format: int32 notebook: $ref: "#/components/schemas/Notebook" multipleChoicesQuestion: $ref: "#/components/schemas/MultipleChoicesQuestion" spellingQuestion: $ref: "#/components/schemas/SpellingQuestion" required: - id - notebook SpellingQuestion: type: object properties: stem: type: string notebook: $ref: "#/components/schemas/Notebook" AnswerDTO: type: object properties: choiceIndex: type: integer format: int32 thinkingTimeMs: type: integer format: int32 Answer: type: object properties: id: type: integer format: int32 choiceIndex: type: integer format: int32 correct: type: boolean thinkingTimeMs: type: integer format: int32 spellingAnswer: type: string matchedNoteId: type: integer format: int64 outcome: type: string enum: - CORRECT - WRONG - ACCIDENTAL_MATCH - OVERLAP required: - correct - id AnsweredQuestion: type: object properties: id: type: integer format: int32 questionType: type: string enum: - MCQ - SPELLING memoryTrackerId: type: integer format: int32 recalledNote: $ref: "#/components/schemas/RecalledNote" answer: $ref: "#/components/schemas/Answer" predefinedQuestion: $ref: "#/components/schemas/PredefinedQuestion" overlap: type: boolean matchedNotes: type: array items: $ref: "#/components/schemas/NoteTopology" required: - answer - id - memoryTrackerId - questionType - recalledNote RecalledNote: type: object properties: noteTopology: $ref: "#/components/schemas/NoteTopology" notebookId: type: integer format: int32 ancestorFolders: type: array items: $ref: "#/components/schemas/Folder" propertyKey: type: string required: - noteTopology - notebookId AnswerSpellingDTO: type: object properties: spellingAnswer: type: string thinkingTimeMs: type: integer format: int32 SpellingVerificationResult: type: object properties: correct: type: boolean SearchTerm: type: object properties: searchKey: type: string allMyNotebooksAndSubscriptions: type: boolean allMyCircles: type: boolean required: - searchKey NoteSearchResult: type: object properties: noteTopology: $ref: "#/components/schemas/NoteTopology" notebookId: type: integer format: int32 notebookName: type: string description: Name of the notebook this result belongs to distance: type: number format: float required: - noteTopology - notebookId RelationshipLiteralSearchHit: type: object properties: hitKind: type: string enum: - NOTE - FOLDER - NOTEBOOK noteSearchResult: $ref: "#/components/schemas/NoteSearchResult" description: Present when hitKind is NOTE folderId: type: integer format: int32 description: Present when hitKind is FOLDER folderName: type: string description: Present when hitKind is FOLDER notebookId: type: integer format: int32 description: Notebook id for a folder or notebook hit notebookName: type: string description: Notebook display name for a folder or notebook hit distance: type: number format: float description: "Match score for folder or notebook literal hit (0 exact, 0.9\ \ partial)" required: - hitKind NoteRecallSetting: type: object properties: rememberSpelling: type: boolean skipMemoryTracking: type: boolean level: type: integer format: int32 RedirectToNoteResponse: type: object properties: noteId: type: integer format: int32 notebookId: type: integer format: int32 NoteImageUploadDTO: type: object properties: uploadImage: type: string format: binary required: - uploadImage NoteImageUploadResult: type: object properties: imagePath: type: string description: "Path suitable for the note frontmatter `image:` scalar (e.g.\ \ /attachments/images/{id}/{filename})." required: - imagePath NoteDeleteDTO: type: object properties: referenceHandling: type: string enum: - REMOVE_FROM_PROPERTIES - LEAVE_DEAD_LINKS - REDUCE_TO_SOURCE_PROPERTY sourcePropertyKey: type: string required: - referenceHandling NotebookUpdateRequest: type: object properties: skipMemoryTrackingEntirely: type: boolean description: type: string maxLength: 500 minLength: 0 name: type: string maxLength: 150 minLength: 0 pattern: "^[^\\\\/:]*$" HealthFindingGroup: type: object properties: ruleId: type: string description: Stable rule id title: type: string description: Human-readable rule title severity: type: string description: Rule severity enum: - error - warning - info autoFixable: type: boolean description: Whether findings in this group can be auto-fixed items: type: array description: Leaf findings for this group items: $ref: "#/components/schemas/HealthFindingItem" children: type: array description: Nested finding groups (e.g. per-note dead links) items: $ref: "#/components/schemas/HealthFindingGroup" required: - autoFixable - ruleId - severity - title HealthFindingItem: type: object properties: folderId: type: integer format: int32 description: Target folder id when the finding refers to a folder noteId: type: integer format: int32 description: Target note id when the finding refers to a note label: type: string description: Short display label for the finding target message: type: string description: Optional human-readable detail message wikiLinkToken: type: string description: Optional wiki-link token for dead-link findings NotebookHealthLintReport: type: object properties: groups: type: array description: "Finding groups, typically one per health rule" items: $ref: "#/components/schemas/HealthFindingGroup" NotebookHealthFixRequest: type: object properties: removeEmptyFolders: type: boolean description: Must be true to bulk-purge fully empty folder trees required: - removeEmptyFolders FolderCreationRequest: type: object description: "Create a folder under notebook root, nested under an explicit\ \ parent folder, or nested under the folder of a context note." properties: name: type: string description: Display name for the new folder maxLength: 512 minLength: 0 pattern: "^[^\\\\/:]*$" underFolderId: type: integer format: int32 description: "When set, the new folder is created as a direct child of this\ \ folder. Must belong to the target notebook. Takes precedence over underNoteId\ \ when both are set." underNoteId: type: integer format: int32 description: "When set (and underFolderId is not), the new folder is a child\ \ of this note's folder (or notebook root when the note has no folder).\ \ Must belong to the target notebook." required: - name FolderMoveRequest: type: object description: "Move a folder to a new parent in the same notebook, or to another\ \ notebook when destinationNotebookId is set. Omit newParentFolderId or set\ \ it to null to place the folder at notebook root." properties: newParentFolderId: type: integer format: int32 description: "Target parent folder id. When null or omitted, the folder\ \ is moved to notebook root." destinationNotebookId: type: integer format: int32 description: "Destination notebook id for a cross-notebook move. When null\ \ or omitted, the folder stays in the path notebook." merge: type: boolean description: "When true, merges the folder into an existing same-name sibling\ \ at the destination instead of returning 409. Subfolder name clashes\ \ are resolved recursively." NoteCreationDTO: type: object properties: newTitle: type: string maxLength: 150 minLength: 0 pattern: "^[^\\\\/:]*$" referenceHandling: type: string enum: - UPDATE_VISIBLE_TEXT - KEEP_VISIBLE_TEXT folderId: type: integer format: int32 content: type: string required: - newTitle BlockDepthSuggestion: type: object properties: id: type: integer format: int32 depth: type: integer format: int32 required: - depth - id BookLayoutReorganizationSuggestion: type: object properties: blocks: type: array items: $ref: "#/components/schemas/BlockDepthSuggestion" required: - blocks BlockDepthSuggestion_Full: type: object properties: id: type: integer format: int32 depth: type: integer format: int32 required: - depth - id BookLayoutReorganizationSuggestion_Full: type: object properties: blocks: type: array items: $ref: "#/components/schemas/BlockDepthSuggestion_Full" required: - blocks CreateBookBlockFromContentRequest_Full: type: object properties: fromBookContentBlockId: type: integer format: int32 description: Split the owning book block at this imported content row; that row and following rows become a new child block. structuralTitle: type: string description: "When set, used as the new block structural title (trimmed,\ \ max length enforced). Otherwise the title is derived from the first\ \ moved content block." maxLength: 512 minLength: 0 required: - fromBookContentBlockId BookBlock_Full: type: object properties: id: type: integer format: int32 depth: type: integer format: int32 description: Nesting depth in the book layout; root-level blocks are 0. title: type: string contentLocators: type: array items: oneOf: - $ref: "#/components/schemas/EpubLocator_Full" - $ref: "#/components/schemas/PdfLocator_Full" contentBlocks: type: array items: $ref: "#/components/schemas/BookContentBlock_Full" required: - contentBlocks - contentLocators - depth - id - title BookContentBlock_Full: type: object properties: id: type: integer format: int32 type: type: string pageIdx: type: integer format: int32 required: - id - type Book_Full: type: object properties: id: type: integer format: int32 bookName: type: string format: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time blocks: type: array description: "Book blocks in depth-first preorder (parent before descendants,\ \ then siblings). Order matches ascending layout_sequence in persistence." items: $ref: "#/components/schemas/BookBlock_Full" notebookId: type: string required: - blocks - bookName - format - id - notebookId AttachBookLayoutNodeRequest_Full: type: object properties: title: type: string maxLength: 512 minLength: 0 children: type: array items: $ref: "#/components/schemas/AttachBookLayoutNodeRequest_Full" contentBlocks: type: array items: type: object additionalProperties: {} required: - title AttachBookLayoutRequest_Full: type: object properties: roots: type: array items: $ref: "#/components/schemas/AttachBookLayoutNodeRequest_Full" minItems: 1 required: - roots AttachBookRequest_Full: type: object description: Attach book metadata as JSON properties: bookName: type: string maxLength: 512 minLength: 0 format: type: string description: Book file format enum: - pdf - epub minLength: 1 layout: $ref: "#/components/schemas/AttachBookLayoutRequest_Full" contentList: type: array items: {} required: - bookName - format NotebookCreationRequest: type: object properties: newTitle: type: string maxLength: 150 minLength: 0 pattern: "^[^\\\\/:]*$" referenceHandling: type: string enum: - UPDATE_VISIBLE_TEXT - KEEP_VISIBLE_TEXT description: type: string maxLength: 500 minLength: 0 required: - newTitle CreateNotebookGroupRequest: type: object properties: name: type: string maxLength: 255 minLength: 0 circleId: type: integer format: int32 required: - name NotebookGroup: type: object properties: id: type: integer format: int32 name: type: string createdAt: type: string format: date-time required: - id MemoryTracker: type: object properties: id: type: integer format: int32 note: $ref: "#/components/schemas/Note" lastRecalledAt: type: string format: date-time nextRecallAt: type: string format: date-time assimilatedAt: type: string format: date-time recallCount: type: integer format: int32 forgettingCurveIndex: type: number format: float removedFromTracking: type: boolean spelling: type: boolean propertyKey: type: string recalledNote: $ref: "#/components/schemas/RecalledNote" required: - id - nextRecallAt - note ConversationMessage: type: object properties: id: type: integer format: int32 message: type: string sender: $ref: "#/components/schemas/User" readByReceiver: type: boolean createdAt: type: string format: date-time required: - id - message SseEmitter: type: object properties: timeout: type: integer format: int64 Conversation: type: object properties: id: type: integer format: int32 subject: $ref: "#/components/schemas/ConversationSubject" subjectOwnership: $ref: "#/components/schemas/Ownership" conversationInitiator: $ref: "#/components/schemas/User" createdAt: type: string format: date-time updatedAt: type: string format: date-time required: - createdAt - id - updatedAt ConversationSubject: type: object properties: note: $ref: "#/components/schemas/Note" recallPrompt: $ref: "#/components/schemas/AnsweredQuestion" CircleJoiningByInvitation: type: object properties: invitationCode: type: string maxLength: 20 minLength: 10 required: - invitationCode BazaarNotebook: type: object properties: id: type: integer format: int32 notebook: $ref: "#/components/schemas/Notebook" required: - id - notebook AudioUploadDTO: type: object properties: uploadAudioFile: type: string format: binary additionalProcessingInstructions: type: string previousNoteContentToAppendTo: type: string midSpeech: type: boolean isMidSpeech: type: boolean NoteContentCompletion: type: object properties: content: type: string required: - content TextFromAudioWithCallInfo: type: object properties: completionFromAudio: $ref: "#/components/schemas/NoteContentCompletion" rawSRT: type: string endTimestamp: type: string AssimilationRequestDTO: type: object properties: noteId: type: integer format: int32 skipMemoryTracking: type: boolean propertyKey: type: string SuggestedTitleDTO: type: object properties: title: type: string NoteRefinementLayout: type: object properties: items: type: array items: $ref: "#/components/schemas/NoteRefinementLayoutItem" required: - items NoteRefinementLayoutItem: type: object properties: id: type: string minLength: 1 text: type: string minLength: 1 alreadyExtracted: type: boolean children: type: array items: $ref: "#/components/schemas/NoteRefinementLayoutItem" required: - alreadyExtracted - children - id - text NoteRefinementLayoutSelectionRequestDTO: type: object properties: layout: $ref: "#/components/schemas/NoteRefinementLayout" selectedItemIds: type: array items: type: string RefinedContentResponseDTO: type: object properties: content: type: string NoteRefinementLayoutDTO: type: object properties: items: type: array items: $ref: "#/components/schemas/NoteRefinementLayoutItem" NoteExtractionResult: type: object properties: newNoteTitle: type: string newNoteContent: type: string updatedOriginalNoteContent: type: string required: - newNoteContent - newNoteTitle - updatedOriginalNoteContent QuestionGenerationBatchSubmissionSummaryDTO: type: object properties: consideredUserCount: type: integer format: int32 submittedCount: type: integer format: int32 failedCount: type: integer format: int32 skippedCount: type: integer format: int32 QuestionGenerationBatchAdminStatusDTO: type: object properties: batchCountsByStatus: type: object additionalProperties: type: integer format: int64 requestCountsByStatus: type: object additionalProperties: type: integer format: int64 openAiTokenConfigured: type: boolean prodProfileActive: type: boolean schedulerActive: type: boolean lastScheduledMaintenanceStartedAt: type: string format: date-time lastScheduledMaintenanceFinishedAt: type: string format: date-time lastScheduledMaintenanceError: type: string lastManualMaintenanceStartedAt: type: string format: date-time lastManualMaintenanceFinishedAt: type: string format: date-time lastManualMaintenanceError: type: string UserDTO: type: object properties: name: type: string maxLength: 100 minLength: 1 dailyAssimilationCount: type: integer format: int32 spaceIntervals: type: string pattern: "^\\d+((,\\s*\\d+){1,1000})*$" healthRemoveEmptyFoldersDefault: type: boolean required: - name NoteUpdateTitleDTO: type: object properties: newTitle: type: string maxLength: 150 minLength: 0 pattern: "^[^\\\\/:]*$" referenceHandling: type: string enum: - UPDATE_VISIBLE_TEXT - KEEP_VISIBLE_TEXT required: - newTitle NoteUpdateContentDTO: type: object properties: content: type: string UpdateNotebookGroupRequest: type: object properties: notebookGroupId: type: integer format: int32 FolderRenameRequest: type: object description: Rename a folder in place within its current parent. properties: name: type: string description: New display name for the folder maxLength: 512 minLength: 0 pattern: "^[^\\\\/:]*$" required: - name FolderRealm: type: object description: "Notebook chrome plus folder row for loading the folder page: same\ \ shared realm sidebar as NoteRealm (without note-level fields), plus folder\ \ identity, optional parent folder id, and optional container-owned folder\ \ readme markdown." properties: notebookRealm: $ref: "#/components/schemas/NotebookRealm" description: "Notebook chrome: entity plus optional catalog hints and optional\ \ notebook readme content." ancestorFolders: type: array description: Folders from notebook root outward; see each realm for trail semantics. items: $ref: "#/components/schemas/Folder" scopedReadmeContent: type: string description: Full markdown of the container readme that supplies the nearest non-blank title_pattern (inner scope toward notebook root). Omitted when none applies. folder: $ref: "#/components/schemas/Folder" parentFolderId: type: integer format: int32 description: Parent folder id when this folder is nested; omitted at notebook root. readmeContent: type: string description: Container-owned folder readme markdown (populated by migration from legacy container note). Omitted when absent. required: - folder - notebookRealm BookLastReadPositionRequest: type: object properties: locator: $ref: "#/components/schemas/ContentLocator_Full" selectedBookBlockId: type: - integer - "null" format: int32 description: Selected book block id for reading UI; omit or null to leave the stored value unchanged UpdateMemoryTrackerPropertyKeyDTO: type: object description: Rename a property memory tracker's frontmatter key in place. properties: propertyKey: type: string description: New frontmatter property key for this tracker minLength: 1 required: - propertyKey WikidataSearchEntity: type: object properties: id: type: string label: type: string description: type: string required: - label WikidataEntityData: type: object properties: WikidataTitleInEnglish: type: string WikipediaEnglishUrl: type: string required: - WikidataTitleInEnglish - WikipediaEnglishUrl UserToken: type: object properties: id: type: integer format: int32 userId: type: integer format: int32 label: type: string required: - id - label AmPmResponseTime: type: object properties: morningMs: type: integer format: int64 morningSamples: type: integer format: int32 afternoonMs: type: integer format: int64 afternoonSamples: type: integer format: int32 eveningMs: type: integer format: int64 eveningSamples: type: integer format: int32 nightMs: type: integer format: int64 nightSamples: type: integer format: int32 DayAvgResponseTime: type: object properties: date: type: string avgMs: type: integer format: int64 sampleSize: type: integer format: int32 DayCount: type: object properties: date: type: string count: type: integer format: int32 DayRetention: type: object properties: date: type: string retentionPct: type: number format: double correctCount: type: integer format: int32 answeredCount: type: integer format: int32 sampleSize: type: integer format: int32 HeadlineStats: type: object properties: totalReviewsAllTime: type: integer format: int32 totalReviews365: type: integer format: int32 reviewsToday: type: integer format: int32 retentionPct365: type: number format: double currentStreak: type: integer format: int32 longestStreak: type: integer format: int32 totalTimeSpentMs: type: integer format: int64 bestHour: type: integer format: int32 bestHourRetentionPct: type: number format: double worstHour: type: integer format: int32 worstHourRetentionPct: type: number format: double HourRetention: type: object properties: hour: type: integer format: int32 retentionPct: type: number format: double correctCount: type: integer format: int32 answeredCount: type: integer format: int32 RecallStatsDTO: type: object properties: calendar: type: array items: $ref: "#/components/schemas/DayCount" trend: type: array items: $ref: "#/components/schemas/DayAvgResponseTime" retentionTrend: type: array items: $ref: "#/components/schemas/DayRetention" amPm: $ref: "#/components/schemas/AmPmResponseTime" weekdayHourCounts: type: array items: type: array items: type: integer format: int32 weekdayHourCorrect: type: array items: type: array items: type: integer format: int32 hourlyRetention: type: array items: $ref: "#/components/schemas/HourRetention" totals: $ref: "#/components/schemas/HeadlineStats" QuestionGenerationBatchUserScheduleDTO: type: object properties: nextScheduledAt: type: string format: date-time reason: type: string AssimilationCountDTO: type: object properties: dueCount: type: integer format: int32 assimilatedCountOfTheDay: type: integer format: int32 totalUnassimilatedCount: type: integer format: int32 DueMemoryTrackers: type: object properties: totalAssimilatedCount: type: integer format: int32 currentRecallWindowEndAt: type: string format: date-time toRepeat: type: array items: $ref: "#/components/schemas/MemoryTrackerLite" dueInDays: type: integer format: int32 required: - totalAssimilatedCount MemoryTrackerLite: type: object properties: memoryTrackerId: type: integer format: int32 spelling: type: boolean propertyKey: type: string required: - memoryTrackerId - spelling MenuDataDTO: type: object properties: assimilationCount: $ref: "#/components/schemas/AssimilationCountDTO" recallStatus: $ref: "#/components/schemas/DueMemoryTrackers" unreadConversations: type: array items: $ref: "#/components/schemas/ConversationMessage" CurrentUserInfo: type: object properties: user: $ref: "#/components/schemas/User" externalIdentifier: type: string NoteRecallInfo: type: object properties: memoryTrackers: type: array items: $ref: "#/components/schemas/MemoryTracker" recallSetting: $ref: "#/components/schemas/NoteRecallSetting" FocusContextFocusNote: type: object properties: notebook: type: string title: type: string folderPath: type: string depth: type: integer format: int32 outgoingLinks: type: array items: type: string inboundReferences: type: array items: type: string sampleSiblings: type: array items: type: string createdAt: type: string format: date-time content: type: string contentTruncated: type: boolean FocusContextNote: type: object properties: notebook: type: string title: type: string folderPath: type: string depth: type: integer format: int32 retrievalPath: type: array items: type: string edgeType: type: string enum: - OutgoingWikiLink - InboundWikiReference - FolderSibling createdAt: type: string format: date-time content: type: string contentTruncated: type: boolean FocusContextResult: type: object properties: focusNote: $ref: "#/components/schemas/FocusContextFocusNote" relatedNotes: type: array items: $ref: "#/components/schemas/FocusContextNote" NoteAiContextMarkdown: type: object properties: markdown: type: string NotebookCatalogGroupItem: allOf: - $ref: "#/components/schemas/NotebookCatalogItem" - type: object properties: id: type: integer format: int32 name: type: string createdAt: type: string format: date-time notebooks: type: array items: $ref: "#/components/schemas/NotebookRealm" required: - createdAt - id - name - notebooks NotebookCatalogItem: discriminator: propertyName: type mapping: notebook: "#/components/schemas/NotebookCatalogNotebookItem" notebookGroup: "#/components/schemas/NotebookCatalogGroupItem" subscribedNotebook: "#/components/schemas/NotebookCatalogSubscribedNotebookItem" properties: type: type: string required: - type NotebookCatalogNotebookItem: allOf: - $ref: "#/components/schemas/NotebookCatalogItem" - type: object properties: notebook: $ref: "#/components/schemas/Notebook" hasAttachedBook: type: boolean required: - notebook NotebookCatalogSubscribedNotebookItem: allOf: - $ref: "#/components/schemas/NotebookCatalogItem" - type: object properties: notebook: $ref: "#/components/schemas/Notebook" subscriptionId: type: integer format: int32 hasAttachedBook: type: boolean required: - notebook - subscriptionId NotebooksViewedByUser: type: object properties: notebooks: type: array items: $ref: "#/components/schemas/NotebookRealm" catalogItems: type: array items: oneOf: - $ref: "#/components/schemas/NotebookCatalogGroupItem" - $ref: "#/components/schemas/NotebookCatalogNotebookItem" - $ref: "#/components/schemas/NotebookCatalogSubscribedNotebookItem" subscriptions: type: array items: $ref: "#/components/schemas/SubscriptionForNotebooksListing" required: - catalogItems - notebooks SubscriptionForNotebooksListing: type: object properties: id: type: integer format: int32 dailyTargetOfNewNotes: type: integer format: int32 user: $ref: "#/components/schemas/User" notebook: $ref: "#/components/schemas/Notebook" hasAttachedBook: type: boolean name: type: string required: - dailyTargetOfNewNotes - id - notebook FolderListing: type: object description: Note topologies and child folders in a structural listing scope (e.g. notebook root or a folder). properties: noteTopologies: type: array items: $ref: "#/components/schemas/NoteTopology" folders: type: array items: $ref: "#/components/schemas/Folder" BookUserLastReadPosition: type: object properties: id: type: integer format: int32 locator: $ref: "#/components/schemas/ContentLocator_Full" selectedBookBlockId: type: - integer - "null" format: int32 required: - id - locator ThresholdExceededResult: type: object properties: thresholdExceeded: type: boolean RecallPromptHistoryItem: type: object properties: id: type: integer format: int32 questionType: type: string enum: - MCQ - SPELLING questionGeneratedTime: type: string format: date-time isContested: type: boolean answerTime: type: string format: date-time answer: $ref: "#/components/schemas/Answer" predefinedQuestion: $ref: "#/components/schemas/PredefinedQuestion" multipleChoicesQuestion: $ref: "#/components/schemas/MultipleChoicesQuestion" required: - id - questionGeneratedTime - questionType FailureReport: type: object properties: id: type: integer format: int32 errorName: type: string errorDetail: type: string issueNumber: type: integer format: int32 createDatetime: type: string format: date-time githubIssue: $ref: "#/components/schemas/GithubIssue" required: - createDatetime - errorDetail - errorName FailureReportForView: type: object properties: failureReport: $ref: "#/components/schemas/FailureReport" githubIssueUrl: type: string GithubIssue: type: object properties: title: type: string body: type: string ConversationListItem: type: object properties: id: type: integer format: int32 subject: type: string partnerName: type: string required: - id - subject CircleForUserView: type: object properties: id: type: integer format: int32 name: type: string invitationCode: type: string notebooks: $ref: "#/components/schemas/NotebooksViewedByUser" members: type: array items: $ref: "#/components/schemas/UserForOtherUserView" required: - id - invitationCode - members - name - notebooks UserForOtherUserView: type: object properties: name: type: string AssimilationNextDTO: type: object properties: nextUnit: $ref: "#/components/schemas/AssimilationNextUnitDTO" counts: $ref: "#/components/schemas/AssimilationCountDTO" AssimilationNextUnitDTO: type: object properties: noteId: type: integer format: int32 propertyKey: type: string DummyForGeneratingTypes: type: object properties: noteContentCompletion: $ref: "#/components/schemas/NoteContentCompletion" titleReplacement: $ref: "#/components/schemas/TitleReplacement" TitleReplacement: type: object properties: newTitle: type: string maxLength: 150 minLength: 1 required: - newTitle UserForListing: type: object properties: id: type: integer format: int32 name: type: string noteCount: type: integer format: int64 memoryTrackerCount: type: integer format: int64 lastNoteTime: type: string format: date-time lastAssimilationTime: type: string format: date-time lastRecallTime: type: string format: date-time UserListingPage: type: object properties: users: type: array items: $ref: "#/components/schemas/UserForListing" pageIndex: type: integer format: int32 pageSize: type: integer format: int32 totalCount: type: integer format: int64 totalPages: type: integer format: int32