{"openapi":"3.1.0","info":{"title":"spacesheep web API","version":"v1","contact":{"name":"spacesheep","url":"https://spacesheep.dev/feedback"},"description":"spacesheep's web API: every call it answers today, made from the same call table as `/v1/doors.json`. Each call is also an MCP tool (`x-mcp-tool`) and a CLI command (`x-cli-command`). `x-callers` says which kinds of connection may make it: `person`, a person in the browser; `key`, your API keys (the CLI, scripts); `read_key`, read-only API keys; `connector`, apps you connected (Claude, ChatGPT, Gemini, Grok); `connector_read`, read-only connected apps; `agent`, spacesheep's own agents; `box`, cloud boxes. A refusal is an `ErrorInfo`: `code` is a word a program can branch on, and each call lists the words it can give, with what they mean."},"externalDocs":{"description":"The docs","url":"https://spacesheep.dev/docs"},"servers":[{"url":"https://spacesheep.dev"}],"tags":[{"name":"ReactionService"},{"name":"DiscussionService","description":"Only the space's editors (and their agents) can read, post or resolve."},{"name":"GroupService"},{"name":"TeamService"},{"name":"SpaceService"},{"name":"VersionService"},{"name":"FileService"},{"name":"UploadService"},{"name":"CommentService"}],"paths":{"/v1/spaces/{space_id}/comments/{comment_id}/reactions":{"post":{"operationId":"create_reaction","summary":"Put an emoji on a comment. The same emoji from you again takes it off.","tags":["ReactionService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space the comment is on: its link, @handle/slug or uuid. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"comment_id","in":"path","required":true,"description":"The comment: its id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space the comment is on: its link, @handle/slug or uuid. (space name)"},"emoji":{"type":"string","description":"One emoji: 👍 👎 ❤️ 🎉 🚀 👀 💯 🔥 ⚡ ✅ ❌ 😂 🤔 😍 🙏 💡 ⭐ 🌮 📌 💬 (text)"}},"additionalProperties":false,"required":["emoji"]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"reaction":{"type":"object","properties":{"emoji":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"created_at":{"type":"string","format":"date-time"}}},"removed":{"type":"boolean"}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_reaction","x-cli-command":"spacesheep reactions create","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces/{space_id}/discussionPosts":{"get":{"operationId":"list_discussion_posts","summary":"A space's Discussion: open topics with their latest post, decisions, who's active. Can wait for the next post.","tags":["DiscussionService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its link, @handle/slug or uuid. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"space","in":"query","required":false,"description":"The space: its link, @handle/slug or uuid. (space name)","schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"description":"One topic as a numbered outline of every reply; the summary of all topics when left out. (discussion topic id)","schema":{"type":"string"}},{"name":"wait_seconds","in":"query","required":false,"description":"Wait up to this many seconds for something newer than `wait_after`; 0 answers now. A new post, a resolve, a reopen or a changed outcome all end the wait. (integer; 0 to 25)","schema":{"type":"integer","minimum":0,"maximum":25}},{"name":"after","in":"query","required":false,"description":"Where to start: the last answer's `next`. From the start when left out. (text)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many at most; 50 when left out, for every list. (integer; 1 to 200)","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"wait_after","in":"query","required":false,"description":"Where `wait_seconds` starts waiting: the last answer's `wait_cursor`. From now when left out. (text)","schema":{"type":"string"}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"posts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"anchor":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"replies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"anchor":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"replies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"anchor":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"replies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"reply_to":{"type":"object"},"anchor":{"type":"string"},"author":{"type":"object"},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"replies":{"type":"array","items":{"type":"object"}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object"}}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}}},"active":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"page":{"type":"object","properties":{"next":{"type":"string"}}},"wait_cursor":{"type":"string"}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"list_discussion_posts","x-cli-command":"spacesheep discussion-posts list","x-callers":["person","key","connector","connector_read","agent","box"]},"post":{"operationId":"create_discussion_post","summary":"Start a topic in a space's Discussion, or reply under a post. Signed with your session; readers never see it.","tags":["DiscussionService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its link, @handle/slug or uuid. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space: its link, @handle/slug or uuid. (space name)"},"text":{"type":"string","description":"What you're posting. (Markdown; at most 10,000 characters)"},"title":{"type":"string","description":"A new topic's title; its first line stands in without one. Ignored on a reply. (a title; at most 200 characters)"},"reply_to":{"type":"string","description":"The post you're answering, by its number (#2, #2.1); a new topic when left out. (discussion post id)"},"anchor":{"type":"string","pattern":"^[A-Za-z0-9._:~@+=/-]{1,400}$","description":"A new topic's part of the space: a data-ss-thing path (chip/shire-3) or a data-ss-id. (text)"},"client":{"type":"object","properties":{"name":{"type":"string","description":"Your harness, lowercase: claude-code, codex, opencode, grok, gemini-cli, cursor, chatgpt. (text)"},"version":{"type":"string","description":"Your harness's version. (text)"},"model":{"type":"string","description":"The model id you run as, if you know it. (text)"},"session_id":{"type":"string","description":"Your harness's session id, only one you actually read. (text)"},"machine":{"type":"string","description":"The machine's hostname. (text)"},"url":{"type":"string","description":"A link that opens this session, if your harness gives one. (text)"},"account_id":{"type":"string","description":"The harness account's id, never an email. (text)"},"org_id":{"type":"string","description":"That account's org or workspace id. (text)"},"repo":{"type":"string","description":"The working directory's git remote. (text)"},"branch":{"type":"string","description":"Its branch. (text)"},"commit":{"type":"string","description":"Its short HEAD sha. (text)"},"extra":{"type":"object","description":"Other small facts that identify the session (entrypoint, OS); never secrets. (JSON object)"},"transport":{"type":"string","description":"Set by the server from the door the call came through; ignored if sent: mcp, api or cli. (text)"},"user_agent":{"type":"string","description":"Set by the server: the request's User-Agent, cut to 200 characters; ignored if sent. (text)"},"other":{"type":"string","description":"Set by the server: what else saved it, in today's `via` words (edit, viewer, agent, automation, memory...); ignored if sent. (text)"}},"additionalProperties":false,"description":"Where you're posting from: harness, model, session id, machine. Only what you can read; never secrets. (client)"}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"discussion_post":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"anchor":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"replies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"anchor":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"replies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"anchor":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"replies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"reply_to":{"type":"object"},"anchor":{"type":"string"},"author":{"type":"object"},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"replies":{"type":"array","items":{"type":"object"}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object"}}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`quota_exceeded`: A limit is reached: the day's publish budget, your share lists, a team's seats or a discussion's posts.\n\n`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["quota_exceeded","rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_discussion_post","x-cli-command":"spacesheep discussion-posts create","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces/{space_id}/discussionTopics/{discussion_topic_id}":{"patch":{"operationId":"update_discussion_topic","summary":"Close a topic or a branch with what was decided, change that decision, or reopen it.","tags":["DiscussionService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its link, @handle/slug or uuid. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"discussion_topic_id","in":"path","required":true,"description":"The discussion topic to change.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space: its link, @handle/slug or uuid. (space name)"},"outcome":{"type":"string","description":"What was decided, in one line. Closing it needs one; on a closed topic, a new one replaces it. (text; at most 500 characters)"},"resolved":{"type":"boolean","description":"Closed with its outcome: true closes it, false reopens it (and clears the outcome). (true or false)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"discussion_topic":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"outcome":{"type":"string"},"resolved":{"type":"boolean"},"resolved_by":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"update_discussion_topic","x-cli-command":"spacesheep discussion-topics update","x-callers":["person","key","connector","agent","box"]}},"/v1/me/groups":{"get":{"operationId":"list_groups","summary":"Your groups (share lists) with their sizes; or one group's people and the spaces shared with it.","tags":["GroupService"],"parameters":[{"name":"group","in":"query","required":false,"description":"One group, to see its people and the spaces shared with it. Every group, with its size, when left out. (group name)","schema":{"type":"string"}},{"name":"group_id","in":"query","required":false,"description":"`group` by its id, instead of its name. (group id)","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Where to start: the last answer's `next`. From the start when left out. (text)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many at most; 50 when left out, for every list. (integer; 1 to 200)","schema":{"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"size":{"type":"integer"},"people":{"type":"array","items":{"type":"string"}},"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}}}}},"page":{"type":"object","properties":{"next":{"type":"string"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"list_groups","x-cli-command":"spacesheep groups list","x-callers":["person","key","connector","connector_read","agent","box"]},"post":{"operationId":"create_group","summary":"Make a group: its title, and the addresses or @handles on it. Nobody is emailed.","tags":["GroupService"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Its title, e.g. F26. (a title; at most 60 characters)"},"add":{"type":"string","description":"Addresses or @handles to put on it, in any form: one per line, commas, a CSV row, 'Name <addr>'. (text; at most 200,000 characters)"},"remove":{"type":"string","description":"Addresses or @handles to take off it. (text; at most 200,000 characters)"},"share":{"type":"string","description":"A space you own to share with everyone on it: they may view, comment and fill in forms. Nobody is emailed. (space name)"},"share_id":{"type":"string","description":"`share` by its id, instead of its name. (space id)"},"unshare":{"type":"string","description":"A space you own to stop sharing with it. (space name)"},"unshare_id":{"type":"string","description":"`unshare` by its id, instead of its name. (space id)"}},"additionalProperties":false,"required":["title"]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"group":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"size":{"type":"integer"},"people":{"type":"array","items":{"type":"string"}},"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}}}},"change":{"type":"object","properties":{"added":{"type":"integer"},"already":{"type":"integer"},"over":{"type":"integer"},"removed":{"type":"integer"},"invalid":{"type":"array","items":{"type":"string"}},"unknown":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`quota_exceeded`: A limit is reached: the day's publish budget, your share lists, a team's seats or a discussion's posts.\n\n`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["quota_exceeded","rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_group","x-cli-command":"spacesheep groups create","x-callers":["person","key","connector","agent"]}},"/v1/me/groups/{group_id}":{"patch":{"operationId":"update_group","summary":"Rename a group, put people on it or take them off, or share a space of yours with it. Nobody is emailed.","tags":["GroupService"],"parameters":[{"name":"group_id","in":"path","required":true,"description":"The group to change. A name (not an id) goes here and in `group` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"group":{"type":"string","description":"The group to change. (group name)"},"title":{"type":"string","description":"Its title, e.g. F26. (a title; at most 60 characters)"},"add":{"type":"string","description":"Addresses or @handles to put on it, in any form: one per line, commas, a CSV row, 'Name <addr>'. (text; at most 200,000 characters)"},"remove":{"type":"string","description":"Addresses or @handles to take off it. (text; at most 200,000 characters)"},"share":{"type":"string","description":"A space you own to share with everyone on it: they may view, comment and fill in forms. Nobody is emailed. (space name)"},"share_id":{"type":"string","description":"`share` by its id, instead of its name. (space id)"},"unshare":{"type":"string","description":"A space you own to stop sharing with it. (space name)"},"unshare_id":{"type":"string","description":"`unshare` by its id, instead of its name. (space id)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"group":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"size":{"type":"integer"},"people":{"type":"array","items":{"type":"string"}},"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}}}},"change":{"type":"object","properties":{"added":{"type":"integer"},"already":{"type":"integer"},"over":{"type":"integer"},"removed":{"type":"integer"},"invalid":{"type":"array","items":{"type":"string"}},"unknown":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"update_group","x-cli-command":"spacesheep groups update","x-callers":["person","key","connector","agent"]},"delete":{"operationId":"delete_group","summary":"Delete a group. Every space shared with it stops being shared with its people.","tags":["GroupService"],"parameters":[{"name":"group_id","in":"path","required":true,"description":"One of your groups, by its title (any case). A name (not an id) goes here and in `group` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"group","in":"query","required":false,"description":"One of your groups, by its title (any case). (group name)","schema":{"type":"string"}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"delete_group","x-cli-command":"spacesheep groups delete","x-callers":["person","key","connector","agent"]}},"/v1/teams":{"get":{"operationId":"list_teams","summary":"The teams you're in: each one's people and roles, plan and seats, auto-join domains and Slack workspaces.","tags":["TeamService"],"parameters":[{"name":"after","in":"query","required":false,"description":"Where to start: the last answer's `next`. From the start when left out. (text)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many at most; 50 when left out, for every list. (integer; 1 to 200)","schema":{"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"url":{"type":"string"},"your_role":{"type":"string"},"your_default":{"type":"boolean"},"plan":{"type":"string"},"seats":{"type":"integer"},"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"role":{"type":"string"},"state":{"type":"string"},"invite_url":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}}},"domains":{"type":"array","items":{"type":"string"}},"slack":{"type":"array","items":{"type":"string"}}}}},"page":{"type":"object","properties":{"next":{"type":"string"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["insufficient_scope","read_only_grant"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"list_teams","x-cli-command":"spacesheep teams list","x-callers":["person","key","connector","connector_read","agent","box"]},"post":{"operationId":"create_team","summary":"Start a team you own. With a slug, an organization at its own address (invite-only for now).","tags":["TeamService"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Its title, as people see it: 1–60 characters. (a title; at most 60 characters)"},"your_default":{"type":"boolean","description":"Your default team: the one your share dialog offers first. true makes it so. (true or false)"},"domains":{"type":"array","items":{"type":"string"},"description":"Email domains whose people join on their own when they sign in (acme.com). Empty clears it. Team plans only. (list of text)"},"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,28}[a-z0-9])?$","description":"An organization's address, <slug>.spacesheep.dev (invite-only for now). A Team on spacesheep.dev when left out. (text)"}},"additionalProperties":false,"required":["title"]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"url":{"type":"string"},"your_role":{"type":"string"},"your_default":{"type":"boolean"},"plan":{"type":"string"},"seats":{"type":"integer"},"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"role":{"type":"string"},"state":{"type":"string"},"invite_url":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}}},"domains":{"type":"array","items":{"type":"string"}},"slack":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_team","x-cli-command":"spacesheep teams create","x-callers":["person","key","connector","agent"]}},"/v1/teams/{team_id}":{"patch":{"operationId":"update_team","summary":"Rename a team or set who joins it by email domain (team admins only), or make it your default.","tags":["TeamService"],"parameters":[{"name":"team_id","in":"path","required":true,"description":"The team to change. A name (not an id) goes here and in `team` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"string","description":"The team to change. (team name)"},"title":{"type":"string","description":"Its title, as people see it: 1–60 characters. (a title; at most 60 characters)"},"your_default":{"type":"boolean","description":"Your default team: the one your share dialog offers first. true makes it so. (true or false)"},"domains":{"type":"array","items":{"type":"string"},"description":"Email domains whose people join on their own when they sign in (acme.com). Empty clears it. Team plans only. (list of text)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"url":{"type":"string"},"your_role":{"type":"string"},"your_default":{"type":"boolean"},"plan":{"type":"string"},"seats":{"type":"integer"},"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"role":{"type":"string"},"state":{"type":"string"},"invite_url":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}}},"domains":{"type":"array","items":{"type":"string"}},"slack":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"update_team","x-cli-command":"spacesheep teams update","x-callers":["person","key","connector","agent"]}},"/v1/teams/{team_id}/members":{"post":{"operationId":"create_team_member","summary":"Invite someone to a team by email or @handle and email them the link. They join when they open it.","tags":["TeamService"],"parameters":[{"name":"team_id","in":"path","required":true,"description":"The team: its title, slug or id. A name (not an id) goes here and in `team` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"string","description":"The team: its title, slug or id. (team name)"},"member":{"type":"string","description":"Who to invite: their @handle, or their email in member_id. Someone with no account signs up first. (person name)"},"member_id":{"type":"string","description":"`member` by its id, instead of its name. (person id)"}},"additionalProperties":false,"required":[],"allOf":[{"anyOf":[{"required":["member"]},{"required":["member_id"]}]}]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"role":{"type":"string"},"state":{"type":"string"},"invite_url":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}},"emailed":{"type":"boolean"}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`quota_exceeded`: A limit is reached: the day's publish budget, your share lists, a team's seats or a discussion's posts.\n\n`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["quota_exceeded","rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_team_member","x-cli-command":"spacesheep team-members create","x-callers":["person","key","connector","agent"]}},"/v1/teams/{team_id}/members/{member_id}":{"patch":{"operationId":"update_team_member","summary":"Make someone on a team a Team admin, or a member again. Team admins only.","tags":["TeamService"],"parameters":[{"name":"team_id","in":"path","required":true,"description":"The team: its title, slug or id. A name (not an id) goes here and in `team` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"member_id","in":"path","required":true,"description":"The team member to change. A name (not an id) goes here and in `member` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"string","description":"The team member to change. (team member name)"},"team":{"type":"string","description":"The team: its title, slug or id. (team name)"},"role":{"type":"string","enum":["owner","member"],"description":"Their role: an owner is a Team admin. A team always keeps one. (one of owner, member)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"role":{"type":"string"},"state":{"type":"string"},"invite_url":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"update_team_member","x-cli-command":"spacesheep team-members update","x-callers":["person","key","connector","agent"]},"delete":{"operationId":"delete_team_member","summary":"Take someone off a team, or leave it yourself. Team admins only, to take someone else off.","tags":["TeamService"],"parameters":[{"name":"team_id","in":"path","required":true,"description":"The team: its title, slug or id. A name (not an id) goes here and in `team` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"member_id","in":"path","required":true,"description":"Who to take off: their @handle, or their email in member_id. Your own to leave the team. A name (not an id) goes here and in `member` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"team","in":"query","required":false,"description":"The team: its title, slug or id. (team name)","schema":{"type":"string"}},{"name":"member","in":"query","required":false,"description":"Who to take off: their @handle, or their email in member_id. Your own to leave the team. (person name)","schema":{"type":"string"}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"delete_team_member","x-cli-command":"spacesheep team-members delete","x-callers":["person","key","connector","agent"]}},"/v1/spaces":{"get":{"operationId":"list_spaces","summary":"Every space you own or can open, newest first.","tags":["SpaceService"],"parameters":[{"name":"after","in":"query","required":false,"description":"Where to start: the last answer's `next`. From the start when left out. (text)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many at most; 50 when left out, for every list. (integer; 1 to 200)","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"include_archived","in":"query","required":false,"description":"Archived spaces too, each marked `archived`. Off: they stay out, as archiving's docs say. (true or false)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"emoji":{"type":"string"},"description":{"type":"string"},"visibility":{"type":"string"},"listed":{"type":"boolean"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"url":{"type":"string"},"head":{"type":"object","properties":{"id":{"type":"string"}}},"updated_at":{"type":"string","format":"date-time"},"team_access":{"type":"string"},"design_system":{"type":"string"},"archived":{"type":"boolean"}}}},"page":{"type":"object","properties":{"next":{"type":"string"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["insufficient_scope"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"list_spaces","x-cli-command":"spacesheep spaces list","x-callers":["person","key","read_key","connector","connector_read","agent","box"]},"post":{"operationId":"create_space","summary":"Publish files as a new space: one HTML file, or a folder with an index.html. Private unless you say who can open it.","tags":["SpaceService"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Its title, as lists and link previews show it. (a title; at most 200 characters)"},"emoji":{"type":"string","description":"One emoji. (text; at most 16 characters)"},"description":{"type":"string","description":"One line on what it is. (text; at most 300 characters)"},"visibility":{"type":"string","enum":["private","members","signed_in","public"],"description":"Who can open a space. (one of private, members, signed_in, public)"},"listed":{"type":"boolean","description":"Listed in search and on the owner's profile (public spaces only). (true or false)"},"team":{"type":"string","description":"Its team, when it lives in one. (team name)"},"team_id":{"type":"string","description":"`team` by its id, instead of its name. (team id)"},"team_access":{"type":"string","enum":["view","edit"],"description":"With a team: what its members may do. View (read and comment) when left out. (one of view, edit)"},"design_system":{"type":"string","description":"A design system of yours, by name or id: later edits keep its look. (text)"},"archived":{"type":"boolean","description":"Whether it's archived: put away, not served, out of lists unless asked for. Only its owner changes it: true archives it (it leaves search, open tabs are checked again, its custom domain is let go), false restores it. (true or false)"},"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Its path inside the space: index.html, img/hero.jpg. (text; at most 512 characters)"},"content":{"type":"string","description":"Text, as it is. (HTML)"},"staged_sha":{"type":"string","pattern":"^[0-9a-f]{12}$","description":"What an upload staged: its staged sha. (text)"},"data":{"type":"string","description":"Small binary files only; anything bigger goes through an upload. (bytes)"}},"required":["path"],"additionalProperties":false},"description":"Its files: an index.html at least. (list of files)"},"label":{"type":"string","description":"What this version is, in a few words. (text; at most 80 characters)"},"client":{"type":"object","properties":{"name":{"type":"string","description":"Your harness, lowercase: claude-code, codex, opencode, grok, gemini-cli, cursor, chatgpt. (text)"},"version":{"type":"string","description":"Your harness's version. (text)"},"model":{"type":"string","description":"The model id you run as, if you know it. (text)"},"session_id":{"type":"string","description":"Your harness's session id, only one you actually read. (text)"},"machine":{"type":"string","description":"The machine's hostname. (text)"},"url":{"type":"string","description":"A link that opens this session, if your harness gives one. (text)"},"account_id":{"type":"string","description":"The harness account's id, never an email. (text)"},"org_id":{"type":"string","description":"That account's org or workspace id. (text)"},"repo":{"type":"string","description":"The working directory's git remote. (text)"},"branch":{"type":"string","description":"Its branch. (text)"},"commit":{"type":"string","description":"Its short HEAD sha. (text)"},"extra":{"type":"object","description":"Other small facts that identify the session (entrypoint, OS); never secrets. (JSON object)"},"transport":{"type":"string","description":"Set by the server from the door the call came through; ignored if sent: mcp, api or cli. (text)"},"user_agent":{"type":"string","description":"Set by the server: the request's User-Agent, cut to 200 characters; ignored if sent. (text)"},"other":{"type":"string","description":"Set by the server: what else saved it, in today's `via` words (edit, viewer, agent, automation, memory...); ignored if sent. (text)"}},"additionalProperties":false,"description":"What published it: your harness, session and machine. (client)"},"slug":{"type":"string","description":"Its address after @you/; made from the title when left out. (text; at most 80 characters)"},"people":{"type":"array","items":{"type":"string"},"description":"Share it with them as it's made: emails or @handles. (list of person name)"},"people_ids":{"type":"array","items":{"type":"string"},"description":"`people` by their ids, instead of their names. (list of person id)"},"org":{"type":"string","description":"An Enterprise organization to publish under, by slug or id (a team is `team`). (text)"}},"additionalProperties":false,"required":["files"]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"emoji":{"type":"string"},"description":{"type":"string"},"visibility":{"type":"string"},"listed":{"type":"boolean"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"url":{"type":"string"},"head":{"type":"object","properties":{"id":{"type":"string"}}},"updated_at":{"type":"string","format":"date-time"},"team_access":{"type":"string"},"design_system":{"type":"string"},"archived":{"type":"boolean"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`content_blocked`: Screening refused the content (credentials sent to another site). Change it, or ask support to review it.\n\n`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["content_blocked","forbidden","insufficient_scope","read_only_grant"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`quota_exceeded`: A limit is reached: the day's publish budget, your share lists, a team's seats or a discussion's posts.\n\n`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["quota_exceeded","rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.\n\n`publish_failed`: The publish didn't finish, and nothing was saved. Try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal","publish_failed"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_space","x-cli-command":"spacesheep spaces create","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces/{space_id}":{"get":{"operationId":"get_space","summary":"A space's details: title, address, who can open it and its head version.","tags":["SpaceService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its link, @handle/slug or uuid. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"space","in":"query","required":false,"description":"The space: its link, @handle/slug or uuid. (space name)","schema":{"type":"string"}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"emoji":{"type":"string"},"description":{"type":"string"},"visibility":{"type":"string"},"listed":{"type":"boolean"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"url":{"type":"string"},"head":{"type":"object","properties":{"id":{"type":"string"}}},"updated_at":{"type":"string","format":"date-time"},"team_access":{"type":"string"},"design_system":{"type":"string"},"archived":{"type":"boolean"}}},"discussion":{"type":"object","properties":{"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"resolved":{"type":"boolean"},"outcome":{"type":"string"},"latest":{"type":"string"},"active_at":{"type":"string","format":"date-time"}}}},"open":{"type":"integer"},"decided":{"type":"integer"},"active":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"get_space","x-cli-command":"spacesheep spaces get","x-callers":["person","key","connector","connector_read","agent","box"]},"patch":{"operationId":"update_space","summary":"Change a space's title, emoji, description or who can open it, or archive it. Its files don't change.","tags":["SpaceService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space to change. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space to change. (space name)"},"title":{"type":"string","description":"Its title, as lists and link previews show it. (a title; at most 200 characters)"},"emoji":{"type":"string","description":"One emoji. (text; at most 16 characters)"},"description":{"type":"string","description":"One line on what it is. (text; at most 300 characters)"},"visibility":{"type":"string","enum":["private","members","signed_in","public"],"description":"Who can open a space. (one of private, members, signed_in, public)"},"listed":{"type":"boolean","description":"Listed in search and on the owner's profile (public spaces only). (true or false)"},"team":{"type":"string","description":"Its team, when it lives in one. (team name)"},"team_id":{"type":"string","description":"`team` by its id, instead of its name. (team id)"},"team_access":{"type":"string","enum":["view","edit"],"description":"With a team: what its members may do. View (read and comment) when left out. (one of view, edit)"},"design_system":{"type":"string","description":"A design system of yours, by name or id: later edits keep its look. (text)"},"archived":{"type":"boolean","description":"Whether it's archived: put away, not served, out of lists unless asked for. Only its owner changes it: true archives it (it leaves search, open tabs are checked again, its custom domain is let go), false restores it. (true or false)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"emoji":{"type":"string"},"description":{"type":"string"},"visibility":{"type":"string"},"listed":{"type":"boolean"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"url":{"type":"string"},"head":{"type":"object","properties":{"id":{"type":"string"}}},"updated_at":{"type":"string","format":"date-time"},"team_access":{"type":"string"},"design_system":{"type":"string"},"archived":{"type":"boolean"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"422":{"description":"`wrong_kind`: Not on this kind of space: a flock isn't archived, for one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["wrong_kind"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"update_space","x-cli-command":"spacesheep spaces update","x-callers":["person","key","connector","agent","box"]},"delete":{"operationId":"delete_space","summary":"Delete a space and every file in it, for good. Owner only.","tags":["SpaceService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"space","in":"query","required":false,"description":"The space: its address, @handle/slug, or its link. (space name)","schema":{"type":"string"}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"422":{"description":"`signed_space`: It has a signed version or an open signature request, so it can't be deleted. Archive it instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["signed_space"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"delete_space","x-cli-command":"spacesheep spaces delete","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces:search":{"get":{"operationId":"search_spaces","summary":"Find spaces by the words inside them, not just their titles: yours, or every listed public space.","tags":["SpaceService"],"parameters":[{"name":"query","in":"query","required":true,"description":"What to look for, in words. (text; at most 500 characters)","schema":{"type":"string"}},{"name":"scope","in":"query","required":false,"description":"Where a search looks. (one of mine, public)","schema":{"type":"string","enum":["mine","public"]}},{"name":"after","in":"query","required":false,"description":"Where to start: the last answer's `next`. From the start when left out. (text)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many at most; 50 when left out, for every list. (integer; 1 to 200)","schema":{"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"spaces":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"emoji":{"type":"string"},"description":{"type":"string"},"visibility":{"type":"string"},"listed":{"type":"boolean"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"url":{"type":"string"},"head":{"type":"object","properties":{"id":{"type":"string"}}},"updated_at":{"type":"string","format":"date-time"},"team_access":{"type":"string"},"design_system":{"type":"string"},"archived":{"type":"boolean"}}}},"page":{"type":"object","properties":{"next":{"type":"string"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["insufficient_scope"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}},"503":{"description":"`unavailable`: A service behind the call is down or unreachable. Try again soon.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unavailable"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"search_spaces","x-cli-command":"spacesheep spaces search","x-callers":["person","key","read_key","connector","connector_read","agent","box"]}},"/v1/spaces/{space_id}:share":{"post":{"operationId":"share_space","summary":"Share a space with people by email or @handle. They can read and comment, unless you pass `role: edit`.","tags":["SpaceService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space: its address, @handle/slug, or its link. (space name)"},"people":{"type":"array","items":{"type":"string"},"description":"Who: emails or @handles. (list of person name)"},"people_ids":{"type":"array","items":{"type":"string"},"description":"`people` by their ids, instead of their names. (list of person id)"},"role":{"type":"string","enum":["edit","view"],"description":"What they may do; view when left out. (one of edit, view)"}},"additionalProperties":false,"required":[],"allOf":[{"anyOf":[{"required":["people"]},{"required":["people_ids"]}]}]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"shared":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"refused":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"share_space","x-cli-command":"spacesheep spaces share","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces/{space_id}/versions":{"get":{"operationId":"list_versions","summary":"A space's history, newest first: each version's label, time, author and what published it.","tags":["VersionService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"space","in":"query","required":false,"description":"The space: its address, @handle/slug, or its link. (space name)","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Where to start: the last answer's `next`. From the start when left out. (text)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many at most; 50 when left out, for every list. (integer; 1 to 200)","schema":{"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"versions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}}},"page":{"type":"object","properties":{"next":{"type":"string"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"list_versions","x-cli-command":"spacesheep versions list","x-callers":["person","key","read_key","connector","connector_read","agent","box"]},"post":{"operationId":"create_version","summary":"Publish a new version of a space you can edit: its whole set of files, or exact changes to the current ones.","tags":["VersionService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space: its address, @handle/slug, or its link. (space name)"},"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Its path inside the space: index.html, img/hero.jpg. (text; at most 512 characters)"},"content":{"type":"string","description":"Text, as it is. (HTML)"},"staged_sha":{"type":"string","pattern":"^[0-9a-f]{12}$","description":"What an upload staged: its staged sha. (text)"},"data":{"type":"string","description":"Small binary files only; anything bigger goes through an upload. (bytes)"}},"required":["path"],"additionalProperties":false},"description":"Every file of the new version; leave out to send replacements instead. (list of files)"},"label":{"type":"string","description":"What this version is, in a few words. (text; at most 80 characters)"},"parent":{"type":"string","description":"The version you read. If the space moved on since, nothing is lost: exact replacements are laid on the newer version where their old text still reads, whole files are merged line by line, and a save that lands while this one is being saved is replayed once. Only a real clash is refused, as `conflict` naming the server's version. Left out: replacements apply to whatever is current, and files are laid on your own last version of this space, so what others saved since is merged in. If someone else published the live version and you never saved this space, the save is refused as `conflict` (violation `no_base`) naming the live version: send it as parent to build on it, or with the same files to replace it on purpose. (version id)"},"replacements":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Its file; index.html when left out. (text)"},"old_string":{"type":"string","description":"The words to find, exactly. They must appear once, unless replace_all. (text)"},"new_string":{"type":"string","description":"What goes in their place; empty deletes them. (text)"},"replace_all":{"type":"boolean","description":"Replace every match, not just one. (true or false)"}},"required":["old_string"],"additionalProperties":false},"description":"Exact changes to the current files, instead of sending every file. (list of replacements)"},"client":{"type":"object","properties":{"name":{"type":"string","description":"Your harness, lowercase: claude-code, codex, opencode, grok, gemini-cli, cursor, chatgpt. (text)"},"version":{"type":"string","description":"Your harness's version. (text)"},"model":{"type":"string","description":"The model id you run as, if you know it. (text)"},"session_id":{"type":"string","description":"Your harness's session id, only one you actually read. (text)"},"machine":{"type":"string","description":"The machine's hostname. (text)"},"url":{"type":"string","description":"A link that opens this session, if your harness gives one. (text)"},"account_id":{"type":"string","description":"The harness account's id, never an email. (text)"},"org_id":{"type":"string","description":"That account's org or workspace id. (text)"},"repo":{"type":"string","description":"The working directory's git remote. (text)"},"branch":{"type":"string","description":"Its branch. (text)"},"commit":{"type":"string","description":"Its short HEAD sha. (text)"},"extra":{"type":"object","description":"Other small facts that identify the session (entrypoint, OS); never secrets. (JSON object)"},"transport":{"type":"string","description":"Set by the server from the door the call came through; ignored if sent: mcp, api or cli. (text)"},"user_agent":{"type":"string","description":"Set by the server: the request's User-Agent, cut to 200 characters; ignored if sent. (text)"},"other":{"type":"string","description":"Set by the server: what else saved it, in today's `via` words (edit, viewer, agent, automation, memory...); ignored if sent. (text)"}},"additionalProperties":false,"description":"What published it: your harness, session and machine. (client)"},"background":{"type":"boolean","description":"For scheduled refreshes: saved without moving the space up in Recent. (true or false)"},"live_patch":{"type":"array","items":{"type":"object"},"description":"The edits you already showed with a live push: the save is announced as them, so open tabs don't reload. (list of JSON object)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}},"space":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"title":{"type":"string"},"emoji":{"type":"string"},"description":{"type":"string"},"visibility":{"type":"string"},"listed":{"type":"boolean"},"owner":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"team":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"url":{"type":"string"},"head":{"type":"object","properties":{"id":{"type":"string"}}},"updated_at":{"type":"string","format":"date-time"},"team_access":{"type":"string"},"design_system":{"type":"string"},"archived":{"type":"boolean"}}},"outcome":{"type":"string"}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`content_blocked`: Screening refused the content (credentials sent to another site). Change it, or ask support to review it.\n\n`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["content_blocked","forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"409":{"description":"`conflict`: The space has a newer version than your save builds on. Read it again, keep both changes, send it as parent.\n\n`turn_held`: Someone's Shepherd is changing this space now. Wait for that turn to end, read it again, then resend.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["conflict","turn_held"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`quota_exceeded`: A limit is reached: the day's publish budget, your share lists, a team's seats or a discussion's posts.\n\n`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["quota_exceeded","rate_limited"]}}}}}},"451":{"description":"`suspended`: The space was taken down, so it can't be changed. The message says where to appeal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["suspended"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.\n\n`publish_failed`: The publish didn't finish, and nothing was saved. Try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal","publish_failed"]}}}}}},"503":{"description":"`unavailable`: A service behind the call is down or unreachable. Try again soon.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unavailable"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_version","x-cli-command":"spacesheep versions create","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces/{space_id}/versions/{version_id}:restore":{"post":{"operationId":"restore_version","summary":"Make an older version the current one again, as a new version. Nothing in the history is lost.","tags":["VersionService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"version_id","in":"path","required":true,"description":"A version of a space: its sha.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space: its address, @handle/slug, or its link. (space name)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"created_at":{"type":"string","format":"date-time"},"client":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"model":{"type":"string"},"session_id":{"type":"string"},"machine":{"type":"string"},"url":{"type":"string"},"account_id":{"type":"string"},"org_id":{"type":"string"},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":"string"},"extra":{"type":"array","items":{"type":"object"}},"transport":{"type":"string"},"user_agent":{"type":"string"},"other":{"type":"string"}}}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`content_blocked`: Screening refused the content (credentials sent to another site). Change it, or ask support to review it.\n\n`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["content_blocked","forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"409":{"description":"`turn_held`: Someone's Shepherd is changing this space now. Wait for that turn to end, read it again, then resend.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["turn_held"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"451":{"description":"`suspended`: The space was taken down, so it can't be changed. The message says where to appeal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["suspended"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.\n\n`publish_failed`: The publish didn't finish, and nothing was saved. Try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal","publish_failed"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"restore_version","x-cli-command":"spacesheep versions restore","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces/{space_id}/files":{"get":{"operationId":"list_files","summary":"A space's files and their paths: the current version, or an older one.","tags":["FileService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"space","in":"query","required":false,"description":"The space: its address, @handle/slug, or its link. (space name)","schema":{"type":"string"}},{"name":"version","in":"query","required":false,"description":"An older version; the current one when left out. (version id)","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Where to start: the last answer's `next`. From the start when left out. (text)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many at most; 50 when left out, for every list. (integer; 1 to 200)","schema":{"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"content":{"type":"string"},"staged_sha":{"type":"string"},"data":{"type":"string"}}}},"version":{"type":"object","properties":{"id":{"type":"string"}}},"page":{"type":"object","properties":{"next":{"type":"string"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"list_files","x-cli-command":"spacesheep files list","x-callers":["person","key","read_key","connector","connector_read","agent","box"]}},"/v1/spaces/{space_id}/files/{file}":{"get":{"operationId":"get_file","summary":"One file of a space: its contents in the current version, or an older one.","tags":["FileService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"file","in":"path","required":true,"description":"Its path inside the space: index.html, img/hero.jpg. It takes the rest of the path, slashes and all.","schema":{"type":"string"}},{"name":"space","in":"query","required":false,"description":"The space: its address, @handle/slug, or its link. (space name)","schema":{"type":"string"}},{"name":"version","in":"query","required":false,"description":"An older version; the current one when left out. (version id)","schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"From this character on, 60,000 at a time, for a file too long to read whole. Any offset given, 0 included, reads a part; left out, the whole file. (64-bit whole number; at least 0)","schema":{"type":["integer","string"],"pattern":"^-?[0-9]+$"}},{"name":"query","in":"query","required":false,"description":"A JSONata expression run over the file on the server; only its result comes back. (text; at most 2,000 characters)","schema":{"type":"string"}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"object","properties":{"path":{"type":"string"},"content":{"type":"string"},"staged_sha":{"type":"string"},"data":{"type":"string"}}},"version":{"type":"object","properties":{"id":{"type":"string"}}},"next_offset":{"type":"string","pattern":"^-?[0-9]+$"}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"422":{"description":"`answer_too_large`: The answer is too big for this call (over 1 MB). Open the space's address instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["answer_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"get_file","x-cli-command":"spacesheep files get","x-callers":["person","key","read_key","connector","connector_read","agent","box"]}},"/v1/me/uploads":{"post":{"operationId":"create_upload","summary":"Links to upload big files to before you publish: PUT each file, then name it by its staged sha.","tags":["UploadService"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"What you're about to publish, for whoever reviews the call. (text; at most 200 characters)"},"space":{"type":"string","description":"The space it updates, when it updates one. (space name)"},"space_id":{"type":"string","description":"`space` by its id, instead of its name. (space id)"},"visibility":{"type":"string","enum":["private","members","signed_in","public"],"description":"Who will open it, for whoever reviews the call; the publish decides. (one of private, members, signed_in, public)"},"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Its path inside the space. (text)"},"size":{"type":["integer","string"],"pattern":"^-?[0-9]+$","description":"Its size in bytes. (64-bit whole number)"},"staged_sha":{"type":"string","description":"Its staged sha, when you have one. (text)"}},"required":["path"],"additionalProperties":false},"description":"For a big site: every file you're about to upload, so the answer can refuse it now, not after the upload. (list of planned files)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"upload":{"type":"object","properties":{"id":{"type":"string"},"upload_url":{"type":"string"},"browser_upload_url":{"type":"string"},"expires_at":{"type":"string","format":"date-time"}}},"preflight":{"type":"array","items":{"type":"string"}},"already_staged":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_upload","x-cli-command":"spacesheep uploads create","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces/{space_id}/comments":{"get":{"operationId":"list_comments","summary":"A space's comments, in the order they sit in the space, with their threads.","tags":["CommentService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"space","in":"query","required":false,"description":"The space: its address, @handle/slug, or its link. (space name)","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Where to start: the last answer's `next`. From the start when left out. (text)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many at most; 50 when left out, for every list. (integer; 1 to 200)","schema":{"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"body":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"block":{"type":"string"},"quote":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"resolved":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"}}}},"page":{"type":"object","properties":{"next":{"type":"string"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"list_comments","x-cli-command":"spacesheep comments list","x-callers":["person","key","read_key","connector","connector_read","agent","box"]},"post":{"operationId":"create_comment","summary":"Comment on a space: on the whole space, or pinned to a block. Write @spacesheep to ask its agent.","tags":["CommentService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space: its address, @handle/slug, or its link. (space name)"},"body":{"type":"string","description":"What it says. Set when it's posted; only its author changes it, in the viewer. (Markdown; at most 10,000 characters)"},"block":{"type":"string","description":"The block it's pinned to (its data-ss-id); empty for the whole space. (text)"},"quote":{"type":"string","description":"The words it quotes. (text; at most 2,000 characters)"},"reply_to":{"type":"string","description":"The comment it answers, in a thread. (comment id)"},"resolved":{"type":"boolean","description":"Its thread is resolved: true resolves a top-level comment's thread, false reopens it. (true or false)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"object","properties":{"id":{"type":"string"},"body":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"block":{"type":"string"},"quote":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"resolved":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"429":{"description":"`rate_limited`: Too many calls too fast. Wait as long as Retry-After or the message says, then send again.","headers":{"Retry-After":{"description":"With `rate_limited`: how many seconds to wait before sending again.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["rate_limited"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"create_comment","x-cli-command":"spacesheep comments create","x-callers":["person","key","connector","agent","box"]}},"/v1/spaces/{space_id}/comments/{comment_id}":{"patch":{"operationId":"update_comment","summary":"Resolve a comment's thread, or reopen it. You say the state you want, so sending it twice changes nothing.","tags":["CommentService"],"parameters":[{"name":"space_id","in":"path","required":true,"description":"The space: its address, @handle/slug, or its link. A name (not an id) goes here and in `space` too, as one path segment: a `/` is `%2F`.","schema":{"type":"string"}},{"name":"comment_id","in":"path","required":true,"description":"The comment to change.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"space":{"type":"string","description":"The space: its address, @handle/slug, or its link. (space name)"},"resolved":{"type":"boolean","description":"Its thread is resolved: true resolves a top-level comment's thread, false reopens it. (true or false)"}},"additionalProperties":false,"required":[]}}}},"responses":{"200":{"description":"Done: the call's answer.","content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"object","properties":{"id":{"type":"string"},"body":{"type":"string"},"author":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"block":{"type":"string"},"quote":{"type":"string"},"reply_to":{"type":"object","properties":{"id":{"type":"string"}}},"resolved":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"}}}}}}}},"400":{"description":"`invalid`: An input broke a rule (`violations` names it when it can). Fix it and send again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["invalid"]}}}}}},"401":{"description":"`unauthenticated`: No credential, or one that expired or was revoked. Sign in, or send a valid key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["unauthenticated"]}}}}}},"403":{"description":"`forbidden`: This account, or this kind of connection, may not do this here. Resending won't help.\n\n`insufficient_scope`: This key opens only streams or session hooks, never calls. Use a full key.\n\n`read_only_grant`: This read-only connection (a read key, or a spacesheep:read grant) can't make this call. Use a full key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["forbidden","insufficient_scope","read_only_grant"]}}}}}},"404":{"description":"`not_found`: Nothing by that name or id here: no such space, version, file, comment, post, list, team or member.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["not_found"]}}}}}},"413":{"description":"`payload_too_large`: Too big: over the request's size cap, or over the plan's limits on files and bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["payload_too_large"]}}}}}},"500":{"description":"`internal`: Something failed on spacesheep's side; the call may not have finished. Read before you try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorInfo","properties":{"code":{"enum":["internal"]}}}}}}},"security":[{"bearer":[]},{"session":[]}],"x-mcp-tool":"update_comment","x-cli-command":"spacesheep comments update","x-callers":["person","key","connector","agent","box"]}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"A spacesheep key (`ss_…`, from Settings → API keys), or an OAuth access token from a connected app."},"session":{"type":"apiKey","in":"cookie","name":"ss_app","description":"A signed-in browser session on spacesheep. A write sent from another site is refused."}},"schemas":{"ErrorInfo":{"type":"object","description":"Why a call was refused.","required":["code","message","violations"],"properties":{"code":{"type":"string","enum":["invalid","unauthenticated","forbidden","read_only_grant","insufficient_scope","content_blocked","not_found","conflict","turn_held","payload_too_large","signed_space","wrong_kind","answer_too_large","rate_limited","quota_exceeded","suspended","publish_failed","internal","unimplemented","unavailable"],"description":"A word a program can branch on. What each one means is in the responses that give it."},"message":{"type":"string","description":"One sentence for a person."},"violations":{"type":"array","description":"The inputs that broke a rule, when the refusal can name them.","items":{"type":"object","required":["field","message"],"properties":{"field":{"type":"string","description":"The input, as a dotted path."},"message":{"type":"string","description":"What's wrong with it."}}}}}}}}}