{"openapi":"3.0.3","info":{"title":"thinkAPI","version":"1.0.0","description":"Public API for the think4ever agentic development platform. Concepts are accessed block-by-block and via business-flow methods — the monolithic concept JSON is never transferred."},"servers":[{"url":"/v1"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"tf_… or platform JWT"}}},"security":[{"bearerAuth":[]}],"paths":{"/auth/login-key":{"get":{"summary":"RSA public key for encrypting login credentials","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/auth/login":{"post":{"summary":"Credential login — returns a platform JWT (optionally mints a tf_ token with create_token: true)","security":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/me":{"get":{"summary":"Resolve the caller identity","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/tokens":{"get":{"summary":"List your API tokens","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"post":{"summary":"Create an API token (secret returned once)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/tokens/{id}":{"delete":{"summary":"Revoke a token","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects":{"get":{"summary":"List accessible projects","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"post":{"summary":"Create a project","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/projects/{projectId}":{"get":{"summary":"Get a project","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"patch":{"summary":"Update a project","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"summary":"Delete a project","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/concepts":{"get":{"summary":"List concepts (metadata only)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"post":{"summary":"Create a concept","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/projects/{projectId}/concept":{"get":{"summary":"The project’s active concept (metadata)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/concepts/{conceptId}":{"get":{"summary":"Get concept metadata (no blocks)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"patch":{"summary":"Update concept business fields / tech stack","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/concepts/{conceptId}/stats":{"get":{"summary":"Concept block counts by type","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/concepts/{conceptId}/flow":{"get":{"summary":"Business-flow structures (connections, menus) without block bodies","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/concepts/{conceptId}/tech-stack":{"get":{"summary":"Get concept tech stack","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"put":{"summary":"Set concept tech stack (server/database/ui)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/concepts/{conceptId}/change-history":{"get":{"summary":"List concept change history (metadata)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/concepts/{conceptId}/change-history/{historyId}":{"get":{"summary":"Get one change entry incl. before/after JSON","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/concepts/{conceptId}/node-summaries":{"get":{"summary":"List screen-summary status per node","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/concepts/{conceptId}/node-summaries/{nodeId}":{"get":{"summary":"Get one node’s full AI screen summary","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/concepts/{conceptId}/summary-job":{"get":{"summary":"Latest screen-summary job status","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/concepts/{conceptId}/summaries/rebuild":{"post":{"summary":"Start/refresh screen summaries","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/technology-options":{"get":{"summary":"List tech-stack options (?type=server|database|ui)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/technical-requirements":{"get":{"summary":"List technical requirements (metadata)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"post":{"summary":"Create a technical requirement","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/technical-requirements/{requirementId}":{"get":{"summary":"Get a technical requirement (full json_requirement)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"patch":{"summary":"Update name/status","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"summary":"Delete a technical requirement","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/technical-requirements/{requirementId}/content":{"put":{"summary":"Replace json_requirement / text","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/concepts/{conceptId}/blocks":{"get":{"summary":"List block manifest (heavy fields omitted)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"post":{"summary":"Add a block","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/concepts/{conceptId}/blocks/{blockId}":{"get":{"summary":"Get one full block","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"patch":{"summary":"Merge-update a block","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}},"put":{"summary":"Replace a block","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"summary":"Delete a block","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/thinkp/decode":{"post":{"summary":"Decode a .thinkp file (base64 file_data) for local viewing","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/concepts/{conceptId}/thinkp/preview":{"post":{"summary":"Preview a .thinkp import against this concept","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/concepts/{conceptId}/thinkp/import":{"post":{"summary":"Import a .thinkp into this concept (replace concept, merge designs/requirements)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/concepts/{conceptId}/thinkp/export":{"get":{"summary":"Export this concept as an encrypted .thinkp (base64)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/tasks":{"get":{"summary":"List project tasks (hierarchical)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"post":{"summary":"Create a task (?submit=true to queue)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/tasks/{taskId}":{"get":{"summary":"Get a task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"patch":{"summary":"Update a task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"summary":"Delete a task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/tasks/{taskId}/status":{"put":{"summary":"Set task status","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/tasks/{taskId}/submit":{"post":{"summary":"Submit a task for execution (queue)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/agent-types":{"get":{"summary":"List agent types","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/models":{"get":{"summary":"List active AI models","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/folders":{"get":{"summary":"List a project’s folders (task targets)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/agent-runs":{"post":{"summary":"Submit work to an agent (creates + queues a task)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/issues/trackers":{"get":{"summary":"List issue trackers","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/issues/statuses":{"get":{"summary":"List issue statuses","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/issues/priorities":{"get":{"summary":"List issue priorities","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/issue-categories":{"get":{"summary":"List project issue categories","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/issues":{"get":{"summary":"List issues (filter: status_id, tracker_id, assigned_to_id)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"post":{"summary":"Create an issue","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/issues/{issueId}":{"get":{"summary":"Get an issue (full description)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"patch":{"summary":"Update an issue","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"summary":"Delete an issue","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/issues/{issueId}/comments":{"get":{"summary":"List issue comments","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"post":{"summary":"Add a comment","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/folders/{folderId}/tree":{"get":{"summary":"Live on-disk file tree","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/folders/{folderId}/file":{"get":{"summary":"Read a file (?path=)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}},"put":{"summary":"Create/overwrite a file","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}},"delete":{"summary":"Delete a file/folder (?path=)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/folders/{folderId}/file/replace":{"post":{"summary":"Replace text in a file","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}}}},"/folders/{folderId}/search":{"get":{"summary":"Find files by glob (?pattern=)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/folders/{folderId}/grep":{"get":{"summary":"Search file contents (?q=)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/folders/{folderId}/files":{"get":{"summary":"List indexed files in a folder (metadata)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/tasks/{taskId}/developer-logs":{"get":{"summary":"Developer-agent actions for a task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/tasks/{taskId}/database-logs":{"get":{"summary":"Database-agent actions for a task","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/action-history":{"get":{"summary":"Project action history","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/hardening/status":{"get":{"summary":"Production hardening: running flag, last run headline, workspace availability, workflow guide","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/hardening/checklist":{"get":{"summary":"The production-readiness checklist by category (?include_instructions=true adds per-check reviewer instructions for self-review)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/hardening/results":{"get":{"summary":"Verdicts of the latest run (or ?run_id=) with evidence, recommendations and a ready-to-use fix_brief (?status=fail|warn|pass|skip)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/hardening/runs":{"get":{"summary":"Production hardening run history","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/hardening/run":{"post":{"summary":"Start a production hardening review of the project workspace (202; credits; 409 if already running; 400 without a workspace)","security":[{"bearerAuth":[]}],"responses":{"202":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}},"/projects/{projectId}/hardening/cancel":{"post":{"summary":"Stop a running production hardening review","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{},"meta":{"type":"object"}}}}}}}}}}}