{"openapi":"3.1.0","info":{"title":"bytecode.news API","description":"Content hub and knowledge management for the JVM ecosystem. Advisory version headers are supported: clients may send 'Accept-Version' and responses include 'Content-Version' and resolved 'Accept-Version'.","version":"0.1.0"},"servers":[{"url":"https://api.bytecode.news","description":"Generated server url"}],"paths":{"/posts/{id}":{"get":{"tags":["Posts"],"summary":"Get a post by ID","description":"Returns full post detail by its UUIDv7 identifier. Draft posts are only visible to their author and admins.","operationId":"getPostById","parameters":[{"name":"id","in":"path","description":"Post UUIDv7","required":true,"schema":{"type":"string","default":"##default"}}],"responses":{"200":{"description":"Post detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}},"put":{"tags":["Posts"],"summary":"Edit a post","description":"Updates an existing post's title, content, tags, and/or categories. Editing is admin-only. Edits re-render HTML from the updated markdown source. If a `summary` is provided, it is persisted as the post excerpt.","operationId":"editPost","parameters":[{"name":"id","in":"path","description":"Post UUIDv7","required":true,"schema":{"type":"string","default":"##default"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditContentHttpRequest"}}},"required":true},"responses":{"200":{"description":"Post updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Post not found or deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/comments/{id}":{"put":{"tags":["Comments"],"summary":"Edit a comment within the edit window","operationId":"editComment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditCommentHttpRequest"}}},"required":true},"responses":{"200":{"description":"Comment updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Not authorized or edit window expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Comment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/auth/profile":{"put":{"tags":["Authentication"],"summary":"Update the authenticated user's profile","operationId":"editProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditProfileRequest"}}},"required":true},"responses":{"200":{"description":"Updated user principal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPrincipal","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/admin/users/{username}/unsuspend":{"put":{"tags":["Admin - User Management"],"summary":"Unsuspend a user account","operationId":"unsuspendAccount","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Account unsuspended","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"/admin/users/{username}/suspend":{"put":{"tags":["Admin - User Management"],"summary":"Suspend a user account","operationId":"suspendAccount","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Account suspended","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"/admin/users/{username}/role":{"put":{"tags":["Admin - User Management"],"summary":"Change a user's role","operationId":"changeRole","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Role updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPrincipal","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Insufficient privileges","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/admin/posts/{id}":{"put":{"tags":["Admin - Post Management"],"summary":"Admin edit a post","operationId":"editPost_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditContentHttpRequest"}}},"required":true},"responses":{"200":{"description":"Post updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["Admin - Post Management"],"summary":"Delete a post (soft by default, hard with ?hard=true)","operationId":"deletePost","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"hard","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Post deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentOperationConfirmation","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/admin/posts/{id}/approve":{"put":{"tags":["Admin - Post Management"],"summary":"Approve a draft post and set publication date","operationId":"approvePost","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveContentHttpRequest"}}},"required":true},"responses":{"200":{"description":"Post approved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/webhooks/github":{"post":{"tags":["git-hub-webhook-controller"],"summary":"Receive GitHub webhook deliveries","description":"Validates X-Hub-Signature-256, deduplicates deliveries, and fans out supported GitHub events.","operationId":"receive","parameters":[{"name":"X-Hub-Signature-256","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-GitHub-Event","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-GitHub-Delivery","in":"header","required":false,"schema":{"type":"string"}},{"name":"Content-Type","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"202":{"description":"Delivery accepted"},"400":{"description":"Malformed payload or repository metadata"},"401":{"description":"Signature mismatch"}}}},"/rss/items/{id}/access":{"post":{"tags":["RSS Aggregator"],"summary":"Record a UI-driven access of a stored RSS item","operationId":"recordAccess","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Access tracking accepted"}}}},"/posts":{"get":{"tags":["Posts"],"summary":"List published posts","description":"Returns a paginated list of posts that are approved, not deleted, and have a publishedAt date in the past. Authenticated users also see their own drafts interleaved in the results.","operationId":"listPosts","parameters":[{"name":"page","in":"query","description":"Zero-based page index","required":false,"schema":{"type":"string","default":"##default"},"example":0},{"name":"size","in":"query","description":"Number of posts per page","required":false,"schema":{"type":"string","default":"##default"},"example":20},{"name":"category","in":"query","description":"Filter by category name","required":false,"schema":{"type":"string","default":"##default"}},{"name":"tag","in":"query","description":"Filter by tag name","required":false,"schema":{"type":"string","default":"##default"}}],"responses":{"200":{"description":"Paginated list of published posts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentListResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}},"post":{"tags":["Posts"],"summary":"Create a new blog post draft","description":"Submits a new post as a DRAFT awaiting admin approval. Authentication is required unless anonymous submission is enabled (see GET /features for the anonymousSubmission flag). Authenticated users must have a verified email. If a `summary` is provided, it is persisted as the post excerpt. Otherwise an excerpt is derived heuristically. Includes honeypot and timing-based spam prevention - frontends should include the 'website' field as a CSS-hidden input (left empty) and set 'formLoadedAt' to Date.now() when the form renders.","operationId":"createPost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContentHttpRequest"}}},"required":true},"responses":{"201":{"description":"Post created as draft","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContentResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"400":{"description":"Validation error (blank title, blank content, or unverified email)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Authentication required (when anonymous submission is disabled)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/posts/{year}/{month}/{slug}/comments":{"get":{"tags":["Comments"],"summary":"Get threaded comments for a post","operationId":"getComments","parameters":[{"name":"year","in":"path","required":true,"schema":{"type":"integer","format":"int32","default":"##default","maximum":3000,"minimum":2007}},{"name":"month","in":"path","required":true,"schema":{"type":"integer","format":"int32","default":"##default","maximum":12,"minimum":1}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Comment thread","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentThreadResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}},"post":{"tags":["Comments"],"summary":"Add a comment to a post","operationId":"createComment","parameters":[{"name":"year","in":"path","required":true,"schema":{"type":"integer","format":"int32","default":"##default","maximum":3000,"minimum":2007}},{"name":"month","in":"path","required":true,"schema":{"type":"integer","format":"int32","default":"##default","maximum":12,"minimum":1}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommentHttpRequest"}}},"required":true},"responses":{"201":{"description":"Comment created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Post or parent comment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/posts/{id}/access":{"post":{"tags":["Posts"],"summary":"Record a UI-driven access of a blog post","operationId":"recordPostAccess","parameters":[{"name":"id","in":"path","description":"Post UUIDv7","required":true,"schema":{"type":"string","default":"##default"}}],"responses":{"202":{"description":"Access tracking accepted"}}}},"/posts/derive-tags":{"post":{"tags":["Posts"],"summary":"Suggest tags heuristically from unsaved draft content","description":"Returns non-persistent tag suggestions using deterministic heuristics (no AI call). Available to all callers.","operationId":"suggestTags","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestTagsHttpRequest"}}},"required":true},"responses":{"200":{"description":"Suggested tags","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestTagsResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/posts/derive-summary":{"post":{"tags":["Posts"],"summary":"Derive a summary heuristically from unsaved draft content","description":"Returns a non-persistent summary generated from title + markdown content. Requires authentication. The returned value is the same text shape used for persisted excerpts unless manually overridden.","operationId":"deriveSummary","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveSummaryHttpRequest"}}},"required":true},"responses":{"200":{"description":"Derived summary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveSummaryResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/mcp":{"get":{"tags":["mcp-controller"],"operationId":"info","responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"string"}}}}}},"post":{"tags":["mcp-controller"],"operationId":"handle","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/auth/refresh":{"post":{"tags":["Authentication"],"summary":"Refresh an expired JWT token using a refresh token cookie","operationId":"refresh","responses":{"200":{"description":"Token refreshed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Invalid or expired refresh token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/auth/otp/verify":{"post":{"tags":["Authentication"],"summary":"Verify a one-time sign-in code","operationId":"verifyOtp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtpVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Authentication successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Invalid or expired code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/auth/otp/request":{"post":{"tags":["Authentication"],"summary":"Request a one-time sign-in code","operationId":"requestOtp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtpRequest"}}},"required":true},"responses":{"202":{"description":"Code sent if email is valid","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/auth/logout":{"post":{"tags":["Authentication"],"summary":"Log out the current session","operationId":"logout","responses":{"204":{"description":"Logged out"}}}},"/admin/rss/opml/import":{"post":{"tags":["Admin - RSS"],"summary":"Import RSS feeds from an OPML or plain text upload","description":"Accepts a multipart file field named `file`. OPML is parsed first; non-OPML files fall back to line-by-line URL extraction.","operationId":"importOpml","requestBody":{"content":{"text/plain":{"schema":{"type":"string"}},"application/xml":{"schema":{"type":"string"}},"text/xml":{"schema":{"type":"string"}},"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}},"required":true},"responses":{"200":{"description":"Import summary","content":{"application/json":{"schema":{"type":"string","additionalProperties":{"default":"##default"},"default":"##default"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/admin/posts/{id}/derive-tags":{"post":{"tags":["Admin - Post Management"],"summary":"Derive AI tag suggestions from unsaved editor content","operationId":"deriveTags","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveTagsHttpRequest"}}},"required":true},"responses":{"200":{"description":"Derived tags","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeriveTagsResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"400":{"description":"Invalid input or AI unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/admin/categories":{"post":{"tags":["Admin - Category Management"],"summary":"Create a new category","operationId":"createCategory","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCategoryRequest"}}},"required":true},"responses":{"201":{"description":"Category created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCategoryResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/taxonomy":{"get":{"tags":["Taxonomy"],"summary":"List taxonomy tags, categories, and aggregate union counts","operationId":"getTaxonomy","responses":{"200":{"description":"Taxonomy snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomySnapshot","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/ssr/posts/{year}/{month}/{slug}":{"get":{"tags":["ssr-controller"],"operationId":"post","parameters":[{"name":"year","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"month","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/ssr/pages/{slug}":{"get":{"tags":["ssr-controller"],"operationId":"page","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/ssr/":{"get":{"tags":["ssr-controller"],"operationId":"home","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"OK","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"tags":["sitemap-controller"],"operationId":"sitemap","responses":{"200":{"description":"OK","content":{"application/xml":{"schema":{"type":"string"}}}}}}},"/rss/items":{"get":{"tags":["RSS Aggregator"],"summary":"List stored RSS items","operationId":"items","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}},{"name":"feed","in":"query","required":false,"schema":{"type":"string"}},{"name":"title","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated stored RSS items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RssAggregatedItemsResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/rss/feeds":{"get":{"tags":["RSS Aggregator"],"summary":"List active RSS feed sources","operationId":"feeds","responses":{"200":{"description":"Active RSS feed sources available to the aggregator UI","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RssFeedSourcesResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/posts/{year}/{month}/{slug}":{"get":{"tags":["Posts"],"summary":"Get a published post by slug","description":"Returns full post detail including rendered HTML, tags, categories, and comment count. Draft posts are only visible to their author and admins.","operationId":"getPostBySlug","parameters":[{"name":"year","in":"path","description":"Publication year","required":true,"schema":{"type":"string","default":"##default"},"example":2026},{"name":"month","in":"path","description":"Publication month (1-12)","required":true,"schema":{"type":"string","default":"##default"},"example":3},{"name":"slug","in":"path","description":"URL-safe slug derived from the post title","required":true,"schema":{"type":"string","default":"##default"},"example":"my-post"}],"responses":{"200":{"description":"Post detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Post not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/posts/search":{"get":{"tags":["Posts"],"summary":"Search published posts","description":"Full-text search across post titles (weighted higher) and excerpts. Only published, non-deleted posts are searched. Results are ranked by relevance. Blank queries return an empty list.","operationId":"searchPosts","parameters":[{"name":"q","in":"query","description":"Search query","required":true,"schema":{"type":"string","default":"##default"},"example":"virtual threads"},{"name":"page","in":"query","description":"Zero-based page index","required":false,"schema":{"type":"string","default":"##default"},"example":0},{"name":"size","in":"query","description":"Number of results per page","required":false,"schema":{"type":"string","default":"##default"},"example":20}],"responses":{"200":{"description":"Search results ranked by relevance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentListResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/pages/{slug}":{"get":{"tags":["page-controller"],"operationId":"getPage","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/logs":{"get":{"tags":["Logs"],"summary":"Get one day of logs for a provenance","operationId":"getDayLogs","parameters":[{"name":"provenance","in":"query","required":true,"schema":{"type":"string"}},{"name":"day","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Log entries for day","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogDayResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Provenance not found or not authorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/logs/provenances":{"get":{"tags":["Logs"],"summary":"List browseable log provenances for the current user","operationId":"listProvenances","responses":{"200":{"description":"Filtered provenance list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogProvenanceListResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}}}},"/karma/leaderboard":{"get":{"tags":["karma-controller"],"operationId":"leaderboard","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":10}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KarmaLeaderboardResponse"}}}}}}},"/feed.atom":{"get":{"tags":["blog-feed-controller"],"operationId":"feed","responses":{"200":{"description":"OK","content":{"application/xml":{"schema":{"type":"string"}}}}}}},"/feed.xml":{"get":{"tags":["blog-feed-controller"],"operationId":"feed_1","responses":{"200":{"description":"OK","content":{"application/xml":{"schema":{"type":"string"}}}}}}},"/features":{"get":{"tags":["features-controller"],"operationId":"getFeatures","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturesResponse"}}}}}}},"/factoids":{"get":{"tags":["factoid-controller"],"operationId":"list","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FactoidListResponse"}}}}}}},"/factoids/{selector}":{"get":{"tags":["factoid-controller"],"operationId":"get","parameters":[{"name":"selector","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FactoidDetailResponse"}}}}}}},"/categories":{"get":{"tags":["Categories"],"summary":"List active categories","operationId":"listCategories","responses":{"200":{"description":"List of active categories","content":{"application/json":{"schema":{"type":"array","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"items":{"$ref":"#/components/schemas/CategorySummary","contains":{"default":"##default"},"default":"##default","unevaluatedItems":{"default":"##default"}},"unevaluatedItems":{"default":"##default"}}}}}}}},"/blog/rss.xml":{"get":{"tags":["rss-feed-controller"],"operationId":"rssFeed","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/blog/atom.xml":{"get":{"tags":["rss-feed-controller"],"operationId":"atomFeed","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/auth/session":{"get":{"tags":["Authentication"],"summary":"Validate the current session token","operationId":"session","responses":{"200":{"description":"Authenticated user principal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPrincipal","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/auth/export":{"get":{"tags":["Authentication"],"summary":"Export the authenticated user's data","operationId":"exportUserData","responses":{"200":{"description":"User data export","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"/admin/users":{"get":{"tags":["Admin - User Management"],"summary":"List erased user sentinels","operationId":"listByStatus","parameters":[{"name":"status","in":"query","required":true,"schema":{"type":"string","enum":["ACTIVE","SUSPENDED","ERASED"]}}],"responses":{"200":{"description":"Erased user sentinels","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"/admin/users/{username}/export":{"get":{"tags":["Admin - User Management"],"summary":"Export a user's data for admin review","operationId":"exportUserData_1","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"User data export","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"/admin/rss/opml":{"get":{"tags":["Admin - RSS"],"summary":"Export active RSS feeds as OPML","operationId":"export","responses":{"200":{"description":"OPML export of active feeds","content":{"application/xml":{"schema":{"type":"string","additionalProperties":{"default":"##default"},"default":"##default"}}}},"401":{"description":"Not authenticated","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/admin/posts/pending":{"get":{"tags":["Admin - Post Management"],"summary":"List pending draft posts for review","operationId":"listPending","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":20}},{"name":"deleted","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Paginated list of draft posts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentListResponse","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/auth/account":{"delete":{"tags":["Authentication"],"summary":"Erase the authenticated user's account","operationId":"deleteAccount","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"/admin/users/{username}":{"delete":{"tags":["Admin - User Management"],"summary":"Erase a user account (admin-initiated)","operationId":"eraseAccount","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Account erased","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"/admin/users/{username}/purge":{"delete":{"tags":["Admin - User Management"],"summary":"Purge all content from an erased user sentinel","operationId":"purgeErasedContent","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content purged","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}},"/admin/comments/{id}":{"delete":{"tags":["Admin - Comment Management"],"summary":"Delete a comment (soft by default, hard with ?hard=true)","operationId":"deleteComment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"hard","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Comment deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentOperationConfirmation","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Comment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}},"/admin/categories/{id}":{"delete":{"tags":["Admin - Category Management"],"summary":"Soft-delete a category","operationId":"deleteCategory","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Category deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentOperationConfirmation","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"403":{"description":"Admin access required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}},"404":{"description":"Category not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetail","additionalProperties":{"default":"##default"},"contains":{"default":"##default"},"default":"##default","items":{"default":"##default"},"unevaluatedItems":{"default":"##default"}}}}}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"EditContentHttpRequest":{"type":"object","properties":{"title":{"type":"string"},"markdownSource":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"categoryIds":{"type":"array","items":{"type":"string","format":"uuid"}},"summary":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"sortOrder":{"type":"integer","format":"int32"}}},"ContentDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"slug":{"type":"string"},"renderedHtml":{"type":"string"},"excerpt":{"type":"string"},"authorId":{"type":"string","format":"uuid"},"authorDisplayName":{"type":"string"},"status":{"type":"string","enum":["DRAFT","APPROVED"]},"publishedAt":{"type":"string","format":"date-time"},"sortOrder":{"type":"integer","format":"int32"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"commentCount":{"type":"integer","format":"int32"},"tags":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}},"markdownSource":{"type":"string"}}},"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}},"EditCommentHttpRequest":{"type":"object","properties":{"markdownSource":{"type":"string"}}},"CommentDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"postId":{"type":"string","format":"uuid"},"authorDisplayName":{"type":"string"},"renderedHtml":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"EditProfileRequest":{"type":"object","properties":{"displayName":{"type":"string"},"email":{"type":"string"}}},"UserPrincipal":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"username":{"type":"string"},"displayName":{"type":"string"},"role":{"type":"string","enum":["GUEST","USER","ADMIN","SUPER_ADMIN"]}}},"RoleUpdateRequest":{"type":"object","properties":{"newRole":{"type":"string","enum":["GUEST","USER","ADMIN","SUPER_ADMIN"]}}},"ApproveContentHttpRequest":{"type":"object","properties":{"publishedAt":{"type":"string","format":"date-time"}}},"CreateContentHttpRequest":{"type":"object","default":"##default","description":"Request body for creating a new blog post draft","properties":{"title":{"type":"string","default":"##default","description":"Post title","example":"Understanding Virtual Threads"},"markdownSource":{"type":"string","default":"##default","description":"Post content in Markdown. No raw HTML allowed.","example":"Virtual threads change the concurrency model..."},"tags":{"type":"array","default":"##default","description":"Tag names to associate with the post. Created automatically if new.","example":["java","concurrency"],"items":{"type":"string"}},"categoryIds":{"type":"array","default":"##default","description":"Category UUIDv7s to associate. Non-existent or deleted IDs are skipped.","items":{"type":"string","format":"uuid"}},"summary":{"type":"string","default":"##default","description":"Optional manual summary text from the UI. This value is persisted as the post excerpt. If omitted or blank, the backend derives excerpt text heuristically from markdown content."},"formLoadedAt":{"type":"integer","format":"int64","default":"##default","description":"Epoch milliseconds when the form was rendered (Date.now()). Required. Submissions arriving less than 3 seconds after this timestamp are silently rejected.","example":1709740800000}},"required":["formLoadedAt","markdownSource","title"]},"CreateContentResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"slug":{"type":"string"},"excerpt":{"type":"string"},"status":{"type":"string","enum":["DRAFT","APPROVED"]},"authorId":{"type":"string","format":"uuid"},"authorDisplayName":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"tags":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}}}},"CreateCommentHttpRequest":{"type":"object","properties":{"parentCommentId":{"type":"string","format":"uuid"},"markdownSource":{"type":"string"}}},"SuggestTagsHttpRequest":{"type":"object","properties":{"title":{"type":"string"},"markdownSource":{"type":"string"},"existingTags":{"type":"array","items":{"type":"string"}}}},"SuggestTagsResponse":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string"}}}},"DeriveSummaryHttpRequest":{"type":"object","properties":{"title":{"type":"string"},"markdownSource":{"type":"string"}}},"DeriveSummaryResponse":{"type":"object","properties":{"summary":{"type":"string"}}},"JsonRpcRequest":{"type":"object","properties":{"jsonrpc":{"type":"string"},"id":{},"method":{"type":"string"},"params":{"type":"object","additionalProperties":{}}}},"LoginResponse":{"type":"object","properties":{"token":{"type":"string"},"principal":{"$ref":"#/components/schemas/UserPrincipal"}}},"OtpVerifyRequest":{"type":"object","properties":{"email":{"type":"string"},"code":{"type":"string"}}},"OtpRequest":{"type":"object","properties":{"email":{"type":"string"}}},"DeriveTagsHttpRequest":{"type":"object","properties":{"title":{"type":"string"},"markdownSource":{"type":"string"},"existingTags":{"type":"array","items":{"type":"string"}}}},"DeriveTagsResponse":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string"}}}},"CreateCategoryRequest":{"type":"object","properties":{"name":{"type":"string"},"parentId":{"type":"string","format":"uuid"}}},"CreateCategoryResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"slug":{"type":"string"},"parentName":{"type":"string"}}},"TaxonomySnapshot":{"type":"object","properties":{"tags":{"type":"object","additionalProperties":{"type":"integer","format":"int64"}},"categories":{"type":"object","additionalProperties":{"type":"integer","format":"int64"}},"aggregate":{"type":"object","additionalProperties":{"type":"integer","format":"int64"}}}},"RssAggregatedItemResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"feedTitle":{"type":"string"},"feedUrl":{"type":"string"},"siteUrl":{"type":"string"},"guid":{"type":"string"},"link":{"type":"string"},"title":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"receivedAt":{"type":"string","format":"date-time"}}},"RssAggregatedItemsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RssAggregatedItemResponse"}},"page":{"type":"integer","format":"int32"},"totalPages":{"type":"integer","format":"int32"},"totalCount":{"type":"integer","format":"int64"}}},"RssFeedSourceResponse":{"type":"object","properties":{"title":{"type":"string"},"feedUrl":{"type":"string"},"siteUrl":{"type":"string"},"itemCount":{"type":"integer","format":"int64"},"latestItemTimestamp":{"type":"string","format":"date-time"}}},"RssFeedSourcesResponse":{"type":"object","properties":{"feeds":{"type":"array","items":{"$ref":"#/components/schemas/RssFeedSourceResponse"}}}},"ContentListResponse":{"type":"object","properties":{"posts":{"type":"array","items":{"$ref":"#/components/schemas/ContentSummary"}},"page":{"type":"integer","format":"int32"},"totalPages":{"type":"integer","format":"int32"},"totalCount":{"type":"integer","format":"int64"}}},"ContentSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"slug":{"type":"string"},"excerpt":{"type":"string"},"authorDisplayName":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"sortOrder":{"type":"integer","format":"int32"},"commentCount":{"type":"integer","format":"int32"},"tags":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}}}},"CommentNode":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"authorId":{"type":"string","format":"uuid"},"authorDisplayName":{"type":"string"},"renderedHtml":{"type":"string"},"markdownSource":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"deleted":{"type":"boolean"},"editable":{"type":"boolean"},"children":{"type":"array","items":{"$ref":"#/components/schemas/CommentNode"}}}},"CommentThreadResponse":{"type":"object","properties":{"postId":{"type":"string","format":"uuid"},"comments":{"type":"array","items":{"$ref":"#/components/schemas/CommentNode"}},"totalActiveCount":{"type":"integer","format":"int32"}}},"LogDayResponse":{"type":"object","properties":{"provenanceUri":{"type":"string"},"day":{"type":"string"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/LogEntry"}}}},"LogEntry":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"sender":{"type":"string"},"content":{"type":"string"},"direction":{"type":"string","enum":["INBOUND","OUTBOUND"]}}},"LogProvenanceListResponse":{"type":"object","properties":{"provenances":{"type":"array","items":{"$ref":"#/components/schemas/LogProvenanceSummary"}}}},"LogProvenanceSummary":{"type":"object","properties":{"provenanceUri":{"type":"string"},"protocol":{"type":"string"},"serviceId":{"type":"string"},"replyTo":{"type":"string"},"latestTimestamp":{"type":"string","format":"date-time"},"latestSender":{"type":"string"},"latestContentPreview":{"type":"string"}}},"KarmaLeaderboardEntryResponse":{"type":"object","properties":{"subject":{"type":"string"},"score":{"type":"integer","format":"int32"},"lastUpdated":{"type":"string","format":"date"}}},"KarmaLeaderboardResponse":{"type":"object","properties":{"top":{"type":"array","items":{"$ref":"#/components/schemas/KarmaLeaderboardEntryResponse"}},"bottom":{"type":"array","items":{"$ref":"#/components/schemas/KarmaLeaderboardEntryResponse"}},"limit":{"type":"integer","format":"int32"}}},"AuthenticationFeatures":{"type":"object","properties":{"otp":{"type":"boolean"},"otpFrom":{"type":"string"},"oidc":{"$ref":"#/components/schemas/OidcFeatures"}}},"FeaturesResponse":{"type":"object","properties":{"siteName":{"type":"string"},"version":{"$ref":"#/components/schemas/VersionInfo"},"authentication":{"$ref":"#/components/schemas/AuthenticationFeatures"},"operationGroups":{"type":"array","items":{"type":"string"}},"adapters":{"type":"array","items":{"type":"string"}},"ai":{"type":"boolean"},"anonymousSubmission":{"type":"boolean"}}},"OidcFeatures":{"type":"object","properties":{"google":{"type":"boolean"},"github":{"type":"boolean"}}},"VersionInfo":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"commit":{"type":"string"},"branch":{"type":"string"},"buildTime":{"type":"string"}}},"FactoidListResponse":{"type":"object","properties":{"factoids":{"type":"array","items":{"$ref":"#/components/schemas/FactoidSummaryResponse"}},"page":{"type":"integer","format":"int32"},"totalPages":{"type":"integer","format":"int32"},"totalCount":{"type":"integer","format":"int64"}}},"FactoidSummaryResponse":{"type":"object","properties":{"selector":{"type":"string"},"locked":{"type":"boolean"},"updatedBy":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"lastAccessedAt":{"type":"string","format":"date-time"},"accessCount":{"type":"integer","format":"int64"},"text":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}},"FactoidAttributeResponse":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"},"rendered":{"type":"string"}}},"FactoidDetailResponse":{"type":"object","properties":{"selector":{"type":"string"},"locked":{"type":"boolean"},"updatedBy":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"lastAccessedAt":{"type":"string","format":"date-time"},"accessCount":{"type":"integer","format":"int64"},"attributes":{"type":"array","items":{"$ref":"#/components/schemas/FactoidAttributeResponse"}}}},"CategorySummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"slug":{"type":"string"},"parentName":{"type":"string"}}},"DeleteAccountRequest":{"type":"object","properties":{"username":{"type":"string"}}},"ContentOperationConfirmation":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"message":{"type":"string"}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}}}