{"openapi":"3.1.0","info":{"title":"Guidon API","version":"1.0.0","summary":"Tasks, decisions, knowledge, roadmap and memory of Guidon projects, for AI agents and integrations.","description":"Guidon is context-first project management for development teams. This API lets an agent find a task, read its full working context, claim it, record what it tried, comment and hand it back for review.\n\nAuthenticate with a user's API key (Profile -> API keys): `Authorization: Bearer guidon_...`. A key acts as that user - their projects, their role - limited to the key's scopes.\n\n**Errors** are JSON: `{ \"error\": \"message\", \"code\": \"not_found\", \"hint\": \"...\", \"docs\": \"...\" }` - branch on `code`.\n\n**Rate limits**: 60 requests per minute per key. Every response carries `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset` (and the draft `RateLimit`/`RateLimit-Policy` fields); a 429 carries `Retry-After`.\n\n**Retries**: send an `Idempotency-Key` header (e.g. a UUID) on POST/PATCH/DELETE. For 24 hours a retry with the same key returns the first response (`Idempotent-Replayed: true`) instead of writing twice.\n\n**Pagination**: list endpoints that can grow large take `limit` and `cursor` and return `next_cursor` (null on the last page).\n\n**Bulk**: POST /batch runs up to 20 operations in order in one request.\n\n**Versioning**: the version is in the path (`/api/v1`). Within v1 changes are additive only - new endpoints, fields and optional parameters. A breaking change ships as /api/v2; a v1 endpoint scheduled for removal gets `Deprecation` (RFC 9745) and `Sunset` (RFC 8594) headers at least 6 months before it goes, and is announced on https://useguidon.com/developers#versioning.\n\nThe same operations are available as an MCP server (Streamable HTTP) at https://useguidon.com/api/mcp. Guide for agents: https://useguidon.com/llms.txt","contact":{"name":"Guidon","url":"https://useguidon.com/contact","email":"guidon.support@gmail.com"},"termsOfService":"https://useguidon.com/legal/terms"},"externalDocs":{"description":"Developer guide","url":"https://useguidon.com/developers"},"servers":[{"url":"https://useguidon.com/api/v1"}],"tags":[{"name":"Projects","description":"Projects the key's user belongs to, their board columns and moodboard."},{"name":"Tasks","description":"Board cards: read, create, edit, claim, move and complete."},{"name":"Comments","description":"Task comments."},{"name":"Attempts","description":"What was tried on a task and how it went, so later work learns from it."},{"name":"Reports","description":"Bug reports from shipped games and websites."},{"name":"Project knowledge","description":"Everything around the board: decisions, knowledge sources, roadmap phases, project memory and the tech stack."},{"name":"Batch","description":"Several operations in one request."},{"name":"Account","description":"The token's own user: who it is, and deleting the account."},{"name":"Jobs","description":"Work that doesn't finish in one request: 202 Accepted, then poll the job."},{"name":"Sandbox","description":"A test organization and project of your own, with example data you can reset."}],"paths":{"/projects":{"get":{"operationId":"listProjects","summary":"List the projects the key's user belongs to","description":"Alphabetical by name.\n\nRequires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Projects"],"parameters":[{"name":"limit","in":"query","required":false,"description":"At most this many projects.","schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000}}],"responses":{"200":{"description":"Projects","content":{"application/json":{"schema":{"type":"object","properties":{"projects":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}},"required":["projects"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects/{projectId}/tasks":{"get":{"operationId":"listTasks","summary":"List a project's tasks, newest first, a page at a time","description":"Pass `next_cursor` back as `cursor` until it is null.\n\nRequires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Tasks"],"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"A page of tasks","content":{"application/json":{"schema":{"type":"object","properties":{"tasks":{"type":"array","items":{"$ref":"#/components/schemas/Task"}},"next_cursor":{"$ref":"#/components/schemas/NextCursor"}},"required":["tasks","next_cursor"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createTask","summary":"Create a task or subtask","description":"A top-level task defaults to `backlog`/`medium`; with `parent_task_id` it is a subtask and starts as `todo`/`medium`.\n\nRequires the `tasks:write` scope.","security":[{"apiKey":["tasks:write"]},{"oauth2":["tasks:write"]}],"tags":["Tasks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Task title (required, non-empty)."},"description":{"description":"Longer description of the task.","type":"string"},"priority":{"description":"Defaults to medium.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"status":{"description":"Board column to create the task in. Defaults to backlog.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"due_date":{"description":"Due date as an ISO 8601 date/time string.","type":"string"},"parent_task_id":{"description":"UUID of a parent task in the same project, to create a subtask.","type":"string"}},"required":["title"],"additionalProperties":false}}}},"responses":{"200":{"description":"The created task","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"$ref":"#/components/schemas/Task"}},"required":["task"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/columns":{"get":{"operationId":"listColumns","summary":"The project's visible board columns, in order","description":"Requires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Projects"],"responses":{"200":{"description":"Columns","content":{"application/json":{"schema":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/components/schemas/Column"}}},"required":["columns"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}}]}},"/projects/{projectId}/priorities":{"get":{"operationId":"listPriorities","summary":"The project's task priorities, most important first","description":"Requires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Projects"],"responses":{"200":{"description":"Priorities","content":{"application/json":{"schema":{"type":"object","properties":{"priorities":{"type":"array","items":{"$ref":"#/components/schemas/Priority"}}},"required":["priorities"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}}]}},"/projects/{projectId}/references":{"get":{"operationId":"listReferences","summary":"The project's moodboard images, with short-lived signed URLs","description":"Requires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Projects"],"responses":{"200":{"description":"References","content":{"application/json":{"schema":{"type":"object","properties":{"references":{"type":"array","items":{"$ref":"#/components/schemas/Reference"}}},"required":["references"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}}]}},"/projects/{projectId}/reports":{"post":{"operationId":"fileReport","summary":"File a bug report (creates a Backlog task with attachments)","description":"For keys that ship inside a game or website: `reports:write` can't be combined with another scope. Answers CORS for browser use.\n\nRequires the `reports:write` scope.","security":[{"apiKey":["reports:write"]},{"oauth2":["reports:write"]}],"tags":["Reports"],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["title"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","enum":["bug","crash","feedback"]},"source":{"type":"string","enum":["game","web"]},"reporter":{"type":"string"},"metadata":{"type":"string","description":"JSON object of flat key/value pairs (version, platform, ...)."},"file":{"type":"array","items":{"type":"string","format":"binary"}}}}}}},"responses":{"201":{"description":"The created task","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"$ref":"#/components/schemas/Task"},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/Attachment"}},"warnings":{"type":"array","items":{"type":"string"}}}}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/tasks/{taskId}":{"get":{"operationId":"getTask","summary":"Get a task","description":"Requires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Tasks"],"responses":{"200":{"description":"The task","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"$ref":"#/components/schemas/Task"}},"required":["task"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}}]},"patch":{"operationId":"updateTask","summary":"Edit a task's fields (not its status)","description":"Requires the `tasks:write` scope.","security":[{"apiKey":["tasks:write"]},{"oauth2":["tasks:write"]}],"tags":["Tasks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"New title (must be non-empty).","type":"string"},"description":{"type":"string","description":"New description; null or empty clears it."},"priority":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A priority key of the task's project (list_priorities). Built-in: low, medium, high, critical."},"due_date":{"type":"string","description":"ISO 8601 date/time; null or empty clears it."},"sort_order":{"description":"Position of the card within its column.","type":"number"}},"additionalProperties":false}}}},"responses":{"200":{"description":"The updated task","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"$ref":"#/components/schemas/Task"}},"required":["task"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]},"delete":{"operationId":"deleteTask","summary":"Delete a task permanently (owner/admin of the project)","description":"Requires the `tasks:write` scope.","security":[{"apiKey":["tasks:write"]},{"oauth2":["tasks:write"]}],"tags":["Tasks"],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/tasks/{taskId}/context":{"get":{"operationId":"getTaskContext","summary":"Everything needed to do the task, as Markdown","description":"The task, project constraints, facts, related decisions, files, PRs and previous attempts.\n\nRequires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Tasks"],"responses":{"200":{"description":"The task's working context","content":{"text/markdown":{"schema":{"type":"string"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}}]}},"/tasks/{taskId}/start":{"post":{"operationId":"startTask","summary":"Claim a task (moves it to in progress / AI working)","description":"Requires the `tasks:status` scope.","security":[{"apiKey":["tasks:status"]},{"oauth2":["tasks:status"]}],"tags":["Tasks"],"responses":{"200":{"description":"The started task","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"$ref":"#/components/schemas/Task"}},"required":["task"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/tasks/{taskId}/status":{"patch":{"operationId":"setTaskStatus","summary":"Move a task to another column","description":"Set `review` when the work is done so a human checks it. The project may limit which moves AI keys can make.\n\nRequires the `tasks:status` scope.","security":[{"apiKey":["tasks:status"]},{"oauth2":["tasks:status"]}],"tags":["Tasks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"Target status."}},"required":["status"],"additionalProperties":false}}}},"responses":{"200":{"description":"The moved task","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"$ref":"#/components/schemas/Task"}},"required":["task"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/tasks/{taskId}/complete":{"post":{"operationId":"completeTask","summary":"Mark a task done (only if the project allows AI auto-complete)","description":"Requires the `tasks:status` scope.","security":[{"apiKey":["tasks:status"]},{"oauth2":["tasks:status"]}],"tags":["Tasks"],"responses":{"200":{"description":"The completed task","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"$ref":"#/components/schemas/Task"}},"required":["task"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/tasks/{taskId}/comment":{"get":{"operationId":"listComments","summary":"List a task's comments","description":"Requires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Comments"],"responses":{"200":{"description":"Comments","content":{"application/json":{"schema":{"type":"object","properties":{"comments":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}}},"required":["comments"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"commentOnTask","summary":"Comment on a task","description":"Requires the `comments:write` scope.","security":[{"apiKey":["comments:write"]},{"oauth2":["comments:write"]}],"tags":["Comments"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","description":"Comment text (required, non-empty)."}},"required":["content"],"additionalProperties":false}}}},"responses":{"200":{"description":"The comment","content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"$ref":"#/components/schemas/Comment"}},"required":["comment"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/tasks/{taskId}/attempts":{"get":{"operationId":"listAttempts","summary":"List the attempts recorded on a task, newest first","description":"Requires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Attempts"],"responses":{"200":{"description":"Attempts","content":{"application/json":{"schema":{"type":"object","properties":{"attempts":{"type":"array","items":{"$ref":"#/components/schemas/Attempt"}}},"required":["attempts"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"recordAttempt","summary":"Record an attempt (including failed and partial ones)","description":"Requires the `attempts:write` scope.","security":[{"apiKey":["attempts:write"]},{"oauth2":["attempts:write"]}],"tags":["Attempts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"problem":{"type":"string","maxLength":10000,"description":"What you were trying to solve (required)."},"approach":{"type":"string","maxLength":10000,"description":"What you did or tried (required)."},"outcome":{"type":"string","enum":["failed","partial","succeeded"],"description":"How it turned out."},"result":{"description":"What the result was.","type":"string","maxLength":10000},"failure_reason":{"description":"Why it failed or only partly worked.","type":"string","maxLength":10000},"agent":{"description":"Name of the agent/tool recording this attempt.","type":"string","maxLength":10000},"related_pr_url":{"description":"http(s) URL of the related pull request.","type":"string","maxLength":2048},"files_changed":{"description":"Paths of the files the attempt changed (at most 200).","maxItems":200,"type":"array","items":{"type":"string","maxLength":500}}},"required":["problem","approach","outcome"],"additionalProperties":false}}}},"responses":{"200":{"description":"The attempt","content":{"application/json":{"schema":{"type":"object","properties":{"attempt":{"$ref":"#/components/schemas/Attempt"}},"required":["attempt"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"taskId","in":"path","required":true,"description":"The task's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/tasks/import":{"post":{"operationId":"importTasks","summary":"Create many tasks asynchronously (up to 500)","description":"Each task goes through the same checks as POST /projects/{projectId}/tasks (scopes, permissions, plan limits); the job's result lists the ids created and the ones that failed, with why.\n\nRequires the `tasks:write` scope.","security":[{"apiKey":["tasks:write"]},{"oauth2":["tasks:write"]}],"tags":["Tasks"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tasks"],"properties":{"tasks":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"object","properties":{"title":{"type":"string","description":"Task title (required, non-empty)."},"description":{"description":"Longer description of the task.","type":"string"},"priority":{"description":"Defaults to medium.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"status":{"description":"Board column to create the task in. Defaults to backlog.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"due_date":{"description":"Due date as an ISO 8601 date/time string.","type":"string"},"parent_task_id":{"description":"UUID of a parent task in the same project, to create a subtask.","type":"string"}},"required":["title"],"additionalProperties":false}}}}}}},"responses":{"202":{"description":"Accepted - the tasks are created in the background. Poll the job at the Location header (or job.status_url).","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"Location":{"description":"URL of the job: GET it until status is succeeded or failed.","schema":{"type":"string","format":"uri"}},"Retry-After":{"description":"Seconds to wait before polling.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}},"required":["job"]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/jobs/{jobId}":{"get":{"operationId":"getJob","summary":"Status, progress and result of an async job","description":"While status is queued or running the response carries Retry-After; poll until succeeded or failed.\n\nRequires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Jobs"],"responses":{"200":{"description":"The job","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}},"required":["job"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"jobId","in":"path","required":true,"description":"The job's UUID (from a 202 response).","schema":{"type":"string","format":"uuid"}}]}},"/sandbox":{"get":{"operationId":"getSandbox","summary":"Where your sandbox is","description":"404 until one exists - POST creates it.\n\nRequires the `tasks:read` scope.","security":[{"apiKey":["tasks:read"]},{"oauth2":["tasks:read"]}],"tags":["Sandbox"],"responses":{"200":{"description":"The sandbox","content":{"application/json":{"schema":{"type":"object","properties":{"sandbox":{"$ref":"#/components/schemas/Sandbox"}},"required":["sandbox"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"setUpSandbox","summary":"Create your sandbox, or reset it","description":"A test environment of your own: a separate organization (is_sandbox) with one project of example tasks, to try the API, the MCP server or an agent without touching real work. { \"reset\": true } replaces its project with fresh example data.\n\nRequires the `tasks:write` scope.","security":[{"apiKey":["tasks:write"]},{"oauth2":["tasks:write"]}],"tags":["Sandbox"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reset":{"type":"boolean","default":false}}}}}},"responses":{"200":{"description":"The existing or reset sandbox","content":{"application/json":{"schema":{"type":"object","properties":{"sandbox":{"$ref":"#/components/schemas/Sandbox"}},"required":["sandbox"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"sandbox":{"$ref":"#/components/schemas/Sandbox"}},"required":["sandbox"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/me":{"get":{"operationId":"getMe","summary":"Who this token acts as","description":"Any valid API key or OAuth token; no scope needed.","security":[{"apiKey":[]},{"oauth2":[]}],"tags":["Account"],"responses":{"200":{"description":"The user and the token","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"email":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["id"]},"token":{"type":"object","properties":{"scopes":{"type":"array","items":{"type":"string"}},"project_id":{"type":["string","null"],"format":"uuid"},"human_client":{"type":"boolean"}}}},"required":["user","token"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/account":{"get":{"operationId":"getAccountDeletionPlan","summary":"What deleting the account would do","description":"Only keys a person uses directly (the mobile app, editor plugins) - never an AI or OAuth key.","security":[{"apiKey":[]},{"oauth2":[]}],"tags":["Account"],"responses":{"200":{"description":"The plan","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"$ref":"#/components/schemas/DeletionPlan"}},"required":["plan"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteAccount","summary":"Delete the account for good","description":"Only keys a person uses directly (the mobile app, editor plugins) - never an AI or OAuth key. Organizations with nobody else in them are deleted too; if the person is the only owner of an organization others work in, the answer is 409 `organizations_need_owner` until it's handed over.","security":[{"apiKey":[]},{"oauth2":[]}],"tags":["Account"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["confirm_email"],"properties":{"confirm_email":{"type":"string","format":"email","description":"The account's email, as confirmation."}}}}}},"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean","const":true},"deleted_organizations":{"type":"integer"}},"required":["deleted"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/batch":{"post":{"operationId":"batch","summary":"Run up to 20 operations in one request","description":"Each operation runs through the same endpoint as a direct call - same scopes, permissions and rate limit (each operation counts). Needs no scope of its own - each operation needs its usual one. Not a transaction: operations succeed or fail on their own. Reachable paths: /projects, /projects/{id}/tasks|columns|priorities, the project knowledge collections and items, /tasks/{id} and its context|start|status|complete|comment|attempts.","security":[{"apiKey":[]},{"oauth2":[]}],"tags":["Batch"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["operations"],"properties":{"operations":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["method","path"],"properties":{"method":{"type":"string","enum":["GET","POST","PATCH","DELETE"]},"path":{"type":"string","description":"Path relative to /api/v1, e.g. /tasks/{taskId}/status.","examples":["/projects"]},"body":{"type":"object","description":"JSON body of the operation.","additionalProperties":true}}}}}}}}},"responses":{"200":{"description":"One result per operation, in order","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"status":{"type":"integer","description":"The HTTP status the operation got."},"body":{"description":"Its JSON body (or text)."}},"required":["status","body"]}}},"required":["results"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/decisions":{"get":{"operationId":"listDecisions","summary":"Architecture/product decisions and why they were made (up to 500)","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Decisions","content":{"application/json":{"schema":{"type":"object","properties":{"decisions":{"type":"array","items":{"type":"object","description":"A row of context_decisions.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":300,"description":"What was decided, in a line."},"description":{"description":"The decision and its reasoning (Markdown).","type":"string","maxLength":20000},"impact":{"description":"What it affects.","type":"string","maxLength":5000},"alternatives":{"description":"Options considered and not chosen.","maxItems":20,"type":"array","items":{"type":"string","maxLength":500}},"status":{"description":"Defaults to proposed - a human approves.","type":"string","enum":["proposed","approved","rejected","deprecated"]},"decision_type":{"description":"Defaults to other.","type":"string","enum":["technical","architectural","product","business","process","other"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}}},"required":["decisions"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"createDecision","summary":"Add a decision","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300,"description":"What was decided, in a line."},"description":{"description":"The decision and its reasoning (Markdown).","type":"string","maxLength":20000},"impact":{"description":"What it affects.","type":"string","maxLength":5000},"alternatives":{"description":"Options considered and not chosen.","maxItems":20,"type":"array","items":{"type":"string","maxLength":500}},"status":{"description":"Defaults to proposed - a human approves.","type":"string","enum":["proposed","approved","rejected","deprecated"]},"decision_type":{"description":"Defaults to other.","type":"string","enum":["technical","architectural","product","business","process","other"]}},"required":["title"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created decision","content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"object","description":"A row of context_decisions.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":300,"description":"What was decided, in a line."},"description":{"description":"The decision and its reasoning (Markdown).","type":"string","maxLength":20000},"impact":{"description":"What it affects.","type":"string","maxLength":5000},"alternatives":{"description":"Options considered and not chosen.","maxItems":20,"type":"array","items":{"type":"string","maxLength":500}},"status":{"description":"Defaults to proposed - a human approves.","type":"string","enum":["proposed","approved","rejected","deprecated"]},"decision_type":{"description":"Defaults to other.","type":"string","enum":["technical","architectural","product","business","process","other"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["decision"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/decisions/{itemId}":{"get":{"operationId":"getDecision","summary":"Get a decision","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Decision","content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"object","description":"A row of context_decisions.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":300,"description":"What was decided, in a line."},"description":{"description":"The decision and its reasoning (Markdown).","type":"string","maxLength":20000},"impact":{"description":"What it affects.","type":"string","maxLength":5000},"alternatives":{"description":"Options considered and not chosen.","maxItems":20,"type":"array","items":{"type":"string","maxLength":500}},"status":{"description":"Defaults to proposed - a human approves.","type":"string","enum":["proposed","approved","rejected","deprecated"]},"decision_type":{"description":"Defaults to other.","type":"string","enum":["technical","architectural","product","business","process","other"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["decision"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The decision's UUID.","schema":{"type":"string","format":"uuid"}}]},"patch":{"operationId":"updateDecision","summary":"Change some fields of a decision","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"What was decided, in a line.","type":"string","minLength":1,"maxLength":300},"description":{"type":"string","maxLength":20000,"description":"The decision and its reasoning (Markdown)."},"impact":{"type":"string","maxLength":5000,"description":"What it affects."},"alternatives":{"description":"Options considered and not chosen.","maxItems":20,"type":"array","items":{"type":"string","maxLength":500}},"status":{"description":"Defaults to proposed - a human approves.","type":"string","enum":["proposed","approved","rejected","deprecated"]},"decision_type":{"description":"Defaults to other.","type":"string","enum":["technical","architectural","product","business","process","other"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"The updated decision","content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"object","description":"A row of context_decisions.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":300,"description":"What was decided, in a line."},"description":{"description":"The decision and its reasoning (Markdown).","type":"string","maxLength":20000},"impact":{"description":"What it affects.","type":"string","maxLength":5000},"alternatives":{"description":"Options considered and not chosen.","maxItems":20,"type":"array","items":{"type":"string","maxLength":500}},"status":{"description":"Defaults to proposed - a human approves.","type":"string","enum":["proposed","approved","rejected","deprecated"]},"decision_type":{"description":"Defaults to other.","type":"string","enum":["technical","architectural","product","business","process","other"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["decision"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The decision's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]},"delete":{"operationId":"deleteDecision","summary":"Delete a decision","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The decision's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/knowledge":{"get":{"operationId":"listKnowledgeSources","summary":"The project's knowledge base: documents, links, meeting notes (up to 500)","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"KnowledgeSources","content":{"application/json":{"schema":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","description":"A row of context_sources.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":300,"description":"Short name of the source."},"source_type":{"description":"Defaults to document.","type":"string","enum":["document","comment","commit","pull_request","issue","external_url","meeting","file","other"]},"content":{"description":"The text itself, or notes about it (Markdown).","type":"string","maxLength":50000},"url":{"description":"Where it lives, if anywhere.","type":"string","maxLength":2000,"format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}}},"required":["sources"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"createKnowledgeSource","summary":"Add a knowledge source","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":300,"description":"Short name of the source."},"source_type":{"description":"Defaults to document.","type":"string","enum":["document","comment","commit","pull_request","issue","external_url","meeting","file","other"]},"content":{"description":"The text itself, or notes about it (Markdown).","type":"string","maxLength":50000},"url":{"description":"Where it lives, if anywhere.","type":"string","maxLength":2000,"format":"uri"}},"required":["title"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created knowledge source","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"object","description":"A row of context_sources.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":300,"description":"Short name of the source."},"source_type":{"description":"Defaults to document.","type":"string","enum":["document","comment","commit","pull_request","issue","external_url","meeting","file","other"]},"content":{"description":"The text itself, or notes about it (Markdown).","type":"string","maxLength":50000},"url":{"description":"Where it lives, if anywhere.","type":"string","maxLength":2000,"format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["source"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/knowledge/{itemId}":{"get":{"operationId":"getKnowledgeSource","summary":"Get a knowledge source","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"KnowledgeSource","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"object","description":"A row of context_sources.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":300,"description":"Short name of the source."},"source_type":{"description":"Defaults to document.","type":"string","enum":["document","comment","commit","pull_request","issue","external_url","meeting","file","other"]},"content":{"description":"The text itself, or notes about it (Markdown).","type":"string","maxLength":50000},"url":{"description":"Where it lives, if anywhere.","type":"string","maxLength":2000,"format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["source"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The knowledge source's UUID.","schema":{"type":"string","format":"uuid"}}]},"patch":{"operationId":"updateKnowledgeSource","summary":"Change some fields of a knowledge source","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"description":"Short name of the source.","type":"string","minLength":1,"maxLength":300},"source_type":{"description":"Defaults to document.","type":"string","enum":["document","comment","commit","pull_request","issue","external_url","meeting","file","other"]},"content":{"type":"string","maxLength":50000,"description":"The text itself, or notes about it (Markdown)."},"url":{"type":"string","maxLength":2000,"format":"uri","description":"Where it lives, if anywhere."}},"additionalProperties":false}}}},"responses":{"200":{"description":"The updated knowledge source","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"object","description":"A row of context_sources.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":300,"description":"Short name of the source."},"source_type":{"description":"Defaults to document.","type":"string","enum":["document","comment","commit","pull_request","issue","external_url","meeting","file","other"]},"content":{"description":"The text itself, or notes about it (Markdown).","type":"string","maxLength":50000},"url":{"description":"Where it lives, if anywhere.","type":"string","maxLength":2000,"format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["source"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The knowledge source's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]},"delete":{"operationId":"deleteKnowledgeSource","summary":"Delete a knowledge source","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The knowledge source's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/roadmap":{"get":{"operationId":"listRoadmapPhases","summary":"Roadmap phases/milestones with dates and progress (up to 500)","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"RoadmapPhases","content":{"application/json":{"schema":{"type":"object","properties":{"phases":{"type":"array","items":{"type":"object","description":"A row of roadmap_phases.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":200,"description":"Phase name, e.g. \"Vertical slice\"."},"description":{"description":"Goals and scope of the phase.","type":"string","maxLength":10000},"status":{"description":"Defaults to planned.","type":"string","enum":["planned","in_progress","completed","blocked"]},"start_date":{"type":"string","description":"ISO 8601 date."},"planned_end_date":{"type":"string","description":"ISO 8601 date."},"actual_end_date":{"type":"string","description":"ISO 8601 date, once finished."},"completion_percentage":{"description":"0-100.","type":"integer","minimum":0,"maximum":100},"sort_order":{"description":"Position on the roadmap, lowest first.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}}},"required":["phases"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"createRoadmapPhase","summary":"Add a roadmap phase","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Phase name, e.g. \"Vertical slice\"."},"description":{"description":"Goals and scope of the phase.","type":"string","maxLength":10000},"status":{"description":"Defaults to planned.","type":"string","enum":["planned","in_progress","completed","blocked"]},"start_date":{"type":"string","description":"ISO 8601 date."},"planned_end_date":{"type":"string","description":"ISO 8601 date."},"actual_end_date":{"type":"string","description":"ISO 8601 date, once finished."},"completion_percentage":{"description":"0-100.","type":"integer","minimum":0,"maximum":100},"sort_order":{"description":"Position on the roadmap, lowest first.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created roadmap phase","content":{"application/json":{"schema":{"type":"object","properties":{"phase":{"type":"object","description":"A row of roadmap_phases.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":200,"description":"Phase name, e.g. \"Vertical slice\"."},"description":{"description":"Goals and scope of the phase.","type":"string","maxLength":10000},"status":{"description":"Defaults to planned.","type":"string","enum":["planned","in_progress","completed","blocked"]},"start_date":{"type":"string","description":"ISO 8601 date."},"planned_end_date":{"type":"string","description":"ISO 8601 date."},"actual_end_date":{"type":"string","description":"ISO 8601 date, once finished."},"completion_percentage":{"description":"0-100.","type":"integer","minimum":0,"maximum":100},"sort_order":{"description":"Position on the roadmap, lowest first.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["phase"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/roadmap/{itemId}":{"get":{"operationId":"getRoadmapPhase","summary":"Get a roadmap phase","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"RoadmapPhase","content":{"application/json":{"schema":{"type":"object","properties":{"phase":{"type":"object","description":"A row of roadmap_phases.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":200,"description":"Phase name, e.g. \"Vertical slice\"."},"description":{"description":"Goals and scope of the phase.","type":"string","maxLength":10000},"status":{"description":"Defaults to planned.","type":"string","enum":["planned","in_progress","completed","blocked"]},"start_date":{"type":"string","description":"ISO 8601 date."},"planned_end_date":{"type":"string","description":"ISO 8601 date."},"actual_end_date":{"type":"string","description":"ISO 8601 date, once finished."},"completion_percentage":{"description":"0-100.","type":"integer","minimum":0,"maximum":100},"sort_order":{"description":"Position on the roadmap, lowest first.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["phase"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The roadmap phase's UUID.","schema":{"type":"string","format":"uuid"}}]},"patch":{"operationId":"updateRoadmapPhase","summary":"Change some fields of a roadmap phase","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Phase name, e.g. \"Vertical slice\".","type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":10000,"description":"Goals and scope of the phase."},"status":{"description":"Defaults to planned.","type":"string","enum":["planned","in_progress","completed","blocked"]},"start_date":{"type":"string","description":"ISO 8601 date."},"planned_end_date":{"type":"string","description":"ISO 8601 date."},"actual_end_date":{"type":"string","description":"ISO 8601 date, once finished."},"completion_percentage":{"description":"0-100.","type":"integer","minimum":0,"maximum":100},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Position on the roadmap, lowest first."}},"additionalProperties":false}}}},"responses":{"200":{"description":"The updated roadmap phase","content":{"application/json":{"schema":{"type":"object","properties":{"phase":{"type":"object","description":"A row of roadmap_phases.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":200,"description":"Phase name, e.g. \"Vertical slice\"."},"description":{"description":"Goals and scope of the phase.","type":"string","maxLength":10000},"status":{"description":"Defaults to planned.","type":"string","enum":["planned","in_progress","completed","blocked"]},"start_date":{"type":"string","description":"ISO 8601 date."},"planned_end_date":{"type":"string","description":"ISO 8601 date."},"actual_end_date":{"type":"string","description":"ISO 8601 date, once finished."},"completion_percentage":{"description":"0-100.","type":"integer","minimum":0,"maximum":100},"sort_order":{"description":"Position on the roadmap, lowest first.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["phase"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The roadmap phase's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]},"delete":{"operationId":"deleteRoadmapPhase","summary":"Delete a roadmap phase","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The roadmap phase's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/memory":{"get":{"operationId":"listMemories","summary":"Project memory: facts, rules, constraints and observations agents should know. Entries added here start unverified until a person verifies them (up to 500)","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Memories","content":{"application/json":{"schema":{"type":"object","properties":{"memories":{"type":"array","items":{"type":"object","description":"A row of project_memory.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"content":{"type":"string","minLength":1,"maxLength":5000,"description":"One thing worth remembering about the project."},"memory_type":{"description":"Defaults to observation.","type":"string","enum":["fact","project_rule","constraint","preference","decision_summary","observation","ai_insight"]},"confidence":{"description":"0-1, how sure you are.","type":"number","minimum":0,"maximum":1},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}}},"required":["memories"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"createMemory","summary":"Add a memory","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":5000,"description":"One thing worth remembering about the project."},"memory_type":{"description":"Defaults to observation.","type":"string","enum":["fact","project_rule","constraint","preference","decision_summary","observation","ai_insight"]},"confidence":{"description":"0-1, how sure you are.","type":"number","minimum":0,"maximum":1}},"required":["content"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created memory","content":{"application/json":{"schema":{"type":"object","properties":{"memory":{"type":"object","description":"A row of project_memory.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"content":{"type":"string","minLength":1,"maxLength":5000,"description":"One thing worth remembering about the project."},"memory_type":{"description":"Defaults to observation.","type":"string","enum":["fact","project_rule","constraint","preference","decision_summary","observation","ai_insight"]},"confidence":{"description":"0-1, how sure you are.","type":"number","minimum":0,"maximum":1},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["memory"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/memory/{itemId}":{"get":{"operationId":"getMemory","summary":"Get a memory","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Memory","content":{"application/json":{"schema":{"type":"object","properties":{"memory":{"type":"object","description":"A row of project_memory.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"content":{"type":"string","minLength":1,"maxLength":5000,"description":"One thing worth remembering about the project."},"memory_type":{"description":"Defaults to observation.","type":"string","enum":["fact","project_rule","constraint","preference","decision_summary","observation","ai_insight"]},"confidence":{"description":"0-1, how sure you are.","type":"number","minimum":0,"maximum":1},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["memory"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The memory's UUID.","schema":{"type":"string","format":"uuid"}}]},"patch":{"operationId":"updateMemory","summary":"Change some fields of a memory","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"description":"One thing worth remembering about the project.","type":"string","minLength":1,"maxLength":5000},"memory_type":{"description":"Defaults to observation.","type":"string","enum":["fact","project_rule","constraint","preference","decision_summary","observation","ai_insight"]},"confidence":{"type":"number","minimum":0,"maximum":1,"description":"0-1, how sure you are."}},"additionalProperties":false}}}},"responses":{"200":{"description":"The updated memory","content":{"application/json":{"schema":{"type":"object","properties":{"memory":{"type":"object","description":"A row of project_memory.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"content":{"type":"string","minLength":1,"maxLength":5000,"description":"One thing worth remembering about the project."},"memory_type":{"description":"Defaults to observation.","type":"string","enum":["fact","project_rule","constraint","preference","decision_summary","observation","ai_insight"]},"confidence":{"description":"0-1, how sure you are.","type":"number","minimum":0,"maximum":1},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["memory"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The memory's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]},"delete":{"operationId":"deleteMemory","summary":"Delete a memory","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The memory's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/technologies":{"get":{"operationId":"listTechnologies","summary":"The project's tech stack: engines, languages, services (up to 500)","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Technologies","content":{"application/json":{"schema":{"type":"object","properties":{"technologies":{"type":"array","items":{"type":"object","description":"A row of technologies.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":100,"description":"e.g. Unity, Godot, PostgreSQL."},"version":{"description":"e.g. 6000.0 LTS.","type":"string","maxLength":50},"category":{"description":"Defaults to other.","type":"string","enum":["frontend","backend","game_engine","database","devops","ai","other"]},"description":{"description":"What it's used for here.","type":"string","maxLength":2000},"icon_slug":{"description":"Simple Icons slug for the logo, e.g. unity.","type":"string","maxLength":100},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}}},"required":["technologies"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"createTechnology","summary":"Add a technology","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"e.g. Unity, Godot, PostgreSQL."},"version":{"description":"e.g. 6000.0 LTS.","type":"string","maxLength":50},"category":{"description":"Defaults to other.","type":"string","enum":["frontend","backend","game_engine","database","devops","ai","other"]},"description":{"description":"What it's used for here.","type":"string","maxLength":2000},"icon_slug":{"description":"Simple Icons slug for the logo, e.g. unity.","type":"string","maxLength":100},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"The created technology","content":{"application/json":{"schema":{"type":"object","properties":{"technology":{"type":"object","description":"A row of technologies.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":100,"description":"e.g. Unity, Godot, PostgreSQL."},"version":{"description":"e.g. 6000.0 LTS.","type":"string","maxLength":50},"category":{"description":"Defaults to other.","type":"string","enum":["frontend","backend","game_engine","database","devops","ai","other"]},"description":{"description":"What it's used for here.","type":"string","maxLength":2000},"icon_slug":{"description":"Simple Icons slug for the logo, e.g. unity.","type":"string","maxLength":100},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["technology"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/projects/{projectId}/technologies/{itemId}":{"get":{"operationId":"getTechnology","summary":"Get a technology","description":"Requires the `project:read` scope.","security":[{"apiKey":["project:read"]},{"oauth2":["project:read"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Technology","content":{"application/json":{"schema":{"type":"object","properties":{"technology":{"type":"object","description":"A row of technologies.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":100,"description":"e.g. Unity, Godot, PostgreSQL."},"version":{"description":"e.g. 6000.0 LTS.","type":"string","maxLength":50},"category":{"description":"Defaults to other.","type":"string","enum":["frontend","backend","game_engine","database","devops","ai","other"]},"description":{"description":"What it's used for here.","type":"string","maxLength":2000},"icon_slug":{"description":"Simple Icons slug for the logo, e.g. unity.","type":"string","maxLength":100},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["technology"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The technology's UUID.","schema":{"type":"string","format":"uuid"}}]},"patch":{"operationId":"updateTechnology","summary":"Change some fields of a technology","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"e.g. Unity, Godot, PostgreSQL.","type":"string","minLength":1,"maxLength":100},"version":{"type":"string","maxLength":50,"description":"e.g. 6000.0 LTS."},"category":{"description":"Defaults to other.","type":"string","enum":["frontend","backend","game_engine","database","devops","ai","other"]},"description":{"type":"string","maxLength":2000,"description":"What it's used for here."},"icon_slug":{"type":"string","maxLength":100,"description":"Simple Icons slug for the logo, e.g. unity."},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":""}},"additionalProperties":false}}}},"responses":{"200":{"description":"The updated technology","content":{"application/json":{"schema":{"type":"object","properties":{"technology":{"type":"object","description":"A row of technologies.","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":100,"description":"e.g. Unity, Godot, PostgreSQL."},"version":{"description":"e.g. 6000.0 LTS.","type":"string","maxLength":50},"category":{"description":"Defaults to other.","type":"string","enum":["frontend","backend","game_engine","database","devops","ai","other"]},"description":{"description":"What it's used for here.","type":"string","maxLength":2000},"icon_slug":{"description":"Simple Icons slug for the logo, e.g. unity.","type":"string","maxLength":100},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","project_id"]}},"required":["technology"]}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The technology's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]},"delete":{"operationId":"deleteTechnology","summary":"Delete a technology","description":"Requires the `project:write` scope.","security":[{"apiKey":["project:write"]},{"oauth2":["project:write"]}],"tags":["Project knowledge"],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"projectId","in":"path","required":true,"description":"The project's UUID (from GET /projects).","schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"description":"The technology's UUID.","schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"}]}}},"components":{"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth 2.1 for apps acting for a person - public clients with PKCE (S256), refresh tokens rotate. See https://useguidon.com/auth.md.","flows":{"authorizationCode":{"authorizationUrl":"https://useguidon.com/oauth/authorize","tokenUrl":"https://useguidon.com/oauth/token","refreshUrl":"https://useguidon.com/oauth/token","scopes":{"tasks:read":"List projects and tasks, read tasks, comments, attempts and context","tasks:write":"Create, edit and delete tasks","tasks:status":"Start, move and complete tasks","comments:write":"Comment on tasks","attempts:write":"Record attempts","project:read":"Read decisions, knowledge, roadmap, memory and tech stack","project:write":"Change decisions, knowledge, roadmap, memory and tech stack"}}}},"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"guidon_...","description":"A user's API key from Profile -> API keys. Scopes: tasks:read, tasks:write, tasks:status, comments:write, attempts:write, reports:write, project:read, project:write."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, for people."},"code":{"type":"string","description":"Machine-readable reason - branch on this, not on `error`.","examples":["invalid_request","unauthorized","forbidden","not_found","rate_limited","idempotency_key_reused"]},"hint":{"type":"string","description":"What to do about it."},"docs":{"type":"string","format":"uri"}},"required":["error","code"]},"DeletionPlan":{"type":"object","properties":{"deleteOrganizations":{"type":"array","items":{"$ref":"#/components/schemas/OrgRef"},"description":"No one else in them - deleted with the account."},"leaveOrganizations":{"type":"array","items":{"$ref":"#/components/schemas/OrgRef"},"description":"The person leaves them."},"blockers":{"type":"array","items":{"$ref":"#/components/schemas/OrgRef"},"description":"Only owner while others work there - hand over first."}},"required":["deleteOrganizations","leaveOrganizations","blockers"]},"Job":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["task_import"]},"status":{"type":"string","enum":["queued","running","succeeded","failed"]},"progress":{"type":"object","properties":{"done":{"type":"integer"},"total":{"type":"integer"}},"required":["done","total"]},"result":{"type":["object","null"],"properties":{"created":{"type":"array","items":{"type":"string","format":"uuid"}},"failed":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"status":{"type":"integer"},"error":{"type":"string"}}}}}},"error":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"status_url":{"type":"string","format":"uri"}},"required":["id","kind","status","progress","status_url"]},"Sandbox":{"type":"object","properties":{"organization_id":{"type":"string","format":"uuid"},"project_id":{"type":["string","null"],"format":"uuid"},"created":{"type":"boolean"},"reset":{"type":"boolean"},"board_url":{"type":["string","null"],"format":"uri"},"reset_with":{"type":"object","properties":{"method":{"type":"string"},"url":{"type":"string","format":"uri"},"body":{"type":"object"}}}},"required":["organization_id","project_id"]},"OrgRef":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"NextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."},"Deleted":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"Attempt":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"task_id":{"type":"string","format":"uuid"},"problem":{"type":"string"},"approach":{"type":"string"},"outcome":{"type":"string","enum":["failed","partial","succeeded"]},"result":{"type":["string","null"]},"failure_reason":{"type":["string","null"]},"files_changed":{"type":["array","null"],"items":{"type":"string"}},"related_pr_url":{"type":["string","null"],"format":"uri"},"agent":{"type":["string","null"],"description":"Which agent made the attempt."},"created_by":{"type":["string","null"],"format":"uuid"},"created_at":{"type":"string","format":"date-time"}},"required":["id","task_id","problem","approach","outcome"]},"Reference":{"type":"object","description":"A moodboard image.","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"caption":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"mime_type":{"type":"string"},"size_bytes":{"type":["integer","null"]},"source_url":{"type":["string","null"],"format":"uri"},"image_url":{"type":["string","null"],"format":"uri","description":"Short-lived signed URL."},"created_at":{"type":"string","format":"date-time"}},"required":["id","name"]},"Attachment":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"Project":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"organization_id":{"type":"string","format":"uuid"}}},"Task":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"project_id":{"type":"string","format":"uuid"},"parent_task_id":{"type":["string","null"],"format":"uuid"},"title":{"type":"string"},"description":{"type":["string","null"]},"status":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A column key of the task's project (GET /projects/{projectId}/columns). Built-in: backlog, todo, in_progress, ai_working, review, done."},"priority":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A priority key of the task's project (GET /projects/{projectId}/priorities). Built-in: low, medium, high, critical."},"is_done":{"type":"boolean","description":"In done or a column the project marks as done."},"tags":{"type":"array","items":{"type":"string"}},"assignee_id":{"type":["string","null"],"format":"uuid"},"due_date":{"type":["string","null"],"format":"date-time"},"sort_order":{"type":"number"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Column":{"type":"object","properties":{"status":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A column key of the task's project (GET /projects/{projectId}/columns). Built-in: backlog, todo, in_progress, ai_working, review, done."},"label":{"type":"string"},"is_done":{"type":"boolean","description":"Tasks in this column count as finished."},"custom":{"type":"boolean","description":"A column the project added, not a built-in one."},"color":{"type":["string","null"],"description":"Hex colour of a custom column."}}},"Priority":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A priority key of the task's project (GET /projects/{projectId}/priorities). Built-in: low, medium, high, critical."},"label":{"type":"string"},"custom":{"type":"boolean"},"color":{"type":["string","null"]}}},"Comment":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"task_id":{"type":"string","format":"uuid"},"content":{"type":"string"},"created_at":{"type":"string","format":"date-time"}}}},"responses":{"BadRequest":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The key lacks the scope, or the user lacks the role or project permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"No such project/task, or not visible to the key's user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Too many requests for this key","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"Something failed on Guidon's side; safe to retry with the same Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"IdempotencyInProgress":{"description":"A request with this Idempotency-Key is still running (code idempotency_in_progress)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"IdempotencyKeyReused":{"description":"This Idempotency-Key was used for a different request (code idempotency_key_reused)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"description":"Any unique string (a UUID works). A retry with the same key within 24 hours returns the first response instead of writing again.","schema":{"type":"string","minLength":1,"maxLength":255}},"Limit":{"name":"limit","in":"query","required":false,"description":"Items per page.","schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000}},"Cursor":{"name":"cursor","in":"query","required":false,"description":"next_cursor of the previous page.","schema":{"type":"string"}}},"headers":{"RateLimitLimit":{"description":"Requests allowed per window (60 per minute per key).","schema":{"type":"integer"}},"RateLimitRemaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"RateLimitReset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}}}}