{"openapi":"3.1.0","servers":[{"url":"/"}],"info":{"version":"2026-08-29","title":"@nijiurachan/backend"},"components":{"securitySchemes":{"aimgToken":{"type":"apiKey","in":"header","name":"x-aimg-token","description":"ブラウザtokenまたは承認されたアプリ専用資格。Altchaと削除キーは別の条件です。"}},"schemas":{"BoardList":{"type":"object","properties":{"boards":{"type":"array","items":{"$ref":"#/components/schemas/BoardDetail"}}},"required":["boards"]},"BoardDetail":{"type":"object","properties":{"slug":{"type":"string"},"boardName":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["slug","boardName","createdAt"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"機械可読なエラーコード。NSFW_REJECTEDはR18画像設定に適合しない添付の拒否で、スパムstrikeを加算しない。SPAM_REJECTEDはその他の制裁対象の検閲拒否","example":"TOKEN_EXPIRED"},"message":{"type":"string","description":"人間向けの説明 (日本語)"}},"required":["code","message"]}},"required":["error"]},"BoardTerms":{"type":"object","properties":{"slug":{"type":"string"},"termsMarkdown":{"type":["string","null"]},"promptVersion":{"type":["integer","null"],"exclusiveMinimum":0}},"required":["slug","termsMarkdown","promptVersion"]},"CatalogMix":{"type":"object","properties":{"sort":{"type":"string","enum":["bump","new","old","replies","momentum","soudane"]},"threads":{"type":"array","items":{"$ref":"#/components/schemas/MixedThreadSummary"}},"pagination":{"$ref":"#/components/schemas/CatalogPagination"}},"required":["sort","threads","pagination"]},"MixedThreadSummary":{"allOf":[{"$ref":"#/components/schemas/ThreadSummary"},{"type":"object","properties":{"b":{"type":"string","description":"スレッドが属する板slug"}},"required":["b"]}]},"PostView":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"threadId":{"type":"string","format":"uuid"},"seq":{"type":"integer","description":"スレッド内連番 (0 = OP)"},"postSequenceNo":{"type":["integer","null"],"description":"投稿ごとの通し番号 (No.)。移行backfill前の行のみ null"},"status":{"type":"string","enum":["public","shadowed"],"description":"投稿状態。viewer相対のfull/chunk/stateでは閲覧を許可したshadowedもpublicへ正規化する"},"body":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"attachment":{"$ref":"#/components/schemas/AttachmentView"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentView"},"maxItems":3,"description":"投稿内の表示順で並ぶ添付。移行期間も常に配列"},"sodaneCount":{"type":"integer","description":"そうだね数"},"displayId":{"type":["string","null"],"description":"表示ID。ID表示スレッドでは安定したスレッド単位IDを優先し、それ以外の被del閾値対象はモデレーション表示IDを3日でローリングする。カタログ系では常にnull"},"displayIdSource":{"type":["string","null"],"enum":["moderation","thread",null],"description":"表示IDの由来。被del閾値による共通IDはmoderation、スレッド単位IDはthread。displayIdがnullならnull"},"sage":{"type":"boolean","description":"このレスがsage指定で投稿されたか (スレッドを浮上させない指定)。スレ立て (OP) は常に false。本フィールド追加前に作成された既存投稿も false (遡及不可)"},"showThreadOwner":{"type":"boolean","description":"スレ立て本人が返信時に『スレ主』表示を指定し、サーバーの本人照合に成功したか。OPは常にfalse"},"poll":{"$ref":"#/components/schemas/PollDefinition"}},"required":["id","threadId","seq","postSequenceNo","status","body","createdAt","attachment","attachments","sodaneCount","displayId","displayIdSource","sage","showThreadOwner","poll"]},"AttachmentView":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["image","animated","video"]},"mime":{"type":"string"},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"originalUrl":{"type":"string","format":"uri","description":"オリジナルの公開URL (ストレージ直接配信)"},"thumbnailUrl":{"type":"string","format":"uri","description":"サムネイルの公開URL (ストレージ直接配信)"},"ngHash":{"type":["string","null"],"pattern":"^[A-Za-z0-9_-]{11}$","description":"画像NG判定用の64-bit aHash (URL-safe Base64、paddingなし)","example":"bbbbbbbbbbY"},"isOekaki":{"type":"boolean","description":"お絵かき機能由来の添付であることを示す表示専用フラグ。presign時のクライアント自己申告に基づき、サーバーは真正性を検証しない (モデレーション等の判断根拠には使わないこと)"}},"required":["id","kind","mime","width","height","originalUrl","thumbnailUrl","ngHash","isOekaki"]},"PollDefinition":{"type":["object","null"],"properties":{"closesAt":{"type":"string","format":"date-time"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"}},"required":["id","label"]},"minItems":2,"maxItems":5}},"required":["closesAt","options"]},"ThreadSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"opPost":{"$ref":"#/components/schemas/PostView"},"replyCount":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"bumpedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"isPermanent":{"type":"boolean"},"isSage":{"type":"boolean"},"forceDisplayId":{"type":"boolean"},"closedAt":{"type":["string","null"],"format":"date-time"},"allowImageReplies":{"type":"boolean"},"tags":{"type":"array","items":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["創作・作品投稿","ゲーム","アニメ・漫画","映画・ドラマ","音楽","配信・動画","技術・ガジェット","食べ物","動物","スポーツ","旅行・風景","生活・趣味","ネタ","雑談","その他","謎"]},{"type":"string","enum":["R18"]}]},"kind":{"type":"string","enum":["fixed"]},"source":{"type":"string","enum":["op","ai","moderator"]}},"required":["name","kind","source"]}}},"required":["id","opPost","replyCount","createdAt","bumpedAt","expiresAt","isPermanent","isSage","forceDisplayId","closedAt","allowImageReplies","tags"]},"CatalogPagination":{"type":"object","properties":{"page":{"type":"integer","exclusiveMinimum":0,"maximum":100000},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":300},"hasNextPage":{"type":"boolean"}},"required":["page","limit","hasNextPage"]},"ArchiveMix":{"type":"object","properties":{"threads":{"type":"array","items":{"$ref":"#/components/schemas/ArchiveMixThreadItem"}},"pagination":{"$ref":"#/components/schemas/ArchivePagination"},"storage":{"$ref":"#/components/schemas/ArchiveStorage"}},"required":["threads","pagination","storage"]},"ArchiveMixThreadItem":{"allOf":[{"$ref":"#/components/schemas/ArchiveThreadItem"},{"type":"object","properties":{"b":{"type":"string","description":"スレッドが属する板slug"}},"required":["b"]}]},"ArchiveThreadItem":{"type":"object","properties":{"threadId":{"type":"string","format":"uuid"},"opExcerpt":{"type":"string"},"thumbnailUrl":{"type":["string","null"],"format":"uri"},"replyCount":{"type":"integer","minimum":0},"tags":{"type":"array","items":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["創作・作品投稿","ゲーム","アニメ・漫画","映画・ドラマ","音楽","配信・動画","技術・ガジェット","食べ物","動物","スポーツ","旅行・風景","生活・趣味","ネタ","雑談","その他","謎"]},{"type":"string","enum":["R18"]}]},"kind":{"type":"string","enum":["fixed"]},"source":{"type":"string","enum":["op","ai","moderator"]}},"required":["name","kind","source"]}},"archivedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"isPermanent":{"type":"boolean"}},"required":["threadId","opExcerpt","thumbnailUrl","replyCount","tags","archivedAt","expiresAt","isPermanent"]},"ArchivePagination":{"type":"object","properties":{"page":{"type":"integer","exclusiveMinimum":0},"limit":{"type":"integer","exclusiveMinimum":0},"total":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0}},"required":["page","limit","total","totalPages"]},"ArchiveStorage":{"type":"object","properties":{"usedBytes":{"type":"integer","minimum":0},"limitBytes":{"type":"integer","exclusiveMinimum":0},"remainingBytes":{"type":"integer","minimum":0},"usageRatio":{"type":"number","minimum":0}},"required":["usedBytes","limitBytes","remainingBytes","usageRatio"]},"SearchScope":{"type":"string","enum":["op","all"],"default":"all","description":"検索対象。opはスレ文（OP本文）のみ、allは公開投稿すべて","example":"all"},"ClientPolicy":{"type":"object","properties":{"boardKey":{"type":"string"},"allowedMimeTypes":{"type":"array","items":{"type":"string"}},"maxFileSizeBytes":{"type":"integer","exclusiveMinimum":0},"maxBodyLength":{"type":"integer","exclusiveMinimum":0},"maxDeleteKeyLength":{"type":"integer","exclusiveMinimum":0},"threadsPerHour":{"type":"integer","minimum":0},"threadCreationCooldownSeconds":{"type":"integer","minimum":0},"replyCreationCooldownSeconds":{"type":"integer","minimum":0},"threadReplyCreationCooldownSeconds":{"type":"integer","minimum":0}},"required":["boardKey","allowedMimeTypes","maxFileSizeBytes","maxBodyLength","maxDeleteKeyLength","threadsPerHour","threadCreationCooldownSeconds","replyCreationCooldownSeconds","threadReplyCreationCooldownSeconds"]},"TokenIssueResult":{"type":"object","properties":{"token":{"type":"string"},"role":{"type":"string","enum":["newbie","citizen","troll"]}},"required":["token","role"]},"TokenIssueBody":{"type":"object","properties":{"metrics":{"type":"object","additionalProperties":{},"default":{},"description":"フィンガープリント採取用メトリクス"}}},"AltchaChallenge":{"type":"object","properties":{"algorithm":{"type":"string"},"challenge":{"type":"string"},"maxnumber":{"type":"number"},"salt":{"type":"string"},"signature":{"type":"string"}},"required":["algorithm","challenge","maxnumber","salt","signature"]},"TopPage":{"type":"object","properties":{"announcements":{"type":"array","items":{"type":"string"}},"threads":{"type":"array","items":{"$ref":"#/components/schemas/ThreadSummary"},"description":"最新スレッド (bump順)"}},"required":["announcements","threads"]},"Catalog":{"type":"object","properties":{"sort":{"type":"string","enum":["bump","new","old","replies","momentum","soudane"]},"threads":{"type":"array","items":{"$ref":"#/components/schemas/ThreadSummary"}},"pagination":{"$ref":"#/components/schemas/CatalogPagination"}},"required":["sort","threads","pagination"]},"SearchResult":{"type":"object","properties":{"query":{"type":"string"},"posts":{"type":"array","items":{"$ref":"#/components/schemas/PostView"},"description":"公開状態の投稿のみ (新しい順)"}},"required":["query","posts"]},"Archive":{"type":"object","properties":{"threads":{"type":"array","items":{"$ref":"#/components/schemas/ArchiveThreadItem"}},"pagination":{"$ref":"#/components/schemas/ArchivePagination"},"storage":{"$ref":"#/components/schemas/ArchiveStorage"}},"required":["threads","pagination","storage"]},"ThreadState":{"type":"object","properties":{"aiSummary":{"$ref":"#/components/schemas/PublicAiSummary"},"replyCount":{"type":"integer"},"bumpedAt":{"type":"string","format":"date-time"},"archivedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"isPermanent":{"type":"boolean"},"isSage":{"type":"boolean"},"forceDisplayId":{"type":"boolean"},"tags":{"type":"array","items":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["創作・作品投稿","ゲーム","アニメ・漫画","映画・ドラマ","音楽","配信・動画","技術・ガジェット","食べ物","動物","スポーツ","旅行・風景","生活・趣味","ネタ","雑談","その他","謎"]},{"type":"string","enum":["R18"]}]},"kind":{"type":"string","enum":["fixed"]},"source":{"type":"string","enum":["op","ai","moderator"]}},"required":["name","kind","source"]}},"closedAt":{"type":["string","null"],"format":"date-time"},"allowImageReplies":{"type":"boolean"},"canShowThreadOwner":{"type":"boolean","description":"閲覧者がスレ立て人としてレスを投稿できる場合はtrue"},"censorshipNotices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"]},"description":"詳細分析による削除を本人へ通知する不透明ID。本文・添付・投稿番号・内部状態は含まない"},"postStates":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer"},"status":{"type":"string","enum":["public","unavailable"],"description":"閲覧者相対の状態。同じfingerprintIdまたはissuedIpのshadowed投稿はpublic、それ以外の非公開投稿はunavailable"},"reactions":{"type":"object","properties":{"up":{"type":"integer","minimum":0}},"required":["up"],"description":"そうだね数。unavailableでは件数を秘匿して0"},"poll":{"$ref":"#/components/schemas/PollState"}},"required":["seq","status","reactions","poll"]}},"newPosts":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"seq":{"type":"integer"},"postSequenceNo":{"type":["integer","null"]},"body":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"displayId":{"type":["string","null"]},"displayIdSource":{"type":["string","null"],"enum":["moderation","thread",null]},"attachment":{"$ref":"#/components/schemas/AttachmentView"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentView"},"maxItems":3},"sage":{"type":"boolean","description":"このレスがsage指定で投稿されたか (スレッドを浮上させない指定)。スレ立て (OP) は常に false。本フィールド追加前に作成された既存投稿も false (遡及不可)"},"showThreadOwner":{"type":"boolean","description":"スレ立て本人が返信時に『スレ主』表示を指定し、サーバーの本人照合に成功したか。OPは常にfalse"},"poll":{"$ref":"#/components/schemas/PollDefinition"}},"required":["id","seq","postSequenceNo","body","createdAt","displayId","displayIdSource","attachment","attachments","sage","showThreadOwner","poll"]},{"type":"object","properties":{"seq":{"type":"integer"},"status":{"type":"string","enum":["unavailable"]}},"required":["seq","status"]}]}}},"required":["replyCount","bumpedAt","archivedAt","expiresAt","isPermanent","isSage","forceDisplayId","tags","closedAt","allowImageReplies","canShowThreadOwner","censorshipNotices","postStates"]},"PublicAiSummary":{"type":["object","null"],"properties":{"text":{"type":"string","minLength":1,"maxLength":400},"updatedAt":{"type":"string","format":"date-time"},"sourcePostSeqs":{"type":"array","items":{"type":"integer","minimum":0}}},"required":["text","updatedAt","sourcePostSeqs"]},"PollState":{"type":["object","null"],"properties":{"isClosed":{"type":"boolean"},"selectedOptionId":{"type":["string","null"],"format":"uuid"},"results":{"type":["object","null"],"properties":{"totalVotes":{"type":"integer","minimum":0},"options":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"},"voteCount":{"type":"integer","minimum":0}},"required":["optionId","voteCount"]}}},"required":["totalVotes","options"]}},"required":["isClosed","selectedOptionId","results"]},"ThreadOgp":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"replyCount":{"type":"integer","minimum":0,"description":"匿名閲覧者に公開されている返信数"},"expiresAt":{"type":["string","null"],"format":"date-time"},"posts":{"type":"array","items":{"$ref":"#/components/schemas/ThreadOgpPost"},"minItems":1,"maxItems":2,"description":"OGP生成用の最小投稿列。先頭はOP、2件目は最初の公開返信 (存在する場合のみ)"}},"required":["id","replyCount","expiresAt","posts"]},"ThreadOgpPost":{"type":"object","properties":{"seq":{"type":"integer","description":"スレッド内連番 (0 = OP)"},"body":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"thumbnailUrl":{"type":["string","null"],"format":"uri","description":"投稿の先頭添付サムネイルの公開URL。添付なし、削除済み添付、R18スレッドではnull"}},"required":["seq","body","createdAt","thumbnailUrl"]},"ThreadView":{"type":"object","properties":{"aiSummary":{"$ref":"#/components/schemas/PublicAiSummary"},"id":{"type":"string","format":"uuid"},"replyCount":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"bumpedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"isPermanent":{"type":"boolean"},"isSage":{"type":"boolean"},"forceDisplayId":{"type":"boolean"},"closedAt":{"type":["string","null"],"format":"date-time"},"allowImageReplies":{"type":"boolean"},"canShowThreadOwner":{"type":"boolean","description":"閲覧者がスレ立て人としてレスを投稿できる場合はtrue"},"tags":{"type":"array","items":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["創作・作品投稿","ゲーム","アニメ・漫画","映画・ドラマ","音楽","配信・動画","技術・ガジェット","食べ物","動物","スポーツ","旅行・風景","生活・趣味","ネタ","雑談","その他","謎"]},{"type":"string","enum":["R18"]}]},"kind":{"type":"string","enum":["fixed"]},"source":{"type":"string","enum":["op","ai","moderator"]}},"required":["name","kind","source"]}},"posts":{"type":"array","items":{"$ref":"#/components/schemas/PostView"},"description":"OPを先頭とした閲覧者相対の時系列順。同じfingerprintIdまたはissuedIpのshadowed投稿はpublic相当で含む"},"postStates":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer"},"status":{"type":"string","enum":["public","unavailable"],"description":"閲覧者相対の状態。同じfingerprintIdまたはissuedIpのshadowed投稿はpublic、それ以外の非公開投稿はunavailable"},"reactions":{"type":"object","properties":{"up":{"type":"integer","minimum":0}},"required":["up"],"description":"そうだね数。unavailableでは件数を秘匿して0"},"poll":{"$ref":"#/components/schemas/PollState"}},"required":["seq","status","reactions","poll"]},"description":"過去ログfull responseで返すアンケートを含む最終可変状態"}},"required":["id","replyCount","createdAt","bumpedAt","expiresAt","isPermanent","isSage","forceDisplayId","closedAt","allowImageReplies","canShowThreadOwner","tags","posts"]},"OnlineUsers":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"windowSec":{"anyOf":[{"type":"number","enum":[1200]},{"type":"number","enum":[1800]}]}},"required":["count","windowSec"]},"ThreadLimits":{"type":"object","properties":{"activeThreads":{"type":"integer","minimum":0},"inputMode":{"type":"string","enum":["hours_minutes","days_hours_minutes"]},"durationHours":{"type":"number","exclusiveMinimum":0},"minimumMinutes":{"type":"integer","exclusiveMinimum":0},"timeZone":{"type":"string","minLength":1},"nextBoundaryAt":{"type":["string","null"],"format":"date-time"},"allowR18ThreadCreation":{"type":"boolean"}},"required":["activeThreads","inputMode","durationHours","minimumMinutes","timeZone","nextBoundaryAt","allowR18ThreadCreation"]},"SitemapThreadsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"threadId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"lastModifiedAt":{"type":"string","format":"date-time"},"replyCount":{"type":"integer","minimum":25}},"required":["threadId","createdAt","lastModifiedAt","replyCount"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"CreatePostResult":{"type":"object","properties":{"threadId":{"type":"string","format":"uuid"},"postId":{"type":"string","format":"uuid"},"seq":{"type":"integer"},"status":{"type":"string","enum":["public","shadowed"]}},"required":["threadId","postId","seq","status"]},"CreateThreadBody":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","description":"同じ投稿の再送で維持するUUID。同key・同内容は元の投稿結果を返す"},"body":{"type":"string","maxLength":4000,"description":"OP投稿本文"},"altcha":{"type":"string","description":"Altcha PoW ソリューション (base64)"},"deleteKey":{"type":"string","minLength":1,"maxLength":64,"description":"削除キー (平文。サーバ側でハッシュ化保存)"},"attachmentId":{"type":"string","format":"uuid","description":"先頭のpresign済み添付ID (移行用)"},"allowImageReplies":{"type":"boolean","default":true,"description":"レスへの画像添付を許可するか"},"sage":{"type":"boolean","default":false,"description":"sage進行。true で作成後の返信によるスレッド浮上をすべて無効にする"},"showId":{"type":"boolean","default":false,"description":"ID表示。true でスレッド内の全投稿にスレッド単位の表示IDを付与する"},"duration":{"type":"string","maxLength":16,"description":"保持期間 (H:M、全角コロン可)。空/未指定は現在のthread-limits上限"},"moderation":{"type":"object","properties":{"text":{"type":"object","properties":{"sexual":{"type":"string","enum":["off","on"]},"exclusion":{"type":"string","enum":["off","lenient","standard","strict"]},"abuse":{"type":"string","enum":["off","lenient","standard","strict"]}},"required":["sexual","exclusion","abuse"],"additionalProperties":false},"image":{"type":"object","properties":{"nsfw":{"type":"string","enum":["off","on"]}},"required":["nsfw"],"additionalProperties":false}},"required":["text","image"],"additionalProperties":false,"description":"スレッド単位の検閲設定。未指定時は全観点を禁止する既定値を使う。R-18画像を許可 (image.nsfw=\"off\") するとR18タグがサーバー側で自動付与される"},"attachmentIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"表示順のpresign済み添付ID配列"},"attachmentSources":{"type":"array","items":{"type":"string","enum":["file","paste","oekaki"]},"description":"添付IDと同じ表示順の添付経路 (自己申告)"},"poll":{"type":"object","properties":{"durationMinutes":{"type":"integer","minimum":10,"maximum":1440},"options":{"type":"array","items":{"type":"string","description":"正規化前はUTF-16で1024 code unit以下、正規化後は80 Unicode code point以下"},"minItems":2,"maxItems":5}},"required":["durationMinutes","options"]}},"required":["body","deleteKey"],"anyOf":[{"required":["attachmentId"]},{"required":["attachmentIds"]}]},"CreateReplyBody":{"type":"object","properties":{"requestId":{"type":"string","format":"uuid","description":"同じ投稿の再送で維持するUUID。同key・同内容は元の投稿結果を返す"},"body":{"type":"string","maxLength":4000},"altcha":{"type":"string"},"deleteKey":{"type":"string","minLength":1,"maxLength":64},"attachmentId":{"type":"string","format":"uuid"},"sage":{"type":"boolean","default":false,"description":"sage投稿。true でスレッドを浮上させない (bumpedAt を更新しない)。省略・false は従来どおり浮上する"},"showThreadOwner":{"type":"boolean","default":false,"description":"スレ立て本人として表示する指定。本人でない投稿者がtrueを指定しても表示されない"},"attachmentIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":3},"attachmentSources":{"type":"array","items":{"type":"string","enum":["file","paste","oekaki"]},"maxItems":3,"description":"添付IDと同じ表示順の添付経路 (自己申告)"},"poll":{"type":"object","properties":{"durationMinutes":{"type":"integer","minimum":10,"maximum":1440},"options":{"type":"array","items":{"type":"string","description":"正規化前はUTF-16で1024 code unit以下、正規化後は80 Unicode code point以下"},"minItems":2,"maxItems":5}},"required":["durationMinutes","options"]}},"required":["body","deleteKey"]},"DeletePostResult":{"type":"object","properties":{"postId":{"type":"string","format":"uuid"},"threadDeleted":{"type":"boolean","description":"OP削除によりスレッドごと削除された場合 true"}},"required":["postId","threadDeleted"]},"DeletePostBody":{"type":"object","properties":{"deleteKey":{"type":"string","minLength":1,"maxLength":64}},"required":["deleteKey"]},"ReactionResult":{"type":"object","properties":{"postId":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["up","del"]}},"required":["postId","type"]},"PollClosedResult":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"poll":{"$ref":"#/components/schemas/PollState"}},"required":["poll"]}]},"PollVoteBody":{"type":"object","properties":{"optionId":{"type":"string","format":"uuid"}},"required":["optionId"]},"CloseThreadResult":{"type":"object","properties":{"threadId":{"type":"string","format":"uuid"},"closedAt":{"type":"string","format":"date-time"}},"required":["threadId","closedAt"]},"CloseThreadBody":{"type":"object","properties":{"deleteKey":{"type":"string","minLength":1,"maxLength":64}},"required":["deleteKey"]},"ReportResult":{"type":"object","properties":{"reportId":{"type":"string","format":"uuid"},"threadId":{"type":"string","format":"uuid"},"fromSeq":{"type":"integer"},"toSeq":{"type":"integer"}},"required":["reportId","threadId","fromSeq","toSeq"]},"ReportBody":{"type":"object","properties":{"fromSeq":{"type":"integer","minimum":0},"toSeq":{"type":"integer","minimum":0},"reason":{"type":"string","enum":["spam","illegal","nsfw_violation","other"]},"detail":{"type":"string","maxLength":200}},"required":["fromSeq","toSeq","reason"]},"PresignResult":{"type":"object","properties":{"attachmentId":{"type":"string","format":"uuid"},"uploadUrl":{"type":["string","null"],"format":"uri","description":"presigned PUT URL。既存添付を再利用する場合は null"},"reused":{"type":"boolean","description":"SHA256 重複により既存の公開添付を再利用する場合 true"}},"required":["attachmentId","uploadUrl","reused"]},"PresignBody":{"type":"object","properties":{"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"ファイル本体のSHA256 (小文字hex)。ブラウザ側で算出する"},"mime":{"type":"string","description":"MIME タイプ","example":"image/png"},"sizeBytes":{"type":"integer","exclusiveMinimum":0},"fileName":{"type":"string","minLength":1,"maxLength":255,"description":"元ファイル名。段階移行中は省略可、指定時は拡張子をサーバーで再検証する"},"source":{"type":"string","enum":["file","paste","oekaki"],"default":"file","description":"添付の由来の自己申告値 (未指定時は'file')。サーバーは真正性を検証せず、表示専用の飾り (お絵かき証明バッジ等) にのみ用いる","example":"file"}},"required":["sha256","mime","sizeBytes"]},"PublicArchiveSnapshot":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"canonicalUrl":{"type":"string","format":"uri"},"board":{"type":"object","properties":{"slug":{"type":"string"}},"required":["slug"]},"thread":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"archivedAt":{"type":"string","format":"date-time"},"isPermanent":{"type":"boolean"},"tags":{"type":"array","items":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","enum":["創作・作品投稿","ゲーム","アニメ・漫画","映画・ドラマ","音楽","配信・動画","技術・ガジェット","食べ物","動物","スポーツ","旅行・風景","生活・趣味","ネタ","雑談","その他","謎"]},{"type":"string","enum":["R18"]}]},"kind":{"type":"string","enum":["fixed"]},"source":{"type":"string","enum":["op","ai","moderator"]}},"required":["name","kind","source"]}},"publicReplyCount":{"type":"integer","minimum":0},"aiSummary":{"$ref":"#/components/schemas/PublicAiSummary"}},"required":["id","createdAt","archivedAt","isPermanent","tags","publicReplyCount"]},"posts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"seq":{"type":"integer","minimum":0},"postSequenceNo":{"type":["integer","null"]},"createdAt":{"type":"string","format":"date-time"},"body":{"type":"string"},"plainText":{"type":"string"},"sage":{"type":"boolean"},"showThreadOwner":{"type":"boolean","default":false},"sodaneCount":{"type":"integer","minimum":0},"displayId":{"type":["string","null"]},"displayIdSource":{"type":["string","null"],"enum":["moderation","thread",null]},"poll":{"type":["object","null"],"properties":{"closesAt":{"type":"string","format":"date-time"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"voteCount":{"type":["integer","null"],"minimum":0}},"required":["id","label","voteCount"]}},"isClosed":{"type":"boolean"},"totalVotes":{"type":["integer","null"],"minimum":0}},"required":["closesAt","options","isClosed","totalVotes"]},"attachments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["image","animated","video"]},"mime":{"type":"string"},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"originalUrl":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"ngHash":{"type":["string","null"],"pattern":"^[A-Za-z0-9_-]{11}$","description":"画像NG判定用の64-bit aHash (URL-safe Base64、paddingなし)","example":"bbbbbbbbbbY"},"isOekaki":{"type":"boolean","description":"お絵かき機能由来の添付であることを示す表示専用フラグ。presign時のクライアント自己申告に基づき、サーバーは真正性を検証しない (モデレーション等の判断根拠には使わないこと)"}},"required":["id","kind","mime","width","height","originalUrl","thumbnailUrl","ngHash","isOekaki"]}}},"required":["id","seq","postSequenceNo","createdAt","body","plainText","sage","sodaneCount","displayId","displayIdSource","poll","attachments"]}},"artifacts":{"type":"object","properties":{"htmlUrl":{"type":"string","format":"uri"},"jsonUrl":{"type":"string","format":"uri"},"imagesZipUrl":{"type":"string","format":"uri"}},"required":["htmlUrl","jsonUrl","imagesZipUrl"]}},"required":["schemaVersion","revision","canonicalUrl","board","thread","posts","artifacts"]},"PrivateHelloResultSchema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]},"PrivateHelloBodySchema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}},"parameters":{}},"paths":{"/":{"get":{"responses":{"200":{"description":"Successfully retrieved root endpoint"}}}},"/ping":{"get":{"responses":{"200":{"description":"Ping endpoint"}}}},"/boards":{"get":{"summary":"登録済みの掲示板一覧を取得する","responses":{"200":{"description":"登録済み掲示板のメタデータ一覧 (slug昇順)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardList"}}}}}}},"/boards/{slug}":{"get":{"summary":"登録済みの掲示板メタデータを取得する","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"登録済み掲示板のメタデータ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardDetail"}}}},"400":{"description":"slugの形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定された掲示板が未登録","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{slug}/terms":{"get":{"summary":"掲示板の公開中利用規約を取得する","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"公開中prompt setの板別利用規約。未設定時はnull","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardTerms"}}}},"400":{"description":"slugの形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定された掲示板が未登録","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/catalog-mix":{"get":{"summary":"複数板の混合カタログを一覧する","parameters":[{"schema":{"type":"string","enum":["bump","new","old","replies","momentum","soudane"],"default":"bump","description":"ソート順 (momentum=レス数/経過時間、soudane=OPのそうだね数)"},"required":false,"description":"ソート順 (momentum=レス数/経過時間、soudane=OPのそうだね数)","name":"sort","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100000,"default":1,"description":"ページ番号 (1始まり)"},"required":false,"description":"ページ番号 (1始まり)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":300,"default":100,"description":"1ページあたりの件数"},"required":false,"description":"1ページあたりの件数","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"対象板slugをカンマ区切りで最大5件。省略時は登録済み全板","example":"ai2,dark"},"required":false,"description":"対象板slugをカンマ区切りで最大5件。省略時は登録済み全板","name":"b","in":"query"}],"responses":{"200":{"description":"対象板の公開スレッドを単一ソート順で混合したカタログ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogMix"}}}},"400":{"description":"bのslug形式または板数が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定された掲示板が未登録","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/archive-mix":{"get":{"summary":"複数板の過去ログを一覧・検索する","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100000,"default":1,"description":"ページ番号 (1始まり)"},"required":false,"description":"ページ番号 (1始まり)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"1ページあたりの件数"},"required":false,"description":"1ページあたりの件数","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"description":"対象板slugをカンマ区切りで最大5件。省略時は登録済み全板","example":"ai2,dark"},"required":false,"description":"対象板slugをカンマ区切りで最大5件。省略時は登録済み全板","name":"b","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"公開投稿本文のリテラル部分一致キーワード"},"required":false,"description":"公開投稿本文のリテラル部分一致キーワード","name":"q","in":"query"},{"schema":{"$ref":"#/components/schemas/SearchScope"},"required":false,"description":"検索対象。opはスレ文（OP本文）のみ、allは公開投稿すべて","name":"scope","in":"query"}],"responses":{"200":{"description":"対象板の過去ログを単一のarchive順で混合した一覧","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveMix"}}}},"400":{"description":"query、bのslug形式、または板数が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定された掲示板が未登録","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/capabilities":{"get":{"responses":{"200":{"description":"このAPIバージョンが提供する機能契約","content":{"application/json":{"schema":{"type":"object","properties":{"apiVersion":{"type":"string"},"capabilities":{"type":"array","items":{"type":"string"}}},"required":["apiVersion","capabilities"]}}}}}}},"/app-authorizations":{"post":{"summary":"登録アプリのブラウザ承認を開始する","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","enum":["futacha-aimg"]},"redirectUri":{"type":"string","minLength":1,"maxLength":2048},"installationId":{"type":"string","format":"uuid"},"state":{"type":"string","pattern":"^[A-Za-z0-9_-]{32,128}$"},"codeChallenge":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"codeChallengeMethod":{"type":"string","enum":["S256"]}},"required":["clientId","redirectUri","installationId","state","codeChallenge","codeChallengeMethod"],"additionalProperties":false}}}},"responses":{"201":{"description":"10分有効の承認要求","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"expiresAt":{"type":"string","format":"date-time"},"authorizationUrl":{"type":"string"}},"required":["id","expiresAt","authorizationUrl"]}}}},"400":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/app-authorizations/{id}":{"get":{"summary":"承認画面をブラウザセッションに結び付ける","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"responses":{"200":{"description":"アプリ表示名とCSRF token","content":{"application/json":{"schema":{"type":"object","properties":{"clientName":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"csrfToken":{"type":"string"}},"required":["clientName","expiresAt","csrfToken"]}}}},"400":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/app-authorizations/{id}/decision":{"post":{"summary":"ブラウザでアプリへの許可・拒否を確定する","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"},{"schema":{"type":"string","minLength":1,"maxLength":256,"description":"許可時のみ必須の承認元ブラウザtoken。アプリ専用資格は使用不可"},"required":false,"description":"許可時のみ必須の承認元ブラウザtoken。アプリ専用資格は使用不可","name":"x-aimg-token","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"csrfToken":{"type":"string","minLength":43,"maxLength":43},"decision":{"type":"string","enum":["approve","deny","cancel"]}},"required":["csrfToken","decision"],"additionalProperties":false}}}},"responses":{"200":{"description":"事前登録された戻り先","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"]}}}},"400":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/app-credentials":{"post":{"summary":"単回codeをPKCEで専用資格に引き換える","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","enum":["futacha-aimg"]},"redirectUri":{"type":"string","maxLength":2048},"code":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"codeVerifier":{"type":"string","pattern":"^[A-Za-z0-9._~-]{43,128}$"}},"required":["clientId","redirectUri","code","codeVerifier"],"additionalProperties":false}}}},"responses":{"201":{"description":"最長21日間のアプリ専用資格。refresh tokenは発行しない","content":{"application/json":{"schema":{"type":"object","properties":{"credential":{"type":"string"},"credentialId":{"type":"string","format":"uuid"},"expiresAt":{"type":"string","format":"date-time"}},"required":["credential","credentialId","expiresAt"]}}}},"400":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"summary":"承認ブラウザの接続済みアプリを取得する","security":[{"aimgToken":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"},{"schema":{"type":"string","minLength":1,"maxLength":256},"required":true,"name":"x-aimg-token","in":"header"}],"responses":{"200":{"description":"資格の値を含まない一覧","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"clientName":{"type":"string"},"issuedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","clientName","issuedAt","expiresAt","revokedAt"]}}}}},"400":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/app-credentials/current":{"delete":{"summary":"提示したアプリ資格を失効する","security":[{"aimgToken":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"},{"schema":{"type":"string","minLength":1,"maxLength":256},"required":true,"name":"x-aimg-token","in":"header"}],"responses":{"204":{"description":"失効済み"},"400":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/app-credentials/{id}":{"delete":{"summary":"承認ブラウザからアプリ資格を取り消す","security":[{"aimgToken":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"},{"schema":{"type":"string","minLength":1,"maxLength":256},"required":true,"name":"x-aimg-token","in":"header"}],"responses":{"204":{"description":"失効済み"},"400":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"認証要求の拒否、失効、または受付制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/client-policy":{"get":{"summary":"選択した板の公開クライアント受付条件を取得する","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"responses":{"200":{"description":"現在の非機密受付条件。投稿時にもサーバーで再検証する","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientPolicy"}}}},"400":{"description":"板指定が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"板が未登録","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/tokens":{"post":{"summary":"トークンを取得する","description":"Cloudflare Challenges Pre-clearance (cf_clearance クッキー) の通過が前提。UC-T01","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenIssueBody"}}}},"responses":{"201":{"description":"発行されたトークンとロール","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenIssueResult"}}}},"400":{"description":"板指定またはリクエスト形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"cf_clearance クッキーが存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/altcha":{"get":{"summary":"Altcha チャレンジを取得する","description":"投稿前に PoW を解き、ソリューションを投稿リクエストの altcha フィールドで送る","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"responses":{"200":{"description":"PoW チャレンジ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AltchaChallenge"}}}},"400":{"description":"板指定がない、または形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/top":{"get":{"summary":"トップページを見る (UC-B01)","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"responses":{"200":{"description":"最新スレッドと告知","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopPage"}}}},"400":{"description":"板指定がない、または形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/catalog/{slug}":{"get":{"summary":"カタログでスレを一覧する (UC-B02)","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","enum":["bump","new","old","replies","momentum","soudane"],"default":"bump","description":"ソート順 (momentum=レス数/経過時間、soudane=OPのそうだね数)"},"required":false,"description":"ソート順 (momentum=レス数/経過時間、soudane=OPのそうだね数)","name":"sort","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100000,"default":1,"description":"ページ番号 (1始まり)"},"required":false,"description":"ページ番号 (1始まり)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":300,"default":100,"description":"1ページあたりの件数"},"required":false,"description":"1ページあたりの件数","name":"limit","in":"query"}],"responses":{"200":{"description":"スレッド一覧 (隔離スレッドは除外済み)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Catalog"}}}},"404":{"description":"板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/search":{"get":{"summary":"検索する (UC-B03)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"検索キーワード"},"required":true,"description":"検索キーワード","name":"q","in":"query"},{"schema":{"$ref":"#/components/schemas/SearchScope"},"required":false,"description":"検索対象。opはスレ文（OP本文）のみ、allは公開投稿すべて","name":"scope","in":"query"},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"responses":{"200":{"description":"公開投稿の検索結果","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"板指定、検索キーワードまたは検索対象が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/archive/{slug}":{"get":{"summary":"過去ログを一覧・検索する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100000,"default":1,"description":"ページ番号 (1始まり)"},"required":false,"description":"ページ番号 (1始まり)","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"1ページあたりの件数"},"required":false,"description":"1ページあたりの件数","name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":100,"description":"公開投稿本文のリテラル部分一致キーワード"},"required":false,"description":"公開投稿本文のリテラル部分一致キーワード","name":"q","in":"query"},{"schema":{"$ref":"#/components/schemas/SearchScope"},"required":false,"description":"検索対象。opはスレ文（OP本文）のみ、allは公開投稿すべて","name":"scope","in":"query"}],"responses":{"200":{"description":"アーカイブ済みスレッド一覧と容量情報","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Archive"}}}},"400":{"description":"検索キーワードまたは検索対象が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/archive/{slug}/storage":{"get":{"summary":"過去ログの使用容量を見る","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"}],"responses":{"200":{"description":"過去ログ添付の使用容量","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveStorage"}}}},"404":{"description":"板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/threads/{threadId}/chunks/{n}":{"get":{"summary":"スレッドの不変チャンクを取得する","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":["integer","null"],"minimum":0,"maximum":100000},"required":false,"name":"n","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":false,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"responses":{"200":{"description":"100件単位の閲覧者相対チャンク。閲覧不可の投稿はunavailable","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"seq":{"type":"integer"},"postSequenceNo":{"type":["integer","null"]},"body":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"displayId":{"type":["string","null"]},"displayIdSource":{"type":["string","null"],"enum":["moderation","thread",null]},"attachment":{"$ref":"#/components/schemas/AttachmentView"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentView"},"maxItems":3},"sage":{"type":"boolean","description":"このレスがsage指定で投稿されたか (スレッドを浮上させない指定)。スレ立て (OP) は常に false。本フィールド追加前に作成された既存投稿も false (遡及不可)"},"showThreadOwner":{"type":"boolean","description":"スレ立て本人が返信時に『スレ主』表示を指定し、サーバーの本人照合に成功したか。OPは常にfalse"},"poll":{"$ref":"#/components/schemas/PollDefinition"}},"required":["id","seq","postSequenceNo","body","createdAt","displayId","displayIdSource","attachment","attachments","sage","showThreadOwner","poll"]},{"type":"object","properties":{"seq":{"type":"integer"},"status":{"type":"string","enum":["unavailable"]}},"required":["seq","status"]}]}}}}},"404":{"description":"スレッドまたはチャンクが存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/threads/{threadId}/public-chunks/{n}":{"get":{"summary":"スレッドの匿名公開チャンクを取得する","description":"viewer tokenを検証・使用せず、匿名閲覧者と同じ投稿可視性で100件単位のチャンクを返す。CDN共有キャッシュ専用経路","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":["integer","null"],"minimum":0,"maximum":100000},"required":false,"name":"n","in":"path"}],"responses":{"200":{"description":"100件単位の匿名公開チャンク。非公開の投稿はunavailable","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"seq":{"type":"integer"},"postSequenceNo":{"type":["integer","null"]},"body":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"displayId":{"type":["string","null"]},"displayIdSource":{"type":["string","null"],"enum":["moderation","thread",null]},"attachment":{"$ref":"#/components/schemas/AttachmentView"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentView"},"maxItems":3},"sage":{"type":"boolean","description":"このレスがsage指定で投稿されたか (スレッドを浮上させない指定)。スレ立て (OP) は常に false。本フィールド追加前に作成された既存投稿も false (遡及不可)"},"showThreadOwner":{"type":"boolean","description":"スレ立て本人が返信時に『スレ主』表示を指定し、サーバーの本人照合に成功したか。OPは常にfalse"},"poll":{"$ref":"#/components/schemas/PollDefinition"}},"required":["id","seq","postSequenceNo","body","createdAt","displayId","displayIdSource","attachment","attachments","sage","showThreadOwner","poll"]},{"type":"object","properties":{"seq":{"type":"integer"},"status":{"type":"string","enum":["unavailable"]}},"required":["seq","status"]}]}}}}},"404":{"description":"公開スレッドまたはチャンクが存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/threads/{threadId}/state":{"get":{"summary":"スレッドの可変状態を取得する","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":["integer","null"],"minimum":0},"required":false,"name":"after","in":"query"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":false,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"responses":{"200":{"description":"閲覧者相対の可変状態とafter以降の新規投稿","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreadState"}}}},"404":{"description":"スレッドが存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/thread/ogp/{threadId}":{"get":{"summary":"スレのOGP最小情報を見る (UC-B04)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"}],"responses":{"200":{"description":"OGP・JSON-LD生成に必要な匿名公開の最小情報 (OP、公開返信数、最初の公開返信、非R18投稿のサムネイルURL)","headers":{"X-Board-Key":{"schema":{"type":"string","description":"DBで解決したスレッド所属板slug"},"required":true,"description":"DBで解決したスレッド所属板slug"},"X-Thread-Archived-At":{"schema":{"type":"string","format":"date-time","description":"過去ログ化済みの場合のauthoritativeなarchive日時"},"required":false,"description":"過去ログ化済みの場合のauthoritativeなarchive日時"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreadOgp"}}}},"404":{"description":"スレッドが存在しない、または閲覧できない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/thread/{threadId}/public":{"get":{"summary":"スレの匿名公開全体表示を見る (UC-B04)","description":"viewer tokenを検証・使用せず、匿名閲覧者と同じ投稿可視性でスレッド全体を返す。閲覧監査eventは発行しない","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"}],"responses":{"200":{"description":"匿名閲覧者から見える公開投稿一覧","headers":{"X-Board-Key":{"schema":{"type":"string","description":"DBで解決したスレッド所属板slug"},"required":true,"description":"DBで解決したスレッド所属板slug"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreadView"}}}},"404":{"description":"スレッドが存在しない、または匿名では閲覧できない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/thread/{threadId}":{"get":{"summary":"スレを見る (UC-B04)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":false,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"responses":{"200":{"description":"閲覧者から見える投稿一覧 (同じfingerprintIdまたはissuedIpのshadowed投稿を含む)","headers":{"X-Board-Key":{"schema":{"type":"string","description":"DBで解決したスレッド所属板slug"},"required":true,"description":"DBで解決したスレッド所属板slug"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreadView"}}}},"404":{"description":"スレッドが存在しない、または閲覧できない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/boards/{slug}/summary":{"get":{"summary":"スレッドサマリを一括取得する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","minLength":1,"description":"UUIDをカンマ区切りで最大20件"},"required":true,"description":"UUIDをカンマ区切りで最大20件","name":"ids","in":"query"}],"responses":{"200":{"description":"公開スレッドのサマリ配列","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ThreadSummary"}}}}},"400":{"description":"UUIDまたは件数が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/online-users":{"get":{"summary":"GA4の直近30分のアクティブ利用者数を取得する","parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"responses":{"200":{"description":"GA4 RealtimeのactiveUsers (障害時は直近の在席記録による概算値)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnlineUsers"}}}},"400":{"description":"板指定がない、または形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/online-users/heartbeat":{"put":{"summary":"オンライン状態を更新する","parameters":[{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":false,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"responses":{"204":{"description":"オンライン状態を更新した (トークンなしでも在席として記録する)"},"400":{"description":"板指定がない、または形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"提示されたトークンが無効","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/thread-limits/{slug}":{"get":{"summary":"現在のスレッド保持期間制限を取得する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"}],"responses":{"200":{"description":"アクティブスレ数、保持期間入力モード、現在の最大保持時間、最小保持分数、時間帯、次の切替境界、R18スレ作成可否","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreadLimits"}}}},"404":{"description":"板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/sitemap/threads":{"get":{"summary":"sitemap用公開thread UUID keyset page","parameters":[{"schema":{"type":"string","pattern":"^\\d+$","description":"1〜500（既定250）","example":"250"},"required":false,"description":"1〜500（既定250）","name":"limit","in":"query"},{"schema":{"type":"string","maxLength":2048,"description":"前pageのnextCursor。最大2048文字"},"required":false,"description":"前pageのnextCursor。最大2048文字","name":"cursor","in":"query"},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"responses":{"200":{"description":"公開・非隔離でOP除外の累計返信数が25件以上かつ、OP本文に「配信」またはTwitchリンクを含まないactive/archived thread UUID。activeのlastModifiedAtは現在公開中の最新投稿時刻、archivedはarchive確定時刻","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SitemapThreadsResponse"}}}},"400":{"description":"板指定、limit、cursorのいずれかが不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/threads/{slug}":{"post":{"security":[{"aimgToken":[]}],"summary":"スレを立てる (UC-B05)","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":true,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateThreadBody"}}}},"responses":{"201":{"description":"作成されたスレッドとOP投稿","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostResult"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"板の書き込み停止・R18スレ作成停止・Altcha検証失敗","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"同一requestIdを処理中、または異なる投稿内容で再使用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"トークン無効・検閲による棄却 (SPAM_REJECTED / NSFW_REJECTED)・添付不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"スレ立て回数制限 (6件/時)・スレ立て間隔制限・アンケート作成間隔制限","headers":{"Retry-After":{"description":"再試行までの秒数。投稿またはアンケートの作成間隔制限時に返す","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"検閲サービス一時停止","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/threads/{threadId}/posts":{"post":{"security":[{"aimgToken":[]}],"summary":"レスを投稿する (UC-B05)","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":true,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReplyBody"}}}},"responses":{"201":{"description":"作成されたレス","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostResult"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"板の書き込み停止・Altcha検証失敗・閉鎖済み・画像レス拒否","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"スレッドが存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"重複投稿・同一requestIdを処理中・異なる投稿内容で再使用","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"トークン無効・検閲による棄却 (SPAM_REJECTED / NSFW_REJECTED)・添付不正・レス上限(1000)・過去ログ化済み","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"レス投稿間隔制限・アンケート作成間隔制限","headers":{"Retry-After":{"description":"再試行までの秒数。投稿またはアンケートの作成間隔制限時に返す","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"検閲サービス一時停止","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/posts/{postId}":{"delete":{"security":[{"aimgToken":[]}],"summary":"投稿を削除する (UC-B06)","description":"投稿時の削除キーが必要。OPの削除キーはスレ内の全レスに有効","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"postId","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":true,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletePostBody"}}}},"responses":{"200":{"description":"削除結果","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletePostResult"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"削除キー不一致","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"投稿が存在しない、またはすでに削除済み","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"トークン無効","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/posts/{postId}/reactions/{type}":{"put":{"security":[{"aimgToken":[]}],"summary":"投稿にそうだね/delする (UC-B07/UC-B08)","description":"住人ロールのみ。同一トークンによる重複反応は409","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"postId","in":"path"},{"schema":{"type":"string","enum":["up","del"],"description":"up = そうだね / del = 削除依頼"},"required":true,"description":"up = そうだね / del = 削除依頼","name":"type","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":true,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"responses":{"200":{"description":"受理された反応","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactionResult"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"板の書き込み停止・初見ロールは反応不可","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"投稿が存在しない、またはゴミ箱状態","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"重複反応・自己そうだね","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"トークン無効","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/posts/{postId}/poll/vote":{"put":{"security":[{"aimgToken":[]}],"summary":"投稿のアンケートへ回答する","description":"fingerprint単位で一アンケート一回答。同じ選択肢の再送は現在stateを返す","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"postId","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":true,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollVoteBody"}}}},"responses":{"200":{"description":"回答後の閲覧者相対アンケート状態","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollState"}}}},"400":{"description":"投稿IDまたは選択肢IDの形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"板の書き込み停止・BAN","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"アンケート・選択肢が存在しない、または閲覧できない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"別選択肢へ回答済み、またはアンケート終了済み（終了時は最終状態を含む）","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Error"},{"$ref":"#/components/schemas/PollClosedResult"}]}}}},"422":{"description":"トークン無効","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/threads/{threadId}/close":{"post":{"security":[{"aimgToken":[]}],"summary":"スレッドを閉鎖する","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":true,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseThreadBody"}}}},"responses":{"200":{"description":"閉鎖されたスレッド","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseThreadResult"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"削除キー不一致","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"スレッドが存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"トークン無効","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/threads/{threadId}/report":{"post":{"security":[{"aimgToken":[]}],"summary":"スレッド内の範囲を通報する","parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":true,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportBody"}}}},"responses":{"201":{"description":"受理された通報","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportResult"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"過去ログ以外の通報は不可","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"スレッドまたは公開投稿が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"同一トークン・スレッド・範囲の通報は受付済み（処理完了・失敗後も重複送信不可）","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"トークン無効・現行スレッドへの通報拒否","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"通報回数制限","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/attachments/presign":{"post":{"security":[{"aimgToken":[]}],"summary":"添付アップロード用の presigned PUT URL を取得する (UC-A01a)","description":"SHA256 が既存添付と重複する場合は再利用となり uploadUrl は null","parameters":[{"schema":{"type":"string","description":"トークンコンテキストが発行したトークン値"},"required":true,"description":"トークンコンテキストが発行したトークン値","name":"x-aimg-token","in":"header"},{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignBody"}}}},"responses":{"200":{"description":"アップロード先URL (または再利用情報)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignResult"}}}},"400":{"description":"板指定またはリクエスト形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"トークン期限切れ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"BANによるアップロード受付拒否","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"トークン無効・MIME/サイズ不許可","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/archive/{slug}/threads/{threadId}/snapshot.json":{"get":{"summary":"匿名公開の過去ログ全文をJSONで保存する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"日付で固定した公開API版"},"required":false,"description":"日付で固定した公開API版","name":"apiVersion","in":"query"}],"responses":{"200":{"description":"viewer情報を含まない決定的な過去ログsnapshot","headers":{"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Language":{"schema":{"type":"string","enum":["ja"]},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Robots-Tag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["application/json; charset=utf-8"]},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicArchiveSnapshot"}}}},"304":{"description":"ETagが一致し、内容が未変更","headers":{"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Language":{"schema":{"type":"string","enum":["ja"]},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Robots-Tag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["application/json; charset=utf-8"]},"required":true}}},"404":{"description":"過去ログが存在しない、非公開、またはURLが正規でない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"公開snapshotを完全に生成できない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"過去ログ全文JSONのmetadataを取得する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"日付で固定した公開API版"},"required":false,"description":"日付で固定した公開API版","name":"apiVersion","in":"query"}],"responses":{"200":{"description":"GETと同じvalidator・表現長","headers":{"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Language":{"schema":{"type":"string","enum":["ja"]},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Robots-Tag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["application/json; charset=utf-8"]},"required":true}}},"304":{"description":"ETagが一致し、内容が未変更","headers":{"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Language":{"schema":{"type":"string","enum":["ja"]},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Robots-Tag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["application/json; charset=utf-8"]},"required":true}}},"404":{"description":"過去ログが存在しない、非公開、またはURLが正規でない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}},"503":{"description":"公開snapshotを完全に生成できない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}}}}},"/archive/{slug}/threads/{threadId}/snapshot.html":{"get":{"summary":"匿名公開の過去ログ全文を単体HTMLで保存する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"日付で固定した公開API版"},"required":false,"description":"日付で固定した公開API版","name":"apiVersion","in":"query"}],"responses":{"200":{"description":"外部CSS・JavaScript不要の過去ログ全文HTML","headers":{"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Language":{"schema":{"type":"string","enum":["ja"]},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Robots-Tag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["text/html; charset=utf-8"]},"required":true}},"content":{"text/html":{"schema":{"type":"string"}}}},"304":{"description":"ETagが一致し、内容が未変更","headers":{"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Language":{"schema":{"type":"string","enum":["ja"]},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Robots-Tag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["text/html; charset=utf-8"]},"required":true}}},"404":{"description":"過去ログが存在しない、非公開、またはURLが正規でない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"公開snapshotを完全に生成できない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"過去ログ全文HTMLのmetadataを取得する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"日付で固定した公開API版"},"required":false,"description":"日付で固定した公開API版","name":"apiVersion","in":"query"}],"responses":{"200":{"description":"GETと同じvalidator・表現長","headers":{"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Language":{"schema":{"type":"string","enum":["ja"]},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Robots-Tag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["text/html; charset=utf-8"]},"required":true}}},"304":{"description":"ETagが一致し、内容が未変更","headers":{"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Language":{"schema":{"type":"string","enum":["ja"]},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Robots-Tag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["text/html; charset=utf-8"]},"required":true}}},"404":{"description":"過去ログが存在しない、非公開、またはURLが正規でない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}},"503":{"description":"公開snapshotを完全に生成できない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}}}}},"/archive/{slug}/threads/{threadId}/images.zip":{"get":{"summary":"匿名公開の過去ログに含まれる全画像をZIP64で保存する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"日付で固定した公開API版"},"required":false,"description":"日付で固定した公開API版","name":"apiVersion","in":"query"}],"responses":{"200":{"description":"公開画像（動画を除く）の決定的なZIP64 archive","headers":{"Accept-Ranges":{"schema":{"type":"string","enum":["none"]},"required":true},"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["application/zip"]},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}},"content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"304":{"description":"ETagが一致し、内容が未変更","headers":{"Accept-Ranges":{"schema":{"type":"string","enum":["none"]},"required":true},"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["application/zip"]},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}},"404":{"description":"過去ログが存在しない、非公開、またはURLが正規でない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"画像実体が欠損しており完全なZIPを生成できない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"head":{"summary":"過去ログ画像ZIP64のmetadataを取得する","parameters":[{"schema":{"type":"string","minLength":1,"description":"板slug","example":"board1"},"required":true,"description":"板slug","name":"slug","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"threadId","in":"path"},{"schema":{"type":"string","description":"日付で固定した公開API版"},"required":false,"description":"日付で固定した公開API版","name":"apiVersion","in":"query"}],"responses":{"200":{"description":"GETと同じvalidator・表現長","headers":{"Accept-Ranges":{"schema":{"type":"string","enum":["none"]},"required":true},"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["application/zip"]},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}},"304":{"description":"ETagが一致し、内容が未変更","headers":{"Accept-Ranges":{"schema":{"type":"string","enum":["none"]},"required":true},"Cache-Control":{"schema":{"type":"string"},"required":true},"Cloudflare-CDN-Cache-Control":{"schema":{"type":"string"},"required":true},"Content-Disposition":{"schema":{"type":"string"},"required":true},"Content-Length":{"schema":{"type":"string"},"required":true},"Content-Type":{"schema":{"type":"string","enum":["application/zip"]},"required":true},"ETag":{"schema":{"type":"string"},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}},"404":{"description":"過去ログが存在しない、非公開、またはURLが正規でない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}},"503":{"description":"画像実体が欠損しており完全なZIPを生成できない","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]},"required":true},"X-Content-Type-Options":{"schema":{"type":"string","enum":["nosniff"]},"required":true},"X-Robots-Tag":{"schema":{"type":"string","enum":["noindex"]},"required":true}}}}}},"/private-hello":{"post":{"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$","description":"登録済み板のslug","example":"board1"},"required":true,"description":"登録済み板のslug","name":"x-board-key","in":"header"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateHelloBodySchema"}}}},"responses":{"200":{"description":"Successful response with greeting message","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateHelloResultSchema"}}}},"400":{"description":"板指定またはリクエスト形式が不正","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"指定した板が存在しない","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{}}