{"contract":"read-api/1","base":"https://dev.powers.now/workspace/api/","method":"GET","cors":"Every route answers GET, HEAD and OPTIONS with Access-Control-Allow-Origin: * and no credentials.","writes":"None. Nothing changes state over GET; holds, confirmations and edits need the page (deep link), the WebMCP page tools or the MCP connector.","sessions":"Routes read the visitor session named by ?session=<id> (or X-Power-Session); omitted, the power’s public view, which holds no visitor records.","freshness":"Every read carries snapshotAt (when the server read it), an ETag, Last-Modified and Cache-Control: no-cache; send If-None-Match to get 304 when nothing changed. Openings move: re-read before you quote a time, and say the snapshot’s time.","routes":[{"path":"api","url":"https://dev.powers.now/workspace/api/","kind":"index","description":"This route table as JSON."},{"path":"api/state","url":"https://dev.powers.now/workspace/api/state","kind":"state","description":"The whole current snapshot as the embed reads it: revision, status, every record, runs and the enabled actions."},{"path":"api/workspace","url":"https://dev.powers.now/workspace/api/workspace","kind":"entity","entity":"workspace","description":"Workspace: the current record. The goal this workspace follows, the elements it shows, the active element and the Blog connection."},{"path":"api/document","url":"https://dev.powers.now/workspace/api/document","kind":"entity","entity":"document","description":"Document: the current records (append /<id> for one record). A document of the workspace. When postId is set it is a Blog post: title, summary, body (Markdown), topics, claims, citations, questions and takeaways write through to the post with its revision; status, slug, gates and the canonical URL come back from the Blog."},{"path":"api/graph","url":"https://dev.powers.now/workspace/api/graph","kind":"entity","entity":"graph","description":"Knowledge Graph: the current record. The knowledge graph in the Blog vocabulary. With postId set it is the active post’s graph and every edit writes through to the post."},{"path":"api/next_step","url":"https://dev.powers.now/workspace/api/next_step","kind":"entity","entity":"next_step","description":"Next Step: the current record. The computed next action: the first failing gate of the active post, else the task marked next, else the first open task. Set by the power; never edited."},{"path":"api/team","url":"https://dev.powers.now/workspace/api/team","kind":"entity","entity":"team","description":"Team: the current record. The people on this workspace and who approves. The approver is the person whose approval publishes a post."},{"path":"api/task","url":"https://dev.powers.now/workspace/api/task","kind":"entity","entity":"task","description":"Tasks: the current records (append /<id> for one record). Tasks for you (mine), for your assistant (ours) and for the team, with status, assignee and due date. Who changed each field is in the snapshot’s authors map."},{"path":"api/posts","url":"https://dev.powers.now/workspace/api/posts","kind":"tool","tool":"list_posts","description":"powers.now’s posts in the Blog power with status, slug, title and updatedAt. Open one in the workspace with dispatch_action \"open_post\" {postId}. Read-only.","params":{"status":{"type":"string","enum":["draft","needs_review","approved","published","archived"],"description":"Keep only posts in this status."},"topic":{"type":"string","description":"Keep only posts with this topic."}}}],"power":{"id":"champ-workspace","name":"Champ Workspace","version":"0.1.0","business":"powers.now"},"deepLink":{"contract":"deep-link/1","base":"https://dev.powers.now/workspace/","template":"https://dev.powers.now/workspace/?goal={goal}&active={active}","grammar":"https://dev.powers.now/workspace/?goal=<text>&active=<graph|next_step|run|document|team|task>","params":{"goal":{"kind":"field","entity":"workspace","field":"goal","type":"text","label":"Goal","max":240},"active":{"kind":"field","entity":"workspace","field":"active","type":"enum","label":"Active element","values":["graph","next_step","run","document","team","task"]}},"reserved":["session","view","display","embed","utm_source","utm_medium","utm_campaign"],"rules":["Every parameter is optional and URL-encoded. Unknown parameters are ignored; invalid values are dropped and the page still opens.","Values are validated against the power’s schema (text length, listed options, numbers) before anything is pre-filled.","Pre-fills land in the user lane: the visitor reviews them on the page and confirms there. A deep link never completes an action by itself.","No record is selectable by link for this power."]}}