{"openapi":"3.1.0","info":{"title":"Goalroom Cloudflare API","version":"2.0.0"},"servers":[{"url":"/api/agent-lab/v1"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"paths":{"/actions/get_identity":{"post":{"operationId":"get_identity","summary":"Read the signed-in sandbox identity and hierarchy role.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Action result"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"403":{"description":"Permission denied"},"404":{"description":"Record outside scope or missing"},"409":{"description":"Version or retry conflict"},"429":{"description":"Sandbox or free-tier protection limit"}}}},"/actions/list_employees":{"post":{"operationId":"list_employees","summary":"List employees visible under your current hierarchy permissions. Use IDs to distinguish names.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Action result"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"403":{"description":"Permission denied"},"404":{"description":"Record outside scope or missing"},"409":{"description":"Version or retry conflict"},"429":{"description":"Sandbox or free-tier protection limit"}}}},"/actions/list_goals":{"post":{"operationId":"list_goals","summary":"Search visible employee goals, including versions and permitted actions.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee":{"type":"string","minLength":1,"maxLength":200},"query":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["overdue","in_progress","complete"]}},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Action result"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"403":{"description":"Permission denied"},"404":{"description":"Record outside scope or missing"},"409":{"description":"Version or retry conflict"},"429":{"description":"Sandbox or free-tier protection limit"}}}},"/actions/get_goal":{"post":{"operationId":"get_goal","summary":"Read one permitted goal, its notes, and current version.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Action result"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"403":{"description":"Permission denied"},"404":{"description":"Record outside scope or missing"},"409":{"description":"Version or retry conflict"},"429":{"description":"Sandbox or free-tier protection limit"}}}},"/actions/create_goal":{"post":{"operationId":"create_goal","summary":"Assign a goal to an employee you supervise. Commits a new goal; retries must reuse the idempotency key.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":160},"target":{"type":"string","minLength":1,"maxLength":300},"due":{"type":"string","format":"date"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":128}},"required":["employee","title","target","due","idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Action result"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"403":{"description":"Permission denied"},"404":{"description":"Record outside scope or missing"},"409":{"description":"Version or retry conflict"},"429":{"description":"Sandbox or free-tier protection limit"}}}},"/actions/update_progress":{"post":{"operationId":"update_progress","summary":"Commit progress and a note to your own goal. Read its version first. Reuse the idempotency key on retries.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"version":{"type":"integer","minimum":1},"progress":{"type":"integer","minimum":0,"maximum":100},"note":{"type":"string","minLength":1,"maxLength":2000},"idempotencyKey":{"type":"string","minLength":1,"maxLength":128}},"required":["id","version","progress","note","idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Action result"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"403":{"description":"Permission denied"},"404":{"description":"Record outside scope or missing"},"409":{"description":"Version or retry conflict"},"429":{"description":"Sandbox or free-tier protection limit"}}}},"/actions/add_feedback":{"post":{"operationId":"add_feedback","summary":"Commit supervisor feedback on a goal within your management scope. Requires its current version.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"version":{"type":"integer","minimum":1},"note":{"type":"string","minLength":1,"maxLength":2000},"idempotencyKey":{"type":"string","minLength":1,"maxLength":128}},"required":["id","version","note","idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Action result"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"403":{"description":"Permission denied"},"404":{"description":"Record outside scope or missing"},"409":{"description":"Version or retry conflict"},"429":{"description":"Sandbox or free-tier protection limit"}}}},"/actions/set_manager":{"post":{"operationId":"set_manager","summary":"Administrator only: change a reporting relationship within the same department. An empty manager removes the relationship.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee":{"type":"string","minLength":1,"maxLength":200},"manager":{"type":"string","maxLength":200},"idempotencyKey":{"type":"string","minLength":1,"maxLength":128}},"required":["employee","manager","idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Action result"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"403":{"description":"Permission denied"},"404":{"description":"Record outside scope or missing"},"409":{"description":"Version or retry conflict"},"429":{"description":"Sandbox or free-tier protection limit"}}}}}}